<?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>56935</bug_id>
          
          <creation_ts>2011-03-23 10:32:51 -0700</creation_ts>
          <short_desc>[Qt] Implement accelerated compositing on WK2 Qt port</short_desc>
          <delta_ts>2011-12-06 17:03:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>47070</dependson>
    
    <dependson>60621</dependson>
    
    <dependson>61694</dependson>
    
    <dependson>61925</dependson>
    
    <dependson>68808</dependson>
    
    <dependson>68897</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Viatcheslav Ostapenko">ostap73</reporter>
          <assigned_to name="Noam Rosenthal">noam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>christian.webkit</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>eric</cc>
    
    <cc>girish</cc>
    
    <cc>hausmann</cc>
    
    <cc>igor.oliveira</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>noam</cc>
    
    <cc>ossy</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yael</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>372244</commentid>
    <comment_count>0</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2011-03-23 10:32:51 -0700</bug_when>
    <thetext>Need to implement accelerated compositing on WK2 Qt port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372256</commentid>
    <comment_count>1</comment_count>
      <attachid>86643</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2011-03-23 10:43:56 -0700</bug_when>
    <thetext>Created attachment 86643
Texture mapper based implementation of AC for WK2.

1st version for comments.

1. GL implementation doesn&apos;t work (and switched off).
2. Needs extra cleanup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372298</commentid>
    <comment_count>2</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2011-03-23 11:41:45 -0700</bug_when>
    <thetext>I&apos;m going to preemptively r- this. Noam should be the one upstreaming this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372316</commentid>
    <comment_count>3</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2011-03-23 12:03:56 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; I&apos;m going to preemptively r- this. 

I even didn&apos;t ask for review ;)

&gt; Noam should be the one upstreaming this.

We&apos;ve discussed this in email with Noam. I&apos;ll do the dirty job of merging and making it work on desktop. As Benjamin have suggested on irc, it will go under Noam&apos;s name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372322</commentid>
    <comment_count>4</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-03-23 12:11:08 -0700</bug_when>
    <thetext>Guys, this should be about 5 different patches with very detailed explanations  about the changes, the reasons for them and how things are supposed to work, and also with the will and ability to fix bugs in it if they come up. If that&apos;s not currently possible, please wait until I can get to upstreaming this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372350</commentid>
    <comment_count>5</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2011-03-23 12:32:08 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Guys, this should be about 5 different patches with very detailed explanations  about the changes, the reasons for them and how things are supposed to work, and also with the will and ability to fix bugs in it if they come up. If that&apos;s not currently possible, please wait until I can get to upstreaming this.

I agree 100%. I also think this bug would be a nice place to comment on how this approach relates to the other work that&apos;s going on in trunk regarding AC, to spread some AC knowledge.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372718</commentid>
    <comment_count>6</comment_count>
      <attachid>86643</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-03-24 01:52:02 -0700</bug_when>
    <thetext>Comment on attachment 86643
Texture mapper based implementation of AC for WK2.

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

&gt; Source/WebCore/page/ChromeClient.h:42
&gt; +#if PLATFORM(MAC)
&gt; +#include &quot;WebCoreKeyboardUIMode.h&quot;
&gt; +#endif
&gt; +

Changes like these appear to be completely unrelated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372788</commentid>
    <comment_count>7</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2011-03-24 06:57:53 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 86643 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=86643&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/ChromeClient.h:42
&gt; &gt; +#if PLATFORM(MAC)
&gt; &gt; +#include &quot;WebCoreKeyboardUIMode.h&quot;
&gt; &gt; +#endif
&gt; &gt; +
&gt; 
&gt; Changes like these appear to be completely unrelated.

Yes. I missed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372808</commentid>
    <comment_count>8</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2011-03-24 07:29:37 -0700</bug_when>
    <thetext>there&apos;s plenty of unrelated changes in this mega patch including layout, drawing area, geolocation and touch event items.

virtual void invalidateFixedLayoutSize() const { }
virtual void showAnchorActivationCandidate(const Vector&lt;IntRect&gt;&amp;) { }
bool ChromeClientQt::tabsToLinks() const
void ChromeClientQt::requestGeolocationPermissionForFrame and alikes
QGraphicsWKView::prepareScaleChange and alikes
void QGraphicsWKViewPrivate::clearVisualFeedback and alikes
void QWKPagePrivate::createDrawingArea(DrawingAreaType areaType)
void TiledDrawingAreaProxy::updateWebView() and alikes
WebPageProxy::didChangeDrawingAreaType(uint64_t areaID) and alikes
TiledDrawingArea::scheduleTileUpdate() and alikes
etc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419358</commentid>
    <comment_count>9</comment_count>
      <attachid>96896</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-06-12 17:40:13 -0700</bug_when>
    <thetext>Created attachment 96896
Patch 1: WebLayerTreeInfo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419360</commentid>
    <comment_count>10</comment_count>
      <attachid>96897</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-06-12 17:47:18 -0700</bug_when>
    <thetext>Created attachment 96897
Patch 2: WebGraphicsLayer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419407</commentid>
    <comment_count>11</comment_count>
      <attachid>96914</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-06-12 20:15:54 -0700</bug_when>
    <thetext>Created attachment 96914
Patch 3: Expose ShareableImage::createImage() for directly composited images</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419410</commentid>
    <comment_count>12</comment_count>
      <attachid>96915</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-06-12 20:49:32 -0700</bug_when>
    <thetext>Created attachment 96915
Patch 4: Expose webViewVisibleRect, so that we can avoid rendering texture outside of our view.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419548</commentid>
    <comment_count>13</comment_count>
      <attachid>96896</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-06-13 07:33:20 -0700</bug_when>
    <thetext>Comment on attachment 96896
Patch 1: WebLayerTreeInfo

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

&gt; Source/WebKit2/Shared/WebLayerTreeInfo.cpp:36
&gt; +    encoder-&gt;encode(CoreIPC::In(id, name, parent, children, flags, replica, mask));
&gt; +    encoder-&gt;encode(CoreIPC::In(pos, size, transform, opacity, anchorPoint, childrenTransform, contentsRect));

Any reason why these are encoded separately?

&gt; Source/WebKit2/Shared/WebLayerTreeInfo.h:58
&gt; +    FloatPoint pos;

Dont we normally use location() in WebCore ?

&gt; Source/WebKit2/Shared/WebLayerTreeInfo.h:64
&gt; +    FloatSize size;
&gt; +    TransformationMatrix transform;
&gt; +    TransformationMatrix childrenTransform;
&gt; +    IntRect contentsRect;
&gt; +    float opacity;

how is size different from contentsRect.size() ?

&gt; Source/WebKit2/Shared/WebLayerTreeInfo.h:86
&gt; +    Vector&lt;WebLayerInfo&gt; layers;
&gt; +    Vector&lt;WebLayerID&gt; deletedLayers;

Both are called layers, though one is a vector of layer ids and the one of of layer infos. A bit confusing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419554</commentid>
    <comment_count>14</comment_count>
      <attachid>96897</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-06-13 07:44:15 -0700</bug_when>
    <thetext>Comment on attachment 96897
Patch 2: WebGraphicsLayer

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

&gt; Source/WebKit2/ChangeLog:11
&gt; +        Added WebGraphicsLayer, a subclass of WebCore::GraphicsLayer that serializes the
&gt; +        state of the layer tree to the UI process WebLayerTreeInfo.
&gt; +        For now this patch doesn&apos;t serialize the animation information, a feature that will be upstreamed
&gt; +        later on.

You line length quite different per line :-)

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:44
&gt; +static HashMap&lt;WebLayerID, WebGraphicsLayer*&gt;&amp; layerByIDTable()

I believe we normally would call this a map and not a table

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:46
&gt; +    static HashMap&lt;WebLayerID, WebGraphicsLayer*&gt; sLayerByIDTable;

I have never seen the sLayer... style, gLayer or s_layer or similar is the most used way to declare statics. But as it is internal anyway, why not just call it globalMap or so.

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:85
&gt; +    static WebLayerID sID = 1000;

Add comment why you start at 1000

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:263
&gt; +bool WebGraphicsLayer::addAnimation(const KeyframeValueList&amp; valueList, const IntSize&amp; boxSize, const Animation* anim, const String&amp; keyframesName, double timeOffset)
&gt; +{
&gt; +    return false;
&gt; +}

Maybe belongs in the header?

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:283
&gt; +}
&gt; +void WebGraphicsLayer::setMaskLayer(GraphicsLayer* layer)

some missing new line

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:288
&gt; +    notifyChange();
&gt; +}
&gt; +void WebGraphicsLayer::setReplicatedByLayer(GraphicsLayer* layer)

other places as well

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:391
&gt; +    static const float gDimension = 1024.0;

Shouldnt this be define at the top or so?

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:404
&gt; +    WebGraphicsLayer* layerWK2 = toWebGraphicsLayer(layer);

Why not just call it layer? I dont see what the WK2 adds

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:418
&gt; +static void collectCompositingInfoRecursive(GraphicsLayer* rootLayer, WebLayerTreeInfo&amp; outInfo, Vector&lt;WebGraphicsLayer*&gt;&amp; outLayers)

REcursively?

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:431
&gt; +void WebGraphicsLayer::sendLayersToUI(WebCore::GraphicsLayer* rootLayer, WebPage* webPage)

ToUIProcess?

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:449
&gt; +        WebGraphicsLayer* layerWK2 = layers[i];

layer*

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.h:67
&gt; +    void pauseAnimation(const String&amp; /*animationName*/, double /*timeOffset*/);

this is a header, please just write animationName and leave out the /* */s</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419557</commentid>
    <comment_count>15</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2011-06-13 07:50:36 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.h:67
&gt; &gt; +    void pauseAnimation(const String&amp; /*animationName*/, double /*timeOffset*/);
&gt; 
&gt; this is a header, please just write animationName and leave out the /* */s

I&apos;m sorry, but check-webkit-style script insists on not having parameter names in .h files - just parameter types. Removing /* */ will make it cry ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419558</commentid>
    <comment_count>16</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-06-13 07:52:33 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt; &gt; Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.h:67
&gt; &gt; &gt; +    void pauseAnimation(const String&amp; /*animationName*/, double /*timeOffset*/);
&gt; &gt; 
&gt; &gt; this is a header, please just write animationName and leave out the /* */s
&gt; 
&gt; I&apos;m sorry, but check-webkit-style script insists on not having parameter names in .h files - just parameter types. Removing /* */ will make it cry ;)

Well it should be fixed then, as that should be totally ok in header files. Also the script is just educational.

Or did our style guide change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419582</commentid>
    <comment_count>17</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-06-13 08:37:11 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 96896 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=96896&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/Shared/WebLayerTreeInfo.cpp:36
&gt; &gt; +    encoder-&gt;encode(CoreIPC::In(id, name, parent, children, flags, replica, mask));
&gt; &gt; +    encoder-&gt;encode(CoreIPC::In(pos, size, transform, opacity, anchorPoint, childrenTransform, contentsRect));
&gt; 
&gt; Any reason why these are encoded separately?
You can&apos;t encode more than 10 arguments.

&gt; 
&gt; &gt; Source/WebKit2/Shared/WebLayerTreeInfo.h:58
&gt; &gt; +    FloatPoint pos;
&gt; 
&gt; Dont we normally use location() in WebCore ?
No, we use pos. See GraphicsLayer.h

&gt; 
&gt; &gt; Source/WebKit2/Shared/WebLayerTreeInfo.h:64
&gt; &gt; +    FloatSize size;
&gt; &gt; +    TransformationMatrix transform;
&gt; &gt; +    TransformationMatrix childrenTransform;
&gt; &gt; +    IntRect contentsRect;
&gt; &gt; +    float opacity;
&gt; 
&gt; how is size different from contentsRect.size() ?
Very different. A layer with a directly composited image can show an image at 10,10,20,20, but clip its children to 0,0,100,100.

&gt; 
&gt; &gt; Source/WebKit2/Shared/WebLayerTreeInfo.h:86
&gt; &gt; +    Vector&lt;WebLayerInfo&gt; layers;
&gt; &gt; +    Vector&lt;WebLayerID&gt; deletedLayers;
&gt; 
&gt; Both are called layers, though one is a vector of layer ids and the one of of layer infos. A bit confusing

OK, will modify to deletedLayerIDs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419583</commentid>
    <comment_count>18</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-06-13 08:37:59 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; &gt; &gt; Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.h:67
&gt; &gt; &gt; &gt; +    void pauseAnimation(const String&amp; /*animationName*/, double /*timeOffset*/);
&gt; &gt; &gt; 
&gt; &gt; &gt; this is a header, please just write animationName and leave out the /* */s
&gt; &gt; 
&gt; &gt; I&apos;m sorry, but check-webkit-style script insists on not having parameter names in .h files - just parameter types. Removing /* */ will make it cry ;)
&gt; 
&gt; Well it should be fixed then, as that should be totally ok in header files. Also the script is just educational.
&gt; 
&gt; Or did our style guide change?
These function defs are actually directly copied from GraphicsLayer.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419600</commentid>
    <comment_count>19</comment_count>
      <attachid>96962</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-06-13 09:39:40 -0700</bug_when>
    <thetext>Created attachment 96962
 Patch 2: WebGraphicsLayer

Addressed Kenneth&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419604</commentid>
    <comment_count>20</comment_count>
      <attachid>96963</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-06-13 09:43:52 -0700</bug_when>
    <thetext>Created attachment 96963
 Patch 1: WebLayerTreeInfo

Addressed Kenneth&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419669</commentid>
    <comment_count>21</comment_count>
      <attachid>96962</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-06-13 10:49:38 -0700</bug_when>
    <thetext>Comment on attachment 96962
 Patch 2: WebGraphicsLayer

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

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:50
&gt; +static const float gTileDimension = 1024.0;

I would put this above the hash map

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:87
&gt; +    static WebLayerID sID = 1000;

Add comment why we start at 1000.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419693</commentid>
    <comment_count>22</comment_count>
      <attachid>96974</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-06-13 11:04:19 -0700</bug_when>
    <thetext>Created attachment 96974
Patch 2: WebGraphicsLayer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419699</commentid>
    <comment_count>23</comment_count>
      <attachid>96963</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-13 11:09:57 -0700</bug_when>
    <thetext>Comment on attachment 96963
 Patch 1: WebLayerTreeInfo

Clearing flags on attachment: 96963

Committed r88655: &lt;http://trac.webkit.org/changeset/88655&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419714</commentid>
    <comment_count>24</comment_count>
      <attachid>96974</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-13 11:22:36 -0700</bug_when>
    <thetext>Comment on attachment 96974
Patch 2: WebGraphicsLayer

Clearing flags on attachment: 96974

Committed r88659: &lt;http://trac.webkit.org/changeset/88659&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420059</commentid>
    <comment_count>25</comment_count>
      <attachid>97035</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-06-13 16:57:29 -0700</bug_when>
    <thetext>Created attachment 97035
Patch 5: LayerTreeContext/LayerTreeHost</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420276</commentid>
    <comment_count>26</comment_count>
      <attachid>97035</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-06-14 01:45:35 -0700</bug_when>
    <thetext>Comment on attachment 97035
Patch 5: LayerTreeContext/LayerTreeHost

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

Great that you are doing the upstreaming No&apos;am!

&gt; Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp:223
&gt; +            static_cast&lt;DrawingAreaImpl*&gt;(m_webPage-&gt;drawingArea())-&gt;layerHostDidFlushLayers();

is there no toDrawing... method?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420279</commentid>
    <comment_count>27</comment_count>
      <attachid>96915</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-06-14 01:58:24 -0700</bug_when>
    <thetext>Comment on attachment 96915
Patch 4: Expose webViewVisibleRect, so that we can avoid rendering texture outside of our view.

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

&gt; Source/WebKit2/UIProcess/PageClient.h:104
&gt; +    virtual WebCore::IntRect webViewVisibleRect() const = 0;

why is this not just called visibleContentRect? we are using that nomenclature elsewhere in webcore. Or why cant the existing method from FrameView be used?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420383</commentid>
    <comment_count>28</comment_count>
      <attachid>96914</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-14 06:54:41 -0700</bug_when>
    <thetext>Comment on attachment 96914
Patch 3: Expose ShareableImage::createImage() for directly composited images

Clearing flags on attachment: 96914

Committed r88797: &lt;http://trac.webkit.org/changeset/88797&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420384</commentid>
    <comment_count>29</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-06-14 06:57:12 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebKit2/WebProcess/WebPage/qt/LayerTreeHostQt.cpp:223
&gt; &gt; +            static_cast&lt;DrawingAreaImpl*&gt;(m_webPage-&gt;drawingArea())-&gt;layerHostDidFlushLayers();
&gt; 
&gt; is there no toDrawing... method?
No, there isn&apos;t :)
Maybe we should add one in a different patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420390</commentid>
    <comment_count>30</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-06-14 07:01:20 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 96915 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=96915&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/PageClient.h:104
&gt; &gt; +    virtual WebCore::IntRect webViewVisibleRect() const = 0;
&gt; 
&gt; why is this not just called visibleContentRect? we are using that nomenclature elsewhere in webcore. 
Because it&apos;s in view coordinates, not taking into account zoom/scroll.
How about visibleContentsRectInViewCoordinates?

&gt; Or why cant the existing method from FrameView be used?
Because FrameView is in the WebProcess only. This is a UI process function that should respond to scrolling/zooming immediately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420392</commentid>
    <comment_count>31</comment_count>
      <attachid>97035</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-14 07:08:07 -0700</bug_when>
    <thetext>Comment on attachment 97035
Patch 5: LayerTreeContext/LayerTreeHost

Clearing flags on attachment: 97035

Committed r88799: &lt;http://trac.webkit.org/changeset/88799&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420393</commentid>
    <comment_count>32</comment_count>
      <attachid>96915</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-06-14 07:10:56 -0700</bug_when>
    <thetext>Comment on attachment 96915
Patch 4: Expose webViewVisibleRect, so that we can avoid rendering texture outside of our view.

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

&gt;&gt;&gt; Source/WebKit2/UIProcess/PageClient.h:104
&gt;&gt;&gt; +    virtual WebCore::IntRect webViewVisibleRect() const = 0;
&gt;&gt; 
&gt;&gt; why is this not just called visibleContentRect? we are using that nomenclature elsewhere in webcore. Or why cant the existing method from FrameView be used?
&gt; 
&gt; Because it&apos;s in view coordinates, not taking into account zoom/scroll.
&gt; How about visibleContentsRectInViewCoordinates?

Actually it is the UI updating the actualVisibleContentRect, so you should have access to that from the UI side.

Maybe this is more like the viewportContentsWindow ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420586</commentid>
    <comment_count>33</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-06-14 11:14:12 -0700</bug_when>
    <thetext>&gt; Actually it is the UI updating the actualVisibleContentRect, so you should have access to that from the UI side.
Again, the transform is different. This was kind of tricky to figure out exactly which Rect we needed, and that&apos;s how we ended up with this one.

btw, TiledDrawingAreaProxy already has a webViewVisibleRect function, that&apos;s where the name came from.

&gt; 
&gt; Maybe this is more like the viewportContentsWindow ?
viewportClipRect? The word contents is a bit confusing because it&apos;s actually about the viewport and not about the contents.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420771</commentid>
    <comment_count>34</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-06-14 15:29:42 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; &gt; Actually it is the UI updating the actualVisibleContentRect, so you should have access to that from the UI side.
&gt; Again, the transform is different. This was kind of tricky to figure out exactly which Rect we needed, and that&apos;s how we ended up with this one.
&gt; 
&gt; btw, TiledDrawingAreaProxy already has a webViewVisibleRect function, that&apos;s where the name came from.

Yeah I know and I never liked it there either :-)

&gt; &gt; Maybe this is more like the viewportContentsWindow ?
&gt; viewportClipRect? The word contents is a bit confusing because it&apos;s actually about the viewport and not about the contents.

It is only used for clipping? viewportRect or similar would be fine I guess</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420795</commentid>
    <comment_count>35</comment_count>
      <attachid>97178</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-06-14 16:00:02 -0700</bug_when>
    <thetext>Created attachment 97178
Patch 4: Expose viewportVisibleRect, so that we can avoid rendering texture outside of our view.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420832</commentid>
    <comment_count>36</comment_count>
      <attachid>97188</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-06-14 16:31:08 -0700</bug_when>
    <thetext>Created attachment 97188
Patch 6: Glue LayerTreeHost to DrawingAreaImpl via a new LayerTreeHostProxy class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420844</commentid>
    <comment_count>37</comment_count>
      <attachid>97192</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-06-14 16:38:26 -0700</bug_when>
    <thetext>Created attachment 97192
Patch 7: Enable WebGraphicsLayer when in the web process</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420866</commentid>
    <comment_count>38</comment_count>
      <attachid>97178</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-14 17:12:41 -0700</bug_when>
    <thetext>Comment on attachment 97178
Patch 4: Expose viewportVisibleRect, so that we can avoid rendering texture outside of our view.

Clearing flags on attachment: 97178

Committed r88880: &lt;http://trac.webkit.org/changeset/88880&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421012</commentid>
    <comment_count>39</comment_count>
      <attachid>97231</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-06-14 22:16:42 -0700</bug_when>
    <thetext>Created attachment 97231
Patch 6: Glue LayerTreeHost with DrawingAreaProxy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421250</commentid>
    <comment_count>40</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-06-15 07:22:04 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (From update of attachment 97035 [details])
&gt; Clearing flags on attachment: 97035
&gt; 
&gt; Committed r88799: &lt;http://trac.webkit.org/changeset/88799&gt;

I had to rollout this patch, because it made webprocess crash.
Guys, you should have run layout tests before landing ...

Rollout patch landed in http://trac.webkit.org/changeset/88926</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421336</commentid>
    <comment_count>41</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2011-06-15 09:01:04 -0700</bug_when>
    <thetext>(In reply to comment #40)
&gt; (In reply to comment #31)
&gt; &gt; (From update of attachment 97035 [details] [details])
&gt; &gt; Clearing flags on attachment: 97035
&gt; &gt; 
&gt; &gt; Committed r88799: &lt;http://trac.webkit.org/changeset/88799&gt;
&gt; 
&gt; I had to rollout this patch, because it made webprocess crash.
&gt; Guys, you should have run layout tests before landing ...
&gt; 
&gt; Rollout patch landed in http://trac.webkit.org/changeset/88926

Very interesting.
The change is completely on UI side and new API is not used yet.

Do you have any pointers what to investigate? What tests have crash?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421346</commentid>
    <comment_count>42</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-06-15 09:08:32 -0700</bug_when>
    <thetext>(In reply to comment #41)
&gt; Very interesting.
&gt; The change is completely on UI side and new API is not used yet.
&gt; 
&gt; Do you have any pointers what to investigate? What tests have crash?

x86-32 Linux Qt Release WebKit2 buildbot is your friend:
http://build.webkit.sed.hu/waterfall</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421383</commentid>
    <comment_count>43</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2011-06-15 09:45:16 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; (In reply to comment #41)
&gt; &gt; Very interesting.
&gt; &gt; The change is completely on UI side and new API is not used yet.
&gt; &gt; 
&gt; &gt; Do you have any pointers what to investigate? What tests have crash?
&gt; 
&gt; x86-32 Linux Qt Release WebKit2 buildbot is your friend:
&gt; http://build.webkit.sed.hu/waterfall

Oh, sorry, looked at wrong patch.
Is AC enabled on WK2 Qt?
This code will crash (if enabled) until https://bugs.webkit.org/show_bug.cgi?id=60621 is committed. DrawingAreaImpl send null image handles in UpdateInfo.
AC should be disabled on Qt Webkit2 until all the patches are done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421388</commentid>
    <comment_count>44</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-06-15 09:47:07 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; (In reply to comment #42)
&gt; &gt; (In reply to comment #41)
&gt; &gt; &gt; Very interesting.
&gt; &gt; &gt; The change is completely on UI side and new API is not used yet.
&gt; &gt; &gt; 
&gt; &gt; &gt; Do you have any pointers what to investigate? What tests have crash?
&gt; &gt; 
&gt; &gt; x86-32 Linux Qt Release WebKit2 buildbot is your friend:
&gt; &gt; http://build.webkit.sed.hu/waterfall
&gt; 
&gt; Oh, sorry, looked at wrong patch.
&gt; Is AC enabled on WK2 Qt?
&gt; This code will crash (if enabled) until https://bugs.webkit.org/show_bug.cgi?id=60621 is committed. DrawingAreaImpl send null image handles in UpdateInfo.
&gt; AC should be disabled on Qt Webkit2 until all the patches are done.

Slava, can you post a patch that disables AC in the WK2 settings?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421430</commentid>
    <comment_count>45</comment_count>
      <attachid>97319</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2011-06-15 10:33:32 -0700</bug_when>
    <thetext>Created attachment 97319
Patch 5: LayerTreeContext/LayerTreeHost with AC disabled by default until null handle problem fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423225</commentid>
    <comment_count>46</comment_count>
      <attachid>96962</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-18 13:31:17 -0700</bug_when>
    <thetext>Comment on attachment 96962
 Patch 2: WebGraphicsLayer

Cleared Kenneth Rohde Christiansen&apos;s review+ from obsolete attachment 96962 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423253</commentid>
    <comment_count>47</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-18 13:50:00 -0700</bug_when>
    <thetext>Attachment 97192 was posted by a committer and has review+, assigning to Noam Rosenthal for commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423270</commentid>
    <comment_count>48</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-06-18 16:15:30 -0700</bug_when>
    <thetext>(In reply to comment #47)
&gt; Attachment 97192 [details] was posted by a committer and has review+, assigning to Noam Rosenthal for commit.

Thank you. Waiting for other patches to be reviewed before committing, as there are interdependencies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444708</commentid>
    <comment_count>49</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-08-01 08:52:17 -0700</bug_when>
    <thetext>The last two patches have been lying here for ages... can someone help review them?
I might need to re-merge before committing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444711</commentid>
    <comment_count>50</comment_count>
      <attachid>97231</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-08-01 09:05:50 -0700</bug_when>
    <thetext>Comment on attachment 97231
Patch 6: Glue LayerTreeHost with DrawingAreaProxy

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

&gt; Source/WebKit2/UIProcess/DrawingAreaProxyImpl.h:41
&gt;  class DrawingAreaProxyImpl : public DrawingAreaProxy {

I am surprised this is implemented in DrawingAreaProxyImpl since that means the implementation is not available for the tiled proxy. Shouldn&apos;t accelerated compositing be independent of the kind of proxy and implemented directly in DrawingAreaProxy?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444775</commentid>
    <comment_count>51</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-08-01 10:58:45 -0700</bug_when>
    <thetext>(In reply to comment #50)
&gt; (From update of attachment 97231 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=97231&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/DrawingAreaProxyImpl.h:41
&gt; &gt;  class DrawingAreaProxyImpl : public DrawingAreaProxy {
&gt; 
&gt; I am surprised this is implemented in DrawingAreaProxyImpl since that means the implementation is not available for the tiled proxy. Shouldn&apos;t accelerated compositing be independent of the kind of proxy and implemented directly in DrawingAreaProxy?

Slava, was there a reason for us not putting this in DrawingAreaProxy?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444785</commentid>
    <comment_count>52</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2011-08-01 11:38:38 -0700</bug_when>
    <thetext>(In reply to comment #51)
&gt; (In reply to comment #50)
&gt; &gt; (From update of attachment 97231 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=97231&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/DrawingAreaProxyImpl.h:41
&gt; &gt; &gt;  class DrawingAreaProxyImpl : public DrawingAreaProxy {
&gt; &gt; 
&gt; &gt; I am surprised this is implemented in DrawingAreaProxyImpl since that means the implementation is not available for the tiled proxy. Shouldn&apos;t accelerated compositing be independent of the kind of proxy and implemented directly in DrawingAreaProxy?
&gt; 
&gt; Slava, was there a reason for us not putting this in DrawingAreaProxy?

I have implementation for tiled proxy. As I remember, we agreed to put it later, because layout tests work with DrawingAreaProxy only.

Code is here: https://gitorious.org/~ostapru/webkit/sls-webkit/blobs/wk2_merge6/Source/WebKit2/UIProcess/TiledDrawingAreaProxy.cpp

It just few lines to make it work with TiledDrawingArea because it uses the same LayerTreeHostProxy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444824</commentid>
    <comment_count>53</comment_count>
      <attachid>97231</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-08-01 13:16:50 -0700</bug_when>
    <thetext>Comment on attachment 97231
Patch 6: Glue LayerTreeHost with DrawingAreaProxy

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

Quick review. This patch needs some cleaning.

&gt; Source/WebKit2/UIProcess/DrawingAreaProxy.h:97
&gt; +    virtual void updateWebView() { }
&gt; +    virtual WebCore::IntRect viewportVisibleRect() const { return WebCore::IntRect(); }
&gt; +    virtual WebCore::IntRect contentsRect() const = 0;
&gt; +    virtual float contentsScale() const = 0;
&gt; +    virtual bool backingStoreReady() const { return false; }

Let&apos;s refactor that to share as much as possible between the two proxies.
What can be implemented in DrawingAreaProxy should be implemented here, including the LayerTreeHostProxy. The methods that are specific to a view should be pure virtual.


&gt; Source/WebKit2/UIProcess/DrawingAreaProxyImpl.h:83
&gt; +    DrawingAreaProxy* drawingAreaProxy() { return this; }

What the fuck???

&gt; Source/WebKit2/UIProcess/DrawingAreaProxyImpl.h:84
&gt; +    WebPageProxy* webPageProxy() const { return m_webPageProxy; }

Wait, what?

&gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:62
&gt; +    GraphicsLayer* layerByID(WebLayerID id) { return id ? m_layers.get(id).layer : 0; }

It is a bit mysterious why the id 0 cannot be associated with a layer. Usually the IDs of WK2 can wrap around when it overflows and the 0 is not a special value.
Out of curiousity, where are those IDs defined?

&gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:41
&gt; +GraphicsLayer* LayerTreeHostProxy::createLayer()
&gt; +{
&gt; +    return new GraphicsLayerTextureMapper(this);
&gt; +}

This is an open invitation for leaks, the return type should be PassOwnPtr. :)

&gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:52
&gt; +        if (!m_layers.contains(id))
&gt; +            continue;
&gt; +        delete m_layers.get(id).layer;
&gt; +        m_layers.remove(id);

You are doing 3 lookup of the exact same instance. It is O(1) each time but that is not free.
Use HashMap::find() to keep a reference on the value through the iterator.

&gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:58
&gt; +    for (LayerMap::iterator it = m_layers.begin(); it != m_layers.end(); ++it) {

We usually use a local variable for the end iterator since iterators are not necessarily free to instanciate.

&gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:60
&gt; +        if (it-&gt;second.layer != layer)
&gt; +            continue;

This pattern is weird and will get very ineffective if there can be many layer.
What is the call site for this method? It seems it should take an ID as a parameter instead of the layer. Alternatively, a second hashmap could be maintained for the painting case.

&gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:87
&gt; +LayerTreeHostProxy::~LayerTreeHostProxy()
&gt; +{
&gt; +}

I think you can skip writing this :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445489</commentid>
    <comment_count>54</comment_count>
      <attachid>97192</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-08-02 13:29:19 -0700</bug_when>
    <thetext>Comment on attachment 97192
Patch 7: Enable WebGraphicsLayer when in the web process

This needs to be refactored for Qt5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445490</commentid>
    <comment_count>55</comment_count>
      <attachid>97192</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-08-02 13:29:19 -0700</bug_when>
    <thetext>Comment on attachment 97192
Patch 7: Enable WebGraphicsLayer when in the web process

This needs to be refactored for Qt5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445491</commentid>
    <comment_count>56</comment_count>
      <attachid>97231</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-08-02 13:29:37 -0700</bug_when>
    <thetext>Comment on attachment 97231
Patch 6: Glue LayerTreeHost with DrawingAreaProxy

This needs to be refactored for Qt5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450505</commentid>
    <comment_count>57</comment_count>
      <attachid>97319</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-08-12 10:50:47 -0700</bug_when>
    <thetext>Comment on attachment 97319
Patch 5: LayerTreeContext/LayerTreeHost with AC disabled by default until null handle problem fixed.

This doesn&apos;t compile anymore; and it would have to be re-tested with Qt5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450686</commentid>
    <comment_count>58</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-08-12 14:52:38 -0700</bug_when>
    <thetext>&gt; 
&gt; &gt; Source/WebKit2/UIProcess/DrawingAreaProxyImpl.h:84
&gt; &gt; +    WebPageProxy* webPageProxy() const { return m_webPageProxy; }
&gt; 
&gt; Wait, what?
What exactly is the issue with this? We need to expose the proxy so that the layerTreeHostProxy can access it.


&gt; &gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:41
&gt; &gt; +GraphicsLayer* LayerTreeHostProxy::createLayer()
&gt; &gt; +{
&gt; &gt; +    return new GraphicsLayerTextureMapper(this);
&gt; &gt; +}
&gt; 
&gt; This is an open invitation for leaks, the return type should be PassOwnPtr. 
No can do. I&apos;m saving the result in a HashMap; OwnPtrs are not copyable. Any other suggestion? I can start RefPtring everything but it&apos;s a mess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450710</commentid>
    <comment_count>59</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-08-12 15:39:49 -0700</bug_when>
    <thetext>(In reply to comment #58)
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/DrawingAreaProxyImpl.h:84
&gt; &gt; &gt; +    WebPageProxy* webPageProxy() const { return m_webPageProxy; }
&gt; &gt; 
&gt; &gt; Wait, what?
&gt; What exactly is the issue with this? We need to expose the proxy so that the layerTreeHostProxy can access it.

It is private...
Exposing an attribute through a private accessor? ;)

&gt; &gt; &gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:41
&gt; &gt; &gt; +GraphicsLayer* LayerTreeHostProxy::createLayer()
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    return new GraphicsLayerTextureMapper(this);
&gt; &gt; &gt; +}
&gt; &gt; 
&gt; &gt; This is an open invitation for leaks, the return type should be PassOwnPtr. 
&gt; No can do. I&apos;m saving the result in a HashMap; OwnPtrs are not copyable. Any other suggestion? I can start RefPtring everything but it&apos;s a mess.

That is a common pattern in WebKit, you can still use OwnPtr.

You keep it as a OwnPtr as far as you can, and manage the memory manually when you use it in the HashMap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450728</commentid>
    <comment_count>60</comment_count>
      <attachid>103834</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-08-12 15:55:14 -0700</bug_when>
    <thetext>Created attachment 103834
Patch: Enable accelerated compositing for QDesktopWebView 

As a step towards enabling AC with tiling, we first of all want to finalize the cross-process aspect of accelerated compositing on Qt WebKit2.
This approach uses LayerTreeHost when the page is in compositing mode, deferring all rendering at that point to TextureMapper.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450731</commentid>
    <comment_count>61</comment_count>
      <attachid>103835</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-08-12 15:56:52 -0700</bug_when>
    <thetext>Created attachment 103835
Patch: Enable accelerated compositing for QDesktopWebView 

(see above comments)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450737</commentid>
    <comment_count>62</comment_count>
      <attachid>103835</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-12 16:09:20 -0700</bug_when>
    <thetext>Comment on attachment 103835
Patch: Enable accelerated compositing for QDesktopWebView 

Attachment 103835 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/9384033</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450743</commentid>
    <comment_count>63</comment_count>
      <attachid>103839</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-08-12 16:18:35 -0700</bug_when>
    <thetext>Created attachment 103839
Patch: Enable accelerated compositing for QDesktopWebView

#ifdef&apos;ed an #include that doesn&apos;t work on Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450796</commentid>
    <comment_count>64</comment_count>
      <attachid>103853</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-08-12 20:27:13 -0700</bug_when>
    <thetext>Created attachment 103853
Patch

A file was missing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516384</commentid>
    <comment_count>65</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-12-06 17:03:55 -0800</bug_when>
    <thetext>We don&apos;t need this meta-bug anymore, fixes should have their own patches.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86643</attachid>
            <date>2011-03-23 10:43:56 -0700</date>
            <delta_ts>2011-03-24 07:53:29 -0700</delta_ts>
            <desc>Texture mapper based implementation of AC for WK2.</desc>
            <filename>wk2_accel_compositing01.diff</filename>
            <type>text/plain</type>
            <size>296813</size>
            <attacher name="Viatcheslav Ostapenko">ostap73</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5MWFkZGY4Li45YWYwNDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYx
IEBACisyMDExLTAzLTIzICBWaWF0Y2hlc2xhdiBPc3RhcGVua28gIDxvc3RhcGVua28udmlhdGNo
ZXNsYXZAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFtRdF0gSW1wbGVtZW50IGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG9uIFdLMiBR
dCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
NjkzNQorCisgICAgICAgIFdlYmtpdDIgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgaW1wbGVtZW50
YXRpb24gb24gYmFzZSBvZiB0ZXh0dXJlIG1hcHBlci4KKyAgICAgICAgTWVyZ2Ugb2Ygb3JpZ2lu
YWwgaW1wbGVtZW50YXRpb24gYnkgTm9hbSBSb3NlbnRoYWwgZnJvbiBpbnRlcm5hbCBxdHdlYmtp
dCBicmFuY2guCisgICAgICAgIFBhcnRpYWwgZml4ZXMgYnkgWWFlbCBBaGFyb24gYW5kIENhcm9s
IFN6YWJvCisKKyAgICAgICAgKiBXZWJDb3JlLnByaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoK
KyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21l
Q2xpZW50OjppbnZhbGlkYXRlRml4ZWRMYXlvdXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNo
cm9tZUNsaWVudDo6a2V5Ym9hcmRVSU1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xp
ZW50OjpzaG93QW5jaG9yQWN0aXZhdGlvbkNhbmRpZGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpk
ZWJ1Z0dMQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpn
ZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0
YTo6Y3JlYXRlU2hhZGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
R0xEYXRhOjpEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlcG9zaXRvcnk6OmZpbmRPckNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpEaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZVJlcG9zaXRvcnk6OmRlcmVmKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJHTERhdGE6OkRpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVwb3NpdG9yeTo6fkRpcmVjdGx5Q29t
cG9zaXRlZEltYWdlUmVwb3NpdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
R0xEYXRhOjpUZXh0dXJlTWFwcGVyR0xEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRl
eHR1cmVHTDo6cGFjayk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OnVucGFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmlzUGFja2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6Qml0bWFwVGV4dHVyZUdMKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6VGV4dHVyZU1hcHBlckdMKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwVGV4dHVyZUdMOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJl
R0w6OmVuZFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6c2V0Q29u
dGVudHNUb0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6ZGVzdHJv
eSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVQcm9qZWN0aW9uTWF0cml4KToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6flRleHR1cmVNYXBwZXJHTCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6Om1ha2VDb250ZXh0Q3VycmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6Om9idGFpbkN1cnJlbnRDb250ZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6YmluZFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMOjplbmRDbGlwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
VGV4dHVyZU1hcHBlckdMLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmFs
bG93U3VyZmFjZUZvclJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpj
cmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUXQ6OmJlZ2luQ2xpcCk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUXQ6OmVuZENsaXApOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlclF0Ojp2aWV3cG9ydFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlclF0OjpkcmF3VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyUHJlbXVsdGltcGxpZWRCdWZm
ZXJRdDo6YmVnaW5QYWludCk6CisgICAgICAgIChXZWJDb3JlOjp1aWRGb3JJbWFnZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0Lmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50
c1RvTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6cGF1c2VBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXI6OnJlbW92ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0R3JhcGhpY3NMYXllckZhY3RvcnkpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c05lZWRzRGlz
cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6bm9k
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmU6OmRlc3Ryb3kpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwVGV4dHVyZTo6YnBwKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1
cmU6Om51bWJlck9mQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6dmll
d3BvcnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6OnNldFZpZXdwb3J0
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpzZXRUZXh0RHJhd2luZ01v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6dGV4dERyYXdpbmdNb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6OmFsbG93UGFydGlhbFVwZGF0ZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6c2V0VHJhbnNmb3JtKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6OnRyYW5zZm9ybSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTdXJmYWNlTWFuYWdlcjo6Z2V0SW50ZXJtZWRpYXRlU3VyZmFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3VyZmFjZU1hbmFnZXI6OmZyZWVJbnRlcm1l
ZGlhdGVTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTdXJmYWNlTWFu
YWdlcjo6bWFya1RleHR1cmVVc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
U3VyZmFjZU1hbmFnZXI6OnB1cmdlVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlclN1cmZhY2VNYW5hZ2VyOjpVc2VUZXh0dXJlOjpVc2VUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTdXJmYWNlTWFuYWdlcjo6VXNlVGV4dHVyZTo6flVzZVRl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6dG9UZXh0dXJlTWFwcGVyTm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6cm9vdExheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzZXRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGU6OnNldE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlck5vZGU6OmNvbXB1dGVQZXJzcGVjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyTm9kZTo6Y291bnREZXNjZW5kYW50c1dpdGhDb250ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlT3ZlcmxhcHMpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVSZXBsaWNhVHJhbnNmb3JtKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlTG9jYWxUcmFuc2Zvcm0pOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmRpZENoYW5nZVBhcmVudFRyYW5z
Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6ZGlkQ2hhbmdlU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6ZGlkQ2hhbmdlVGFyZ2V0
VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpkaWRDaGFu
Z2VQZXJzcGVjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6bmVl
ZHNUb0NvbXB1dGVCb3VuZGluZ1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ck5vZGU6OmNvbXB1dGVUcmFuc2Zvcm1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlck5vZGU6OmNvbXB1dGVCb3VuZGluZ1JlY3RGcm9tUm9vdCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVRpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlVmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlck5vZGU6OnJlbmRlckFzRGlyZWN0SW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnJlbmRlckNvbnRlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlck5vZGU6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJOb2RlOjp0YXJnZXRSZWN0Rm9yVGlsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlck5vZGU6OnBhaW50U2VsZik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyTm9kZTo6Y29tcGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJOb2RlOjpzb3J0QnlaT3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlck5vZGU6OnBhaW50U2VsZkFuZENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJOb2RlOjpwYWludFJlZmxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGU6OnBhaW50UmVjdXJzaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJOb2RlOjp+VGV4dHVyZU1hcHBlck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGU6OnJlc2V0RGVzY2VuZGFudHMpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGU6OnNldENvbnRlbnRTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyTm9kZTo6c2V0VmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJOb2RlOjppbnZhbGlkYXRlT3ZlcmxhcHMpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZik6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmlu
Z0FuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6bm9ybWFsaXplZEFuaW1hdGlvblZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjphcHBseU9wYWNpdHlBbmlt
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c29sdmVFcHNpbG9uKToKKyAgICAgICAgKFdlYkNv
cmU6OnNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzb2x2ZVN0
ZXBzRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlUaW1pbmdGdW5jdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6YXBwbHlUcmFuc2Zvcm1BbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmFwcGx5QW5pbWF0aW9u
RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmFwcGx5QW5pbWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpoYXNSdW5uaW5nT3Bh
Y2l0eUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6aGFz
UnVubmluZ1RyYW5zZm9ybUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyTm9kZTo6c3luY0FuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVMYXN0TW9kaWZpZWRSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OmNvcHlUaW1pbmdGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjb3B5QW5pbWF0
aW9uVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6VGV4
dHVyZU1hcHBlckFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJOb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXhtYXBQYWludE9wdGlv
bnM6OlRleG1hcFBhaW50T3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
QW5pbWF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6
OlRleHR1cmVNYXBwZXJOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2Rl
OjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzZXRUZXh0dXJl
TWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjp0ZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpUcmFuc2Zvcm1EYXRhOjpUcmFu
c2Zvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpEaXJ0eUZs
YWdzOjpEaXJ0eUZsYWdzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpp
bnZhbGlkYXRlVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2Rl
OjppbnZhbGlkYXRlTG9jYWxUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlck5vZGU6OmludmFsaWRhdGVQZXJzcGVjdGl2ZVRyYW5zZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6aW52YWxpZGF0ZVZpc2libGVSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjppbnZhbGlkYXRlUmVwbGljYVRyYW5zZm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6dGFyZ2V0UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6ZW50aXJlUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oOgorICAgICAgICAoUVdlYlBhZ2VDbGllbnQ6OnNldFJv
b3RHcmFwaGljc0xheWVyKToKKyAgICAgICAgKiBwbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQpOgorCiAy
MDExLTAzLTIyICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnByaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCmluZGV4IDM2NDQx
ODQuLmE1MGIxMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCkBAIC0yMjAsNiArMjIwLDEyIEBAIGNvbnRhaW5z
KERFRklORVMsIEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJPTEpIHsKICAgICB9CiB9CiAKK2Nv
bnRhaW5zKENPTkZJRywgd2Via2l0Mik6Q09ORklHKz10ZXhtYXAKKwordGV4bWFwIHsKKyAgICBE
RUZJTkVTICs9IFdURl9VU0VfVEVYVFVSRV9NQVBQRVI9MQorfQorCiBjb250YWlucyhERUZJTkVT
LCBFTkFCTEVfR0VPTE9DQVRJT049MSkgewogICAgIENPTkZJRyAqPSBtb2JpbGl0eQogICAgIE1P
QklMSVRZICo9IGxvY2F0aW9uCkBAIC0yNzAsNyArMjc2LDcgQEAgY29udGFpbnMoREVGSU5FUywg
RU5BQkxFX1ZJREVPPTEpIHsKICAgICB9CiB9CiAKLWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9X
RUJHTD0xKXxjb250YWlucyhDT05GSUcsIHRleG1hcCkgeworY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX1dFQkdMPTEpIHsKICAgICAhY29udGFpbnMoUVRfQ09ORklHLCBvcGVuZ2wpIHsKICAgICAg
ICAgZXJyb3IoICJUaGlzIGNvbmZpZ3VyYXRpb24gbmVlZHMgYW4gT3BlbkdMIGVuYWJsZWQgUXQu
IFlvdXIgUXQgaXMgbWlzc2luZyBPcGVuR0wuIikKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDU0
YzAwOTkuLmIzOWNjZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0zNDU5LDE0ICszNDU5LDEyIEBAIHdp
bjMyOiF3aW4zMi1nKysqOmNvbnRhaW5zKFFNQUtFX0hPU1QuYXJjaCwgeDg2XzY0KTp7CiAgICB9
CiB9CiAKLWNvbnRhaW5zKENPTkZJRywgdGV4bWFwKSB7Ci0gICAgREVGSU5FUyArPSBXVEZfVVNF
X1RFWFRVUkVfTUFQUEVSPTEKK3RleG1hcCB7CiAgICAgSEVBREVSUyArPSBcCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5oIFwKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmggXAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIFwKLSAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmggXAotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaAorICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaAogCiAgICAgU09VUkNF
UyArPSBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAg
XApAQCAtMzQ3NCwxMCArMzQ3MiwxNCBAQCBjb250YWlucyhDT05GSUcsIHRleG1hcCkgewogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIu
Y3BwCiAKICAgICBjb250YWlucyhRVF9DT05GSUcsIG9wZW5nbCkgeworICAgICAgICBRVCArPSBv
cGVuZ2wKICAgICAgICAgSEVBREVSUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVy
ZU1hcHBlckdMLmgKICAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
VGV4dHVyZU1hcHBlckdMLmNwcAogICAgIH0KLX0gZWxzZSB7Ci0gICAgSEVBREVSUyArPSBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuaAotICAgIFNPVVJDRVMgKz0gcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcAorfQorIGVsc2UgeworICAgICFjb250
YWlucyhDT05GSUcsIHdlYmtpdDIpIHsKKyAgICAgICAgSEVBREVSUyArPSBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0xheWVyUXQuaAorICAgICAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHAKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJv
bWVDbGllbnQuaAppbmRleCBmY2NlNjkzLi42MDk2M2E0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
Q2xpZW50LmgKQEAgLTM2LDYgKzM2LDEwIEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKKyNpZiBQTEFURk9STShNQUMpCisjaW5jbHVkZSAi
V2ViQ29yZUtleWJvYXJkVUlNb2RlLmgiCisjZW5kaWYKKwogI2lmbmRlZiBfX09CSkNfXwogY2xh
c3MgTlNNZW51OwogY2xhc3MgTlNSZXNwb25kZXI7CkBAIC01MCw2ICs1NCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBHZW9sb2NhdGlvbjsKICAg
ICBjbGFzcyBHcmFwaGljc0xheWVyOworICAgIGNsYXNzIEhUTUxQYXJzZXJRdWlya3M7CiAgICAg
Y2xhc3MgSGl0VGVzdFJlc3VsdDsKICAgICBjbGFzcyBJbnRSZWN0OwogICAgIGNsYXNzIE5hdmln
YXRpb25BY3Rpb247CkBAIC0xMzAsNiArMTM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2aXJ0dWFsIGJvb2wgcnVuSmF2YVNjcmlwdFByb21wdChGcmFtZSosIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFN0cmluZyYgcmVzdWx0KSA9
IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRTdGF0dXNiYXJUZXh0KGNvbnN0IFN0cmluZyYp
ID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIHNob3VsZEludGVycnVwdEphdmFTY3JpcHQoKSA9
IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCB0YWJzVG9MaW5rcygpIGNvbnN0ID0gMDsKICAgICAg
ICAgdmlydHVhbCBLZXlib2FyZFVJTW9kZSBrZXlib2FyZFVJTW9kZSgpID0gMDsKIAogI2lmIEVO
QUJMRShSRUdJU1RFUl9QUk9UT0NPTF9IQU5ETEVSKQpAQCAtMTU3LDYgKzE2Myw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gRW5kIG1ldGhvZHMgdXNlZCBieSBIb3N0V2luZG93
LgogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZShj
b25zdCBWaWV3cG9ydEFyZ3VtZW50cyYpIGNvbnN0IHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQg
aW52YWxpZGF0ZUZpeGVkTGF5b3V0U2l6ZSgpIGNvbnN0IHsgfQogCiAgICAgICAgIHZpcnR1YWwg
dm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKEZyYW1lKiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0ID0g
MDsKICAgICAgICAgdmlydHVhbCB2b2lkIHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0
JiwgY29uc3QgU2Nyb2xsVmlldyopIGNvbnN0ID0gMDsgLy8gQ3VycmVudGx5IG9ubHkgTWFjIGhh
cyBhIG5vbiBlbXB0eSBpbXBsZW1lbnRhdGlvbi4KQEAgLTI3Niw2ICsyODMsOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgdmlydHVh
bCBLZXlib2FyZFVJTW9kZSBrZXlib2FyZFVJTW9kZSgpIHsgcmV0dXJuIEtleWJvYXJkQWNjZXNz
RGVmYXVsdDsgfQorCiAgICAgICAgIHZpcnR1YWwgTlNSZXNwb25kZXIgKmZpcnN0UmVzcG9uZGVy
KCkgeyByZXR1cm4gMDsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgbWFrZUZpcnN0UmVzcG9uZGVy
KE5TUmVzcG9uZGVyICopIHsgfQogCkBAIC0yODgsNiArMjk3LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICAgICAgdmlydHVhbCB2b2lkIG5l
ZWRUb3VjaEV2ZW50cyhib29sKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzaG93QW5jaG9y
QWN0aXZhdGlvbkNhbmRpZGF0ZShjb25zdCBWZWN0b3I8SW50UmVjdD4mKSB7IH0KICNlbmRpZgog
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBzZWxlY3RJdGVtV3JpdGluZ0RpcmVjdGlvbklzTmF0dXJh
bCgpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAKaW5kZXggOTc2NTkzNy4uY2MzNzhjOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVN
YXBwZXJHTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTI4LDcgKzI4LDE1IEBACiAjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KIAogI2lmIGRlZmluZWQoVEVYTUFQX09QRU5HTF9FU18yKQorI2lmIFBMQVRG
T1JNKFFUKQorI2luY2x1ZGUgPFgxMS9YbGliLmg+CisjaW5jbHVkZSA8UVgxMUluZm8+CisjaW5j
bHVkZSA8RUdML2VnbC5oPgorI2luY2x1ZGUgPFFJbWFnZT4KKyNlbmRpZgorCiAjaW5jbHVkZSA8
R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CiAjZWxpZiBPUyhNQUNfT1Nf
WCkKICNpbmNsdWRlIDxBR0wvYWdsLmg+CiAjaW5jbHVkZSA8Z2wuaD4KQEAgLTM5LDcgKzQ3LDcg
QEAKICNpbmNsdWRlIDxHTC9nbC5oPgogI2VuZGlmCiAKLSNpZm5kZWYgVEVYTUFQX09QRU5HTF9F
UzIKKyNpZm5kZWYgVEVYTUFQX09QRU5HTF9FU18yCiBleHRlcm4gIkMiIHsKICAgICB2b2lkIGds
VW5pZm9ybTFmKEdMaW50LCBHTGZsb2F0KTsKICAgICB2b2lkIGdsVW5pZm9ybTFpKEdMaW50LCBH
TGludCk7CkBAIC02Nyw4ICs3NSwxNCBAQCBleHRlcm4gIkMiIHsKICAgICB2b2lkIGdsR2VuQnVm
ZmVycyhHTHNpemVpLCBHTHVpbnQqKTsKICAgICB2b2lkIGdsQnVmZmVyRGF0YShHTGVudW0sIEdM
c2l6ZWlwdHIsIGNvbnN0IEdMdm9pZCosIEdMZW51bSk7CiAgICAgdm9pZCBnbEJ1ZmZlclN1YkRh
dGEoR0xlbnVtLCBHTHNpemVpcHRyLCBHTHNpemVpcHRyLCBjb25zdCBHTHZvaWQqKTsKLSAgICB2
b2lkIGdsR2V0UHJvZ3JhbUluZm9Mb2coR0x1aW50IHByb2dyYW0sIEdMc2l6ZWksIEdMc2l6ZWkq
LCBHTGNoYXIqKTsKLQorICAgIHZvaWQgZ2xHZXRQcm9ncmFtSW5mb0xvZyhHTHVpbnQsIEdMc2l6
ZWksIEdMc2l6ZWkqLCBHTGNoYXIqKTsKKyAgICB2b2lkIGdsR2V0U2hhZGVySW5mb0xvZyhHTHVp
bnQsIEdMc2l6ZWksIEdMc2l6ZWkqLCBHTGNoYXIqKTsKKyAgICB2b2lkIGdsR2VuUmVuZGVyYnVm
ZmVycyhHTHNpemVpIG4sIEdMdWludCogaWRzKTsKKyAgICB2b2lkIGdsRGVsZXRlUmVuZGVyYnVm
ZmVycyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCogaWRzKTsKKyAgICB2b2lkIGdsQmluZFJlbmRl
cmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaWQpOworICAgIHZvaWQgZ2xSZW5kZXJidWZm
ZXJTdG9yYWdlKEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIHZvaWQgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
cihHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudFBvaW50LCBHTGVudW0gcmVuZGVyYnVm
ZmVyVGFyZ2V0LCBHTHVpbnQgcmVuZGVyYnVmZmVySWQpOworICAgIEdMZW51bSBnbENoZWNrRnJh
bWVidWZmZXJTdGF0dXMgKEdMZW51bSB0YXJnZXQpOwogI2lmICFPUyhNQUNfT1NfWCkKICAgICBH
TGludCBnbEdldFVuaWZvcm1Mb2NhdGlvbihHTHVpbnQsIGNvbnN0IEdMY2hhciopOwogICAgIEdM
aW50IGdsQmluZEF0dHJpYkxvY2F0aW9uKEdMdWludCwgR0x1aW50LCBjb25zdCBHTGNoYXIqKTsK
QEAgLTg0LDYgKzk4LDcgQEAgaW5saW5lIHN0YXRpYyB2b2lkIGRlYnVnR0xDb21tYW5kKGNvbnN0
IGNoYXIqIGNvbW1hbmQsIGludCBsaW5lKQogICAgIGlmICghZXJyKQogICAgICAgICByZXR1cm47
CiAgICAgV1RGUmVwb3J0RXJyb3IoX19GSUxFX18sIGxpbmUsIFdURl9QUkVUVFlfRlVOQ1RJT04s
ICJbVGV4dHVyZU1hcHBlciBHTF0gQ29tbWFuZCBmYWlsZWQ6ICVzICgleClcbiIsIGNvbW1hbmQs
IGVycik7CisgICAgQ1JBU0goKTsKIH0KIAogI2RlZmluZSBERUJVR19HTF9DT01NQU5EUwpAQCAt
OTQsNzUgKzEwOSw2OSBAQCBpbmxpbmUgc3RhdGljIHZvaWQgZGVidWdHTENvbW1hbmQoY29uc3Qg
Y2hhciogY29tbWFuZCwgaW50IGxpbmUpCiAjZGVmaW5lIEdMX0NNRCh4KSB4CiAjZW5kaWYKIAot
c3RhdGljIGNvbnN0IEdMdWludCBnSW5WZXJ0ZXhBdHRyaWJ1dGVJbmRleCA9IDA7CisvLyBGSVhN
RTogVGhpcyBudW1iZXIgaXMgYXJiaXRyYXJ5LCBhcHBhcmVudGx5IG90aGVyIElEcyBhcmUgdXNl
ZCBieSBRdC9NZWVHbyB0b3VjaC4KKy8vIFRoZXJlIHNob3VsZCBiZSBhIHdheSB0byBmaW5kIGFu
IHVudXNlZCBudW1iZXIuCitzdGF0aWMgY29uc3QgR0x1aW50IGdJblZlcnRleEF0dHJpYnV0ZUlu
ZGV4ID0gNjsKIAogc3RydWN0IFRleHR1cmVNYXBwZXJHTERhdGEgewotICAgIHN0YXRpYyBzdHJ1
Y3QgU2hhZGVySW5mbyB7Ci0gICAgICAgIGVudW0gU2hhZGVyUHJvZ3JhbUluZGV4IHsKLSAgICAg
ICAgICAgIFNpbXBsZVByb2dyYW0sCi0gICAgICAgICAgICBPcGFjaXR5QW5kTWFza1Byb2dyYW0s
Ci0gICAgICAgICAgICBUYXJnZXRQcm9ncmFtLAotCi0gICAgICAgICAgICBQcm9ncmFtQ291bnQK
LSAgICAgICAgfTsKKyAgICBlbnVtIFNoYWRlclByb2dyYW1JbmRleCB7CisgICAgICAgIE5vUHJv
Z3JhbSA9IC0xLAorICAgICAgICBTaW1wbGVQcm9ncmFtLAorICAgICAgICBPcGFjaXR5QW5kTWFz
a1Byb2dyYW0sCisgICAgICAgIENsaXBQcm9ncmFtLAogCi0gICAgICAgIGVudW0gU2hhZGVyVmFy
aWFibGVJbmRleCB7Ci0gICAgICAgICAgICBJbk1hdHJpeFZhcmlhYmxlLAotICAgICAgICAgICAg
SW5Tb3VyY2VNYXRyaXhWYXJpYWJsZSwKLSAgICAgICAgICAgIEluTWFza01hdHJpeFZhcmlhYmxl
LAotICAgICAgICAgICAgT3BhY2l0eVZhcmlhYmxlLAotICAgICAgICAgICAgU291cmNlVGV4dHVy
ZVZhcmlhYmxlLAotICAgICAgICAgICAgTWFza1RleHR1cmVWYXJpYWJsZSwKKyAgICAgICAgUHJv
Z3JhbUNvdW50CisgICAgfTsKIAotICAgICAgICAgICAgVmFyaWFibGVDb3VudAotICAgICAgICB9
OworICAgIGVudW0gU2hhZGVyVmFyaWFibGVJbmRleCB7CisgICAgICAgIEluTWF0cml4VmFyaWFi
bGUsCisgICAgICAgIEluU291cmNlTWF0cml4VmFyaWFibGUsCisgICAgICAgIEluTWFza01hdHJp
eFZhcmlhYmxlLAorICAgICAgICBPcGFjaXR5VmFyaWFibGUsCisgICAgICAgIFNvdXJjZVRleHR1
cmVWYXJpYWJsZSwKKyAgICAgICAgTWFza1RleHR1cmVWYXJpYWJsZSwKIAotICAgICAgICBzdHJ1
Y3QgUHJvZ3JhbUluZm8gewotICAgICAgICAgICAgR0x1aW50IGlkOwotICAgICAgICAgICAgR0xp
bnQgdmFyc1tWYXJpYWJsZUNvdW50XTsKLSAgICAgICAgfTsKKyAgICAgICAgVmFyaWFibGVDb3Vu
dAorICAgIH07CiAKLSAgICAgICAgR0xpbnQgZ2V0VW5pZm9ybUxvY2F0aW9uKFNoYWRlclByb2dy
YW1JbmRleCBwcm9nLCBTaGFkZXJWYXJpYWJsZUluZGV4IHZhciwgY29uc3QgY2hhciogbmFtZSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1zW3Byb2ddLnZhcnNbdmFyXSA9
IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW1zW3Byb2ddLmlkLCBuYW1lKTsKLSAgICAgICAg
fQorICAgIHN0cnVjdCBQcm9ncmFtSW5mbyB7CisgICAgICAgIEdMdWludCBpZDsKKyAgICAgICAg
R0xpbnQgdmFyc1tWYXJpYWJsZUNvdW50XTsKKyAgICB9OwogCi0gICAgICAgIHZvaWQgY3JlYXRl
U2hhZGVyUHJvZ3JhbShjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIq
IGZyYWdtZW50U2hhZGVyU291cmNlLCBTaGFkZXJQcm9ncmFtSW5kZXggaW5kZXgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEdMdWludCB2ZXJ0ZXhTaGFkZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9W
RVJURVhfU0hBREVSKTsKLSAgICAgICAgICAgIEdMdWludCBmcmFnbWVudFNoYWRlciA9IGdsQ3Jl
YXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NIQURFUik7Ci0gICAgICAgICAgICBHTF9DTUQoZ2xTaGFk
ZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAmdmVydGV4U2hhZGVyU291cmNlLCAwKSkKLSAgICAg
ICAgICAgIEdMX0NNRChnbFNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgMSwgJmZyYWdtZW50
U2hhZGVyU291cmNlLCAwKSkKLSAgICAgICAgICAgIEdMdWludCBwcm9ncmFtSUQgPSBnbENyZWF0
ZVByb2dyYW0oKTsKLSAgICAgICAgICAgIEdMX0NNRChnbENvbXBpbGVTaGFkZXIodmVydGV4U2hh
ZGVyKSkKLSAgICAgICAgICAgIEdMX0NNRChnbENvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIp
KQotICAgICAgICAgICAgR0xfQ01EKGdsQXR0YWNoU2hhZGVyKHByb2dyYW1JRCwgdmVydGV4U2hh
ZGVyKSkKLSAgICAgICAgICAgIEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZyYWdt
ZW50U2hhZGVyKSkKLSAgICAgICAgICAgIEdMX0NNRChnbEJpbmRBdHRyaWJMb2NhdGlvbihwcm9n
cmFtSUQsIGdJblZlcnRleEF0dHJpYnV0ZUluZGV4LCAiSW5WZXJ0ZXgiKSkKLSAgICAgICAgICAg
IEdMX0NNRChnbExpbmtQcm9ncmFtKHByb2dyYW1JRCkpCi0gICAgICAgICAgICBwcm9ncmFtc1tp
bmRleF0uaWQgPSBwcm9ncmFtSUQ7Ci0jaWZkZWYgUFJJTlRfUFJPR1JBTV9JTkZPX0xPRwotICAg
ICAgICAgICAgY2hhciBpbmZvTG9nWzEwMjRdOwotICAgICAgICAgICAgaW50IGxlbjsKLSAgICAg
ICAgICAgIEdMX0NNRChnbEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW1JRCwgMTAyNCwgJmxlbiwg
aW5mb0xvZykpOwotICAgICAgICAgICAgTE9HKEdyYXBoaWNzLCAiQ29tcGlsZWQgcHJvZ3JhbSBm
b3IgdGV4dHVyZSBtYXBwZXIuIExvZzogJXNcbiIsIGluZm9Mb2cpOwotI2VuZGlmCi0gICAgICAg
IH0KKyAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oU2hhZGVyUHJvZ3JhbUluZGV4IHByb2cs
IFNoYWRlclZhcmlhYmxlSW5kZXggdmFyLCBjb25zdCBjaGFyKiBuYW1lKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHByb2dyYW1zW3Byb2ddLnZhcnNbdmFyXSA9IGdsR2V0VW5pZm9ybUxvY2F0aW9u
KHByb2dyYW1zW3Byb2ddLmlkLCBuYW1lKTsKKyAgICB9CiAKLSAgICAgICAgUHJvZ3JhbUluZm8g
cHJvZ3JhbXNbUHJvZ3JhbUNvdW50XTsKKyAgICB2b2lkIGNyZWF0ZVNoYWRlclByb2dyYW0oY29u
c3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNv
dXJjZSwgU2hhZGVyUHJvZ3JhbUluZGV4IGluZGV4KQorICAgIHsKKyAgICAgICAgR0x1aW50IHZl
cnRleFNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIpOworICAgICAgICBH
THVpbnQgZnJhZ21lbnRTaGFkZXIgPSBnbENyZWF0ZVNoYWRlcihHTF9GUkFHTUVOVF9TSEFERVIp
OworICAgICAgICBHTF9DTUQoZ2xTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAmdmVydGV4
U2hhZGVyU291cmNlLCAwKSkKKyAgICAgICAgR0xfQ01EKGdsU2hhZGVyU291cmNlKGZyYWdtZW50
U2hhZGVyLCAxLCAmZnJhZ21lbnRTaGFkZXJTb3VyY2UsIDApKQorICAgICAgICBHTHVpbnQgcHJv
Z3JhbUlEID0gZ2xDcmVhdGVQcm9ncmFtKCk7CisgICAgICAgIEdMX0NNRChnbENvbXBpbGVTaGFk
ZXIodmVydGV4U2hhZGVyKSkKKyAgICAgICAgR0xfQ01EKGdsQ29tcGlsZVNoYWRlcihmcmFnbWVu
dFNoYWRlcikpCisgICAgICAgIEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIHZlcnRl
eFNoYWRlcikpCisgICAgICAgIEdMX0NNRChnbEF0dGFjaFNoYWRlcihwcm9ncmFtSUQsIGZyYWdt
ZW50U2hhZGVyKSkKKyAgICAgICAgR0xfQ01EKGdsQmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW1J
RCwgZ0luVmVydGV4QXR0cmlidXRlSW5kZXgsICJJblZlcnRleCIpKQorICAgICAgICBHTF9DTUQo
Z2xMaW5rUHJvZ3JhbShwcm9ncmFtSUQpKQorICAgICAgICBwcm9ncmFtc1tpbmRleF0uaWQgPSBw
cm9ncmFtSUQ7CisgICAgfQogCi0gICAgfSBzaGFkZXJJbmZvOworICAgIFByb2dyYW1JbmZvIHBy
b2dyYW1zW1Byb2dyYW1Db3VudF07CiAKICAgICBzdHJ1Y3QgRGlyZWN0bHlDb21wb3NpdGVkSW1h
Z2VSZXBvc2l0b3J5IHsKICAgICAgICAgc3RydWN0IEVudHJ5IHsKICAgICAgICAgICAgIEdMdWlu
dCB0ZXh0dXJlOwogICAgICAgICAgICAgaW50IHJlZkNvdW50OwogICAgICAgICB9OwotICAgICAg
ICBIYXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBFbnRyeT4gaW1hZ2VUb1RleHR1cmU7CisgICAgICAg
IEhhc2hNYXA8dWludDY0X3QsIEVudHJ5PiBpbWFnZVRvVGV4dHVyZTsKIAotICAgICAgICBHTHVp
bnQgZmluZE9yQ3JlYXRlKE5hdGl2ZUltYWdlUHRyIGltYWdlLCBib29sJiBmb3VuZCkKKyAgICAg
ICAgR0x1aW50IGZpbmRPckNyZWF0ZSh1aW50NjRfdCBpbWFnZSwgYm9vbCYgZm91bmQpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEhhc2hNYXA8TmF0aXZlSW1hZ2VQdHIsIEVudHJ5Pjo6aXRlcmF0
b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5maW5kKGltYWdlKTsKKyAgICAgICAgICAgIEhhc2hNYXA8
dWludDY0X3QsIEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBpbWFnZVRvVGV4dHVyZS5maW5kKGltYWdl
KTsKICAgICAgICAgICAgIGZvdW5kID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoaXQgIT0gaW1h
Z2VUb1RleHR1cmUuZW5kKCkpIHsKICAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLnJlZkNvdW50
Kys7CkBAIC0xNzYsOSArMTg1LDkgQEAgc3RydWN0IFRleHR1cmVNYXBwZXJHTERhdGEgewogICAg
ICAgICAgICAgcmV0dXJuIGVudHJ5LnRleHR1cmU7CiAgICAgICAgIH0KIAotICAgICAgICBib29s
IGRlcmVmKE5hdGl2ZUltYWdlUHRyIGltYWdlKQorICAgICAgICBib29sIGRlcmVmKHVpbnQ2NF90
IGltYWdlKQogICAgICAgICB7Ci0gICAgICAgICAgICBIYXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBF
bnRyeT46Oml0ZXJhdG9yIGl0ID0gaW1hZ2VUb1RleHR1cmUuZmluZChpbWFnZSk7CisgICAgICAg
ICAgICBIYXNoTWFwPHVpbnQ2NF90LCBFbnRyeT46Oml0ZXJhdG9yIGl0ID0gaW1hZ2VUb1RleHR1
cmUuZmluZChpbWFnZSk7CiAgICAgICAgICAgICBpZiAoaXQgIT0gaW1hZ2VUb1RleHR1cmUuZW5k
KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5yZWZDb3VudCA8IDIpIHsKICAg
ICAgICAgICAgICAgICAgICAgaW1hZ2VUb1RleHR1cmUucmVtb3ZlKGl0KTsKQEAgLTE5NCw3ICsy
MDMsNyBAQCBzdHJ1Y3QgVGV4dHVyZU1hcHBlckdMRGF0YSB7CiAKICAgICAgICAgfkRpcmVjdGx5
Q29tcG9zaXRlZEltYWdlUmVwb3NpdG9yeSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZvciAo
SGFzaE1hcDxOYXRpdmVJbWFnZVB0ciwgRW50cnk+OjppdGVyYXRvciBpdCA9IGltYWdlVG9UZXh0
dXJlLmJlZ2luKCk7IGl0ICE9IGltYWdlVG9UZXh0dXJlLmVuZCgpOyArK2l0KSB7CisgICAgICAg
ICAgICBmb3IgKEhhc2hNYXA8dWludDY0X3QsIEVudHJ5Pjo6aXRlcmF0b3IgaXQgPSBpbWFnZVRv
VGV4dHVyZS5iZWdpbigpOyBpdCAhPSBpbWFnZVRvVGV4dHVyZS5lbmQoKTsgKytpdCkgewogICAg
ICAgICAgICAgICAgIEdMdWludCB0ZXh0dXJlID0gaXQtPnNlY29uZC50ZXh0dXJlOwogICAgICAg
ICAgICAgICAgIGlmICh0ZXh0dXJlKQogICAgICAgICAgICAgICAgICAgICBHTF9DTUQoZ2xEZWxl
dGVUZXh0dXJlcygxLCAmdGV4dHVyZSkpOwpAQCAtMjA0LDIyICsyMTMsMjQgQEAgc3RydWN0IFRl
eHR1cmVNYXBwZXJHTERhdGEgewogICAgIH0gZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzOwogCiAg
ICAgVGV4dHVyZU1hcHBlckdMRGF0YSgpCi0gICAgICAgIDogY3VycmVudFByb2dyYW0oVGV4dHVy
ZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6VGFyZ2V0UHJvZ3JhbSkKKyAgICAgICAgOiBjdXJy
ZW50UHJvZ3JhbShUZXh0dXJlTWFwcGVyR0xEYXRhOjpOb1Byb2dyYW0pCisgICAgICAgICwgc3Rl
bmNpbEluZGV4KDEpCiAgICAgeyB9CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcm9qZWN0
aW9uTWF0cml4OwogICAgIGludCBjdXJyZW50UHJvZ3JhbTsKKyAgICBpbnQgc3RlbmNpbEluZGV4
OwogCiAjaWYgT1MoTUFDX09TX1gpCiAgICAgQUdMQ29udGV4dCBhZ2xDb250ZXh0OwogI2VsaWYg
T1MoVU5JWCkKKyNpZiBDUFUoWDg2KQogICAgIERyYXdhYmxlIGdseERyYXdhYmxlOwogICAgIEdM
WENvbnRleHQgZ2x4Q29udGV4dDsKICNlbmRpZgorI2VuZGlmCiB9OwogCi1UZXh0dXJlTWFwcGVy
R0xEYXRhOjpTaGFkZXJJbmZvIFRleHR1cmVNYXBwZXJHTERhdGE6OnNoYWRlckluZm87Ci0KIGNs
YXNzIEJpdG1hcFRleHR1cmVHTCA6IHB1YmxpYyBCaXRtYXBUZXh0dXJlIHsKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwpAQCAtMjMxLDIzICsyNDIsNDYgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKTsKICAgICB+Qml0bWFw
VGV4dHVyZUdMKCkgeyBkZXN0cm95KCk7IH0KIAorICAgIHZvaWQgcGFjaygpCisgICAgeworICAg
ICAgICAvLyBUT0RPOiBhY3R1YWwgcGFja2luZy4KKyAgICAgICAgaWYgKGlzUGFja2VkKCkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1faXNQYWNrZWQgPSB0cnVlOworICAgIH0KKwor
ICAgIHZvaWQgdW5wYWNrKCkKKyAgICB7CisgICAgICAgIC8vIFRPRE86IGFjdHVhbCBwYWNraW5n
LgorICAgICAgICBpZiAoIWlzUGFja2VkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IG1faXNQYWNrZWQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIGlzUGFja2VkKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2lzUGFja2VkOworICAgIH0KKwogcHJpdmF0ZToKICAg
ICBHTHVpbnQgbV9pZDsKLSAgICBOYXRpdmVJbWFnZVB0ciBtX2ltYWdlOworICAgIHVpbnQ2NF90
IG1faW1hZ2U7CiAgICAgRmxvYXRTaXplIG1fcmVsYXRpdmVTaXplOwogICAgIGJvb2wgbV9vcGFx
dWU7CiAgICAgSW50U2l6ZSBtX3RleHR1cmVTaXplOwogICAgIFJlZlB0cjxSR0JBMzJQcmVtdWx0
aW1wbGllZEJ1ZmZlcj4gbV9idWZmZXI7CiAgICAgSW50UmVjdCBtX2RpcnR5UmVjdDsKLSAgICBH
THVpbnQgbV9mYm87CisgICAgR0x1aW50IG1fZmJvLCBtX3JibzsKICAgICBJbnRTaXplIG1fYWN0
dWFsU2l6ZTsKICAgICBib29sIG1fc3VyZmFjZU5lZWRzUmVzZXQ7CisgICAgYm9vbCBtX2lzUGFj
a2VkOwogICAgIFRleHR1cmVNYXBwZXJHTCogbV90ZXh0dXJlTWFwcGVyOwogICAgIEJpdG1hcFRl
eHR1cmVHTCgpCiAgICAgICAgIDogbV9pZCgwKQogICAgICAgICAsIG1faW1hZ2UoMCkKICAgICAg
ICAgLCBtX29wYXF1ZShmYWxzZSkKICAgICAgICAgLCBtX2ZibygwKQorICAgICAgICAsIG1fcmJv
KDApCiAgICAgICAgICwgbV9zdXJmYWNlTmVlZHNSZXNldCh0cnVlKQogICAgICAgICAsIG1fdGV4
dHVyZU1hcHBlcigwKQogICAgIHsKQEAgLTI1NywyMSArMjkxLDE2IEBAIHByaXZhdGU6CiB9Owog
CiAjZGVmaW5lIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElPTihwcm9nLCB2YXIpIFwKLSAg
ICBpZiAoVGV4dHVyZU1hcHBlckdMRGF0YTo6c2hhZGVySW5mby5nZXRVbmlmb3JtTG9jYXRpb24o
VGV4dHVyZU1hcHBlckdMRGF0YTo6c2hhZGVySW5mby5wcm9nIyNQcm9ncmFtLCBUZXh0dXJlTWFw
cGVyR0xEYXRhOjpzaGFkZXJJbmZvLnZhciMjVmFyaWFibGUsICN2YXIpIDwgMCkgXAorICAgIGlm
IChtX2RhdGEtPmdldFVuaWZvcm1Mb2NhdGlvbihtX2RhdGEtPnByb2cjI1Byb2dyYW0sIG1fZGF0
YS0+dmFyIyNWYXJpYWJsZSwgI3ZhcikgPCAwKSBcCiAgICAgICAgICAgICBMT0dfRVJST1IoIkNv
dWxkbid0IGZpbmQgdmFyaWFibGUgIiN2YXIiIGluIHByb2dyYW0gIiNwcm9nIlxuIik7CiAKICNk
ZWZpbmUgVEVYTUFQX0JVSUxEX1NIQURFUihwcm9ncmFtKSBcCi0gICAgVGV4dHVyZU1hcHBlckdM
RGF0YTo6c2hhZGVySW5mby5jcmVhdGVTaGFkZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJjZSMj
cHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXJTb3VyY2UjI3Byb2dyYW0sIFRleHR1cmVNYXBwZXJHTERh
dGE6OnNoYWRlckluZm8ucHJvZ3JhbSMjUHJvZ3JhbSk7CisgICAgbV9kYXRhLT5jcmVhdGVTaGFk
ZXJQcm9ncmFtKHZlcnRleFNoYWRlclNvdXJjZSMjcHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXJTb3Vy
Y2UjI3Byb2dyYW0sIG1fZGF0YS0+cHJvZ3JhbSMjUHJvZ3JhbSk7CiAKIFRleHR1cmVNYXBwZXJH
TDo6VGV4dHVyZU1hcHBlckdMKCkKICAgICA6IG1fZGF0YShuZXcgVGV4dHVyZU1hcHBlckdMRGF0
YSkKIHsKLSAgICBzdGF0aWMgYm9vbCBzaGFkZXJzQ29tcGlsZWQgPSBmYWxzZTsKLSAgICBvYnRh
aW5DdXJyZW50Q29udGV4dCgpOwotICAgIGlmIChzaGFkZXJzQ29tcGlsZWQpCi0gICAgICAgIHJl
dHVybjsKLSAgICBzaGFkZXJzQ29tcGlsZWQgPSB0cnVlOwotI2lmbmRlZiBURVhNQVBfT1BFTkdM
X0VTMgorI2lmbmRlZiBURVhNQVBfT1BFTkdMX0VTXzIKICNkZWZpbmUgT0VTMl9QUkVDSVNJT05f
REVGSU5JVElPTlMgXAogICAgICIjZGVmaW5lIGxvd3BcbiNkZWZpbmUgaGlnaHBcbiIKICNlbHNl
CkBAIC0zMTEsNyArMzQwLDcgQEAgVGV4dHVyZU1hcHBlckdMOjpUZXh0dXJlTWFwcGVyR0woKQog
IiAgICAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCiAiICAgICAgICAgICAgICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcbiIKICIgICAgICAgICAgICAgICAgICAgbG93cCB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKFNv
dXJjZVRleHR1cmUsIE91dFRleENvb3JkU291cmNlKTsgIFxuIgotIiAgICAgICAgICAgICAgICAg
ICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIE9wYWNpdHksIGNvbG9yLmEgKiBPcGFj
aXR5KTsgICAgXG4iCisiICAgICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29s
b3IucmdiYSAqIE9wYWNpdHkpOyAgICBcbiIKICIgICAgICAgICAgICAgICB9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxu
IjsKIAogICAgIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZVNpbXBsZSA9CkBAIC0zMjUs
MjIgKzM1NCwxOCBAQCBUZXh0dXJlTWFwcGVyR0w6OlRleHR1cmVNYXBwZXJHTCgpCiAiICAgICAg
ICAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gSW5NYXRyaXggKiBJblZlcnRleDsgICAgICAgICAg
ICAgICAgICAgICAgXG4iCiAiICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOwogCi0gICAgY29uc3QgY2hh
ciogZnJhZ21lbnRTaGFkZXJTb3VyY2VUYXJnZXQgPQotICAgICAgICAgICAgT0VTMl9QUkVDSVNJ
T05fREVGSU5JVElPTlMKLSIgICAgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBTb3VyY2VU
ZXh0dXJlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0i
ICAgICAgICAgICAgICAgdW5pZm9ybSBsb3dwIGZsb2F0IE9wYWNpdHk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgotIiAgICAgICAgICAgICAgIHZh
cnlpbmcgaGlnaHAgdmVjMiBPdXRUZXhDb29yZFNvdXJjZTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcbiIKLSIgICAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XG4iCi0iICAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgotIiAgICAgICAgICAg
ICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQoU291cmNlVGV4dHVyZSwgT3V0VGV4
Q29vcmRTb3VyY2UpOyAgICAgICAgICBcbiIKLSIgICAgICAgICAgICAgICAgICAgZ2xfRnJhZ0Nv
bG9yID0gdmVjNChjb2xvci5iZ3IgKiBPcGFjaXR5LCBjb2xvci5hICogT3BhY2l0eSk7ICAgICAg
ICAgICAgXG4iCi0iICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKyAgICBj
b25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZUNsaXAgPQorIiAgICAgICAgICAgICAgIHZv
aWQgbWFpbih2b2lkKSB7IGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTsg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjsKKworICAgIGNvbnN0IGNoYXIqIHZl
cnRleFNoYWRlclNvdXJjZUNsaXAgPQorIiAgICAgICAgICAgICAgIHVuaWZvcm0gbWF0NCBJbk1h
dHJpeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAg
ICAgICAgIGF0dHJpYnV0ZSB2ZWM0IEluVmVydGV4OyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKSB7IGdsX1Bvc2l0
aW9uID0gSW5NYXRyaXggKiBJblZlcnRleDsgfSAgICAgICI7CiAKLSAgICBjb25zdCBjaGFyKiB2
ZXJ0ZXhTaGFkZXJTb3VyY2VUYXJnZXQgPSB2ZXJ0ZXhTaGFkZXJTb3VyY2VTaW1wbGU7CiAKICAg
ICBURVhNQVBfQlVJTERfU0hBREVSKFNpbXBsZSkKICAgICBURVhNQVBfQlVJTERfU0hBREVSKE9w
YWNpdHlBbmRNYXNrKQotICAgIFRFWE1BUF9CVUlMRF9TSEFERVIoVGFyZ2V0KQorICAgIFRFWE1B
UF9CVUlMRF9TSEFERVIoQ2xpcCkKIAogICAgIFRFWE1BUF9HRVRfU0hBREVSX1ZBUl9MT0NBVElP
TihPcGFjaXR5QW5kTWFzaywgSW5NYXRyaXgpCiAgICAgVEVYTUFQX0dFVF9TSEFERVJfVkFSX0xP
Q0FUSU9OKE9wYWNpdHlBbmRNYXNrLCBJblNvdXJjZU1hdHJpeCkKQEAgLTM1NCw0MSArMzc5LDMx
IEBAIFRleHR1cmVNYXBwZXJHTDo6VGV4dHVyZU1hcHBlckdMKCkKICAgICBURVhNQVBfR0VUX1NI
QURFUl9WQVJfTE9DQVRJT04oU2ltcGxlLCBTb3VyY2VUZXh0dXJlKQogICAgIFRFWE1BUF9HRVRf
U0hBREVSX1ZBUl9MT0NBVElPTihTaW1wbGUsIE9wYWNpdHkpCiAKLSAgICBURVhNQVBfR0VUX1NI
QURFUl9WQVJfTE9DQVRJT04oVGFyZ2V0LCBJblNvdXJjZU1hdHJpeCkKLSAgICBURVhNQVBfR0VU
X1NIQURFUl9WQVJfTE9DQVRJT04oVGFyZ2V0LCBJbk1hdHJpeCkKLSAgICBURVhNQVBfR0VUX1NI
QURFUl9WQVJfTE9DQVRJT04oVGFyZ2V0LCBTb3VyY2VUZXh0dXJlKQotICAgIFRFWE1BUF9HRVRf
U0hBREVSX1ZBUl9MT0NBVElPTihUYXJnZXQsIE9wYWNpdHkpCisgICAgVEVYTUFQX0dFVF9TSEFE
RVJfVkFSX0xPQ0FUSU9OKENsaXAsIEluTWF0cml4KQogfQogCi12b2lkIFRleHR1cmVNYXBwZXJH
TDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50UmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJp
eCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCit2b2lk
IFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVy
ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBt
YXNrVGV4dHVyZSkKIHsKICAgICBpZiAoIXRleHR1cmUuaXNWYWxpZCgpKQogICAgICAgICByZXR1
cm47Ci0KICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wmIHRleHR1cmVHTCA9IHN0YXRpY19jYXN0
PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KHRleHR1cmUpOwogCi0gICAgVGV4dHVyZU1hcHBlckdM
RGF0YTo6U2hhZGVySW5mbzo6U2hhZGVyUHJvZ3JhbUluZGV4IHByb2dyYW07CisgICAgVGV4dHVy
ZU1hcHBlckdMRGF0YTo6U2hhZGVyUHJvZ3JhbUluZGV4IHByb2dyYW07CiAgICAgaWYgKG1hc2tU
ZXh0dXJlKQotICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5m
bzo6T3BhY2l0eUFuZE1hc2tQcm9ncmFtOworICAgICAgICBwcm9ncmFtID0gVGV4dHVyZU1hcHBl
ckdMRGF0YTo6T3BhY2l0eUFuZE1hc2tQcm9ncmFtOwogICAgIGVsc2UKLSAgICAgICAgcHJvZ3Jh
bSA9IFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86OlNpbXBsZVByb2dyYW07Ci0KLSAg
ICBjb25zdCBUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpQcm9ncmFtSW5mbyYgcHJv
Z3JhbUluZm8gPSBkYXRhKCkuc2hhZGVySW5mby5wcm9ncmFtc1twcm9ncmFtXTsKLSAgICBpZiAo
ZGF0YSgpLmN1cnJlbnRQcm9ncmFtICE9IHByb2dyYW0pIHsKLSAgICAgICAgR0xfQ01EKGdsVXNl
UHJvZ3JhbShwcm9ncmFtSW5mby5pZCkpCi0gICAgICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShnSW5WZXJ0ZXhBdHRyaWJ1dGVJbmRleCkpCi0gICAgICAgIGRhdGEoKS5jdXJy
ZW50UHJvZ3JhbSA9IHByb2dyYW07Ci0gICAgICAgIEdMX0NNRChnbEVuYWJsZVZlcnRleEF0dHJp
YkFycmF5KGdJblZlcnRleEF0dHJpYnV0ZUluZGV4KSkKLSAgICB9Ci0KLSAgICBHTF9DTUQoZ2xE
aXNhYmxlKEdMX0RFUFRIX1RFU1QpKQotICAgIEdMX0NNRChnbERpc2FibGUoR0xfU1RFTkNJTF9U
RVNUKSkKKyAgICAgICAgcHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJHTERhdGE6OlNpbXBsZVByb2dy
YW07CiAKKyAgICBjb25zdCBUZXh0dXJlTWFwcGVyR0xEYXRhOjpQcm9ncmFtSW5mbyYgcHJvZ3Jh
bUluZm8gPSBkYXRhKCkucHJvZ3JhbXNbcHJvZ3JhbV07CisgICAgR0xfQ01EKGdsVXNlUHJvZ3Jh
bShwcm9ncmFtSW5mby5pZCkpCisgICAgZGF0YSgpLmN1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTsK
KyAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShnSW5WZXJ0ZXhBdHRyaWJ1dGVJ
bmRleCkpCiAgICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpCiAgICAgR0xf
Q01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4dHVyZUdMLm1faWQpKQogICAgIEdM
X0NNRChnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCAwKSkKKwogICAgIGNvbnN0IEdMZmxv
YXQgdW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKLSAgICBHTF9DTUQoZ2xW
ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdW5pdFJlY3Qp
KQorICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIoZ0luVmVydGV4QXR0cmlidXRlSW5k
ZXgsIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdW5pdFJlY3QpKQogCiAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoZGF0YSgpLnByb2plY3Rp
b25NYXRyaXgpLm11bHRpcGx5KG1vZGVsVmlld01hdHJpeCkubXVsdGlwbHkoVHJhbnNmb3JtYXRp
b25NYXRyaXgoCiAgICAgICAgICAgICB0YXJnZXRSZWN0LndpZHRoKCksIDAsIDAsIDAsCkBAIC00
MDYsMTAgKzQyMSwxMSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3Qg
Qml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIHRleHR1cmVHTC5tX3JlbGF0aXZlU2l6ZS5oZWlnaHQo
KSwgMCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxLCAw
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDF9OwotICAg
IEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFwcGVy
R0xEYXRhOjpTaGFkZXJJbmZvOjpJbk1hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00KSkK
LSAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1h
cHBlckdMRGF0YTo6U2hhZGVySW5mbzo6SW5Tb3VyY2VNYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZB
TFNFLCBtNHNyYykpCi0gICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4
dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6U291cmNlVGV4dHVyZVZhcmlhYmxlXSwgMCkp
Ci0gICAgR0xfQ01EKGdsVW5pZm9ybTFmKHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdM
RGF0YTo6U2hhZGVySW5mbzo6T3BhY2l0eVZhcmlhYmxlXSwgb3BhY2l0eSkpCisKKyAgICBHTF9D
TUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0
YTo6SW5NYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNCkpCisgICAgR0xfQ01EKGdsVW5p
Zm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleHR1cmVNYXBwZXJHTERhdGE6OkluU291
cmNlTWF0cml4VmFyaWFibGVdLCAxLCBHTF9GQUxTRSwgbTRzcmMpKQorICAgIEdMX0NNRChnbFVu
aWZvcm0xaShwcm9ncmFtSW5mby52YXJzW1RleHR1cmVNYXBwZXJHTERhdGE6OlNvdXJjZVRleHR1
cmVWYXJpYWJsZV0sIDApKQorICAgIEdMX0NNRChnbFVuaWZvcm0xZihwcm9ncmFtSW5mby52YXJz
W1RleHR1cmVNYXBwZXJHTERhdGE6Ok9wYWNpdHlWYXJpYWJsZV0sIG9wYWNpdHkpKQogCiAgICAg
aWYgKG1hc2tUZXh0dXJlICYmIG1hc2tUZXh0dXJlLT5pc1ZhbGlkKCkpIHsKICAgICAgICAgY29u
c3QgQml0bWFwVGV4dHVyZUdMKiBtYXNrVGV4dHVyZUdMID0gc3RhdGljX2Nhc3Q8Y29uc3QgQml0
bWFwVGV4dHVyZUdMKj4obWFza1RleHR1cmUpOwpAQCAtNDE5LDggKzQzNSw4IEBAIHZvaWQgVGV4
dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBj
b25zdCBJbnRSZWN0JiB0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsIG1hc2tUZXh0dXJlR0wtPm1fcmVsYXRpdmVTaXplLmhlaWdodCgpLCAwLCAwLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAxLCAwLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAxfTsKLSAgICAgICAgR0xf
Q01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1RleHR1cmVNYXBwZXJHTERh
dGE6OlNoYWRlckluZm86OkluTWFza01hdHJpeFZhcmlhYmxlXSwgMSwgR0xfRkFMU0UsIG00bWFz
aykpOwotICAgICAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJl
TWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpNYXNrVGV4dHVyZVZhcmlhYmxlXSwgMSkpCisgICAg
ICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFyc1tUZXh0dXJlTWFw
cGVyR0xEYXRhOjpJbk1hc2tNYXRyaXhWYXJpYWJsZV0sIDEsIEdMX0ZBTFNFLCBtNG1hc2spKTsK
KyAgICAgICAgR0xfQ01EKGdsVW5pZm9ybTFpKHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBl
ckdMRGF0YTo6TWFza1RleHR1cmVWYXJpYWJsZV0sIDEpKQogICAgICAgICBHTF9DTUQoZ2xBY3Rp
dmVUZXh0dXJlKEdMX1RFWFRVUkUwKSkKICAgICB9CiAKQEAgLTQzMSw3ICs0NDcsOSBAQCB2b2lk
IFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVy
ZSwgY29uc3QgSW50UmVjdCYgdAogICAgICAgICBHTF9DTUQoZ2xFbmFibGUoR0xfQkxFTkQpKQog
ICAgIH0KIAorICAgIEdMX0NNRChnbERpc2FibGUoR0xfREVQVEhfVEVTVCkpCiAgICAgR0xfQ01E
KGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpKQorICAgIEdMX0NNRChnbERpc2Fi
bGVWZXJ0ZXhBdHRyaWJBcnJheShnSW5WZXJ0ZXhBdHRyaWJ1dGVJbmRleCkpCiB9CiAKIGNvbnN0
IGNoYXIqIFRleHR1cmVNYXBwZXJHTDo6dHlwZSgpIGNvbnN0CkBAIC00NDMsNyArNDYxLDcgQEAg
dm9pZCBCaXRtYXBUZXh0dXJlR0w6OnJlc2V0KGNvbnN0IEludFNpemUmIG5ld1NpemUsIGJvb2wg
b3BhcXVlKQogewogICAgIEJpdG1hcFRleHR1cmU6OnJlc2V0KG5ld1NpemUsIG9wYXF1ZSk7CiAg
ICAgbV9pbWFnZSA9IDA7Ci0gICAgSW50U2l6ZSBuZXdUZXh0dXJlU2l6ZSA9IG5leHRQb3dlck9m
VHdvKG5ld1NpemUpOworICAgIEludFNpemUgbmV3VGV4dHVyZVNpemUgPSBuZXdTaXplOwogICAg
IGJvb2wganVzdENyZWF0ZWQgPSBmYWxzZTsKICAgICBpZiAoIW1faWQpIHsKICAgICAgICAgR0xf
Q01EKGdsR2VuVGV4dHVyZXMoMSwgJm1faWQpKQpAQCAtNDc4LDI4ICs0OTYsMjggQEAgdm9pZCBC
aXRtYXBUZXh0dXJlR0w6OmVuZFBhaW50KCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fYnVmZmVy
LT5lbmRQYWludCgpOwogICAgIEdMX0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1f
aWQpKQotICAgIEdMX0NNRChnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9kaXJ0
eVJlY3QueCgpLCBtX2RpcnR5UmVjdC55KCksIG1fZGlydHlSZWN0LndpZHRoKCksIG1fZGlydHlS
ZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBtX2J1ZmZlci0+ZGF0YSgp
KSkKKyAgICBHTF9DTUQoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1fZGlydHlS
ZWN0LngoKSwgbV9kaXJ0eVJlY3QueSgpLCBtX2RpcnR5UmVjdC53aWR0aCgpLCBtX2RpcnR5UmVj
dC5oZWlnaHQoKSwgR0xfQkdSQSwgR0xfVU5TSUdORURfQllURSwgbV9idWZmZXItPmRhdGEoKSkp
CiAgICAgbV9idWZmZXIuY2xlYXIoKTsKIH0KIAogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OnNldENv
bnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiB7Ci0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZl
SW1hZ2UgPSBpbWFnZSA/IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIDogMDsK
LSAgICBpZiAoIWltYWdlIHx8ICFuYXRpdmVJbWFnZSkgeworICAgIHVpbnQ2NF90IHVpZCA9IGlt
YWdlID8gdWlkRm9ySW1hZ2UoaW1hZ2UpIDogMDsKKyAgICBpZiAoIWltYWdlIHx8ICF1aWQpIHsK
ICAgICAgICAgaWYgKG1faW1hZ2UpCiAgICAgICAgICAgICBkZXN0cm95KCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpZiAobmF0aXZlSW1hZ2UgPT0gbV9pbWFnZSkKKyAgICBpZiAo
dWlkID09IG1faW1hZ2UpCiAgICAgICAgIHJldHVybjsKICAgICBib29sIGZvdW5kID0gZmFsc2U7
Ci0gICAgR0x1aW50IG5ld1RleHR1cmVJRCA9IG1fdGV4dHVyZU1hcHBlci0+ZGF0YSgpLmRpcmVj
dGx5Q29tcG9zaXRlZEltYWdlcy5maW5kT3JDcmVhdGUobmF0aXZlSW1hZ2UsIGZvdW5kKTsKKyAg
ICBHTHVpbnQgbmV3VGV4dHVyZUlEID0gbV90ZXh0dXJlTWFwcGVyLT5kYXRhKCkuZGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2VzLmZpbmRPckNyZWF0ZSh1aWQsIGZvdW5kKTsKICAgICBpZiAobmV3VGV4
dHVyZUlEICE9IG1faWQpIHsKKyAgICAgICAgbV9pbWFnZSA9IHVpZDsKICAgICAgICAgZGVzdHJv
eSgpOwogICAgICAgICBtX2lkID0gbmV3VGV4dHVyZUlEOwogICAgICAgICByZXNldChpbWFnZS0+
c2l6ZSgpLCBmYWxzZSk7Ci0gICAgICAgIG1faW1hZ2UgPSBuYXRpdmVJbWFnZTsKICAgICAgICAg
aWYgKCFmb3VuZCkgewogICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoYmVnaW5Q
YWludChJbnRSZWN0KDAsIDAsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0dXJlU2l6ZS5o
ZWlnaHQoKSkpKTsKICAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGltYWdlLCBDb2xvclNw
YWNlRGV2aWNlUkdCLCBJbnRQb2ludCgwLCAwKSwgQ29tcG9zaXRlQ29weSk7CkBAIC01MTIsOSAr
NTMwLDEzIEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpkZXN0cm95KCkKIHsKICAgICBpZiAobV9p
ZCAmJiAoIW1faW1hZ2UgfHwgIW1fdGV4dHVyZU1hcHBlci0+ZGF0YSgpLmRpcmVjdGx5Q29tcG9z
aXRlZEltYWdlcy5kZXJlZihtX2ltYWdlKSkpCiAgICAgICAgIEdMX0NNRChnbERlbGV0ZVRleHR1
cmVzKDEsICZtX2lkKSkKKwogICAgIGlmIChtX2ZibykKICAgICAgICAgR0xfQ01EKGdsRGVsZXRl
RnJhbWVidWZmZXJzKDEsICZtX2ZibykpCiAKKyAgICBpZiAobV9yYm8pCisgICAgICAgIEdMX0NN
RChnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fcmJvKSkKKwogICAgIG1fZmJvID0gMDsKICAg
ICBtX2lkID0gMDsKICAgICBtX3RleHR1cmVTaXplID0gSW50U2l6ZSgpOwpAQCAtNTMzLDg2ICs1
NTUsOTAgQEAgSW50U2l6ZSBCaXRtYXBUZXh0dXJlR0w6OnNpemUoKSBjb25zdAogCiBzdGF0aWMg
aW5saW5lIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgYm9vbCBmbGlwKQogeworICAgIGNvbnN0IGZsb2F0IG5lYXIgPSA5OTk5
OTk5OworICAgIGNvbnN0IGZsb2F0IGZhciA9IC05OTk5OTsKKwogICAgIHJldHVybiBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgyLjAgLyBmbG9hdChzaXplLndpZHRoKCkpLCAwLCAwLCAwLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAoZmxpcCA/IC0yLjAgOiAyLjApIC8gZmxvYXQo
c2l6ZS5oZWlnaHQoKSksIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IDAsIC0wLjAwMDAwMSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIGZs
aXAgPyAxIDogLTEsIDAsIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAw
LCAtMi5mIC8gKGZhciAtIG5lYXIpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAtMSwgZmxpcCA/IDEgOiAtMSwgLShmYXIgKyBuZWFyKSAvIChmYXIgLSBuZWFyKSwgMSk7CiB9
CiAKIFRleHR1cmVNYXBwZXJHTDo6flRleHR1cmVNYXBwZXJHTCgpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIAogYm9vbCBUZXh0dXJlTWFwcGVy
R0w6Om1ha2VDb250ZXh0Q3VycmVudCgpCiB7Ci0jaWYgT1MoTUFDX09TX1gpCi0gICAgcmV0dXJu
IGFnbFNldEN1cnJlbnRDb250ZXh0KGRhdGEoKS5hZ2xDb250ZXh0KTsKLSNlbGlmIE9TKFVOSVgp
Ci0gICAgRGlzcGxheSogZGlzcGxheSA9IFhPcGVuRGlzcGxheSgwKTsKLSAgICBpZiAoIWRpc3Bs
YXkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gZ2xYTWFrZUN1cnJlbnQoZGlz
cGxheSwgZGF0YSgpLmdseERyYXdhYmxlLCBkYXRhKCkuZ2x4Q29udGV4dCk7Ci0jZW5kaWYKKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6Om9idGFpbkN1cnJlbnRD
b250ZXh0KCkKIHsKLSNpZiBPUyhNQUNfT1NfWCkKLSAgICBkYXRhKCkuYWdsQ29udGV4dCA9IGFn
bEdldEN1cnJlbnRDb250ZXh0KCk7Ci0jZWxpZiBPUyhVTklYKQotICAgIGRhdGEoKS5nbHhEcmF3
YWJsZSA9IGdsWEdldEN1cnJlbnREcmF3YWJsZSgpOwotICAgIGRhdGEoKS5nbHhDb250ZXh0ID0g
Z2xYR2V0Q3VycmVudENvbnRleHQoKTsKLSNlbmRpZgogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJH
TDo6YmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSAqc3VyZmFjZVBvaW50ZXIpCiB7CiAgICAgQml0
bWFwVGV4dHVyZUdMKiBzdXJmYWNlID0gc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVyZUdMKj4oc3Vy
ZmFjZVBvaW50ZXIpOwogCi0gICAgaWYgKCFzdXJmYWNlKQorICAgIGlmICghc3VyZmFjZSkgewor
ICAgICAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApKQorICAg
ICAgICBkYXRhKCkucHJvamVjdGlvbk1hdHJpeCA9IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgodmll
d3BvcnRTaXplKCksIHRydWUpLm11bHRpcGx5KHRyYW5zZm9ybSgpKTsKKyAgICAgICAgR0xfQ01E
KGdsU3RlbmNpbEZ1bmMoZGF0YSgpLnN0ZW5jaWxJbmRleCA+IDEgPyBHTF9FUVVBTCA6IEdMX0FM
V0FZUywgZGF0YSgpLnN0ZW5jaWxJbmRleCAtIDEsIGRhdGEoKS5zdGVuY2lsSW5kZXggLSAxKSkK
KyAgICAgICAgR0xfQ01EKGdsU3RlbmNpbE9wKEdMX0tFRVAsIEdMX0tFRVAsIEdMX0tFRVApKQor
ICAgICAgICBHTF9DTUQoZ2xWaWV3cG9ydCgwLCAwLCB2aWV3cG9ydFNpemUoKS53aWR0aCgpLCB2
aWV3cG9ydFNpemUoKS5oZWlnaHQoKSkpCiAgICAgICAgIHJldHVybjsKLQotICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IG1hdHJpeCA9IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgoc3VyZmFjZS0+c2l6
ZSgpLCBmYWxzZSk7Ci0gICAgbWF0cml4LnRyYW5zbGF0ZSgtc3VyZmFjZS0+b2Zmc2V0KCkueCgp
LCAtc3VyZmFjZS0+b2Zmc2V0KCkueSgpKTsKKyAgICB9CiAKICAgICBpZiAoc3VyZmFjZS0+bV9z
dXJmYWNlTmVlZHNSZXNldCB8fCAhc3VyZmFjZS0+bV9mYm8pIHsKICAgICAgICAgaWYgKCFzdXJm
YWNlLT5tX2ZibykKICAgICAgICAgICAgIEdMX0NNRChnbEdlbkZyYW1lYnVmZmVycygxLCAmc3Vy
ZmFjZS0+bV9mYm8pKQorICAgICAgICBpZiAoIXN1cmZhY2UtPm1fcmJvKQorICAgICAgICAgICAg
R0xfQ01EKGdsR2VuUmVuZGVyYnVmZmVycygxLCAmc3VyZmFjZS0+bV9yYm8pKTsKKyAgICAgICAg
R0xfQ01EKGdsQmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHN1cmZhY2UtPm1fcmJv
KSkKKyNpZiBURVhNQVBfT1BFTkdMX0VTXzIKKyAgICAgICAgR0xfQ01EKGdsUmVuZGVyYnVmZmVy
U3RvcmFnZShHTF9SRU5ERVJCVUZGRVIsIEdMX1NURU5DSUxfSU5ERVg4LCBzdXJmYWNlLT5tX3Rl
eHR1cmVTaXplLndpZHRoKCksIHN1cmZhY2UtPm1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpKQorI2Vs
c2UKKyAgICAgICAgR0xfQ01EKGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTF9SRU5ERVJCVUZGRVIs
IEdMX0RFUFRIX1NURU5DSUwsIHN1cmZhY2UtPm1fdGV4dHVyZVNpemUud2lkdGgoKSwgc3VyZmFj
ZS0+bV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSkpCisjZW5kaWYKICAgICAgICAgR0xfQ01EKGdsQmlu
ZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBzdXJmYWNlLT5tX2ZibykpCiAgICAgICAgIEdM
X0NNRChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApKQorICAgICAgICBHTF9DTUQoZ2xC
aW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgMCkpCiAgICAgICAgIEdMX0NNRChnbEZy
YW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwg
R0xfVEVYVFVSRV8yRCwgc3VyZmFjZS0+bV9pZCwgMCkpCisgICAgICAgIEdMX0NNRChnbEZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQs
IEdMX1JFTkRFUkJVRkZFUiwgc3VyZmFjZS0+bV9yYm8pKQorI2lmIENQVShYODYpCisgICAgICAg
IEdMX0NNRChnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9ERVBU
SF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIHN1cmZhY2UtPm1fcmJvKSk7CisjZW5kaWYK
ICAgICAgICAgR0xfQ01EKGdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKSkKLSAgICAgICAgR0xfQ01E
KGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCkpCisgICAgICAgIEdMX0NNRChnbENsZWFyU3Rl
bmNpbChkYXRhKCkuc3RlbmNpbEluZGV4IC0gMSkpCisgICAgICAgIEdMX0NNRChnbENsZWFyKEdM
X1NURU5DSUxfQlVGRkVSX0JJVCB8IEdMX0NPTE9SX0JVRkZFUl9CSVQgfCBHTF9ERVBUSF9CVUZG
RVJfQklUKSkKICAgICAgICAgc3VyZmFjZS0+bV9zdXJmYWNlTmVlZHNSZXNldCA9IGZhbHNlOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIEdMX0NNRChnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJV
RkZFUiwgc3VyZmFjZS0+bV9mYm8pKQogICAgIH0KLQorICAgIGdsU3RlbmNpbE9wKEdMX0tFRVAs
IEdMX0tFRVAsIEdMX0tFRVApOworICAgIGdsU3RlbmNpbEZ1bmMoZGF0YSgpLnN0ZW5jaWxJbmRl
eCA+IDEgPyBHTF9HRVFVQUwgOiBHTF9BTFdBWVMsIGRhdGEoKS5zdGVuY2lsSW5kZXggLSAxLCBk
YXRhKCkuc3RlbmNpbEluZGV4IC0gMSk7CiAgICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwgc3Vy
ZmFjZS0+c2l6ZSgpLndpZHRoKCksIHN1cmZhY2UtPnNpemUoKS5oZWlnaHQoKSkpCi0gICAgZGF0
YSgpLnByb2plY3Rpb25NYXRyaXggPSBtYXRyaXg7CisgICAgZGF0YSgpLnByb2plY3Rpb25NYXRy
aXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KHN1cmZhY2UtPnNpemUoKSwgZmFsc2UpOworICAg
IGdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJHTDo6
c2V0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIEdMX0NNRChnbFNjaXNzb3IocmVj
dC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKQotICAgIEdMX0NN
RChnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpKQotfQotCi0KLXZvaWQgVGV4dHVyZU1hcHBlckdM
OjpwYWludFRvVGFyZ2V0KGNvbnN0IEJpdG1hcFRleHR1cmUmIGFTdXJmYWNlLCBjb25zdCBJbnRT
aXplJiBzdXJmYWNlU2l6ZSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwg
ZmxvYXQgb3BhY2l0eSwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpCit2b2lkIFRleHR1cmVN
YXBwZXJHTDo6YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdN
YXRyaXgsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCkKIHsKLSAgICBjb25zdCBCaXRtYXBU
ZXh0dXJlR0wmIHN1cmZhY2UgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihh
U3VyZmFjZSk7CisgICAgVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVyUHJvZ3JhbUluZGV4IHBy
b2dyYW0gPSBUZXh0dXJlTWFwcGVyR0xEYXRhOjpDbGlwUHJvZ3JhbTsKKyAgICBjb25zdCBUZXh0
dXJlTWFwcGVyR0xEYXRhOjpQcm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8gPSBkYXRhKCkucHJvZ3Jh
bXNbcHJvZ3JhbV07CisgICAgR0xfQ01EKGdsVXNlUHJvZ3JhbShwcm9ncmFtSW5mby5pZCkpCisg
ICAgR0xfQ01EKGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZ0luVmVydGV4QXR0cmlidXRlSW5k
ZXgpKQorICAgIGNvbnN0IEdMZmxvYXQgdW5pdFJlY3RbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAw
LCAxfTsKKyAgICBHTF9DTUQoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKGdJblZlcnRleEF0dHJpYnV0
ZUluZGV4LCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHVuaXRSZWN0KSkKIAotICAgIC8vIENy
ZWF0ZSB0aGUgbW9kZWwtdmlldy1wcm9qZWN0aW9uIG1hdHJpeCB0byBkaXNwbGF5IG9uIHNjcmVl
bi4KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0
cml4KHN1cmZhY2VTaXplLCB0cnVlKS5tdWx0aXBseSh0cmFuc2Zvcm0pLm11bHRpcGx5KAotICAg
ICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KAotICAgICAgICAgICAgICAgICAgICAg
ICAgc3VyZmFjZS5tX2FjdHVhbFNpemUud2lkdGgoKSwgMCwgMCwgMCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIDAsIHN1cmZhY2UubV9hY3R1YWxTaXplLmhlaWdodCgpLCAwLCAwLAotICAgICAg
ICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1
cmZhY2Uub2Zmc2V0KCkueCgpLCBzdXJmYWNlLm9mZnNldCgpLnkoKSwgMCwgMSkKLSAgICAgICAg
ICAgICk7CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3Jt
YXRpb25NYXRyaXgoZGF0YSgpLnByb2plY3Rpb25NYXRyaXgpCisgICAgICAgICAgICAubXVsdGlw
bHkobW9kZWxWaWV3TWF0cml4KQorICAgICAgICAgICAgLm11bHRpcGx5KFRyYW5zZm9ybWF0aW9u
TWF0cml4KHRhcmdldFJlY3Qud2lkdGgoKSwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAwLCB0
YXJnZXRSZWN0LmhlaWdodCgpLCAwLCAwLAorICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCisg
ICAgICAgICAgICAgICAgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCAwLCAxKSk7CiAK
ICAgICBjb25zdCBHTGZsb2F0IG00W10gPSB7CiAgICAgICAgIG1hdHJpeC5tMTEoKSwgbWF0cml4
Lm0xMigpLCBtYXRyaXgubTEzKCksIG1hdHJpeC5tMTQoKSwKQEAgLTYyMSwzNiArNjQ3LDIzIEBA
IHZvaWQgVGV4dHVyZU1hcHBlckdMOjpwYWludFRvVGFyZ2V0KGNvbnN0IEJpdG1hcFRleHR1cmUm
IGFTdXJmYWNlLCBjb25zdCBJbnRTaXplCiAgICAgICAgIG1hdHJpeC5tNDEoKSwgbWF0cml4Lm00
MigpLCBtYXRyaXgubTQzKCksIG1hdHJpeC5tNDQoKQogICAgIH07CiAKLSAgICBjb25zdCBHTGZs
b2F0IG00c3JjW10gPSB7c3VyZmFjZS5tX3JlbGF0aXZlU2l6ZS53aWR0aCgpLCAwLCAwLCAwLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHN1cmZhY2UubV9yZWxhdGl2
ZVNpemUuaGVpZ2h0KCksIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMCwgMCwgMSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAw
LCAwLCAxfTsKLQotICAgIC8vIFdlIGFscmVhZHkgYmxlbmRlZCB0aGUgYWxwaGEgaW47IHRoZSBy
ZXN1bHQgaXMgcHJlbXVsdGlwbGllZC4KLSAgICBHTF9DTUQoZ2xVc2VQcm9ncmFtKGRhdGEoKS5z
aGFkZXJJbmZvLnByb2dyYW1zW1RleHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86OlRhcmdl
dFByb2dyYW1dLmlkKSkKLSAgICBHTF9DTUQoZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZG
RVIsIDApKQotICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAsIHN1cmZhY2VTaXplLndpZHRoKCks
IHN1cmZhY2VTaXplLmhlaWdodCgpKSkKLSAgICBHTF9DTUQoZ2xEaXNhYmxlKEdMX1NURU5DSUxf
VEVTVCkpCi0gICAgY29uc3QgVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6UHJvZ3Jh
bUluZm8mIHByb2dyYW1JbmZvID0gZGF0YSgpLnNoYWRlckluZm8ucHJvZ3JhbXNbVGV4dHVyZU1h
cHBlckdMRGF0YTo6U2hhZGVySW5mbzo6VGFyZ2V0UHJvZ3JhbV07Ci0gICAgR0xfQ01EKGdsVW5p
Zm9ybTFmKHByb2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhZGVySW5mbzo6
T3BhY2l0eVZhcmlhYmxlXSwgb3BhY2l0eSkpCi0gICAgR0xfQ01EKGdsQWN0aXZlVGV4dHVyZShH
TF9URVhUVVJFMCkpCi0gICAgR0xfQ01EKGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgc3Vy
ZmFjZS5tX2lkKSkKLSAgICBHTF9DTUQoZ2xVbmlmb3JtMWkocHJvZ3JhbUluZm8udmFyc1tUZXh0
dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpTb3VyY2VUZXh0dXJlVmFyaWFibGVdLCAwKSkK
LSAgICBHTF9DTUQoZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShnSW5WZXJ0ZXhBdHRyaWJ1dGVJ
bmRleCkpCi0gICAgR0xfQ01EKGdsVW5pZm9ybU1hdHJpeDRmdihwcm9ncmFtSW5mby52YXJzW1Rl
eHR1cmVNYXBwZXJHTERhdGE6OlNoYWRlckluZm86OkluTWF0cml4VmFyaWFibGVdLCAxLCBHTF9G
QUxTRSwgbTQpKQotICAgIEdMX0NNRChnbFVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbUluZm8udmFy
c1tUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZvOjpJblNvdXJjZU1hdHJpeFZhcmlhYmxl
XSwgMSwgR0xfRkFMU0UsIG00c3JjKSkKLSAgICBHTF9DTUQoZ2xCaW5kQnVmZmVyKEdMX0FSUkFZ
X0JVRkZFUiwgMCkpCi0gICAgY29uc3QgR0xmbG9hdCB1bml0UmVjdFtdID0gezAsIDAsIDEsIDAs
IDEsIDEsIDAsIDF9OwotICAgIEdMX0NNRChnbFZlcnRleEF0dHJpYlBvaW50ZXIoMCwgMiwgR0xf
RkxPQVQsIEdMX0ZBTFNFLCAwLCB1bml0UmVjdCkpCi0gICAgR0xfQ01EKGdsQmxlbmRGdW5jKEdM
X09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSkpCi0gICAgR0xfQ01EKGdsRW5hYmxlKEdMX0JM
RU5EKSkKLSAgICBzZXRDbGlwKHZpc2libGVSZWN0KTsKKyAgICBpbnQmIHN0ZW5jaWxJbmRleCA9
IGRhdGEoKS5zdGVuY2lsSW5kZXg7CiAKKyAgICBHTF9DTUQoZ2xVbmlmb3JtTWF0cml4NGZ2KHBy
b2dyYW1JbmZvLnZhcnNbVGV4dHVyZU1hcHBlckdMRGF0YTo6SW5NYXRyaXhWYXJpYWJsZV0sIDEs
IEdMX0ZBTFNFLCBtNCkpCisgICAgZ2xFbmFibGUoR0xfU1RFTkNJTF9URVNUKTsKKyAgICBHTF9D
TUQoZ2xTdGVuY2lsRnVuYyhHTF9ORVZFUiwgc3RlbmNpbEluZGV4LCBzdGVuY2lsSW5kZXgpKQor
ICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9SRVBMQUNFLCBHTF9SRVBMQUNFLCBHTF9SRVBMQUNF
KSkKKyAgICBHTF9DTUQoZ2xTdGVuY2lsTWFzaygweGZmICYgfihzdGVuY2lsSW5kZXggLSAxKSkp
CiAgICAgR0xfQ01EKGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpKQotICAgIEdM
X0NNRChnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKSkKLSAgICBHTF9DTUQoZ2xVc2VQcm9n
cmFtKDApKQotICAgIEdMX0NNRChnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCAwKSkKLSAg
ICBkYXRhKCkuY3VycmVudFByb2dyYW0gPSBUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFkZXJJbmZv
OjpUYXJnZXRQcm9ncmFtOworICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9LRUVQLCBHTF9LRUVQ
LCBHTF9LRUVQKSkKKyAgICBzdGVuY2lsSW5kZXggPDw9IDE7CisgICAgZ2xTdGVuY2lsRnVuYyhz
dGVuY2lsSW5kZXggPiAxID8gR0xfRVFVQUwgOiBHTF9BTFdBWVMsIHN0ZW5jaWxJbmRleCAtIDEs
IHN0ZW5jaWxJbmRleCAtIDEpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZW5kQ2xpcCgp
Cit7CisgICAgZGF0YSgpLnN0ZW5jaWxJbmRleCA+Pj0gMTsKKyAgICBnbFN0ZW5jaWxGdW5jKGRh
dGEoKS5zdGVuY2lsSW5kZXggPiAxID8gR0xfRVFVQUwgOiBHTF9BTFdBWVMsIGRhdGEoKS5zdGVu
Y2lsSW5kZXggLSAxLCBkYXRhKCkuc3RlbmNpbEluZGV4IC0gMSk7CiB9CiAKIFBhc3NSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGVUZXh0dXJlKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVy
R0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFw
cGVyR0wuaAppbmRleCA5MmM1MTk4Li4yNTgzZDgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCkBAIC0z
OCwxOSArMzgsMTYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJHTCgpOwog
CiAgICAgLy8gcmVpbXBzIGZyb20gVGV4dHVyZU1hcHBlcgotICAgIHZpcnR1YWwgdm9pZCBkcmF3
VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSwgY29uc3Qg
Qml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVy
ZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRt
YXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7CiAgICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJp
dG1hcFRleHR1cmUqIHN1cmZhY2UpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDbGlwKGNvbnN0IElu
dFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RhcmdldChjb25zdCBCaXRtYXBUZXh0
dXJlJiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQg
b3BhY2l0eSwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpOwotICAgIHZpcnR1YWwgYm9vbCBh
bGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwg
dm9pZCBiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kQ2xpcCgpOworICAgIHZpcnR1YWwgYm9vbCBhbGxv
d1N1cmZhY2VGb3JSb290KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpOwogICAgIHZpcnR1YWwgY29u
c3QgY2hhciogdHlwZSgpIGNvbnN0OwogICAgIHZvaWQgb2J0YWluQ3VycmVudENvbnRleHQoKTsK
ICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHN0YXRpYyBQYXNzT3duUHRyPFRl
eHR1cmVNYXBwZXJHTD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgVGV4dHVy
ZU1hcHBlckdMOwotICAgIH0KKyAgICBzdGF0aWMgUGFzc093blB0cjxUZXh0dXJlTWFwcGVyR0w+
IGNyZWF0ZSgpIHsgcmV0dXJuIG5ldyBUZXh0dXJlTWFwcGVyR0w7IH0KIAogcHJpdmF0ZToKICAg
ICBpbmxpbmUgVGV4dHVyZU1hcHBlckdMRGF0YSYgZGF0YSgpIHsgcmV0dXJuICptX2RhdGE7IH0K
QEAgLTg0LDYgKzgxLDggQEAgc3RhdGljIGlubGluZSBJbnRTaXplIG5leHRQb3dlck9mVHdvKGNv
bnN0IEludFNpemUmIHNpemUpCiAgICAgcmV0dXJuIEludFNpemUobmV4dFBvd2VyT2ZUd28oc2l6
ZS53aWR0aCgpKSwgbmV4dFBvd2VyT2ZUd28oc2l6ZS5oZWlnaHQoKSkpOwogfQogCit1aW50NjRf
dCB1aWRGb3JJbWFnZShJbWFnZSopOworCiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwCmluZGV4
IDZmZGQ3ZGYuLmVjNGI4NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcApAQCAtOTgsMTIgKzk4LDI4IEBAIHZv
aWQgQml0bWFwVGV4dHVyZVF0Ojp1bnBhY2soKQogICAgIG1faW1hZ2UgPSBRSW1hZ2UoKTsKIH0K
IAotdm9pZCBUZXh0dXJlTWFwcGVyUXQ6OnNldENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCkKK3Zv
aWQgVGV4dHVyZU1hcHBlclF0OjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1hdHJpeCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgICBRUGFpbnRlciogcGFpbnRl
ciA9IG1fY3VycmVudFN1cmZhY2UgPyAmbV9jdXJyZW50U3VyZmFjZS0+bV9wYWludGVyIDogbV9w
YWludGVyOworICAgICBwYWludGVyLT5zYXZlKCk7CisgICAgIFFUcmFuc2Zvcm0gcHJldlRyYW5z
Zm9ybSA9IHBhaW50ZXItPnRyYW5zZm9ybSgpOworICAgICBwYWludGVyLT5zZXRUcmFuc2Zvcm0o
bWF0cml4LCBmYWxzZSk7CiAgICAgIHBhaW50ZXItPnNldENsaXBSZWN0KHJlY3QpOworICAgICBw
YWludGVyLT5zZXRUcmFuc2Zvcm0ocHJldlRyYW5zZm9ybSwgZmFsc2UpOwogfQogCit2b2lkIFRl
eHR1cmVNYXBwZXJRdDo6ZW5kQ2xpcCgpCit7CisgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBtX2N1
cnJlbnRTdXJmYWNlID8gJm1fY3VycmVudFN1cmZhY2UtPm1fcGFpbnRlciA6IG1fcGFpbnRlcjsK
KyAgICBwYWludGVyLT5yZXN0b3JlKCk7Cit9CisKK0ludFNpemUgVGV4dHVyZU1hcHBlclF0Ojp2
aWV3cG9ydFNpemUoKSBjb25zdAoreworICAgIHJldHVybiBJbnRTaXplKG1fcGFpbnRlci0+ZGV2
aWNlKCktPndpZHRoKCksIG1fcGFpbnRlci0+ZGV2aWNlKCktPmhlaWdodCgpKTsKK30KKworCiBU
ZXh0dXJlTWFwcGVyUXQ6OlRleHR1cmVNYXBwZXJRdCgpCiAgICAgOiBtX2N1cnJlbnRTdXJmYWNl
KDApCiB7CkBAIC0xMzIsNyArMTQ4LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyUXQ6OmJpbmRTdXJm
YWNlKEJpdG1hcFRleHR1cmUqIHN1cmZhY2UpCiB9CiAKIAotdm9pZCBUZXh0dXJlTWFwcGVyUXQ6
OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEludFJlY3Qm
IHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9w
YWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlKQordm9pZCBUZXh0dXJlTWFw
cGVyUXQ6OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwg
ZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1RleHR1cmUpCiB7CiAgICAg
Y29uc3QgQml0bWFwVGV4dHVyZVF0JiB0ZXh0dXJlUXQgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRt
YXBUZXh0dXJlUXQmPih0ZXh0dXJlKTsKICAgICBRUGFpbnRlciogcGFpbnRlciA9IG1fcGFpbnRl
cjsKQEAgLTE1Nyw3ICsxNzMsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJRdDo6ZHJhd1RleHR1cmUo
Y29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdAogICAgIGNvbnN0
IFFUcmFuc2Zvcm0gcHJldlRyYW5zZm9ybSA9IHBhaW50ZXItPnRyYW5zZm9ybSgpOwogICAgIHBh
aW50ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7CiAgICAgcGFpbnRlci0+c2V0VHJhbnNmb3JtKG1h
dHJpeCwgdHJ1ZSk7Ci0gICAgcGFpbnRlci0+ZHJhd1BpeG1hcCh0YXJnZXRSZWN0LCBwaXhtYXAs
IHRleHR1cmVRdC5zb3VyY2VSZWN0KCkpOworICAgIHBhaW50ZXItPmRyYXdQaXhtYXAodGFyZ2V0
UmVjdCwgcGl4bWFwLCBGbG9hdFJlY3QodGV4dHVyZVF0LnNvdXJjZVJlY3QoKSkpOwogICAgIHBh
aW50ZXItPnNldFRyYW5zZm9ybShwcmV2VHJhbnNmb3JtKTsKICAgICBwYWludGVyLT5zZXRPcGFj
aXR5KHByZXZPcGFjaXR5KTsKIH0KQEAgLTE2NSw4ICsxODEsOSBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJRdDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50
UmVjdCYgdAogUGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiBUZXh0dXJlTWFwcGVyOjpjcmVhdGUo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQogewogI2lmZGVmIFFUX09QRU5HTF9MSUIKLSAgICBp
ZiAoY29udGV4dCAmJiBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+cGFpbnRFbmdpbmUoKS0+
dHlwZSgpID09IFFQYWludEVuZ2luZTo6T3BlbkdMMikKLSAgICAgICAgcmV0dXJuIG5ldyBUZXh0
dXJlTWFwcGVyR0w7CisvLyAgICBPcGVuR0wgdGV4dHVyZSBtYXBwZXIgaXMgYnJva2VuIG5vdy4K
Ky8vICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5wYWludEVu
Z2luZSgpLT50eXBlKCkgPT0gUVBhaW50RW5naW5lOjpPcGVuR0wyKQorLy8gICAgICAgIHJldHVy
biBuZXcgVGV4dHVyZU1hcHBlckdMOwogI2VuZGlmCiAgICAgcmV0dXJuIG5ldyBUZXh0dXJlTWFw
cGVyUXQ7CiB9CkBAIC0xODgsNyArMjA1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQqIGJlZ2luUGFpbnQoY29uc3QgSW50UmVjdCYgcmVjdCwgYm9vbCBv
cGFxdWUpCiAgICAgewogICAgICAgICAvLyBtX2ltYWdlIGlzIG9ubHkgdXNpbmcgZHVyaW5nIHBh
aW50LCBpdCdzIHNhZmUgdG8gb3ZlcnJpZGUgaXQuCi0gICAgICAgIG1faW1hZ2UgPSBRSW1hZ2Uo
cmVjdC5zaXplKCkud2lkdGgoKSwgcmVjdC5zaXplKCkuaGVpZ2h0KCksIFFJbWFnZTo6Rm9ybWF0
X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsKKyAgICAgICAgbV9pbWFnZSA9IFFJbWFnZShyZWN0LnNp
emUoKS53aWR0aCgpLCByZWN0LnNpemUoKS5oZWlnaHQoKSwgb3BhcXVlID8gUUltYWdlOjpGb3Jt
YXRfUkdCMzIgOiBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZCk7CiAgICAgICAg
IGlmICghb3BhcXVlKQogICAgICAgICAgICAgbV9pbWFnZS5maWxsKDApOwogICAgICAgICBtX3Bh
aW50ZXIuYmVnaW4oJm1faW1hZ2UpOwpAQCAtMjEwLDUgKzIyNywxMCBAQCBQYXNzUmVmUHRyPFJH
QkEzMlByZW11bHRpbXBsaWVkQnVmZmVyPiBSR0JBMzJQcmVtdWx0aW1wbGllZEJ1ZmZlcjo6Y3Jl
YXRlKCkKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJHQkEzMlByZW11bHRpbXBsaWVkQnVmZmVy
UXQoKSk7CiB9CiAKK3VpbnQ2NF90IHVpZEZvckltYWdlKEltYWdlKiBpbWFnZSkKK3sKKyAgICBy
ZXR1cm4gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCktPnNlcmlhbE51bWJlcigp
OworfQorCiAjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5oCmluZGV4IGUxN2I5NjguLjYzNjE3NGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJR
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBw
ZXJRdC5oCkBAIC0yMSw3ICsyMSw3IEBACiAKICNpZm5kZWYgVGV4dHVyZU1hcHBlclF0X2gKICNk
ZWZpbmUgVGV4dHVyZU1hcHBlclF0X2gKLQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQml0bWFwVGV4dHVyZVF0IDogcHVibGlj
IEJpdG1hcFRleHR1cmUgewpAQCAtNTMsMTIgKzUzLDE0IEBAIGNsYXNzIFRleHR1cmVNYXBwZXJR
dCA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyIHsKIHB1YmxpYzoKICAgICBUZXh0dXJlTWFwcGVyUXQo
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0
ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4
dHVyZSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUm
IHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFz
a1RleHR1cmUpOwogICAgIHZpcnR1YWwgdm9pZCBiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlKiBz
dXJmYWNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xpcChjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCB2b2lkIGJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCk7CisgICAgdmlydHVhbCB2b2lkIGVuZENsaXAoKTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dCopOwogICAgIHZpcnR1
YWwgYm9vbCBhbGxvd1N1cmZhY2VGb3JSb290KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpOworICAg
IHZpcnR1YWwgSW50U2l6ZSB2aWV3cG9ydFNpemUoKSBjb25zdCA7CiAKICAgICBzdGF0aWMgdm9p
ZCBpbml0aWFsaXplKFFQYWludGVyKiBwYWludGVyKQogICAgIHsKQEAgLTc0LDMgKzc2LDQgQEAg
cHJpdmF0ZToKIAogfQogI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIuY3BwCmluZGV4IDQ2OTgyMzkuLmExZWRkZmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApAQCAtMzI5LDE2ICszMjksMTcgQEAgdm9pZCBH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNCYWNrZ3JvdW5kQ29sb3IoY29u
c3QgQ29sb3ImIGNvbG9yKQogICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzQmFja2dyb3Vu
ZENvbG9yKGNvbG9yKTsKIH0KIAotCiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpz
ZXRDb250ZW50c1RvTWVkaWEoUGxhdGZvcm1MYXllciogbWVkaWEpCiB7CiAgICAgR3JhcGhpY3NM
YXllcjo6c2V0Q29udGVudHNUb01lZGlhKG1lZGlhKTsKICAgICBub3RpZnlDaGFuZ2UoVGV4dHVy
ZU1hcHBlck5vZGU6OkNvbnRlbnRDaGFuZ2UpOwogICAgIG1fcGVuZGluZ0NvbnRlbnQuY29udGVu
dFR5cGUgPSBtZWRpYSA/IFRleHR1cmVNYXBwZXJOb2RlOjpNZWRpYUNvbnRlbnRUeXBlIDogVGV4
dHVyZU1hcHBlck5vZGU6OkhUTUxDb250ZW50VHlwZTsKLSAgICBpZiAobWVkaWEpCi0gICAgICAg
IG1fcGVuZGluZ0NvbnRlbnQubWVkaWEgPSBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyVmlkZW9M
YXllcio+KG1lZGlhKTsKLSAgICBlbHNlCi0gICAgICAgIG1fcGVuZGluZ0NvbnRlbnQubWVkaWEg
PSAwOworICAgIGlmIChtZWRpYSkgeworICAgICAgICBtX3BlbmRpbmdDb250ZW50Lm1lZGlhID0g
bWVkaWE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3BlbmRpbmdDb250ZW50Lm1l
ZGlhID0gMDsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCkBAIC0zNjUsMjIgKzM2
Niw4NiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzeW5jQ29tcG9zaXRpbmdT
dGF0ZSgpCiAgICAgbV9ub2RlLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSh0aGlzLCB0cnVlKTsKIH0K
IAotLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCi0gKi8KLU5hdGl2ZUxheWVyIEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjpuYXRpdmVMYXllcigpIGNvbnN0Citib29sIEdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZh
bHVlTGlzdCwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltLCBj
b25zdCBTdHJpbmcmIGtleWZyYW1lc05hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQogewotICAgIHJl
dHVybiBtX25vZGUuZ2V0KCk7CisgICAgQVNTRVJUKCFrZXlmcmFtZXNOYW1lLmlzRW1wdHkoKSk7
CisKKyAgICBpZiAoIWFuaW0gfHwgYW5pbS0+aXNFbXB0eU9yWmVyb0R1cmF0aW9uKCkgfHwgdmFs
dWVMaXN0LnNpemUoKSA8IDIgfHwgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJv
cGVydHlXZWJraXRUcmFuc2Zvcm0gJiYgdmFsdWVMaXN0LnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQ
cm9wZXJ0eU9wYWNpdHkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAvLyBUaGUg
c2FtZSBhbmltYXRpb24gbmFtZSBjYW4gYmUgdXNlZCBmb3IgdHdvIGFuaW1hdGlvbnMgd2l0aCBk
aWZmZXJlbnQgcHJvcGVydGllcy4KKyAgICAgICAgaWYgKG1fYW5pbWF0aW9uc1tpXS0+bmFtZSAh
PSBrZXlmcmFtZXNOYW1lIHx8IG1fYW5pbWF0aW9uc1tpXS0+a2V5ZnJhbWVzLnByb3BlcnR5KCkg
IT0gdmFsdWVMaXN0LnByb3BlcnR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAvLyBXZSBhbHJlYWR5IGhhdmUgYSBjb3B5IG9mIHRoaXMgYW5pbWF0aW9uLCB0aGF0IG1lYW5z
IHRoYXQgd2UncmUgcmVzdW1pbmcgaXQgcmF0aGVyIHRoYW4gYWRkaW5nIGl0LgorICAgICAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4mIGFuaW1hdGlvbiA9IG1fYW5pbWF0aW9uc1tp
XTsKKyAgICAgICAgYW5pbWF0aW9uLT5hbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZShhbmlt
KTsKKyAgICAgICAgYW5pbWF0aW9uLT5wYXVzZWQgPSBmYWxzZTsKKyAgICAgICAgYW5pbWF0aW9u
LT5zdGFydFRpbWUgPSBXVEY6OmN1cnJlbnRUaW1lKCkgLSB0aW1lT2Zmc2V0OworICAgICAgICBu
b3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkFuaW1hdGlvbkNoYW5nZSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
PiBhbmltYXRpb24gPSBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpjcmVhdGUodmFsdWVMaXN0KTsK
KyAgICBhbmltYXRpb24tPmJveFNpemUgPSBib3hTaXplOworICAgIGFuaW1hdGlvbi0+bmFtZSA9
IGtleWZyYW1lc05hbWU7CisgICAgYW5pbWF0aW9uLT5hbmltYXRpb24gPSBBbmltYXRpb246OmNy
ZWF0ZShhbmltKTsKKyAgICBhbmltYXRpb24tPnBhdXNlZCA9IGZhbHNlOworICAgIGFuaW1hdGlv
bi0+c3RhcnRUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpIC0gdGltZU9mZnNldDsKKworICAgIGlm
ICh2YWx1ZUxpc3QucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3Jt
KSB7CisgICAgICAgIGJvb2wgaGFzQmlnUm90YXRpb247CisgICAgICAgIGZldGNoVHJhbnNmb3Jt
T3BlcmF0aW9uTGlzdCh2YWx1ZUxpc3QsIGFuaW1hdGlvbi0+ZnVuY3Rpb25MaXN0LCBhbmltYXRp
b24tPmxpc3RzTWF0Y2gsIGhhc0JpZ1JvdGF0aW9uKTsKKyAgICB9CisKKyAgICBtX2FuaW1hdGlv
bnMuYXBwZW5kKGFuaW1hdGlvbik7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2Rl
OjpBbmltYXRpb25DaGFuZ2UpOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0
aW9uTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2FuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fYW5pbWF0aW9uc1tp
XS0+bmFtZSAhPSBhbmltYXRpb25OYW1lKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IG1fYW5pbWF0aW9uc1tpXS0+cGF1c2VkID0gdHJ1ZTsKKyAgICAgICAgbm90aWZ5Q2hhbmdlKFRl
eHR1cmVNYXBwZXJOb2RlOjpBbmltYXRpb25DaGFuZ2UpOworICAgIH0KK30KKwordm9pZCBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5p
bWF0aW9uTmFtZSkKK3sKKyAgICBmb3IgKGludCBpID0gbV9hbmltYXRpb25zLnNpemUoKSAtIDE7
IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIC8vIFRoZSBzYW1lIGFuaW1hdGlvbiBuYW1lIGNhbiBi
ZSB1c2VkIGZvciB0d28gYW5pbWF0aW9ucyB3aXRoIGRpZmZlcmVudCBwcm9wZXJ0aWVzLiBXZSBz
aG91bGQgcmVtb3ZlIGJvdGguCisgICAgICAgIGlmIChtX2FuaW1hdGlvbnNbaV0tPm5hbWUgIT0g
YW5pbWF0aW9uTmFtZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtX2FuaW1hdGlv
bnMucmVtb3ZlKGkpOworICAgICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkFu
aW1hdGlvbkNoYW5nZSk7CisgICAgfQorfQorCisKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5o
KQogKi8KIFBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpwbGF0Zm9y
bUxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9ub2RlLmdldCgpOworICAgIHJldHVybiAw
OworfQorCitHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6R3JhcGhpY3NMYXllckZhY3Rvcnkg
c19mYWN0b3J5ID0gMDsKKwordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0R3Jh
cGhpY3NMYXllckZhY3RvcnkoR3JhcGhpY3NMYXllckZhY3RvcnkgZmFjdG9yeSkKK3sKKyAgICBz
X2ZhY3RvcnkgPSBmYWN0b3J5OwogfQogCiBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IEdyYXBo
aWNzTGF5ZXI6OmNyZWF0ZShHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCiB7CisgICAgaWYo
c19mYWN0b3J5KQorICAgICAgICByZXR1cm4gc19mYWN0b3J5KGNsaWVudCk7CisKICAgICByZXR1
cm4gbmV3IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGNsaWVudCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKaW5kZXggNDdhMjdjNi4uNDU1YmFiZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKQEAgLTQ1LDYgKzQ1LDcgQEAg
cHVibGljOgogCiAgICAgLy8gcmVpbXBzIGZyb20gR3JhcGhpY3NMYXllci5oCiAgICAgdmlydHVh
bCB2b2lkIHNldE5lZWRzRGlzcGxheSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c05l
ZWRzRGlzcGxheSgpIHsgc2V0TmVlZHNEaXNwbGF5KCk7IH07CiAgICAgdmlydHVhbCB2b2lkIHNl
dE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0UGFyZW50KEdyYXBoaWNzTGF5ZXIqIGxheWVyKTsKICAgICB2aXJ0dWFsIGJvb2wgc2V0Q2hp
bGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYpOwpAQCAtODEsMjEgKzgyLDI4IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKICAgICB2
aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiAgICAg
dmlydHVhbCB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICB2aXJ0dWFsIE5h
dGl2ZUxheWVyIG5hdGl2ZUxheWVyKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVy
KiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9u
KGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgLypib3hTaXplKi8sIGNv
bnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgLyprZXlmcmFtZXNOYW1lKi8sIGRvdWJsZSAv
KnRpbWVPZmZzZXQqLykgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgYWRkQW5p
bWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYgLypib3hTaXpl
Ki8sIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgLyprZXlmcmFtZXNOYW1lKi8sIGRv
dWJsZSAvKnRpbWVPZmZzZXQqLyk7CisgICAgdmlydHVhbCB2b2lkIHBhdXNlQW5pbWF0aW9uKGNv
bnN0IFN0cmluZyYgLyphbmltYXRpb25OYW1lKi8sIGRvdWJsZSAvKnRpbWVPZmZzZXQqLyk7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIC8qYW5pbWF0aW9u
TmFtZSovKTsKIAogICAgIHZvaWQgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDaGFu
Z2VNYXNrIGNoYW5nZU1hc2spOwogICAgIGlubGluZSBUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVu
dERhdGEmIHBlbmRpbmdDb250ZW50KCkgeyByZXR1cm4gbV9wZW5kaW5nQ29udGVudDsgfQogICAg
IGlubGluZSBpbnQgY2hhbmdlTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbmdlTWFzazsgfQog
ICAgIHZvaWQgZGlkU3luY2hyb25pemUoKTsKIAorICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2Rl
KCkgeyByZXR1cm4gbV9ub2RlLmdldCgpOyB9CisKKyAgICB0eXBlZGVmIFBhc3NPd25QdHI8R3Jh
cGhpY3NMYXllcj4gKCpHcmFwaGljc0xheWVyRmFjdG9yeSkoR3JhcGhpY3NMYXllckNsaWVudCog
Y2xpZW50KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRHcmFwaGljc0xheWVyRmFjdG9yeShHcmFwaGlj
c0xheWVyRmFjdG9yeSBmYWN0b3J5KTsKKwogcHJpdmF0ZToKICAgICBPd25QdHI8VGV4dHVyZU1h
cHBlck5vZGU+IG1fbm9kZTsKICAgICBib29sIG1fc3luY1F1ZXVlZDsKICAgICBpbnQgbV9jaGFu
Z2VNYXNrOwogICAgIFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50RGF0YSBtX3BlbmRpbmdDb250
ZW50OworICAgIFZlY3RvcjxSZWZQdHI8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gPiBtX2FuaW1h
dGlvbnM7CiB9OwogCiBpbmxpbmUgc3RhdGljIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiB0
b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyLmgKaW5kZXggOGU0NmUzYy4uZTM2MWFhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCkBAIC00NSwxMiAr
NDUsMTQgQEAgY2xhc3MgVGV4dHVyZU1hcHBlcjsKIC8vIEEgMkQgdGV4dHVyZSB0aGF0IGNhbiBi
ZSB0aGUgdGFyZ2V0IG9mIHNvZnR3YXJlIG9yIEdMIHJlbmRlcmluZy4KIGNsYXNzIEJpdG1hcFRl
eHR1cmUgIDogcHVibGljIFJlZkNvdW50ZWQ8Qml0bWFwVGV4dHVyZT4gewogcHVibGljOgorICAg
IGVudW0gVHlwZSB7IENvbnRlbnRUZXh0dXJlLCBTdXJmYWNlVGV4dHVyZSB9OwogICAgIEJpdG1h
cFRleHR1cmUoKSA6IG1fbG9ja0NvdW50KDApIHt9CiAgICAgdmlydHVhbCB+Qml0bWFwVGV4dHVy
ZSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCkgeyB9CiAKICAgICB2aXJ0dWFsIGJv
b2wgYWxsb3dPZmZsaW5lVGV4dHVyZVVwbG9hZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSA9IDA7CiAgICAgdmlydHVhbCBJbnRTaXplIHNpemUo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgYnBwKCkgY29uc3QgeyByZXR1cm4gMzI7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
cmVzZXQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBvcGFxdWUgPSBmYWxzZSkKICAgICB7CkBA
IC03NSwxNiArNzcsMTIgQEAgcHVibGljOgogICAgIGlubGluZSB2b2lkIHVubG9jaygpIHsgLS1t
X2xvY2tDb3VudDsgfQogICAgIGlubGluZSBib29sIGlzTG9ja2VkKCkgeyByZXR1cm4gbV9sb2Nr
Q291bnQ7IH0KICAgICBpbmxpbmUgSW50U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGVudFNpemU7IH0KLSAgICBpbmxpbmUgdm9pZCBzZXRPZmZzZXQoY29uc3QgSW50UG9p
bnQmIG8pIHsgbV9vZmZzZXQgPSBvOyB9Ci0gICAgaW5saW5lIEludFBvaW50IG9mZnNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgaW5saW5lIGludCBudW1iZXJPZkJ5dGVzKCkg
Y29uc3QgeyByZXR1cm4gc2l6ZSgpLndpZHRoKCkgKiBzaXplKCkuaGVpZ2h0KCkgKiBicHAoKSA+
PiAzOyB9CiAKIHByb3RlY3RlZDoKLQotcHJpdmF0ZToKICAgICBpbnQgbV9sb2NrQ291bnQ7CiAg
ICAgSW50U2l6ZSBtX2NvbnRlbnRTaXplOwogICAgIGJvb2wgbV9pc09wYXF1ZTsKLSAgICBJbnRQ
b2ludCBtX29mZnNldDsKIH07CiAKIC8vIEEgImNvbnRleHQiIGNsYXNzIHVzZWQgdG8gZW5jYXBz
dWxhdGUgYWNjZWxlcmF0ZWQgdGV4dHVyZSBtYXBwaW5nIGZ1bmN0aW9uczogaS5lLiBkcmF3aW5n
IGEgdGV4dHVyZQpAQCAtOTYsMjkgKzk0LDI4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093
blB0cjxUZXh0dXJlTWFwcGVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRl
eHQgPSAwKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyKCkgeyB9CiAKLSAgICB2aXJ0dWFs
IHZvaWQgZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50
UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4ID0gVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSwgZmxvYXQgb3BhY2l0eSA9IDEuMGYsIGNvbnN0IEJpdG1hcFRleHR1
cmUqIG1hc2tUZXh0dXJlID0gMCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShj
b25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldCwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCks
IGZsb2F0IG9wYWNpdHkgPSAxLjBmLCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSA9
IDApID0gMDsKIAogICAgIC8vIG1ha2VzIGEgc3VyZmFjZSB0aGUgdGFyZ2V0IGZvciB0aGUgZm9s
bG93aW5nIGRyYXdUZXh0dXJlIGNhbGxzLgogICAgIHZpcnR1YWwgdm9pZCBiaW5kU3VyZmFjZShC
aXRtYXBUZXh0dXJlKiBzdXJmYWNlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50VG9UYXJn
ZXQoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEludFJlY3Qm
IHZpc2libGVSZWN0KQotICAgIHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHZpc2libGVSZWN0KTsK
LSAgICAgICAgZHJhd1RleHR1cmUodGV4dHVyZSwgSW50UmVjdCgwLCAwLCB0ZXh0dXJlLmNvbnRl
bnRTaXplKCkud2lkdGgoKSwgdGV4dHVyZS5jb250ZW50U2l6ZSgpLmhlaWdodCgpKSwgbWF0cml4
LCBvcGFjaXR5LCAwKTsKLSAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhcGhpY3NDb250
ZXh0KEdyYXBoaWNzQ29udGV4dCopIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRDbGlwKGNvbnN0
IEludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luQ2xpcChjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZW5kQ2xpcCgpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTdXJmYWNlRm9yUm9vdCgpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4
dHVyZSgpID0gMDsKKyAgICBJbnRTaXplIHZpZXdwb3J0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmlld3BvcnRTaXplOyB9CisgICAgdm9pZCBzZXRWaWV3cG9ydFNpemUoY29uc3QgSW50U2l6ZSYg
cykgeyBtX3ZpZXdwb3J0U2l6ZSA9IHM7IH0KIAogICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7IG1faW50ZXJwb2xhdGlv
blF1YWxpdHkgPSBxdWFsaXR5OyB9Ci0gICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERy
YXdpbmdNb2RlRmxhZ3MgbW9kZSkgeyBtX3RleHREcmF3aW5nTW9kZSA9IG1vZGU7IH0KKyAgICB2
b2lkIHNldFRleHREcmF3aW5nTW9kZShpbnQgbW9kZSkgeyBtX3RleHREcmF3aW5nTW9kZSA9IG1v
ZGU7IH0KIAogICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkoKSBjb25zdCB7IHJldHVybiBtX2ludGVycG9sYXRpb25RdWFsaXR5OyB9Ci0gICAgVGV4dERy
YXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0RHJh
d2luZ01vZGU7IH0KLQotICAgIHZvaWQgc2V0Vmlld3BvcnRTaXplKGNvbnN0IEludFNpemUmKTsK
KyAgICBpbnQgdGV4dERyYXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0RHJhd2luZ01v
ZGU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dQYXJ0aWFsVXBkYXRlcygpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAKKyAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbWF0cml4KSB7IG1fdHJhbnNmb3JtID0gbWF0cml4OyB9CisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KIHBy
b3RlY3RlZDoKICAgICBUZXh0dXJlTWFwcGVyKCkKICAgICAgICAgOiBtX2ludGVycG9sYXRpb25R
dWFsaXR5KEludGVycG9sYXRpb25EZWZhdWx0KQpAQCAtMTI3LDcgKzEyNCw5IEBAIHByb3RlY3Rl
ZDoKIAogcHJpdmF0ZToKICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBtX2ludGVycG9sYXRpb25R
dWFsaXR5OwotICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIG1fdGV4dERyYXdpbmdNb2RlOworICAg
IGludCBtX3RleHREcmF3aW5nTW9kZTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3RyYW5z
Zm9ybTsKKyAgICBJbnRTaXplIG1fdmlld3BvcnRTaXplOwogfTsKIAogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9k
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlck5vZGUuY3BwCmluZGV4IGJmNTNlNjEuLjNkMmEzZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJO
b2RlLmNwcApAQCAtMjAsNDcwICsyMCw1MTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyTm9kZS5oIgogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBUZXh0dXJlTWFwcGVyQ2FjaGUgeworY29uc3QgYm9vbCBn
QXZvaWRVbm5lY2Vzc2FyeUNvbXB1dGF0aW9ucyA9IHRydWU7CisKK2NsYXNzIFRleHR1cmVNYXBw
ZXJTdXJmYWNlTWFuYWdlciB7CiBwdWJsaWM6Ci0gICAgdm9pZCBtYXJrKEJpdG1hcFRleHR1cmUq
IHRleHR1cmUpOworICAgIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXI7CisgICAgVmVjdG9y
PFJlZlB0cjxCaXRtYXBUZXh0dXJlPiA+IHN1cmZhY2VzOworICAgIFZlY3RvcjxSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gPiB0ZXh0dXJlczsKKyAgICBJbnRTaXplIHZpZXdwb3J0U2l6ZTsKIAotICAg
IGNsYXNzIEVudHJ5IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJl
PiB0ZXh0dXJlOwotICAgICAgICBFbnRyeSgpIDogcHJldmlvdXNDb3N0KDApIHsgfQotICAgICAg
ICBpbmxpbmUgaW50IGNvbXB1dGVDb3N0KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKCF0ZXh0dXJlIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKCkgfHwgdGV4dHVyZS0+aXNQYWNrZWQo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGNvbnN0IEludFNpemUg
dGV4dHVyZVNpemUgPSB0ZXh0dXJlLT5zaXplKCk7Ci0gICAgICAgICAgICAvLyBBbiBpbWFnZSdz
IGNvc3QgaW4gYnl0ZXMgaXMgd2lkdGggKiBoZWlnaHQgKiBieXRlcyBwZXIgcGl4ZWwgKDQpLgot
ICAgICAgICAgICAgcmV0dXJuIHRleHR1cmVTaXplLndpZHRoKCkgKiB0ZXh0dXJlU2l6ZS5oZWln
aHQoKSAqIDQ7CisgICAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBnZXRJbnRlcm1lZGlhdGVT
dXJmYWNlKCkKKyAgICB7CisgICAgICAgIEludFNpemUgbmV3Vmlld3BvcnRTaXplID0gdGV4dHVy
ZU1hcHBlci0+dmlld3BvcnRTaXplKCk7CisgICAgICAgIGlmIChuZXdWaWV3cG9ydFNpemUgIT0g
dmlld3BvcnRTaXplKSB7CisgICAgICAgICAgICB2aWV3cG9ydFNpemUgPSBuZXdWaWV3cG9ydFNp
emU7CisgICAgICAgICAgICBzdXJmYWNlcy5jbGVhcigpOwogICAgICAgICB9Ci0gICAgICAgIEVu
dHJ5KEJpdG1hcFRleHR1cmUqIG5ld1RleHR1cmUpCi0gICAgICAgICAgICA6IHRleHR1cmUobmV3
VGV4dHVyZSkKLSAgICAgICAgeworICAgICAgICBpZiAoc3VyZmFjZXMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbmV3U3VyZmFjZSA9IHRleHR1cmVNYXBw
ZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICAgICAgICAgIG5ld1N1cmZhY2UtPnJlc2V0KHZpZXdw
b3J0U2l6ZSwgZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuIG5ld1N1cmZhY2UuZ2V0KCk7CiAg
ICAgICAgIH0KLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEVudHJ5JiBvdGhlcikgY29u
c3QgeyByZXR1cm4gdGV4dHVyZSA9PSBvdGhlci50ZXh0dXJlOyB9Ci0gICAgICAgIGludCBwcmV2
aW91c0Nvc3Q7Ci0gICAgfTsKKyAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHN1cmZhY2Ug
PSBzdXJmYWNlcy5sYXN0KCk7CisgICAgICAgIHN1cmZhY2UtPnJlc2V0KHZpZXdwb3J0U2l6ZSwg
ZmFsc2UpOworICAgICAgICBzdXJmYWNlcy5yZW1vdmVMYXN0KCk7CisgICAgICAgIHN1cmZhY2Ut
PmxvY2soKTsKKyAgICAgICAgcmV0dXJuIHN1cmZhY2UuZ2V0KCk7CisgICAgfQogCi0gICAgVGV4
dHVyZU1hcHBlckNhY2hlKCkKLSAgICAgICAgOiBtX3RvdGFsQ29zdCgwKQorICAgIHZvaWQgZnJl
ZUludGVybWVkaWF0ZVN1cmZhY2UoQml0bWFwVGV4dHVyZSogc3VyZmFjZSkKICAgICB7CisgICAg
ICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc3VyZmFjZXMu
YXBwZW5kKHN1cmZhY2UpOworICAgICAgICBzdXJmYWNlLT51bmxvY2soKTsKKyAgICAgICAgbWFy
a1RleHR1cmVVc2FnZShzdXJmYWNlKTsKICAgICB9CiAKLSAgICB2b2lkIHB1cmdlKCk7Ci0gICAg
VmVjdG9yPEVudHJ5PiBtX2RhdGE7Ci0gICAgaW50IG1fdG90YWxDb3N0OwotI2lmbmRlZiBURVhN
QVBfVEVYVFVSRV9DQUNIRV9LQlMKLSNkZWZpbmUgVEVYTUFQX1RFWFRVUkVfQ0FDSEVfS0JTIDI0
ICogMTAyNAotI2VuZGlmCi0gICAgc3RhdGljIGNvbnN0IGludCBNYXhDb3N0ID0gVEVYTUFQX1RF
WFRVUkVfQ0FDSEVfS0JTICogMTAyNDsKLSAgICBzdGF0aWMgY29uc3QgaW50IFB1cmdlQW1vdW50
ID0gTWF4Q29zdCAvIDQ7Ci19OworICAgIHZvaWQgbWFya1RleHR1cmVVc2FnZShCaXRtYXBUZXh0
dXJlKiB0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0ZXh0
dXJlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKHRleHR1cmVzW2ldLmdldCgpID09
IHRleHR1cmUpIHsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlcy5yZW1vdmUoaSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAorICAgICAgICB0ZXh0
dXJlcy5wcmVwZW5kKHRleHR1cmUpOworICAgIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyQ2FjaGU6
OnB1cmdlKCkKLXsKLSAgICBjb25zdCBpbnQgc2l6ZSA9IG1fZGF0YS5zaXplKCk7CisgICAgc3Rh
dGljIGNvbnN0IGludCBnVGV4dHVyZUJ5dGVTaXplTGltaXQgPSAxNiAqIDEwMjQgKiAxMDI0Owor
ICAgIHN0YXRpYyBjb25zdCBpbnQgZ1RleHR1cmVCeXRlU2l6ZUFmdGVyUHVyZ2UgPSBnVGV4dHVy
ZUJ5dGVTaXplTGltaXQgKiAwLjg7CisgICAgdm9pZCBwdXJnZVRleHR1cmVzKCkKKyAgICB7Cisg
ICAgICAgIGludCB0b3RhbENvc3QgPSAwOworICAgICAgICBmb3IgKGludCBpID0gdGV4dHVyZXMu
c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlc1tpXS0+
aGFzT25lUmVmKCkpIHsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlcy5yZW1vdmUoaSk7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAKLSAgICBpZiAobV90b3RhbENv
c3QgPD0gVGV4dHVyZU1hcHBlckNhY2hlOjpNYXhDb3N0KQotICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICBpZiAoIXRleHR1cmVzW2ldLT5pc1BhY2tlZCgpKQorICAgICAgICAgICAgICAgIHRv
dGFsQ29zdCArPSB0ZXh0dXJlc1tpXS0+bnVtYmVyT2ZCeXRlcygpOworICAgICAgICB9CisgICAg
ICAgIGlmICh0b3RhbENvc3QgPD0gZ1RleHR1cmVCeXRlU2l6ZUxpbWl0KQorICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgLy8gRW5zdXJlIHRoYXQgd2UgaGF2ZSB0aGUgcmlnaHQgY291bnQuIEl0
IG1pZ2h0IGJlIGluYWNjdXJhdGUgaWYgY29udGVudCBjaGFuZ2VkIHNpemUuCi0gICAgLy8gV2Ug
b25seSBkbyB0aGlzIHdoZW4gd2UncmUgYWN0dWFsbHkgcmVhZHkgdG8gcHVyZ2UuCi0gICAgbV90
b3RhbENvc3QgPSAwOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAg
ICBtX3RvdGFsQ29zdCArPSBtX2RhdGFbaV0uY29tcHV0ZUNvc3QoKTsKKyAgICAgICAgZm9yIChp
bnQgaSA9IHRleHR1cmVzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAgICBp
ZiAodGV4dHVyZXNbaV0tPmlzTG9ja2VkKCkgfHwgdGV4dHVyZXNbaV0tPmlzUGFja2VkKCkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICBmb3IgKGludCBpID0gc2l6ZS0xOyBpID49
IDAgJiYgbV90b3RhbENvc3QgPiBUZXh0dXJlTWFwcGVyQ2FjaGU6Ok1heENvc3QgLSBUZXh0dXJl
TWFwcGVyQ2FjaGU6OlB1cmdlQW1vdW50OyAtLWkpIHsKLSAgICAgICAgRW50cnkmIGVudHJ5ID0g
bV9kYXRhW2ldOwotICAgICAgICBpZiAoZW50cnkudGV4dHVyZS0+aXNMb2NrZWQoKSB8fCAhZW50
cnkudGV4dHVyZS0+aXNWYWxpZCgpIHx8IGVudHJ5LnRleHR1cmUtPmlzUGFja2VkKCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV90b3RhbENvc3QgLT0gZW50cnkucHJldmlvdXND
b3N0OwotICAgICAgICBlbnRyeS50ZXh0dXJlLT5wYWNrKCk7Ci0gICAgICAgIG1fZGF0YS5yZW1v
dmUoaSk7CisgICAgICAgICAgICB0b3RhbENvc3QgLT0gdGV4dHVyZXNbaV0tPm51bWJlck9mQnl0
ZXMoKTsKKyAgICAgICAgICAgIHRleHR1cmVzW2ldLT5wYWNrKCk7CisKKyAgICAgICAgICAgIGlm
ICh0b3RhbENvc3QgPD0gZ1RleHR1cmVCeXRlU2l6ZUFmdGVyUHVyZ2UpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQorCisgICAgc3RydWN0IFVzZVRleHR1cmUgewor
ICAgICAgICBVc2VUZXh0dXJlKEJpdG1hcFRleHR1cmUqIHRleHR1cmUsIFRleHR1cmVNYXBwZXJT
dXJmYWNlTWFuYWdlciogbWFuYWdlcikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCF0ZXh0
dXJlKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgdGhpcy0+dGV4dHVy
ZSA9IHRleHR1cmU7CisgICAgICAgICAgICB0ZXh0dXJlLT5sb2NrKCk7CisgICAgICAgICAgICBt
YW5hZ2VyLT5tYXJrVGV4dHVyZVVzYWdlKHRleHR1cmUpOworICAgICAgICB9CisKKyAgICAgICAg
flVzZVRleHR1cmUoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodGV4dHVyZSkKKyAgICAg
ICAgICAgICAgICB0ZXh0dXJlLT51bmxvY2soKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZlB0
cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlOworICAgIH07CisKK307CisKK1RleHR1cmVNYXBwZXJO
b2RlKiB0b1RleHR1cmVNYXBwZXJOb2RlKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIHJl
dHVybiBsYXllciA/IHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIobGF5ZXIpLT5ub2RlKCkg
OiAwOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJDYWNoZTo6bWFyayhCaXRtYXBUZXh0dXJlKiB0
ZXh0dXJlKQorVGV4dHVyZU1hcHBlck5vZGUqIFRleHR1cmVNYXBwZXJOb2RlOjpyb290TGF5ZXIo
KQogewotICAgIGlmICghdGV4dHVyZSB8fCAhdGV4dHVyZS0+aXNWYWxpZCgpKQotICAgICAgICBy
ZXR1cm47CisgICAgaWYgKG1fZWZmZWN0VGFyZ2V0KQorICAgICAgICByZXR1cm4gbV9lZmZlY3RU
YXJnZXQtPnJvb3RMYXllcigpOworICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgcmV0dXJuIG1f
cGFyZW50LT5yb290TGF5ZXIoKTsKKyAgICByZXR1cm4gdGhpczsKK30KIAotICAgIEVudHJ5IGVu
dHJ5KHRleHR1cmUpOwotICAgIHNpemVfdCBpbmRleCA9IG1fZGF0YS5maW5kKGVudHJ5KTsKLSAg
ICBpZiAoIWluZGV4KQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0VHJhbnNmb3JtKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCit7CisgICAgaWYgKG1fdHJhbnNmb3Jtcy5i
YXNlID09IG1hdHJpeCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHByZXZpb3VzQ29zdCA9
IDA7CisgICAgbV90cmFuc2Zvcm1zLmJhc2UgPSBtYXRyaXg7CisgICAgaW52YWxpZGF0ZUxvY2Fs
VHJhbnNmb3JtKCk7Cit9CiAKLSAgICBpZiAoaW5kZXggPCBtX2RhdGEuc2l6ZSgpKSB7Ci0gICAg
ICAgIHByZXZpb3VzQ29zdCA9IG1fZGF0YVtpbmRleF0ucHJldmlvdXNDb3N0OwotICAgICAgICBt
X2RhdGEucmVtb3ZlKGluZGV4KTsKLSAgICB9Ci0gICAgY29uc3QgaW50IGNvc3QgPSBlbnRyeS5j
b21wdXRlQ29zdCgpOwotICAgIG1fdG90YWxDb3N0IC09IHByZXZpb3VzQ29zdDsKLSAgICBtX3Rv
dGFsQ29zdCArPSAoZW50cnkucHJldmlvdXNDb3N0ID0gY29zdCk7Ci0gICAgbV9kYXRhLnByZXBl
bmQoZW50cnkpOwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0T3BhY2l0eShmbG9hdCBvcGFj
aXR5KQoreworICAgIG1fb3BhY2l0eSA9IG9wYWNpdHk7CiB9CiAKLWNsYXNzIFRleHR1cmVNYXBw
ZXJDYWNoZUxvY2sgewotcHVibGljOgotICAgIFRleHR1cmVNYXBwZXJDYWNoZUxvY2soQml0bWFw
VGV4dHVyZSogdGV4dHVyZSkgOiBtX3RleHR1cmUodGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIGlm
IChtX3RleHR1cmUpCi0gICAgICAgICAgICBtX3RleHR1cmUtPmxvY2soKTsKLSAgICB9Ci0gICAg
flRleHR1cmVNYXBwZXJDYWNoZUxvY2soKQotICAgIHsKLSAgICAgICAgaWYgKG1fdGV4dHVyZSkK
LSAgICAgICAgICAgIG1fdGV4dHVyZS0+dW5sb2NrKCk7Ci0gICAgfQordm9pZCBUZXh0dXJlTWFw
cGVyTm9kZTo6Y29tcHV0ZVBlcnNwZWN0aXZlKCkKK3sKKyAgICBpZiAobV9jaGlsZHJlbi5pc0Vt
cHR5KCkgfHwgbV9zdGF0ZS5jaGlsZHJlblRyYW5zZm9ybS5pc0lkZW50aXR5KCkpCisgICAgICAg
IHJldHVybjsKIAotcHJpdmF0ZToKLSAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbV90ZXh0dXJl
OwotfTsKKyAgICBpZiAoZ0F2b2lkVW5uZWNlc3NhcnlDb21wdXRhdGlvbnMgJiYgIW1fZGlydHlG
bGFncy5wZXJzcGVjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgRmxvYXRQb2lu
dCBjZW50ZXJQb2ludCA9IEZsb2F0UG9pbnQobV9zaXplLndpZHRoKCkgLyAyLCBtX3NpemUuaGVp
Z2h0KCkgLyAyKTsKKyAgICBtX3RyYW5zZm9ybXMucGVyc3BlY3RpdmUgPSBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgpCisgICAgICAgICAgICAudHJhbnNsYXRlKGNlbnRlclBvaW50LngoKSwgY2VudGVy
UG9pbnQueSgpKQorICAgICAgICAgICAgLm11bHRpcGx5KG1fc3RhdGUuY2hpbGRyZW5UcmFuc2Zv
cm0pCisgICAgICAgICAgICAudHJhbnNsYXRlKC1jZW50ZXJQb2ludC54KCksIC1jZW50ZXJQb2lu
dC55KCkpOwogCisgICAgbV9kaXJ0eUZsYWdzLnBlcnNwZWN0aXZlID0gZmFsc2U7CisgICAgbV9k
aXJ0eUZsYWdzLnRyYW5zZm9ybSA9IHRydWU7Cit9CiAKLVRleHR1cmVNYXBwZXJDYWNoZSogVGV4
dHVyZU1hcHBlck5vZGU6OmNhY2hlKCkKK2ludCBUZXh0dXJlTWFwcGVyTm9kZTo6Y291bnREZXNj
ZW5kYW50c1dpdGhDb250ZW50KCkgY29uc3QKIHsKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSogcm9v
dCA9IHJvb3RMYXllcigpOwotICAgIGlmICghcm9vdCkKKyAgICBpZiAoIW1fc3RhdGUudmlzaWJs
ZSB8fCBtX29wYWNpdHkgPCAwLjAxIHx8ICghbV9zaXplLndpZHRoKCkgJiYgIW1fc2l6ZS5oZWln
aHQoKSAmJiBtX3N0YXRlLm1hc2tzVG9Cb3VuZHMpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBp
ZiAoIXJvb3QtPm1fY2FjaGUpCi0gICAgICAgIHJvb3QtPm1fY2FjaGUgPSBuZXcgVGV4dHVyZU1h
cHBlckNhY2hlOwotICAgIHJldHVybiByb290LT5tX2NhY2hlOworICAgIGludCBjb3VudCA9ICht
X3NpemUud2lkdGgoKSAmJiBtX3NpemUuaGVpZ2h0KCkgJiYgKG1fc3RhdGUuZHJhd3NDb250ZW50
IHx8IG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgIT0gSFRNTENvbnRlbnRUeXBlKSkgPyAx
IDogMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kp
CisgICAgICAgIGNvdW50ICs9IG1fY2hpbGRyZW5baV0tPmNvdW50RGVzY2VuZGFudHNXaXRoQ29u
dGVudCgpOworCisgICAgcmV0dXJuIGNvdW50OwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2Rl
OjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoSW50UmVjdCByZWN0KQordm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6Y29tcHV0ZU92ZXJsYXBzKCkKIHsKLSAgICBpZiAobV9wbGF0Zm9ybUNsaWVudCkgewot
ICAgICAgICBpZiAobV9zdGF0ZS5oYXNTdXJmYWNlRGVzY2VuZGFudHMpIHsKLSAgICAgICAgICAg
IG1fcGxhdGZvcm1DbGllbnQtPnNldE5lZWRzRGlzcGxheSgpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIHJlY3QuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgbV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICBpZiAocmVjdC5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fcGxhdGZvcm1DbGllbnQtPnNldE5lZWRz
RGlzcGxheUluUmVjdChyZWN0KTsKKyAgICBpZiAoZ0F2b2lkVW5uZWNlc3NhcnlDb21wdXRhdGlv
bnMgJiYgIW1fZGlydHlGbGFncy5vdmVybGFwcykKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAot
ICAgIGlmICghbV9wYXJlbnQpCi0gICAgICAgIHJldHVybjsKKyAgICBtX3N0YXRlLm1pZ2h0SGF2
ZU92ZXJsYXBzID0gY291bnREZXNjZW5kYW50c1dpdGhDb250ZW50KCkgPiAxOwogCi0gICAgbV9w
YXJlbnQtPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICBtX2RpcnR5RmxhZ3Mub3Zl
cmxhcHMgPSBmYWxzZTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0TmVlZHNEaXNw
bGF5KCkKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVSZXBsaWNhVHJhbnNmb3JtKCkK
IHsKLSAgICBpZiAobV9lZmZlY3RUYXJnZXQpCi0gICAgICAgIG1fZWZmZWN0VGFyZ2V0LT5zZXRO
ZWVkc0Rpc3BsYXkoKTsKLSAgICBpZiAobV90cmFuc2Zvcm1zLnRhcmdldEJvdW5kaW5nUmVjdC5p
c0VtcHR5KCkpCisgICAgaWYgKCFtX3N0YXRlLnJlcGxpY2FMYXllcikKICAgICAgICAgcmV0dXJu
OwotICAgIGlmIChtX3N0YXRlLmRyYXdzQ29udGVudCB8fCBtX2N1cnJlbnRDb250ZW50LmNvbnRl
bnRUeXBlICE9IEhUTUxDb250ZW50VHlwZSkKLSAgICAgICAgc2V0TmVlZHNEaXNwbGF5SW5SZWN0
KG1fdHJhbnNmb3Jtcy50YXJnZXRCb3VuZGluZ1JlY3QpOworICAgICBpZiAoZ0F2b2lkVW5uZWNl
c3NhcnlDb21wdXRhdGlvbnMgJiYgIW1fZGlydHlGbGFncy5yZXBsaWNhVHJhbnNmb3JtKQorICAg
ICAgICByZXR1cm47CisgICAgbV90cmFuc2Zvcm1zLnJlcGxpY2EgPQorICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeChtX3RyYW5zZm9ybXMudGFyZ2V0KQorICAgICAgICAgICAubXVsdGlwbHko
bV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fdHJhbnNmb3Jtcy5sb2NhbCkKKyAgICAgICAgICAgLm11
bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4KG1fdHJhbnNmb3Jtcy50YXJnZXQpLmludmVyc2Uo
KSk7CisKKyAgICBtX2RpcnR5RmxhZ3MucmVwbGljYVRyYW5zZm9ybSA9IGZhbHNlOwogfQogCi12
b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzZXRQbGF0Zm9ybUxheWVyQ2xpZW50KFRleHR1cmVNYXBw
ZXJMYXllckNsaWVudCogY2xpZW50KQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZUxv
Y2FsVHJhbnNmb3JtKCkKIHsKLSAgICBtX3BsYXRmb3JtQ2xpZW50ID0gY2xpZW50OworICAgIGlm
IChnQXZvaWRVbm5lY2Vzc2FyeUNvbXB1dGF0aW9ucyAmJiAhbV9kaXJ0eUZsYWdzLmxvY2FsVHJh
bnNmb3JtKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCBvcmlnaW5YID0gbV9zdGF0ZS5h
bmNob3JQb2ludC54KCkgKiBtX3NpemUud2lkdGgoKTsKKyAgICBmbG9hdCBvcmlnaW5ZID0gbV9z
dGF0ZS5hbmNob3JQb2ludC55KCkgKiBtX3NpemUuaGVpZ2h0KCk7CisgICAgbV90cmFuc2Zvcm1z
LmxvY2FsID0KKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoKQorICAgICAgICAudHJhbnNs
YXRlM2Qob3JpZ2luWCArIG1fc3RhdGUucG9zLngoKSwgb3JpZ2luWSArIG1fc3RhdGUucG9zLnko
KSwgbV9zdGF0ZS5hbmNob3JQb2ludC56KCkgKQorICAgICAgICAubXVsdGlwbHkobV90cmFuc2Zv
cm1zLmJhc2UpCisgICAgICAgIC50cmFuc2xhdGUzZCgtb3JpZ2luWCwgLW9yaWdpblksIC1tX3N0
YXRlLmFuY2hvclBvaW50LnooKSk7CisgICAgbV9kaXJ0eUZsYWdzLmxvY2FsVHJhbnNmb3JtID0g
ZmFsc2U7CisgICAgbV9kaXJ0eUZsYWdzLnRyYW5zZm9ybSA9IHRydWU7CiB9CiAKLWludCBUZXh0
dXJlTWFwcGVyTm9kZTo6Y29tcGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKGNvbnN0IHZvaWQqIGEs
IGNvbnN0IHZvaWQqIGIpCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpkaWRDaGFuZ2VQYXJlbnRU
cmFuc2Zvcm0oKQogewotICAgIHR5cGVkZWYgY29uc3QgVGV4dHVyZU1hcHBlck5vZGUqIE5vZGVQ
dHI7Ci0gICAgY29uc3QgTm9kZVB0ciogbm9kZUEgPSBzdGF0aWNfY2FzdDxjb25zdCBOb2RlUHRy
Kj4oYSk7Ci0gICAgY29uc3QgTm9kZVB0ciogbm9kZUIgPSBzdGF0aWNfY2FzdDxjb25zdCBOb2Rl
UHRyKj4oYik7Ci0gICAgcmV0dXJuIGludCgoKCpub2RlQSktPm1fdHJhbnNmb3Jtcy5jZW50ZXJa
IC0gKCpub2RlQiktPm1fdHJhbnNmb3Jtcy5jZW50ZXJaKSAqIDEwMDApOworICAgIG1fZGlydHlG
bGFncy50cmFuc2Zvcm0gPSB0cnVlOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzb3J0
QnlaT3JkZXIoVmVjdG9yPFRleHR1cmVNYXBwZXJOb2RlKiA+JiBhcnJheSwgaW50IGZpcnN0LCBp
bnQgbGFzdCkKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmRpZENoYW5nZVNpemUoKQogewotICAg
IHFzb3J0KGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBzaXplb2YoVGV4dHVyZU1hcHBlck5v
ZGUqKSwgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXBhcmVHcmFwaGljc0xheWVyc1pWYWx1ZSk7Cisg
ICAgaW52YWxpZGF0ZUxvY2FsVHJhbnNmb3JtKCk7CisgICAgaW52YWxpZGF0ZVBlcnNwZWN0aXZl
VHJhbnNmb3JtKCk7CiB9CiAKLWJvb2wgVGV4dHVyZU1hcHBlck5vZGU6Omhhc1N1cmZhY2VEZXNj
ZW5kYW50cygpIGNvbnN0Cit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpkaWRDaGFuZ2VUYXJnZXRU
cmFuc2Zvcm0oKQogewotICAgIGlmIChtX2xheWVyVHlwZSA9PSBDbGlwTGF5ZXIgfHwgbV9sYXll
clR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIgfHwgbV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgY29uc3QgaW50IHNpemUgPSBtX2NoaWxkcmVuLnNpemUo
KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAoVGV4
dHVyZU1hcHBlck5vZGUqIGNoaWxkID0gbV9jaGlsZHJlbltpXSkgewotICAgICAgICAgICAgaWYg
KGNoaWxkLT5oYXNTdXJmYWNlRGVzY2VuZGFudHMoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICBtX2NoaWxkcmVu
W2ldLT5kaWRDaGFuZ2VQYXJlbnRUcmFuc2Zvcm0oKTsKIH0KIAotaW50IFRleHR1cmVNYXBwZXJO
b2RlOjpjb3VudERlc2NlbmRhbnRzV2l0aENvbnRlbnQoKSBjb25zdAordm9pZCBUZXh0dXJlTWFw
cGVyTm9kZTo6ZGlkQ2hhbmdlUGVyc3BlY3RpdmUoKQogewotICAgIGlmICghbV9zdGF0ZS52aXNp
YmxlIHx8IG1fc3RhdGUub3BhY2l0eSA8IDAuMDAxKQotICAgICAgICByZXR1cm4gMDsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpCisgICAgICAgIG1f
Y2hpbGRyZW5baV0tPmRpZENoYW5nZVBhcmVudFRyYW5zZm9ybSgpOworfQogCi0gICAgaW50IGRl
c2NlbmRhbnRzV2l0aENvbnRlbnQgPSAobV9zdGF0ZS5kcmF3c0NvbnRlbnQgfHwgbV9jdXJyZW50
Q29udGVudC5jb250ZW50VHlwZSAhPSBIVE1MQ29udGVudFR5cGUpID8gMSA6IDA7CitzdGF0aWMg
Y29uc3QgZmxvYXQgc1RpbGVEaW0gPSAxMDI0LjA7CiAKLSAgICBjb25zdCBpbnQgc2l6ZSA9IG1f
Y2hpbGRyZW4uc2l6ZSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0g
ICAgICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSogY2hpbGQgPSBtX2NoaWxkcmVuW2ldKQotICAg
ICAgICAgICAgZGVzY2VuZGFudHNXaXRoQ29udGVudCArPSBjaGlsZC0+Y291bnREZXNjZW5kYW50
c1dpdGhDb250ZW50KCk7Ci0gICAgfQorYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6bmVlZHNUb0Nv
bXB1dGVCb3VuZGluZ1JlY3QoKSBjb25zdAoreworICAgIGlmIChtX3NpemUud2lkdGgoKSA+IHNU
aWxlRGltIHx8IG1fc2l6ZS5oZWlnaHQoKSA+IHNUaWxlRGltKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBpZiAoIW1fc3RhdGUubWFza3NUb0JvdW5kcykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgcmV0dXJuIGRlc2NlbmRhbnRzV2l0aENvbnRlbnQ7Ci19CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICBpZiAobV9jaGls
ZHJlbltpXS0+bmVlZHNUb0NvbXB1dGVCb3VuZGluZ1JlY3QoKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOwogCi1UZXh0dXJlTWFwcGVyTm9kZSogVGV4dHVyZU1hcHBlck5vZGU6OnRvVGV4dHVy
ZU1hcHBlck5vZGUoR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgcmV0dXJuIGxheWVyID8g
c3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlck5vZGUqPihsYXllci0+cGxhdGZvcm1MYXllcigpKSA6
IDA7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21w
dXRlTGF5ZXJUeXBlKCkKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVUcmFuc2Zvcm1h
dGlvbnMoKQogewotICAgIGNvbnN0IGJvb2wgc2VsZkhhc0NvbnRlbnQgPSBtX3N0YXRlLmRyYXdz
Q29udGVudCB8fCAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSAhPSBIVE1MQ29udGVudFR5
cGUpOwotICAgIGNvbnN0IGJvb2wgaGFzRGVzY2VuZGFudHNXaXRoQ29udGVudCA9IG1fc3RhdGUu
ZGVzY2VuZGFudHNXaXRoQ29udGVudCAtIChzZWxmSGFzQ29udGVudCA/IDEgOiAwKTsKLSAgICBj
b25zdCBib29sIGhhc1RyYW5zcGFyZW5jeSA9IG1fc3RhdGUub3BhY2l0eSA8IDAuOTkgfHwgbV9z
dGF0ZS5tYXNrTGF5ZXI7Ci0gICAgY29uc3QgYm9vbCBoYXNSZXBsaWNhID0gbV9zdGF0ZS5yZXBs
aWNhTGF5ZXI7CisgICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkgJiYgbV9zdGF0ZS5tYXNrc1RvQm91
bmRzKQorICAgICAgICByZXR1cm47CiAKLSAgICAvLyAgRGVmYXVsdExheWVyOiBkcmF3cyBpdHNl
bGYgYW5kIGl0cyBjaGlsZHJlbiBkaXJlY3RseSB0byB0aGUgY3VycmVudCBmcmFtZWJ1ZmZlci4K
LSAgICAvLyAgICAgICAgICAgICAgICBhbnkgbGF5ZXIgdGhhdCBkb2Vzbid0IGNvbmZvcm0gdG8g
dGhlIG90aGVyIHJ1bGVzIGlzIGEgRGVmYXVsdExheWVyLgotICAgIG1fbGF5ZXJUeXBlID0gRGVm
YXVsdExheWVyOworICAgIGNvbXB1dGVMb2NhbFRyYW5zZm9ybSgpOworICAgIGNvbXB1dGVSZXBs
aWNhVHJhbnNmb3JtKCk7CisgICAgY29tcHV0ZVBlcnNwZWN0aXZlKCk7CiAKLSAgICAvLyAgUm9v
dExheWVyOiB0aGUgdG9wIGxldmVsLiBEcmF3cyB0byBhIGZyYW1lYnVmZmVyLCBhbmQgdGhlIHRh
cmdldCB0ZXh0dXJlIGRyYXdzIGludG8gdGhlIHZpZXdwb3J0LgotICAgIC8vICAgICAgICAgICAg
b25seSBvbmUgbGF5ZXIgaXMgdGhlIHJvb3QgbGF5ZXIuCi0gICAgaWYgKCFtX3BhcmVudCAmJiAh
bV9lZmZlY3RUYXJnZXQpIHsKLSAgICAgICAgbV9sYXllclR5cGUgPSBSb290TGF5ZXI7CisgICAg
aWYgKGdBdm9pZFVubmVjZXNzYXJ5Q29tcHV0YXRpb25zICYmICFtX2RpcnR5RmxhZ3MudHJhbnNm
b3JtKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgLy8gQSBsYXllciB3aXRoIG5vIGNv
bnRlbnRzIGlzIGFsd2F5cyBhIGRlZmF1bHQgbGF5ZXIuCi0gICAgaWYgKCFtX3N0YXRlLmRlc2Nl
bmRhbnRzV2l0aENvbnRlbnQpCi0gICAgICAgIHJldHVybjsKKyAgICBtX3RyYW5zZm9ybXMudGFy
Z2V0ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgobV9wYXJlbnQgPyBtX3BhcmVudC0+bV90cmFuc2Zv
cm1zLmZvckRlc2NlbmRhbnRzIDogVHJhbnNmb3JtYXRpb25NYXRyaXgoKSkubXVsdGlwbHkobV90
cmFuc2Zvcm1zLmxvY2FsKTsKIAotICAgIC8vICBDbGlwTGF5ZXI6IGNyZWF0ZXMgYSBuZXcgZnJh
bWVidWZmZXIsIHRoZSBzaXplIG9mIHRoZSBsYXllciwgYW5kIHRoZW4gcGFpbnRzIGl0IHRvIHRo
ZSBlbmNsb3NpbmcgQml0bWFwVGV4dHVyZSB3aXRoIHRoZSBsYXllcidzIHRyYW5zZm9ybS9vcGFj
aXR5LgotICAgIC8vICAgICAgICAgICAgICBBIGNsaXAgbGF5ZXIgaXMgYSBsYXllciB0aGF0IG1h
c2tzIHRvIGJvdW5kcywgZG9lc24ndCBwcmVzZXJ2ZSAzRCwgaGFzIGNoaWxkcmVuLCBhbmQgaGFz
IGEgdHJhbnNwYXJlbmN5L21hc2sgb3IgYSBub24tcmVjdGFuZ3VsYXIgdHJhbnNmb3JtLgotICAg
IGlmIChoYXNEZXNjZW5kYW50c1dpdGhDb250ZW50ICYmIG1fc3RhdGUubWFza0xheWVyKSB7Ci0g
ICAgICAgIG1fbGF5ZXJUeXBlID0gQ2xpcExheWVyOworICAgIGlmIChtX2VmZmVjdFRhcmdldCkg
eworICAgICAgICBtX2VmZmVjdFRhcmdldC0+bV9kaXJ0eUZsYWdzLnJlcGxpY2FUcmFuc2Zvcm0g
PSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gIFNjaXNzb3JMYXllcjog
ZHJhd3MgdG8gdGhlIGN1cnJlbnQgZnJhbWVidWZmZXIsIGFuZCBhcHBsaWVzIGFuIGV4dHJhIHNj
aXNzb3IgYmVmb3JlIGRyYXdpbmcgaXRzIGNoaWxkcmVuLgotICAgIC8vICAgICAgICAgICAgICAg
IEEgc2Npc3NvciBsYXllciBpcyBhIGxheWVyIHdpdGggY2hpbGRyZW4gdGhhdCBtYXNrcyB0byBi
b3VuZHMsIGlzIG5vdCBhIHRyYW5zcGFyZW5jeSBsYXllciwgYW5kIGhhcyBhIHJlY3Rhbmd1bGFy
IGNsaXAuCi0gICAgaWYgKG1fc3RhdGUubWFza3NUb0JvdW5kcyAmJiBoYXNEZXNjZW5kYW50c1dp
dGhDb250ZW50KSB7Ci0gICAgICAgIGlmIChoYXNUcmFuc3BhcmVuY3kgfHwgIW1fc3RhdGUudHJh
bnNmb3JtLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkgfHwgbV9wYXJlbnQtPm1fc3RhdGUucHJl
c2VydmVzM0QpCi0gICAgICAgICAgICBtX2xheWVyVHlwZSA9IENsaXBMYXllcjsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbV9sYXllclR5cGUgPSBTY2lzc29yTGF5ZXI7CisgICAgbV90cmFu
c2Zvcm1zLnRhcmdldEJvdW5kaW5nUmVjdCA9IEZsb2F0UmVjdChtX3RyYW5zZm9ybXMudGFyZ2V0
Lm1hcFJlY3QodGFyZ2V0UmVjdCgpKSk7CisKKyAgICBtX3N0YXRlLnZpc2libGUgPSBtX3N0YXRl
LmJhY2tmYWNlVmlzaWJpbGl0eSB8fCBtX3RyYW5zZm9ybXMudGFyZ2V0LmludmVyc2UoKS5tMzMo
KSA+PSAwOworICAgIGlmICghbV9zdGF0ZS52aXNpYmxlKQogICAgICAgICByZXR1cm47Ci0gICAg
fQogCi0gICAgLy8gIFRyYW5zcGFyZW5jeUxheWVyOiBjcmVhdGVzIGEgbmV3IGZyYW1lYnVmZmVy
IGlkZXRpY2FsIGluIHNpemUgdG8gdGhlIGN1cnJlbnQgZnJhbWVidWZmZXIuIFRoZW4gZHJhd3Mg
dGhlIGZiJ3MgdGV4dHVyZSB0byB0aGUgY3VycmVudCBmcmFtZWJ1ZmZlciB3aXRoIGlkZW50aXR5
IHRyYW5zZm9ybS4KLSAgICAvLyAgICAgICAgICAgICAgICAgICAgIFVzZWQgZm9yIGxheWVycyB3
aXRoIGNoaWxkcmVuIGFuZCB0cmFuc3BhcmVuY3kvbWFzayB0aGF0IHByZXNlcnZlIDNEIG9yIGRv
bid0IG1hc2sgdG8gYm91bmRzLgotICAgIGlmICgoaGFzUmVwbGljYSAmJiBoYXNEZXNjZW5kYW50
c1dpdGhDb250ZW50KSB8fCAoaGFzUmVwbGljYSAmJiBoYXNUcmFuc3BhcmVuY3kpIHx8IChoYXNU
cmFuc3BhcmVuY3kgJiYgbV9zdGF0ZS5kZXNjZW5kYW50c1dpdGhDb250ZW50ID4gMSkpCi0gICAg
ICAgIG1fbGF5ZXJUeXBlID0gVHJhbnNwYXJlbmN5TGF5ZXI7Ci19CisgICAgLy8gVGhpcyB0cmFu
c2Zvcm0gaXMgb25seSBhcHBsaWVkIGlmIHVzaW5nIGEgdHdvLXBhc3MgZm9yIHRoZSByZXBsaWNh
LCBiZWNhdXNlIHRoZSB0cmFuc2Zvcm0gbmVlZHMgdG8gYmUgYWRqdXN0ZWQgdG8gdGhlIHNpemUg
b2YgdGhlIGludGVybWVkaWF0ZSBzdXJmYWNlLCBpbnN0ZWFmIG9mIHRoZSBzaXplIG9mIHRoZSBj
b250ZW50IGxheWVyLgorICAgIGlmIChtX3BhcmVudCAmJiBtX3BhcmVudC0+bV9zdGF0ZS5wcmVz
ZXJ2ZXMzRCkKKyAgICAgICAgbV90cmFuc2Zvcm1zLmNlbnRlclogPSBtX3RyYW5zZm9ybXMudGFy
Z2V0Lm1hcFBvaW50KEZsb2F0UG9pbnQzRChtX3NpemUud2lkdGgoKSAvIDIsIG1fc2l6ZS5oZWln
aHQoKSAvIDIsIDApKS56KCk7CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmluaXRpYWxpemVU
ZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCi17Ci0gICAgaWYgKG1f
dGV4dHVyZSkKKyAgICBpZiAoIW1fY2hpbGRyZW4uc2l6ZSgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgbV9zdXJmYWNlID0gdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOwotICAgIG1fcmVw
bGljYVN1cmZhY2UgPSB0ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7Ci0gICAgbV90ZXh0
dXJlID0gdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOwotICAgIGNhY2hlKCktPm1hcmso
bV90ZXh0dXJlLmdldCgpKTsKLX0KIAotVGV4dHVyZU1hcHBlck5vZGU6OlRleHR1cmVNYXBwZXJO
b2RlKCkKLSAgICA6IG1fbGF5ZXJUeXBlKERlZmF1bHRMYXllcikKLSAgICAsIG1fc3VyZmFjZSgw
KQotICAgICwgbV9wYXJlbnQoMCkKLSAgICAsIG1fZWZmZWN0VGFyZ2V0KDApCi0gICAgLCBtX3Bs
YXRmb3JtQ2xpZW50KDApCi0gICAgLCBtX2NhY2hlKDApCi17Ci19CisgICAgbV90cmFuc2Zvcm1z
LmZvckRlc2NlbmRhbnRzID0gbV90cmFuc2Zvcm1zLnRhcmdldDsKIAotVGV4dHVyZU1hcHBlck5v
ZGUqIFRleHR1cmVNYXBwZXJOb2RlOjpyb290TGF5ZXIoKQotewotICAgIGlmIChtX2VmZmVjdFRh
cmdldCkKLSAgICAgICAgcmV0dXJuIG1fZWZmZWN0VGFyZ2V0LT5yb290TGF5ZXIoKTsKLSAgICBp
ZiAobV9wYXJlbnQpCi0gICAgICAgIHJldHVybiBtX3BhcmVudC0+cm9vdExheWVyKCk7Ci0gICAg
cmV0dXJuIHRoaXM7Ci19CisgICAgaWYgKCFtX3N0YXRlLnByZXNlcnZlczNEKQorICAgICAgICBt
X3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMgPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgKKyAgICAg
ICAgICAgICAgICAgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLm0xMSgpLCBtX3RyYW5z
Zm9ybXMuZm9yRGVzY2VuZGFudHMubTEyKCksIDAsIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50
cy5tMTQoKSwKKyAgICAgICAgICAgICAgICAgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRz
Lm0yMSgpLCBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMubTIyKCksIDAsIG1fdHJhbnNmb3Jt
cy5mb3JEZXNjZW5kYW50cy5tMjQoKSwKKyAgICAgICAgICAgICAgICAgICAgMCwgMCwgMSwgMCwK
KyAgICAgICAgICAgICAgICAgICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzLm00MSgpLCBt
X3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMubTQyKCksIDAsIG1fdHJhbnNmb3Jtcy5mb3JEZXNj
ZW5kYW50cy5tNDQoKSk7CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmludmFsaWRhdGVUcmFu
c2Zvcm0oKQotewotICAgIG1fdHJhbnNmb3Jtcy5kaXJ0eSA9IHRydWU7Ci0gICAgaWYgKG1fbGF5
ZXJUeXBlICE9IENsaXBMYXllcikKLSAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IHRydWU7Ci0gICAg
aWYgKG1fc3RhdGUucmVwbGljYUxheWVyKQotICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+
aW52YWxpZGF0ZVRyYW5zZm9ybSgpOwotICAgIGNvbnN0IGludCBzaXplID0gbV9jaGlsZHJlbi5z
aXplKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYg
KFRleHR1cmVNYXBwZXJOb2RlKiBsYXllciA9IG1fY2hpbGRyZW5baV0pCi0gICAgICAgICAgICBs
YXllci0+aW52YWxpZGF0ZVRyYW5zZm9ybSgpOwotICAgIH0KLX0KKyAgICBtX3RyYW5zZm9ybXMu
Zm9yRGVzY2VuZGFudHMubXVsdGlwbHkobV90cmFuc2Zvcm1zLnBlcnNwZWN0aXZlKTsKIAotdm9p
ZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZUxvY2FsVHJhbnNmb3JtKCkKLXsKLSAgICBpZiAo
IW1fdHJhbnNmb3Jtcy5sb2NhbERpcnR5KQotICAgICAgICByZXR1cm47Ci0gICAgY29uc3QgZmxv
YXQgb3JpZ2luWCA9IG1fc3RhdGUuYW5jaG9yUG9pbnQueCgpICogbV9zaXplLndpZHRoKCk7Ci0g
ICAgY29uc3QgZmxvYXQgb3JpZ2luWSA9IG1fc3RhdGUuYW5jaG9yUG9pbnQueSgpICogbV9zaXpl
LmhlaWdodCgpOwotICAgIG1fdHJhbnNmb3Jtcy5sb2NhbCA9Ci0gICAgICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4KCkKLSAgICAgICAgLnRyYW5zbGF0ZTNkKG9yaWdpblggKyBtX3N0YXRlLnBvcy54
KCksIG9yaWdpblkgKyBtX3N0YXRlLnBvcy55KCksIG1fc3RhdGUuYW5jaG9yUG9pbnQueigpKQot
ICAgICAgICAubXVsdGlwbHkobV9zdGF0ZS50cmFuc2Zvcm0pCi0gICAgICAgIC50cmFuc2xhdGUz
ZCgtb3JpZ2luWCwgLW9yaWdpblksIC1tX3N0YXRlLmFuY2hvclBvaW50LnooKSk7Ci0gICAgbV90
cmFuc2Zvcm1zLmxvY2FsRGlydHkgPSBmYWxzZTsKKyAgICBtX2RpcnR5RmxhZ3MudmlzaWJsZVJl
Y3QgPSB0cnVlOworICAgIG1fZGlydHlGbGFncy50cmFuc2Zvcm0gPSBmYWxzZTsKKyAgICBtX2Rp
cnR5RmxhZ3MucmVwbGljYVRyYW5zZm9ybSA9IHRydWU7CisKKyAgICBkaWRDaGFuZ2VUYXJnZXRU
cmFuc2Zvcm0oKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6ZmxhdHRlblRvMkRTcGFj
ZUlmTmVjZXNzYXJ5KCkKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVCb3VuZGluZ1Jl
Y3RGcm9tUm9vdCgpCiB7Ci0gICAgaWYgKG1fc3RhdGUucHJlc2VydmVzM0QpCisgICAgaWYgKCFu
ZWVkc1RvQ29tcHV0ZUJvdW5kaW5nUmVjdCgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFt
X3BhcmVudCkgeworICAgICAgICBtX3RyYW5zZm9ybXMuYm91bmRpbmdSZWN0RnJvbVJvb3QgPSBt
X3RyYW5zZm9ybXMuYm91bmRpbmdSZWN0RnJvbVJvb3RGb3JEZXNjZW5kYW50cyA9IEludFJlY3Qo
MCwgMCwgLTEsIC0xKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIG1fdHJhbnNmb3Jt
cy5mb3JEZXNjZW5kYW50cy5zZXRNMTMoMCk7Ci0gICAgbV90cmFuc2Zvcm1zLmZvckRlc2NlbmRh
bnRzLnNldE0yMygwKTsKLSAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFudHMuc2V0TTMxKDAp
OwotICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRNMzIoMCk7Ci0gICAgbV90cmFu
c2Zvcm1zLmZvckRlc2NlbmRhbnRzLnNldE0zMygxKTsKLSAgICBtX3RyYW5zZm9ybXMuZm9yRGVz
Y2VuZGFudHMuc2V0TTM0KDApOwotICAgIG1fdHJhbnNmb3Jtcy5mb3JEZXNjZW5kYW50cy5zZXRN
NDMoMCk7Ci19CisgICAgY29uc3QgRmxvYXRSZWN0IHRhcmdldFJlY3RJblJvb3RDb29yZGluYXRl
cyA9IG1fdHJhbnNmb3Jtcy50YXJnZXQubWFwUmVjdCh0YXJnZXRSZWN0KCkpOwogCi1JbnRTaXpl
IFRleHR1cmVNYXBwZXJOb2RlOjpuZWFyZXN0U3VyZmFjZVNpemUoKSBjb25zdAotewotICAgIGlm
IChtX2xheWVyVHlwZSA9PSBDbGlwTGF5ZXIgfHwgbV9sYXllclR5cGUgPT0gUm9vdExheWVyKQot
ICAgICAgICByZXR1cm4gbV9zdXJmYWNlICYmICFtX3N1cmZhY2UtPnNpemUoKS5pc0VtcHR5KCkg
PyBtX3N1cmZhY2UtPnNpemUoKSA6IG1fc2l6ZTsKLSAgICByZXR1cm4gbV9wYXJlbnQtPm5lYXJl
c3RTdXJmYWNlU2l6ZSgpOworICAgIGNvbnN0IEZsb2F0UmVjdCBwYXJlbnRCb3VuZGluZ1JlY3Qg
PSBtX3BhcmVudC0+bV90cmFuc2Zvcm1zLmJvdW5kaW5nUmVjdEZyb21Sb290Rm9yRGVzY2VuZGFu
dHM7CisgICAgaWYgKHBhcmVudEJvdW5kaW5nUmVjdC53aWR0aCgpIDwgMCkgeworICAgICAgICBt
X3RyYW5zZm9ybXMuYm91bmRpbmdSZWN0RnJvbVJvb3QgPSB0YXJnZXRSZWN0SW5Sb290Q29vcmRp
bmF0ZXM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV90cmFuc2Zvcm1zLmJvdW5kaW5nUmVjdEZy
b21Sb290Rm9yRGVzY2VuZGFudHMgPSBtX3RyYW5zZm9ybXMuYm91bmRpbmdSZWN0RnJvbVJvb3Qg
PSBwYXJlbnRCb3VuZGluZ1JlY3Q7CisgICAgICAgIG1fdHJhbnNmb3Jtcy5ib3VuZGluZ1JlY3RG
cm9tUm9vdC5pbnRlcnNlY3QodGFyZ2V0UmVjdEluUm9vdENvb3JkaW5hdGVzKTsKKyAgICB9Cisg
ICAgaWYgKG1fc3RhdGUubWFza3NUb0JvdW5kcykKKyAgICAgICAgbV90cmFuc2Zvcm1zLmJvdW5k
aW5nUmVjdEZyb21Sb290Rm9yRGVzY2VuZGFudHMuaW50ZXJzZWN0KG1fdHJhbnNmb3Jtcy5ib3Vu
ZGluZ1JlY3RGcm9tUm9vdCk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVS
ZXBsaWNhVHJhbnNmb3JtKCkKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVUaWxlcygp
CiB7Ci0gICAgaWYgKCFtX3N0YXRlLnJlcGxpY2FMYXllcikKKyAgICBpZiAobV9jdXJyZW50Q29u
dGVudC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUgJiYgIW1fc3RhdGUuZHJhd3NDb250
ZW50KSB7CisgICAgICAgIG1fdGlsZXMuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBWZWN0b3I8RmxvYXRSZWN0PiB0aWxlc1RvQWRkOworICAgIFZlY3RvcjxpbnQ+IHRpbGVz
VG9SZW1vdmU7CisgICAgY29uc3QgaW50IFRpbGVFcmFzZVRocmVzaG9sZCA9IDY7CisgICAgRmxv
YXRTaXplIHNpemUgPSBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IERpcmVjdEltYWdl
Q29udGVudFR5cGUgJiYgbV9jdXJyZW50Q29udGVudC5pbWFnZSA/IG1fY3VycmVudENvbnRlbnQu
aW1hZ2UtPnNpemUoKSA6IG1fc2l6ZTsKKyAgICBGbG9hdFJlY3QgY29udGVudFJlY3QoMCwgMCwg
c2l6ZS53aWR0aCgpICogbV9zdGF0ZS5jb250ZW50U2NhbGUsIHNpemUuaGVpZ2h0KCkgKiBtX3N0
YXRlLmNvbnRlbnRTY2FsZSk7CisKKyAgICBmb3IgKGZsb2F0IHkgPSAwOyB5IDwgY29udGVudFJl
Y3QuaGVpZ2h0KCk7IHkgKz0gc1RpbGVEaW0pIHsKKyAgICAgICAgZm9yIChmbG9hdCB4ID0gMDsg
eCA8IGNvbnRlbnRSZWN0LndpZHRoKCk7IHggKz0gc1RpbGVEaW0pIHsKKyAgICAgICAgICAgIEZs
b2F0UmVjdCB0aWxlUmVjdCh4LCB5LCBzVGlsZURpbSwgc1RpbGVEaW0pOworICAgICAgICAgICAg
dGlsZVJlY3QuaW50ZXJzZWN0KGNvbnRlbnRSZWN0KTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCB0
aWxlUmVjdEluUm9vdENvb3JkaW5hdGVzID0gdGlsZVJlY3Q7CisgICAgICAgICAgICB0aWxlUmVj
dEluUm9vdENvb3JkaW5hdGVzLnNjYWxlKDEuMCAvIG1fc3RhdGUuY29udGVudFNjYWxlKTsKKyAg
ICAgICAgICAgIHRpbGVSZWN0SW5Sb290Q29vcmRpbmF0ZXMgPSBtX3RyYW5zZm9ybXMudGFyZ2V0
Lm1hcFJlY3QodGlsZVJlY3RJblJvb3RDb29yZGluYXRlcyk7CisgICAgICAgICAgICBzdGF0aWMg
Ym9vbCBzRGlzY2FyZEhpZGRlblRpbGVzID0gZmFsc2U7CisgICAgICAgICAgICAvLyBGSVhNRTog
ZGlzY2FyZCBoaWRkZW4gdGlsZXMuCisgICAgICAgICAgICBpZiAoIXNEaXNjYXJkSGlkZGVuVGls
ZXMgfHwgIW5lZWRzVG9Db21wdXRlQm91bmRpbmdSZWN0KCkgfHwgdGlsZVJlY3RJblJvb3RDb29y
ZGluYXRlcy5pbnRlcnNlY3RzKG1fc3RhdGUudmlzaWJsZVJlY3QpKQorICAgICAgICAgICAgICAg
IHRpbGVzVG9BZGQuYXBwZW5kKHRpbGVSZWN0KTsKKyAgICAgICAgfQorICAgIH0KIAotICAgIG1f
bmVhcmVzdFN1cmZhY2VTaXplID0gbmVhcmVzdFN1cmZhY2VTaXplKCk7CisgICAgZm9yIChpbnQg
aSA9IG1fdGlsZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgY29uc3QgRmxv
YXRSZWN0IG9sZFRpbGUgPSBtX3RpbGVzW2ldLnJlY3Q7CisgICAgICAgIGJvb2wgZm91bmQgPSBm
YWxzZTsKIAotICAgIGlmIChtX2xheWVyVHlwZSAhPSBUcmFuc3BhcmVuY3lMYXllcikgewotICAg
ICAgICBtX3RyYW5zZm9ybXMucmVwbGljYSA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KG1fdHJhbnNm
b3Jtcy50YXJnZXQpLm11bHRpcGx5KG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3RyYW5zZm9ybXMu
bG9jYWwpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGZvciAoaW50IGogPSB0aWxlc1RvQWRk
LnNpemUoKSAtIDE7IGogPj0gMDsgLS1qKSB7CisgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3Qg
bmV3VGlsZSA9IHRpbGVzVG9BZGRbal07CisgICAgICAgICAgICBpZiAob2xkVGlsZSAhPSBuZXdU
aWxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBmb3VuZCA9IHRy
dWU7CisgICAgICAgICAgICB0aWxlc1RvQWRkLnJlbW92ZShqKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgIHRpbGVzVG9S
ZW1vdmUuYXBwZW5kKGkpOwogICAgIH0KIAotICAgIGNvbnN0IGZsb2F0IG9yaWdpblggPSBtX3Ry
YW5zZm9ybXMudGFyZ2V0Lm00MSgpOwotICAgIGNvbnN0IGZsb2F0IG9yaWdpblkgPSBtX3RyYW5z
Zm9ybXMudGFyZ2V0Lm00MigpOwotICAgIG1fdHJhbnNmb3Jtcy5yZXBsaWNhID0KLSAgICAgICAg
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KCkKLSAgICAgICAgICAgICAgICAudHJhbnNsYXRlKG9y
aWdpblgsIG9yaWdpblkpCi0gICAgICAgICAgICAgICAgLm11bHRpcGx5KG1fc3RhdGUucmVwbGlj
YUxheWVyLT5tX3RyYW5zZm9ybXMubG9jYWwpCi0gICAgICAgICAgICAgICAgLnRyYW5zbGF0ZSgt
b3JpZ2luWCwgLW9yaWdpblkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlsZXNUb0Fk
ZC5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIXRpbGVzVG9SZW1vdmUuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBUaWxlJiB0aWxlID0gbV90aWxlc1t0aWxlc1RvUmVtb3ZlWzBdXTsKKyAg
ICAgICAgICAgIHRpbGVzVG9SZW1vdmUucmVtb3ZlKDApOworICAgICAgICAgICAgdGlsZS5yZWN0
ID0gdGlsZXNUb0FkZFtpXTsKKyAgICAgICAgICAgIHRpbGUubmVlZHNSZXNldCA9IHRydWU7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIFRpbGUgdGlsZTsKKyAg
ICAgICAgdGlsZS5yZWN0ID0gdGlsZXNUb0FkZFtpXTsKKyAgICAgICAgdGlsZS5uZWVkc1Jlc2V0
ID0gdHJ1ZTsKKyAgICAgICAgbV90aWxlcy5hcHBlbmQodGlsZSk7CisgICAgfQorCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB0aWxlc1RvUmVtb3ZlLnNpemUoKSAmJiBtX3RpbGVzLnNpemUo
KSA+IFRpbGVFcmFzZVRocmVzaG9sZDsgKytpKQorICAgICAgICBtX3RpbGVzLnJlbW92ZSh0aWxl
c1RvUmVtb3ZlW2ldKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVRyYW5z
Zm9ybWF0aW9ucygpCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlVmlzaWJsZVJlY3Qo
KQogewotICAgIGlmICghbV90cmFuc2Zvcm1zLmRpcnR5KQorICAgIGlmICghbmVlZHNUb0NvbXB1
dGVCb3VuZGluZ1JlY3QoKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgbV90cmFuc2Zvcm1zLmRp
cnR5ID0gZmFsc2U7Ci0gICAgaWYgKChtX3NpemUuaXNFbXB0eSgpICYmIG1fc3RhdGUubWFza3NU
b0JvdW5kcykpCisgICAgRmxvYXRSZWN0IHJvb3RWaXNpYmxlUmVjdDsKKyAgICBpZiAoIW1fcGFy
ZW50KQorICAgICAgICByb290VmlzaWJsZVJlY3QgPSBtX3N0YXRlLnJvb3RWaXNpYmxlUmVjdDsK
KyAgICBlbHNlIGlmIChtX3BhcmVudCkKKyAgICAgICAgcm9vdFZpc2libGVSZWN0ID0gbV9wYXJl
bnQtPm1fc3RhdGUucm9vdFZpc2libGVSZWN0OworICAgIGlmICghbV9kaXJ0eUZsYWdzLnZpc2li
bGVSZWN0ICYmIG1fc3RhdGUucm9vdFZpc2libGVSZWN0ID09IHJvb3RWaXNpYmxlUmVjdCAmJiBn
QXZvaWRVbm5lY2Vzc2FyeUNvbXB1dGF0aW9ucykKICAgICAgICAgcmV0dXJuOwogCi0gICAgVGV4
dHVyZU1hcHBlck5vZGUqIHBhcmVudCA9IG1fcGFyZW50OwotICAgIGNvbXB1dGVMb2NhbFRyYW5z
Zm9ybSgpOwotCi0gICAgbV90cmFuc2Zvcm1zLnRhcmdldCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4
KHBhcmVudCA/IHBhcmVudC0+bV90cmFuc2Zvcm1zLmZvckRlc2NlbmRhbnRzIDogVHJhbnNmb3Jt
YXRpb25NYXRyaXgoKSkubXVsdGlwbHkobV90cmFuc2Zvcm1zLmxvY2FsKTsKLSAgICBtX3RyYW5z
Zm9ybXMuZm9yRGVzY2VuZGFudHMgPSAobV9sYXllclR5cGUgPT0gQ2xpcExheWVyID8gVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSA6IG1fdHJhbnNmb3Jtcy50YXJnZXQpOworICAgIG1fc3RhdGUucm9v
dFZpc2libGVSZWN0ID0gcm9vdFZpc2libGVSZWN0OworICAgIG1fZGlydHlGbGFncy52aXNpYmxl
UmVjdCA9IGZhbHNlOwogCi0gICAgaWYgKG1fZWZmZWN0VGFyZ2V0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRpbmdSZWN0ID0gSW50UmVjdChtX3RyYW5z
Zm9ybXMudGFyZ2V0Lm1hcFJlY3QoZW50aXJlUmVjdCgpKSk7Ci0gICAgaWYgKG1fc3RhdGUucmVw
bGljYUxheWVyKQotICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+Y29tcHV0ZVRyYW5zZm9y
bWF0aW9ucygpOworICAgIG1fc3RhdGUudmlzaWJsZVJlY3QgPSBtX3N0YXRlLnJvb3RWaXNpYmxl
UmVjdDsKKyAgICBtX3N0YXRlLnZpc2libGVSZWN0LmludGVyc2VjdChtX3RyYW5zZm9ybXMuYm91
bmRpbmdSZWN0RnJvbVJvb3QpOworfQogCi0gICAgZmxhdHRlblRvMkRTcGFjZUlmTmVjZXNzYXJ5
KCk7Citib29sIFRleHR1cmVNYXBwZXJOb2RlOjpyZW5kZXJBc0RpcmVjdEltYWdlKFRleHR1cmVN
YXBwZXIqIHRleHR1cmVNYXBwZXIpCit7CisgICAgaWYgKG1fY3VycmVudENvbnRlbnQuY29udGVu
dFR5cGUgIT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgaWYgKCFtX3N0YXRlLmJhY2tmYWNlVmlzaWJpbGl0eSAmJiBtX3RyYW5zZm9ybXMudGFy
Z2V0LmludmVyc2UoKS5tMzMoKSA8IDApIHsKLSAgICAgICAgbV9zdGF0ZS52aXNpYmxlID0gZmFs
c2U7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fY3VycmVudENvbnRlbnQuaW1hZ2UpIHsK
KyAgICAgICAgbV90aWxlcy5jbGVhcigpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0g
ICAgbV9zdGF0ZS52aXNpYmxlID0gdHJ1ZTsKIAotICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5t
X3N0YXRlLnByZXNlcnZlczNEKQotICAgICAgICBtX3RyYW5zZm9ybXMuY2VudGVyWiA9IG1fdHJh
bnNmb3Jtcy50YXJnZXQubWFwUG9pbnQoRmxvYXRQb2ludDNEKG1fc2l6ZS53aWR0aCgpIC8gMiwg
bV9zaXplLmhlaWdodCgpIC8gMiwgMCkpLnooKTsKKyAgICBpZiAobV90aWxlcy5zaXplKCkgIT0g
MSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFtX2NoaWxkcmVuLnNpemUoKSkK
LSAgICAgICAgcmV0dXJuOworICAgIGlmICghbV90aWxlc1swXS50ZXh0dXJlKQorICAgICAgICBt
X3RpbGVzWzBdLnRleHR1cmUgPSB0ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CisgICAg
bV90aWxlc1swXS50ZXh0dXJlLT5zZXRDb250ZW50c1RvSW1hZ2UobV9jdXJyZW50Q29udGVudC5p
bWFnZS5nZXQoKSk7CisgICAgbV90aWxlc1swXS5yZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQo
MCwgMCksIEZsb2F0U2l6ZShtX2N1cnJlbnRDb250ZW50LmltYWdlLT5zaXplKCkpKTsKKyAgICBt
X3RpbGVzWzBdLm5lZWRzUmVzZXQgPSBmYWxzZTsKIAotICAgIGlmIChtX3N0YXRlLmNoaWxkcmVu
VHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIG1fY3VycmVudENv
bnRlbnQubmVlZHNEaXNwbGF5ID0gZmFsc2U7CisgICAgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rp
c3BsYXlSZWN0ID0gSW50UmVjdCgpOwogCi0gICAgY29uc3QgRmxvYXRQb2ludCBjZW50ZXJQb2lu
dCA9IEZsb2F0UG9pbnQobV9zaXplLndpZHRoKCkgLyAyLCBtX3NpemUuaGVpZ2h0KCkgLyAyKTsK
LSAgICBpZiAobV90cmFuc2Zvcm1zLnBlcnNwZWN0aXZlRGlydHkpCi0gICAgICAgIG1fdHJhbnNm
b3Jtcy5wZXJzcGVjdGl2ZSA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkKLSAgICAgICAgICAgIC50
cmFuc2xhdGUoY2VudGVyUG9pbnQueCgpLCBjZW50ZXJQb2ludC55KCkpCi0gICAgICAgICAgICAu
bXVsdGlwbHkobV9zdGF0ZS5jaGlsZHJlblRyYW5zZm9ybSkKLSAgICAgICAgICAgIC50cmFuc2xh
dGUoLWNlbnRlclBvaW50LngoKSwgLWNlbnRlclBvaW50LnkoKSk7Ci0gICAgbV90cmFuc2Zvcm1z
LnBlcnNwZWN0aXZlRGlydHkgPSBmYWxzZTsKLSAgICBtX3RyYW5zZm9ybXMuZm9yRGVzY2VuZGFu
dHMubXVsdGlwbHkobV90cmFuc2Zvcm1zLnBlcnNwZWN0aXZlKTsKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6dXBsb2FkVGV4dHVyZUZyb21Db250ZW50KFRl
eHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBH
cmFwaGljc0xheWVyKiBsYXllcikKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnJlbmRlckNvbnRl
bnQoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7
Ci0gICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkgfHwgIWxheWVyKSB7Ci0gICAgICAgIG1fdGV4dHVy
ZS0+ZGVzdHJveSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fY3VycmVu
dENvbnRlbnQuY29udGVudFR5cGUgPT0gRGlyZWN0SW1hZ2VDb250ZW50VHlwZSkgewotICAgICAg
ICBpZiAobV9jdXJyZW50Q29udGVudC5pbWFnZSkKLSAgICAgICAgICAgIG1fdGV4dHVyZS0+c2V0
Q29udGVudHNUb0ltYWdlKG1fY3VycmVudENvbnRlbnQuaW1hZ2UuZ2V0KCkpOworICAgIGlmICht
X3NpemUuaXNFbXB0eSgpIHx8ICFsYXllciB8fCAoIW1fc3RhdGUuZHJhd3NDb250ZW50ICYmIG1f
Y3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlKSkgeworICAgICAg
ICBtX3RpbGVzLmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9j
dXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBNZWRpYUNvbnRlbnRUeXBlKSB7Ci0gICAgICAg
IGlmICghbV9jdXJyZW50Q29udGVudC5tZWRpYSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgbV90ZXh0dXJlLT5yZXNldChtX3NpemUsIHRydWUpOwotICAgICAgICBQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dCogcGxhdGZvcm1Db250ZXh0ID0gbV90ZXh0dXJlLT5iZWdpblBhaW50TWVkaWEo
KTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQocGxhdGZvcm1Db250ZXh0KTsKLSAg
ICAgICAgbV9jdXJyZW50Q29udGVudC5tZWRpYS0+cGFpbnQoJmNvbnRleHQpOwotICAgICAgICBt
X3RleHR1cmUtPmVuZFBhaW50KCk7CisgICAgaWYgKCF0ZXh0dXJlTWFwcGVyKQogICAgICAgICBy
ZXR1cm47Ci0gICAgfQogCi0gICAgY29uc3QgYm9vbCBuZWVkc1Jlc2V0ID0gKG1fdGV4dHVyZS0+
Y29udGVudFNpemUoKSAhPSBtX3NpemUpIHx8ICFtX3RleHR1cmUtPmlzVmFsaWQoKTsKLSAgICBp
ZiAoKG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgIT0gSFRNTENvbnRlbnRUeXBlKQotICAg
ICAgICB8fCAoIW1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5ICYmIG1fY3VycmVudENvbnRl
bnQubmVlZHNEaXNwbGF5UmVjdC5pc0VtcHR5KCkgJiYgIW5lZWRzUmVzZXQpKQotICAgICAgICBy
ZXR1cm47CisgICAgVmVjdG9yPEZsb2F0UmVjdD4gZGlydHlSZWN0czsKIAotICAgIEludFJlY3Qg
ZGlydHlSZWN0ID0gSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgp
KTsKLSAgICBpZiAoIW5lZWRzUmVzZXQgJiYgIW1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5
KQotICAgICAgICBkaXJ0eVJlY3QuaW50ZXJzZWN0KG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNw
bGF5UmVjdCk7CisgICAgLy8gRklYTUU6IEFkZCBkaXJlY3RseSBjb21wb3NpdGVkIGltYWdlcy4K
IAotICAgIGlmIChuZWVkc1Jlc2V0KQotICAgICAgICBtX3RleHR1cmUtPnJlc2V0KG1fc2l6ZSwg
bV9zdGF0ZS5jb250ZW50c09wYXF1ZSk7CisgICAgaWYgKG1fY3VycmVudENvbnRlbnQubmVlZHNE
aXNwbGF5KSB7CisgICAgICAgIEZsb2F0UmVjdCBlbnRpcmVSZWN0ID0gdGhpcy0+ZW50aXJlUmVj
dCgpOworICAgICAgICBlbnRpcmVSZWN0LnNjYWxlKG1fc3RhdGUuY29udGVudFNjYWxlKTsKKyAg
ICAgICAgZGlydHlSZWN0cy5hcHBlbmQoZW50aXJlUmVjdCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgRmxvYXRSZWN0IHJlY3QobV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0KTsKKyAg
ICAgICAgcmVjdC5zY2FsZShtX3N0YXRlLmNvbnRlbnRTY2FsZSk7CisgICAgICAgIGRpcnR5UmVj
dHMuYXBwZW5kKHJlY3QpOworICAgIH0KIAotICAgIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0
IGNvbnRleHQobV90ZXh0dXJlLT5iZWdpblBhaW50KGRpcnR5UmVjdCkpOwotICAgICAgICBpZiAo
dGV4dHVyZU1hcHBlcikgeworICAgIGZvciAoc2l6ZV90IHRpbGVJbmRleCA9IDA7IHRpbGVJbmRl
eCA8IG1fdGlsZXMuc2l6ZSgpOyArK3RpbGVJbmRleCkgeworICAgICAgICBUaWxlJiB0aWxlID0g
bV90aWxlc1t0aWxlSW5kZXhdOworICAgICAgICBWZWN0b3I8RmxvYXRSZWN0PiByZWN0cyA9IGRp
cnR5UmVjdHM7CisgICAgICAgIGlmICghdGlsZS50ZXh0dXJlKQorICAgICAgICAgICAgdGlsZS50
ZXh0dXJlID0gdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOworICAgICAgICBSZWZQdHI8
Qml0bWFwVGV4dHVyZT4mIHRleHR1cmUgPSB0aWxlLnRleHR1cmU7CisgICAgICAgIEludFNpemUg
dGlsZVNpemUgPSBlbmNsb3NpbmdJbnRSZWN0KHRpbGUucmVjdCkuc2l6ZSgpOworICAgICAgICBp
ZiAodGlsZS5uZWVkc1Jlc2V0IHx8IHRleHR1cmUtPmNvbnRlbnRTaXplKCkgIT0gdGlsZVNpemUg
fHwgIXRleHR1cmUtPmlzVmFsaWQoKSkgeworICAgICAgICAgICAgdGlsZS5uZWVkc1Jlc2V0ID0g
ZmFsc2U7CisgICAgICAgICAgICB0ZXh0dXJlLT5yZXNldCh0aWxlU2l6ZSwgbV9jdXJyZW50Q29u
dGVudC5jb250ZW50VHlwZSA9PSBEaXJlY3RJbWFnZUNvbnRlbnRUeXBlID8gZmFsc2UgOiBtX3N0
YXRlLmNvbnRlbnRzT3BhcXVlKTsKKyAgICAgICAgICAgIHJlY3RzLmNsZWFyKCk7CisgICAgICAg
ICAgICByZWN0cy5hcHBlbmQodGlsZS5yZWN0KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGlu
dCBpID0gcmVjdHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgIEludFJl
Y3QgY29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHRpbGUucmVjdCk7CisgICAgICAgICAg
ICBjb250ZW50UmVjdC5pbnRlcnNlY3QoZW5jbG9zaW5nSW50UmVjdChyZWN0c1tpXSkpOworICAg
ICAgICAgICAgaWYgKGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgRmxvYXRSZWN0IGNvbnRlbnRSZWN0SW5UaWxlQ29vcmRpbmF0
ZXMgPSBjb250ZW50UmVjdDsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgb2Zmc2V0KC10aWxlLnJl
Y3QueCgpLCAtdGlsZS5yZWN0LnkoKSk7CisgICAgICAgICAgICBjb250ZW50UmVjdEluVGlsZUNv
b3JkaW5hdGVzLm1vdmUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7CisgICAgICAgICAgICBHcmFw
aGljc0NvbnRleHQgY29udGV4dCh0ZXh0dXJlLT5iZWdpblBhaW50KGVuY2xvc2luZ0ludFJlY3Qo
Y29udGVudFJlY3RJblRpbGVDb29yZGluYXRlcykpKTsKICAgICAgICAgICAgIGNvbnRleHQuc2V0
SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSh0ZXh0dXJlTWFwcGVyLT5pbWFnZUludGVycG9sYXRp
b25RdWFsaXR5KCkpOwogICAgICAgICAgICAgY29udGV4dC5zZXRUZXh0RHJhd2luZ01vZGUodGV4
dHVyZU1hcHBlci0+dGV4dERyYXdpbmdNb2RlKCkpOworICAgICAgICAgICAgY29udGV4dC50cmFu
c2xhdGUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7CisgICAgICAgICAgICBjb250ZXh0LnNjYWxl
KEZsb2F0U2l6ZShtX3N0YXRlLmNvbnRlbnRTY2FsZSwgbV9zdGF0ZS5jb250ZW50U2NhbGUpKTsK
KyAgICAgICAgICAgIEZsb2F0UmVjdCBzY2FsZWRDb250ZW50UmVjdChjb250ZW50UmVjdCk7Cisg
ICAgICAgICAgICBzY2FsZWRDb250ZW50UmVjdC5zY2FsZSgxLmYgLyBtX3N0YXRlLmNvbnRlbnRT
Y2FsZSk7CisgICAgICAgICAgICBpZiAobV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9PSBE
aXJlY3RJbWFnZUNvbnRlbnRUeXBlKQorICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdl
KG1fY3VycmVudENvbnRlbnQuaW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBv
aW50KDAsIDApKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsYXllci0+cGFp
bnRHcmFwaGljc0xheWVyQ29udGVudHMoY29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChzY2FsZWRD
b250ZW50UmVjdCkpOworICAgICAgICAgICAgdGV4dHVyZS0+ZW5kUGFpbnQoKTsKICAgICAgICAg
fQotICAgICAgICBsYXllci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29udGV4dCwgZGly
dHlSZWN0KTsKICAgICB9Ci0gICAgbV90ZXh0dXJlLT5lbmRQYWludCgpOworCiAgICAgbV9jdXJy
ZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKKyAgICBtX2N1cnJlbnRDb250ZW50Lm5l
ZWRzRGlzcGxheVJlY3QgPSBJbnRSZWN0KCk7CiB9CiAKLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9k
ZTo6cGFpbnQoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgVGV4dHVyZU1hcHBl
ckNvbnRlbnRMYXllcjo6UGFpbnRPcHRpb25zJiBvcHRpb25zKQordm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6cGFpbnQoKQogewotICAgIEFTU0VSVChtX2xheWVyVHlwZSA9PSBSb290TGF5ZXIpOwog
ICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoIW1f
c3VyZmFjZU1hbmFnZXIpCisgICAgICAgIG1fc3VyZmFjZU1hbmFnZXIgPSBuZXcgVGV4dHVyZU1h
cHBlclN1cmZhY2VNYW5hZ2VyOworICAgIG1fc3VyZmFjZU1hbmFnZXItPnRleHR1cmVNYXBwZXIg
PSBtX3RleHR1cmVNYXBwZXI7CiAgICAgVGV4bWFwUGFpbnRPcHRpb25zIG9wdDsKLSAgICBvcHQu
b3BhY2l0eSA9IDE7Ci0gICAgb3B0LnJvb3RMYXllciA9IHRoaXM7Ci0gICAgb3B0LnNjaXNzb3JS
ZWN0ID0gb3B0aW9ucy50YXJnZXRSZWN0OwotICAgIG9wdC52aXNpYmxlUmVjdCA9IG9wdGlvbnMu
dmlzaWJsZVJlY3Q7Ci0gICAgb3B0LnRleHR1cmVNYXBwZXIgPSB0ZXh0dXJlTWFwcGVyOwotICAg
IG9wdC5zdXJmYWNlID0gMDsKLSAgICBvcHQuY2FjaGUgPSBtX2NhY2hlOworICAgIG9wdC5zdXJm
YWNlTWFuYWdlciA9IG1fc3VyZmFjZU1hbmFnZXI7CisgICAgb3B0LnRleHR1cmVNYXBwZXIgPSBt
X3RleHR1cmVNYXBwZXI7CisgICAgb3B0LnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKDApOwog
ICAgIHBhaW50UmVjdXJzaXZlKG9wdCk7CisgICAgbV9zdXJmYWNlTWFuYWdlci0+cHVyZ2VUZXh0
dXJlcygpOworfQogCi0gICAgaWYgKHRleHR1cmVNYXBwZXItPmFsbG93U3VyZmFjZUZvclJvb3Qo
KSB8fCBtX3N0YXRlLmhhc1N1cmZhY2VEZXNjZW5kYW50cykgewotICAgICAgICB0ZXh0dXJlTWFw
cGVyLT5iaW5kU3VyZmFjZSgwKTsKLSAgICAgICAgdGV4dHVyZU1hcHBlci0+cGFpbnRUb1Rhcmdl
dCgqbV9zdXJmYWNlLmdldCgpLCBvcHRpb25zLnZpZXdwb3J0U2l6ZSwgb3B0aW9ucy50cmFuc2Zv
cm0sIG9wdGlvbnMub3BhY2l0eSAqIG1fc3RhdGUub3BhY2l0eSwgb3B0aW9ucy50YXJnZXRSZWN0
KTsKLSAgICB9Ci0gICAgbV9jYWNoZS0+cHVyZ2UoKTsKK0Zsb2F0UmVjdCBUZXh0dXJlTWFwcGVy
Tm9kZTo6dGFyZ2V0UmVjdEZvclRpbGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gRmxvYXRSZWN0
KAorICAgICAgICAgICAgICAgIHRhcmdldFJlY3QueCgpICsgKHRpbGVSZWN0LngoKSAtIHRhcmdl
dFJlY3QueCgpKSAvIG1fc3RhdGUuY29udGVudFNjYWxlLAorICAgICAgICAgICAgICAgIHRhcmdl
dFJlY3QueSgpICsgKHRpbGVSZWN0LnkoKSAtIHRhcmdldFJlY3QueSgpKSAvIG1fc3RhdGUuY29u
dGVudFNjYWxlLAorICAgICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCkgLyBtX3N0YXRlLmNv
bnRlbnRTY2FsZSwKKyAgICAgICAgICAgICAgICB0aWxlUmVjdC5oZWlnaHQoKSAvIG1fc3RhdGUu
Y29udGVudFNjYWxlKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRTZWxmKGNv
bnN0IFRleG1hcFBhaW50T3B0aW9ucyYgb3B0aW9ucykKQEAgLTQ5MSwyNzEgKzUzNiwyNjAgQEAg
dm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRTZWxmKGNvbnN0IFRleG1hcFBhaW50T3B0aW9u
cyYgb3B0aW9ucykKICAgICBpZiAobV9zaXplLmlzRW1wdHkoKSB8fCAoIW1fc3RhdGUuZHJhd3ND
b250ZW50ICYmIG1fY3VycmVudENvbnRlbnQuY29udGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBl
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHJlcGxpY2FN
YXNrVGV4dHVyZTsKLSAgICBtX3RleHR1cmUtPnVucGFjaygpOworICAgIFJlZlB0cjxCaXRtYXBU
ZXh0dXJlPiBtYXNrVGV4dHVyZSwgcmVwbGljYU1hc2tUZXh0dXJlOwogCi0gICAgUmVmUHRyPEJp
dG1hcFRleHR1cmU+IG1hc2tUZXh0dXJlID0gbV9zdGF0ZS5tYXNrTGF5ZXIgPyBtX3N0YXRlLm1h
c2tMYXllci0+bV90ZXh0dXJlIDogMDsKKyAgICBpZiAobV9zdGF0ZS5tYXNrTGF5ZXIpCisgICAg
ICAgIG1hc2tUZXh0dXJlID0gbV9zdGF0ZS5tYXNrTGF5ZXItPnRleHR1cmUoKTsKICAgICBpZiAo
bV9zdGF0ZS5yZXBsaWNhTGF5ZXIgJiYgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUubWFz
a0xheWVyKQotICAgICAgICByZXBsaWNhTWFza1RleHR1cmUgPSBtX3N0YXRlLnJlcGxpY2FMYXll
ci0+bV9zdGF0ZS5tYXNrTGF5ZXItPm1fdGV4dHVyZTsKLQotICAgIGlmIChtYXNrVGV4dHVyZSkK
LSAgICAgICAgbWFza1RleHR1cmUtPnVucGFjaygpOworICAgICAgICByZXBsaWNhTWFza1RleHR1
cmUgPSBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5tYXNrTGF5ZXItPnRleHR1cmUoKTsK
IAotICAgIGlmIChyZXBsaWNhTWFza1RleHR1cmUpCi0gICAgICAgIHJlcGxpY2FNYXNrVGV4dHVy
ZS0+dW5wYWNrKCk7CisgICAgVGV4dHVyZU1hcHBlclN1cmZhY2VNYW5hZ2VyOjpVc2VUZXh0dXJl
IHVzZU1hc2tUZXh0dXJlKG1hc2tUZXh0dXJlLmdldCgpLCBvcHRpb25zLnN1cmZhY2VNYW5hZ2Vy
KTsKKyAgICBUZXh0dXJlTWFwcGVyU3VyZmFjZU1hbmFnZXI6OlVzZVRleHR1cmUgdXNlUmVwbGlj
YU1hc2tUZXh0dXJlKHJlcGxpY2FNYXNrVGV4dHVyZS5nZXQoKSwgb3B0aW9ucy5zdXJmYWNlTWFu
YWdlcik7CiAKICAgICBjb25zdCBmbG9hdCBvcGFjaXR5ID0gb3B0aW9ucy5pc1N1cmZhY2UgPyAx
IDogb3B0aW9ucy5vcGFjaXR5OwogCi0gICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyICYmICFv
cHRpb25zLmlzU3VyZmFjZSkKLSAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4
dHVyZSgqbV90ZXh0dXJlLmdldCgpLCByZXBsaWNhUmVjdCgpLCBtX3RyYW5zZm9ybXMucmVwbGlj
YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5ICogbV9zdGF0ZS5yZXBsaWNhTGF5
ZXItPm1fc3RhdGUub3BhY2l0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXBsaWNhTWFz
a1RleHR1cmUgPyByZXBsaWNhTWFza1RleHR1cmUuZ2V0KCkgOiBtYXNrVGV4dHVyZS5nZXQoKSk7
CisgICAgY29uc3QgRmxvYXRSZWN0IHRhcmdldFJlY3QgPSB0aGlzLT50YXJnZXRSZWN0KCk7CiAK
LSAgICBjb25zdCBJbnRSZWN0IHJlY3QgPSBtX2xheWVyVHlwZSA9PSBDbGlwTGF5ZXIgPyBlbnRp
cmVSZWN0KCkgOiB0YXJnZXRSZWN0KCk7Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgg
dHJhbnNmb3JtID0gbV9sYXllclR5cGUgPT0gQ2xpcExheWVyID8gVHJhbnNmb3JtYXRpb25NYXRy
aXgoKSA6IG1fdHJhbnNmb3Jtcy50YXJnZXQ7Ci0gICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5k
cmF3VGV4dHVyZSgqbV90ZXh0dXJlLmdldCgpLCByZWN0LCB0cmFuc2Zvcm0sIG9wYWNpdHksIG9w
dGlvbnMuaXNTdXJmYWNlID8gMCA6IG1hc2tUZXh0dXJlLmdldCgpKTsKLSAgICBvcHRpb25zLmNh
Y2hlLT5tYXJrKG1fdGV4dHVyZS5nZXQoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X3RpbGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEJpdG1hcFRleHR1cmUqIHRleHR1cmUgPSBt
X3RpbGVzW2ldLnRleHR1cmUuZ2V0KCk7CisgICAgICAgIFRleHR1cmVNYXBwZXJTdXJmYWNlTWFu
YWdlcjo6VXNlVGV4dHVyZSB1c2VUZXh0dXJlKHRleHR1cmUsIG9wdGlvbnMuc3VyZmFjZU1hbmFn
ZXIpOworICAgICAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIgJiYgIW9wdGlvbnMuaXNTdXJm
YWNlKQorICAgICAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqdGV4
dHVyZSwgdGFyZ2V0UmVjdEZvclRpbGVSZWN0KHRhcmdldFJlY3QsIG1fdGlsZXNbaV0ucmVjdCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KG1fdHJh
bnNmb3Jtcy50YXJnZXQpLm11bHRpcGx5KG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3RyYW5zZm9y
bXMubG9jYWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5ICogbV9zdGF0
ZS5yZXBsaWNhTGF5ZXItPm1fb3BhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVwbGljYU1hc2tUZXh0dXJlID8gcmVwbGljYU1hc2tUZXh0dXJlLmdldCgpIDogbWFza1RleHR1
cmUuZ2V0KCkpOworCisgICAgICAgIGNvbnN0IEZsb2F0UmVjdCByZWN0ID0gdGFyZ2V0UmVjdEZv
clRpbGVSZWN0KHRhcmdldFJlY3QsIG1fdGlsZXNbaV0ucmVjdCk7CisgICAgICAgIG9wdGlvbnMu
dGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUoKnRleHR1cmUsIHJlY3QsIG1fdHJhbnNmb3Jtcy50
YXJnZXQsIG9wYWNpdHksIG9wdGlvbnMuaXNTdXJmYWNlID8gMCA6IG1hc2tUZXh0dXJlLmdldCgp
KTsKKyAgICB9CiB9CiAKLWJvb2wgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50UmVwbGljYShjb25z
dCBUZXhtYXBQYWludE9wdGlvbnMmIG9wdGlvbnMpCitpbnQgVGV4dHVyZU1hcHBlck5vZGU6OmNv
bXBhcmVHcmFwaGljc0xheWVyc1pWYWx1ZShjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQog
ewotICAgIEJpdG1hcFRleHR1cmUmIHRleHR1cmUgPSAqbV9zdXJmYWNlLmdldCgpOwotICAgIFRl
eHR1cmVNYXBwZXJOb2RlKiByZXBsaWNhID0gbV9zdGF0ZS5yZXBsaWNhTGF5ZXI7Ci0gICAgUmVm
UHRyPEJpdG1hcFRleHR1cmU+IG1hc2tUZXh0dXJlOwotICAgIGlmIChUZXh0dXJlTWFwcGVyTm9k
ZSogbWFzayA9IG1fc3RhdGUubWFza0xheWVyKQotICAgICAgICBtYXNrVGV4dHVyZSA9IG1hc2st
Pm1fdGV4dHVyZTsKLSAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gcmVwbGljYU1hc2tUZXh0dXJl
OwotICAgIGlmICghcmVwbGljYSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHJl
cGxpY2EgJiYgcmVwbGljYS0+bV9zdGF0ZS5tYXNrTGF5ZXIpCi0gICAgICAgIHJlcGxpY2FNYXNr
VGV4dHVyZSA9IHJlcGxpY2EtPm1fc3RhdGUubWFza0xheWVyLT5tX3RleHR1cmU7Ci0KLSAgICBp
ZiAocmVwbGljYU1hc2tUZXh0dXJlKQotICAgICAgICByZXBsaWNhTWFza1RleHR1cmUtPnVucGFj
aygpOwotICAgIEFTU0VSVChtX3JlcGxpY2FTdXJmYWNlKTsKLSAgICBtX3JlcGxpY2FTdXJmYWNl
LT5yZXNldChvcHRpb25zLnN1cmZhY2UtPnNpemUoKSk7Ci0gICAgbV9yZXBsaWNhU3VyZmFjZS0+
c2V0T2Zmc2V0KG9wdGlvbnMuc3VyZmFjZS0+b2Zmc2V0KCkpOwotICAgIG9wdGlvbnMuY2FjaGUt
Pm1hcmsobV9yZXBsaWNhU3VyZmFjZS5nZXQoKSk7Ci0gICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVy
LT5iaW5kU3VyZmFjZShtX3JlcGxpY2FTdXJmYWNlLmdldCgpKTsKLSAgICBvcHRpb25zLnRleHR1
cmVNYXBwZXItPmRyYXdUZXh0dXJlKHRleHR1cmUsIHJlcGxpY2FSZWN0KCksIG1fdHJhbnNmb3Jt
cy5yZXBsaWNhLCByZXBsaWNhLT5tX3N0YXRlLm9wYWNpdHksIHJlcGxpY2FNYXNrVGV4dHVyZSA/
IHJlcGxpY2FNYXNrVGV4dHVyZS5nZXQoKSA6IG1hc2tUZXh0dXJlLmdldCgpKTsKLSAgICBvcHRp
b25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKHRleHR1cmUsIEludFJlY3QoSW50UG9pbnQo
MCwgMCksIG9wdGlvbnMuc3VyZmFjZS0+c2l6ZSgpKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwg
MS4wZiwgbWFza1RleHR1cmUuZ2V0KCkpOwotICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+Ymlu
ZFN1cmZhY2Uob3B0aW9ucy5zdXJmYWNlKTsKLSAgICBvcHRpb25zLmNhY2hlLT5tYXJrKG9wdGlv
bnMuc3VyZmFjZSk7Ci0gICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqbV9y
ZXBsaWNhU3VyZmFjZS5nZXQoKSwgSW50UmVjdChJbnRQb2ludCgwLCAwKSwgb3B0aW9ucy5zdXJm
YWNlLT5zaXplKCkpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBvcHRpb25zLm9wYWNpdHksIDAp
OwotICAgIHJldHVybiB0cnVlOworICAgIHR5cGVkZWYgY29uc3QgVGV4dHVyZU1hcHBlck5vZGUq
IE5vZGVQdHI7CisgICAgY29uc3QgTm9kZVB0ciogbm9kZUEgPSBzdGF0aWNfY2FzdDxjb25zdCBO
b2RlUHRyKj4oYSk7CisgICAgY29uc3QgTm9kZVB0ciogbm9kZUIgPSBzdGF0aWNfY2FzdDxjb25z
dCBOb2RlUHRyKj4oYik7CisgICAgcmV0dXJuIGludCgoKCpub2RlQSktPm1fdHJhbnNmb3Jtcy5j
ZW50ZXJaIC0gKCpub2RlQiktPm1fdHJhbnNmb3Jtcy5jZW50ZXJaKSAqIDEwMDApOwogfQogCi12
b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludFN1cmZhY2UoY29uc3QgVGV4bWFwUGFpbnRPcHRp
b25zJiBvcHRpb25zKQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c29ydEJ5Wk9yZGVyKFZlY3Rv
cjxUZXh0dXJlTWFwcGVyTm9kZSogPiYgYXJyYXksIGludCBmaXJzdCwgaW50IGxhc3QpCiB7Ci0g
ICAgaWYgKG1fbGF5ZXJUeXBlID09IFJvb3RMYXllciB8fCBtX2xheWVyVHlwZSA9PSBEZWZhdWx0
TGF5ZXIgfHwgbV9sYXllclR5cGUgPT0gU2Npc3NvckxheWVyKQotICAgICAgICByZXR1cm47Cisg
ICAgcXNvcnQoYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIHNpemVvZihUZXh0dXJlTWFwcGVy
Tm9kZSopLCBjb21wYXJlR3JhcGhpY3NMYXllcnNaVmFsdWUpOworfQogCi0gICAgUmVmUHRyPEJp
dG1hcFRleHR1cmU+IG1hc2tUZXh0dXJlOwotICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSogbWFz
ayA9IG1fc3RhdGUubWFza0xheWVyKQotICAgICAgICBtYXNrVGV4dHVyZSA9IG1hc2stPm1fdGV4
dHVyZTsKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50U2VsZkFuZENoaWxkcmVuKGNvbnN0
IFRleG1hcFBhaW50T3B0aW9ucyYgb3B0aW9ucywgVGV4bWFwUGFpbnRPcHRpb25zJiBvcHRpb25z
Rm9yRGVzY2VuZGFudHMpCit7CisgICAgYm9vbCBoYXNDbGlwID0gbV9zdGF0ZS5tYXNrc1RvQm91
bmRzICYmICFtX2NoaWxkcmVuLmlzRW1wdHkoKTsKKyAgICBpZiAoaGFzQ2xpcCkKKyAgICAgICAg
b3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iZWdpbkNsaXAobV90cmFuc2Zvcm1zLmZvckRlc2NlbmRh
bnRzLCBGbG9hdFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwog
Ci0gICAgQVNTRVJUKG1fc3VyZmFjZSk7Ci0gICAgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSA9ICpt
X3N1cmZhY2UuZ2V0KCk7Ci0gICAgaWYgKG1hc2tUZXh0dXJlKQotICAgICAgICBtYXNrVGV4dHVy
ZS0+dW5wYWNrKCk7Ci0gICAgdGV4dHVyZS51bnBhY2soKTsKKyAgICBwYWludFNlbGYob3B0aW9u
cyk7CiAKLSAgICBpZiAocGFpbnRSZXBsaWNhKG9wdGlvbnMpKQotICAgICAgICByZXR1cm47Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICBt
X2NoaWxkcmVuW2ldLT5wYWludFJlY3Vyc2l2ZShvcHRpb25zRm9yRGVzY2VuZGFudHMpOwogCi0g
ICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShvcHRpb25zLnN1cmZhY2UpOwot
ICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUodGV4dHVyZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9sYXllclR5cGUgPT0gVHJhbnNwYXJlbmN5TGF5ZXIgPyBJ
bnRSZWN0KEludFBvaW50KDAsIDApLCBvcHRpb25zLnN1cmZhY2UtPnNpemUoKSkgOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fbGF5ZXJUeXBlID09IFRyYW5zcGFyZW5jeUxheWVyID8gVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSA6IG1fdHJhbnNmb3Jtcy50YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9wdGlvbnMub3BhY2l0eSwgbWFza1RleHR1cmUuZ2V0KCkpOwotICAgIG9wdGlvbnMu
Y2FjaGUtPm1hcmsoJnRleHR1cmUpOworICAgIGlmIChoYXNDbGlwKQorICAgICAgICBvcHRpb25z
LnRleHR1cmVNYXBwZXItPmVuZENsaXAoKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6
cGFpbnRTZWxmQW5kQ2hpbGRyZW4oY29uc3QgVGV4bWFwUGFpbnRPcHRpb25zJiBvcHRpb25zLCBU
ZXhtYXBQYWludE9wdGlvbnMmIG9wdGlvbnNGb3JEZXNjZW5kYW50cykKK2Jvb2wgVGV4dHVyZU1h
cHBlck5vZGU6OnBhaW50UmVmbGVjdGlvbihjb25zdCBUZXhtYXBQYWludE9wdGlvbnMmIG9wdGlv
bnMsIEJpdG1hcFRleHR1cmUqIGNvbnRlbnRTdXJmYWNlKQogewotICAgIGJvb2wgZGlkUGFpbnRT
ZWxmID0gZmFsc2U7Ci0gICAgaWYgKCFtX3N0YXRlLnByZXNlcnZlczNEIHx8IG1fY2hpbGRyZW4u
aXNFbXB0eSgpKSB7Ci0gICAgICAgIHBhaW50U2VsZihvcHRpb25zKTsKLSAgICAgICAgZGlkUGFp
bnRTZWxmID0gdHJ1ZTsKLSAgICB9CisgICAgaWYgKCFtX3N0YXRlLnJlcGxpY2FMYXllcikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fY2hpbGRyZW4uaXNFbXB0eSgpICYmICFv
cHRpb25zLmlzU3VyZmFjZSkKLSAgICAgICAgcmV0dXJuOworICAgIFJlZlB0cjxCaXRtYXBUZXh0
dXJlPiBzdXJmYWNlKGNvbnRlbnRTdXJmYWNlKTsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4g
bWFza1N1cmZhY2UsIHJlcGxpY2FNYXNrU3VyZmFjZTsKIAotICAgIGlmIChtX2xheWVyVHlwZSA9
PSBTY2lzc29yTGF5ZXIpCi0gICAgICAgIG9wdGlvbnNGb3JEZXNjZW5kYW50cy5zY2lzc29yUmVj
dC5pbnRlcnNlY3QobV90cmFuc2Zvcm1zLnRhcmdldC5tYXBSZWN0KEludFJlY3QoMCwgMCwgbV9z
aXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpKTsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVy
ZT4gcmVwbGljYU1hc2tUZXh0dXJlOworICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSogcmVwbGlj
YU1hc2sgPSBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5tYXNrTGF5ZXIpCisgICAgICAg
IHJlcGxpY2FNYXNrVGV4dHVyZSA9IHJlcGxpY2FNYXNrLT50ZXh0dXJlKCk7CiAKLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVGV4dHVy
ZU1hcHBlck5vZGUqIGxheWVyID0gbV9jaGlsZHJlbltpXTsKLSAgICAgICAgaWYgKCFsYXllcikK
LSAgICAgICAgICAgIGNvbnRpbnVlOworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBtYXNrVGV4
dHVyZTsKKyAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIG1hc2sgPSBtX3N0YXRlLm1hc2tMYXll
cikKKyAgICAgICAgbWFza1RleHR1cmUgPSBtYXNrLT50ZXh0dXJlKCk7CiAKLSAgICAgICAgaWYg
KCFkaWRQYWludFNlbGYgJiYgbGF5ZXItPm1fdHJhbnNmb3Jtcy5jZW50ZXJaID49IDApIHsKLSAg
ICAgICAgICAgIHBhaW50U2VsZihvcHRpb25zKTsKLSAgICAgICAgICAgIGRpZFBhaW50U2VsZiA9
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgbGF5ZXItPnBhaW50UmVjdXJzaXZlKG9wdGlvbnNG
b3JEZXNjZW5kYW50cyk7Ci0gICAgICAgIGlmIChvcHRpb25zLmlzU3VyZmFjZSkgewotICAgICAg
ICAgICAgQVNTRVJUKG1fc3VyZmFjZSk7Ci0gICAgICAgICAgICBvcHRpb25zLmNhY2hlLT5tYXJr
KG1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJp
bmRTdXJmYWNlKG1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgICAgIH0KKyAgICBUZXh0dXJlTWFwcGVy
U3VyZmFjZU1hbmFnZXI6OlVzZVRleHR1cmUgdXNlTWFza1RleHR1cmUobWFza1RleHR1cmUuZ2V0
KCksIG9wdGlvbnMuc3VyZmFjZU1hbmFnZXIpOworICAgIFRleHR1cmVNYXBwZXJTdXJmYWNlTWFu
YWdlcjo6VXNlVGV4dHVyZSB1c2VSZXBsaWNhTWFza1RleHR1cmUocmVwbGljYU1hc2tUZXh0dXJl
LmdldCgpLCBvcHRpb25zLnN1cmZhY2VNYW5hZ2VyKTsKKworICAgIGNvbnN0IEludFNpemUgdmll
d3BvcnRTaXplID0gb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT52aWV3cG9ydFNpemUoKTsKKworICAg
IGNvbnN0IGJvb2wgdXNlSW50ZXJtZWRpYXRlQnVmZmVyRm9yUmVwbGljYSA9IG1fc3RhdGUucmVw
bGljYUxheWVyICYmIG9wdGlvbnMub3BhY2l0eSA8IDAuOTk7CisgICAgY29uc3QgYm9vbCB1c2VJ
bnRlcm1lZGlhdGVCdWZmZXJGb3JNYXNrID0gbWFza1RleHR1cmUgJiYgcmVwbGljYU1hc2tUZXh0
dXJlOworICAgIGNvbnN0IEZsb2F0UmVjdCB2aWV3cG9ydFJlY3QoMCwgMCwgdmlld3BvcnRTaXpl
LndpZHRoKCksIHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSk7CisKKyAgICAvLyBUaGUgbWFzayBoYXMg
dG8gYmUgYWRqdXN0ZWQgdG8gdGFyZ2V0IGNvb3JkaW5hdGVzLgorICAgIGlmIChtYXNrVGV4dHVy
ZSkgeworICAgICAgICBtYXNrU3VyZmFjZSA9IG9wdGlvbnMuc3VyZmFjZU1hbmFnZXItPmdldElu
dGVybWVkaWF0ZVN1cmZhY2UoKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5k
U3VyZmFjZShtYXNrU3VyZmFjZS5nZXQoKSk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBl
ci0+ZHJhd1RleHR1cmUoKm1hc2tUZXh0dXJlLmdldCgpLCBlbnRpcmVSZWN0KCksIG1fdHJhbnNm
b3Jtcy50YXJnZXQsIDEsIDApOworICAgICAgICBtYXNrVGV4dHVyZSA9IG1hc2tTdXJmYWNlOwog
ICAgIH0KLSAgICBpZiAoIWRpZFBhaW50U2VsZikgewotICAgICAgICBwYWludFNlbGYob3B0aW9u
cyk7Ci0gICAgICAgIGRpZFBhaW50U2VsZiA9IHRydWU7CisKKyAgICAvLyBUaGUgcmVwbGljYSdz
IG1hc2sgaGFzIHRvIGJlIGFkanVzdGVkIHRvIHRhcmdldCBjb29yZGluYXRlcy4KKyAgICBpZiAo
cmVwbGljYU1hc2tUZXh0dXJlKSB7CisgICAgICAgIHJlcGxpY2FNYXNrU3VyZmFjZSA9IG9wdGlv
bnMuc3VyZmFjZU1hbmFnZXItPmdldEludGVybWVkaWF0ZVN1cmZhY2UoKTsKKyAgICAgICAgb3B0
aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShyZXBsaWNhTWFza1N1cmZhY2UuZ2V0KCkp
OworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCpyZXBsaWNhTWFz
a1RleHR1cmUuZ2V0KCksIGVudGlyZVJlY3QoKSwgbV90cmFuc2Zvcm1zLnRhcmdldCwgMSwgMCk7
CisgICAgICAgIHJlcGxpY2FNYXNrVGV4dHVyZSA9IHJlcGxpY2FNYXNrU3VyZmFjZTsKICAgICB9
CisKKyAgICAvLyBXZSBtaWdodCBuZWVkIHRvIGFwcGx5IHRoZSBtYXNrIG9mIHRoZSBjb250ZW50
IGxheWVyIGJlZm9yZSB3ZSBkcmF3IHRoZSByZWZsZWN0aW9uLCBhcyB0aGVyZSBtaWdodCBiZSB5
ZXQgYW5vdGhlciBtYXNrIGZvciB0aGUgcmVmbGVjdGlvbiBpdHNlbGYuCisgICAgaWYgKHVzZUlu
dGVybWVkaWF0ZUJ1ZmZlckZvck1hc2spIHsKKyAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+
IG1hc2tTdXJmYWNlID0gb3B0aW9ucy5zdXJmYWNlTWFuYWdlci0+Z2V0SW50ZXJtZWRpYXRlU3Vy
ZmFjZSgpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKG1hc2tT
dXJmYWNlLmdldCgpKTsKKyAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVy
ZSgqc3VyZmFjZS5nZXQoKSwgdmlld3BvcnRSZWN0LCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCAx
LCBtYXNrVGV4dHVyZS5nZXQoKSk7CisgICAgICAgIG9wdGlvbnMuc3VyZmFjZU1hbmFnZXItPmZy
ZWVJbnRlcm1lZGlhdGVTdXJmYWNlKHN1cmZhY2UuZ2V0KCkpOworICAgICAgICBzdXJmYWNlID0g
bWFza1N1cmZhY2U7CisgICAgICAgIG1hc2tUZXh0dXJlLmNsZWFyKCk7CisgICAgfQorCisgICAg
Ly8gV2UgYmxlbmQgdGhlIGxheWVyIGFuZCBpdHMgcmVwbGljYSBpbiBhbiBpbnRlcm1lZGlhdGUg
YnVmZmVyIGJlZm9yZSBibGVuZGluZyBpbnRvIHRoZSB0YXJnZXQgc3VyZmFjZS4KKyAgICBpZiAo
dXNlSW50ZXJtZWRpYXRlQnVmZmVyRm9yUmVwbGljYSkgeworICAgICAgICBSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gcmVwbGljYVN1cmZhY2UgPSBvcHRpb25zLnN1cmZhY2VNYW5hZ2VyLT5nZXRJbnRl
cm1lZGlhdGVTdXJmYWNlKCk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1
cmZhY2UocmVwbGljYVN1cmZhY2UuZ2V0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBw
ZXItPmRyYXdUZXh0dXJlKCpzdXJmYWNlLmdldCgpLCB2aWV3cG9ydFJlY3QsIG1fdHJhbnNmb3Jt
cy5yZXBsaWNhLCBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9vcGFjaXR5LCByZXBsaWNhTWFza1Rl
eHR1cmUuZ2V0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJl
KCpzdXJmYWNlLmdldCgpLCB2aWV3cG9ydFJlY3QsIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIDEs
IG1hc2tUZXh0dXJlLmdldCgpKTsKKyAgICAgICAgb3B0aW9ucy5zdXJmYWNlTWFuYWdlci0+ZnJl
ZUludGVybWVkaWF0ZVN1cmZhY2Uoc3VyZmFjZS5nZXQoKSk7CisgICAgICAgIHN1cmZhY2UgPSBy
ZXBsaWNhU3VyZmFjZTsKKyAgICB9CisKKyAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRT
dXJmYWNlKG9wdGlvbnMuc3VyZmFjZSk7CisKKyAgICAvLyBEcmF3IHRoZSByZWZsZWN0aW9uLgor
ICAgIGlmICghdXNlSW50ZXJtZWRpYXRlQnVmZmVyRm9yUmVwbGljYSkKKyAgICAgICAgb3B0aW9u
cy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqc3VyZmFjZS5nZXQoKSwgdmlld3BvcnRSZWN0
LCBtX3RyYW5zZm9ybXMucmVwbGljYSwgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fb3BhY2l0eSwg
cmVwbGljYU1hc2tUZXh0dXJlLmdldCgpKTsKKworICAgIC8vIERyYXcgdGhlIG9yaWdpbmFsLgor
ICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+ZHJhd1RleHR1cmUoKnN1cmZhY2UuZ2V0KCksIHZp
ZXdwb3J0UmVjdCwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgb3B0aW9ucy5vcGFjaXR5LCBtYXNr
VGV4dHVyZS5nZXQoKSk7CisKKyAgICBvcHRpb25zLnN1cmZhY2VNYW5hZ2VyLT5mcmVlSW50ZXJt
ZWRpYXRlU3VyZmFjZShzdXJmYWNlLmdldCgpKTsKKyAgICBvcHRpb25zLnN1cmZhY2VNYW5hZ2Vy
LT5mcmVlSW50ZXJtZWRpYXRlU3VyZmFjZShtYXNrU3VyZmFjZS5nZXQoKSk7CisgICAgb3B0aW9u
cy5zdXJmYWNlTWFuYWdlci0+ZnJlZUludGVybWVkaWF0ZVN1cmZhY2UocmVwbGljYU1hc2tTdXJm
YWNlLmdldCgpKTsKKworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJO
b2RlOjpwYWludFJlY3Vyc2l2ZShUZXhtYXBQYWludE9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBi
b29sIGlzRGlydHkgPSBtX3N0YXRlLmRpcnR5OwotICAgIG1fc3RhdGUuZGlydHkgPSBmYWxzZTsK
LQogICAgIGlmICgobV9zaXplLmlzRW1wdHkoKSAmJiAobV9zdGF0ZS5tYXNrc1RvQm91bmRzCi0g
ICAgICAgIHx8IG1fY2hpbGRyZW4uaXNFbXB0eSgpKSkgfHwgIW1fc3RhdGUudmlzaWJsZSB8fCBv
cHRpb25zLm9wYWNpdHkgPCAwLjAxIHx8IG1fc3RhdGUub3BhY2l0eSA8IDAuMDEpCisgICAgICAg
IHx8IG1fY2hpbGRyZW4uaXNFbXB0eSgpKSkgfHwgIW1fc3RhdGUudmlzaWJsZSB8fCBvcHRpb25z
Lm9wYWNpdHkgPCAwLjAxIHx8IG1fb3BhY2l0eSA8IDAuMDEpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGNvbXB1dGVSZXBsaWNhVHJhbnNmb3JtKCk7CisgICAgb3B0aW9ucy5vcGFjaXR5ICo9IG1f
b3BhY2l0eTsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gc3VyZmFjZTsKKyAgICBjb25zdCBi
b29sIG5lZWRzVHdvUGFzcyA9ICgobV9zdGF0ZS5yZXBsaWNhTGF5ZXIgfHwgbV9zdGF0ZS5tYXNr
TGF5ZXIpICYmICFtX2NoaWxkcmVuLmlzRW1wdHkoKSkgfHwgKG1fb3BhY2l0eSA8IDAuOTkgJiYg
bV9zdGF0ZS5taWdodEhhdmVPdmVybGFwcykgfHwgKG1fb3BhY2l0eSA8IDAuOTkgJiYgbV9zdGF0
ZS5yZXBsaWNhTGF5ZXIpOworICAgIGNvbnN0IEludFNpemUgdmlld3BvcnRTaXplID0gb3B0aW9u
cy50ZXh0dXJlTWFwcGVyLT52aWV3cG9ydFNpemUoKTsKKyAgICBvcHRpb25zLmlzU3VyZmFjZSA9
IGZhbHNlOwogCi0gICAgaWYgKG1fc3RhdGUubWFza0xheWVyKQotICAgICAgICBtX3N0YXRlLm1h
c2tMYXllci0+bV9zdGF0ZS5kaXJ0eSA9IGZhbHNlOworICAgIFRleG1hcFBhaW50T3B0aW9ucyBv
cHRpb25zRm9yRGVzY2VuZGFudHMob3B0aW9ucyk7CiAKLSAgICBpZiAobV9zdGF0ZS5yZXBsaWNh
TGF5ZXIpIHsKLSAgICAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPm1fc3RhdGUuZGlydHkgPSBm
YWxzZTsKLSAgICAgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRlLm1hc2tMYXll
cikKLSAgICAgICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRlLm1hc2tMYXllci0+
bV9zdGF0ZS5kaXJ0eSA9IGZhbHNlOworICAgIGlmICghbmVlZHNUd29QYXNzKSB7CisgICAgICAg
IHBhaW50U2VsZkFuZENoaWxkcmVuKG9wdGlvbnMsIG9wdGlvbnNGb3JEZXNjZW5kYW50cyk7Cisg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjb25zdCBib29sIGlzU3VyZmFjZSA9IChtX2xh
eWVyVHlwZSA9PSBDbGlwTGF5ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2xh
eWVyVHlwZSA9PSBUcmFuc3BhcmVuY3lMYXllcgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IChtX2xheWVyVHlwZSA9PSBSb290TGF5ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJiYgKG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YWxsb3dTdXJmYWNlRm9yUm9vdCgpIHx8
IG1fc3RhdGUuaGFzU3VyZmFjZURlc2NlbmRhbnRzKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICApKTsKKyAgICBGbG9hdFJlY3Qgdmlld3BvcnRSZWN0KDAsIDAsIHZpZXdwb3J0U2l6
ZS53aWR0aCgpLCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkpOwogCi0gICAgY29uc3QgSW50UmVjdCBi
b3VuZGluZ1JlY3Rmcm9tTmVhcmVzdFN1cmZhY2UgPSBtX3RyYW5zZm9ybXMudGFyZ2V0Qm91bmRp
bmdSZWN0OworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBtYXNrU3VyZmFjZTsKIAotICAgIG9w
dGlvbnMub3BhY2l0eSAqPSBtX3N0YXRlLm9wYWNpdHk7CisgICAgLy8gVGhlIG1hc2sgaGFzIHRv
IGJlIGFkanVzdGVkIHRvIHRhcmdldCBjb29yZGluYXRlcy4KKyAgICBpZiAobV9zdGF0ZS5tYXNr
TGF5ZXIpIHsKKyAgICAgICAgbWFza1N1cmZhY2UgPSBvcHRpb25zLnN1cmZhY2VNYW5hZ2VyLT5n
ZXRJbnRlcm1lZGlhdGVTdXJmYWNlKCk7CisgICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+
YmluZFN1cmZhY2UobWFza1N1cmZhY2UuZ2V0KCkpOworICAgICAgICBvcHRpb25zLnRleHR1cmVN
YXBwZXItPmRyYXdUZXh0dXJlKCptX3N0YXRlLm1hc2tMYXllci0+dGV4dHVyZSgpLCBlbnRpcmVS
ZWN0KCksIG1fdHJhbnNmb3Jtcy50YXJnZXQsIDEuMCwgMCk7CisgICAgfQogCi0gICAgVGV4bWFw
UGFpbnRPcHRpb25zIG9wdGlvbnNGb3JEZXNjZW5kYW50cyhvcHRpb25zKTsKLSAgICBvcHRpb25z
Rm9yRGVzY2VuZGFudHMub3BhY2l0eSA9IGlzU3VyZmFjZSA/IDEgOiBvcHRpb25zLm9wYWNpdHk7
Ci0gICAgb3B0aW9ucy5pc1N1cmZhY2UgPSBpc1N1cmZhY2U7Ci0KLSAgICBpZiAobV9sYXllclR5
cGUgPT0gQ2xpcExheWVyKSB7Ci0gICAgICAgIG9wdGlvbnNGb3JEZXNjZW5kYW50cy52aXNpYmxl
UmVjdCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkudHJhbnNsYXRlKC1ib3VuZGluZ1JlY3Rmcm9t
TmVhcmVzdFN1cmZhY2UueCgpLCAtYm91bmRpbmdSZWN0ZnJvbU5lYXJlc3RTdXJmYWNlLnkoKSku
bWFwUmVjdChvcHRpb25zLnZpc2libGVSZWN0KTsKLSAgICAgICAgb3B0aW9uc0ZvckRlc2NlbmRh
bnRzLnNjaXNzb3JSZWN0ID0gSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhl
aWdodCgpKTsKLSAgICB9Ci0KLSAgICBpZiAobV9sYXllclR5cGUgPT0gU2Npc3NvckxheWVyKQot
ICAgICAgICBvcHRpb25zRm9yRGVzY2VuZGFudHMuc2Npc3NvclJlY3QuaW50ZXJzZWN0KG1fdHJh
bnNmb3Jtcy50YXJnZXRCb3VuZGluZ1JlY3QpOwotICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+
c2V0Q2xpcChvcHRpb25zRm9yRGVzY2VuZGFudHMuc2Npc3NvclJlY3QpOwotCi0gICAgVGV4dHVy
ZU1hcHBlckNhY2hlTG9jayhtX3RleHR1cmUuZ2V0KCkpOwotICAgIFRleHR1cmVNYXBwZXJDYWNo
ZUxvY2sobV9zdXJmYWNlLmdldCgpKTsKLSAgICBUZXh0dXJlTWFwcGVyQ2FjaGVMb2NrKG1fcmVw
bGljYVN1cmZhY2UuZ2V0KCkpOwotCi0gICAgb3B0aW9ucy5jYWNoZS0+cHVyZ2UoKTsKLQotICAg
IGlmIChpc1N1cmZhY2UpIHsKLSAgICAgICAgQVNTRVJUKG1fc3VyZmFjZSk7Ci0gICAgICAgIGlm
ICghbV9zdXJmYWNlLT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBpc0RpcnR5ID0gdHJ1ZTsKLSAg
ICAgICAgaWYgKG1fc3RhdGUudGlsZWQpIHsKLSAgICAgICAgICAgIG1fc3VyZmFjZS0+cmVzZXQo
b3B0aW9ucy52aXNpYmxlUmVjdC5zaXplKCkpOwotICAgICAgICAgICAgbV9zdXJmYWNlLT5zZXRP
ZmZzZXQob3B0aW9ucy52aXNpYmxlUmVjdC5sb2NhdGlvbigpKTsKLSAgICAgICAgfSBlbHNlIGlm
IChpc0RpcnR5KQotICAgICAgICAgICAgbV9zdXJmYWNlLT5yZXNldChtX2xheWVyVHlwZSA9PSBU
cmFuc3BhcmVuY3lMYXllciA/IG9wdGlvbnMuc3VyZmFjZS0+c2l6ZSgpIDogbV9zaXplKTsKLSAg
ICAgICAgb3B0aW9ucy5jYWNoZS0+bWFyayhtX3N1cmZhY2UuZ2V0KCkpOwotICAgICAgICBvcHRp
b25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKG1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgICAg
IG9wdGlvbnNGb3JEZXNjZW5kYW50cy5zdXJmYWNlID0gbV9zdXJmYWNlLmdldCgpOwotICAgIH0g
ZWxzZSBpZiAobV9zdXJmYWNlKQotICAgICAgICBtX3N1cmZhY2UtPmRlc3Ryb3koKTsKLQotICAg
IGlmIChpc0RpcnR5IHx8ICFpc1N1cmZhY2UgfHwgbV9zdGF0ZS50aWxlZCB8fCAhbV9zdXJmYWNl
LT5pc1ZhbGlkKCkpCi0gICAgICAgIHBhaW50U2VsZkFuZENoaWxkcmVuKG9wdGlvbnMsIG9wdGlv
bnNGb3JEZXNjZW5kYW50cyk7CisgICAgc3VyZmFjZSA9IG9wdGlvbnMuc3VyZmFjZU1hbmFnZXIt
PmdldEludGVybWVkaWF0ZVN1cmZhY2UoKTsKKyAgICBvcHRpb25zRm9yRGVzY2VuZGFudHMuc3Vy
ZmFjZSA9IHN1cmZhY2UuZ2V0KCk7CisgICAgb3B0aW9ucy5pc1N1cmZhY2UgPSB0cnVlOworICAg
IG9wdGlvbnNGb3JEZXNjZW5kYW50cy5vcGFjaXR5ID0gMTsKKyAgICBvcHRpb25zLnRleHR1cmVN
YXBwZXItPmJpbmRTdXJmYWNlKHN1cmZhY2UuZ2V0KCkpOworCisgICAgcGFpbnRTZWxmQW5kQ2hp
bGRyZW4ob3B0aW9ucywgb3B0aW9uc0ZvckRlc2NlbmRhbnRzKTsKIAotICAgIHBhaW50U3VyZmFj
ZShvcHRpb25zKTsKKyAgICBpZiAocGFpbnRSZWZsZWN0aW9uKG9wdGlvbnMsIHN1cmZhY2UuZ2V0
KCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRT
dXJmYWNlKG9wdGlvbnMuc3VyZmFjZSk7CisgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3
VGV4dHVyZSgqc3VyZmFjZS5nZXQoKSwgdmlld3BvcnRSZWN0LCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCgpLCBvcHRpb25zLm9wYWNpdHksIDApOworICAgIG9wdGlvbnMuc3VyZmFjZU1hbmFnZXItPmZy
ZWVJbnRlcm1lZGlhdGVTdXJmYWNlKHN1cmZhY2UuZ2V0KCkpOworICAgIG9wdGlvbnMuc3VyZmFj
ZU1hbmFnZXItPmZyZWVJbnRlcm1lZGlhdGVTdXJmYWNlKG1hc2tTdXJmYWNlLmdldCgpKTsKIH0K
IAogVGV4dHVyZU1hcHBlck5vZGU6On5UZXh0dXJlTWFwcGVyTm9kZSgpCiB7Ci0gICAgc2V0TmVl
ZHNEaXNwbGF5KCk7Ci0gICAgewotICAgICAgICBjb25zdCBpbnQgY2hpbGRyZW5TaXplID0gbV9j
aGlsZHJlbi5zaXplKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSBjaGlsZHJlblNpemUtMTsgaSA+
PSAwOyAtLWkpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2NoaWxkcmVuW2ldLT5tX3BhcmVudCA9
PSB0aGlzKTsKLSAgICAgICAgICAgIG1fY2hpbGRyZW5baV0tPm1fcGFyZW50ID0gMDsKLSAgICAg
ICAgfQorICAgIGZvciAoaW50IGkgPSBtX2NoaWxkcmVuLnNpemUoKS0xOyBpID49IDA7IC0taSkK
KyAgICAgICAgbV9jaGlsZHJlbltpXS0+bV9wYXJlbnQgPSAwOworCisgICAgaWYgKG1fcGFyZW50
KSB7CisgICAgICAgIGludCBpID0gbV9wYXJlbnQtPm1fY2hpbGRyZW4uZmluZCh0aGlzKTsKKy8v
ICAgICAgICBpZihpID49IDApCisgICAgICAgICAgICBtX3BhcmVudC0+bV9jaGlsZHJlbi5yZW1v
dmUoaSk7CiAgICAgfQotICAgIGlmIChtX3BhcmVudCkKLSAgICAgICAgbV9wYXJlbnQtPm1fY2hp
bGRyZW4ucmVtb3ZlKG1fcGFyZW50LT5tX2NoaWxkcmVuLmZpbmQodGhpcykpOwotICAgIGlmICht
X2NhY2hlKQotICAgICAgICBkZWxldGUgbV9jYWNoZTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVy
Tm9kZTo6cGVyZm9ybVBvc3RTeW5jT3BlcmF0aW9ucygpCit2b2lkIFRleHR1cmVNYXBwZXJOb2Rl
OjpyZXNldERlc2NlbmRhbnRzKCkKIHsKLSAgICBjb25zdCBMYXllclR5cGUgcHJldkxheWVyVHlw
ZSA9IG1fbGF5ZXJUeXBlOwotICAgIGNvbXB1dGVMYXllclR5cGUoKTsKLSAgICBpZiAocHJldkxh
eWVyVHlwZSAhPSBtX2xheWVyVHlwZSkKLSAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IHRydWU7Ci0g
ICAgaWYgKG1fdHJhbnNmb3Jtcy5kaXJ0eSkKLSAgICAgICAgc2V0TmVlZHNEaXNwbGF5KCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RpbGVzLnNpemUoKTsgKytpKQorICAgICAgICBt
X3RpbGVzW2ldLm5lZWRzUmVzZXQgPSB0cnVlOwogCi0gICAgY29tcHV0ZVRyYW5zZm9ybWF0aW9u
cygpOwotICAgIGlmIChtX3N0YXRlLm1hc2tMYXllciAmJiAhbV9zdGF0ZS5kaXJ0eSkKLSAgICAg
ICAgbV9zdGF0ZS5kaXJ0eSA9IG1fc3RhdGUubWFza0xheWVyLT5tX3N0YXRlLmRpcnR5OwotICAg
IGlmIChtX3N0YXRlLnJlcGxpY2FMYXllciAmJiAhbV9zdGF0ZS5kaXJ0eSkKLSAgICAgICAgbV9z
dGF0ZS5kaXJ0eSA9IG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRlLmRpcnR5OworICAgIGlm
IChtX3BhcmVudCkKKyAgICAgICAgbV9zdGF0ZS5jb250ZW50U2NhbGUgPSBtX3BhcmVudC0+bV9z
dGF0ZS5jb250ZW50U2NhbGU7CiAKLSAgICBjb25zdCBpbnQgc2l6ZSA9IG1fY2hpbGRyZW4uc2l6
ZSgpOworICAgIGlmIChtX3N0YXRlLm1hc2tMYXllcikKKyAgICAgICAgbV9zdGF0ZS5tYXNrTGF5
ZXItPnJlc2V0RGVzY2VuZGFudHMoKTsKIAotICAgIGZvciAoaW50IGkgPSBzaXplIC0gMTsgaSA+
PSAwOyAtLWkpIHsKLSAgICAgICAgVGV4dHVyZU1hcHBlck5vZGUqIGxheWVyID0gbV9jaGlsZHJl
bltpXTsKKyAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIG1fc3RhdGUucmVw
bGljYUxheWVyLT5yZXNldERlc2NlbmRhbnRzKCk7CiAKLSAgICAgICAgbGF5ZXItPnBlcmZvcm1Q
b3N0U3luY09wZXJhdGlvbnMoKTsKLSAgICAgICAgaWYgKCFtX3N0YXRlLmRpcnR5KQotICAgICAg
ICAgICAgbV9zdGF0ZS5kaXJ0eSA9IGxheWVyLT5tX3N0YXRlLmRpcnR5OworICAgIGZvciAoaW50
IGkgPSBtX2NoaWxkcmVuLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIFRleHR1
cmVNYXBwZXJOb2RlKiBub2RlID0gbV9jaGlsZHJlbltpXTsKKyAgICAgICAgaWYgKCFub2RlKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG5vZGUtPnJlc2V0RGVzY2VuZGFudHMoKTsK
ICAgICB9Ci0gICAgbV9zdGF0ZS5oYXNTdXJmYWNlRGVzY2VuZGFudHMgPSBoYXNTdXJmYWNlRGVz
Y2VuZGFudHMoKTsKLSAgICBpZiAobV9zdGF0ZS5kaXJ0eSkKLSAgICAgICAgbV9zdGF0ZS5kZXNj
ZW5kYW50c1dpdGhDb250ZW50ID0gY291bnREZXNjZW5kYW50c1dpdGhDb250ZW50KCk7Cit9CiAK
LSAgICBpZiAobV9zdGF0ZS5wcmVzZXJ2ZXMzRCkKLSAgICAgICAgc29ydEJ5Wk9yZGVyKG1fY2hp
bGRyZW4sIDAsIHNpemUpOwotICAgIGlmIChtX3N0YXRlLmRpcnR5KQotICAgICAgICBzZXROZWVk
c0Rpc3BsYXkoKTsKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldENvbnRlbnRTY2FsZShmbG9h
dCBzY2FsZSkKK3sKKyAgICBpZiAobV9zdGF0ZS5jb250ZW50U2NhbGUgPT0gc2NhbGUpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX3N0YXRlLmNvbnRlbnRTY2FsZSA9IHNjYWxlOworICAgIHJlc2V0
RGVzY2VuZGFudHMoKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0
aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5ZXIsIGJvb2wg
cmVjdXJzZSkKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnNldFZpc2libGVSZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgbV9zdGF0ZS5yb290VmlzaWJsZVJlY3QgPSBtX3N0YXRlLnZp
c2libGVSZWN0ID0gcmVjdDsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBv
c2l0aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5ZXIsIFRl
eHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGJvb2wgcmVjdXJzZSkKIHsKLSAgICBUZXh0dXJl
TWFwcGVyKiB0ZXh0dXJlTWFwcGVyID0gcm9vdExheWVyKCktPm1fcGxhdGZvcm1DbGllbnQtPnRl
eHR1cmVNYXBwZXIoKTsKICAgICBzeW5jQ29tcG9zaXRpbmdTdGF0ZUludGVybmFsKGdyYXBoaWNz
TGF5ZXIsIHJlY3Vyc2UsIHRleHR1cmVNYXBwZXIpOwotICAgIHBlcmZvcm1Qb3N0U3luY09wZXJh
dGlvbnMoKTsKIH0KIAordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3Rh
dGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5ZXIsIGJvb2wgcmVjdXJz
ZSkKK3sKKyAgICBzeW5jQ29tcG9zaXRpbmdTdGF0ZShncmFwaGljc0xheWVyLCByb290TGF5ZXIo
KS0+bV90ZXh0dXJlTWFwcGVyLCByZWN1cnNlKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9k
ZTo6aW52YWxpZGF0ZU92ZXJsYXBzKCkKK3sKKyAgICBtX2RpcnR5RmxhZ3Mub3ZlcmxhcHMgPSB0
cnVlOworICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgbV9wYXJlbnQtPmludmFsaWRhdGVPdmVy
bGFwcygpOworfQorCisKIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0
YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpY3NMYXllciwgVGV4dHVy
ZU1hcHBlciogdGV4dHVyZU1hcHBlcikKIHsKLSAgICBjb25zdCBpbnQgY2hhbmdlTWFzayA9IGdy
YXBoaWNzTGF5ZXItPmNoYW5nZU1hc2soKTsKLSAgICBpbml0aWFsaXplVGV4dHVyZU1hcHBlcih0
ZXh0dXJlTWFwcGVyKTsKKyAgICBpbnQgY2hhbmdlTWFzayA9IGdyYXBoaWNzTGF5ZXItPmNoYW5n
ZU1hc2soKTsKICAgICBjb25zdCBUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudERhdGEmIHBlbmRp
bmdDb250ZW50ID0gZ3JhcGhpY3NMYXllci0+cGVuZGluZ0NvbnRlbnQoKTsKLSAgICBpZiAoY2hh
bmdlTWFzayA9PSBOb0NoYW5nZXMgJiYgcGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5UmVjdC5p
c0VtcHR5KCkgJiYgIXBlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheSkKKyAgICBpZiAoY2hhbmdl
TWFzayA9PSBOb0NoYW5nZXMgJiYgZ3JhcGhpY3NMYXllci0+bV9hbmltYXRpb25zLmlzRW1wdHko
KSAmJiBwZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXlSZWN0LmlzRW1wdHkoKSAmJiAhcGVuZGlu
Z0NvbnRlbnQubmVlZHNEaXNwbGF5KQogICAgICAgICByZXR1cm47CiAKLSAgICBzZXROZWVkc0Rp
c3BsYXkoKTsKLSAgICBpZiAobV9wYXJlbnQpCi0gICAgICAgIG1fcGFyZW50LT5tX3N0YXRlLmRp
cnR5ID0gdHJ1ZTsKLQogICAgIGlmIChtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IEhU
TUxDb250ZW50VHlwZSAmJiAoY2hhbmdlTWFzayAmIFBhcmVudENoYW5nZSkpIHsKLSAgICAgICAg
Ly8gVGhlIFdlYkNvcmUgY29tcG9zaXRvciBtYW5hZ2VzIGl0ZW0gb3duZXJzaGlwLiBXZSBoYXZl
IHRvIG1ha2Ugc3VyZSBncmFwaGljc3ZpZXcgZG9lc24ndAotICAgICAgICAvLyB0cnkgdG8gc25h
dGNoIHRoYXQgb3duZXJzaGlwLgotCi0gICAgICAgIGlmICghZ3JhcGhpY3NMYXllci0+cGFyZW50
KCkpCi0gICAgICAgICAgICBtX3BhcmVudCA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1fcGFyZW50ID0gdG9UZXh0dXJlTWFwcGVyTm9kZShncmFwaGljc0xheWVyLT5wYXJlbnQoKSk7
CisgICAgICAgIG1fcGFyZW50ID0gdG9UZXh0dXJlTWFwcGVyTm9kZShncmFwaGljc0xheWVyLT5w
YXJlbnQoKSk7CiAKICAgICAgICAgaWYgKCFncmFwaGljc0xheWVyLT5wYXJlbnQoKSAmJiBtX3Bh
cmVudCkgewogICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gbV9wYXJlbnQtPm1fY2hpbGRyZW4u
ZmluZCh0aGlzKTsKQEAgLTc2NCwzNCArNzk4LDM5IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6
OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3Jh
CiAgICAgfQogCiAgICAgaWYgKGNoYW5nZU1hc2sgJiBDaGlsZHJlbkNoYW5nZSkgeworICAgICAg
ICBpZiAodGV4dHVyZU1hcHBlciAmJiB0ZXh0dXJlTWFwcGVyLT5hbGxvd1BhcnRpYWxVcGRhdGVz
KCkpIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnJlcGFpbnRSZWN0LnVuaXRlKG1fY2hp
bGRyZW5baV0tPm1fdHJhbnNmb3Jtcy5ib3VuZGluZ1JlY3RGcm9tUm9vdCk7CisgICAgICAgIH0K
KwogICAgICAgICBtX2NoaWxkcmVuLmNsZWFyKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiBjaGlsZCA9IHRvVGV4dHVyZU1hcHBlck5vZGUoZ3Jh
cGhpY3NMYXllci0+Y2hpbGRyZW4oKVtpXSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNoaWxk
KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBtX2NoaWxk
cmVuLmFwcGVuZChjaGlsZCk7Ci0gICAgICAgICAgICAgICAgY2hpbGQtPm1fcGFyZW50ID0gdGhp
czsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBjaGlsZCA9
IHRvVGV4dHVyZU1hcHBlck5vZGUoZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW4oKVtpXSk7CisgICAg
ICAgICAgICBpZiAoIWNoaWxkKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgbV9jaGlsZHJlbi5hcHBlbmQoY2hpbGQpOworICAgICAgICAgICAgY2hpbGQtPm1fcGFyZW50
ID0gdGhpczsKICAgICAgICAgfQotICAgICAgICBtX3N0YXRlLmRpcnR5ID0gdHJ1ZTsKICAgICB9
CiAKKyAgICBpZiAoY2hhbmdlTWFzayAmIChEcmF3c0NvbnRlbnRDaGFuZ2UgfCBQYXJlbnRDaGFu
Z2UgfCBDaGlsZHJlbkNoYW5nZSB8IFNpemVDaGFuZ2UpKQorICAgICAgICBpbnZhbGlkYXRlT3Zl
cmxhcHMoKTsKKwogICAgIGlmIChjaGFuZ2VNYXNrICYgKFNpemVDaGFuZ2UgfCBDb250ZW50c1Jl
Y3RDaGFuZ2UpKSB7Ci0gICAgICAgIEludFNpemUgd2FudGVkU2l6ZSA9IEludFNpemUoZ3JhcGhp
Y3NMYXllci0+c2l6ZSgpLndpZHRoKCksIGdyYXBoaWNzTGF5ZXItPnNpemUoKS5oZWlnaHQoKSk7
CisgICAgICAgIGRpZENoYW5nZVNpemUoKTsKKyAgICAgICAgRmxvYXRTaXplIHdhbnRlZFNpemUo
Z3JhcGhpY3NMYXllci0+c2l6ZSgpLndpZHRoKCksIGdyYXBoaWNzTGF5ZXItPnNpemUoKS5oZWln
aHQoKSk7CiAgICAgICAgIGlmICh3YW50ZWRTaXplLmlzRW1wdHkoKSAmJiBwZW5kaW5nQ29udGVu
dC5jb250ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUpCi0gICAgICAgICAgICB3YW50ZWRTaXpl
ID0gSW50U2l6ZShncmFwaGljc0xheWVyLT5jb250ZW50c1JlY3QoKS53aWR0aCgpLCBncmFwaGlj
c0xheWVyLT5jb250ZW50c1JlY3QoKS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgaWYgKHdhbnRlZFNp
emUgIT0gbV9zaXplKSB7Ci0gICAgICAgICAgICBtX3NpemUgPSBJbnRTaXplKHdhbnRlZFNpemUu
d2lkdGgoKSwgd2FudGVkU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBpZiAobV9wbGF0Zm9y
bUNsaWVudCkKLSAgICAgICAgICAgICAgICBtX3BsYXRmb3JtQ2xpZW50LT5zZXRTaXplQ2hhbmdl
ZChtX3NpemUpOwotICAgICAgICAgICAgY29uc3QgYm9vbCBuZWVkc1RpbGluZyA9IG1fc2l6ZS53
aWR0aCgpID4gMjAwMCB8fCBtX3NpemUuaGVpZ2h0KCkgPiAyMDAwOwotICAgICAgICAgICAgaWYg
KG1fc3RhdGUudGlsZWQgIT0gbmVlZHNUaWxpbmcpCi0gICAgICAgICAgICAgICAgbV9zdGF0ZS50
aWxlZCA9IG5lZWRzVGlsaW5nOwotICAgICAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IHRydWU7Ci0g
ICAgICAgIH0KKyAgICAgICAgICAgIHdhbnRlZFNpemUgPSBGbG9hdFNpemUoZ3JhcGhpY3NMYXll
ci0+Y29udGVudHNSZWN0KCkud2lkdGgoKSwgZ3JhcGhpY3NMYXllci0+Y29udGVudHNSZWN0KCku
aGVpZ2h0KCkpOworCisgICAgICAgIGlmICh3YW50ZWRTaXplICE9IG1fc2l6ZSkKKyAgICAgICAg
ICAgIG1fdGlsZXMuY2xlYXIoKTsKKworICAgICAgICBtX3NpemUgPSB3YW50ZWRTaXplOwogICAg
IH0KIAorICAgIGlmIChjaGFuZ2VNYXNrICYgKFRyYW5zZm9ybUNoYW5nZSB8IEFuY2hvclBvaW50
Q2hhbmdlIHwgUG9zaXRpb25DaGFuZ2UpKQorICAgICAgICBpbnZhbGlkYXRlTG9jYWxUcmFuc2Zv
cm0oKTsKKwogICAgIGlmIChjaGFuZ2VNYXNrICYgTWFza0xheWVyQ2hhbmdlKSB7CiAgICAgICAg
aWYgKFRleHR1cmVNYXBwZXJOb2RlKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlck5vZGUoZ3JhcGhp
Y3NMYXllci0+bWFza0xheWVyKCkpKQogICAgICAgICAgICBsYXllci0+bV9lZmZlY3RUYXJnZXQg
PSB0aGlzOwpAQCAtODAwLDMxICs4MzksMzEgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3lu
Y0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmEKICAg
ICBpZiAoY2hhbmdlTWFzayAmIFJlcGxpY2FMYXllckNoYW5nZSkgewogICAgICAgIGlmIChUZXh0
dXJlTWFwcGVyTm9kZSogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGdyYXBoaWNzTGF5ZXIt
PnJlcGxpY2FMYXllcigpKSkKICAgICAgICAgICAgbGF5ZXItPm1fZWZmZWN0VGFyZ2V0ID0gdGhp
czsKKyAgICAgICBtX2RpcnR5RmxhZ3MucmVwbGljYVRyYW5zZm9ybSA9IHRydWU7CisgICAgICAg
bV9kaXJ0eUZsYWdzLnZpc2libGVSZWN0ID0gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoY2hhbmdl
TWFzayAmIChUcmFuc2Zvcm1DaGFuZ2UgfCBTaXplQ2hhbmdlIHwgQW5jaG9yUG9pbnRDaGFuZ2Ug
fCBQb3NpdGlvbkNoYW5nZSkpCi0gICAgICAgIG1fdHJhbnNmb3Jtcy5sb2NhbERpcnR5ID0gdHJ1
ZTsKLQotICAgIGlmIChjaGFuZ2VNYXNrICYgKENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlIHwgU2l6
ZUNoYW5nZSkpCi0gICAgICAgIG1fdHJhbnNmb3Jtcy5wZXJzcGVjdGl2ZURpcnR5ID0gdHJ1ZTsK
KyAgICBpZiAoY2hhbmdlTWFzayAmIENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlKQorICAgICAgICBp
bnZhbGlkYXRlUGVyc3BlY3RpdmVUcmFuc2Zvcm0oKTsKIAotICAgIGlmIChjaGFuZ2VNYXNrICYg
KENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlIHwgUHJlc2VydmVzM0RDaGFuZ2UgfCBUcmFuc2Zvcm1D
aGFuZ2UgfCBBbmNob3JQb2ludENoYW5nZSB8IFNpemVDaGFuZ2UgfCBDb250ZW50c1JlY3RDaGFu
Z2UgfCBCYWNrZmFjZVZpc2liaWxpdHlDaGFuZ2UgfCBQb3NpdGlvbkNoYW5nZSB8IE1hc2tMYXll
ckNoYW5nZSB8IERyYXdzQ29udGVudENoYW5nZSB8IENvbnRlbnRDaGFuZ2UgfCBSZXBsaWNhTGF5
ZXJDaGFuZ2UpKSAgICB7Ci0gICAgICAgIC8vIER1ZSB0byB0aGUgZGlmZmVyZW5jZXMgYmV0d2Vl
biB0aGUgd2F5IFdlYkNvcmUgaGFuZGxlcyB0cmFuc2Zvcm1zIGFuZCB0aGUgd2F5IFF0IGhhbmRs
ZXMgdHJhbnNmb3JtcywKLSAgICAgICAgLy8gYWxsIHRoZXNlIGVsZW1lbnRzIGFmZmVjdCB0aGUg
dHJhbnNmb3JtcyBvZiBhbGwgdGhlIGRlc2NlbmRhbnRzLgorICAgIGlmIChjaGFuZ2VNYXNrICYg
KFByZXNlcnZlczNEQ2hhbmdlIHwgQmFja2ZhY2VWaXNpYmlsaXR5Q2hhbmdlKSkKICAgICAgICAg
aW52YWxpZGF0ZVRyYW5zZm9ybSgpOwotICAgIH0KIAotICAgIGlmIChjaGFuZ2VNYXNrICYgRGlz
cGxheUNoYW5nZSkKLSAgICAgICAgbV9zdGF0ZS5kaXJ0eSA9IHRydWU7CisgICAgaWYgKGNoYW5n
ZU1hc2sgJiBBbmltYXRpb25DaGFuZ2UpIHsKKyAgICAgICAgbV9hbmltYXRpb25zLmNsZWFyKCk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ3JhcGhpY3NMYXllci0+bV9hbmltYXRp
b25zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9hbmltYXRpb25zLmFwcGVuZChncmFwaGlj
c0xheWVyLT5tX2FuaW1hdGlvbnNbaV0pOworICAgIH0KIAorICAgIGlmICh0ZXh0dXJlTWFwcGVy
ICYmIHRleHR1cmVNYXBwZXItPmFsbG93UGFydGlhbFVwZGF0ZXMoKSkKKyAgICAgICAgbV9zdGF0
ZS5yZXBhaW50UmVjdC51bml0ZShtX3N0YXRlLnJvb3RWaXNpYmxlUmVjdCk7CiAgICAgbV9zdGF0
ZS5tYXNrTGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGdyYXBoaWNzTGF5ZXItPm1hc2tMYXll
cigpKTsKICAgICBtX3N0YXRlLnJlcGxpY2FMYXllciA9IHRvVGV4dHVyZU1hcHBlck5vZGUoZ3Jh
cGhpY3NMYXllci0+cmVwbGljYUxheWVyKCkpOwogICAgIG1fc3RhdGUucG9zID0gZ3JhcGhpY3NM
YXllci0+cG9zaXRpb24oKTsKICAgICBtX3N0YXRlLmFuY2hvclBvaW50ID0gZ3JhcGhpY3NMYXll
ci0+YW5jaG9yUG9pbnQoKTsKICAgICBtX3N0YXRlLnNpemUgPSBncmFwaGljc0xheWVyLT5zaXpl
KCk7Ci0gICAgbV9zdGF0ZS50cmFuc2Zvcm0gPSBncmFwaGljc0xheWVyLT50cmFuc2Zvcm0oKTsK
ICAgICBtX3N0YXRlLmNvbnRlbnRzUmVjdCA9IGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRzUmVjdCgp
OwotICAgIG1fc3RhdGUub3BhY2l0eSA9IGdyYXBoaWNzTGF5ZXItPm9wYWNpdHkoKTsKKyAgICBt
X3N0YXRlLnRyYW5zZm9ybSA9IGdyYXBoaWNzTGF5ZXItPnRyYW5zZm9ybSgpOwogICAgIG1fc3Rh
dGUuY29udGVudHNSZWN0ID0gZ3JhcGhpY3NMYXllci0+Y29udGVudHNSZWN0KCk7CiAgICAgbV9z
dGF0ZS5wcmVzZXJ2ZXMzRCA9IGdyYXBoaWNzTGF5ZXItPnByZXNlcnZlczNEKCk7CiAgICAgbV9z
dGF0ZS5tYXNrc1RvQm91bmRzID0gZ3JhcGhpY3NMYXllci0+bWFza3NUb0JvdW5kcygpOwpAQCAt
ODMyLDIyICs4NzEsMjM5IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGlu
Z1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhCiAgICAgbV9zdGF0ZS5j
b250ZW50c09wYXF1ZSA9IGdyYXBoaWNzTGF5ZXItPmNvbnRlbnRzT3BhcXVlKCk7CiAgICAgbV9z
dGF0ZS5iYWNrZmFjZVZpc2liaWxpdHkgPSBncmFwaGljc0xheWVyLT5iYWNrZmFjZVZpc2liaWxp
dHkoKTsKICAgICBtX3N0YXRlLmNoaWxkcmVuVHJhbnNmb3JtID0gZ3JhcGhpY3NMYXllci0+Y2hp
bGRyZW5UcmFuc2Zvcm0oKTsKKyAgICBtX3N0YXRlLm9wYWNpdHkgPSBncmFwaGljc0xheWVyLT5v
cGFjaXR5KCk7CiAgICAgbV9jdXJyZW50Q29udGVudC5jb250ZW50VHlwZSA9IHBlbmRpbmdDb250
ZW50LmNvbnRlbnRUeXBlOwogICAgIG1fY3VycmVudENvbnRlbnQuaW1hZ2UgPSBwZW5kaW5nQ29u
dGVudC5pbWFnZTsKICAgICBtX2N1cnJlbnRDb250ZW50Lm1lZGlhID0gcGVuZGluZ0NvbnRlbnQu
bWVkaWE7Ci0gICAgbV9jdXJyZW50Q29udGVudC5iYWNrZ3JvdW5kQ29sb3IgPSBwZW5kaW5nQ29u
dGVudC5iYWNrZ3JvdW5kQ29sb3I7CiAgICAgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkg
PSBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheSB8fCBwZW5kaW5nQ29udGVudC5uZWVkc0Rp
c3BsYXk7Ci0gICAgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0LnVuaXRlKHBlbmRp
bmdDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QpOworICAgIGlmIChtX2N1cnJlbnRDb250ZW50Lm5l
ZWRzRGlzcGxheSkKKyAgICAgICAgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0ID0g
SW50UmVjdCgpOworICAgIGVsc2UKKyAgICAgICAgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3Bs
YXlSZWN0LnVuaXRlKHBlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QpOworCisgICAgYm9v
bCBoYXNUcmFuc2Zvcm0gPSBoYXNSdW5uaW5nVHJhbnNmb3JtQW5pbWF0aW9uKCk7CisgICAgYm9v
bCBoYXNPcGFjaXR5ID0gaGFzUnVubmluZ09wYWNpdHlBbmltYXRpb24oKTsKIAorICAgIGlmICgh
aGFzVHJhbnNmb3JtKQorICAgICAgICBzZXRUcmFuc2Zvcm0obV9zdGF0ZS50cmFuc2Zvcm0pOwor
CisgICAgaWYgKCFoYXNPcGFjaXR5KQorICAgICAgICBzZXRPcGFjaXR5KG1fc3RhdGUub3BhY2l0
eSk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlSW50
ZXJuYWwoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5ZXIsIGJvb2wgcmVj
dXJzZSwgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKK2Jvb2wgVGV4dHVyZU1hcHBlck5v
ZGU6OmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkgY29uc3QKIHsKLSAg
ICBzeW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYoZ3JhcGhpY3NMYXllciwgdGV4dHVyZU1hcHBlcik7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKCFtX2FuaW1hdGlvbnNbaV0tPnBhdXNlZCkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KIAotICAgIGdyYXBoaWNzTGF5ZXItPmRpZFN5bmNocm9uaXplKCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGlmIChtX2NoaWxkcmVuW2ldLT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0
aW9ucygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCi0gICAgaWYgKG1fc3Rh
dGUubWFza0xheWVyKSB7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgZG91YmxlIG5v
cm1hbGl6ZWRBbmltYXRpb25WYWx1ZShkb3VibGUgcnVubmluZ1RpbWUsIGRvdWJsZSBkdXJhdGlv
biwgYm9vbCBhbHRlcm5hdGUpCit7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgY29uc3QgaW50IGxvb3BDb3VudCA9IHJ1bm5pbmdUaW1lIC8gZHVyYXRpb247Cisg
ICAgY29uc3QgZG91YmxlIGxhc3RGdWxsTG9vcCA9IGR1cmF0aW9uICogZG91YmxlKGxvb3BDb3Vu
dCk7CisgICAgY29uc3QgZG91YmxlIHJlbWFpbmRlciA9IHJ1bm5pbmdUaW1lIC0gbGFzdEZ1bGxM
b29wOworICAgIGNvbnN0IGRvdWJsZSBub3JtYWxpemVkID0gcmVtYWluZGVyIC8gZHVyYXRpb247
CisgICAgcmV0dXJuIChsb29wQ291bnQgJSAyICYmIGFsdGVybmF0ZSkgPyAoMSAtIG5vcm1hbGl6
ZWQpIDogbm9ybWFsaXplZDsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6YXBwbHlPcGFj
aXR5QW5pbWF0aW9uKGZsb2F0IGZyb21PcGFjaXR5LCBmbG9hdCB0b09wYWNpdHksIGRvdWJsZSBw
cm9ncmVzcykKK3sKKyAgICAvLyBPcHRpbWl6YXRpb246IHNwZWNpYWwgY2FzZSB0aGUgZWRnZSB2
YWx1ZXMgKDAgYW5kIDEpLgorICAgIGlmIChwcm9ncmVzcyA9PSAxLjApCisgICAgICAgIHNldE9w
YWNpdHkodG9PcGFjaXR5KTsKKyAgICBlbHNlIGlmIChwcm9ncmVzcyA9PSAwLjApCisgICAgICAg
IHNldE9wYWNpdHkoZnJvbU9wYWNpdHkpOworICAgIGVsc2UKKyAgICAgICAgc2V0T3BhY2l0eShm
cm9tT3BhY2l0eSArIHByb2dyZXNzICogKHRvT3BhY2l0eSAtIGZyb21PcGFjaXR5KSk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgZG91YmxlIHNvbHZlRXBzaWxvbihkb3VibGUgZHVyYXRpb24pCit7Cisg
ICAgcmV0dXJuIDEuMCAvICgyMDAuMCAqIGR1cmF0aW9uKTsKK30KKworc3RhdGljIGlubGluZSBk
b3VibGUgc29sdmVDdWJpY0JlemllckZ1bmN0aW9uKHFyZWFsIHAxeCwgcXJlYWwgcDF5LCBxcmVh
bCBwMngsIHFyZWFsIHAyeSwgZG91YmxlIHQsIGRvdWJsZSBkdXJhdGlvbikKK3sKKyAgICBVbml0
QmV6aWVyIGJlemllcihwMXgsIHAxeSwgcDJ4LCBwMnkpOworICAgIHJldHVybiBiZXppZXIuc29s
dmUodCwgc29sdmVFcHNpbG9uKGR1cmF0aW9uKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG91Ymxl
IHNvbHZlU3RlcHNGdW5jdGlvbihpbnQgbnVtU3RlcHMsIGJvb2wgc3RlcEF0U3RhcnQsIGRvdWJs
ZSB0KQoreworICAgIGlmIChzdGVwQXRTdGFydCkKKyAgICAgICAgcmV0dXJuIHFNaW4oMS4wLCAo
Zmxvb3IobnVtU3RlcHMgKiB0KSArIDEpIC8gbnVtU3RlcHMpOworICAgIHJldHVybiBmbG9vcihu
dW1TdGVwcyAqIHQpIC8gbnVtU3RlcHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgYXBwbHlU
aW1pbmdGdW5jdGlvbihjb25zdCBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb24sIGZsb2F0
IHByb2dyZXNzLCBkb3VibGUgZHVyYXRpb24pCit7CisgICAgaWYgKCF0aW1pbmdGdW5jdGlvbikK
KyAgICAgICAgcmV0dXJuIHByb2dyZXNzOworCisgICAgaWYgKHRpbWluZ0Z1bmN0aW9uLT5pc0N1
YmljQmV6aWVyVGltaW5nRnVuY3Rpb24oKSkgeworICAgICAgICBjb25zdCBDdWJpY0JlemllclRp
bWluZ0Z1bmN0aW9uKiBjdGYgPSBzdGF0aWNfY2FzdDxjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1
bmN0aW9uKj4odGltaW5nRnVuY3Rpb24pOworICAgICAgICByZXR1cm4gc29sdmVDdWJpY0Jlemll
ckZ1bmN0aW9uKGN0Zi0+eDEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjdGYtPnkxKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3RmLT54MigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0Zi0+
eTIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcywg
ZHVyYXRpb24pOworICAgIH0KKworICAgIGlmICh0aW1pbmdGdW5jdGlvbi0+aXNTdGVwc1RpbWlu
Z0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgY29uc3QgU3RlcHNUaW1pbmdGdW5jdGlvbiogc3RmID0g
c3RhdGljX2Nhc3Q8Y29uc3QgU3RlcHNUaW1pbmdGdW5jdGlvbio+KHRpbWluZ0Z1bmN0aW9uKTsK
KyAgICAgICAgcmV0dXJuIHNvbHZlU3RlcHNGdW5jdGlvbihzdGYtPm51bWJlck9mU3RlcHMoKSwg
c3RmLT5zdGVwQXRTdGFydCgpLCBkb3VibGUocHJvZ3Jlc3MpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gcHJvZ3Jlc3M7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmFwcGx5VHJhbnNmb3Jt
QW5pbWF0aW9uKGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbiwgY29uc3Qg
VHJhbnNmb3JtT3BlcmF0aW9ucyogZnJvbSwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogdG8s
IGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICAvLyBPcHRpbWl6YXRpb246IHNwZWNpYWwgY2FzZSB0
aGUgZWRnZSB2YWx1ZXMgKDAgYW5kIDEpLgorICAgIGlmIChwcm9ncmVzcyA9PSAxLjAgfHwgcHJv
Z3Jlc3MgPT0gMC4wKSB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKKyAg
ICAgICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogb3BzID0gcHJvZ3Jlc3MgPyB0byA6IGZy
b207CisgICAgICAgIG9wcy0+YXBwbHkoYW5pbWF0aW9uLmJveFNpemUsIG1hdHJpeCk7CisgICAg
ICAgIHNldFRyYW5zZm9ybShtYXRyaXgpOworICAgIH0KKworICAgIGlmICghYW5pbWF0aW9uLmxp
c3RzTWF0Y2gpIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdG9NYXRyaXgsIGZyb21N
YXRyaXg7CisgICAgICAgIHRvLT5hcHBseShhbmltYXRpb24uYm94U2l6ZSwgdG9NYXRyaXgpOwor
ICAgICAgICBmcm9tLT5hcHBseShhbmltYXRpb24uYm94U2l6ZSwgZnJvbU1hdHJpeCk7CisgICAg
ICAgIHRvTWF0cml4LmJsZW5kKGZyb21NYXRyaXgsIHByb2dyZXNzKTsKKyAgICAgICAgc2V0VHJh
bnNmb3JtKHRvTWF0cml4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IG1hdHJpeDsKKworICAgIGlmICghdG8tPnNpemUoKSkgeworICAgICAgICBj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBzd2FwID0gdG87CisgICAgICAgIHRvID0gZnJvbTsK
KyAgICAgICAgZnJvbSA9IHN3YXA7CisgICAgfQorCisgICAgaWYgKCFmcm9tLT5zaXplKCkpCisg
ICAgICAgIHByb2dyZXNzID0gMS4wIC0gcHJvZ3Jlc3M7CisKKyAgICBUcmFuc2Zvcm1PcGVyYXRp
b25zIGJsZW5kZWQoKnRvKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFuaW1hdGlvbi5m
dW5jdGlvbkxpc3Quc2l6ZSgpOyArK2kpCisgICAgICAgIGJsZW5kZWQub3BlcmF0aW9ucygpW2ld
LT5ibGVuZChmcm9tLT5hdChpKSwgcHJvZ3Jlc3MsICFmcm9tLT5hdChpKSktPmFwcGx5KG1hdHJp
eCwgYW5pbWF0aW9uLmJveFNpemUpOworCisgICAgc2V0VHJhbnNmb3JtKG1hdHJpeCk7Cit9CisK
K3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmFwcGx5QW5pbWF0aW9uRnJhbWUoY29uc3QgVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uLCBjb25zdCBBbmltYXRpb25WYWx1ZSogZnJvbSwg
Y29uc3QgQW5pbWF0aW9uVmFsdWUqIHRvLCBmbG9hdCBwcm9ncmVzcykKK3sKKyAgICBzd2l0Y2gg
KGFuaW1hdGlvbi5rZXlmcmFtZXMucHJvcGVydHkoKSkgeworICAgIGNhc2UgQW5pbWF0ZWRQcm9w
ZXJ0eU9wYWNpdHk6CisgICAgICAgIGFwcGx5T3BhY2l0eUFuaW1hdGlvbigoc3RhdGljX2Nhc3Q8
Y29uc3QgRmxvYXRBbmltYXRpb25WYWx1ZSo+KGZyb20pLT52YWx1ZSgpKSwgKHN0YXRpY19jYXN0
PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUqPih0byktPnZhbHVlKCkpLCBwcm9ncmVzcyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm06
CisgICAgICAgIGFwcGx5VHJhbnNmb3JtQW5pbWF0aW9uKGFuaW1hdGlvbiwgc3RhdGljX2Nhc3Q8
Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqPihmcm9tKS0+dmFsdWUoKSwgc3RhdGljX2Nh
c3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqPih0byktPnZhbHVlKCksIHByb2dyZXNz
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6YXBwbHlBbmltYXRp
b24oY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uLCBkb3VibGUgbm9ybWFs
aXplZFZhbHVlKQoreworICAgIC8vIE9wdGltaXphdGlvbjogc3BlY2lhbCBjYXNlIHRoZSBlZGdl
IHZhbHVlcyAoMCBhbmQgMSkuCisgICAgaWYgKG5vcm1hbGl6ZWRWYWx1ZSA9PSAwLjApIHsKKyAg
ICAgICAgYXBwbHlBbmltYXRpb25GcmFtZShhbmltYXRpb24sIGFuaW1hdGlvbi5rZXlmcmFtZXMu
YXQoMCksIGFuaW1hdGlvbi5rZXlmcmFtZXMuYXQoMSksIDApOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGlmIChub3JtYWxpemVkVmFsdWUgPT0gMS4wKSB7CisgICAgICAgIGFwcGx5QW5p
bWF0aW9uRnJhbWUoYW5pbWF0aW9uLCBhbmltYXRpb24ua2V5ZnJhbWVzLmF0KGFuaW1hdGlvbi5r
ZXlmcmFtZXMuc2l6ZSgpIC0gMiksIGFuaW1hdGlvbi5rZXlmcmFtZXMuYXQoYW5pbWF0aW9uLmtl
eWZyYW1lcy5zaXplKCkgLSAxKSwgMSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KGFuaW1hdGlvbi5rZXlmcmFtZXMuc2l6ZSgpID09IDIpIHsKKyAgICAgICAgbm9ybWFsaXplZFZh
bHVlID0gYXBwbHlUaW1pbmdGdW5jdGlvbihhbmltYXRpb24uYW5pbWF0aW9uLT50aW1pbmdGdW5j
dGlvbigpLmdldCgpLCBub3JtYWxpemVkVmFsdWUsIGFuaW1hdGlvbi5hbmltYXRpb24tPmR1cmF0
aW9uKCkpOworICAgICAgICBhcHBseUFuaW1hdGlvbkZyYW1lKGFuaW1hdGlvbiwgYW5pbWF0aW9u
LmtleWZyYW1lcy5hdCgwKSwgYW5pbWF0aW9uLmtleWZyYW1lcy5hdCgxKSwgbm9ybWFsaXplZFZh
bHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYW5pbWF0aW9uLmtleWZyYW1lcy5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgY29uc3Qg
QW5pbWF0aW9uVmFsdWUqIGZyb20gPSBhbmltYXRpb24ua2V5ZnJhbWVzLmF0KGkpOworICAgICAg
ICBjb25zdCBBbmltYXRpb25WYWx1ZSogdG8gPSBhbmltYXRpb24ua2V5ZnJhbWVzLmF0KGkgKyAx
KTsKKyAgICAgICAgaWYgKGZyb20tPmtleVRpbWUoKSA+IG5vcm1hbGl6ZWRWYWx1ZSB8fCB0by0+
a2V5VGltZSgpIDwgbm9ybWFsaXplZFZhbHVlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgbm9ybWFsaXplZFZhbHVlID0gKG5vcm1hbGl6ZWRWYWx1ZSAtIGZyb20tPmtleVRpbWUo
KSkgLyAodG8tPmtleVRpbWUoKSAtIGZyb20tPmtleVRpbWUoKSk7CisgICAgICAgIG5vcm1hbGl6
ZWRWYWx1ZSA9IGFwcGx5VGltaW5nRnVuY3Rpb24oZnJvbS0+dGltaW5nRnVuY3Rpb24oKSwgbm9y
bWFsaXplZFZhbHVlLCBhbmltYXRpb24uYW5pbWF0aW9uLT5kdXJhdGlvbigpKTsKKyAgICAgICAg
YXBwbHlBbmltYXRpb25GcmFtZShhbmltYXRpb24sIGZyb20sIHRvLCBub3JtYWxpemVkVmFsdWUp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK2Jvb2wgVGV4dHVyZU1hcHBlck5vZGU6Omhh
c1J1bm5pbmdPcGFjaXR5QW5pbWF0aW9uKCkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBUZXh0dXJl
TWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24gPSAqbV9hbmltYXRpb25zW2ldLmdldCgpOworICAg
ICAgICBpZiAoYW5pbWF0aW9uLmtleWZyYW1lcy5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVy
dHlPcGFjaXR5KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6aGFzUnVubmluZ1RyYW5zZm9ybUFu
aW1hdGlvbigpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FuaW1hdGlv
bnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYg
YW5pbWF0aW9uID0gKm1fYW5pbWF0aW9uc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKGFuaW1hdGlv
bi5rZXlmcmFtZXMucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3Jt
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0FuaW1hdGlvbnMoR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIqIGxheWVyKQoreworICAgIGZvciAoaW50IGkgPSBtX2FuaW1hdGlvbnMuc2l6
ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJBbmlt
YXRpb24+IGFuaW1hdGlvbiA9IG1fYW5pbWF0aW9uc1tpXTsKKworICAgICAgICBkb3VibGUgdG90
YWxSdW5uaW5nVGltZSA9IFdURjo6Y3VycmVudFRpbWUoKSAtIGFuaW1hdGlvbi0+c3RhcnRUaW1l
OworICAgICAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltID0gYW5pbWF0aW9uLT5hbmltYXRpb247
CisgICAgICAgIGRvdWJsZSBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemVkQW5pbWF0aW9uVmFs
dWUodG90YWxSdW5uaW5nVGltZSwgYW5pbS0+ZHVyYXRpb24oKSwgYW5pbS0+ZGlyZWN0aW9uKCkg
PT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGUpOworCisgICAgICAgIGlm
IChhbmltLT5pdGVyYXRpb25Db3VudCgpICE9IEFuaW1hdGlvbjo6SXRlcmF0aW9uQ291bnRJbmZp
bml0ZSAmJiB0b3RhbFJ1bm5pbmdUaW1lID49IGFuaW0tPmR1cmF0aW9uKCkgKiBhbmltLT5pdGVy
YXRpb25Db3VudCgpKSB7CisgICAgICAgICAgICAvLyBXZSBhcHBseSBhbiBhbmltYXRpb24gdGhh
dCB2ZXJ5IGNsb3NlIHRvIHRoZSBlZGdlLCBzbyB0aGF0IHRoZSBmaW5hbCBmcmFtZSBpcyBhcHBs
aWVkLCBvdGVyd2lzZSB3ZSBtaWdodCBnZXQsIGZvciBleGFtcGxlLCBhbiBvcGFjaXR5IG9mIDAu
MDEgd2hpY2ggaXMgc3RpbGwgdmlzaWJsZS4KKyAgICAgICAgICAgIGlmIChhbmltLT5maWxsc0Zv
cndhcmRzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYW5pbWF0aW9uLT5rZXlmcmFtZXMucHJv
cGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKQorICAgICAgICAgICAg
ICAgICAgICBtX3N0YXRlLnRyYW5zZm9ybSA9IG1fdHJhbnNmb3Jtcy5iYXNlOworICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGFuaW1hdGlvbi0+a2V5ZnJhbWVzLnByb3BlcnR5KCkgPT0gQW5pbWF0
ZWRQcm9wZXJ0eU9wYWNpdHkpCisgICAgICAgICAgICAgICAgICAgIG1fb3BhY2l0eSA9IG1fc3Rh
dGUub3BhY2l0eTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fYW5pbWF0aW9ucy5yZW1v
dmUoaSk7CisgICAgICAgICAgICBsYXllci0+bm90aWZ5Q2hhbmdlKEFuaW1hdGlvbkNoYW5nZSk7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghYW5pbWF0
aW9uLT5wYXVzZWQpCisgICAgICAgICAgICBhcHBseUFuaW1hdGlvbigqYW5pbWF0aW9uLmdldCgp
LCBub3JtYWxpemVkVmFsdWUpOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6
c3luY0NvbXBvc2l0aW5nU3RhdGVJbnRlcm5hbChHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciog
Z3JhcGhpY3NMYXllciwgYm9vbCByZWN1cnNlLCBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVy
KQoreworICAgIGlmIChncmFwaGljc0xheWVyKSB7CisgICAgICAgIHN5bmNDb21wb3NpdGluZ1N0
YXRlU2VsZihncmFwaGljc0xheWVyLCB0ZXh0dXJlTWFwcGVyKTsKKyAgICAgICAgZ3JhcGhpY3NM
YXllci0+ZGlkU3luY2hyb25pemUoKTsKKyAgICB9CisKKyAgICBpZiAoZ3JhcGhpY3NMYXllciAm
JiBtX3N0YXRlLm1hc2tMYXllcikgewogICAgICAgICBtX3N0YXRlLm1hc2tMYXllci0+c3luY0Nv
bXBvc2l0aW5nU3RhdGVJbnRlcm5hbCh0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGdyYXBo
aWNzTGF5ZXItPm1hc2tMYXllcigpKSwgZmFsc2UsIHRleHR1cmVNYXBwZXIpOwogICAgICAgICBp
ZiAobV9zdGF0ZS5tYXNrTGF5ZXItPm1fc2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX3N0
YXRlLm1hc2tMYXllci0+bV9zaXplID0gbV9zaXplOwpAQCAtODU2LDIyICsxMTEyLDEwMCBAQCB2
b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUludGVybmFsKEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyKgogICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllcikKICAg
ICAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlSW50ZXJuYWwo
dG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihncmFwaGljc0xheWVyLT5yZXBsaWNhTGF5ZXIo
KSksIGZhbHNlLCB0ZXh0dXJlTWFwcGVyKTsKIAotICAgIGlmIChtX3N0YXRlLmRpcnR5KQotICAg
ICAgICB1cGxvYWRUZXh0dXJlRnJvbUNvbnRlbnQodGV4dHVyZU1hcHBlciwgbV9zdGF0ZS52aXNp
YmxlUmVjdCwgZ3JhcGhpY3NMYXllcik7CisgICAgc3luY0FuaW1hdGlvbnMoZ3JhcGhpY3NMYXll
cik7CiAKLSAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QgPSBJbnRSZWN0KCk7
Ci0gICAgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKKyAgICBjb21wdXRl
VHJhbnNmb3JtYXRpb25zKCk7CisgICAgY29uc3QgYm9vbCB2aXNpYmxlUmVjdERpcnR5ID0gbV9k
aXJ0eUZsYWdzLnZpc2libGVSZWN0OworICAgIGNvbnN0IGJvb2wgYWxsb3dQYXJ0aWFsVXBkYXRl
cyA9IHRleHR1cmVNYXBwZXIgJiYgdGV4dHVyZU1hcHBlci0+YWxsb3dQYXJ0aWFsVXBkYXRlcygp
OworICAgIGlmICh2aXNpYmxlUmVjdERpcnR5ICYmIGFsbG93UGFydGlhbFVwZGF0ZXMpCisgICAg
ICAgIG1fc3RhdGUucmVwYWludFJlY3QudW5pdGUobV90cmFuc2Zvcm1zLmJvdW5kaW5nUmVjdEZy
b21Sb290KTsKKyAgICBjb21wdXRlQm91bmRpbmdSZWN0RnJvbVJvb3QoKTsKKyAgICBjb21wdXRl
VmlzaWJsZVJlY3QoKTsKKyAgICBjb21wdXRlVGlsZXMoKTsKKyAgICBjb21wdXRlT3ZlcmxhcHMo
KTsKKyAgICBpZiAodmlzaWJsZVJlY3REaXJ0eSAmJiBhbGxvd1BhcnRpYWxVcGRhdGVzKQorICAg
ICAgICBtX3N0YXRlLnJlcGFpbnRSZWN0LnVuaXRlKG1fdHJhbnNmb3Jtcy5ib3VuZGluZ1JlY3RG
cm9tUm9vdCk7CisKKyAgICBpZiAoZ3JhcGhpY3NMYXllcikKKyAgICAgICAgcmVuZGVyQ29udGVu
dCh0ZXh0dXJlTWFwcGVyLCBncmFwaGljc0xheWVyKTsKIAogICAgIGlmICghcmVjdXJzZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiBjaGlsZHJlbiA9IGdy
YXBoaWNzTGF5ZXItPmNoaWxkcmVuKCk7Ci0gICAgZm9yIChpbnQgaSA9IGNoaWxkcmVuLnNpemUo
KSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0g
dG9UZXh0dXJlTWFwcGVyTm9kZShjaGlsZHJlbltpXSk7Ci0gICAgICAgIGlmICghbm9kZSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBub2RlLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUlu
dGVybmFsKHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoY2hpbGRyZW5baV0pLCB0cnVlLCB0
ZXh0dXJlTWFwcGVyKTsKKyAgICBpZiAoZ3JhcGhpY3NMYXllcikgeworICAgICAgICBWZWN0b3I8
R3JhcGhpY3NMYXllcio+IGNoaWxkcmVuID0gZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW4oKTsKKyAg
ICAgICAgZm9yIChpbnQgaSA9IGNoaWxkcmVuLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Cisg
ICAgICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUo
Y2hpbGRyZW5baV0pOworICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgbm9kZS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbnRlcm5hbCh0
b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGNoaWxkcmVuW2ldKSwgdHJ1ZSwgdGV4dHVyZU1h
cHBlcik7CisgICAgICAgIH0KKworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IGkgPSBt
X2NoaWxkcmVuLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKQorICAgICAgICAgICAgbV9jaGlsZHJl
bltpXS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbnRlcm5hbCgwLCB0cnVlLCB0ZXh0dXJlTWFwcGVy
KTsKKyAgICB9CisKKyAgICBpZiAobV9zdGF0ZS5wcmVzZXJ2ZXMzRCkKKyAgICAgICAgc29ydEJ5
Wk9yZGVyKG1fY2hpbGRyZW4sIDAsIG1fY2hpbGRyZW4uc2l6ZSgpKTsKKworfQorCitJbnRSZWN0
IFRleHR1cmVNYXBwZXJOb2RlOjpjb21wdXRlTGFzdE1vZGlmaWVkUmVjdCgpCit7CisgICAgRmxv
YXRSZWN0IHJlY3QgPSBtX3N0YXRlLnJlcGFpbnRSZWN0OworICAgIG1fc3RhdGUucmVwYWludFJl
Y3QgPSBGbG9hdFJlY3QoKTsKKyAgICBmb3IgKGludCBpID0gbV9jaGlsZHJlbi5zaXplKCkgLSAx
OyBpID49IDA7IC0taSkKKyAgICAgICAgcmVjdC51bml0ZShtX2NoaWxkcmVuW2ldLT5jb21wdXRl
TGFzdE1vZGlmaWVkUmVjdCgpKTsKKworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHJlY3Qp
OworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxUaW1pbmdGdW5jdGlvbj4gY29weVRpbWluZ0Z1bmN0
aW9uKGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0ZnVuYykKK3sKKyAgICBpZiAoIXRmdW5jKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIGlmICh0ZnVuYy0+aXNMaW5lYXJUaW1pbmdGdW5jdGlvbigp
KQorICAgICAgICByZXR1cm4gTGluZWFyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpOworCisgICAg
aWYgKHRmdW5jLT5pc0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24oKSkgeworICAgICAgICBjb25z
dCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKiBidGZ1bmMgPSBzdGF0aWNfY2FzdDxjb25zdCBD
dWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKj4odGZ1bmMpOworICAgICAgICByZXR1cm4gQ3ViaWNC
ZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKGJ0ZnVuYy0+eDEoKSwgYnRmdW5jLT55MSgpLCBi
dGZ1bmMtPngyKCksIGJ0ZnVuYy0+eTIoKSk7CiAgICAgfQorCisgICAgaWYgKHRmdW5jLT5pc1N0
ZXBzVGltaW5nRnVuY3Rpb24oKSkgeworICAgICAgICBjb25zdCBTdGVwc1RpbWluZ0Z1bmN0aW9u
KiBzdGZ1bmMgPSBzdGF0aWNfY2FzdDxjb25zdCBTdGVwc1RpbWluZ0Z1bmN0aW9uKj4odGZ1bmMp
OworICAgICAgICByZXR1cm4gU3RlcHNUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKHN0ZnVuYy0+bnVt
YmVyT2ZTdGVwcygpLCBzdGZ1bmMtPnN0ZXBBdFN0YXJ0KCkpOworICAgIH0KKworICAgIHJldHVy
biAwOwogfQogCitzdGF0aWMgY29uc3QgQW5pbWF0aW9uVmFsdWUqIGNvcHlBbmltYXRpb25WYWx1
ZShBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IEFuaW1hdGlvblZhbHVlKiB2YWx1
ZSkKK3sKKyAgICBzd2l0Y2ggKHByb3BlcnR5KSB7CisgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5
V2Via2l0VHJhbnNmb3JtOiB7CisgICAgICAgIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVl
KiB0cmFuc2Zvcm1WYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZh
bHVlKj4odmFsdWUpOworICAgICAgICByZXR1cm4gbmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVl
KHRyYW5zZm9ybVZhbHVlLT5rZXlUaW1lKCksIHRyYW5zZm9ybVZhbHVlLT52YWx1ZSgpLCBjb3B5
VGltaW5nRnVuY3Rpb24odHJhbnNmb3JtVmFsdWUtPnRpbWluZ0Z1bmN0aW9uKCkpKTsKKyAgICB9
CisgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eTogeworICAgICAgICBjb25zdCBGbG9h
dEFuaW1hdGlvblZhbHVlKiBmbG9hdFZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgRmxvYXRBbmlt
YXRpb25WYWx1ZSo+KHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG5ldyBGbG9hdEFuaW1hdGlvblZh
bHVlKGZsb2F0VmFsdWUtPmtleVRpbWUoKSwgZmxvYXRWYWx1ZS0+dmFsdWUoKSwgY29weVRpbWlu
Z0Z1bmN0aW9uKGZsb2F0VmFsdWUtPnRpbWluZ0Z1bmN0aW9uKCkpKTsKKyAgICB9CisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgcmV0dXJu
IDA7CiB9CisKK1RleHR1cmVNYXBwZXJBbmltYXRpb246OlRleHR1cmVNYXBwZXJBbmltYXRpb24o
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcykKKyAgICA6IGtleWZyYW1lcyh2YWx1ZXMu
cHJvcGVydHkoKSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7
ICsraSkKKyAgICAgICAga2V5ZnJhbWVzLmluc2VydChjb3B5QW5pbWF0aW9uVmFsdWUodmFsdWVz
LnByb3BlcnR5KCksIHZhbHVlcy5hdChpKSkpOworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9k
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJOb2RlLmgKaW5kZXggODZkZTUzMi4uMzNlMDIxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgK
QEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAi
SW1hZ2UuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXIuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlRyYW5z
Zm9ybU9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24u
aCIKQEAgLTM3LDIxICszNiwzNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBUZXh0
dXJlTWFwcGVyTm9kZTsKLWNsYXNzIFRleHR1cmVNYXBwZXJDYWNoZTsKIGNsYXNzIEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOworY2xhc3MgVGV4dHVyZU1hcHBlclN1cmZhY2VNYW5hZ2VyOwog
CiBzdHJ1Y3QgVGV4bWFwUGFpbnRPcHRpb25zIHsKICAgICBCaXRtYXBUZXh0dXJlKiBzdXJmYWNl
OwogICAgIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXI7Ci0gICAgVGV4dHVyZU1hcHBlck5v
ZGUqIHJvb3RMYXllcjsKKyAgICBUZXh0dXJlTWFwcGVyU3VyZmFjZU1hbmFnZXIqIHN1cmZhY2VN
YW5hZ2VyOworCiAgICAgZmxvYXQgb3BhY2l0eTsKLSAgICBJbnRSZWN0IHNjaXNzb3JSZWN0Owot
ICAgIEludFJlY3QgdmlzaWJsZVJlY3Q7CiAgICAgYm9vbCBpc1N1cmZhY2U7Ci0gICAgVGV4dHVy
ZU1hcHBlckNhY2hlKiBjYWNoZTsKKyAgICBUZXhtYXBQYWludE9wdGlvbnMoKSA6IHN1cmZhY2Uo
MCksIHRleHR1cmVNYXBwZXIoMCksIG9wYWNpdHkoMS4wKSwgaXNTdXJmYWNlKGZhbHNlKSB7IH0K
IH07CiAKLWNsYXNzIFRleHR1cmVNYXBwZXJOb2RlIDogcHVibGljIFRleHR1cmVNYXBwZXJDb250
ZW50TGF5ZXIgeworY2xhc3MgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFRleHR1cmVNYXBwZXJBbmltYXRpb24+IHsKK3B1YmxpYzoKKyAgICBTdHJpbmcgbmFtZTsK
KyAgICBLZXlmcmFtZVZhbHVlTGlzdCBrZXlmcmFtZXM7CisgICAgSW50U2l6ZSBib3hTaXplOwor
ICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbjsKKyAgICBib29sIHBhdXNlZDsKKyAgICBW
ZWN0b3I8VHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlPiBmdW5jdGlvbkxpc3Q7Cisg
ICAgYm9vbCBsaXN0c01hdGNoOworICAgIGJvb2wgaGFzQmlnUm90YXRpb247CisgICAgZG91Ymxl
IHN0YXJ0VGltZTsKKyAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFs
dWVMaXN0Jik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4g
Y3JlYXRlKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKHZhbHVlcykpOyB9Cit9OworCisKK2NsYXNzIFRl
eHR1cmVNYXBwZXJOb2RlIHsKIAogcHVibGljOgogICAgIC8vIFRoaXMgc2V0IG9mIGZsYWdzIGhl
bHAgdXMgZGVmZXIgd2hpY2ggcHJvcGVydGllcyBvZiB0aGUgbGF5ZXIgaGF2ZSBiZWVuCkBAIC04
MywxOSArOTcsMTkgQEAgcHVibGljOgogICAgICAgICBEaXNwbGF5Q2hhbmdlID0gICAgICAgICAg
ICAgKDFMIDw8IDE4KSwKICAgICAgICAgQmFja2dyb3VuZENvbG9yQ2hhbmdlID0gICAgICgxTCA8
PCAxOSksCiAKLSAgICAgICAgUmVwbGljYUxheWVyQ2hhbmdlID0gICAgICAgICgxTCA8PCAyMCkK
KyAgICAgICAgUmVwbGljYUxheWVyQ2hhbmdlID0gICAgICAgICgxTCA8PCAyMCksCisgICAgICAg
IEFuaW1hdGlvbkNoYW5nZSA9ICAgICAgICAgICAoMUwgPDwgMjEpCiAgICAgfTsKICAgICAvLyBU
aGUgY29tcG9zaXRvciBsZXRzIHVzIHNwZWNpYWwtY2FzZSBpbWFnZXMgYW5kIGNvbG9ycywgc28g
d2UgdHJ5IHRvIGRvIHNvLgogICAgIGVudW0gQ29udGVudFR5cGUgeyBIVE1MQ29udGVudFR5cGUs
IERpcmVjdEltYWdlQ29udGVudFR5cGUsIENvbG9yQ29udGVudFR5cGUsIE1lZGlhQ29udGVudFR5
cGUsIENhbnZhczNEQ29udGVudFR5cGV9OwogICAgIHN0cnVjdCBDb250ZW50RGF0YSB7Ci0gICAg
ICAgIEludFJlY3QgbmVlZHNEaXNwbGF5UmVjdDsKKyAgICAgICAgRmxvYXRSZWN0IG5lZWRzRGlz
cGxheVJlY3Q7CiAgICAgICAgIGJvb2wgbmVlZHNEaXNwbGF5OwogICAgICAgICBDb2xvciBiYWNr
Z3JvdW5kQ29sb3I7CiAKICAgICAgICAgQ29udGVudFR5cGUgY29udGVudFR5cGU7CiAgICAgICAg
IFJlZlB0cjxJbWFnZT4gaW1hZ2U7Ci0gICAgICAgIFRleHR1cmVNYXBwZXJWaWRlb0xheWVyKiBt
ZWRpYTsKLQorICAgICAgICBQbGF0Zm9ybUxheWVyKiBtZWRpYTsKICAgICAgICAgQ29udGVudERh
dGEoKQogICAgICAgICAgICAgOiBuZWVkc0Rpc3BsYXkoZmFsc2UpCiAgICAgICAgICAgICAsIGNv
bnRlbnRUeXBlKEhUTUxDb250ZW50VHlwZSkKQEAgLTEwNSwxMDAgKzExOSwxMzkgQEAgcHVibGlj
OgogICAgICAgICB9CiAgICAgfTsKIAorICAgIFRleHR1cmVNYXBwZXJOb2RlKCkKKyAgICAgICAg
OiBtX3BhcmVudCgwKSwgbV9lZmZlY3RUYXJnZXQoMCksIG1fb3BhY2l0eSgxLjApLCBtX3N1cmZh
Y2VNYW5hZ2VyKDApIHsgfQogCi0gICAgVGV4dHVyZU1hcHBlck5vZGUoKTsKICAgICB2aXJ0dWFs
IH5UZXh0dXJlTWFwcGVyTm9kZSgpOwogCiAgICAgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZShH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciosIGJvb2wgcmVjdXJzaXZlKTsKKyAgICB2b2lkIHN5
bmNDb21wb3NpdGluZ1N0YXRlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljc0xh
eWVyLCBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBib29sIHJlY3Vyc2UpOworICAgIElu
dFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUobV9zaXplLndpZHRoKCkgKyAuNWYs
IG1fc2l6ZS5oZWlnaHQoKSArIC41Zik7IH0KKyAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCk7CisgICAg
SW50UmVjdCBjb21wdXRlTGFzdE1vZGlmaWVkUmVjdCgpOworICAgIHZvaWQgc2V0Q29udGVudFNj
YWxlKGZsb2F0IHNjYWxlKTsKKyAgICB2b2lkIHNldFZpc2libGVSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QpOworICAgIHZvaWQgc2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0ZXhtYXAp
IHsgbV90ZXh0dXJlTWFwcGVyID0gdGV4bWFwOyB9CisgICAgYm9vbCBkZXNjZW5kYW50c09yU2Vs
ZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpIGNvbnN0OworCisgICAgdm9pZCBwYWludCgpOworCisg
ICAgYm9vbCBuZWVkc1RvQ29tcHV0ZUJvdW5kaW5nUmVjdCgpIGNvbnN0OwogCi1wcm90ZWN0ZWQ6
Ci0gICAgLy8gUmVpbXBzIGZyb20gVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcgotICAgIHZpcnR1
YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgdmlydHVhbCB2
b2lkIHNldFBsYXRmb3JtTGF5ZXJDbGllbnQoVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50Kik7Ci0g
ICAgdmlydHVhbCB2b2lkIHBhaW50KFRleHR1cmVNYXBwZXIqLCBjb25zdCBUZXh0dXJlTWFwcGVy
Q29udGVudExheWVyOjpQYWludE9wdGlvbnMmKTsKIAogcHJpdmF0ZToKICAgICBUZXh0dXJlTWFw
cGVyTm9kZSogcm9vdExheWVyKCk7Ci0gICAgdm9pZCBjbGVhckRpcmVjdEltYWdlKCk7CiAgICAg
dm9pZCBjb21wdXRlVHJhbnNmb3JtYXRpb25zKCk7Ci0gICAgSW50U2l6ZSBuZWFyZXN0U3VyZmFj
ZVNpemUoKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVWaXNpYmxlUmVjdCgpOworICAgIHZvaWQg
Y29tcHV0ZVBlcnNwZWN0aXZlKCk7CiAgICAgdm9pZCBjb21wdXRlUmVwbGljYVRyYW5zZm9ybSgp
OwotICAgIHZvaWQgY29tcHV0ZUxheWVyVHlwZSgpOworICAgIGludCBjb3VudERlc2NlbmRhbnRz
V2l0aENvbnRlbnQoKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVPdmVybGFwcygpOworICAgIEZs
b2F0UmVjdCB0YXJnZXRSZWN0Rm9yVGlsZVJlY3QoY29uc3QgRmxvYXRSZWN0JiB0b3RhbFRhcmdl
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QpIGNvbnN0OwogICAgIHZvaWQgY29tcHV0
ZUxvY2FsVHJhbnNmb3JtKCk7Ci0gICAgdm9pZCBmbGF0dGVuVG8yRFNwYWNlSWZOZWNlc3Nhcnko
KTsKLSAgICB2b2lkIGluaXRpYWxpemVUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqKTsKLSAg
ICB2b2lkIGludmFsaWRhdGVUcmFuc2Zvcm0oKTsKKyAgICB2b2lkIGNvbXB1dGVCb3VuZGluZ1Jl
Y3RGcm9tUm9vdCgpOworICAgIHZvaWQgY29tcHV0ZVRpbGVzKCk7CisgICAgdm9pZCBpbnZhbGlk
YXRlVmlld3BvcnQoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBub3RpZnlDaGFuZ2UoQ2hh
bmdlTWFzayk7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICB2b2lkIHNldE5lZWRz
RGlzcGxheUluUmVjdChJbnRSZWN0KTsKLSAgICB2b2lkIHBlcmZvcm1Qb3N0U3luY09wZXJhdGlv
bnMoKTsKKyAgICB2b2lkIHJlc2V0RGVzY2VuZGFudHMoKTsKICAgICB2b2lkIHN5bmNDb21wb3Np
dGluZ1N0YXRlSW50ZXJuYWwoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqLCBib29sIHJlY3Vy
c2l2ZSwgVGV4dHVyZU1hcHBlciopOwogICAgIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGVTZWxm
KEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljc0xheWVyLCBUZXh0dXJlTWFwcGVy
KiB0ZXh0dXJlTWFwcGVyKTsKLSAgICBUZXh0dXJlTWFwcGVyQ2FjaGUqIGNhY2hlKCk7CisgICAg
dm9pZCBzeW5jQW5pbWF0aW9ucyhHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciopOworICAgIHZv
aWQgYXBwbHlBbmltYXRpb24oY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYsIGRvdWJsZSBy
dW5uaW5nVGltZSk7CisgICAgdm9pZCBhcHBseUFuaW1hdGlvbkZyYW1lKGNvbnN0IFRleHR1cmVN
YXBwZXJBbmltYXRpb24mLCBjb25zdCBBbmltYXRpb25WYWx1ZSogZnJvbSwgY29uc3QgQW5pbWF0
aW9uVmFsdWUqIHRvLCBmbG9hdCBwcm9ncmVzcyk7CisgICAgdm9pZCBhcHBseU9wYWNpdHlBbmlt
YXRpb24oZmxvYXQgZnJvbU9wYWNpdHksIGZsb2F0IHRvT3BhY2l0eSwgZG91YmxlKTsKKyAgICB2
b2lkIGFwcGx5VHJhbnNmb3JtQW5pbWF0aW9uKGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24m
LCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBmcm9tLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRp
b25zKiB0bywgZG91YmxlKTsKKyAgICBib29sIGhhc1J1bm5pbmdPcGFjaXR5QW5pbWF0aW9uKCkg
Y29uc3Q7CisgICAgYm9vbCBoYXNSdW5uaW5nVHJhbnNmb3JtQW5pbWF0aW9uKCkgY29uc3Q7CiAK
LSAgICB2b2lkIHBhaW50UmVjdXJzaXZlKFRleG1hcFBhaW50T3B0aW9ucyBvcHRpb25zKTsKLSAg
ICBib29sIHBhaW50UmVwbGljYShjb25zdCBUZXhtYXBQYWludE9wdGlvbnMmIG9wdGlvbnMpOwot
ICAgIHZvaWQgcGFpbnRTdXJmYWNlKGNvbnN0IFRleG1hcFBhaW50T3B0aW9ucyYgb3B0aW9ucyk7
Ci0gICAgdm9pZCBwYWludFNlbGYoY29uc3QgVGV4bWFwUGFpbnRPcHRpb25zJiBvcHRpb25zKTsK
LSAgICB2b2lkIHBhaW50U2VsZkFuZENoaWxkcmVuKGNvbnN0IFRleG1hcFBhaW50T3B0aW9ucyYg
b3B0aW9ucywgVGV4bWFwUGFpbnRPcHRpb25zJiBvcHRpb25zRm9yRGVzY2VuZGFudHMpOwotICAg
IHZvaWQgdXBsb2FkVGV4dHVyZUZyb21Db250ZW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBw
ZXIsIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBHcmFwaGljc0xheWVyKiBsYXllcik7CiAK
LSAgICBpbnQgY291bnREZXNjZW5kYW50c1dpdGhDb250ZW50KCkgY29uc3Q7Ci0gICAgYm9vbCBo
YXNTdXJmYWNlRGVzY2VuZGFudHMoKSBjb25zdDsKKyAgICBzdGF0aWMgaW50IGNvbXBhcmVHcmFw
aGljc0xheWVyc1pWYWx1ZShjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKTsKKyAgICBzdGF0
aWMgdm9pZCBzb3J0QnlaT3JkZXIoVmVjdG9yPFRleHR1cmVNYXBwZXJOb2RlKiA+JiBhcnJheSwg
aW50IGZpcnN0LCBpbnQgbGFzdCk7CiAKLSAgICBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVy
KCk7CisgICAgQml0bWFwVGV4dHVyZSogdGV4dHVyZSgpIHsgcmV0dXJuIG1fdGlsZXMuaXNFbXB0
eSgpID8gMCA6IG1fdGlsZXNbMF0udGV4dHVyZS5nZXQoKTsgfQogCisgICAgdm9pZCBwYWludFJl
Y3Vyc2l2ZShUZXhtYXBQYWludE9wdGlvbnMgb3B0aW9ucyk7CisgICAgYm9vbCBwYWludFJlZmxl
Y3Rpb24oY29uc3QgVGV4bWFwUGFpbnRPcHRpb25zJiBvcHRpb25zLCBCaXRtYXBUZXh0dXJlKiBz
dXJmYWNlKTsKKyAgICB2b2lkIHBhaW50U2VsZihjb25zdCBUZXhtYXBQYWludE9wdGlvbnMmIG9w
dGlvbnMpOworICAgIHZvaWQgcGFpbnRTZWxmQW5kQ2hpbGRyZW4oY29uc3QgVGV4bWFwUGFpbnRP
cHRpb25zJiBvcHRpb25zLCBUZXhtYXBQYWludE9wdGlvbnMmIG9wdGlvbnNGb3JEZXNjZW5kYW50
cyk7CisgICAgdm9pZCByZW5kZXJDb250ZW50KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIs
IEdyYXBoaWNzTGF5ZXIqIGxheWVyKTsKKyAgICBib29sIHJlbmRlckFzRGlyZWN0SW1hZ2UoVGV4
dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcik7CiAKLSAgICBzdGF0aWMgVGV4dHVyZU1hcHBlck5v
ZGUqIHRvVGV4dHVyZU1hcHBlck5vZGUoR3JhcGhpY3NMYXllciopOwotICAgIHN0YXRpYyBpbnQg
Y29tcGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIp
OwotICAgIHN0YXRpYyB2b2lkIHNvcnRCeVpPcmRlcihWZWN0b3I8VGV4dHVyZU1hcHBlck5vZGUq
ID4mIGFycmF5LCBpbnQgZmlyc3QsIGludCBsYXN0KTsKICAgICBzdHJ1Y3QgVHJhbnNmb3JtRGF0
YSB7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGJhc2UsIHRhcmdldCwgcmVwbGljYSwg
Zm9yRGVzY2VuZGFudHMsIHBlcnNwZWN0aXZlLCBsb2NhbDsKLSAgICAgICAgSW50UmVjdCB0YXJn
ZXRCb3VuZGluZ1JlY3Q7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRhcmdldCwgcmVw
bGljYSwgZm9yRGVzY2VuZGFudHMsIGxvY2FsLCBiYXNlLCBwZXJzcGVjdGl2ZTsKKyAgICAgICAg
RmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nUmVjdDsKICAgICAgICAgZmxvYXQgY2VudGVyWjsKLSAg
ICAgICAgYm9vbCBkaXJ0eSwgbG9jYWxEaXJ0eSwgcGVyc3BlY3RpdmVEaXJ0eTsKLSAgICAgICAg
SW50UmVjdCBib3VuZGluZ1JlY3RGcm9tUm9vdDsKLSAgICAgICAgVHJhbnNmb3JtRGF0YSgpIDog
ZGlydHkodHJ1ZSksIGxvY2FsRGlydHkodHJ1ZSksIHBlcnNwZWN0aXZlRGlydHkodHJ1ZSkgeyB9
CisgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3RGcm9tUm9vdCwgYm91bmRpbmdSZWN0RnJv
bVJvb3RGb3JEZXNjZW5kYW50czsKKyAgICAgICAgVHJhbnNmb3JtRGF0YSgpIHsgfQogICAgIH07
CiAKLSAgICBUcmFuc2Zvcm1EYXRhIG1fdHJhbnNmb3JtczsKKyAgICBzdHJ1Y3QgRGlydHlGbGFn
cyB7CisgICAgICAgIC8vIGxvY2FMVHJhbnNmb3JtLCBwYXJlbnRUcmFuc2Zvcm0sCisgICAgICAg
IGJvb2wgdHJhbnNmb3JtOiAxOwogCi0gICAgZW51bSBMYXllclR5cGUgewotICAgICAgICBEZWZh
dWx0TGF5ZXIsCi0gICAgICAgIFJvb3RMYXllciwKLSAgICAgICAgU2Npc3NvckxheWVyLAotICAg
ICAgICBDbGlwTGF5ZXIsCi0gICAgICAgIFRyYW5zcGFyZW5jeUxheWVyCi0gICAgfTsKKyAgICAg
ICAgLy8gc2l6ZSwgYW5jaG9yLXBvaW50LCBiYXNlIHRyYW5zZm9ybSwgcG9zCisgICAgICAgIGJv
b2wgbG9jYWxUcmFuc2Zvcm06IDE7CisKKyAgICAgICAgLy8gc2l6ZSwgY2hpbGRyZW5UcmFuc2Zv
cm0KKyAgICAgICAgYm9vbCBwZXJzcGVjdGl2ZTogMTsKKworICAgICAgICAvLyB0YXJnZXQgdHJh
bnNmb3JtLCBzaXplLCBjb250ZW50IHJlY3QsIHJvb3QgdmlzaWJsZSByZWN0CisgICAgICAgIGJv
b2wgdmlzaWJsZVJlY3Q6IDE7CisKKyAgICAgICAgYm9vbCBwYXJlbnRUcmFuc2Zvcm0gOjE7CisK
KyAgICAgICAgYm9vbCByZXBsaWNhVHJhbnNmb3JtOiAxOworCisgICAgICAgIGJvb2wgb3Zlcmxh
cHM6IDE7CisKKyAgICAgICAgRGlydHlGbGFncygpCisgICAgICAgICAgICA6IHRyYW5zZm9ybSh0
cnVlKSwgbG9jYWxUcmFuc2Zvcm0odHJ1ZSksIHBlcnNwZWN0aXZlKHRydWUpLCB2aXNpYmxlUmVj
dCh0cnVlKSwgcGFyZW50VHJhbnNmb3JtKHRydWUpLCByZXBsaWNhVHJhbnNmb3JtKHRydWUpLCBv
dmVybGFwcyh0cnVlKQorICAgICAgICB7IH0KKyAgICB9IG1fZGlydHlGbGFnczsKIAotICAgIExh
eWVyVHlwZSBtX2xheWVyVHlwZTsKKyAgICB2b2lkIGludmFsaWRhdGVUcmFuc2Zvcm0oKSB7IG1f
ZGlydHlGbGFncy50cmFuc2Zvcm0gPSB0cnVlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlTG9jYWxU
cmFuc2Zvcm0oKSB7IG1fZGlydHlGbGFncy5sb2NhbFRyYW5zZm9ybSA9IHRydWU7IH0KKyAgICB2
b2lkIGludmFsaWRhdGVQZXJzcGVjdGl2ZVRyYW5zZm9ybSgpIHsgbV9kaXJ0eUZsYWdzLnBlcnNw
ZWN0aXZlID0gdHJ1ZTsgfQorICAgIHZvaWQgaW52YWxpZGF0ZVZpc2libGVSZWN0KCkgeyBtX2Rp
cnR5RmxhZ3MudmlzaWJsZVJlY3QgPSB0cnVlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlUmVwbGlj
YVRyYW5zZm9ybSgpIHsgbV9kaXJ0eUZsYWdzLnJlcGxpY2FUcmFuc2Zvcm0gPSB0cnVlOyB9Cisg
ICAgdm9pZCBpbnZhbGlkYXRlT3ZlcmxhcHMoKTsKKyAgICB2b2lkIGRpZENoYW5nZUxvY2FsVHJh
bnNmb3JtKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VQYXJlbnRUcmFuc2Zvcm0oKTsKKyAgICB2b2lk
IGRpZENoYW5nZVNpemUoKTsKKyAgICB2b2lkIGRpZENoYW5nZVRhcmdldFRyYW5zZm9ybSgpOwor
ICAgIHZvaWQgZGlkQ2hhbmdlUGVyc3BlY3RpdmUoKTsKIAotICAgIGlubGluZSBJbnRSZWN0IHRh
cmdldFJlY3QoKSBjb25zdAorICAgIFRyYW5zZm9ybURhdGEgbV90cmFuc2Zvcm1zOworCisgICAg
aW5saW5lIEZsb2F0UmVjdCB0YXJnZXRSZWN0KCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVy
biBtX2N1cnJlbnRDb250ZW50LmNvbnRlbnRUeXBlID09IEhUTUxDb250ZW50VHlwZSA/IGVudGly
ZVJlY3QoKSA6IG1fc3RhdGUuY29udGVudHNSZWN0OwogICAgIH0KIAotICAgIGlubGluZSBJbnRS
ZWN0IGVudGlyZVJlY3QoKSBjb25zdAorICAgIGlubGluZSBGbG9hdFJlY3QgZW50aXJlUmVjdCgp
IGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgo
KSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgwLCAwLCBtX3Np
emUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKICAgICB9CiAKLSAgICBpbmxpbmUgSW50UmVj
dCByZXBsaWNhUmVjdCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9sYXllclR5cGUg
PT0gVHJhbnNwYXJlbmN5TGF5ZXIgPyBJbnRSZWN0KDAsIDAsIG1fbmVhcmVzdFN1cmZhY2VTaXpl
LndpZHRoKCksIG1fbmVhcmVzdFN1cmZhY2VTaXplLmhlaWdodCgpKSA6IGVudGlyZVJlY3QoKTsK
LSAgICB9CisgICAgc3RydWN0IFRpbGUgeworICAgICAgICBGbG9hdFJlY3QgcmVjdDsKKyAgICAg
ICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmU7CisgICAgICAgIGJvb2wgbmVlZHNSZXNl
dDsKKyAgICB9OwogCi0gICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IG1fdGV4dHVyZTsKLSAgICBS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4gbV9zdXJmYWNlLCBtX3JlcGxpY2FTdXJmYWNlOworICAgIFZl
Y3RvcjxUaWxlPiBtX3RpbGVzOwogCiAgICAgQ29udGVudERhdGEgbV9jdXJyZW50Q29udGVudDsK
IAogICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyTm9kZSo+IG1fY2hpbGRyZW47CiAgICAgVGV4dHVy
ZU1hcHBlck5vZGUqIG1fcGFyZW50OwogICAgIFRleHR1cmVNYXBwZXJOb2RlKiBtX2VmZmVjdFRh
cmdldDsKLSAgICBJbnRTaXplIG1fc2l6ZSwgbV9uZWFyZXN0U3VyZmFjZVNpemU7CisgICAgRmxv
YXRTaXplIG1fc2l6ZTsKKyAgICBmbG9hdCBtX29wYWNpdHk7CiAgICAgU3RyaW5nIG1fbmFtZTsK
LSAgICBUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQqIG1fcGxhdGZvcm1DbGllbnQ7CisKKyAgICBW
ZWN0b3I8UmVmUHRyPFRleHR1cmVNYXBwZXJBbmltYXRpb24+ID4gbV9hbmltYXRpb25zOwogCiAg
ICAgc3RydWN0IFN0YXRlIHsKICAgICAgICAgRmxvYXRQb2ludCBwb3M7CkBAIC0yMDYsMjkgKzI1
OSwyNyBAQCBwcml2YXRlOgogICAgICAgICBGbG9hdFNpemUgc2l6ZTsKICAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBj
aGlsZHJlblRyYW5zZm9ybTsKLSAgICAgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOwotICAgICAg
ICBDb2xvciBjdXJyZW50Q29sb3I7Ci0gICAgICAgIEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5n
Q29vcmRpbmF0ZXNPcmllbnRhdGlvbiBnZW9PcmllbnRhdGlvbjsKLSAgICAgICAgR3JhcGhpY3NM
YXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIGNvbnRlbnRzT3JpZW50YXRp
b247CiAgICAgICAgIGZsb2F0IG9wYWNpdHk7Ci0gICAgICAgIEludFJlY3QgY29udGVudHNSZWN0
OworICAgICAgICBGbG9hdFJlY3QgY29udGVudHNSZWN0OwogICAgICAgICBpbnQgZGVzY2VuZGFu
dHNXaXRoQ29udGVudDsKICAgICAgICAgVGV4dHVyZU1hcHBlck5vZGUqIG1hc2tMYXllcjsKICAg
ICAgICAgVGV4dHVyZU1hcHBlck5vZGUqIHJlcGxpY2FMYXllcjsKLSAgICAgICAgYm9vbCBwcmVz
ZXJ2ZXMzRDsKLSAgICAgICAgYm9vbCBtYXNrc1RvQm91bmRzOwotICAgICAgICBib29sIGRyYXdz
Q29udGVudDsKLSAgICAgICAgYm9vbCBjb250ZW50c09wYXF1ZTsKLSAgICAgICAgYm9vbCBiYWNr
ZmFjZVZpc2liaWxpdHk7Ci0gICAgICAgIGJvb2wgdmlzaWJsZTsKLSAgICAgICAgYm9vbCBkaXJ0
eTsKLSAgICAgICAgYm9vbCB0aWxlZDsKLSAgICAgICAgYm9vbCBoYXNTdXJmYWNlRGVzY2VuZGFu
dHM7Ci0gICAgICAgIEludFJlY3QgdmlzaWJsZVJlY3Q7CisgICAgICAgIGJvb2wgcHJlc2VydmVz
M0QgOiAxOworICAgICAgICBib29sIG1hc2tzVG9Cb3VuZHMgOiAxOworICAgICAgICBib29sIGRy
YXdzQ29udGVudCA6IDE7CisgICAgICAgIGJvb2wgY29udGVudHNPcGFxdWUgOiAxOworICAgICAg
ICBib29sIGJhY2tmYWNlVmlzaWJpbGl0eSA6IDE7CisgICAgICAgIGJvb2wgdmlzaWJsZSA6IDE7
CisgICAgICAgIGJvb2wgbmVlZHNSZXNldDogMTsKKyAgICAgICAgYm9vbCBtaWdodEhhdmVPdmVy
bGFwcyA6IDE7CisgICAgICAgIGJvb2wgbmVlZHNSZXBhaW50OworICAgICAgICBGbG9hdFJlY3Qg
dmlzaWJsZVJlY3Q7CisgICAgICAgIEZsb2F0UmVjdCByb290VmlzaWJsZVJlY3Q7CisgICAgICAg
IGZsb2F0IGNvbnRlbnRTY2FsZTsKKyAgICAgICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0OwogCiAg
ICAgICAgIFN0YXRlKCkKICAgICAgICAgICAgIDogb3BhY2l0eSgxLmYpCi0gICAgICAgICAgICAs
IGRlc2NlbmRhbnRzV2l0aENvbnRlbnQoMCkKICAgICAgICAgICAgICwgbWFza0xheWVyKDApCiAg
ICAgICAgICAgICAsIHJlcGxpY2FMYXllcigwKQogICAgICAgICAgICAgLCBwcmVzZXJ2ZXMzRChm
YWxzZSkKQEAgLTIzNywxNiArMjg4LDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAsIGNvbnRl
bnRzT3BhcXVlKGZhbHNlKQogICAgICAgICAgICAgLCBiYWNrZmFjZVZpc2liaWxpdHkoZmFsc2Up
CiAgICAgICAgICAgICAsIHZpc2libGUodHJ1ZSkKLSAgICAgICAgICAgICwgZGlydHkodHJ1ZSkK
LSAgICAgICAgICAgICwgdGlsZWQoZmFsc2UpCi0gICAgICAgICAgICAsIGhhc1N1cmZhY2VEZXNj
ZW5kYW50cyhmYWxzZSkKKyAgICAgICAgICAgICwgbmVlZHNSZXNldChmYWxzZSkKKyAgICAgICAg
ICAgICwgbWlnaHRIYXZlT3ZlcmxhcHMoZmFsc2UpCisgICAgICAgICAgICAsIGNvbnRlbnRTY2Fs
ZSgxLjBmKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgU3RhdGUgbV9zdGF0
ZTsKLSAgICBUZXh0dXJlTWFwcGVyQ2FjaGUqIG1fY2FjaGU7CisgICAgVGV4dHVyZU1hcHBlclN1
cmZhY2VNYW5hZ2VyKiBtX3N1cmZhY2VNYW5hZ2VyOworICAgIFRleHR1cmVNYXBwZXIqIG1fdGV4
dHVyZU1hcHBlcjsKIH07CiAKKworVGV4dHVyZU1hcHBlck5vZGUqIHRvVGV4dHVyZU1hcHBlck5v
ZGUoR3JhcGhpY3NMYXllciogbGF5ZXIpOworCiB9CiAjZW5kaWYgLy8gVGV4dHVyZU1hcHBlck5v
ZGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUVdlYlBhZ2VDbGll
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50LmgKaW5kZXgg
ZDhmNDE3MS4uODM5NmNhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQv
UVdlYlBhZ2VDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RV2ViUGFn
ZUNsaWVudC5oCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0
SW5wdXRNZXRob2RFbmFibGVkKGJvb2wgZW5hYmxlKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGlu
cHV0TWV0aG9kRW5hYmxlZCgpIGNvbnN0ID0gMDsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCi0gICAgdmlydHVhbCB2b2lkIHNldFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OlBs
YXRmb3JtTGF5ZXIqIGxheWVyKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Um9vdEdyYXBoaWNz
TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbGF5ZXIpIHsgfQogCiAgICAgLy8gdGhpcyBn
ZXRzIGNhbGxlZCB3aGVuIHRoZSBjb21wb3NpdG9yIHdhbnRzIHVzIHRvIHN5bmMgdGhlIGxheWVy
cwogICAgIC8vIGlmIHNjaGVkdWxlU3luYyBpcyB0cnVlLCB3ZSBzY2hlZHVsZSBhIHN5bmMgb3Vy
c2VsdmVzLiBvdGhlcndpc2UsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3F0
L1BsdWdpblZpZXdRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdR
dC5jcHAKaW5kZXggNjExYWJiOS4uZGE3YTBjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMv
cXQvUGx1Z2luVmlld1F0LmNwcApAQCAtMTc2LDE0ICsxNzYsMTggQEAgdm9pZCBQbHVnaW5WaWV3
Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQogICAgICAgICB8fCAoUVdlYlBhZ2VQcml2YXRlOjpkcnRS
dW4gJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSAmJiAobV93aW5kb3dSZWN0ICE9IG9sZFdpbmRv
d1JlY3QgfHwgbV9jbGlwUmVjdCAhPSBvbGRDbGlwUmVjdCkpKQogICAgICAgICBzZXROUFdpbmRv
d0lmTmVlZGVkKCk7CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgaWYg
KCFtX3BsYXRmb3JtTGF5ZXIpIHsKKyNlbmRpZgogICAgICAgICAvLyBNYWtlIHN1cmUgd2UgZ2V0
IHJlcGFpbnRlZCBhZnRlcndhcmRzLiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgZG93bndhcmQKICAg
ICAgICAgLy8gc2Nyb2xsaW5nIHRvIG1vdmUgdGhlIHBsdWdpbiB3aWRnZXQgcHJvcGVybHkuCiAg
ICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCBpbnZhbGlkYXRlIHRoZSBmcmFtZVJlY3QoKSBo
ZXJlLiBUaGlzIGlzIGJlY2F1c2UgUVdlYkZyYW1lOjpyZW5kZXJSZWxhdGl2ZUNvb3JkcygpCiAg
ICAgICAgIC8vIGltaXRhdGVzIFNjcm9sbFZpZXcgYW5kIGFkZHMgdGhlIHNjcm9sbCBvZmZzZXQg
YmFjayBvbiB0byB0aGUgcmVjdCB3ZSBkYW1hZ2UgaGVyZSAobWFraW5nIHRoZSBjby1vcmRpbmF0
ZXMgYWJzb2x1dGUKICAgICAgICAgLy8gdG8gdGhlIGZyYW1lIGFnYWluKSBiZWZvcmUgcGFzc2lu
ZyBpdCB0byBGcmFtZVZpZXcuCiAgICAgICAgIGZyYW1lVmlldy0+aW52YWxpZGF0ZVJlY3QobV93
aW5kb3dSZWN0KTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgfQorI2Vu
ZGlmCiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0Rm9jdXMoYm9vbCBmb2N1c2VkKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQv
cXQvQXBpL3F3ZWJmcmFtZS5jcHAKaW5kZXggYjRkYWFhNC4uMjM2MGY2OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2ViZnJhbWUuY3BwCkBAIC05OCw3ICs5OCw3IEBACiAjZW5kaWYKICNpZiBVU0UoVEVY
VFVSRV9NQVBQRVIpCiAjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRl
ICJ0ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlICJ0ZXhtYXAv
VGV4dHVyZU1hcHBlck5vZGUuaCIKICNlbmRpZgogI2luY2x1ZGUgInd0Zi9IYXNoTWFwLmgiCiAj
aW5jbHVkZSA8UU11bHRpTWFwPgpAQCAtMzE5LDI0ICszMTksMjcgQEAgdm9pZCBRV2ViRnJhbWVQ
cml2YXRlOjpyZW5kZXJGcm9tVGlsZWRCYWNraW5nU3RvcmUoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb24KICNlbmRpZgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBV
U0UoVEVYVFVSRV9NQVBQRVIpCi12b2lkIFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlckNvbXBvc2l0
ZWRMYXllcnMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjbGlwKQor
dm9pZCBRV2ViRnJhbWVQcml2YXRlOjpyZW5kZXJDb21wb3NpdGVkTGF5ZXJzKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYpCiB7Ci0gICAgaWYgKCFyb290R3JhcGhpY3NM
YXllcikKKyAgICBpZiAoIXJvb3RUZXh0dXJlTWFwcGVyTm9kZSB8fCAhdGV4dHVyZU1hcHBlcikK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhpY3NDb250ZXh0
KGNvbnRleHQpOwogICAgIHRleHR1cmVNYXBwZXItPnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkoY29udGV4dC0+aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKICAgICB0ZXh0dXJlTWFw
cGVyLT5zZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dC0+dGV4dERyYXdpbmdNb2RlKCkpOwogICAg
IFFQYWludGVyKiBwYWludGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgRnJh
bWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKKyAgICBjb25zdCBRVHJhbnNmb3JtIHRyYW5z
Zm9ybSA9IHBhaW50ZXItPndvcmxkVHJhbnNmb3JtKCk7CisgICAgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXggbWF0cml4KAorICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5tMTEoKSwgdHJhbnNm
b3JtLm0xMigpLCAwLCB0cmFuc2Zvcm0ubTEzKCksCisgICAgICAgICAgICAgICAgdHJhbnNmb3Jt
Lm0yMSgpLCB0cmFuc2Zvcm0ubTIyKCksIDAsIHRyYW5zZm9ybS5tMjMoKSwKKyAgICAgICAgICAg
ICAgICAwLCAwLCAxLCAwLAorICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5tMzEoKSwgdHJhbnNm
b3JtLm0zMigpLCAwLCB0cmFuc2Zvcm0ubTMzKCkKKyAgICAgICAgICAgICAgICApOworICAgIHJv
b3RUZXh0dXJlTWFwcGVyTm9kZS0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7CisgICAgcm9vdFRleHR1
cmVNYXBwZXJOb2RlLT5zZXRPcGFjaXR5KHBhaW50ZXItPm9wYWNpdHkoKSk7CiAgICAgcGFpbnRl
ci0+c2F2ZSgpOwogICAgIHBhaW50ZXItPmJlZ2luTmF0aXZlUGFpbnRpbmcoKTsKLSAgICBUZXh0
dXJlTWFwcGVyQ29udGVudExheWVyOjpQYWludE9wdGlvbnMgb3B0aW9uczsKLSAgICBvcHRpb25z
LnZpc2libGVSZWN0ID0gY2xpcDsKLSAgICBvcHRpb25zLnRhcmdldFJlY3QgPSB2aWV3LT5mcmFt
ZVJlY3QoKTsKLSAgICBvcHRpb25zLnZpZXdwb3J0U2l6ZSA9IHZpZXctPnNpemUoKTsKLSAgICBv
cHRpb25zLm9wYWNpdHkgPSBwYWludGVyLT5vcGFjaXR5KCk7Ci0gICAgcm9vdEdyYXBoaWNzTGF5
ZXItPnBhaW50KHRleHR1cmVNYXBwZXIuZ2V0KCksIG9wdGlvbnMpOworICAgIHJvb3RUZXh0dXJl
TWFwcGVyTm9kZS0+cGFpbnQoKTsKICAgICBwYWludGVyLT5lbmROYXRpdmVQYWludGluZygpOwog
ICAgIHBhaW50ZXItPnJlc3RvcmUoKTsKIH0KQEAgLTM1NywxMCArMzYwLDExIEBAIHZvaWQgUVdl
YkZyYW1lUHJpdmF0ZTo6cmVuZGVyUmVsYXRpdmVDb29yZHMoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBRV2ViRnJhbWU6CiAgICAgdmlldy0+dXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJl
Y3Vyc2l2ZSgpOwogCiAgICAgaWYgKGxheWVyICYgUVdlYkZyYW1lOjpDb250ZW50c0xheWVyKSB7
CisgICAgICAgIHBhaW50ZXItPnNhdmUoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2
ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IFFSZWN0JiBjbGlwUmVjdCA9
IHZlY3Rvci5hdChpKTsKIAotICAgICAgICAgICAgUVJlY3QgcmVjdCA9IGNsaXBSZWN0LmludGVy
c2VjdGVkKHZpZXctPmZyYW1lUmVjdCgpKTsKKyAgICAgICAgICAgIFFSZWN0IGludGVyc2VjdGVk
UmVjdCA9IGNsaXBSZWN0LmludGVyc2VjdGVkKHZpZXctPmZyYW1lUmVjdCgpKTsKIAogICAgICAg
ICAgICAgY29udGV4dC0+c2F2ZSgpOwogICAgICAgICAgICAgcGFpbnRlci0+c2V0Q2xpcFJlY3Qo
Y2xpcFJlY3QsIFF0OjpJbnRlcnNlY3RDbGlwKTsKQEAgLTM3MSw2ICszNzUsNyBAQCB2b2lkIFFX
ZWJGcmFtZVByaXZhdGU6OnJlbmRlclJlbGF0aXZlQ29vcmRzKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgUVdlYkZyYW1lOgogICAgICAgICAgICAgaW50IHNjcm9sbFggPSB2aWV3LT5zY3JvbGxY
KCk7CiAgICAgICAgICAgICBpbnQgc2Nyb2xsWSA9IHZpZXctPnNjcm9sbFkoKTsKIAorICAgICAg
ICAgICAgUVJlY3QgcmVjdCA9IGludGVyc2VjdGVkUmVjdDsKICAgICAgICAgICAgIGNvbnRleHQt
PnRyYW5zbGF0ZSh4LCB5KTsKICAgICAgICAgICAgIHJlY3QudHJhbnNsYXRlKC14LCAteSk7CiAg
ICAgICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoLXNjcm9sbFgsIC1zY3JvbGxZKTsKQEAgLTM4
MSw2ICszODYsNyBAQCB2b2lkIFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlclJlbGF0aXZlQ29vcmRz
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUVdlYkZyYW1lOgogCiAgICAgICAgICAgICBjb250
ZXh0LT5yZXN0b3JlKCk7CiAgICAgICAgIH0KKyAgICAgICAgcGFpbnRlci0+cmVzdG9yZSgpOwog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQog
ICAgICAgICByZW5kZXJDb21wb3NpdGVkTGF5ZXJzKGNvbnRleHQsIEludFJlY3QoY2xpcC5ib3Vu
ZGluZ1JlY3QoKSkpOwogI2VuZGlmCkBAIC00MDAsMTMgKzQwNiwxNSBAQCB2b2lkIFFXZWJGcmFt
ZVByaXZhdGU6OnJlbmRlclJlbGF0aXZlQ29vcmRzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
UVdlYkZyYW1lOgogICAgICAgICAgICAgaWYgKGxheWVyICYgUVdlYkZyYW1lOjpTY3JvbGxCYXJM
YXllcgogICAgICAgICAgICAgICAgICYmICF2aWV3LT5zY3JvbGxiYXJzU3VwcHJlc3NlZCgpCiAg
ICAgICAgICAgICAgICAgJiYgKHZpZXctPmhvcml6b250YWxTY3JvbGxiYXIoKSB8fCB2aWV3LT52
ZXJ0aWNhbFNjcm9sbGJhcigpKSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNhdmUoKTsK
KwogICAgICAgICAgICAgICAgIFFSZWN0IHJlY3QgPSBpbnRlcnNlY3RlZFJlY3Q7CiAgICAgICAg
ICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKHgsIHkpOwogICAgICAgICAgICAgICAgIHJlY3Qu
dHJhbnNsYXRlKC14LCAteSk7CiAKICAgICAgICAgICAgICAgICB2aWV3LT5wYWludFNjcm9sbGJh
cnMoY29udGV4dCwgcmVjdCk7CiAKLSAgICAgICAgICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUo
LXgsIC15KTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgICAgICAg
ICB9CiAKICNpZiBFTkFCTEUoUEFOX1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvcXQvQXBpL3F3ZWJmcmFtZS5oIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmgK
aW5kZXggODQxMDk2Mi4uNGFlYjIzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkv
cXdlYmZyYW1lLmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmgKQEAgLTU2
LDcgKzU2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFdpZGdldFByaXZhdGU7
CiAgICAgY2xhc3MgRnJhbWVMb2FkZXJDbGllbnRRdDsKICAgICBjbGFzcyBDaHJvbWVDbGllbnRR
dDsKLSAgICBjbGFzcyBQbGF0Zm9ybUxheWVyUHJveHlRdDsKKyAgICBjbGFzcyBUZXh0dXJlTWFw
cGVyTm9kZUNsaWVudFF0OwogfQogY2xhc3MgUVdlYkZyYW1lRGF0YTsKIGNsYXNzIFFXZWJIaXRU
ZXN0UmVzdWx0UHJpdmF0ZTsKQEAgLTIzNSw3ICsyMzUsNyBAQCBwcml2YXRlOgogICAgIGZyaWVu
ZCBjbGFzcyBXZWJDb3JlOjpXaWRnZXRQcml2YXRlOwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3Jl
OjpGcmFtZUxvYWRlckNsaWVudFF0OwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpDaHJvbWVD
bGllbnRRdDsKLSAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6UGxhdGZvcm1MYXllclByb3h5UXQ7
CisgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQ7CiAg
ICAgUVdlYkZyYW1lUHJpdmF0ZSAqZDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
cXQvQXBpL3F3ZWJmcmFtZV9wLmggYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5o
CmluZGV4IGVlOGM0NjMuLmExOWYwY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJmcmFtZV9wLmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaApA
QCAtNDAsMTMgKzQwLDEyIEBACiAjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXIuaCIKICNl
bmRpZgogCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBGcmFtZUxvYWRlckNsaWVu
dFF0OwogICAgIGNsYXNzIEZyYW1lVmlldzsKICAgICBjbGFzcyBIVE1MRnJhbWVPd25lckVsZW1l
bnQ7CiAgICAgY2xhc3MgU2Nyb2xsYmFyOwotICAgIGNsYXNzIFRleHR1cmVNYXBwZXJDb250ZW50
TGF5ZXI7CisgICAgY2xhc3MgVGV4dHVyZU1hcHBlck5vZGU7CiB9CiBjbGFzcyBRV2ViUGFnZTsK
IApAQCAtODIsNyArODEsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbWFyZ2luV2lkdGgoLTEpCiAg
ICAgICAgICwgbWFyZ2luSGVpZ2h0KC0xKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgICAgICAsIHJvb3RHcmFwaGljc0xheWVyKDAp
CisgICAgICAgICwgcm9vdFRleHR1cmVNYXBwZXJOb2RlKDApCiAjZW5kaWYKICAgICAgICAge30K
ICAgICB2b2lkIGluaXQoUVdlYkZyYW1lKiBxZnJhbWUsIFFXZWJGcmFtZURhdGEqIGZyYW1lRGF0
YSk7CkBAIC0xMTUsNyArMTE0LDcgQEAgcHVibGljOgogICAgIGludCBtYXJnaW5XaWR0aDsKICAg
ICBpbnQgbWFyZ2luSGVpZ2h0OwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYg
VVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJDb250ZW50TGF5
ZXIqIHJvb3RHcmFwaGljc0xheWVyOworICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlKiBy
b290VGV4dHVyZU1hcHBlck5vZGU7CiAgICAgT3duUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+
IHRleHR1cmVNYXBwZXI7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCA5ZDI5MzZmLi4yODBk
NzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDExLTAzLTIzICBWaWF0Y2hl
c2xhdiBPc3RhcGVua28gIDxvc3RhcGVua28udmlhdGNoZXNsYXZAbm9raWEuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gSW1wbGVtZW50
IGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG9uIFdLMiBRdCBwb3J0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjkzNQorCisgICAgICAgIFdlYmtpdDIg
YWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgaW1wbGVtZW50YXRpb24gb24gYmFzZSBvZiB0ZXh0dXJl
IG1hcHBlci4KKyAgICAgICAgTWVyZ2Ugb2Ygb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gYnkgTm9h
bSBSb3NlbnRoYWwgZnJvbiBpbnRlcm5hbCBxdHdlYmtpdCBicmFuY2guCisgICAgICAgIFBhcnRp
YWwgZml4ZXMgYnkgWWFlbCBBaGFyb24gYW5kIENhcm9sIFN6YWJvCisKKyAgICAgICAgKiBBcGkv
cXdlYmZyYW1lLmNwcDoKKyAgICAgICAgKFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlckNvbXBvc2l0
ZWRMYXllcnMpOgorICAgICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6cmVuZGVyUmVsYXRpdmVDb29y
ZHMpOgorICAgICAgICAqIEFwaS9xd2ViZnJhbWUuaDoKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1l
X3AuaDoKKyAgICAgICAgKFFXZWJGcmFtZVByaXZhdGU6OlFXZWJGcmFtZVByaXZhdGUpOgorICAg
ICAgICAqIFF0V2ViS2l0LnBybzoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6dGFic1RvTGlua3Mp
OgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OnJlcXVlc3RHZW9sb2NhdGlvblBl
cm1pc3Npb25Gb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6Y2Fu
Y2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9tZUNsaWVudFF0OjphdHRhY2hSb290R3JhcGhpY3NMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6YWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZyk6Cisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9tZUNsaWVudFF0OjpzY3JvbGxSZWN0SW50b1ZpZXcpOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyTm9kZUNsaWVudFF0OjpUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0KToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQ6OnNjcm9sbCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0OjpzZXRUZXh0dXJlTWFwcGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQ6On5UZXh0dXJlTWFwcGVyTm9k
ZUNsaWVudFF0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQ6
OmNvbXB1dGVMYXN0TW9kaWZpZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJOb2RlQ2xpZW50UXQ6OnN5bmNSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNs
aWVudFFXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2VDbGllbnRRV2lkZ2V0OjpzeW5jTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGll
bnRRV2lkZ2V0Ojp+UGFnZUNsaWVudFFXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNs
aWVudFFHcmFwaGljc1dpZGdldDo6flBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c3luY0xheWVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NM
YXllcik6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpQYWdlQ2xpZW50UVdpZGdldDo6UGFnZUNsaWVudFFXaWRnZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6UGFnZUNsaWVudFFHcmFwaGlj
c1dpZGdldCk6CisKIDIwMTEtMDMtMjEgIENoYW5nIFNodSAgPGNzaHVAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9xdC9RdFdlYktpdC5wcm8gYi9Tb3VyY2UvV2ViS2l0L3F0L1F0V2ViS2l0LnBy
bwppbmRleCA0YjdiYjA1Li5jZjhhMTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1F0
V2ViS2l0LnBybworKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1F0V2ViS2l0LnBybwpAQCAtMjUsNiAr
MjUsMTAgQEAgQ09ORklHKHN0YW5kYWxvbmVfcGFja2FnZSkgewogICAgIGlzRW1wdHkoV0NfR0VO
RVJBVEVEX1NPVVJDRVNfRElSKTpXRUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUiA9IC4uLy4u
L1dlYktpdDIvZ2VuZXJhdGVkCiB9CiAKK2NvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsKSB7Cisg
ICAgTElCUyArPSAtbEdMCit9CisKIGluY2x1ZGUoJCRQV0QvQXBpL2hlYWRlcnMucHJpKQogaW5j
bHVkZSgkJFNPVVJDRV9ESVIvV2ViS2l0LnByaSkKIGluY2x1ZGUoJCRTT1VSQ0VfRElSL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnByaSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAKaW5kZXggYWNmYTY2NC4uZTM3YzJlMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRR
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRR
dC5jcHAKQEAgLTQyLDYgKzQyLDcgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2VuZGlmCisjaW5jbHVkZSAiR2VvbG9jYXRp
b25QZXJtaXNzaW9uQ2xpZW50UXQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5j
bHVkZSAiSWNvbi5oIgogI2luY2x1ZGUgIk5hdmlnYXRpb25BY3Rpb24uaCIKQEAgLTM2MCw2ICsz
NjEsMTEgQEAgS2V5Ym9hcmRVSU1vZGUgQ2hyb21lQ2xpZW50UXQ6OmtleWJvYXJkVUlNb2RlKCkK
ICAgICAgICAgPyBLZXlib2FyZEFjY2Vzc1RhYnNUb0xpbmtzIDogS2V5Ym9hcmRBY2Nlc3NEZWZh
dWx0OwogfQogCitib29sIENocm9tZUNsaWVudFF0Ojp0YWJzVG9MaW5rcygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fd2ViUGFnZS0+c2V0dGluZ3MoKS0+dGVzdEF0dHJpYnV0ZShRV2ViU2V0dGlu
Z3M6OkxpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4pOworfQorCiBJbnRSZWN0IENocm9tZUNsaWVu
dFF0Ojp3aW5kb3dSZXNpemVyUmVjdCgpIGNvbnN0CiB7CiAjaWYgZGVmaW5lZChRX1dTX01BQykK
QEAgLTYwNSwxMiArNjExLDI3IEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnNldEN1cnNvcihjb25z
dCBDdXJzb3ImIGN1cnNvcikKICNlbmRpZgogfQogCit2b2lkIENocm9tZUNsaWVudFF0OjpyZXF1
ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoRnJhbWUqIGZyYW1lLCBHZW9sb2NhdGlv
biogZ2VvbG9jYXRpb24pCit7CisjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQorICAgIFFXZWJGcmFt
ZSogd2ViRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpraXQoZnJhbWUpOworICAgIEdlb2xvY2F0
aW9uUGVybWlzc2lvbkNsaWVudFF0OjpnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKS0+cmVx
dWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKHdlYkZyYW1lLCBnZW9sb2NhdGlvbik7
CisjZW5kaWYKK30KKwordm9pZCBDaHJvbWVDbGllbnRRdDo6Y2FuY2VsR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdEZvckZyYW1lKEZyYW1lKiBmcmFtZSwgR2VvbG9jYXRpb24qIGdlb2xvY2F0
aW9uKQoreworI2lmIEVOQUJMRShHRU9MT0NBVElPTikKKyAgICBRV2ViRnJhbWUqIHdlYkZyYW1l
ID0gUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGZyYW1lKTsKKyAgICBHZW9sb2NhdGlvblBlcm1pc3Np
b25DbGllbnRRdDo6Z2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50KCktPmNhbmNlbEdlb2xvY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZSh3ZWJGcmFtZSwgZ2VvbG9jYXRpb24pOworI2Vu
ZGlmCit9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiB2b2lkIENocm9tZUNs
aWVudFF0OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5
ZXIqIGdyYXBoaWNzTGF5ZXIpCiB7CiAgICAgaWYgKHBsYXRmb3JtUGFnZUNsaWVudCgpKQotICAg
ICAgICBwbGF0Zm9ybVBhZ2VDbGllbnQoKS0+c2V0Um9vdEdyYXBoaWNzTGF5ZXIoZ3JhcGhpY3NM
YXllciA/IGdyYXBoaWNzTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IDApOworICAgICAgICBwbGF0
Zm9ybVBhZ2VDbGllbnQoKS0+c2V0Um9vdEdyYXBoaWNzTGF5ZXIoZ3JhcGhpY3NMYXllcik7CiB9
CiAKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnNldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6
YXRpb24oKQpAQCAtNjM1LDYgKzY1NiwxMSBAQCBDaHJvbWVDbGllbnQ6OkNvbXBvc2l0aW5nVHJp
Z2dlckZsYWdzIENocm9tZUNsaWVudFF0OjphbGxvd2VkQ29tcG9zaXRpbmdUcmlnZ2VycwogICAg
IHJldHVybiAwOwogfQogCitib29sIENocm9tZUNsaWVudFF0OjphbGxvd3NBY2NlbGVyYXRlZENv
bXBvc2l0aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKHBsYXRmb3JtUGFnZUNsaWVudCgpICYm
IHBsYXRmb3JtUGFnZUNsaWVudCgpLT5hbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpOwor
fQorCiAjZW5kaWYKIAogI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oIGIvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCmluZGV4IGExMmMy
ZWMuLjU1YzM1YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50UXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudFF0LmgKQEAgLTExMyw2ICsxMTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXRTdGF0dXNiYXJUZXh0KGNvbnN0IFN0cmluZyYpOwogCiAg
ICAgICAgIHZpcnR1YWwgV2ViQ29yZTo6S2V5Ym9hcmRVSU1vZGUga2V5Ym9hcmRVSU1vZGUoKTsK
KyAgICAgICAgdmlydHVhbCBib29sIHRhYnNUb0xpbmtzKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1
YWwgSW50UmVjdCB3aW5kb3dSZXNpemVyUmVjdCgpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwg
dm9pZCBpbnZhbGlkYXRlV2luZG93KGNvbnN0IEludFJlY3QmLCBib29sKTsKQEAgLTE1Niw2ICsx
NTcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXROZWVk
c09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBz
Y2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCk7CiAgICAgICAgIHZpcnR1YWwgQ29tcG9zaXRp
bmdUcmlnZ2VyRmxhZ3MgYWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMoKSBjb25zdDsKKyAgICAg
ICAgdmlydHVhbCBib29sIGFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSBjb25zdDsKICNl
bmRpZgogCiAjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCkBAIC0xODEsMTAgKzE4Mywx
MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHNldEN1cnNv
cihjb25zdCBDdXJzb3ImKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsUmVjdEludG9W
aWV3KGNvbnN0IEludFJlY3QmLCBjb25zdCBTY3JvbGxWaWV3KikgY29uc3QgeyB9CisgICAgICAg
IHZpcnR1YWwgdm9pZCBzY3JvbGxSZWN0SW50b1ZpZXcoY29uc3QgSW50UmVjdCYsIGNvbnN0IFNj
cm9sbFZpZXcqKSBjb25zdCB7fQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0R2VvbG9j
YXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoRnJhbWUqLCBHZW9sb2NhdGlvbiopIHsgfQotICAgICAg
ICB2aXJ0dWFsIHZvaWQgY2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1l
KEZyYW1lKiwgR2VvbG9jYXRpb24qKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RH
ZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShGcmFtZSosIEdlb2xvY2F0aW9uKik7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJh
bWUoRnJhbWUqLCBHZW9sb2NhdGlvbiopOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzZWxlY3RJ
dGVtV3JpdGluZ0RpcmVjdGlvbklzTmF0dXJhbCgpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgc2Vs
ZWN0SXRlbUFsaWdubWVudEZvbGxvd3NNZW51V3JpdGluZ0RpcmVjdGlvbigpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwIGIvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCmluZGV4IDE4MjFi
ZWMuLmRmNGQ3MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
UGFnZUNsaWVudFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1Bh
Z2VDbGllbnRRdC5jcHAKQEAgLTIyLDcgKzIyLDcgQEAKIAogI2luY2x1ZGUgIlBhZ2VDbGllbnRR
dC5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJRdC5oIgotI2luY2x1ZGUgInRleG1hcC9UZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVy
Tm9kZS5oIgogI2luY2x1ZGUgPFFHcmFwaGljc1NjZW5lPgogI2luY2x1ZGUgPFFHcmFwaGljc1Zp
ZXc+CiAjaWYgZGVmaW5lZChRX1dTX1gxMSkKQEAgLTM1LDEzMiArMzUsNjkgQEAKICNlbmRpZgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0KKyNpZiAhVVNFKFRFWFRVUkVfTUFQUEVSKQorI2Vycm9y
IFRleE1hcAorI2VuZGlmCisjaWYgIVVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNlcnJv
ciBBY2NDb21wCisjZW5kaWYKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVT
RShURVhUVVJFX01BUFBFUikgICAgCi1jbGFzcyBQbGF0Zm9ybUxheWVyUHJveHlRdCA6IHB1Ymxp
YyBRT2JqZWN0LCBwdWJsaWMgdmlydHVhbCBUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQgewotcHVi
bGljOgotICAgIFBsYXRmb3JtTGF5ZXJQcm94eVF0KFFXZWJGcmFtZSogZnJhbWUsIFRleHR1cmVN
YXBwZXJDb250ZW50TGF5ZXIqIGxheWVyLCBRT2JqZWN0KiBvYmplY3QpCi0gICAgICAgIDogUU9i
amVjdChvYmplY3QpCi0gICAgICAgICwgbV9mcmFtZShmcmFtZSkKLSAgICAgICAgLCBtX2xheWVy
KGxheWVyKQotICAgIHsKLSAgICAgICAgaWYgKG1fbGF5ZXIpCi0gICAgICAgICAgICBtX2xheWVy
LT5zZXRQbGF0Zm9ybUxheWVyQ2xpZW50KHRoaXMpOwotICAgICAgICBtX2ZyYW1lLT5kLT5yb290
R3JhcGhpY3NMYXllciA9IG1fbGF5ZXI7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRUZXh0dXJlTWFw
cGVyKFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4gdGV4dHVyZU1hcHBlcikKLSAgICB7Ci0gICAg
ICAgIG1fZnJhbWUtPmQtPnRleHR1cmVNYXBwZXIgPSB0ZXh0dXJlTWFwcGVyOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgflBsYXRmb3JtTGF5ZXJQcm94eVF0KCkKLSAgICB7Ci0gICAgICAgIGlmICht
X2xheWVyKQotICAgICAgICAgICAgbV9sYXllci0+c2V0UGxhdGZvcm1MYXllckNsaWVudCgwKTsK
LSAgICAgICAgaWYgKG1fZnJhbWUtPmQpCi0gICAgICAgICAgICBtX2ZyYW1lLT5kLT5yb290R3Jh
cGhpY3NMYXllciA9IDA7Ci0gICAgfQotCi0gICAgdmlydHVhbCBUZXh0dXJlTWFwcGVyKiB0ZXh0
dXJlTWFwcGVyKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2ZyYW1lLT5kLT50ZXh0dXJlTWFw
cGVyLmdldCgpOwotICAgIH0KLQotICAgIC8vIFNpbmNlIHdlIGp1c3QgcGFpbnQgdGhlIGNvbXBv
c2l0ZWQgdHJlZSBhbmQgbmV2ZXIgY3JlYXRlIGEgc3BlY2lhbCBpdGVtIGZvciBpdCwgd2UgZG9u
J3QgaGF2ZSB0byBoYW5kbGUgaXRzIHNpemUgY2hhbmdlcy4KLSAgICB2b2lkIHNldFNpemVDaGFu
Z2VkKGNvbnN0IEludFNpemUmKSB7IH0KLQotcHJpdmF0ZToKLSAgICBRV2ViRnJhbWUqIG1fZnJh
bWU7Ci0gICAgVGV4dHVyZU1hcHBlckNvbnRlbnRMYXllciogbV9sYXllcjsKLX07Ci0KLWNsYXNz
IFBsYXRmb3JtTGF5ZXJQcm94eVFXaWRnZXQgOiBwdWJsaWMgUGxhdGZvcm1MYXllclByb3h5UXQg
eworY2xhc3MgVGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdCB7CiBwdWJsaWM6Ci0gICAgUGxhdGZv
cm1MYXllclByb3h5UVdpZGdldChRV2ViRnJhbWUqIGZyYW1lLCBUZXh0dXJlTWFwcGVyQ29udGVu
dExheWVyKiBsYXllciwgUVdpZGdldCogd2lkZ2V0KQotICAgICAgICA6IFBsYXRmb3JtTGF5ZXJQ
cm94eVF0KGZyYW1lLCBsYXllciwgd2lkZ2V0KQotICAgICAgICAsIG1fd2lkZ2V0KHdpZGdldCkK
LSAgICB7Ci0gICAgICAgIGlmIChtX3dpZGdldCkKLSAgICAgICAgICAgIG1fd2lkZ2V0LT5pbnN0
YWxsRXZlbnRGaWx0ZXIodGhpcyk7Ci0KLSAgICAgICAgaWYgKHRleHR1cmVNYXBwZXIoKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBzZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBw
ZXJRdDo6Y3JlYXRlKCkpOwotICAgIH0KLQotICAgIC8vIFdlIGRvbid0IHdhbnQgYSBodWdlIHJl
Z2lvbi1jbGlwIG9uIHRoZSBjb21wb3NpdGluZyBsYXllcnM7IGluc3RlYWQgd2UgdW5pdGUgdGhl
IHJlY3RhbmdsZXMgdG9nZXRoZXIKLSAgICAvLyBhbmQgY2xlYXIgdGhlbSB3aGVuIHRoZSBwYWlu
dCBhY3R1YWxseSBvY2N1cnMuCi0gICAgYm9vbCBldmVudEZpbHRlcihRT2JqZWN0KiBvYmplY3Qs
IFFFdmVudCogZXZlbnQpCisgICAgVGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdChRV2ViRnJhbWUq
IGZyYW1lLCBHcmFwaGljc0xheWVyKiBsYXllcikKKyAgICAgICAgOiBtX2ZyYW1lKGZyYW1lKQor
ICAgICAgICAsIG1fcm9vdEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllcjo6Y3JlYXRlKDApKQog
ICAgIHsKLSAgICAgICAgaWYgKG9iamVjdCA9PSBtX3dpZGdldCAmJiBldmVudC0+dHlwZSgpID09
IFFFdmVudDo6UGFpbnQpCi0gICAgICAgICAgICBtX2RpcnR5UmVjdCA9IFFSZWN0KCk7Ci0gICAg
ICAgIHJldHVybiBRT2JqZWN0OjpldmVudEZpbHRlcihvYmplY3QsIGV2ZW50KTsKKyAgICAgICAg
bV9mcmFtZS0+ZC0+cm9vdFRleHR1cmVNYXBwZXJOb2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZSht
X3Jvb3RHcmFwaGljc0xheWVyLmdldCgpKTsKKyAgICAgICAgbV9yb290R3JhcGhpY3NMYXllci0+
YWRkQ2hpbGQobGF5ZXIpOworICAgICAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zZXREcmF3c0Nv
bnRlbnQoZmFsc2UpOworICAgICAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zZXRNYXNrc1RvQm91
bmRzKGZhbHNlKTsKKyAgICAgICAgbV9yb290R3JhcGhpY3NMYXllci0+c2V0U2l6ZShJbnRTaXpl
KDEsIDEpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpCisgICAgdm9pZCBz
Y3JvbGwoZmxvYXQgZHgsIGZsb2F0IGR5KQogICAgIHsKLSAgICAgICAgaWYgKG1fd2lkZ2V0KQot
ICAgICAgICAgICAgbV93aWRnZXQtPnVwZGF0ZSgpOworICAgICAgICBGbG9hdFBvaW50IHBvc2l0
aW9uID0gbV9yb290R3JhcGhpY3NMYXllci0+cG9zaXRpb24oKTsKKyAgICAgICAgbV9yb290R3Jh
cGhpY3NMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChwb3NpdGlvbi54KCkgKyBkeCwgcG9z
aXRpb24ueSgpICsgZHkpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVj
dChjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHZvaWQgc2V0VGV4dHVyZU1hcHBlcihjb25zdCBQ
YXNzT3duUHRyPFRleHR1cmVNYXBwZXI+JiB0ZXh0dXJlTWFwcGVyKQogICAgIHsKLSAgICAgICAg
bV9kaXJ0eVJlY3QgfD0gcmVjdDsKLSAgICAgICAgbV93aWRnZXQtPnVwZGF0ZShtX2RpcnR5UmVj
dCk7CisgICAgICAgIG1fZnJhbWUtPmQtPnRleHR1cmVNYXBwZXIgPSB0ZXh0dXJlTWFwcGVyOwor
ICAgICAgICBtX2ZyYW1lLT5kLT5yb290VGV4dHVyZU1hcHBlck5vZGUtPnNldFRleHR1cmVNYXBw
ZXIobV9mcmFtZS0+ZC0+dGV4dHVyZU1hcHBlci5nZXQoKSk7CiAgICAgfQogCi1wcml2YXRlOgot
ICAgIFFSZWN0IG1fZGlydHlSZWN0OwotICAgIFFXaWRnZXQqIG1fd2lkZ2V0OwotfTsKLQotI2lm
ICFkZWZpbmVkKFFUX05PX0dSQVBISUNTVklFVykKLWNsYXNzIFBsYXRmb3JtTGF5ZXJQcm94eVFH
cmFwaGljc09iamVjdCA6IHB1YmxpYyBQbGF0Zm9ybUxheWVyUHJveHlRdCB7Ci1wdWJsaWM6Ci0g
ICAgUGxhdGZvcm1MYXllclByb3h5UUdyYXBoaWNzT2JqZWN0KFFXZWJGcmFtZSogZnJhbWUsIFRl
eHR1cmVNYXBwZXJDb250ZW50TGF5ZXIqIGxheWVyLCBRR3JhcGhpY3NPYmplY3QqIG9iamVjdCkK
LSAgICAgICAgOiBQbGF0Zm9ybUxheWVyUHJveHlRdChmcmFtZSwgbGF5ZXIsIG9iamVjdCkKLSAg
ICAgICAgLCBtX2dyYXBoaWNzSXRlbShvYmplY3QpCisgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBl
ck5vZGVDbGllbnRRdCgpCiAgICAgewotICAgICAgICBpZiAodGV4dHVyZU1hcHBlcigpKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0jaWZkZWYgUVRfT1BFTkdMX0xJQgotICAgICAgICBRR3JhcGhp
Y3NWaWV3KiB2aWV3ID0gb2JqZWN0LT5zY2VuZSgpLT52aWV3cygpWzBdOwotICAgICAgICBpZiAo
dmlldyAmJiB2aWV3LT52aWV3cG9ydCgpICYmIHZpZXctPnZpZXdwb3J0KCktPmluaGVyaXRzKCJR
R0xXaWRnZXQiKSkgewotICAgICAgICAgICAgc2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVy
R0w6OmNyZWF0ZSgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotI2VuZGlmCi0g
ICAgICAgIHNldFRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlclF0OjpjcmVhdGUoKSk7CisgICAg
ICAgIGlmIChtX2ZyYW1lLT5kKQorICAgICAgICAgICAgbV9mcmFtZS0+ZC0+cm9vdFRleHR1cmVN
YXBwZXJOb2RlID0gMDsKICAgICB9CiAKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpCisgICAg
UVJlY3QgY29tcHV0ZUxhc3RNb2RpZmllZFJlY3QoKQogICAgIHsKLSAgICAgICAgaWYgKG1fZ3Jh
cGhpY3NJdGVtKQotICAgICAgICAgICAgbV9ncmFwaGljc0l0ZW0tPnVwZGF0ZSgpOworICAgICAg
ICByZXR1cm4gbV9mcmFtZS0+ZC0+cm9vdFRleHR1cmVNYXBwZXJOb2RlLT5jb21wdXRlTGFzdE1v
ZGlmaWVkUmVjdCgpOwogICAgIH0KIAotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpCisgICAgdm9pZCBzeW5jUm9vdExheWVyKCkKICAgICB7Ci0gICAg
ICAgIGlmIChtX2dyYXBoaWNzSXRlbSkKLSAgICAgICAgICAgIG1fZ3JhcGhpY3NJdGVtLT51cGRh
dGUoUVJlY3RGKHJlY3QpKTsKKyAgICAgICAgbV9yb290R3JhcGhpY3NMYXllci0+c3luY0NvbXBv
c2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiAgICAgfQogCi1wcml2YXRlOgotICAgIFFH
cmFwaGljc0l0ZW0qIG1fZ3JhcGhpY3NJdGVtOworcHJvdGVjdGVkOgorICAgIFFXZWJGcmFtZSog
bV9mcmFtZTsKKyAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9yb290R3JhcGhpY3NMYXllcjsK
IH07Ci0jZW5kaWYgLy8gUVRfTk9fR1JBUEhJQ1NWSUVXCiAKLXZvaWQgUGFnZUNsaWVudFFXaWRn
ZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBsYXll
cikKK3ZvaWQgUGFnZUNsaWVudFFXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKEdyYXBoaWNz
TGF5ZXIqIGxheWVyKQogewogICAgIGlmIChsYXllcikgewotICAgICAgICBwbGF0Zm9ybUxheWVy
UHJveHkgPSBuZXcgUGxhdGZvcm1MYXllclByb3h5UVdpZGdldChwYWdlLT5tYWluRnJhbWUoKSwg
c3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckNvbnRlbnRMYXllcio+KGxheWVyKSwgdmlldyk7Cisg
ICAgICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50ID0gbmV3IFRleHR1cmVNYXBwZXJOb2RlQ2xp
ZW50UXQocGFnZS0+bWFpbkZyYW1lKCksIGxheWVyKTsKKyAgICAgICAgdGV4dHVyZU1hcHBlck5v
ZGVDbGllbnQtPnNldFRleHR1cmVNYXBwZXIobmV3IFRleHR1cmVNYXBwZXJRdCk7CisgICAgICAg
IHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5zeW5jUm9vdExheWVyKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgZGVsZXRlIHBsYXRmb3JtTGF5ZXJQcm94eTsKLSAgICBwbGF0Zm9ybUxh
eWVyUHJveHkgPSAwOworICAgIGRlbGV0ZSB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudDsKKyAgICB0
ZXh0dXJlTWFwcGVyTm9kZUNsaWVudCA9IDA7CiB9CiAKIHZvaWQgUGFnZUNsaWVudFFXaWRnZXQ6
Om1hcmtGb3JTeW5jKGJvb2wgc2NoZWR1bGVTeW5jKQpAQCAtMTcwLDcgKzEwNywxNSBAQCB2b2lk
IFBhZ2VDbGllbnRRV2lkZ2V0OjptYXJrRm9yU3luYyhib29sIHNjaGVkdWxlU3luYykKIAogdm9p
ZCBQYWdlQ2xpZW50UVdpZGdldDo6c3luY0xheWVycyhUaW1lcjxQYWdlQ2xpZW50UVdpZGdldD4q
KQogeworICAgIGlmICh0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudCkKKyAgICAgICAgdGV4dHVyZU1h
cHBlck5vZGVDbGllbnQtPnN5bmNSb290TGF5ZXIoKTsKICAgICBRV2ViRnJhbWVQcml2YXRlOjpj
b3JlKHBhZ2UtPm1haW5GcmFtZSgpKS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1
ZGluZ1N1YmZyYW1lcygpOworICAgIGlmICghdGV4dHVyZU1hcHBlck5vZGVDbGllbnQpCisgICAg
ICAgIHJldHVybjsKKyAgICBRUmVjdCByZWN0ID0gdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPmNv
bXB1dGVMYXN0TW9kaWZpZWRSZWN0KCk7CisgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisgICAgdXBkYXRlKHJlY3QpOwogfQogI2VuZGlmCiAKQEAgLTIwMiw3ICsxNDcs
NyBAQCB2b2lkIFBhZ2VDbGllbnRRV2lkZ2V0OjpzZXRJbnB1dE1ldGhvZEhpbnRzKFF0OjpJbnB1
dE1ldGhvZEhpbnRzIGhpbnRzKQogUGFnZUNsaWVudFFXaWRnZXQ6On5QYWdlQ2xpZW50UVdpZGdl
dCgpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9N
QVBQRVIpCi0gICAgZGVsZXRlIHBsYXRmb3JtTGF5ZXJQcm94eTsKKyAgICBkZWxldGUgdGV4dHVy
ZU1hcHBlck5vZGVDbGllbnQ7CiAjZW5kaWYKIH0KIApAQCAtMjYyLDcgKzIwNyw3IEBAIFBhZ2VD
bGllbnRRR3JhcGhpY3NXaWRnZXQ6On5QYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0KCkKICAgICBk
ZWxldGUgb3ZlcmxheTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSKQotICAgIGRlbGV0ZSBwbGF0Zm9ybUxheWVyUHJveHk7CisgICAgZGVs
ZXRlIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50OwogI2Vsc2UKICAgICBpZiAoIXJvb3RHcmFwaGlj
c0xheWVyKQogICAgICAgICByZXR1cm47CkBAIC0zMjAsMjQgKzI2NSwzOCBAQCB2b2lkIFBhZ2VD
bGllbnRRR3JhcGhpY3NXaWRnZXQ6OmNyZWF0ZU9yRGVsZXRlT3ZlcmxheSgpCiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojpz
eW5jTGF5ZXJzKCkKIHsKLSAgICBpZiAoc2hvdWxkU3luYykgewotICAgICAgICBRV2ViRnJhbWVQ
cml2YXRlOjpjb3JlKHBhZ2UtPm1haW5GcmFtZSgpKS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdT
dGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwotICAgICAgICBzaG91bGRTeW5jID0gZmFsc2U7Cisg
ICAgaWYgKCFzaG91bGRTeW5jKQorICAgICAgICByZXR1cm47CisgICAgc2hvdWxkU3luYyA9IGZh
bHNlOworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBpZiAodGV4dHVyZU1hcHBlck5vZGVD
bGllbnQpIHsKKyAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnN5bmNSb290TGF5ZXIo
KTsKKyAgICAgICAgdXBkYXRlKHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5jb21wdXRlTGFzdE1v
ZGlmaWVkUmVjdCgpKTsKICAgICB9CisjZW5kaWYKKyAgICBRV2ViRnJhbWVQcml2YXRlOjpjb3Jl
KHBhZ2UtPm1haW5GcmFtZSgpKS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGlu
Z1N1YmZyYW1lcygpOwogfQogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQotdm9pZCBQYWdlQ2xp
ZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcihUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllciogbGF5ZXIpCit2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNldFJv
b3RHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewogICAgIGlmIChsYXllcikg
ewotICAgICAgICBwbGF0Zm9ybUxheWVyUHJveHkgPSBuZXcgUGxhdGZvcm1MYXllclByb3h5UUdy
YXBoaWNzT2JqZWN0KHBhZ2UtPm1haW5GcmFtZSgpLCBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVy
Q29udGVudExheWVyKj4obGF5ZXIpLCB2aWV3KTsKKyAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVD
bGllbnQgPSBuZXcgVGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdChwYWdlLT5tYWluRnJhbWUoKSwg
bGF5ZXIpOworI2lmZGVmIFFUX09QRU5HTF9MSUIKKyAgICAgICAgUUdyYXBoaWNzVmlldyogZ3Jh
cGhpY3NWaWV3ID0gdmlldy0+c2NlbmUoKS0+dmlld3MoKVswXTsKKyAgICAgICAgaWYgKGdyYXBo
aWNzVmlldyAmJiBncmFwaGljc1ZpZXctPnZpZXdwb3J0KCkgJiYgZ3JhcGhpY3NWaWV3LT52aWV3
cG9ydCgpLT5pbmhlcml0cygiUUdMV2lkZ2V0IikpIHsKKyAgICAgICAgICAgIHRleHR1cmVNYXBw
ZXJOb2RlQ2xpZW50LT5zZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgdGV4dHVy
ZU1hcHBlck5vZGVDbGllbnQtPnNldFRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlclF0OjpjcmVh
dGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgZGVsZXRlIHBsYXRmb3JtTGF5ZXJQ
cm94eTsKLSAgICBwbGF0Zm9ybUxheWVyUHJveHkgPSAwOworICAgIGRlbGV0ZSB0ZXh0dXJlTWFw
cGVyTm9kZUNsaWVudDsKKyAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudCA9IDA7CiB9CiAjZWxz
ZQotdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcihR
R3JhcGhpY3NPYmplY3QqIGxheWVyKQordm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojpz
ZXRSb290R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKIHsKICAgICBpZiAocm9v
dEdyYXBoaWNzTGF5ZXIpIHsKICAgICAgICAgcm9vdEdyYXBoaWNzTGF5ZXIuZGF0YSgpLT5zZXRQ
YXJlbnRJdGVtKDApOwpAQCAtMzQ1LDEyICszMDQsMTIgQEAgdm9pZCBQYWdlQ2xpZW50UUdyYXBo
aWNzV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcihRR3JhcGhpY3NPYmplY3QqIGxheWVyKQog
ICAgICAgICBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKHBhZ2UtPm1haW5GcmFtZSgpKS0+dmlldygp
LT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwogICAgIH0KIAotICAg
IHJvb3RHcmFwaGljc0xheWVyID0gbGF5ZXI7CisgICAgcm9vdEdyYXBoaWNzTGF5ZXIgPSBsYXll
ci0+cGxhdGZvcm1MYXllcigpOwogCi0gICAgaWYgKGxheWVyKSB7Ci0gICAgICAgIGxheWVyLT5z
ZXRGbGFnKFFHcmFwaGljc0l0ZW06Okl0ZW1DbGlwc0NoaWxkcmVuVG9TaGFwZSwgdHJ1ZSk7Ci0g
ICAgICAgIGxheWVyLT5zZXRQYXJlbnRJdGVtKHZpZXcpOwotICAgICAgICBsYXllci0+c2V0WlZh
bHVlKFJvb3RHcmFwaGljc0xheWVyWlZhbHVlKTsKKyAgICBpZiAocm9vdEdyYXBoaWNzTGF5ZXIp
IHsKKyAgICAgICAgcm9vdEdyYXBoaWNzTGF5ZXIuZGF0YSgpLT5zZXRGbGFnKFFHcmFwaGljc0l0
ZW06Okl0ZW1DbGlwc0NoaWxkcmVuVG9TaGFwZSwgdHJ1ZSk7CisgICAgICAgIHJvb3RHcmFwaGlj
c0xheWVyLmRhdGEoKS0+c2V0UGFyZW50SXRlbSh2aWV3KTsKKyAgICAgICAgcm9vdEdyYXBoaWNz
TGF5ZXIuZGF0YSgpLT5zZXRaVmFsdWUoUm9vdEdyYXBoaWNzTGF5ZXJaVmFsdWUpOwogICAgIH0K
ICAgICBjcmVhdGVPckRlbGV0ZU92ZXJsYXkoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oCmluZGV4IDE2YmI1MGMuLmRiNzJiNzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmgKKysr
IGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuaApAQCAtNDEs
MTIgKzQxLDExIEBACiAKICNpbmNsdWRlIDxTZXR0aW5ncy5oPgogCi0jaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0jaW5jbHVkZSAidGV4bWFw
L1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNv
cmUgewogCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorY2xhc3MgVGV4dHVyZU1hcHBlck5vZGVD
bGllbnRRdDsKKyNlbmRpZgogY2xhc3MgUGFnZUNsaWVudFFXaWRnZXQgOiBwdWJsaWMgUVdlYlBh
Z2VDbGllbnQgewogcHVibGljOgogICAgIFBhZ2VDbGllbnRRV2lkZ2V0KFFXaWRnZXQqIG5ld1Zp
ZXcsIFFXZWJQYWdlKiBuZXdQYWdlKQpAQCAtNTQsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICwgcGFnZShuZXdQYWdlKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNF
KFRFWFRVUkVfTUFQUEVSKQogICAgICAgICAsIHN5bmNUaW1lcih0aGlzLCAmUGFnZUNsaWVudFFX
aWRnZXQ6OnN5bmNMYXllcnMpCi0gICAgICAgICwgcGxhdGZvcm1MYXllclByb3h5KDApCisgICAg
ICAgICwgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQoMCkKICNlbmRpZgogICAgIHsKICAgICAgICAg
UV9BU1NFUlQodmlldyk7CkBAIC05MSw3ICs5MCw3IEBAIHB1YmxpYzoKICAgICBRV2ViUGFnZSog
cGFnZTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVf
TUFQUEVSKQotICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllciogbGF5ZXIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhp
Y3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcik7CiAgICAgdmlydHVhbCB2b2lkIG1hcmtGb3JT
eW5jKGJvb2wgc2NoZWR1bGVTeW5jKTsKICAgICB2b2lkIHN5bmNMYXllcnMoVGltZXI8UGFnZUNs
aWVudFFXaWRnZXQ+Kik7CiAjZW5kaWYKQEAgLTEwNCw3ICsxMDMsNyBAQCBwdWJsaWM6CiAKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKICAg
ICBUaW1lcjxQYWdlQ2xpZW50UVdpZGdldD4gc3luY1RpbWVyOwotICAgIFBsYXRmb3JtTGF5ZXJQ
cm94eVF0KiBwbGF0Zm9ybUxheWVyUHJveHk7CisgICAgVGV4dHVyZU1hcHBlck5vZGVDbGllbnRR
dCogdGV4dHVyZU1hcHBlck5vZGVDbGllbnQ7CiAjZW5kaWYKIH07CiAKQEAgLTE1MSw3ICsxNTAs
NyBAQCBwdWJsaWM6CiAgICAgICAgICwgdmlld1Jlc2l6ZXNUb0NvbnRlbnRzKGZhbHNlKQogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0g
ICAgICAgICwgcGxhdGZvcm1MYXllclByb3h5KDApCisgICAgICAgICwgdGV4dHVyZU1hcHBlck5v
ZGVDbGllbnQoMCkKICNlbmRpZgogICAgICAgICAsIHNob3VsZFN5bmMoZmFsc2UpCiAjZW5kaWYK
QEAgLTIwMCw3ICsxOTksNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Um9vdEdyYXBoaWNzTGF5ZXIoUGxh
dGZvcm1MYXllciogbGF5ZXIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhpY3NMYXll
cihHcmFwaGljc0xheWVyKiBsYXllcik7CiAgICAgdmlydHVhbCB2b2lkIG1hcmtGb3JTeW5jKGJv
b2wgc2NoZWR1bGVTeW5jKTsKICAgICB2b2lkIHN5bmNMYXllcnMoKTsKIApAQCAtMjE2LDcgKzIx
NSw3IEBAIHB1YmxpYzoKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpZiBV
U0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgUGxhdGZvcm1MYXllclByb3h5UXQqIHBsYXRmb3JtTGF5
ZXJQcm94eTsKKyAgICBUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0KiB0ZXh0dXJlTWFwcGVyTm9k
ZUNsaWVudDsKICNlbHNlCiAgICAgUVdlYWtQb2ludGVyPFFHcmFwaGljc09iamVjdD4gcm9vdEdy
YXBoaWNzTGF5ZXI7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA1YTNiYzM0Li4yZmIwYmU2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjY4IEBACisyMDExLTAzLTIzICBWaWF0Y2hlc2xhdiBPc3RhcGVu
a28gIDxvc3RhcGVua28udmlhdGNoZXNsYXZAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gSW1wbGVtZW50IGFjY2VsZXJhdGVk
IGNvbXBvc2l0aW5nIG9uIFdLMiBRdCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01NjkzNQorCisgICAgICAgIFdlYmtpdDIgYWNjZWxlcmF0ZWQg
Y29tcG9zaXRpbmcgaW1wbGVtZW50YXRpb24gb24gYmFzZSBvZiB0ZXh0dXJlIG1hcHBlci4KKyAg
ICAgICAgTWVyZ2Ugb2Ygb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gYnkgTm9hbSBSb3NlbnRoYWwg
ZnJvbiBpbnRlcm5hbCBxdHdlYmtpdCBicmFuY2guCisgICAgICAgIFBhcnRpYWwgZml4ZXMgYnkg
WWFlbCBBaGFyb24gYW5kIENhcm9sIFN6YWJvCisKKyAgICAgICAgKiBTaGFyZWQvQ29yZUlQQ1N1
cHBvcnQvRHJhd2luZ0FyZWFNZXNzYWdlS2luZHMuaDoKKyAgICAgICAgKiBTaGFyZWQvQ29yZUlQ
Q1N1cHBvcnQvRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VLaW5kcy5oOgorICAgICAgICAqIFNoYXJl
ZC9MYXllclRyZWVDb250ZXh0Lmg6CisgICAgICAgICogU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5o
OgorICAgICAgICAqIFNoYXJlZC9XZWJTZXJpYWxpemVkQ29tcG9zaXRpbmdJbmZvLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OnRvTGVuZ3RoKToKKyAgICAgICAgKFdlYktpdDo6ZnJvbUxl
bmd0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNlcmlhbGl6ZWRUaW1pbmdGdW5jdGlvbjo6ZnJv
bVRpbWluZ0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2VyaWFsaXplZFRpbWluZ0Z1
bmN0aW9uOjp0b1RpbWluZ0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2VyaWFsaXpl
ZEtleWZyYW1lOjpmcm9tS2V5ZnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJTZXJpYWxpemVk
VHJhbnNmb3JtT3BlcmF0aW9uOjpmcm9tVHJhbnNmb3JtT3BlcmF0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6V2ViU2VyaWFsaXplZFRyYW5zZm9ybU9wZXJhdGlvbjo6dG9UcmFuc2Zvcm1PcGVyYXRp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJTZXJpYWxpemVkS2V5ZnJhbWU6OnRvS2V5ZnJhbWUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJTZXJpYWxpemVkS2V5ZnJhbWU6OmVuY29kZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlNlcmlhbGl6ZWRLZXlmcmFtZTo6ZGVjb2RlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViU2VyaWFsaXplZExheWVyQW5pbWF0aW9uOjplbmNvZGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTZXJpYWxpemVkTGF5ZXJBbmltYXRpb246OmRlY29kZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlNlcmlhbGl6ZWRMYXllckNvbmZpZ3VyYXRpb246OmVuY29kZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNlcmlhbGl6ZWRMYXllckNvbmZpZ3VyYXRpb246OmRlY29kZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlNlcmlhbGl6ZWRDb21wb3NpdGluZ0luZm86OmVuY29kZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlNlcmlhbGl6ZWRDb21wb3NpdGluZ0luZm86OmRlY29kZSk6CisgICAgICAg
ICogU2hhcmVkL1dlYlNlcmlhbGl6ZWRDb21wb3NpdGluZ0luZm8uaDogQWRkZWQuCisgICAgICAg
ICogU2hhcmVkL3F0L0xheWVyVHJlZUNvbnRleHRRdC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9MYXllclRyZWVDb250ZXh0LmguCisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUNvbnRleHQ6OkxheWVyVHJlZUNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVDb250ZXh0Ojp+TGF5ZXJUcmVlQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUNvbnRleHQ6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvbnRleHQ6OmRl
Y29kZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvbnRleHQ6OmlzRW1wdHkpOgorICAg
ICAgICAoV2ViS2l0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBTaGFyZWQvcXQvU2hhcmVhYmxl
Qml0bWFwUXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUlt
YWdlKToKKyAgICAgICAgKiBTaGFyZWQvcXQvVXBkYXRlQ2h1bmsuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpVcGRhdGVDaHVuazo6VXBkYXRlQ2h1bmspOgorICAgICAgICAoV2ViS2l0OjpVcGRhdGVD
aHVuazo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQ2h1bms6OmRlY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlVwZGF0ZUNodW5rOjpzaXplKToKKyAgICAgICAgKFdlYktpdDo6VXBk
YXRlQ2h1bms6OmNyZWF0ZUltYWdlKToKKyAgICAgICAgKiBTaGFyZWQvcXQvVXBkYXRlQ2h1bmsu
aDoKKyAgICAgICAgKFdlYktpdDo6VXBkYXRlQ2h1bms6OmJwcCk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9xdC9DbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKHF0X3drX2RpZEZpcnN0TGF5b3V0
Rm9yRnJhbWUpOgorICAgICAgICAocXRfd2tfZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0
Rm9yRnJhbWUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcWdyYXBoaWNzd2t2aWV3LmNw
cDoKKyAgICAgICAgKFFHcmFwaGljc1dLVmlld1ByaXZhdGU6OnVwZGF0ZVZpZXdwb3J0U2l6ZSk6
CisgICAgICAgIChRR3JhcGhpY3NXS1ZpZXc6OlFHcmFwaGljc1dLVmlldyk6CisgICAgICAgIChR
R3JhcGhpY3NXS1ZpZXc6OnBhaW50KToKKyAgICAgICAgKFFHcmFwaGljc1dLVmlldzo6c2V0QmFj
a2luZ1N0b3JlVHlwZSk6CisgICAgICAgIChRR3JhcGhpY3NXS1ZpZXc6OmJhY2tpbmdTdG9yZVR5
cGUpOgorICAgICAgICAoUUdyYXBoaWNzV0tWaWV3OjppdGVtQ2hhbmdlKToKKyAgICAgICAgKFFH
cmFwaGljc1dLVmlld1ByaXZhdGU6OlFHcmFwaGljc1dLVmlld1ByaXZhdGUpOgorICAgICAgICAo
UUdyYXBoaWNzV0tWaWV3OjpwcmVwYXJlU2NhbGVDaGFuZ2UpOgorICAgICAgICAoUUdyYXBoaWNz
V0tWaWV3Ojpjb21taXRTY2FsZUNoYW5nZSk6CisgICAgICAgIChRR3JhcGhpY3NXS1ZpZXdQcml2
YXRlOjpvblNjYWxlQ2hhbmdlZCk6CisgICAgICAgIChRR3JhcGhpY3NXS1ZpZXdQcml2YXRlOjpj
b21taXRTY2FsZSk6CisgICAgICAgIChRR3JhcGhpY3NXS1ZpZXdQcml2YXRlOjpyZWN0c05lZWRV
cGRhdGUpOgorICAgICAgICAoUUdyYXBoaWNzV0tWaWV3UHJpdmF0ZTo6dmlzdWFsRmVlZGJhY2tP
cGFjaXR5KToKKyAgICAgICAgKFFHcmFwaGljc1dLVmlld1ByaXZhdGU6OnNldFZpc3VhbEZlZWRi
YWNrT3BhY2l0eSk6CisgICAgICAgIChRR3JhcGhpY3NXS1ZpZXdQcml2YXRlOjpjbGVhclZpc3Vh
bEZlZWRiYWNrKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FncmFwaGljc3drdmlldy5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXdrcGFnZS5jcHA6CisgICAgICAgIChRV0tQ
YWdlUHJpdmF0ZTo6UVdLUGFnZVByaXZhdGUpOgorICAgICAgICAoUVdLUGFnZVByaXZhdGU6Omlu
aXQpOgorICAgICAgICAoUVdLUGFnZVByaXZhdGU6OmNyZWF0ZURyYXdpbmdBcmVhKToKKyAgICAg
ICAgKFFXS1BhZ2VQcml2YXRlOjpjcmVhdGVEcmF3aW5nQXJlYVByb3h5KToKKyAgICAgICAgKFFX
S1BhZ2VQcml2YXRlOjpzZXRWaWV3TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFFXS1BhZ2VQcml2
YXRlOjppc1ZpZXdXaW5kb3dBY3RpdmUpOgorICAgICAgICAoUVdLUGFnZVByaXZhdGU6OmlzVmll
d0ZvY3VzZWQpOgorICAgICAgICAoUVdLUGFnZVByaXZhdGU6OmlzVmlld1Zpc2libGUpOgorICAg
ICAgICAoUVdLUGFnZVByaXZhdGU6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOgor
ICAgICAgICAoUVdLUGFnZVByaXZhdGU6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6
CisgICAgICAgIChRV0tQYWdlUHJpdmF0ZTo6ZGlkUmVsYXVuY2hQcm9jZXNzKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL3F0L3F3a3BhZ2VfcC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9DaHVu
a2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNodW5rZWRV
cGRhdGVEcmF3aW5nQXJlYVByb3h5OjpDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpE
cmF3aW5nQXJlYVByb3h5OjpEcmF3aW5nQXJlYVByb3h5KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
RHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5Ojpk
aWRSZWNlaXZlU3luY01lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5
OjpwbGF0Zm9ybVdlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5Ojpz
ZXRVcGRhdGVzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OmF0
dGFjaENvbXBvc2l0aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJv
eHk6OmRldGFjaENvbXBvc2l0aW5nQ29udGV4dCk6CisgICAgICAgICogVUlQcm9jZXNzL1RpbGVk
RHJhd2luZ0FyZWFQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQ
cm94eTo6VGlsZWREcmF3aW5nQXJlYVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3
aW5nQXJlYVByb3h5Ojp+VGlsZWREcmF3aW5nQXJlYVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6
VGlsZWREcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6
VGlsZWREcmF3aW5nQXJlYVByb3h5OjpzaXplRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6
VGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRQYWdlSXNWaXNpYmxlKToKKyAgICAgICAgKFdlYktp
dDo6VGlsZWREcmF3aW5nQXJlYVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgIChX
ZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6d2FpdFVudGlsVXBkYXRlc0NvbXBsZXRlKToK
KyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVByb3h5OjpjYW5jZWxUaWxlVXBkYXRl
KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRUaWxlU2l6ZSk6
CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c2V0VXBkYXRlc0VuYWJs
ZWQpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OmludmFsaWRhdGUp
OgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZVRpbGVCdWZm
ZXJzKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVByb3h5Ojp0aWxlQnVmZmVy
VXBkYXRlQ29tcGxldGUpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6
OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVByb3h5OjphZGp1c3RW
aXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c2V0
Q29udGVudHNTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6
cmVtb3ZlQWxsVGlsZXMpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6
OmNhbGN1bGF0ZUtlZXBSZWN0KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVBy
b3h5OjpjYWxjdWxhdGVDb3ZlclJlY3QpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdB
cmVhUHJveHk6OmNyZWF0ZVRpbGVzKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJl
YVByb3h5OjpyZXNpemVFZGdlVGlsZXMpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdB
cmVhUHJveHk6OmRyb3BUaWxlc091dHNpZGVSZWN0KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWRE
cmF3aW5nQXJlYVByb3h5OjpzY2FsZWRDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpU
aWxlZERyYXdpbmdBcmVhUHJveHk6OnRpbGVSZWN0Rm9yQ29vcmRpbmF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6aGFzUGVuZGluZ1VwZGF0ZXMpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6
VGlsZWREcmF3aW5nQXJlYVByb3h5Ojpjb250ZW50c1NjYWxlKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvVGlsZWREcmF3aW5nQXJlYVRpbGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvVGlsZWREcmF3
aW5nQXJlYVRpbGVTZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5n
QXJlYVRpbGVTZXQ6OlRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0KToKKyAgICAgICAgKFdlYktpdDo6
VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWRE
cmF3aW5nQXJlYVRpbGVTZXQ6OnRpbGVBdCk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2lu
Z0FyZWFUaWxlU2V0OjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5n
QXJlYVRpbGVTZXQ6OnNldFRpbGUpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVh
VGlsZVNldDo6cmVtb3ZlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFU
aWxlU2V0OjpyZW1vdmVBbGxUaWxlcyk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0Fy
ZWFUaWxlU2V0OjptYXBUb0NvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5n
QXJlYVRpbGVTZXQ6Om1hcEZyb21Db250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJh
d2luZ0FyZWFUaWxlU2V0Ojpjb3ZlcmFnZVJhdGlvKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWRE
cmF3aW5nQXJlYVRpbGVTZXQ6OnJlbGVhc2VCYWNrQnVmZmVycyk6CisgICAgICAgICogVUlQcm9j
ZXNzL1RpbGVkRHJhd2luZ0FyZWFUaWxlU2V0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpU
aWxlZERyYXdpbmdBcmVhVGlsZVNldDo6dGlsZXMpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERy
YXdpbmdBcmVhVGlsZVNldDo6dGlsZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0Fy
ZWFUaWxlU2V0Ojpjb250ZW50c1NjYWxlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjaGFuZ2VEcmF3aW5nQXJl
YVR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVTeW5jTWVz
c2FnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkQ2hhbmdlRHJhd2luZ0Fy
ZWFUeXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRDaGFuZ2VBY2NlbGVy
YXRlZENvbXBvc2l0aW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9UaWxl
ZERyYXdpbmdBcmVhUHJveHlRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNsaWVudENvbXBvc2l0
b3I6OkxheWVyRGF0YTo6TGF5ZXJEYXRhKToKKyAgICAgICAgKFdlYktpdDo6Q2xpZW50Q29tcG9z
aXRvcjo6Y3JlYXRlTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpDbGllbnRDb21wb3NpdG9yOjps
YXllckJ5SUQpOgorICAgICAgICAoV2ViS2l0OjpDbGllbnRDb21wb3NpdG9yOjpyb290TGF5ZXIp
OgorICAgICAgICAoV2ViS2l0OjpDbGllbnRDb21wb3NpdG9yOjpzeW5jRGVsZXRlZExheWVycyk6
CisgICAgICAgIChXZWJLaXQ6OkNsaWVudENvbXBvc2l0b3I6OnBhaW50Q29udGVudHMpOgorICAg
ICAgICAoV2ViS2l0OjpDbGllbnRDb21wb3NpdG9yOjpub3RpZnlBbmltYXRpb25TdGFydGVkKToK
KyAgICAgICAgKFdlYktpdDo6Q2xpZW50Q29tcG9zaXRvcjo6bm90aWZ5U3luY1JlcXVpcmVkKToK
KyAgICAgICAgKFdlYktpdDo6Q2xpZW50Q29tcG9zaXRvcjo6c2hvd0RlYnVnQm9yZGVycyk6Cisg
ICAgICAgIChXZWJLaXQ6OkNsaWVudENvbXBvc2l0b3I6OnNob3dSZXBhaW50Q291bnRlcik6Cisg
ICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c3luY0NvbXBvc2l0aW5nU3Rh
dGUpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZUNvbXBv
c2l0aW5nTGF5ZXJDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVBy
b3h5OjpwYWludENvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdp
bmdBcmVhUHJveHk6OmF0dGFjaENvbXBvc2l0aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6
OlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6ZGV0YWNoQ29tcG9zaXRpbmdDb250ZXh0KToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVRpbGVRdC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFUaWxlOjpUaWxlZERyYXdpbmdBcmVhVGlsZSk6CisgICAg
ICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFUaWxlOjp+VGlsZWREcmF3aW5nQXJlYVRpbGUp
OgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhVGlsZTo6aXNSZWFkeVRvUGFpbnQp
OgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhVGlsZTo6aGFzUmVhZHlCYWNrQnVm
ZmVyKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYVRpbGU6OnN3YXBCYWNrQnVm
ZmVyVG9Gcm9udCk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFUaWxlOjp1cGRh
dGVGcm9tQ2h1bmspOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhVGlsZTo6cmVs
ZWFzZUJhY2tCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhVGlsZTo6
dXBkYXRlQmFja0J1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWFUaWxl
OjpjYW5jZWxCYWNrQnVmZmVyVXBkYXRlKToKKyAgICAgICAgKiBXZWJLaXQyLnBybzoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L0dyYXBoaWNzTGF5ZXJXSzIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmxheWVyQnlJRFRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJXSzI6OmxheWVyQnlJRCk6CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVk
TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OnRvV2ViTGF5ZXJJRCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyV0syOjpub3RpZnlDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllcldLMjo6R3JhcGhpY3NMYXllcldLMik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyV0syOjp+R3JhcGhpY3NMYXllcldLMik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyV0syOjpzZXRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyV0syOjphZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyV0sy
OjphZGRDaGlsZEF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcldLMjo6
YWRkQ2hpbGRBYm92ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyV0syOjphZGRD
aGlsZEJlbG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJXSzI6OnJlcGxhY2VD
aGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyV0syOjpyZW1vdmVGcm9tUGFy
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJXSzI6OnNldFBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJXSzI6OnNldEFuY2hvclBvaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJXSzI6OnNldFNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllcldLMjo6c2V0VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJXSzI6OnNldENoaWxkcmVuVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJXSzI6OnNldFByZXNlcnZlczNEKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJXSzI6OnNldE1hc2tzVG9Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllcldLMjo6c2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJXSzI6OnNldENvbnRlbnRzT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJXSzI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyV0syOjpzZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJXSzI6OnNldENvbnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyV0syOjpub3RpZnlBbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJXSzI6OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyV0syOjpwYXVzZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyV0syOjpyZW1vdmVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
cldLMjo6c2V0Q29udGVudHNUb0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJXSzI6OnNldE1hc2tMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyV0sy
OjpzZXRSZXBsaWNhdGVkQnlMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
V0syOjpzZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcldL
Mjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJXSzI6OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJXSzI6OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJXSzI6OmRp
ZFN5bmNocm9uaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJXSzI6OmxheWVy
Q29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyV0syOjpzeW5j
Q29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0dyYXBoaWNzTGF5ZXJXSzIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcldLMjo6bmVlZHNEaXNwbGF5UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyV0syOjp0YWtlTGF5ZXJzVG9EZWxldGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcldLMjo6c3luY0NvbXBvc2l0aW5nU3Rh
dGVGb3JUaGlzTGF5ZXJPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OldLMkdyYXBoaWNzTGF5ZXJG
YWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJXSzI6OmluaXRHcmFwaGlj
c0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpjcmVhdGUpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvR3JhcGhpY3NMYXllcldLMi5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJXSzI6OmlzTW9kaWZpZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcldLMjo6aW1hZ2UpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAgICAoV2ViS2l0
OjpXZWJDaHJvbWVDbGllbnQ6OnRhYnNUb0xpbmtzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvRHJhd2luZ0FyZWEuaDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWE6OnR5cGUp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYTo6VGlsZWREcmF3aW5nQXJlYSk6CisgICAg
ICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWE6OmRpc3BsYXkpOgorICAgICAgICAoV2ViS2l0
OjpUaWxlZERyYXdpbmdBcmVhOjpzdXNwZW5kUGFpbnRpbmcpOgorICAgICAgICAoV2ViS2l0OjpU
aWxlZERyYXdpbmdBcmVhOjpyZXN1bWVQYWludGluZyk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVk
RHJhd2luZ0FyZWE6OnNjaGVkdWxlVGlsZVVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVk
RHJhd2luZ0FyZWE6OnRpbGVVcGRhdGVUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYktpdDo6VGls
ZWREcmF3aW5nQXJlYTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmg6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2lu
Z0FyZWE6OnRleHR1cmVNYXBwZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y2hhbmdlQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjplbnRlckFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZXhpdEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0QWN0dWFs
VmlzaWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZHJhd1JlY3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1bmluc3RhbGxQYWdlT3ZlcmxheSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNoYW5nZURyYXdpbmdBcmVhVHlwZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OmZpbmRab29tYWJsZUFyZWFGb3JQb2ludCk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvVGls
ZWREcmF3aW5nQXJlYVF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJlYTo6
cGFpbnRJbnRvVXBkYXRlQ2h1bmspOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVh
OjphdHRhY2hDb21wb3NpdGluZ0NvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZERyYXdp
bmdBcmVhOjpkZXRhY2hDb21wb3NpdGluZ0NvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpUaWxl
ZERyYXdpbmdBcmVhOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6
OlRpbGVkRHJhd2luZ0FyZWE6OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMpOgorICAgICAg
ICAoV2ViS2l0OjpkaXZpZGVJbnRvVGlsZXMpOgorICAgICAgICAoV2ViS2l0Ojpjb2xsZWN0Q29t
cG9zaXRpbmdJbmZvRm9yVGhpc0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6Y29sbGVjdENvbXBv
c2l0aW5nSW5mb1JlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkRHJhd2luZ0FyZWE6
Om5vdGlmeUNvbXBvc2l0ZWRBbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdlYktpdDo6VGls
ZWREcmF3aW5nQXJlYTo6c3luY0NvbXBvc2l0aW5nTGF5ZXJzKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjppbml0aWFs
aXplV2ViUHJvY2Vzcyk6CisKIDIwMTEtMDMtMjEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeCBNYWMgcmVsZWFzZSBidWlsZHMgYWZ0ZXIgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2NzgzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQ29yZUlQQ1N1cHBvcnQvRHJhd2luZ0FyZWFNZXNzYWdlS2luZHMuaCBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9EcmF3aW5nQXJlYU1lc3NhZ2VL
aW5kcy5oCmluZGV4IDE5NzY4ODguLmE2NmYzODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9EcmF3aW5nQXJlYU1lc3NhZ2VLaW5kcy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9EcmF3aW5nQXJlYU1lc3NhZ2VLaW5k
cy5oCkBAIC00Niw2ICs0NiwxMCBAQCBlbnVtIEtpbmQgewogICAgIC8vIGluY29ycG9yYXRlZCBp
bnRvIHRoZSBiYWNraW5nIHN0b3JlLgogICAgIERpZFVwZGF0ZSwKIAorI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKyAgICBOb3RpZnlBbmltYXRpb25TdGFydGVkLAorI2VuZGlmCisK
ICNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKICAgICAvLyBDYWxsZWQgdG8gcmVxdWVz
dCBhIHRpbGUgdXBkYXRlLgogICAgIFJlcXVlc3RUaWxlVXBkYXRlLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL0NvcmVJUENTdXBwb3J0L0RyYXdpbmdBcmVhUHJveHlNZXNzYWdl
S2luZHMuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9EcmF3aW5nQXJl
YVByb3h5TWVzc2FnZUtpbmRzLmgKaW5kZXggOWRlMjBmNy4uOWZkYmU2ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL0NvcmVJUENTdXBwb3J0L0RyYXdpbmdBcmVhUHJveHlNZXNz
YWdlS2luZHMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29yZUlQQ1N1cHBvcnQvRHJh
d2luZ0FyZWFQcm94eU1lc3NhZ2VLaW5kcy5oCkBAIC0zNSw2ICszNSwxMSBAQCBuYW1lc3BhY2Ug
RHJhd2luZ0FyZWFQcm94eUxlZ2FjeU1lc3NhZ2UgewogZW51bSBLaW5kIHsKICAgICBVcGRhdGUs
CiAgICAgRGlkU2V0U2l6ZSwKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAg
QXR0YWNoQ29tcG9zaXRpbmdDb250ZXh0LAorICAgIFN5bmNDb21wb3NpdGluZ0xheWVycywKKyAg
ICBVcGRhdGVDb21wb3NpdGluZ0xheWVyQ29udGVudCwKKyNlbmRpZgogI2lmIEVOQUJMRShUSUxF
RF9CQUNLSU5HX1NUT1JFKQogICAgIEludmFsaWRhdGUsCiAgICAgVGlsZVVwZGF0ZWQsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL0xheWVyVHJlZUNvbnRleHQuaAppbmRleCAyMzNiN2FlLi4wNTRiYzlk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9MYXllclRyZWVDb250ZXh0LmgKQEAgLTQ1LDcgKzQ1
LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAKLSNpZiBQTEFURk9S
TShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShRVCkKICAgICB1aW50MzJfdCBj
b250ZXh0SUQ7CiAjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
U2hhcmVhYmxlQml0bWFwLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlQml0bWFw
LmgKaW5kZXggZjlhM2FmMC4uYTFiMGVhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL1NoYXJlYWJsZUJpdG1hcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFi
bGVCaXRtYXAuaApAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBTaGFyZWFibGVCaXRtYXBfaAog
CiAjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5jbHVkZSA8SW1hZ2UuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC03MSw2ICs3MiwxMCBAQCBwdWJsaWM6CiAKICAgICBi
b29sIGlzQmFja2VkQnlTaGFyZWRNZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZE1lbW9y
eTsgfQogCisjaWYgUExBVEZPUk0oUVQpCisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpJbWFnZT4g
Y3JlYXRlSW1hZ2UoKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIFNoYXJlYWJsZUJpdG1hcChj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiwgdm9pZCopOwogICAgIFNoYXJlYWJsZUJpdG1hcChjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiwgUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9TaGFyZWFibGVCaXRtYXBRdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvcXQvU2hhcmVhYmxlQml0bWFwUXQuY3BwCmluZGV4IDM2YzQ1YTIu
LmE3NWE1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9TaGFyZWFibGVC
aXRtYXBRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1NoYXJlYWJsZUJpdG1h
cFF0LmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlNoYXJlYWJsZUJpdG1hcC5oIgogCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRl
IDxRSW1hZ2U+CiAjaW5jbHVkZSA8UVBhaW50ZXI+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGlj
c0NvbnRleHQuaD4KQEAgLTM5LDYgKzQwLDEyIEBAIHN0YXRpYyBpbmxpbmUgUUltYWdlIGNyZWF0
ZVFJbWFnZSh2b2lkKiBkYXRhLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgcmV0dXJuIFFJ
bWFnZShyZWludGVycHJldF9jYXN0PHVjaGFyKj4oZGF0YSksIHdpZHRoLCBoZWlnaHQsIHdpZHRo
ICogNCwgUUltYWdlOjpGb3JtYXRfUkdCMzIpOwogfQogCitQYXNzUmVmUHRyPEltYWdlPiBTaGFy
ZWFibGVCaXRtYXA6OmNyZWF0ZUltYWdlKCkKK3sKKyAgICBRUGl4bWFwKiBwaXhtYXAgPSBuZXcg
UVBpeG1hcChRUGl4bWFwOjpmcm9tSW1hZ2UoY3JlYXRlUUltYWdlKGRhdGEoKSwgbV9zaXplLndp
ZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpKTsKKyAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0
ZShwaXhtYXApOworfQorCiBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gU2hhcmVhYmxlQml0
bWFwOjpjcmVhdGVHcmFwaGljc0NvbnRleHQoKQogewogICAgIFFJbWFnZSogaW1hZ2UgPSBuZXcg
UUltYWdlKGNyZWF0ZVFJbWFnZShkYXRhKCksIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0
KCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9VcGRhdGVDaHVuay5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvVXBkYXRlQ2h1bmsuY3BwCmluZGV4IDc3MmQ0
OTkuLjg3YWI0YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9VcGRhdGVD
aHVuay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmNwcApA
QCAtNDYsOCArNDYsOSBAQCBVcGRhdGVDaHVuazo6VXBkYXRlQ2h1bmsoKQogewogfQogCi1VcGRh
dGVDaHVuazo6VXBkYXRlQ2h1bmsoY29uc3QgSW50UmVjdCYgcmVjdCkKK1VwZGF0ZUNodW5rOjpV
cGRhdGVDaHVuayhjb25zdCBJbnRSZWN0JiByZWN0LCBGbGFncyBmbGFncykKICAgICA6IG1fcmVj
dChyZWN0KQorICAgICwgbV9mbGFncyhmbGFncykKICAgICAsIG1fc2hhcmVkTWVtb3J5KFNoYXJl
ZE1lbW9yeTo6Y3JlYXRlKHNpemUoKSkpCiB7CiB9CkBAIC02OCw2ICs2OSw3IEBAIHZvaWQgVXBk
YXRlQ2h1bms6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIpIGNvbnN0
CiAgICAgaWYgKG1fc2hhcmVkTWVtb3J5LT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1v
cnk6OlJlYWRPbmx5KSkgewogICAgICAgICBlbmNvZGVyLT5lbmNvZGUodHJ1ZSk7CiAgICAgICAg
IGVuY29kZXItPmVuY29kZShoYW5kbGUpOworICAgICAgICBlbmNvZGVyLT5lbmNvZGVVSW50MzIo
bV9mbGFncyk7CiAgICAgfSBlbHNlCiAgICAgICAgIGVuY29kZXItPmVuY29kZShmYWxzZSk7CiAK
QEAgLTk3LDE5ICs5OSwxOSBAQCBib29sIFVwZGF0ZUNodW5rOjpkZWNvZGUoQ29yZUlQQzo6QXJn
dW1lbnREZWNvZGVyKiBkZWNvZGVyLCBVcGRhdGVDaHVuayYgY2h1bmspCiAgICAgaWYgKCFkZWNv
ZGVyLT5kZWNvZGUoaGFuZGxlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgdWludDMy
X3QgZmxhZ3M7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVVSW50MzIoZmxhZ3MpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBjaHVuay5tX2ZsYWdzID0gRmxhZ3MoZmxhZ3MpOworCiAg
ICAgY2h1bmsubV9zaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShoYW5kbGUsIFNo
YXJlZE1lbW9yeTo6UmVhZE9ubHkpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBzaXplX3QgVXBk
YXRlQ2h1bms6OnNpemUoKSBjb25zdAogewotICAgIGludCBicHA7Ci0gICAgaWYgKFFQaXhtYXA6
OmRlZmF1bHREZXB0aCgpID09IDE2KQotICAgICAgICBicHAgPSAyOwotICAgIGVsc2UKLSAgICAg
ICAgYnBwID0gNDsKLQotICAgIHJldHVybiAoKG1fcmVjdC53aWR0aCgpICogYnBwICsgMykgJiB+
MHgzKQorICAgIHJldHVybiAoKG1fcmVjdC53aWR0aCgpICogYnBwKCkgKyAzKSAmIH4weDMpCiAg
ICAgICAgICAgICogbV9yZWN0LmhlaWdodCgpOwogfQogCkBAIC0xMjAsMTQgKzEyMiwxMyBAQCBR
SW1hZ2UgVXBkYXRlQ2h1bms6OmNyZWF0ZUltYWdlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIFFJ
bWFnZSgpOwogCiAgICAgUUltYWdlOjpGb3JtYXQgZm9ybWF0OwotICAgIGludCBicHA7Ci0gICAg
aWYgKFFQaXhtYXA6OmRlZmF1bHREZXB0aCgpID09IDE2KSB7CisgICAgY29uc3QgaW50IGJwcCA9
IHRoaXMtPmJwcCgpOworICAgIGlmIChtX2ZsYWdzICYgSGFzQWxwaGEpCisgICAgICAgIGZvcm1h
dCA9IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkOworICAgIGVsc2UgaWYgKGJw
cCA9PSAyKQogICAgICAgICBmb3JtYXQgPSBRSW1hZ2U6OkZvcm1hdF9SR0IxNjsKLSAgICAgICAg
YnBwID0gMjsKLSAgICB9IGVsc2UgeworICAgIGVsc2UKICAgICAgICAgZm9ybWF0ID0gUUltYWdl
OjpGb3JtYXRfUkdCMzI7Ci0gICAgICAgIGJwcCA9IDQ7Ci0gICAgfQogCiAgICAgcmV0dXJuIFFJ
bWFnZShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihtX3NoYXJlZE1lbW9yeS0+ZGF0
YSgpKSwgbV9yZWN0LndpZHRoKCksIG1fcmVjdC5oZWlnaHQoKSwgKG1fcmVjdC53aWR0aCgpICog
YnBwICsgMykgJiB+MHgzLCBmb3JtYXQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL3F0L1VwZGF0ZUNodW5rLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvVXBkYXRl
Q2h1bmsuaAppbmRleCA2NjQwNTZhLi43NjIxMWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvcXQvVXBkYXRlQ2h1bmsuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQv
VXBkYXRlQ2h1bmsuaApAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBVcGRhdGVDaHVua19oCiAK
ICNpbmNsdWRlIDxRSW1hZ2U+CisjaW5jbHVkZSA8UVBpeG1hcD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0ludFJlY3QuaD4KICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKIApAQCAtNDAsOCArNDEsMTMg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFVwZGF0ZUNodW5rIHsKIHB1YmxpYzoKKyAg
ICBlbnVtIEZsYWdzIHsKKyAgICAgICAgTm9GbGFncyA9IDAsCisgICAgICAgIEhhc0FscGhhID0g
MQorICAgIH07CisKICAgICBVcGRhdGVDaHVuaygpOwotICAgIFVwZGF0ZUNodW5rKGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKTsKKyAgICBVcGRhdGVDaHVuayhjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiwgRmxhZ3MgZmxhZ3MgPSBOb0ZsYWdzKTsKICAgICB+VXBkYXRlQ2h1bmsoKTsKIAogICAgIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KQEAg
LTU0LDggKzYwLDE2IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBzaXplX3Qgc2l6ZSgpIGNv
bnN0OworICAgIGlubGluZSBpbnQgYnBwKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2Zs
YWdzICYgSGFzQWxwaGEpCisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgcmV0dXJuIFFQ
aXhtYXA6OmRlZmF1bHREZXB0aCgpID09IDE2ID8gMiA6IDQ7CisgICAgfQorCiAKICAgICBXZWJD
b3JlOjpJbnRSZWN0IG1fcmVjdDsKKyAgICBGbGFncyBtX2ZsYWdzOwogCiAgICAgbXV0YWJsZSBS
ZWZQdHI8U2hhcmVkTWVtb3J5PiBtX3NoYXJlZE1lbW9yeTsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L0NsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9DbGllbnRJbXBsLmNwcAppbmRleCA4MTk3MjM2Li5lZmIxMjcy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L0NsaWVudEltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvQ2xpZW50SW1wbC5jcHAK
QEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDbGllbnRJ
bXBsLmgiCiAKKyNpbmNsdWRlICJVcGRhdGVDaHVuay5oIgogI2luY2x1ZGUgIldlYkZyYW1lUHJv
eHkuaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXS1N0cmluZ1F0LmgiCkBA
IC05OSw5ICsxMDAsOCBAQCB2b2lkIHF0X3drX2RpZFJlY2VpdmVUaXRsZUZvckZyYW1lKFdLUGFn
ZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiB0aXRsZSwgV0tGcmFtZVJlZgogCiB2b2lkIHF0X3drX2Rp
ZEZpcnN0TGF5b3V0Rm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdL
VHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAgICBpZiAoIVdL
RnJhbWVJc01haW5GcmFtZShmcmFtZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBlbWl0IHRvUVdL
UGFnZShjbGllbnRJbmZvKS0+aW5pdGlhbExheW91dENvbXBsZXRlZCgpOworICAgIC8vIFdlIGln
bm9yZSB0aGlzIGFuZCBzZW5kIGluaXRpYWwgbGF5b3V0IGNvbXBsZXRlIHNpZ25hbCwgd2hlbiB0
aGUgZmlyc3QgdmlzdWFsbHkgbm9uLWVtcHR5IGxheW91dCBjb21wbGV0ZXMuCisgICAgLy8gc2Vl
IHF0X3drX2RpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1lKCkKIH0KIAogdm9p
ZCBxdF93a19kaWRSZW1vdmVGcmFtZUZyb21IaWVyYXJjaHkoV0tQYWdlUmVmIHBhZ2UsIFdLRnJh
bWVSZWYgZnJhbWUsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykK
QEAgLTExMyw3ICsxMTMsNyBAQCB2b2lkIHF0X3drX2RpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxh
eW91dEZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYQogewogICAgIGlmICgh
V0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKICAgICAgICAgcmV0dXJuOwotICAgIC8vIEZJWE1F
OiBlbWl0IHRvV0tWaWV3KGNsaWVudEluZm8pLT5pbml0aWFsTGF5b3V0Q29tcGxldGVkKCk7Cisg
ICAgZW1pdCB0b1FXS1BhZ2UoY2xpZW50SW5mbyktPmluaXRpYWxMYXlvdXRDb21wbGV0ZWQoKTsK
IH0KIAogdm9pZCBxdF93a19kaWRTdGFydFByb2dyZXNzKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xZ3JhcGhpY3N3a3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xZ3JhcGhpY3N3a3ZpZXcuY3BwCmluZGV4IDAzODFkNzMuLjRjMTExYTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWdyYXBoaWNzd2t2aWV3LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FncmFwaGljc3drdmlldy5jcHAKQEAg
LTM1LDEwICszNSwxMyBAQAogI2luY2x1ZGUgPFFHcmFwaGljc1ZpZXc+CiAjaW5jbHVkZSA8UU1l
bnU+CiAjaW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8UVByb3BlcnR5QW5pbWF0aW9uPgog
I2luY2x1ZGUgPFFTY3JvbGxCYXI+CiAjaW5jbHVkZSA8UVN0eWxlT3B0aW9uR3JhcGhpY3NJdGVt
PgogI2luY2x1ZGUgPFFVcmw+CisjaWYgIUVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogI2lu
Y2x1ZGUgPFF0RGVidWc+CisjZW5kaWYKICNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgpAQCAtNTAsMTYgKzUzLDMyIEBAIHN0cnVjdCBRR3JhcGhpY3NXS1ZpZXdQcml2YXRlIHsKICAg
ICBRR3JhcGhpY3NXS1ZpZXdQcml2YXRlKFFHcmFwaGljc1dLVmlldyogdmlldyk7CiAgICAgV0tQ
YWdlUmVmIHBhZ2VSZWYoKSBjb25zdCB7IHJldHVybiBwYWdlLT5wYWdlUmVmKCk7IH0KIAorICAg
IHZvaWQgdXBkYXRlVmlld3BvcnRTaXplKCk7CiAgICAgdm9pZCBvblNjYWxlQ2hhbmdlZCgpOwog
ICAgIHZvaWQgY29tbWl0U2NhbGUoKTsKKyAgICBpbmxpbmUgdm9pZCByZWN0c05lZWRVcGRhdGUo
Y29uc3QgUUxpc3Q8UVJlY3RGPiYgcmVjdHMpOworICAgIGlubGluZSBxcmVhbCB2aXN1YWxGZWVk
YmFja09wYWNpdHkoKSBjb25zdDsKKyAgICBpbmxpbmUgdm9pZCBzZXRWaXN1YWxGZWVkYmFja09w
YWNpdHkocXJlYWwpOworICAgIHZvaWQgY2xlYXJWaXN1YWxGZWVkYmFjaygpOwogCiAgICAgUUdy
YXBoaWNzV0tWaWV3KiBxOwogICAgIFFXS1BhZ2UqIHBhZ2U7CiAgICAgUVNoYXJlZFBvaW50ZXI8
UU1lbnU+IGFjdGl2ZU1lbnU7CiAgICAgUnVuTG9vcDo6VGltZXI8UUdyYXBoaWNzV0tWaWV3UHJp
dmF0ZT4gbV9zY2FsZUNvbW1pdFRpbWVyOwogICAgIGJvb2wgbV9pc0NoYW5naW5nU2NhbGU7CisK
KyAgICBxcmVhbCBtX3Zpc3VhbEZlZWRiYWNrT3BhY2l0eTsKKyAgICBRUHJvcGVydHlBbmltYXRp
b24qIGNvbnN0IG1fdmlzdWFsRmVlZGJhY2tPcGFjaXR5QW5pbWF0aW9uOworICAgIFFMaXN0PFFS
ZWN0Rj4gbV92aXN1YWxGZWVkYmFja1JlY3RzOwogfTsKIAordm9pZCBRR3JhcGhpY3NXS1ZpZXdQ
cml2YXRlOjp1cGRhdGVWaWV3cG9ydFNpemUoKQoreworICAgIC8vIE5PVEU6IGNhbGwgZ2VvbWV0
cnkoKSBhcyBzZXRHZW9tZXRyeSBlbnN1cmVzIHRoYXQKKyAgICAvLyB0aGUgZ2VvbWV0cnkgaXMg
d2l0aGluIGxlZ2FsIGJvdW5kcyAobWluaW11bVNpemUsIG1heGltdW1TaXplKQorICAgIHBhZ2Ut
PnNldFZpZXdwb3J0U2l6ZShxLT5nZW9tZXRyeSgpLnNpemUoKS50b1NpemUoKSk7Cit9CisKIFFH
cmFwaGljc1dLVmlldzo6UUdyYXBoaWNzV0tWaWV3KFFXS0NvbnRleHQqIGNvbnRleHQsIEJhY2tp
bmdTdG9yZVR5cGUgYmFja2luZ1N0b3JlVHlwZSwgUUdyYXBoaWNzSXRlbSogcGFyZW50KQogICAg
IDogUUdyYXBoaWNzV2lkZ2V0KHBhcmVudCkKICAgICAsIGQobmV3IFFHcmFwaGljc1dLVmlld1By
aXZhdGUodGhpcykpCkBAIC02NywxNCArODYsMjUgQEAgUUdyYXBoaWNzV0tWaWV3OjpRR3JhcGhp
Y3NXS1ZpZXcoUVdLQ29udGV4dCogY29udGV4dCwgQmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3QK
ICAgICBzZXRGb2N1c1BvbGljeShRdDo6U3Ryb25nRm9jdXMpOwogICAgIHNldEFjY2VwdEhvdmVy
RXZlbnRzKHRydWUpOwogCisgICAgRHJhd2luZ0FyZWFUeXBlIGFyZWFUeXBlID0gRHJhd2luZ0Fy
ZWFUeXBlQ2h1bmtlZFVwZGF0ZTsKIAorICAgIGlmIChiYWNraW5nU3RvcmVUeXBlID09IFNpbXBs
ZSkKKyAgICAgICAgYXJlYVR5cGUgPSBEcmF3aW5nQXJlYVR5cGVDaHVua2VkVXBkYXRlOworICAg
IGVsc2UgewogI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIGlmIChiYWNraW5n
U3RvcmVUeXBlID09IFRpbGVkKQotICAgICAgICBjb25uZWN0KHRoaXMsIFNJR05BTChzY2FsZUNo
YW5nZWQoKSksIHRoaXMsIFNMT1Qob25TY2FsZUNoYW5nZWQoKSkpOworICAgICAgICBhcmVhVHlw
ZSA9IERyYXdpbmdBcmVhVHlwZVRpbGVkOworI2Vsc2UKKyAgICAgICAgcVdhcm5pbmcoKSA8PCAi
Q2hhbmdpbmcgdG8gdGlsZWQgZHJhd2luZyBhcmVhIG5vdCBzdXBwb3J0ZWQiOwogI2VuZGlmCisg
ICAgfQorCisgICAgLy8gVGhpcyBtdXN0IGJlIHNldCBhZnRlciB0aGUgZCBpcyBhc3NpZ25lZCBi
ZWNhdXNlIHRoZSBvYmplY3QgYWNjZXNzIHRoZSBwcm9wZXJ0eS4KKyAgICAvLyBUbyBhdm9pZCBh
Y2Nlc3NpbmcgYSBkYW5nbGluZyBwb2ludGVyLCB3ZSBzZXQgdGhlIHRhcmdldCBoZXJlLgorICAg
IGQtPm1fdmlzdWFsRmVlZGJhY2tPcGFjaXR5QW5pbWF0aW9uLT5zZXRUYXJnZXRPYmplY3QodGhp
cyk7CisgICAgZC0+bV92aXN1YWxGZWVkYmFja09wYWNpdHlBbmltYXRpb24tPnNldFByb3BlcnR5
TmFtZSgidmlzdWFsRmVlZGJhY2tPcGFjaXR5Iik7CiAKICAgICBkLT5wYWdlID0gbmV3IFFXS1Bh
Z2UoY29udGV4dCk7Ci0gICAgZC0+cGFnZS0+ZC0+aW5pdCh0aGlzLCBiYWNraW5nU3RvcmVUeXBl
KTsKKyAgICBkLT5wYWdlLT5kLT5pbml0KHRoaXMsIGFyZWFUeXBlKTsKICAgICBjb25uZWN0KGQt
PnBhZ2UsIFNJR05BTCh0aXRsZUNoYW5nZWQoUVN0cmluZykpLCB0aGlzLCBTSUdOQUwodGl0bGVD
aGFuZ2VkKFFTdHJpbmcpKSk7CiAgICAgY29ubmVjdChkLT5wYWdlLCBTSUdOQUwobG9hZFN0YXJ0
ZWQoKSksIHRoaXMsIFNJR05BTChsb2FkU3RhcnRlZCgpKSk7CiAgICAgY29ubmVjdChkLT5wYWdl
LCBTSUdOQUwobG9hZEZpbmlzaGVkKGJvb2wpKSwgdGhpcywgU0lHTkFMKGxvYWRGaW5pc2hlZChi
b29sKSkpOwpAQCAtMTAwLDYgKzEzMCwxNyBAQCBRV0tQYWdlKiBRR3JhcGhpY3NXS1ZpZXc6OnBh
Z2UoKSBjb25zdAogdm9pZCBRR3JhcGhpY3NXS1ZpZXc6OnBhaW50KFFQYWludGVyKiBwYWludGVy
LCBjb25zdCBRU3R5bGVPcHRpb25HcmFwaGljc0l0ZW0qIG9wdGlvbiwgUVdpZGdldCopCiB7CiAg
ICAgcGFnZSgpLT5kLT5wYWludChwYWludGVyLCBvcHRpb24tPmV4cG9zZWRSZWN0LnRvQWxpZ25l
ZFJlY3QoKSk7CisKKyAgICBjb25zdCBRQ29sb3IgZmVlZGJhY2tSZWN0Q29sb3IoMCwgMCwgMCwg
MTI1KTsKKyAgICBjb25zdCBxcmVhbCByb3VuZGVkUmVjdFJhZGl1cyA9IDUuMGY7CisgICAgY29u
c3QgaW50IGZlZWRiYWNrUmVjdENvdW50ID0gZC0+bV92aXN1YWxGZWVkYmFja1JlY3RzLnNpemUo
KTsKKyAgICBwYWludGVyLT5zZXRQZW4oUXQ6Ok5vUGVuKTsKKyAgICBwYWludGVyLT5zZXRCcnVz
aChmZWVkYmFja1JlY3RDb2xvcik7CisgICAgcGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRl
cjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKyAgICBwYWludGVyLT5zZXRPcGFjaXR5KGQtPm1fdmlz
dWFsRmVlZGJhY2tPcGFjaXR5KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZlZWRiYWNrUmVj
dENvdW50OyArK2kpIHsKKyAgICAgICAgcGFpbnRlci0+ZHJhd1JvdW5kZWRSZWN0KGQtPm1fdmlz
dWFsRmVlZGJhY2tSZWN0cy5hdChpKSwgcm91bmRlZFJlY3RSYWRpdXMsIHJvdW5kZWRSZWN0UmFk
aXVzKTsKKyAgICB9CiB9CiAKIHZvaWQgUUdyYXBoaWNzV0tWaWV3OjpzZXRHZW9tZXRyeShjb25z
dCBRUmVjdEYmIHJlY3QpCkBAIC0xMTQsNiArMTU1LDM1IEBAIHZvaWQgUUdyYXBoaWNzV0tWaWV3
OjpzZXRHZW9tZXRyeShjb25zdCBRUmVjdEYmIHJlY3QpCiAgICAgcGFnZSgpLT5zZXRWaWV3cG9y
dFNpemUoZ2VvbWV0cnkoKS5zaXplKCkudG9TaXplKCkpOwogfQogCit2b2lkIFFHcmFwaGljc1dL
Vmlldzo6c2V0QmFja2luZ1N0b3JlVHlwZShCYWNraW5nU3RvcmVUeXBlIGJhY2tpbmdTdG9yZVR5
cGUpCit7CisgICAgRHJhd2luZ0FyZWFUeXBlIGFyZWFUeXBlID0gRHJhd2luZ0FyZWFUeXBlQ2h1
bmtlZFVwZGF0ZTsKKworICAgIGlmIChiYWNraW5nU3RvcmVUeXBlID09IFNpbXBsZSkKKyAgICAg
ICAgYXJlYVR5cGUgPSBEcmF3aW5nQXJlYVR5cGVDaHVua2VkVXBkYXRlOworICAgIGVsc2Ugewor
I2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgICAgICBhcmVhVHlwZSA9IERyYXdp
bmdBcmVhVHlwZVRpbGVkOworI2Vsc2UKKyAgICAgICAgcVdhcm5pbmcoKSA8PCAiQ2hhbmdpbmcg
dG8gdGlsZWQgZHJhd2luZyBhcmVhIG5vdCBzdXBwb3J0ZWQiOworI2VuZGlmCisgICAgfQorCisg
ICAgcGFnZSgpLT5kLT5jdXJyZW50RHJhd2luZ0FyZWFUeXBlID0gYXJlYVR5cGU7CisgICAgcGFn
ZSgpLT5kLT5wYWdlLT5jaGFuZ2VEcmF3aW5nQXJlYVR5cGUoYXJlYVR5cGUpOworfQorCitRR3Jh
cGhpY3NXS1ZpZXc6OkJhY2tpbmdTdG9yZVR5cGUgUUdyYXBoaWNzV0tWaWV3OjpiYWNraW5nU3Rv
cmVUeXBlKCkgY29uc3QKK3sKKyAgICBCYWNraW5nU3RvcmVUeXBlIGFyZWFUeXBlID0gU2ltcGxl
OworCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgaWYgKHBhZ2UoKS0+ZC0+
Y3VycmVudERyYXdpbmdBcmVhVHlwZSA9PSBEcmF3aW5nQXJlYVR5cGVUaWxlZCkKKyAgICAgICAg
YXJlYVR5cGUgPSBUaWxlZDsKKyNlbmRpZgorICAgIHJldHVybiBhcmVhVHlwZTsKK30KKwogdm9p
ZCBRR3JhcGhpY3NXS1ZpZXc6OmxvYWQoY29uc3QgUVVybCYgdXJsKQogewogICAgIHBhZ2UoKS0+
bG9hZCh1cmwpOwpAQCAtMjA1LDcgKzI3NSwxOSBAQCBib29sIFFHcmFwaGljc1dLVmlldzo6Zm9j
dXNOZXh0UHJldkNoaWxkKGJvb2wgbmV4dCkKICovCiBRVmFyaWFudCBRR3JhcGhpY3NXS1ZpZXc6
Oml0ZW1DaGFuZ2UoR3JhcGhpY3NJdGVtQ2hhbmdlIGNoYW5nZSwgY29uc3QgUVZhcmlhbnQmIHZh
bHVlKQogewotICAgIC8vIEhlcmUgc28gdGhhdCBpdCBjYW4gYmUgcmVpbXBsZW1lbnRlZCB3aXRo
b3V0IGJyZWFraW5nIEFCSS4KKyAgICBpZiAoY2hhbmdlID09IEl0ZW1WaXNpYmxlQ2hhbmdlKSB7
CisgICAgICAgIGlmICh2YWx1ZS5jYW5Db252ZXJ0PGJvb2w+KCkpIHsKKyAgICAgICAgICAgIERy
YXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gcGFnZSgpLT5kLT5wYWdlLT5kcmF3aW5nQXJl
YSgpOworICAgICAgICAgICAgYm9vbCBzaG91bGRCZVZpc2libGUgPSB2YWx1ZS50b0Jvb2woKTsK
KyAgICAgICAgICAgIGRyYXdpbmdBcmVhLT5zZXRQYWdlSXNWaXNpYmxlKHNob3VsZEJlVmlzaWJs
ZSk7CisKKyAgICAgICAgICAgIC8vIFRoaXMgaXRlbSBtaWdodCBoYXZlIGJlZW4gcmVzaXplZCBk
dXJpbmcgYmVpbmcKKyAgICAgICAgICAgIC8vIGludmlzaWJsZS4gVXBkYXRlIHRoZSBzaXplIGlu
IGFueSBjYXNlLgorICAgICAgICAgICAgaWYgKHNob3VsZEJlVmlzaWJsZSkKKyAgICAgICAgICAg
ICAgICBkLT51cGRhdGVWaWV3cG9ydFNpemUoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dmFsdWU7CisgICAgfQogICAgIHJldHVybiBRR3JhcGhpY3NXaWRnZXQ6Oml0ZW1DaGFuZ2UoY2hh
bmdlLCB2YWx1ZSk7CiB9CiAKQEAgLTM4MCw3ICs0NjIsMTMgQEAgUUdyYXBoaWNzV0tWaWV3UHJp
dmF0ZTo6UUdyYXBoaWNzV0tWaWV3UHJpdmF0ZShRR3JhcGhpY3NXS1ZpZXcqIHZpZXcpCiAgICAg
LCBhY3RpdmVNZW51KDApCiAgICAgLCBtX3NjYWxlQ29tbWl0VGltZXIoUnVuTG9vcDo6Y3VycmVu
dCgpLCB0aGlzLCAmUUdyYXBoaWNzV0tWaWV3UHJpdmF0ZTo6Y29tbWl0U2NhbGUpCiAgICAgLCBt
X2lzQ2hhbmdpbmdTY2FsZShmYWxzZSkKKyAgICAsIG1fdmlzdWFsRmVlZGJhY2tPcGFjaXR5KDAp
CisgICAgLCBtX3Zpc3VhbEZlZWRiYWNrT3BhY2l0eUFuaW1hdGlvbihuZXcgUVByb3BlcnR5QW5p
bWF0aW9uKHZpZXcpKQogeworICAgIG1fdmlzdWFsRmVlZGJhY2tPcGFjaXR5QW5pbWF0aW9uLT5z
ZXREdXJhdGlvbig1MDApOworICAgIG1fdmlzdWFsRmVlZGJhY2tPcGFjaXR5QW5pbWF0aW9uLT5z
ZXRTdGFydFZhbHVlKDEuZik7CisgICAgbV92aXN1YWxGZWVkYmFja09wYWNpdHlBbmltYXRpb24t
PnNldEVuZFZhbHVlKDAuZik7CisgICAgbV92aXN1YWxGZWVkYmFja09wYWNpdHlBbmltYXRpb24t
PnNldEVhc2luZ0N1cnZlKFFFYXNpbmdDdXJ2ZTo6SW5RdWFkKTsKIH0KIAogUVJlY3RGIFFHcmFw
aGljc1dLVmlldzo6dmlzaWJsZVJlY3QoKSBjb25zdApAQCAtNDAxLDE3ICs0ODksMjcgQEAgUVJl
Y3RGIFFHcmFwaGljc1dLVmlldzo6dmlzaWJsZVJlY3QoKSBjb25zdAogdm9pZCBRR3JhcGhpY3NX
S1ZpZXc6OnByZXBhcmVTY2FsZUNoYW5nZSgpCiB7CiAjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdf
U1RPUkUpCisgICAgRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBwYWdlKCktPmQtPnBh
Z2UtPmRyYXdpbmdBcmVhKCk7CisgICAgaWYgKCFkcmF3aW5nQXJlYSB8fCBkcmF3aW5nQXJlYS0+
dHlwZSgpICE9IERyYXdpbmdBcmVhVHlwZVRpbGVkKQorICAgICAgICByZXR1cm47CisKICAgICBB
U1NFUlQoIWQtPm1faXNDaGFuZ2luZ1NjYWxlKTsKICAgICBkLT5tX2lzQ2hhbmdpbmdTY2FsZSA9
IHRydWU7CiAgICAgZC0+bV9zY2FsZUNvbW1pdFRpbWVyLnN0b3AoKTsKKyAgICBkcmF3aW5nQXJl
YS0+c2V0VXBkYXRlc0VuYWJsZWQoZmFsc2UpOwogI2VuZGlmCiB9CiAKIHZvaWQgUUdyYXBoaWNz
V0tWaWV3Ojpjb21taXRTY2FsZUNoYW5nZSgpCiB7CiAjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdf
U1RPUkUpCisgICAgRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBwYWdlKCktPmQtPnBh
Z2UtPmRyYXdpbmdBcmVhKCk7CisgICAgaWYgKCFkcmF3aW5nQXJlYSB8fCBkcmF3aW5nQXJlYS0+
dHlwZSgpICE9IERyYXdpbmdBcmVhVHlwZVRpbGVkKQorICAgICAgICByZXR1cm47CisKICAgICBB
U1NFUlQoZC0+bV9pc0NoYW5naW5nU2NhbGUpOwogICAgIGQtPm1faXNDaGFuZ2luZ1NjYWxlID0g
ZmFsc2U7CisgICAgZHJhd2luZ0FyZWEtPnNldFVwZGF0ZXNFbmFibGVkKHRydWUpOwogICAgIGQt
PmNvbW1pdFNjYWxlKCk7CiAjZW5kaWYKIH0KQEAgLTQxOSw2ICs1MTcsMTAgQEAgdm9pZCBRR3Jh
cGhpY3NXS1ZpZXc6OmNvbW1pdFNjYWxlQ2hhbmdlKCkKIHZvaWQgUUdyYXBoaWNzV0tWaWV3UHJp
dmF0ZTo6b25TY2FsZUNoYW5nZWQoKQogewogI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JF
KQorICAgIERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gcGFnZS0+ZC0+cGFnZS0+ZHJh
d2luZ0FyZWEoKTsKKyAgICBpZiAoIWRyYXdpbmdBcmVhIHx8IGRyYXdpbmdBcmVhLT50eXBlKCkg
IT0gRHJhd2luZ0FyZWFUeXBlVGlsZWQpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmICghbV9p
c0NoYW5naW5nU2NhbGUpCiAgICAgICAgIG1fc2NhbGVDb21taXRUaW1lci5zdGFydE9uZVNob3Qo
MC4xKTsKICNlbmRpZgpAQCAtNDI4LDYgKzUzMCw5IEBAIHZvaWQgUUdyYXBoaWNzV0tWaWV3UHJp
dmF0ZTo6Y29tbWl0U2NhbGUoKQogewogI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQog
ICAgIERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gcGFnZS0+ZC0+cGFnZS0+ZHJhd2lu
Z0FyZWEoKTsKKyAgICBpZiAoIWRyYXdpbmdBcmVhIHx8IGRyYXdpbmdBcmVhLT50eXBlKCkgIT0g
RHJhd2luZ0FyZWFUeXBlVGlsZWQpCisgICAgICAgIHJldHVybjsKKwogICAgIGZsb2F0IG5ld1Nj
YWxlID0gcS0+c2NhbGUoKTsKICAgICBpZiAoZHJhd2luZ0FyZWEtPnR5cGUoKSA9PSBEcmF3aW5n
QXJlYVR5cGVUaWxlZCkgewogICAgICAgICBUaWxlZERyYXdpbmdBcmVhUHJveHkqIHRpbGVkRHJh
d2luZ0FyZWEgPSBzdGF0aWNfY2FzdDxUaWxlZERyYXdpbmdBcmVhUHJveHkqPihkcmF3aW5nQXJl
YSk7CkBAIC00NDAsNCArNTQ1LDMyIEBAIHZvaWQgUUdyYXBoaWNzV0tWaWV3UHJpdmF0ZTo6Y29t
bWl0U2NhbGUoKQogI2VuZGlmCiB9CiAKK2lubGluZSB2b2lkIFFHcmFwaGljc1dLVmlld1ByaXZh
dGU6OnJlY3RzTmVlZFVwZGF0ZShjb25zdCBRTGlzdDxRUmVjdEY+JiByZWN0cykKK3sKKyAgICBj
b25zdCBpbnQgcmVjdHNDb3VudCA9IHJlY3RzLnNpemUoKTsKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IHJlY3RzQ291bnQ7ICsraSkKKyAgICAgICAgcS0+dXBkYXRlKHJlY3RzLmF0KGkpKTsKK30K
KworaW5saW5lIHFyZWFsIFFHcmFwaGljc1dLVmlld1ByaXZhdGU6OnZpc3VhbEZlZWRiYWNrT3Bh
Y2l0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmlzdWFsRmVlZGJhY2tPcGFjaXR5OworfQor
CitpbmxpbmUgdm9pZCBRR3JhcGhpY3NXS1ZpZXdQcml2YXRlOjpzZXRWaXN1YWxGZWVkYmFja09w
YWNpdHkocXJlYWwgbmV3VmFsdWUpCit7CisgICAgbV92aXN1YWxGZWVkYmFja09wYWNpdHkgPSBu
ZXdWYWx1ZTsKKyAgICByZWN0c05lZWRVcGRhdGUobV92aXN1YWxGZWVkYmFja1JlY3RzKTsKKyAg
ICBpZiAobmV3VmFsdWUgPT0gMC5mKQorICAgICAgICBtX3Zpc3VhbEZlZWRiYWNrUmVjdHMuY2xl
YXIoKTsKKworfQorCit2b2lkIFFHcmFwaGljc1dLVmlld1ByaXZhdGU6OmNsZWFyVmlzdWFsRmVl
ZGJhY2soKQoreworICAgIG1fdmlzdWFsRmVlZGJhY2tPcGFjaXR5QW5pbWF0aW9uLT5zdG9wKCk7
CisgICAgbV92aXN1YWxGZWVkYmFja09wYWNpdHkgPSAwLmY7CisgICAgbV92aXN1YWxGZWVkYmFj
a1JlY3RzLmNsZWFyKCk7Cit9CisKICNpbmNsdWRlICJtb2NfcWdyYXBoaWNzd2t2aWV3LmNwcCIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcWdyYXBoaWNzd2t2
aWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FncmFwaGljc3drdmlldy5o
CmluZGV4IDAzZmM3MjIuLjk3OThhMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcWdyYXBoaWNzd2t2aWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xZ3JhcGhpY3N3a3ZpZXcuaApAQCAtMjEsNiArMjEsNyBAQCBjbGFzcyBRV0VC
S0lUX0VYUE9SVCBRR3JhcGhpY3NXS1ZpZXcgOiBwdWJsaWMgUUdyYXBoaWNzV2lkZ2V0IHsKICAg
ICBRX09CSkVDVAogICAgIFFfUFJPUEVSVFkoUVN0cmluZyB0aXRsZSBSRUFEIHRpdGxlKQogICAg
IFFfUFJPUEVSVFkoUVVybCB1cmwgUkVBRCB1cmwgV1JJVEUgc2V0VXJsKQorICAgIFFfUFJJVkFU
RV9QUk9QRVJUWShkLCBxcmVhbCB2aXN1YWxGZWVkYmFja09wYWNpdHkgUkVBRCB2aXN1YWxGZWVk
YmFja09wYWNpdHkgV1JJVEUgc2V0VmlzdWFsRmVlZGJhY2tPcGFjaXR5KTsKIAogcHVibGljOgog
ICAgIGVudW0gQmFja2luZ1N0b3JlVHlwZSB7IFNpbXBsZSwgVGlsZWQgfTsKQEAgLTMxLDYgKzMy
LDggQEAgcHVibGljOgogICAgIFFXS1BhZ2UqIHBhZ2UoKSBjb25zdDsKIAogICAgIHZpcnR1YWwg
dm9pZCBzZXRHZW9tZXRyeShjb25zdCBRUmVjdEYmKTsKKyAgICB2b2lkIHNldEJhY2tpbmdTdG9y
ZVR5cGUoQmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBlKTsKKyAgICBCYWNraW5nU3Rv
cmVUeXBlIGJhY2tpbmdTdG9yZVR5cGUoKSBjb25zdDsKIAogICAgIHZvaWQgbG9hZChjb25zdCBR
VXJsJik7CiAgICAgdm9pZCBzZXRVcmwoY29uc3QgUVVybCYpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXdrcGFnZS5jcHAKaW5kZXggYTE2MjkxOC4uZDgyMDdiZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a3BhZ2UuY3BwCkBAIC0zNiw2ICszNiw3
IEBACiAjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiVGlsZWREcmF3aW5nQXJlYVByb3h5LmgiCisjaW5jbHVk
ZSAiVXBkYXRlQ2h1bmsuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2Vi
Q29udGV4dE1lbnVQcm94eVF0LmgiCiAjaW5jbHVkZSAiV2ViRXZlbnRGYWN0b3J5UXQuaCIKQEAg
LTQ2LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDxRQWN0aW9uPgogI2luY2x1ZGUgPFFBcHBsaWNhdGlv
bj4KICNpbmNsdWRlIDxRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQ+CisjaW5jbHVkZSA8UUdyYXBo
aWNzV2lkZ2V0PgogI2luY2x1ZGUgPFFTdHlsZT4KICNpbmNsdWRlIDxRVG91Y2hFdmVudD4KICNp
bmNsdWRlIDxRdERlYnVnPgpAQCAtODcsMTEgKzg5LDExIEBAIHN0YXRpYyBXZWJDb3JlOjpDb250
ZXh0TWVudUFjdGlvbiBjb250ZXh0TWVudUFjdGlvbkZvcldlYkFjdGlvbihRV0tQYWdlOjpXZWJB
Y3RpCiAKIFFXS1BhZ2VQcml2YXRlOjpRV0tQYWdlUHJpdmF0ZShRV0tQYWdlKiBxcSwgUVdLQ29u
dGV4dCogYykKICAgICA6IHEocXEpCi0gICAgLCB2aWV3KDApCisgICAgLCBpdGVtKDApCiAgICAg
LCBjb250ZXh0KGMpCiAgICAgLCBwcmVmZXJlbmNlcygwKQogICAgICwgY3JlYXRlTmV3UGFnZUZu
KDApCi0gICAgLCBiYWNraW5nU3RvcmVUeXBlKFFHcmFwaGljc1dLVmlldzo6U2ltcGxlKQorICAg
ICwgY3VycmVudERyYXdpbmdBcmVhVHlwZShEcmF3aW5nQXJlYVR5cGVDaHVua2VkVXBkYXRlKQog
ICAgICwgaXNDb25uZWN0ZWRUb0VuZ2luZSh0cnVlKQogewogICAgIG1lbXNldChhY3Rpb25zLCAw
LCBzaXplb2YoYWN0aW9ucykpOwpAQCAtMTA1LDEzICsxMDcsMzIgQEAgUVdLUGFnZVByaXZhdGU6
On5RV0tQYWdlUHJpdmF0ZSgpCiAgICAgZGVsZXRlIGhpc3Rvcnk7CiB9CiAKLXZvaWQgUVdLUGFn
ZVByaXZhdGU6OmluaXQoUUdyYXBoaWNzSXRlbSogdmlldywgUUdyYXBoaWNzV0tWaWV3OjpCYWNr
aW5nU3RvcmVUeXBlIGJhY2tpbmdTdG9yZVR5cGUpCit2b2lkIFFXS1BhZ2VQcml2YXRlOjppbml0
KFFHcmFwaGljc1dLVmlldyogdmlldywgRHJhd2luZ0FyZWFUeXBlIGFyZWFUeXBlKQogewotICAg
IHRoaXMtPnZpZXcgPSB2aWV3OwotICAgIHRoaXMtPmJhY2tpbmdTdG9yZVR5cGUgPSBiYWNraW5n
U3RvcmVUeXBlOworICAgIGl0ZW0gPSB2aWV3OworICAgIGNyZWF0ZURyYXdpbmdBcmVhKGFyZWFU
eXBlKTsKICAgICBwYWdlLT5pbml0aWFsaXplV2ViUGFnZSgpOwogfQogCit2b2lkIFFXS1BhZ2VQ
cml2YXRlOjpjcmVhdGVEcmF3aW5nQXJlYShEcmF3aW5nQXJlYVR5cGUgYXJlYVR5cGUpCit7Cisg
ICAgY3VycmVudERyYXdpbmdBcmVhVHlwZSA9IGFyZWFUeXBlOworICAgIE93blB0cjxEcmF3aW5n
QXJlYVByb3h5PiBjcmVhdGVkQXJlYTsKKworICAgIGlmIChhcmVhVHlwZSA9PSBEcmF3aW5nQXJl
YVR5cGVDaHVua2VkVXBkYXRlKQorICAgICAgICBjcmVhdGVkQXJlYSA9IENodW5rZWRVcGRhdGVE
cmF3aW5nQXJlYVByb3h5OjpjcmVhdGUoaXRlbSwgcGFnZS5nZXQoKSk7CisjaWYgRU5BQkxFKFRJ
TEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgZWxzZSBpZiAoYXJlYVR5cGUgPT0gRHJhd2luZ0FyZWFU
eXBlVGlsZWQpCisgICAgICAgIGNyZWF0ZWRBcmVhID0gVGlsZWREcmF3aW5nQXJlYVByb3h5Ojpj
cmVhdGUoaXRlbSwgcGFnZS5nZXQoKSk7CisjZW5kaWYKKyAgICBlbHNlIHsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNyZWF0ZWRBcmVhID0gQ2h1bmtlZFVwZGF0ZURy
YXdpbmdBcmVhUHJveHk6OmNyZWF0ZShpdGVtLCBwYWdlLmdldCgpKTsKKyAgICB9CisKKyAgICBw
YWdlLT5zZXREcmF3aW5nQXJlYShjcmVhdGVkQXJlYS5yZWxlYXNlKCkpOworfQorCiB2b2lkIFFX
S1BhZ2VQcml2YXRlOjpzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJiBjdXJzb3IpCiB7
CiAjaWZuZGVmIFFUX05PX0NVUlNPUgpAQCAtMTMzLDEwICsxNTQsMTAgQEAgdm9pZCBRV0tQYWdl
UHJpdmF0ZTo6dGFrZUZvY3VzKGJvb2wgZGlyZWN0aW9uKQogUGFzc093blB0cjxEcmF3aW5nQXJl
YVByb3h5PiBRV0tQYWdlUHJpdmF0ZTo6Y3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpCiB7CiAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBhdm9pZCB0aGlzIGNhc3QgYnkgZGVjb3VwbGluZyB0aGUgdmll
dyBmcm9tIHRoZSBwYWdlLgotICAgIFFHcmFwaGljc1dLVmlldyogd2tWaWV3ID0gc3RhdGljX2Nh
c3Q8UUdyYXBoaWNzV0tWaWV3Kj4odmlldyk7CisgICAgUUdyYXBoaWNzV0tWaWV3KiB3a1ZpZXcg
PSBzdGF0aWNfY2FzdDxRR3JhcGhpY3NXS1ZpZXcqPihpdGVtKTsKIAogI2lmIEVOQUJMRShUSUxF
RF9CQUNLSU5HX1NUT1JFKQotICAgIGlmIChiYWNraW5nU3RvcmVUeXBlID09IFFHcmFwaGljc1dL
Vmlldzo6VGlsZWQpCisgICAgaWYgKGN1cnJlbnREcmF3aW5nQXJlYVR5cGUgPT0gRHJhd2luZ0Fy
ZWFUeXBlVGlsZWQpCiAgICAgICAgIHJldHVybiBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNyZWF0
ZSh3a1ZpZXcsIHBhZ2UuZ2V0KCkpOwogI2VuZGlmCiAgICAgcmV0dXJuIENodW5rZWRVcGRhdGVE
cmF3aW5nQXJlYVByb3h5OjpjcmVhdGUod2tWaWV3LCBwYWdlLmdldCgpKTsKQEAgLTE0NCw3ICsx
NjUsNyBAQCBQYXNzT3duUHRyPERyYXdpbmdBcmVhUHJveHk+IFFXS1BhZ2VQcml2YXRlOjpjcmVh
dGVEcmF3aW5nQXJlYVByb3h5KCkKIAogdm9pZCBRV0tQYWdlUHJpdmF0ZTo6c2V0Vmlld05lZWRz
RGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQogewotICAgIHZpZXctPnVwZGF0
ZShRUmVjdChyZWN0KSk7CisgICAgaXRlbS0+dXBkYXRlKFFSZWN0KHJlY3QpKTsKIH0KIAogdm9p
ZCBRV0tQYWdlUHJpdmF0ZTo6ZGlzcGxheVZpZXcoKQpAQCAtMTY1LDE3ICsxODYsMTcgQEAgV2Vi
Q29yZTo6SW50U2l6ZSBRV0tQYWdlUHJpdmF0ZTo6dmlld1NpemUoKQogCiBib29sIFFXS1BhZ2VQ
cml2YXRlOjppc1ZpZXdXaW5kb3dBY3RpdmUoKQogewotICAgIHJldHVybiB2aWV3ICYmIHZpZXct
PmlzQWN0aXZlKCk7CisgICAgcmV0dXJuIGl0ZW0gJiYgaXRlbS0+aXNBY3RpdmUoKTsKIH0KIAog
Ym9vbCBRV0tQYWdlUHJpdmF0ZTo6aXNWaWV3Rm9jdXNlZCgpCiB7Ci0gICAgcmV0dXJuIHZpZXcg
JiYgdmlldy0+aGFzRm9jdXMoKTsKKyAgICByZXR1cm4gaXRlbSAmJiBpdGVtLT5oYXNGb2N1cygp
OwogfQogCiBib29sIFFXS1BhZ2VQcml2YXRlOjppc1ZpZXdWaXNpYmxlKCkKIHsKLSAgICByZXR1
cm4gdmlldyAmJiB2aWV3LT5pc1Zpc2libGUoKTsKKyAgICByZXR1cm4gaXRlbSAmJiBpdGVtLT5p
c1Zpc2libGUoKTsKIH0KIAogYm9vbCBRV0tQYWdlUHJpdmF0ZTo6aXNWaWV3SW5XaW5kb3coKQpA
QCAtMTgzLDE2ICsyMDQsMjEgQEAgYm9vbCBRV0tQYWdlUHJpdmF0ZTo6aXNWaWV3SW5XaW5kb3co
KQogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCiAgICAgcmV0dXJuIHRydWU7CiB9Ci0KLXZvaWQg
UVdLUGFnZVByaXZhdGU6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5
ZXJUcmVlQ29udGV4dCYpCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQordm9pZCBR
V0tQYWdlUHJpdmF0ZTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXll
clRyZWVDb250ZXh0JiBjb250ZXh0KQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCisvLyBG
SVhNRSBkbyB0aGUgbWFnaWMKKyAgICBpZiAocGFnZSAmJiBwYWdlLT5kcmF3aW5nQXJlYSgpKQor
ICAgICAgICBwYWdlLT5kcmF3aW5nQXJlYSgpLT5hdHRhY2hDb21wb3NpdGluZ0NvbnRleHQoY29u
dGV4dC5jb250ZXh0SUQpOwogfQogCiB2b2lkIFFXS1BhZ2VQcml2YXRlOjpleGl0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUoKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCisvLyBGSVhN
RSBkbyB0aGUgbWFnaWMKKyAgICBpZiAocGFnZSAmJiBwYWdlLT5kcmF3aW5nQXJlYSgpKQorICAg
ICAgICBwYWdlLT5kcmF3aW5nQXJlYSgpLT5kZXRhY2hDb21wb3NpdGluZ0NvbnRleHQoKTsKIH0K
KyNlbmRpZgogCiB2b2lkIFFXS1BhZ2VQcml2YXRlOjpwYWdlRGlkUmVxdWVzdFNjcm9sbChjb25z
dCBJbnRQb2ludCYgcG9pbnQpCiB7CkBAIC00MDUsNyArNDMxLDcgQEAgdm9pZCBRV0tQYWdlUHJp
dmF0ZTo6dG91Y2hFdmVudChRVG91Y2hFdmVudCogZXZlbnQpCiAKIHZvaWQgUVdLUGFnZVByaXZh
dGU6OmRpZFJlbGF1bmNoUHJvY2VzcygpCiB7Ci0gICAgUUdyYXBoaWNzV0tWaWV3KiB3a1ZpZXcg
PSBzdGF0aWNfY2FzdDxRR3JhcGhpY3NXS1ZpZXcqPih2aWV3KTsKKyAgICBRR3JhcGhpY3NXS1Zp
ZXcqIHdrVmlldyA9IHN0YXRpY19jYXN0PFFHcmFwaGljc1dLVmlldyo+KGl0ZW0pOwogICAgIGlm
ICh3a1ZpZXcpCiAgICAgICAgIHEtPnNldFZpZXdwb3J0U2l6ZSh3a1ZpZXctPnNpemUoKS50b1Np
emUoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdr
cGFnZV9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a3BhZ2VfcC5oCmlu
ZGV4IDU2NmNkMDguLmUzY2I2ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXdrcGFnZV9wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xd2twYWdlX3AuaApAQCAtMjcsMTEgKzI3LDEzIEBACiAjaW5jbHVkZSAicXdrcGFnZS5oIgog
I2luY2x1ZGUgInFncmFwaGljc3drdmlldy5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgor
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDxRQmFzaWNUaW1lcj4KICNpbmNsdWRlIDxR
R3JhcGhpY3NWaWV3PgogI2luY2x1ZGUgPFFLZXlFdmVudD4KKyNpbmNsdWRlIDxRV2lkZ2V0Pgog
CiBjbGFzcyBRR3JhcGhpY3NXS1ZpZXc7CiBjbGFzcyBRV0tQcmVmZXJlbmNlczsKQEAgLTQ1LDcg
KzQ3LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIFFXS1BhZ2VQcml2YXRlKiBnZXQoUVdLUGFn
ZSogcGFnZSkgeyByZXR1cm4gcGFnZS0+ZDsgfQogCi0gICAgdm9pZCBpbml0KFFHcmFwaGljc0l0
ZW0qLCBRR3JhcGhpY3NXS1ZpZXc6OkJhY2tpbmdTdG9yZVR5cGUpOworICAgIHZvaWQgaW5pdChR
R3JhcGhpY3NXS1ZpZXcqIGl0ZW0sIFdlYktpdDo6RHJhd2luZ0FyZWFUeXBlIGFyZWFUeXBlKTsK
KyAgICB2b2lkIGNyZWF0ZURyYXdpbmdBcmVhKFdlYktpdDo6RHJhd2luZ0FyZWFUeXBlIGFyZWFU
eXBlKTsKIAogICAgIC8vIFBhZ2VDbGllbnQKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViS2l0
OjpEcmF3aW5nQXJlYVByb3h5PiBjcmVhdGVEcmF3aW5nQXJlYVByb3h5KCk7CkBAIC0xMTQsOCAr
MTE3LDggQEAgcHVibGljOgogICAgIHZvaWQgdG91Y2hFdmVudChRVG91Y2hFdmVudCopOwogCiAg
ICAgUVdLUGFnZSogcTsKKyAgICBRR3JhcGhpY3NXS1ZpZXcqIGl0ZW07CiAKLSAgICBRR3JhcGhp
Y3NJdGVtKiB2aWV3OwogICAgIFFXS0NvbnRleHQqIGNvbnRleHQ7CiAgICAgUVdLSGlzdG9yeSog
aGlzdG9yeTsKIApAQCAtMTMwLDcgKzEzMyw3IEBAIHB1YmxpYzoKIAogICAgIFFQb2ludCB0cmlw
bGVDbGljazsKICAgICBRQmFzaWNUaW1lciB0cmlwbGVDbGlja1RpbWVyOwotICAgIFFHcmFwaGlj
c1dLVmlldzo6QmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBlOworICAgIFdlYktpdDo6
RHJhd2luZ0FyZWFUeXBlIGN1cnJlbnREcmF3aW5nQXJlYVR5cGU7CiAKICAgICBib29sIGlzQ29u
bmVjdGVkVG9FbmdpbmU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eS5jcHAKaW5kZXggZGQ1Zjk4OC4uOWQ2
NzcyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NodW5rZWRVcGRhdGVE
cmF3aW5nQXJlYVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ2h1bmtl
ZFVwZGF0ZURyYXdpbmdBcmVhUHJveHkuY3BwCkBAIC00NSwxNCArNDUsMTMgQEAgUGFzc093blB0
cjxDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eT4gQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVh
UHJveHk6OmNyZWF0ZSgKIH0KIAogQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OkNodW5r
ZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5KFBsYXRmb3JtV2ViVmlldyogd2ViVmlldywgV2ViUGFn
ZVByb3h5KiB3ZWJQYWdlUHJveHkpCi0gICAgOiBEcmF3aW5nQXJlYVByb3h5KERyYXdpbmdBcmVh
VHlwZUNodW5rZWRVcGRhdGUsIHdlYlBhZ2VQcm94eSkKKyAgICA6IERyYXdpbmdBcmVhUHJveHko
RHJhd2luZ0FyZWFUeXBlQ2h1bmtlZFVwZGF0ZSwgd2ViUGFnZVByb3h5LCB3ZWJWaWV3KQogICAg
ICwgbV9pc1dhaXRpbmdGb3JEaWRTZXRGcmFtZU5vdGlmaWNhdGlvbihmYWxzZSkKICAgICAsIG1f
aXNWaXNpYmxlKHRydWUpCiAgICAgLCBtX2ZvcmNlUmVwYWludFdoZW5SZXN1bWluZ1BhaW50aW5n
KGZhbHNlKQogI2lmIFBMQVRGT1JNKEdUSykKICAgICAsIG1fYmFja2luZ1N0b3JlSW1hZ2UoMCkK
ICNlbmRpZgotICAgICwgbV93ZWJWaWV3KHdlYlZpZXcpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eS5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5LmgK
aW5kZXggOTRlNDQxZi4uMzY4NjA4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5LmgKQEAgLTQ4LDE4ICs0OCw2
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgVXBkYXRlQ2h1bms7CiBjbGFzcyBXZWJQYWdl
UHJveHk7CiAKLSNpZiBQTEFURk9STShNQUMpCi10eXBlZGVmIFdLVmlldyBQbGF0Zm9ybVdlYlZp
ZXc7Ci0jZWxpZiBQTEFURk9STShXSU4pCi1jbGFzcyBXZWJWaWV3OwotdHlwZWRlZiBXZWJWaWV3
IFBsYXRmb3JtV2ViVmlldzsKLSNlbGlmIFBMQVRGT1JNKFFUKQotdHlwZWRlZiBRR3JhcGhpY3NX
S1ZpZXcgUGxhdGZvcm1XZWJWaWV3OwotI2VsaWYgUExBVEZPUk0oR1RLKQotY2xhc3MgV2ViVmll
dzsKLXR5cGVkZWYgV2ViVmlldyBQbGF0Zm9ybVdlYlZpZXc7Ci0jZW5kaWYKLQogY2xhc3MgQ2h1
bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHkgOiBwdWJsaWMgRHJhd2luZ0FyZWFQcm94eSB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8Q2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJv
eHk+IGNyZWF0ZShQbGF0Zm9ybVdlYlZpZXcqLCBXZWJQYWdlUHJveHkqKTsKQEAgLTEwMiw4ICs5
MCw2IEBAIHByaXZhdGU6CiAjZWxpZiBQTEFURk9STShHVEspCiAgICAgY2Fpcm9fc3VyZmFjZV90
KiBtX2JhY2tpbmdTdG9yZUltYWdlOwogI2VuZGlmCi0KLSAgICBQbGF0Zm9ybVdlYlZpZXcqIG1f
d2ViVmlldzsKIH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcAppbmRleCBmODUyZTJmLi5iOWIwZTJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCkBA
IC0zMiwxMCArMzIsMTEgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi1EcmF3aW5nQXJlYVByb3h5OjpEcmF3aW5nQXJlYVByb3h5KERyYXdpbmdBcmVh
VHlwZSB0eXBlLCBXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eSkKK0RyYXdpbmdBcmVhUHJveHk6
OkRyYXdpbmdBcmVhUHJveHkoRHJhd2luZ0FyZWFUeXBlIHR5cGUsIFdlYlBhZ2VQcm94eSogd2Vi
UGFnZVByb3h5LCBQbGF0Zm9ybVdlYlZpZXcqIHdlYlZpZXcpCiAgICAgOiBtX3R5cGUodHlwZSkK
ICAgICAsIG1fd2ViUGFnZVByb3h5KHdlYlBhZ2VQcm94eSkKICAgICAsIG1fc2l6ZSh3ZWJQYWdl
UHJveHktPnZpZXdTaXplKCkpCisgICAgLCBtX3dlYlZpZXcod2ViVmlldykKIHsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgKaW5kZXggYzcyY2YwMy4u
NDVmYjNjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVh
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5o
CkBAIC0yOCwxMSArMjgsMTMgQEAKICNkZWZpbmUgRHJhd2luZ0FyZWFQcm94eV9oCiAKICNpbmNs
dWRlICJEcmF3aW5nQXJlYUluZm8uaCIKKyNpbmNsdWRlICJNZXNzYWdlSUQuaCIKICNpbmNsdWRl
IDxzdGRpbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KIAogI2lmIFBMQVRGT1JNKFFUKQorY2xhc3MgUUdyYXBoaWNzV0tWaWV3
OwogY2xhc3MgUVBhaW50ZXI7CiAjZWxpZiBQTEFURk9STShHVEspCiB0eXBlZGVmIHN0cnVjdCBf
Y2Fpcm8gY2Fpcm9fdDsKQEAgLTQwLDggKzQyLDggQEAgdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvIGNh
aXJvX3Q7CiAKIG5hbWVzcGFjZSBDb3JlSVBDIHsKICAgICBjbGFzcyBBcmd1bWVudERlY29kZXI7
CisgICAgY2xhc3MgQXJndW1lbnRFbmNvZGVyOwogICAgIGNsYXNzIENvbm5lY3Rpb247Ci0gICAg
Y2xhc3MgTWVzc2FnZUlEOwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02NCw2ICs2Niwx
OCBAQCB0eXBlZGVmIFFQYWludGVyKiBQbGF0Zm9ybURyYXdpbmdDb250ZXh0OwogdHlwZWRlZiBj
YWlyb190KiBQbGF0Zm9ybURyYXdpbmdDb250ZXh0OwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShN
QUMpCit0eXBlZGVmIFdLVmlldyBQbGF0Zm9ybVdlYlZpZXc7CisjZWxpZiBQTEFURk9STShXSU4p
CitjbGFzcyBXZWJWaWV3OwordHlwZWRlZiBXZWJWaWV3IFBsYXRmb3JtV2ViVmlldzsKKyNlbGlm
IFBMQVRGT1JNKFFUKQordHlwZWRlZiBRR3JhcGhpY3NXS1ZpZXcgUGxhdGZvcm1XZWJWaWV3Owor
I2VsaWYgUExBVEZPUk0oR1RLKQorY2xhc3MgV2ViVmlldzsKK3R5cGVkZWYgV2ViVmlldyBQbGF0
Zm9ybVdlYlZpZXc7CisjZW5kaWYKKwogY2xhc3MgRHJhd2luZ0FyZWFQcm94eSB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoRHJhd2luZ0FyZWFQcm94eSk7CiAKQEAgLTc3LDYgKzkxLDcgQEAg
cHVibGljOgogI2VuZGlmCiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoQ29y
ZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnRE
ZWNvZGVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoQ29y
ZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnRE
ZWNvZGVyKiwgQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKikgeyBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHBhaW50aW5nIHdhcyBzdWNjZXNzZnVsLCBm
YWxzZSBvdGhlcndpc2UuCiAgICAgdmlydHVhbCBib29sIHBhaW50KGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmLCBQbGF0Zm9ybURyYXdpbmdDb250ZXh0KSA9IDA7CkBAIC05MSwxNCArMTA2LDI0IEBA
IHB1YmxpYzoKICAgICBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplOyB9CiAgICAgdm9pZCBzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOwogCisgICAgUGxhdGZvcm1XZWJW
aWV3KiBwbGF0Zm9ybVdlYlZpZXcoKSBjb25zdCB7IHJldHVybiBtX3dlYlZpZXc7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc2V0VXBkYXRlc0VuYWJsZWQoYm9vbCkgeyB9CisKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisgICAgdmlydHVhbCB2b2lkIGF0dGFjaENvbXBvc2l0aW5nQ29u
dGV4dCh1aW50MzJfdCAvKiBjb250ZXh0SUQgKi8pe30KKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNo
Q29tcG9zaXRpbmdDb250ZXh0KCl7fQorCisjZW5kaWYKKwogcHJvdGVjdGVkOgotICAgIGV4cGxp
Y2l0IERyYXdpbmdBcmVhUHJveHkoRHJhd2luZ0FyZWFUeXBlLCBXZWJQYWdlUHJveHkqKTsKKyAg
ICBleHBsaWNpdCBEcmF3aW5nQXJlYVByb3h5KERyYXdpbmdBcmVhVHlwZSwgV2ViUGFnZVByb3h5
KiwgUGxhdGZvcm1XZWJWaWV3Kik7CiAKICAgICBEcmF3aW5nQXJlYVR5cGUgbV90eXBlOwogICAg
IFdlYlBhZ2VQcm94eSogbV93ZWJQYWdlUHJveHk7CiAKICAgICBXZWJDb3JlOjpJbnRTaXplIG1f
c2l6ZTsKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2Nyb2xsT2Zmc2V0OworICAgIFBsYXRmb3Jt
V2ViVmlldyogbV93ZWJWaWV3OwogCiBwcml2YXRlOgogICAgIC8vIENvcmVJUEMgbWVzc2FnZSBo
YW5kbGVycy4KQEAgLTEwOCw2ICsxMzMsNyBAQCBwcml2YXRlOgogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKICAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBMYXllclRyZWVDb250
ZXh0JikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBVcGRhdGVJbmZvJikgeyB9CisK
ICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVk
RHJhd2luZ0FyZWFQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3
aW5nQXJlYVByb3h5LmNwcAppbmRleCA5ODU4MjdhLi43ODJhODg5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcApAQCAtMzAsMTcg
KzMwLDIyIEBACiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFNZXNzYWdlS2luZHMuaCIKICNpbmNsdWRl
ICJEcmF3aW5nQXJlYVByb3h5TWVzc2FnZUtpbmRzLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUlELmgi
CisjaW5jbHVkZSAiVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQuaCIKICNpbmNsdWRlICJVcGRhdGVD
aHVuay5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldl
YlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgogCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2luY2x1ZGUgIldlYlNlcmlhbGl6ZWRDb21wb3NpdGlu
Z0luZm8uaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKLXN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdFRpbGVXaWR0aCA9IDEwMjQ7Ci1z
dGF0aWMgY29uc3QgaW50IGRlZmF1bHRUaWxlSGVpZ2h0ID0gMTAyNDsKK3N0YXRpYyBjb25zdCBp
bnQgZGVmYXVsdFRpbGVXaWR0aCA9IDUxMjsKK3N0YXRpYyBjb25zdCBpbnQgZGVmYXVsdFRpbGVI
ZWlnaHQgPSA1MTI7CiAKIFBhc3NPd25QdHI8VGlsZWREcmF3aW5nQXJlYVByb3h5PiBUaWxlZERy
YXdpbmdBcmVhUHJveHk6OmNyZWF0ZShQbGF0Zm9ybVdlYlZpZXcqIHdlYlZpZXcsIFdlYlBhZ2VQ
cm94eSogd2ViUGFnZVByb3h5KQogewpAQCAtNDgsMjIgKzUzLDM5IEBAIFBhc3NPd25QdHI8VGls
ZWREcmF3aW5nQXJlYVByb3h5PiBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZShQbGF0Zm9y
bVdlYlZpZXcqCiB9CiAKIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6VGlsZWREcmF3aW5nQXJlYVBy
b3h5KFBsYXRmb3JtV2ViVmlldyogd2ViVmlldywgV2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJveHkp
Ci0gICAgOiBEcmF3aW5nQXJlYVByb3h5KERyYXdpbmdBcmVhVHlwZVRpbGVkLCB3ZWJQYWdlUHJv
eHkpCisgICAgOiBEcmF3aW5nQXJlYVByb3h5KERyYXdpbmdBcmVhVHlwZVRpbGVkLCB3ZWJQYWdl
UHJveHksIHdlYlZpZXcpCiAgICAgLCBtX2lzV2FpdGluZ0ZvckRpZFNldEZyYW1lTm90aWZpY2F0
aW9uKGZhbHNlKQogICAgICwgbV9pc1Zpc2libGUodHJ1ZSkKLSAgICAsIG1fd2ViVmlldyh3ZWJW
aWV3KQorICAgICwgbV9pc1RpbGVVcGRhdGVzRW5hYmxlZCh0cnVlKQorICAgICwgbV9tYWluVGls
ZXMobmV3IFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0KHRoaXMsIDEpKQorICAgICwgbV90cmFuc2l0
aW9uVGlsZXMoMCkKICAgICAsIG1fdGlsZUJ1ZmZlclVwZGF0ZVRpbWVyKFJ1bkxvb3A6Om1haW4o
KSwgdGhpcywgJlRpbGVkRHJhd2luZ0FyZWFQcm94eTo6dGlsZUJ1ZmZlclVwZGF0ZVRpbWVyRmly
ZWQpCiAgICAgLCBtX3RpbGVDcmVhdGlvblRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlRp
bGVkRHJhd2luZ0FyZWFQcm94eTo6dGlsZUNyZWF0aW9uVGltZXJGaXJlZCkKICAgICAsIG1fdGls
ZVNpemUoZGVmYXVsdFRpbGVXaWR0aCwgZGVmYXVsdFRpbGVIZWlnaHQpCiAgICAgLCBtX3RpbGVD
cmVhdGlvbkRlbGF5KDAuMDEpCiAgICAgLCBtX2tlZXBBcmVhTXVsdGlwbGllcigyLjUsIDQuNSkK
LSAgICAsIG1fY292ZXJBcmVhTXVsdGlwbGllcigyLCAzKQotICAgICwgbV9jb250ZW50c1NjYWxl
KDEpCisgICAgLCBtX2NvdmVyQXJlYU11bHRpcGxpZXIoMSwgMykKKy8vICAgICwgbV9jb250ZW50
c1NjYWxlKDEpCisgICAgLCBtX2ZvcmNlUmVwYWludFdoZW5SZXN1bWluZ1BhaW50aW5nKGZhbHNl
KQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgUExBVEZPUk0oUVQpCisgICAg
LCBtX2FuaW1hdGlvblRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlRpbGVkRHJhd2luZ0Fy
ZWFQcm94eTo6dXBkYXRlV2ViVmlldykKKyAgICAsIG1fY2xpZW50Q29tcG9zaXRvcigwKQorICAg
ICwgbV9jb21wb3NpdGluZ0NvbnRleHRJRCgwKQorI2VuZGlmCiB7CiB9CiAKIFRpbGVkRHJhd2lu
Z0FyZWFQcm94eTo6flRpbGVkRHJhd2luZ0FyZWFQcm94eSgpCiB7CisgICAgZGVsZXRlIG1fbWFp
blRpbGVzOworICAgIGRlbGV0ZSBtX3RyYW5zaXRpb25UaWxlczsKK30KKwordm9pZCBUaWxlZERy
YXdpbmdBcmVhUHJveHk6OnVwZGF0ZVdlYlZpZXcoKQoreworICAgIFZlY3RvcjxJbnRSZWN0PiBy
ZWdpb247CisgICAgcmVnaW9uLmFwcGVuZChXZWJDb3JlOjpJbnRSZWN0KEludFBvaW50Ojp6ZXJv
KCksIG1fdmlld1NpemUpKTsKKyAgICB1cGRhdGVXZWJWaWV3KHJlZ2lvbik7CiB9CiAKIHZvaWQg
VGlsZWREcmF3aW5nQXJlYVByb3h5OjpzaXplRGlkQ2hhbmdlKCkKQEAgLTg0LDYgKzEwNiw4IEBA
IHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpzaXplRGlkQ2hhbmdlKCkKIAogICAgIHBhZ2Ut
PnByb2Nlc3MoKS0+cmVzcG9uc2l2ZW5lc3NUaW1lcigpLT5zdGFydCgpOwogICAgIHBhZ2UtPnBy
b2Nlc3MoKS0+ZGVwcmVjYXRlZFNlbmQoRHJhd2luZ0FyZWFMZWdhY3lNZXNzYWdlOjpTZXRTaXpl
LCBwYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4obV9zaXplKSk7CisKKyAgICBzdGFydFRpbGVD
cmVhdGlvblRpbWVyKCk7CiB9CiAKIHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRQYWdl
SXNWaXNpYmxlKGJvb2wgaXNWaXNpYmxlKQpAQCAtMTA1LDggKzEyOSw3IEBAIHZvaWQgVGlsZWRE
cmF3aW5nQXJlYVByb3h5OjpzZXRQYWdlSXNWaXNpYmxlKGJvb2wgaXNWaXNpYmxlKQogCiAgICAg
Ly8gVGhlIHBhZ2UgaXMgbm93IHZpc2libGUuCiAgICAgcGFnZS0+cHJvY2VzcygpLT5kZXByZWNh
dGVkU2VuZChEcmF3aW5nQXJlYUxlZ2FjeU1lc3NhZ2U6OlJlc3VtZVBhaW50aW5nLCBwYWdlLT5w
YWdlSUQoKSwgQ29yZUlQQzo6SW4oKSk7Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlcXVl
c3QgYSBmdWxsIHJlcGFpbnQgaGVyZSBpZiBuZWVkZWQuCisgICAgbV9mb3JjZVJlcGFpbnRXaGVu
UmVzdW1pbmdQYWludGluZyA9IGZhbHNlOwogfQogCiB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94
eTo6ZGlkU2V0U2l6ZShjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSkKQEAgLTEzMiw3ICsxNTUsMTUg
QEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6
OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXMKICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29k
ZShDb3JlSVBDOjpPdXQodGlsZUlELCB1cGRhdGVDaHVuaywgc2NhbGUsIHBlbmRpbmdVcGRhdGVD
b3VudCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFRpbGVkRHJhd2luZ0FyZWFU
aWxlKiB0aWxlID0gbV90aWxlc0J5SUQuZ2V0KHRpbGVJRCk7CisgICAgICAgIGlmICghbV9pc1Zp
c2libGUpIHsKKyAgICAgICAgICAgIC8vIFdlIGdvdCBhbiB1cGRhdGUgcmVxdWVzdCB0aGF0IG11
c3QgaGF2ZSBiZWVuIHNlbnQgYmVmb3JlIHdlIHRvbGQgdGhlIHdlYiBwcm9jZXNzIHRvIHN1c3Bl
bmQgcGFpbnRpbmcuCisgICAgICAgICAgICAvLyBEb24ndCBwYWludCB0aGlzIGludG8gdGhlIGJh
Y2tpbmcgc3RvcmUsIGJlY2F1c2UgdGhhdCBjb3VsZCBsZWF2ZSB0aGUgYmFja2luZyBzdG9yZSBp
biBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuCisgICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSB3aWxs
IGp1c3QgdGVsbCB0aGUgZHJhd2luZyBhcmVhIHRvIHJlcGFpbnQgZXZlcnl0aGluZyB3aGVuIHdl
IHJlc3VtZSBwYWludGluZy4KKyAgICAgICAgICAgIG1fZm9yY2VSZXBhaW50V2hlblJlc3VtaW5n
UGFpbnRpbmcgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgVGlsZWREcmF3aW5nQXJlYVRpbGUqIHRpbGUgPSBtX21haW5UaWxlcy0+dGlsZSh0aWxlSUQp
OwogICAgICAgICBBU1NFUlQoIXRpbGUgfHwgdGlsZS0+SUQoKSA9PSB0aWxlSUQpOwogICAgICAg
ICBpZiAodGlsZSkKICAgICAgICAgICAgIHRpbGUtPnVwZGF0ZUZyb21DaHVuaygmdXBkYXRlQ2h1
bmssIHNjYWxlKTsKQEAgLTE1Niw2ICsxODcsMTAgQEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJv
eHk6OmRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXMK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgRHJhd2luZ0FyZWFQcm94eUxlZ2FjeU1l
c3NhZ2U6OkFsbFRpbGVVcGRhdGVzUHJvY2Vzc2VkOiB7CisgICAgICAgIGlmIChtX21haW5UaWxl
cy0+Y292ZXJhZ2VSYXRpbyh3ZWJWaWV3VmlzaWJsZVJlY3QoKSkgPj0gMS4wZiB8fCAhaGFzUGVu
ZGluZ1VwZGF0ZXMoKSkgeworICAgICAgICAgICAgZGVsZXRlIG1fdHJhbnNpdGlvblRpbGVzOwor
ICAgICAgICAgICAgbV90cmFuc2l0aW9uVGlsZXMgPSAwOworICAgICAgICB9CiAgICAgICAgIHRp
bGVCdWZmZXJVcGRhdGVDb21wbGV0ZSgpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xNjYs
NiArMjAxLDI1IEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpkaWRSZWNlaXZlTWVzc2Fn
ZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzCiAgICAgICAgIHNuYXBzaG90VGFr
ZW4oY2h1bmspOwogICAgICAgICBicmVhazsKICAgICB9CisKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpICYmIFBMQVRGT1JNKFFUKQorICAgIGNhc2UgRHJhd2luZ0FyZWFQcm94eUxl
Z2FjeU1lc3NhZ2U6OlN5bmNDb21wb3NpdGluZ0xheWVyczogeworICAgICAgICBXZWJTZXJpYWxp
emVkQ29tcG9zaXRpbmdJbmZvIFdlYlNlcmlhbGl6ZWRDb21wb3NpdGluZ0luZm87CisgICAgICAg
IGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0KFdlYlNlcmlhbGl6ZWRDb21wb3Np
dGluZ0luZm8pKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc3luY0NvbXBvc2l0aW5n
U3RhdGUoV2ViU2VyaWFsaXplZENvbXBvc2l0aW5nSW5mbyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIERyYXdpbmdBcmVhUHJveHlMZWdhY3lNZXNzYWdlOjpVcGRhdGVDb21wb3Np
dGluZ0xheWVyQ29udGVudDogeworICAgICAgICB1aW50MzJfdCBpZDsKKyAgICAgICAgVXBkYXRl
Q2h1bmsgY2h1bms7CisgICAgICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUoQ29yZUlQQzo6T3V0
KGlkLCBjaHVuaykpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB1cGRhdGVDb21wb3Np
dGluZ0xheWVyQ29udGVudChpZCwgY2h1bmspOworICAgICAgICBicmVhazsKKyAgICB9CisjZW5k
aWYKKwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0K
QEAgLTE4OSw3ICsyNDMsNyBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6d2FpdFVudGls
VXBkYXRlc0NvbXBsZXRlKCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAoIWFyZ3Vt
ZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dCh0aWxlSUQsIHVwZGF0ZUNodW5rLCBzY2FsZSwgcGVu
ZGluZ1VwZGF0ZUNvdW50KSkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgVGlsZWREcmF3
aW5nQXJlYVRpbGUqIHRpbGUgPSBtX3RpbGVzQnlJRC5nZXQodGlsZUlEKTsKKyAgICAgICAgVGls
ZWREcmF3aW5nQXJlYVRpbGUqIHRpbGUgPSBtX21haW5UaWxlcy0+dGlsZSh0aWxlSUQpOwogICAg
ICAgICBBU1NFUlQoIXRpbGUgfHwgdGlsZS0+SUQoKSA9PSB0aWxlSUQpOwogICAgICAgICBpZiAo
dGlsZSkKICAgICAgICAgICAgIHRpbGUtPnVwZGF0ZUZyb21DaHVuaygmdXBkYXRlQ2h1bmssIHNj
YWxlKTsKQEAgLTE5NywxMSArMjUxLDExIEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5Ojp3
YWl0VW50aWxVcGRhdGVzQ29tcGxldGUoKQogICAgIHRpbGVCdWZmZXJVcGRhdGVDb21wbGV0ZSgp
OwogfQogCi1QYXNzUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiBUaWxlZERyYXdpbmdBcmVh
UHJveHk6OmNyZWF0ZVRpbGUoY29uc3QgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUm
IGNvb3JkaW5hdGUpCit2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6Y2FuY2VsVGlsZVVwZGF0
ZShpbnQgdGlsZUlEKQogewotICAgIFJlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gdGlsZSA9
IFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpjcmVhdGUodGhpcywgY29vcmRpbmF0ZSk7Ci0gICAgc2V0
VGlsZShjb29yZGluYXRlLCB0aWxlKTsKLSAgICByZXR1cm4gdGlsZTsKKyAgICBpZiAoIXBhZ2Uo
KS0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisgICAgcGFnZSgpLT5wcm9jZXNzKCktPmRl
cHJlY2F0ZWRTZW5kKERyYXdpbmdBcmVhTGVnYWN5TWVzc2FnZTo6Q2FuY2VsVGlsZVVwZGF0ZSwg
cGFnZSgpLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4odGlsZUlEKSk7CiB9CiAKIHZvaWQgVGlsZWRE
cmF3aW5nQXJlYVByb3h5OjpzZXRUaWxlU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQpAQCAtMjA5
LDEwICsyNjMsMTcgQEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnNldFRpbGVTaXplKGNv
bnN0IEludFNpemUmIHNpemUpCiAgICAgaWYgKG1fdGlsZVNpemUgPT0gc2l6ZSkKICAgICAgICAg
cmV0dXJuOwogICAgIG1fdGlsZVNpemUgPSBzaXplOwotICAgIHJlbW92ZUFsbFRpbGVzKCk7Cisg
ICAgbV9tYWluVGlsZXMtPnJlbW92ZUFsbFRpbGVzKCk7CiAgICAgc3RhcnRUaWxlQ3JlYXRpb25U
aW1lcigpOwogfQogCit2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c2V0VXBkYXRlc0VuYWJs
ZWQoYm9vbCBlbmFibGVkKQoreworICAgIGlmICghbV9pc1RpbGVVcGRhdGVzRW5hYmxlZCAmJiBl
bmFibGVkKQorICAgICAgICBzdGFydFRpbGVDcmVhdGlvblRpbWVyKCk7CisgICAgbV9pc1RpbGVV
cGRhdGVzRW5hYmxlZCA9IGVuYWJsZWQ7Cit9CisKIHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5
OjpzZXRUaWxlQ3JlYXRpb25EZWxheShkb3VibGUgZGVsYXkpCiB7CiAgICAgbV90aWxlQ3JlYXRp
b25EZWxheSA9IGRlbGF5OwpAQCAtMjMzLDcgKzI5NCw3IEBAIHZvaWQgVGlsZWREcmF3aW5nQXJl
YVByb3h5Ojp0YWtlU25hcHNob3QoY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgSW50UmVjdCYg
Y29uCiAKIHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjppbnZhbGlkYXRlKGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRzRGlydHlSZWN0KQogewotICAgIEludFJlY3QgZGlydHlSZWN0KG1hcEZyb21D
b250ZW50cyhjb250ZW50c0RpcnR5UmVjdCkpOworICAgIEludFJlY3QgZGlydHlSZWN0KG1fbWFp
blRpbGVzLT5tYXBGcm9tQ29udGVudHMoY29udGVudHNEaXJ0eVJlY3QpKTsKIAogICAgIFRpbGVk
RHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIHRvcExlZnQgPSB0aWxlQ29vcmRpbmF0ZUZvclBv
aW50KGRpcnR5UmVjdC5sb2NhdGlvbigpKTsKICAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29v
cmRpbmF0ZSBib3R0b21SaWdodCA9IHRpbGVDb29yZGluYXRlRm9yUG9pbnQoSW50UG9pbnQoZGly
dHlSZWN0Lm1heFgoKSwgZGlydHlSZWN0Lm1heFkoKSkpOwpAQCAtMjQ0LDcgKzMwNSw3IEBAIHZv
aWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjppbnZhbGlkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRl
bnRzRGlydHlSZWN0KQogCiAgICAgZm9yICh1bnNpZ25lZCB5Q29vcmRpbmF0ZSA9IHRvcExlZnQu
eSgpOyB5Q29vcmRpbmF0ZSA8PSBib3R0b21SaWdodC55KCk7ICsreUNvb3JkaW5hdGUpIHsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCB4Q29vcmRpbmF0ZSA9IHRvcExlZnQueCgpOyB4Q29vcmRpbmF0
ZSA8PSBib3R0b21SaWdodC54KCk7ICsreENvb3JkaW5hdGUpIHsKLSAgICAgICAgICAgIFJlZlB0
cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gY3VycmVudFRpbGUgPSB0aWxlQXQoVGlsZWREcmF3aW5n
QXJlYVRpbGU6OkNvb3JkaW5hdGUoeENvb3JkaW5hdGUsIHlDb29yZGluYXRlKSk7CisgICAgICAg
ICAgICBSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+IGN1cnJlbnRUaWxlID0gbV9tYWluVGls
ZXMtPnRpbGVBdChUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSh4Q29vcmRpbmF0ZSwg
eUNvb3JkaW5hdGUpKTsKICAgICAgICAgICAgIGlmICghY3VycmVudFRpbGUpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnRUaWxlLT5yZWN0KCkuaW50
ZXJzZWN0cyhkaXJ0eVJlY3QpKQpAQCAtMjYwLDcgKzMyMSw3IEBAIHZvaWQgVGlsZWREcmF3aW5n
QXJlYVByb3h5OjppbnZhbGlkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRzRGlydHlSZWN0KQog
CiAgICAgdW5zaWduZWQgcmVtb3ZlQ291bnQgPSB0aWxlc1RvUmVtb3ZlLnNpemUoKTsKICAgICBm
b3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcmVtb3ZlQ291bnQ7ICsrbikKLSAgICAgICAgcmVtb3Zl
VGlsZSh0aWxlc1RvUmVtb3ZlW25dKTsKKyAgICAgICAgbV9tYWluVGlsZXMtPnJlbW92ZVRpbGUo
dGlsZXNUb1JlbW92ZVtuXSk7CiAKICAgICBzdGFydFRpbGVCdWZmZXJVcGRhdGVUaW1lcigpOwog
fQpAQCAtMjY4LDggKzMyOSw4IEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjppbnZhbGlk
YXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRzRGlydHlSZWN0KQogdm9pZCBUaWxlZERyYXdpbmdB
cmVhUHJveHk6OnVwZGF0ZVRpbGVCdWZmZXJzKCkKIHsKICAgICBWZWN0b3I8UmVmUHRyPFRpbGVk
RHJhd2luZ0FyZWFUaWxlPiA+IG5ld0RpcnR5VGlsZXM7Ci0gICAgVGlsZU1hcDo6aXRlcmF0b3Ig
ZW5kID0gbV90aWxlcy5lbmQoKTsKLSAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90
aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBUaWxlZERyYXdpbmdBcmVhVGls
ZVNldDo6VGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV9tYWluVGlsZXMtPnRpbGVzKCkuZW5kKCk7
CisgICAgZm9yIChUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6VGlsZU1hcDo6aXRlcmF0b3IgaXQg
PSBtX21haW5UaWxlcy0+dGlsZXMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAg
ICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiYgY3VycmVudCA9IGl0LT5zZWNvbmQ7CiAg
ICAgICAgIGlmICghY3VycmVudC0+aXNEaXJ0eSgpKQogICAgICAgICAgICAgY29udGludWU7CkBA
IC0yODgsOCArMzQ5LDggQEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnRpbGVCdWZmZXJV
cGRhdGVDb21wbGV0ZSgpCiB7CiAgICAgLy8gQmFpbCBvdXQgaWYgYWxsIHRpbGUgYmFjayBidWZm
ZXJzIGhhdmUgbm90IGJlZW4gdXBkYXRlZC4KICAgICBWZWN0b3I8VGlsZWREcmF3aW5nQXJlYVRp
bGUqPiB0aWxlc1RvRmxpcDsKLSAgICBUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVu
ZCgpOwotICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0OjpUaWxlTWFwOjpp
dGVyYXRvciBlbmQgPSBtX21haW5UaWxlcy0+dGlsZXMoKS5lbmQoKTsKKyAgICBmb3IgKFRpbGVk
RHJhd2luZ0FyZWFUaWxlU2V0OjpUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fbWFpblRpbGVzLT50
aWxlcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBSZWZQdHI8VGlsZWRE
cmF3aW5nQXJlYVRpbGU+JiBjdXJyZW50ID0gaXQtPnNlY29uZDsKICAgICAgICAgaWYgKGN1cnJl
bnQtPmlzUmVhZHlUb1BhaW50KCkgJiYgKGN1cnJlbnQtPmlzRGlydHkoKSB8fCBjdXJyZW50LT5o
YXNCYWNrQnVmZmVyVXBkYXRlUGVuZGluZygpKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMw
Myw3ICszNjQsNyBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6dGlsZUJ1ZmZlclVwZGF0
ZUNvbXBsZXRlKCkKICAgICAgICAgVGlsZWREcmF3aW5nQXJlYVRpbGUqIHRpbGUgPSB0aWxlc1Rv
RmxpcFtuXTsKICAgICAgICAgdGlsZS0+c3dhcEJhY2tCdWZmZXJUb0Zyb250KCk7CiAgICAgICAg
IC8vIEZJWE1FOiBzaG91bGQgbm90IHJlcXVlc3Qgc3lzdGVtIHJlcGFpbnQgZm9yIHRoZSBmdWxs
IHRpbGUuCi0gICAgICAgIHBhaW50ZWRBcmVhLmFwcGVuZChtYXBUb0NvbnRlbnRzKHRpbGUtPnJl
Y3QoKSkpOworICAgICAgICBwYWludGVkQXJlYS5hcHBlbmQobV9tYWluVGlsZXMtPm1hcFRvQ29u
dGVudHModGlsZS0+cmVjdCgpKSk7CiAgICAgfQogICAgIGlmIChzaXplKQogICAgICAgICB1cGRh
dGVXZWJWaWV3KHBhaW50ZWRBcmVhKTsKQEAgLTMyOSwyOSArMzkwLDI4IEBAIGJvb2wgVGlsZWRE
cmF3aW5nQXJlYVByb3h5OjpwYWludChjb25zdCBJbnRSZWN0JiByZWN0LCBQbGF0Zm9ybURyYXdp
bmdDb250ZXh0IGNvCiAKICAgICAvLyBBc3N1bWVzIHRoZSBiYWNraW5nIHN0b3JlIGlzIHBhaW50
ZWQgd2l0aCB0aGUgc2NhbGUgdHJhbnNmb3JtIGFwcGxpZWQuCiAgICAgLy8gU2luY2UgdGlsZSBj
b250ZW50IGlzIGFscmVhZHkgc2NhbGVkLCBmaXJzdCByZXZlcnQgdGhlIHNjYWxpbmcgZnJvbSB0
aGUgcGFpbnRlci4KLSAgICBnYy5zY2FsZShGbG9hdFNpemUoMSAvIG1fY29udGVudHNTY2FsZSwg
MSAvIG1fY29udGVudHNTY2FsZSkpOwotCi0gICAgSW50UmVjdCBkaXJ0eVJlY3QgPSBtYXBGcm9t
Q29udGVudHMocmVjdCk7Ci0KLSAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSB0
b3BMZWZ0ID0gdGlsZUNvb3JkaW5hdGVGb3JQb2ludChkaXJ0eVJlY3QubG9jYXRpb24oKSk7Ci0g
ICAgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgYm90dG9tUmlnaHQgPSB0aWxlQ29v
cmRpbmF0ZUZvclBvaW50KEludFBvaW50KGRpcnR5UmVjdC5tYXhYKCksIGRpcnR5UmVjdC5tYXhZ
KCkpKTsKLQotICAgIGZvciAodW5zaWduZWQgeUNvb3JkaW5hdGUgPSB0b3BMZWZ0LnkoKTsgeUNv
b3JkaW5hdGUgPD0gYm90dG9tUmlnaHQueSgpOyArK3lDb29yZGluYXRlKSB7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgeENvb3JkaW5hdGUgPSB0b3BMZWZ0LngoKTsgeENvb3JkaW5hdGUgPD0gYm90
dG9tUmlnaHQueCgpOyArK3hDb29yZGluYXRlKSB7Ci0gICAgICAgICAgICBUaWxlZERyYXdpbmdB
cmVhVGlsZTo6Q29vcmRpbmF0ZSBjdXJyZW50Q29vcmRpbmF0ZSh4Q29vcmRpbmF0ZSwgeUNvb3Jk
aW5hdGUpOwotICAgICAgICAgICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiBjdXJyZW50
VGlsZSA9IHRpbGVBdChjdXJyZW50Q29vcmRpbmF0ZSk7Ci0gICAgICAgICAgICBpZiAoY3VycmVu
dFRpbGUgJiYgY3VycmVudFRpbGUtPmlzUmVhZHlUb1BhaW50KCkpCi0gICAgICAgICAgICAgICAg
Y3VycmVudFRpbGUtPnBhaW50KCZnYywgZGlydHlSZWN0KTsKLSAgICAgICAgfQorICAgIGdjLnNj
YWxlKEZsb2F0U2l6ZSgxIC8gbV9tYWluVGlsZXMtPmNvbnRlbnRzU2NhbGUoKSwgMSAvIG1fbWFp
blRpbGVzLT5jb250ZW50c1NjYWxlKCkpKTsKKyAgICBtX21haW5UaWxlcy0+cGFpbnQocmVjdCwg
Z2MpOworCisgICAgLy8gUGFpbnQgdGhlIHRyYW5zaXRpb24gdGlsZXMsIGlmIGFueSwgb3ZlciB0
aGUgY3VycmVudGx5IHVwZGF0aW5nIHRpbGVzLgorICAgIGlmIChtX3RyYW5zaXRpb25UaWxlcykg
eworICAgICAgICAvLyBSZXZlcnQgdGhlIG1haW4gdGlsZXMgaW52ZXJ0IHNjYWxpbmcgYW5kIGFw
cGx5IHRoZSBpbnZlcnQgdHJhbnNpdGlvbiB0aWxlcyBzY2FsaW5nLgorICAgICAgICBnYy5zY2Fs
ZShGbG9hdFNpemUobV9tYWluVGlsZXMtPmNvbnRlbnRzU2NhbGUoKSAvIG1fdHJhbnNpdGlvblRp
bGVzLT5jb250ZW50c1NjYWxlKCksIG1fbWFpblRpbGVzLT5jb250ZW50c1NjYWxlKCkgLyBtX3Ry
YW5zaXRpb25UaWxlcy0+Y29udGVudHNTY2FsZSgpKSk7CisgICAgICAgIG1fdHJhbnNpdGlvblRp
bGVzLT5wYWludChyZWN0LCBnYyk7CiAgICAgfQogCiAgICAgZ2MucmVzdG9yZSgpOworCisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChtX2NvbXBvc2l0aW5nQ29udGV4
dElEKQorICAgICAgIHBhaW50Q29tcG9zaXRpbmdMYXllcihjb250ZXh0LCByZWN0KTsKKyNlbmRp
ZgogICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6YWRq
dXN0VmlzaWJsZVJlY3QoKQogewotICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSBtYXBGcm9tQ29u
dGVudHMod2ViVmlld1Zpc2libGVSZWN0KCkpOworICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSBt
X21haW5UaWxlcy0+bWFwRnJvbUNvbnRlbnRzKHdlYlZpZXdWaXNpYmxlUmVjdCgpKTsKICAgICBp
ZiAobV9wcmV2aW91c1Zpc2libGVSZWN0ID09IHZpc2libGVSZWN0KQogICAgICAgICByZXR1cm47
CiAgICAgbV9wcmV2aW91c1Zpc2libGVSZWN0ID0gdmlzaWJsZVJlY3Q7CkBAIC0zNjEsMjAgKzQy
MSwzMSBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6YWRqdXN0VmlzaWJsZVJlY3QoKQog
CiB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c2V0Q29udGVudHNTY2FsZShmbG9hdCBzY2Fs
ZSkKIHsKLSAgICBpZiAobV9jb250ZW50c1NjYWxlID09IHNjYWxlKQorICAgIGlmIChtX21haW5U
aWxlcy0+Y29udGVudHNTY2FsZSgpID09IHNjYWxlKQogICAgICAgICByZXR1cm47Ci0gICAgbV9j
b250ZW50c1NjYWxlID0gc2NhbGU7Ci0gICAgcmVtb3ZlQWxsVGlsZXMoKTsKKworICAgIC8vIEtl
ZXAgdGhlIGN1cnJlbnQgdGlsZXMgaW4gbV90cmFuc2l0aW9uVGlsZXMgd2hpbGUgdGhlIG5ldyBz
Y2FsZSB0aWxlcyBhcmUgYmVpbmcgdXBkYXRlZC4KKyAgICAvLyBJZiBtX21haW5UaWxlcyBzdGls
bCBoYXNuJ3QgbW9yZSBwYWludGFibGUgY29udGVudCBmb3IgdGhlIGN1cnJlbnQgdmlld3BvcnQg
cmVjdAorICAgIC8vIHRoYW4gbV90cmFuc2l0aW9uVGlsZXMsIHRoZW4ga2VlcCB0aGUgb2xkIG1f
dHJhbnNpdGlvblRpbGVzLiBUaGlzIGhhcHBlbnMgd2hlbgorICAgIC8vIHNldENvbnRlbnRzU2Nh
bGUgaXMgcmUtY2FsbGVkIGJlZm9yZSBlbm91Z2ggdGlsZXMgaGF2ZSBiZWVuIHVwZGF0ZWQuCisg
ICAgaWYgKCFtX3RyYW5zaXRpb25UaWxlcyB8fCBtX3RyYW5zaXRpb25UaWxlcy0+Y292ZXJhZ2VS
YXRpbyh3ZWJWaWV3VmlzaWJsZVJlY3QoKSkgPCBtX21haW5UaWxlcy0+Y292ZXJhZ2VSYXRpbyh3
ZWJWaWV3VmlzaWJsZVJlY3QoKSkpIHsKKyAgICAgICAgZGVsZXRlIG1fdHJhbnNpdGlvblRpbGVz
OworICAgICAgICBtX3RyYW5zaXRpb25UaWxlcyA9IG1fbWFpblRpbGVzOworICAgICAgICBtX3Ry
YW5zaXRpb25UaWxlcy0+cmVsZWFzZUJhY2tCdWZmZXJzKCk7CisgICAgICAgIG1fbWFpblRpbGVz
ID0gMDsKKyAgICB9CisgICAgZGVsZXRlIG1fbWFpblRpbGVzOworICAgIG1fbWFpblRpbGVzID0g
bmV3IFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0KHRoaXMsIHNjYWxlKTsKICAgICBjcmVhdGVUaWxl
cygpOwogfQogCiB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6cmVtb3ZlQWxsVGlsZXMoKQog
ewogICAgIFZlY3RvcjxSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+ID4gdGlsZXNUb1JlbW92
ZTsKLSAgICBjb3B5VmFsdWVzVG9WZWN0b3IobV90aWxlcywgdGlsZXNUb1JlbW92ZSk7CisgICAg
Y29weVZhbHVlc1RvVmVjdG9yKG1fbWFpblRpbGVzLT50aWxlcygpLCB0aWxlc1RvUmVtb3ZlKTsK
ICAgICB1bnNpZ25lZCByZW1vdmVDb3VudCA9IHRpbGVzVG9SZW1vdmUuc2l6ZSgpOwogICAgIGZv
ciAodW5zaWduZWQgbiA9IDA7IG4gPCByZW1vdmVDb3VudDsgKytuKQotICAgICAgICByZW1vdmVU
aWxlKHRpbGVzVG9SZW1vdmVbbl0tPmNvb3JkaW5hdGUoKSk7CisgICAgICAgIG1fbWFpblRpbGVz
LT5yZW1vdmVUaWxlKHRpbGVzVG9SZW1vdmVbbl0tPmNvb3JkaW5hdGUoKSk7CiB9CiAKIGRvdWJs
ZSBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnRpbGVEaXN0YW5jZShjb25zdCBJbnRSZWN0JiB2aWV3
cG9ydCwgY29uc3QgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUmIHRpbGVDb29yZGlu
YXRlKQpAQCAtMzkzLDEwICs0NjQsOSBAQCBkb3VibGUgVGlsZWREcmF3aW5nQXJlYVByb3h5Ojp0
aWxlRGlzdGFuY2UoY29uc3QgSW50UmVjdCYgdmlld3BvcnQsIGNvbnN0IFRpbGVkRAogSW50UmVj
dCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNhbGN1bGF0ZUtlZXBSZWN0KGNvbnN0IEludFJlY3Qm
IHZpc2libGVSZWN0KSBjb25zdAogewogICAgIEludFJlY3QgcmVzdWx0ID0gdmlzaWJsZVJlY3Q7
Ci0gICAgLy8gSW5mbGF0ZXMgdG8gYm90aCBzaWRlcywgc28gZGl2aWRlIGluZmxhdGUgZGVsdGEg
YnkgMgotICAgIHJlc3VsdC5pbmZsYXRlWCh2aXNpYmxlUmVjdC53aWR0aCgpICogKG1fa2VlcEFy
ZWFNdWx0aXBsaWVyLndpZHRoKCkgLSAxKSAvIDIpOwotICAgIHJlc3VsdC5pbmZsYXRlWSh2aXNp
YmxlUmVjdC5oZWlnaHQoKSAqIChtX2tlZXBBcmVhTXVsdGlwbGllci5oZWlnaHQoKSAtIDEpIC8g
Mik7Ci0gICAgcmVzdWx0LmludGVyc2VjdChjb250ZW50c1JlY3QoKSk7CisgICAgcmVzdWx0Lmlu
ZmxhdGVYKHZpc2libGVSZWN0LndpZHRoKCkgKiAobV9rZWVwQXJlYU11bHRpcGxpZXIud2lkdGgo
KSAtIDEpKTsKKyAgICByZXN1bHQuaW5mbGF0ZVkodmlzaWJsZVJlY3QuaGVpZ2h0KCkgKiAobV9r
ZWVwQXJlYU11bHRpcGxpZXIuaGVpZ2h0KCkgLSAxKSk7CisgICAgcmVzdWx0LmludGVyc2VjdChz
Y2FsZWRDb250ZW50c1JlY3QoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNDA2LDE3
ICs0NzYsMTkgQEAgSW50UmVjdCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNhbGN1bGF0ZUNvdmVy
UmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCkgY28KICAgICAvLyBJbmZsYXRlcyB0byBi
b3RoIHNpZGVzLCBzbyBkaXZpZGUgaW5mbGF0ZSBkZWx0YSBieSAyCiAgICAgcmVzdWx0LmluZmxh
dGVYKHZpc2libGVSZWN0LndpZHRoKCkgKiAobV9jb3ZlckFyZWFNdWx0aXBsaWVyLndpZHRoKCkg
LSAxKSAvIDIpOwogICAgIHJlc3VsdC5pbmZsYXRlWSh2aXNpYmxlUmVjdC5oZWlnaHQoKSAqICht
X2NvdmVyQXJlYU11bHRpcGxpZXIuaGVpZ2h0KCkgLSAxKSAvIDIpOwotICAgIHJlc3VsdC5pbnRl
cnNlY3QoY29udGVudHNSZWN0KCkpOworICAgIHJlc3VsdC5pbnRlcnNlY3Qoc2NhbGVkQ29udGVu
dHNSZWN0KCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgVGlsZWREcmF3aW5nQXJl
YVByb3h5OjpjcmVhdGVUaWxlcygpCiB7Ci0gICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IG1hcEZy
b21Db250ZW50cyh3ZWJWaWV3VmlzaWJsZVJlY3QoKSk7CisgICAgSW50UmVjdCB2aXNpYmxlUmVj
dCA9IG1fbWFpblRpbGVzLT5tYXBGcm9tQ29udGVudHMod2ViVmlld1Zpc2libGVSZWN0KCkpOwog
ICAgIG1fcHJldmlvdXNWaXNpYmxlUmVjdCA9IHZpc2libGVSZWN0OwogCiAgICAgaWYgKHZpc2li
bGVSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOworICAgIGlmICghbV9pc1RpbGVVcGRh
dGVzRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gUmVzaXplIHRpbGVzIG9uIGVk
Z2VzIGluIGNhc2UgdGhlIGNvbnRlbnRzIHNpemUgaGFzIGNoYW5nZWQuCiAgICAgYm9vbCBkaWRS
ZXNpemVUaWxlcyA9IHJlc2l6ZUVkZ2VUaWxlcygpOwpAQCAtNDQxLDcgKzUxMyw3IEBAIHZvaWQg
VGlsZWREcmF3aW5nQXJlYVByb3h5OjpjcmVhdGVUaWxlcygpCiAgICAgICAgICAgICAvLyBEaXN0
YW5jZSBpcyAwIGZvciBhbGwgY3VycmVudGx5IHZpc2libGUgdGlsZXMuCiAgICAgICAgICAgICBk
b3VibGUgZGlzdGFuY2UgPSB0aWxlRGlzdGFuY2UodmlzaWJsZVJlY3QsIGN1cnJlbnRDb29yZGlu
YXRlKTsKIAotICAgICAgICAgICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiB0aWxlID0g
dGlsZUF0KGN1cnJlbnRDb29yZGluYXRlKTsKKyAgICAgICAgICAgIFJlZlB0cjxUaWxlZERyYXdp
bmdBcmVhVGlsZT4gdGlsZSA9IG1fbWFpblRpbGVzLT50aWxlQXQoY3VycmVudENvb3JkaW5hdGUp
OwogICAgICAgICAgICAgaWYgKCFkaXN0YW5jZSAmJiAoIXRpbGUgfHwgIXRpbGUtPmlzUmVhZHlU
b1BhaW50KCkpKQogICAgICAgICAgICAgICAgIGhhc1Zpc2libGVDaGVja2VycyA9IHRydWU7CiAg
ICAgICAgICAgICBpZiAodGlsZSkKQEAgLTQ2NSw3ICs1MzcsNyBAQCB2b2lkIFRpbGVkRHJhd2lu
Z0FyZWFQcm94eTo6Y3JlYXRlVGlsZXMoKQogICAgIC8vIE5vdyBjb25zdHJ1Y3QgdGhlIHRpbGUo
cykuCiAgICAgdW5zaWduZWQgdGlsZXNUb0NyZWF0ZUNvdW50ID0gdGlsZXNUb0NyZWF0ZS5zaXpl
KCk7CiAgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHRpbGVzVG9DcmVhdGVDb3VudDsgKytu
KQotICAgICAgICBjcmVhdGVUaWxlKHRpbGVzVG9DcmVhdGVbbl0pOworICAgICAgICBtX21haW5U
aWxlcy0+Y3JlYXRlVGlsZSh0aWxlc1RvQ3JlYXRlW25dKTsKIAogICAgIHJlcXVpcmVkVGlsZUNv
dW50IC09IHRpbGVzVG9DcmVhdGVDb3VudDsKIApAQCAtNDgwLDEyICs1NTIsMTIgQEAgdm9pZCBU
aWxlZERyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZVRpbGVzKCkKIAogYm9vbCBUaWxlZERyYXdpbmdB
cmVhUHJveHk6OnJlc2l6ZUVkZ2VUaWxlcygpCiB7Ci0gICAgSW50UmVjdCBjb250ZW50c1JlY3Qg
PSB0aGlzLT5jb250ZW50c1JlY3QoKTsKKyAgICBJbnRSZWN0IGNvbnRlbnRzUmVjdCA9IHNjYWxl
ZENvbnRlbnRzUmVjdCgpOwogICAgIGJvb2wgd2FzUmVzaXplZCA9IGZhbHNlOwogCiAgICAgVmVj
dG9yPFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlPiB0aWxlc1RvUmVtb3ZlOwotICAg
IFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7Ci0gICAgZm9yIChUaWxlTWFw
OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAg
VGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFpblRp
bGVzLT50aWxlcygpLmVuZCgpOworICAgIGZvciAoVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRp
bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9tYWluVGlsZXMtPnRpbGVzKCkuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CiAgICAgICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIHRp
bGVDb29yZGluYXRlID0gaXQtPnNlY29uZC0+Y29vcmRpbmF0ZSgpOwogICAgICAgICBJbnRSZWN0
IHRpbGVSZWN0ID0gaXQtPnNlY29uZC0+cmVjdCgpOwogICAgICAgICBJbnRSZWN0IGV4cGVjdGVk
VGlsZVJlY3QgPSB0aWxlUmVjdEZvckNvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpOwpAQCAtNDk4
LDcgKzU3MCw3IEBAIGJvb2wgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpyZXNpemVFZGdlVGlsZXMo
KQogICAgIH0KICAgICB1bnNpZ25lZCByZW1vdmVDb3VudCA9IHRpbGVzVG9SZW1vdmUuc2l6ZSgp
OwogICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCByZW1vdmVDb3VudDsgKytuKQotICAgICAg
ICByZW1vdmVUaWxlKHRpbGVzVG9SZW1vdmVbbl0pOworICAgICAgICBtX21haW5UaWxlcy0+cmVt
b3ZlVGlsZSh0aWxlc1RvUmVtb3ZlW25dKTsKICAgICByZXR1cm4gd2FzUmVzaXplZDsKIH0KIApA
QCAtNTA3LDggKzU3OSw4IEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5Ojpkcm9wVGlsZXNP
dXRzaWRlUmVjdChjb25zdCBJbnRSZWN0JiBrZWVwUmVjdCkKICAgICBGbG9hdFJlY3Qga2VlcFJl
Y3RGID0ga2VlcFJlY3Q7CiAKICAgICBWZWN0b3I8VGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3Jk
aW5hdGU+IHRvUmVtb3ZlOwotICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5k
KCk7Ci0gICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRpbGVNYXA6Oml0
ZXJhdG9yIGVuZCA9IG1fbWFpblRpbGVzLT50aWxlcygpLmVuZCgpOworICAgIGZvciAoVGlsZWRE
cmF3aW5nQXJlYVRpbGVTZXQ6OlRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9tYWluVGlsZXMtPnRp
bGVzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFRpbGVkRHJhd2luZ0Fy
ZWFUaWxlOjpDb29yZGluYXRlIGNvb3JkaW5hdGUgPSBpdC0+c2Vjb25kLT5jb29yZGluYXRlKCk7
CiAgICAgICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGl0LT5zZWNvbmQtPnJlY3QoKTsKICAgICAg
ICAgaWYgKCF0aWxlUmVjdC5pbnRlcnNlY3RzKGtlZXBSZWN0RikpCkBAIC01MTYsMTQgKzU4OCwx
NCBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6ZHJvcFRpbGVzT3V0c2lkZVJlY3QoY29u
c3QgSW50UmVjdCYga2VlcFJlY3QpCiAgICAgfQogICAgIHVuc2lnbmVkIHJlbW92ZUNvdW50ID0g
dG9SZW1vdmUuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCByZW1vdmVDb3Vu
dDsgKytuKQotICAgICAgICByZW1vdmVUaWxlKHRvUmVtb3ZlW25dKTsKKyAgICAgICAgbV9tYWlu
VGlsZXMtPnJlbW92ZVRpbGUodG9SZW1vdmVbbl0pOwogfQogCi1QYXNzUmVmUHRyPFRpbGVkRHJh
d2luZ0FyZWFUaWxlPiBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnRpbGVBdChjb25zdCBUaWxlZERy
YXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSYgY29vcmRpbmF0ZSkgY29uc3QKK0ludFJlY3QgVGls
ZWREcmF3aW5nQXJlYVByb3h5OjpzY2FsZWRDb250ZW50c1JlY3QoKSBjb25zdAogewotICAgIHJl
dHVybiBtX3RpbGVzLmdldChjb29yZGluYXRlKTsKKyAgICByZXR1cm4gbV9tYWluVGlsZXMtPm1h
cEZyb21Db250ZW50cyhJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fdmlld1NpemUpKTsKIH0K
LQorLyoKIHZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpzZXRUaWxlKGNvbnN0IFRpbGVkRHJh
d2luZ0FyZWFUaWxlOjpDb29yZGluYXRlJiBjb29yZGluYXRlLCBSZWZQdHI8VGlsZWREcmF3aW5n
QXJlYVRpbGU+IHRpbGUpCiB7CiAgICAgbV90aWxlcy5zZXQoY29vcmRpbmF0ZSwgdGlsZSk7CkBA
IC01NjIsNyArNjM0LDcgQEAgSW50UmVjdCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNvbnRlbnRz
UmVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1hcEZyb21Db250ZW50cyhJbnRSZWN0KEludFBv
aW50KDAsIDApLCBtX3ZpZXdTaXplKSk7CiB9Ci0KKyovCiBJbnRSZWN0IFRpbGVkRHJhd2luZ0Fy
ZWFQcm94eTo6dGlsZVJlY3RGb3JDb29yZGluYXRlKGNvbnN0IFRpbGVkRHJhd2luZ0FyZWFUaWxl
OjpDb29yZGluYXRlJiBjb29yZGluYXRlKSBjb25zdAogewogICAgIEludFJlY3QgcmVjdChjb29y
ZGluYXRlLngoKSAqIG1fdGlsZVNpemUud2lkdGgoKSwKQEAgLTU3MCw3ICs2NDIsNyBAQCBJbnRS
ZWN0IFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6dGlsZVJlY3RGb3JDb29yZGluYXRlKGNvbnN0IFRp
bGVkRHJhd2luZ0FyZWFUaWxlOgogICAgICAgICAgICAgICAgICBtX3RpbGVTaXplLndpZHRoKCks
CiAgICAgICAgICAgICAgICAgIG1fdGlsZVNpemUuaGVpZ2h0KCkpOwogCi0gICAgcmVjdC5pbnRl
cnNlY3QoY29udGVudHNSZWN0KCkpOworICAgIHJlY3QuaW50ZXJzZWN0KHNjYWxlZENvbnRlbnRz
UmVjdCgpKTsKICAgICByZXR1cm4gcmVjdDsKIH0KIApAQCAtNjA4LDggKzY4MCw4IEBAIHZvaWQg
VGlsZWREcmF3aW5nQXJlYVByb3h5Ojp0aWxlQ3JlYXRpb25UaW1lckZpcmVkKCkKIAogYm9vbCBU
aWxlZERyYXdpbmdBcmVhUHJveHk6Omhhc1BlbmRpbmdVcGRhdGVzKCkgY29uc3QKIHsKLSAgICBU
aWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwotICAgIGZvciAoVGls
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlU2V0OjpUaWxlTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX21haW5UaWxlcy0+dGlsZXMoKS5lbmQoKTsKKyAgICBmb3IgKFRpbGVkRHJhd2lu
Z0FyZWFUaWxlU2V0OjpUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbWFpblRpbGVzLT50
aWxlcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBjb25zdCBSZWZQdHI8
VGlsZWREcmF3aW5nQXJlYVRpbGU+JiBjdXJyZW50ID0gaXQtPnNlY29uZDsKICAgICAgICAgaWYg
KGN1cnJlbnQtPmhhc0JhY2tCdWZmZXJVcGRhdGVQZW5kaW5nKCkpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTYxOSw0ICs2OTEsNCBAQCBib29sIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6
aGFzUGVuZGluZ1VwZGF0ZXMoKSBjb25zdAogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAotI2Vu
ZGlmCisjZW5kaWYgLy8gRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmgKaW5kZXggODlhZDYyYS4u
Mjg2N2U5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2lu
Z0FyZWFQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdB
cmVhUHJveHkuaApAQCAtMzAsMzggKzMwLDIxIEBACiAKICNpbmNsdWRlICJEcmF3aW5nQXJlYVBy
b3h5LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0ludFNpemUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgogCiAjaW5jbHVkZSAiUnVuTG9vcC5oIgogI2luY2x1ZGUgIlRpbGVk
RHJhd2luZ0FyZWFUaWxlLmgiCi0KLSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgotI2lmZGVmIF9fT0JKQ19fCi1AY2xhc3MgV0tWaWV3OwotI2Vsc2UKLWNsYXNz
IFdLVmlldzsKLSNlbmRpZgotI2VsaWYgUExBVEZPUk0oUVQpCi1jbGFzcyBRR3JhcGhpY3NXS1Zp
ZXc7Ci0jaW5jbHVkZSA8UUltYWdlPgotI2VuZGlmCisjaW5jbHVkZSAiVGlsZWREcmF3aW5nQXJl
YVRpbGVTZXQuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIFdlYlNlcmlhbGl6ZWRD
b21wb3NpdGluZ0luZm87CitjbGFzcyBDbGllbnRDb21wb3NpdG9yOwogY2xhc3MgVXBkYXRlQ2h1
bms7CiBjbGFzcyBXZWJQYWdlUHJveHk7CiAKLSNpZiBQTEFURk9STShNQUMpCi10eXBlZGVmIFdL
VmlldyBQbGF0Zm9ybVdlYlZpZXc7Ci0jZWxpZiBQTEFURk9STShXSU4pCi1jbGFzcyBXZWJWaWV3
OwotdHlwZWRlZiBXZWJWaWV3IFBsYXRmb3JtV2ViVmlldzsKLSNlbGlmIFBMQVRGT1JNKFFUKQot
dHlwZWRlZiBRR3JhcGhpY3NXS1ZpZXcgUGxhdGZvcm1XZWJWaWV3OwotI2VuZGlmCi0KIGNsYXNz
IFRpbGVkRHJhd2luZ0FyZWFQcm94eSA6IHB1YmxpYyBEcmF3aW5nQXJlYVByb3h5IHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc093blB0cjxUaWxlZERyYXdpbmdBcmVhUHJveHk+IGNyZWF0ZShQ
bGF0Zm9ybVdlYlZpZXcqIHdlYlZpZXcsIFdlYlBhZ2VQcm94eSopOwpAQCAtNjksMTYgKzUyLDIw
IEBAIHB1YmxpYzoKICAgICBUaWxlZERyYXdpbmdBcmVhUHJveHkoUGxhdGZvcm1XZWJWaWV3Kiwg
V2ViUGFnZVByb3h5Kik7CiAgICAgdmlydHVhbCB+VGlsZWREcmF3aW5nQXJlYVByb3h5KCk7CiAK
LSAgICBmbG9hdCBjb250ZW50c1NjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1NjYWxl
OyB9CisgICAgZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFpblRpbGVz
LT5jb250ZW50c1NjYWxlKCk7IH0KICAgICB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQpOwog
CiAgICAgdm9pZCB3YWl0VW50aWxVcGRhdGVzQ29tcGxldGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VXBkYXRlc0VuYWJsZWQoYm9vbCk7CiAKICAgICB2b2lkIHRha2VTbmFwc2hvdChjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBzaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb250ZW50c1Jl
Y3QpOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIHZpcnR1YWwgdm9p
ZCBhdHRhY2hDb21wb3NpdGluZ0NvbnRleHQodWludDMyX3QgLyogY29udGV4dElEICovKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoQ29tcG9zaXRpbmdDb250ZXh0KCkgeyB9CisgICAgdmly
dHVhbCB2b2lkIGF0dGFjaENvbXBvc2l0aW5nQ29udGV4dCh1aW50MzJfdCAvKiBjb250ZXh0SUQg
Ki8pOworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hDb21wb3NpdGluZ0NvbnRleHQoKTsKKyAgICB2
b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlKGNvbnN0IFdlYlNlcmlhbGl6ZWRDb21wb3NpdGluZ0lu
Zm8mKTsKKyAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJDb250ZW50KHVpbnQzMl90LCBV
cGRhdGVDaHVuayYpOworICAgIHZvaWQgcGFpbnRDb21wb3NpdGluZ0xheWVyKFBsYXRmb3JtRHJh
d2luZ0NvbnRleHQgdGFyZ2V0UGFpbnRlciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogI2Vu
ZGlmCiAKICAgICB2b2lkIHBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKTsKQEAgLTEwMywyNSArOTAsMjggQEAgcHVibGljOgogICAgIFdlYkNv
cmU6OkludFJlY3QgbWFwRnJvbUNvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25z
dDsKIAogICAgIGJvb2wgaGFzUGVuZGluZ1VwZGF0ZXMoKSBjb25zdDsKKyAgICB2b2lkIGludmFs
aWRhdGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCk7CiAKIHByaXZhdGU6CiAgICAgV2Vi
UGFnZVByb3h5KiBwYWdlKCk7CiAgICAgV2ViQ29yZTo6SW50UmVjdCB3ZWJWaWV3VmlzaWJsZVJl
Y3QoKTsKICAgICB2b2lkIHVwZGF0ZVdlYlZpZXcoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkludFJl
Y3Q+JiBwYWludGVkQXJlYSk7CisgICAgdm9pZCB1cGRhdGVXZWJWaWV3KCk7CiAKICAgICB2b2lk
IHNuYXBzaG90VGFrZW4oVXBkYXRlQ2h1bmsmKTsKIAogICAgIC8vIERyYXdpbmdBcmVhUHJveHkK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbios
IENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisvLyA/PyAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24q
LCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIENvcmVJUEM6
OkFyZ3VtZW50RW5jb2RlciYpOwogICAgIHZpcnR1YWwgYm9vbCBwYWludChjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiwgUGxhdGZvcm1EcmF3aW5nQ29udGV4dCk7CiAgICAgdmlydHVhbCB2b2lkIHNp
emVEaWRDaGFuZ2UoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZUlzVmlzaWJsZShib29sIGlz
VmlzaWJsZSk7CiAKICAgICB2b2lkIGRpZFNldFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYp
OwotICAgIHZvaWQgaW52YWxpZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KTsKICAg
ICB2b2lkIGFkanVzdFZpc2libGVSZWN0KCk7CiAKICAgICB2b2lkIHJlcXVlc3RUaWxlVXBkYXRl
KGludCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCk7CisgICAgdm9p
ZCBjYW5jZWxUaWxlVXBkYXRlKGludCB0aWxlSUQpOwogCiAgICAgUGFzc1JlZlB0cjxUaWxlZERy
YXdpbmdBcmVhVGlsZT4gY3JlYXRlVGlsZShjb25zdCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29v
cmRpbmF0ZSYpOwogCkBAIC0xNDIsNyArMTMyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92
ZVRpbGUoY29uc3QgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUmIGNvb3JkaW5hdGUp
OwogICAgIHZvaWQgcmVtb3ZlQWxsVGlsZXMoKTsKIAotICAgIFdlYkNvcmU6OkludFJlY3QgY29u
dGVudHNSZWN0KCkgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50UmVjdCBzY2FsZWRDb250ZW50c1Jl
Y3QoKSBjb25zdDsKIAogICAgIFdlYkNvcmU6OkludFJlY3QgY2FsY3VsYXRlS2VlcFJlY3QoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZVJlY3QpIGNvbnN0OwogICAgIFdlYkNvcmU6Oklu
dFJlY3QgY2FsY3VsYXRlQ292ZXJSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpc2libGVS
ZWN0KSBjb25zdDsKQEAgLTE1NCwxNiArMTQ0LDE4IEBAIHByaXZhdGU6CiBwcml2YXRlOgogICAg
IGJvb2wgbV9pc1dhaXRpbmdGb3JEaWRTZXRGcmFtZU5vdGlmaWNhdGlvbjsKICAgICBib29sIG1f
aXNWaXNpYmxlOworICAgIGJvb2wgbV9pc1RpbGVVcGRhdGVzRW5hYmxlZDsKIAogICAgIFdlYkNv
cmU6OkludFNpemUgbV92aWV3U2l6ZTsgLy8gU2l6ZSBvZiB0aGUgQmFja2luZ1N0b3JlIGFzIHdl
bGwuCiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX2xhc3RTZXRWaWV3U2l6ZTsKIAotICAgIFBsYXRm
b3JtV2ViVmlldyogbV93ZWJWaWV3OworLy8gICAgdHlwZWRlZiBIYXNoTWFwPFRpbGVkRHJhd2lu
Z0FyZWFUaWxlOjpDb29yZGluYXRlLCBSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+ID4gVGls
ZU1hcDsKKy8vICAgIFRpbGVNYXAgbV90aWxlczsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxUaWxl
ZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSwgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxl
PiA+IFRpbGVNYXA7Ci0gICAgVGlsZU1hcCBtX3RpbGVzOworICAgIFRpbGVkRHJhd2luZ0FyZWFU
aWxlU2V0KiBtX21haW5UaWxlczsKKyAgICBUaWxlZERyYXdpbmdBcmVhVGlsZVNldCogbV90cmFu
c2l0aW9uVGlsZXM7CiAKLSAgICBXVEY6Okhhc2hNYXA8aW50LCBUaWxlZERyYXdpbmdBcmVhVGls
ZSo+IG1fdGlsZXNCeUlEOworLy8gICAgV1RGOjpIYXNoTWFwPGludCwgVGlsZWREcmF3aW5nQXJl
YVRpbGUqPiBtX3RpbGVzQnlJRDsKIAogICAgIHR5cGVkZWYgUnVuTG9vcDo6VGltZXI8VGlsZWRE
cmF3aW5nQXJlYVByb3h5PiBUaWxlVGltZXI7CiAgICAgVGlsZVRpbWVyIG1fdGlsZUJ1ZmZlclVw
ZGF0ZVRpbWVyOwpAQCAtMTc1LDkgKzE2NywxNyBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OkZs
b2F0U2l6ZSBtX2NvdmVyQXJlYU11bHRpcGxpZXI7CiAKICAgICBXZWJDb3JlOjpJbnRSZWN0IG1f
cHJldmlvdXNWaXNpYmxlUmVjdDsKLSAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7CisgICAgZmxv
YXQgbV92aWV3U2NhbGU7CisgICAgYm9vbCBtX2ZvcmNlUmVwYWludFdoZW5SZXN1bWluZ1BhaW50
aW5nOworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBQTEFURk9STShRVCkK
KyAgICBSdW5Mb29wOjpUaW1lcjxUaWxlZERyYXdpbmdBcmVhUHJveHk+IG1fYW5pbWF0aW9uVGlt
ZXI7CisgICAgQ2xpZW50Q29tcG9zaXRvciogbV9jbGllbnRDb21wb3NpdG9yOworICAgIHVpbnQz
Ml90IG1fY29tcG9zaXRpbmdDb250ZXh0SUQ7CisjZW5kaWYKIAogICAgIGZyaWVuZCBjbGFzcyBU
aWxlZERyYXdpbmdBcmVhVGlsZTsKKyAgICBmcmllbmQgY2xhc3MgVGlsZWREcmF3aW5nQXJlYVRp
bGVTZXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhVGlsZS5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFUaWxlLmgKaW5kZXggYzgxOGEzZi4uYTAxM2M4NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFUaWxl
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFUaWxlLmgK
QEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0OwogICAg
IHZvaWQgaW52YWxpZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgdm9pZCB1cGRh
dGVCYWNrQnVmZmVyKCk7CisgICAgdm9pZCBjYW5jZWxCYWNrQnVmZmVyVXBkYXRlKCk7CiAgICAg
Ym9vbCBoYXNSZWFkeUJhY2tCdWZmZXIoKSBjb25zdDsKICAgICB2b2lkIHN3YXBCYWNrQnVmZmVy
VG9Gcm9udCgpOwogICAgIGJvb2wgaXNSZWFkeVRvUGFpbnQoKSBjb25zdDsKQEAgLTY0LDcgKzY1
LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVzaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsK
IAogICAgIHZvaWQgdXBkYXRlRnJvbUNodW5rKFVwZGF0ZUNodW5rKiB1cGRhdGVDaHVuaywgZmxv
YXQpOwotCisgICAgdm9pZCByZWxlYXNlQmFja0J1ZmZlcigpOwogICAgIGludCBJRCgpIGNvbnN0
IHsgcmV0dXJuIG1fSUQ7IH0KIAogcHJpdmF0ZToKQEAgLTgwLDYgKzgxLDggQEAgcHJpdmF0ZToK
ICNpZiBQTEFURk9STShRVCkKICAgICBRUGl4bWFwIG1fYnVmZmVyOwogICAgIFFQaXhtYXAgbV9i
YWNrQnVmZmVyOworICAgIGJvb2wgbV9pc0JhY2tCdWZmZXJWYWxpZDsKKyAgICBib29sIG1faXNG
cm9udEJ1ZmZlclZhbGlkOwogICAgIFFSZWdpb24gbV9kaXJ0eVJlZ2lvbjsKICNlbmRpZgogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggMjllOGU4YS4u
MGY4MzNmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAg
LTI4LDkgKzI4LDExIEBACiAKICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5
LmgiCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyLmgiCisjaW5jbHVk
ZSAiQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHkuaCIKICNpbmNsdWRlICJEYXRhUmVmZXJl
bmNlLmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgogI2luY2x1ZGUgIkZpbmRJbmRp
Y2F0b3IuaCIKKyNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCiAjaW5jbHVkZSAiTWVzc2Fn
ZUlELmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlBh
Z2VDbGllbnQuaCIKQEAgLTM5LDYgKzQxLDcgQEAKICNpbmNsdWRlICJTdHJpbmdQYWlyVmVjdG9y
LmgiCiAjaW5jbHVkZSAiVGV4dENoZWNrZXIuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tlclN0YXRl
LmgiCisjaW5jbHVkZSAiVGlsZWREcmF3aW5nQXJlYVByb3h5LmgiCiAjaW5jbHVkZSAiV0tDb250
ZXh0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdC5oIgogI2luY2x1ZGUg
IldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uaCIKQEAgLTgxLDYgKzg0LDExIEBACiAjaW5jbHVkZSA8
c2hsb2JqLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgIlNoYXJlZE1l
bW9yeS5oIgorI2luY2x1ZGUgIlVwZGF0ZUNodW5rLmgiCisjZW5kaWYKKwogI2lmbmRlZiBOREVC
VUcKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmg+CiAjZW5kaWYKQEAgLTIz
Nyw2ICsyNDUsNDQgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmluaXRpYWxpemVDb250ZXh0TWVudUNs
aWVudChjb25zdCBXS1BhZ2VDb250ZXh0TWVudUNsaWVudCogY2wKICAgICBtX2NvbnRleHRNZW51
Q2xpZW50LmluaXRpYWxpemUoY2xpZW50KTsKIH0KIAordm9pZCBXZWJQYWdlUHJveHk6OmNoYW5n
ZURyYXdpbmdBcmVhVHlwZShEcmF3aW5nQXJlYVR5cGUgYXJlYVR5cGUpCit7CisgICAgaWYgKCFp
c1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChkcmF3aW5nQXJlYSgpLT50eXBl
KCkgPT0gYXJlYVR5cGUpIHsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhbiBvdXRzdGFu
ZGluZyBhcmVhIGNoYW5nZSByZXF1ZXN0IGF0IHRoZSBXZWIgcHJvY2VzcyBzaWRlLgorICAgICAg
ICBpZiAobV9wZW5kaW5nRHJhd2luZ0FyZWEpIHsKKyAgICAgICAgICAgIC8vIFNldCB0aGUgY3Vy
cmVudCBkcmF3aW5nIGFyZWEgYmFjayBvbiB0aGUgV2ViIHByb2Nlc3Mgc2lkZS4KKyAgICAgICAg
ICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q2hhbmdlRHJhd2luZ0FyZWFU
eXBlKGRyYXdpbmdBcmVhKCktPnR5cGUoKSksIG1fcGFnZUlEKTsKKworICAgICAgICAgICAgLy8g
WmVybyB0aGUgcGVuZGluZyBkcmF3aW5nIGFyZWEsIHNvIHRoYXQgd2hlbiB0aGUgRGlkQ2hhbmdl
RHJhd2luZ0FyZWFUeXBlIG1lc3NhZ2UgY29tZXMsCisgICAgICAgICAgICAvLyB0aGUgY3VycmVu
dCBkcmF3aW5nIGFyZWEgaXMga2VwdCB1bmNoYW5nZWQuCisgICAgICAgICAgICBtX3BlbmRpbmdE
cmF3aW5nQXJlYSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG1fcGVuZGluZ0RyYXdpbmdBcmVhID0gMDsKKworICAgIHN3aXRjaCAoYXJlYVR5cGUpIHsKKyAg
ICBjYXNlIERyYXdpbmdBcmVhVHlwZUNodW5rZWRVcGRhdGU6IHsKKyAgICAgICAgbV9wZW5kaW5n
RHJhd2luZ0FyZWEgPSBDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eTo6Y3JlYXRlKGRyYXdp
bmdBcmVhKCktPnBsYXRmb3JtV2ViVmlldygpLCB0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIGNhc2UgRHJhd2luZ0FyZWFU
eXBlVGlsZWQ6IHsKKyAgICAgICAgbV9wZW5kaW5nRHJhd2luZ0FyZWEgPSBUaWxlZERyYXdpbmdB
cmVhUHJveHk6OmNyZWF0ZShkcmF3aW5nQXJlYSgpLT5wbGF0Zm9ybVdlYlZpZXcoKSwgdGhpcyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICBpZiAobV9wZW5kaW5nRHJhd2luZ0FyZWEp
CisgICAgICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q2hhbmdlRHJhd2lu
Z0FyZWFUeXBlKG1fcGVuZGluZ0RyYXdpbmdBcmVhLT50eXBlKCkpLCBtX3BhZ2VJRCk7Cit9CisK
IHZvaWQgV2ViUGFnZVByb3h5OjpyZWF0dGFjaFRvV2ViUHJvY2VzcygpCiB7CiAgICAgbV9pc1Zh
bGlkID0gdHJ1ZTsKQEAgLTEyMzAsNiArMTI3NiwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlk
UmVjZWl2ZVN5bmNNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJ
UAogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCisgICAgaWYgKG1lc3NhZ2VJRC5pczxD
b3JlSVBDOjpNZXNzYWdlQ2xhc3NEcmF3aW5nQXJlYVByb3h5PigpKSB7CisgICAgICAgIG1fZHJh
d2luZ0FyZWEtPmRpZFJlY2VpdmVTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFy
Z3VtZW50cywgcmVwbHkpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQogICAgIGlmIChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNz
V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eT4oKSkgewpAQCAtMTkzNCw2ICsxOTg0LDI0IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpkaWREcmF3KCkKICAgICBtX3VpQ2xpZW50LmRpZERyYXcodGhpcyk7
CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRDaGFuZ2VEcmF3aW5nQXJlYVR5cGUodWludDY0
X3QgYXJlYUlEKQoreworICAgIC8vIENoZWNrIGlmIHRoaXMgY2hhbmdlIHdhcyBpbml0aWF0ZWQg
YnkgdGhlIFVJIHByb2Nlc3MuCisgICAgaWYgKCFtX3BlbmRpbmdEcmF3aW5nQXJlYSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyB0aGUgcmlnaHQgYXJlYSB0byBj
aGFuZ2UgdG8uCisvLyAgICBpZiAobV9wZW5kaW5nRHJhd2luZ0FyZWEtPmluZm8oKS5pZCAhPSBz
dGF0aWNfY2FzdDxEcmF3aW5nQXJlYUJhc2U6OkRyYXdpbmdBcmVhSUQ+KGFyZWFJRCkpCisvLyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9wZW5kaW5nRHJhd2luZ0FyZWEtPnNldFNpemUoZHJhd2lu
Z0FyZWEoKS0+c2l6ZSgpLCBJbnRTaXplKCkpOworICAgIG1fcGVuZGluZ0RyYXdpbmdBcmVhLT5z
ZXRQYWdlSXNWaXNpYmxlKG1fcGFnZUNsaWVudC0+aXNWaWV3VmlzaWJsZSgpKTsKKworICAgIHNl
dERyYXdpbmdBcmVhKG1fcGVuZGluZ0RyYXdpbmdBcmVhLnJlbGVhc2UoKSk7CisKKyAgICBtX3Bl
bmRpbmdEcmF3aW5nQXJlYSA9IDA7Cit9CisKIC8vIEluc3BlY3RvcgogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUikKQEAgLTI0ODQsNiArMjU1MiwyMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZnJhbWVT
ZXRMYXJnZXN0RnJhbWVDaGFuZ2VkKHVpbnQ2NF90IGZyYW1lSUQpCiAgICAgbV9mcmFtZVNldExh
cmdlc3RGcmFtZSA9IGZyYW1lOwogfQogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQordm9pZCBXZWJQYWdlUHJveHk6OmRpZENoYW5nZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoYm9v
bCBjb21wb3NpdGluZywgdW5zaWduZWQgaW50IGRyYXdpbmdBcmVhSW5mbywgdW5zaWduZWQgaW50
KQoreworTGF5ZXJUcmVlQ29udGV4dCB4OyAvLyBGSVhNRSEhIQoreC5jb250ZXh0SUQgPSBkcmF3
aW5nQXJlYUluZm87CisgICAgaWYgKGNvbXBvc2l0aW5nKQorICAgICAgICBlbnRlckFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKHgpOworICAgIGVsc2UKKyAgICAgICAgZXhpdEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKCk7CisKKyAgICBkcmF3aW5nQXJlYUluZm8gPSBkcmF3aW5nQXJlYSgp
LT50eXBlKCk7Cit9CisjZW5kaWYKKwogdm9pZCBXZWJQYWdlUHJveHk6OnByb2Nlc3NEaWRCZWNv
bWVVbnJlc3BvbnNpdmUoKQogewogICAgIG1fbG9hZGVyQ2xpZW50LnByb2Nlc3NEaWRCZWNvbWVV
bnJlc3BvbnNpdmUodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgK
aW5kZXggNWU4MmMyZC4uMmJhYWZmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaApAQCAtOTgsNiArOTgsOSBAQCBzdHJ1Y3QgUGxhdGZvcm1Qb3B1cE1lbnVEYXRhOwog
c3RydWN0IFByaW50SW5mbzsKIHN0cnVjdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOwogc3Ry
dWN0IFdlYlBvcHVwSXRlbTsKKyNpZiBQTEFURk9STShRVCkKK2NsYXNzIFVwZGF0ZUNodW5rOwor
I2VuZGlmCiAKICNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCiBjbGFzcyBXZWJHZXN0dXJlRXZl
bnQ7CkBAIC0xNjYsNiArMTY5LDcgQEAgcHVibGljOgogCiAgICAgRHJhd2luZ0FyZWFQcm94eSog
ZHJhd2luZ0FyZWEoKSB7IHJldHVybiBtX2RyYXdpbmdBcmVhLmdldCgpOyB9CiAgICAgdm9pZCBz
ZXREcmF3aW5nQXJlYShQYXNzT3duUHRyPERyYXdpbmdBcmVhUHJveHk+KTsKKyAgICB2b2lkIGNo
YW5nZURyYXdpbmdBcmVhVHlwZShEcmF3aW5nQXJlYVR5cGUpOwogCiAgICAgV2ViQmFja0Zvcndh
cmRMaXN0KiBiYWNrRm9yd2FyZExpc3QoKSB7IHJldHVybiBtX2JhY2tGb3J3YXJkTGlzdC5nZXQo
KTsgfQogCkBAIC01MzcsNiArNTQxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJ1bkJlZm9yZVVu
bG9hZENvbmZpcm1QYW5lbChjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVpbnQ2NF90IGZyYW1lSUQs
IGJvb2wmIHNob3VsZENsb3NlKTsKICAgICB2b2lkIGRpZENoYW5nZVZpZXdwb3J0RGF0YShjb25z
dCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYpOwogICAgIHZvaWQgcGFnZURpZFNjcm9sbCgp
OworICAgIHZvaWQgZGlkQ2hhbmdlRHJhd2luZ0FyZWFUeXBlKHVpbnQ2NF90IGFyZWFJRCk7CiAg
ICAgdm9pZCBydW5PcGVuUGFuZWwodWludDY0X3QgZnJhbWVJRCwgY29uc3QgV2ViT3BlblBhbmVs
UGFyYW1ldGVyczo6RGF0YSYpOwogICAgIHZvaWQgcHJpbnRGcmFtZSh1aW50NjRfdCBmcmFtZUlE
KTsKICAgICB2b2lkIGV4Y2VlZGVkRGF0YWJhc2VRdW90YSh1aW50NjRfdCBmcmFtZUlELCBjb25z
dCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBj
b25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1aW50NjRfdCBjdXJyZW50UXVvdGEsIHVpbnQ2NF90
IGN1cnJlbnRVc2FnZSwgdWludDY0X3QgZXhwZWN0ZWRVc2FnZSwgdWludDY0X3QmIG5ld1F1b3Rh
KTsKQEAgLTY0Myw2ICs2NDgsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgaW5pdGlhbGl6ZVNh
bmRib3hFeHRlbnNpb25IYW5kbGUoY29uc3QgV2ViQ29yZTo6S1VSTCYsIFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZSYpOwogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHZv
aWQgZGlkQ2hhbmdlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyhib29sIGNvbXBvc2l0aW5nLCB1bnNp
Z25lZCBpbnQsIHVuc2lnbmVkIGludCk7CisjZW5kaWYKKwogICAgIFBhZ2VDbGllbnQqIG1fcGFn
ZUNsaWVudDsKICAgICBXZWJMb2FkZXJDbGllbnQgbV9sb2FkZXJDbGllbnQ7CiAgICAgV2ViUG9s
aWN5Q2xpZW50IG1fcG9saWN5Q2xpZW50OwpAQCAtNjUzLDYgKzY2Miw3IEBAIHByaXZhdGU6CiAg
ICAgV2ViUGFnZUNvbnRleHRNZW51Q2xpZW50IG1fY29udGV4dE1lbnVDbGllbnQ7CiAKICAgICBP
d25QdHI8RHJhd2luZ0FyZWFQcm94eT4gbV9kcmF3aW5nQXJlYTsKKyAgICBPd25QdHI8RHJhd2lu
Z0FyZWFQcm94eT4gbV9wZW5kaW5nRHJhd2luZ0FyZWE7CiAgICAgUmVmUHRyPFdlYkNvbnRleHQ+
IG1fY29udGV4dDsKICAgICBSZWZQdHI8V2ViUGFnZUdyb3VwPiBtX3BhZ2VHcm91cDsKICAgICBS
ZWZQdHI8V2ViRnJhbWVQcm94eT4gbV9tYWluRnJhbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgppbmRleCBjODEyYWUxLi5kMTk5ZTdj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3Nh
Z2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW4KQEAgLTUyLDYgKzUyLDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBX
aW5kb3dUb1NjcmVlbihXZWJDb3JlOjpJbnRSZWN0IHJlY3QpIC0+IChXZWJDb3JlOjpJbnRSZWN0
IHNjcmVlbkZyYW1lKQogICAgIFJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbChXVEY6OlN0cmlu
ZyBtZXNzYWdlLCB1aW50NjRfdCBmcmFtZUlEKSAtPiAoYm9vbCBzaG91bGRDbG9zZSkKICAgICBQ
YWdlRGlkU2Nyb2xsKCkKKyAgICBEaWRDaGFuZ2VEcmF3aW5nQXJlYVR5cGUodWludDMyX3QgYXJl
YUlEKQogICAgIFJ1bk9wZW5QYW5lbCh1aW50NjRfdCBmcmFtZUlELCBXZWJLaXQ6OldlYk9wZW5Q
YW5lbFBhcmFtZXRlcnM6OkRhdGEgcGFyYW1ldGVycykKICAgICBQcmludEZyYW1lKHVpbnQ2NF90
IGZyYW1lSUQpIC0+ICgpCiAgICAgUnVuTW9kYWwoKQpAQCAtMjA4LDQgKzIwOSw5IEBAIG1lc3Nh
Z2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIFN0YXJ0RHJhZ0Ry
b3AoV2ViQ29yZTo6SW50UG9pbnQgaW1hZ2VQb2ludCwgV2ViQ29yZTo6SW50UG9pbnQgZHJhZ1Bv
aW50LCB1aW50NjRfdCBva0VmZmVjdCwgSGFzaE1hcDxVSU5ULFZlY3RvcjxTdHJpbmc+ID4gZGF0
YU1hcCwgV2ViQ29yZTo6SW50U2l6ZSBkcmFnSW1hZ2VTaXplLCBXZWJLaXQ6OlNoYXJlZE1lbW9y
eTo6SGFuZGxlIGRyYWdJbWFnZSwgYm9vbCBsaW5rRHJhZykKICNlbmRpZgorCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgICMgQWNjZWxlcmF0ZWQgY29tcHNpdGluZyBtZXNz
YWdlcy4KKyAgICBEaWRDaGFuZ2VBY2NlbGVyYXRlZENvbXBvc2l0aW5nKGJvb2wgY29tcG9zaXRp
bmcsIHVpbnQzMl90IG5ld0RyYXdpbmdBcmVhKSAtPiAodWludDMyX3QgYSkKKyNlbmRpZgogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByZWZlcmVuY2VzLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcmVmZXJlbmNlcy5jcHAKaW5kZXggZWZkYTRj
ZC4uMDM5ZDliZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByZWZl
cmVuY2VzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJlZmVyZW5jZXMu
Y3BwCkBAIC04NCw3ICs4NCw0MCBAQCB2b2lkIFdlYlByZWZlcmVuY2VzOjp1cGRhdGVEb3VibGVW
YWx1ZUZvcktleShjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlIHZhbHVlKQogICAgIHBsYXRmb3Jt
VXBkYXRlRG91YmxlVmFsdWVGb3JLZXkoa2V5LCB2YWx1ZSk7CiAgICAgdXBkYXRlKCk7IC8vIEZJ
WE1FOiBPbmx5IHNlbmQgb3ZlciB0aGUgY2hhbmdlZCBrZXkgYW5kIHZhbHVlLgogfQorLyoKK3Zv
aWQgV2ViUHJlZmVyZW5jZXM6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKGJvb2wg
ZmxhZykKK3sKKyAgICBtX3N0b3JlLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkID0gZmxh
ZzsKKyAgICB1cGRhdGUoKTsKK30KKworYm9vbCBXZWJQcmVmZXJlbmNlczo6YWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0VuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0b3JlLmFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdFbmFibGVkOworfQorCit2b2lkIFdlYlByZWZlcmVuY2VzOjpzZXRDb21w
b3NpdGluZ0JvcmRlcnNWaXNpYmxlKGJvb2wgZmxhZykKK3sKKyAgICBtX3N0b3JlLmNvbXBvc2l0
aW5nQm9yZGVyc1Zpc2libGUgPSBmbGFnOworICAgIHVwZGF0ZSgpOworfQogCitib29sIFdlYlBy
ZWZlcmVuY2VzOjpjb21wb3NpdGluZ0JvcmRlcnNWaXNpYmxlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9zdG9yZS5jb21wb3NpdGluZ0JvcmRlcnNWaXNpYmxlOworfQorCit2b2lkIFdlYlByZWZl
cmVuY2VzOjpzZXRDb21wb3NpdGluZ1JlcGFpbnRDb3VudGVyc1Zpc2libGUoYm9vbCBmbGFnKQor
eworICAgIG1fc3RvcmUuY29tcG9zaXRpbmdSZXBhaW50Q291bnRlcnNWaXNpYmxlID0gZmxhZzsK
KyAgICB1cGRhdGUoKTsKK30KKworYm9vbCBXZWJQcmVmZXJlbmNlczo6Y29tcG9zaXRpbmdSZXBh
aW50Q291bnRlcnNWaXNpYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdG9yZS5jb21wb3Np
dGluZ1JlcGFpbnRDb3VudGVyc1Zpc2libGU7Cit9CisqLwogI2RlZmluZSBERUZJTkVfUFJFRkVS
RU5DRV9HRVRURVJfQU5EX1NFVFRFUlMoS2V5VXBwZXIsIEtleUxvd2VyLCBUeXBlTmFtZSwgVHlw
ZSwgRGVmYXVsdFZhbHVlKSBcCiAgICAgdm9pZCBXZWJQcmVmZXJlbmNlczo6c2V0IyNLZXlVcHBl
cihjb25zdCBUeXBlJiB2YWx1ZSkgXAogICAgIHsgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1RpbGVkRHJhd2luZ0FyZWFQcm94eVF0LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhUHJveHlRdC5jcHAKaW5kZXggNWRkYTQ1
NC4uNTc5NjkwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1RpbGVk
RHJhd2luZ0FyZWFQcm94eVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
VGlsZWREcmF3aW5nQXJlYVByb3h5UXQuY3BwCkBAIC0yOCwxNCArMjgsMzUgQEAKIAogI2lmIEVO
QUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogCisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgi
CiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFNZXNzYWdlS2luZHMuaCIKICNpbmNsdWRlICJEcmF3aW5n
QXJlYVByb3h5TWVzc2FnZUtpbmRzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2lu
Y2x1ZGUgIlVwZGF0ZUNodW5rLmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCiAjaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAKICNpbmNsdWRl
ICJxZ3JhcGhpY3N3a3ZpZXcuaCIKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
KyNpbmNsdWRlICJXZWJTZXJpYWxpemVkQ29tcG9zaXRpbmdJbmZvLmgiCisjaW5jbHVkZSAidGV4
bWFwL1RleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJ0ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCIKKyNpbmNs
dWRlICJxdC9UZXh0dXJlTWFwcGVyUXQuaCIKKyNpbmNsdWRlIDxRRGF0ZVRpbWU+CisjaW5jbHVk
ZSAib3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oIgorI2lmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIp
CisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjZWxzZQorI2luY2x1ZGUgPEdML2dsLmg+CitleHRl
cm4gIkMiIHsKKyAgICB2b2lkIGdsVXNlUHJvZ3JhbShHTHVpbnQpOworfQorI2VuZGlmCisjZW5k
aWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKICNkZWZpbmUgVElMRV9ERUJVR19MT0cK
QEAgLTY3LDYgKzg4LDMzNSBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6c25hcHNob3RU
YWtlbihVcGRhdGVDaHVuayYgY2h1bmspCiAgICAgZW1pdCBtX3dlYlZpZXctPnNuYXBzaG90VGFr
ZW4oY2h1bmsuY3JlYXRlSW1hZ2UoKSk7CiB9CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisKK3N0cnVjdCBDbGllbnRDb21wb3NpdG9yIDogcHVibGljIEdyYXBoaWNzTGF5ZXJD
bGllbnQgeworICAgIHN0cnVjdCBMYXllckRhdGEgeworICAgICAgICBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKiBsYXllcjsKKyAgICAgICAgUUltYWdlIGltYWdlOworICAgICAgICBMYXllckRhdGEo
KSA6IGxheWVyKDApIHsgfQorICAgIH07CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8V2ViTGF5ZXJJ
RCwgTGF5ZXJEYXRhPiBMYXllck1hcDsKKyAgICBmbG9hdCBjb250ZW50U2NhbGU7CisKKyAgICBP
d25QdHI8VGV4dHVyZU1hcHBlcj4gdGV4dHVyZU1hcHBlcjsKKyAgICBPd25QdHI8R3JhcGhpY3NM
YXllcj4gbV9yb290TGF5ZXI7CisgICAgVmVjdG9yPFdlYkxheWVySUQ+IG1fbGF5ZXJzVG9EZWxl
dGU7CisKKyAgICBMYXllck1hcCBsYXllcnM7CisgICAgV2ViTGF5ZXJJRCByb290TGF5ZXJJRDsK
KworICAgIEdyYXBoaWNzTGF5ZXIqIGNyZWF0ZUxheWVyKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBuZXcgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIodGhpcyk7CisgICAgfQorCisgICAgR3Jh
cGhpY3NMYXllciogbGF5ZXJCeUlEKFdlYkxheWVySUQgaWQpIHsgcmV0dXJuIGlkID8gbGF5ZXJz
LmdldChpZCkubGF5ZXIgOiAwOyB9CisgICAgR3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgeyBy
ZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KKworICAgIHZvaWQgc3luY0RlbGV0ZWRMYXllcnMo
KQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xheWVyc1RvRGVsZXRl
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBXZWJMYXllcklEIGlkID0gbV9sYXll
cnNUb0RlbGV0ZVtpXTsKKworICAgICAgICAgICAgLy8gVGhpcyBtaWdodCBoYXBwZW4gaWYgdGhl
IHdlYiBwcm9jZXNzIGRlbGV0ZXMgdGhlIGxheWVyIGFmdGVyIHRoZSBVSSBwcm9jZXNzIGFscmVh
ZHkgY2xlYXJlZCB0aGUgbGF5ZXJzIGhlcmUuCisgICAgICAgICAgICBpZiAoIWxheWVycy5jb250
YWlucyhpZCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBkZWxldGUg
bGF5ZXJzLmdldChpZCkubGF5ZXI7CisgICAgICAgICAgICBsYXllcnMucmVtb3ZlKGlkKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEdy
YXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEdyYXBoaWNzTGF5
ZXJQYWludGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApCisgICAgeworICAgICAgICBm
b3IgKExheWVyTWFwOjppdGVyYXRvciBpdCA9IGxheWVycy5iZWdpbigpOyBpdCAhPSBsYXllcnMu
ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLmxheWVyICE9IGxheWVy
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBMYXllckRhdGEmIGRh
dGEgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgSW50UmVjdCBjbGlwKGluQ2xpcCk7CisgICAg
ICAgICAgICBjbGlwLmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KDAsIDApLCBkYXRhLmltYWdl
LnNpemUoKSkpOworICAgICAgICAgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBjb250ZXh0LnBsYXRm
b3JtQ29udGV4dCgpOworICAgICAgICAgICAgcGFpbnRlci0+c2V0Q29tcG9zaXRpb25Nb2RlKFFQ
YWludGVyOjpDb21wb3NpdGlvbk1vZGVfQ2xlYXIpOworICAgICAgICAgICAgcGFpbnRlci0+Zmls
bFJlY3QoY2xpcCwgUXQ6OnRyYW5zcGFyZW50KTsKKyAgICAgICAgICAgIHBhaW50ZXItPnNldENv
bXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7CisgICAgICAg
ICAgICBwYWludGVyLT5kcmF3SW1hZ2UoY2xpcCwgZGF0YS5pbWFnZSwgY2xpcCk7CisgICAgICAg
ICAgICAvL3N0YXRpYyBpbnQgdHR0ID0gMDsKKworCisgICAgICAgICAgICAvL2RhdGEuaW1hZ2Uu
c2F2ZShRU3RyaW5nKCIvdG1wLzEvYWFhIikgKyBRU3RyaW5nOjpudW1iZXIodHR0KyspICsgIi5w
bmciLCAicG5nIik7CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5
ZXIqLCBkb3VibGUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoY29u
c3QgR3JhcGhpY3NMYXllciopIHsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG93RGVidWdCb3JkZXJz
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENv
dW50ZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Cit9OworCit2b2lkIFRpbGVkRHJhd2luZ0Fy
ZWFQcm94eTo6c3luY0NvbXBvc2l0aW5nU3RhdGUoY29uc3QgV2ViU2VyaWFsaXplZENvbXBvc2l0
aW5nSW5mbyYgaW5mbykKK3sKKyAgICBpZiAoIW1fY2xpZW50Q29tcG9zaXRvcikgeworICAgICAg
ICBtX2NsaWVudENvbXBvc2l0b3IgPSBuZXcgQ2xpZW50Q29tcG9zaXRvcjsKKyAgICAgICAgR3Jh
cGhpY3NMYXllciogcm9vdExheWVyID0gbV9jbGllbnRDb21wb3NpdG9yLT5jcmVhdGVMYXllcigp
OworICAgICAgICBtX2NsaWVudENvbXBvc2l0b3ItPm1fcm9vdExheWVyID0gcm9vdExheWVyOwor
ICAgICAgICByb290TGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMoZmFsc2UpOworICAgICAgICByb290
TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7CisgICAgICAgIHJvb3RMYXllci0+c2V0QW5j
aG9yUG9pbnQoRmxvYXRQb2ludDNEKDAsIDAsIDApKTsKKworICAgICAgICAvLyBUaGUgcm9vdCBs
YXllciBzaG91bGQgbm90IGhhdmUgemVybyBzaXplLCBvciBpdCB3b3VsZCBiZSBvcHRpbWl6ZWQg
b3V0LgorICAgICAgICByb290TGF5ZXItPnNldFNpemUoRmxvYXRTaXplKDEuMCwgMS4wKSk7Cisg
ICAgfQorCisgICAgaWYgKGluZm8ucm9vdExheWVySUQgIT0gbV9jbGllbnRDb21wb3NpdG9yLT5y
b290TGF5ZXJJRCAmJiBtX2NsaWVudENvbXBvc2l0b3ItPm1fcm9vdExheWVyKQorICAgICAgICBt
X2NsaWVudENvbXBvc2l0b3ItPm1fcm9vdExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOworCisg
ICAgbV9jbGllbnRDb21wb3NpdG9yLT5yb290TGF5ZXJJRCA9IGluZm8ucm9vdExheWVySUQ7Cisg
ICAgbV9jbGllbnRDb21wb3NpdG9yLT5jb250ZW50U2NhbGUgPSBpbmZvLmNvbnRlbnRTY2FsZTsK
KworICAgIG1fY2xpZW50Q29tcG9zaXRvci0+bV9sYXllcnNUb0RlbGV0ZS5hcHBlbmQoaW5mby5k
ZWxldGVkTGF5ZXJzKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5mby5sYXllcnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgV2ViTGF5ZXJJRCBpZCA9IGluZm8ubGF5ZXJz
W2ldLmRhdGEuaWQ7CisKKyAgICAgICAgaWYgKG1fY2xpZW50Q29tcG9zaXRvci0+bGF5ZXJzLmNv
bnRhaW5zKGlkKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIENsaWVudENvbXBv
c2l0b3I6OkxheWVyRGF0YSBkYXRhOworICAgICAgICBkYXRhLmxheWVyID0gbV9jbGllbnRDb21w
b3NpdG9yLT5jcmVhdGVMYXllcigpOworICAgICAgICBtX2NsaWVudENvbXBvc2l0b3ItPmxheWVy
cy5hZGQoaWQsIGRhdGEpOworCisgICAgICAgIGlmIChpZCA9PSBpbmZvLnJvb3RMYXllcklEKSB7
CisgICAgICAgICAgICBtX2NsaWVudENvbXBvc2l0b3ItPm1fcm9vdExheWVyLT5yZW1vdmVBbGxD
aGlsZHJlbigpOworICAgICAgICAgICAgbV9jbGllbnRDb21wb3NpdG9yLT5tX3Jvb3RMYXllci0+
YWRkQ2hpbGQoZGF0YS5sYXllcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHNpemVf
dCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGluZm8ubGF5ZXJzLnNpemUoKTsgKytsYXll
ckluZGV4KSB7CisgICAgICAgIGNvbnN0IFdlYlNlcmlhbGl6ZWRMYXllckNvbmZpZ3VyYXRpb24m
IGNvbmZpZyA9IGluZm8ubGF5ZXJzW2xheWVySW5kZXhdOworICAgICAgICBXZWJMYXllcklEIGlk
ID0gY29uZmlnLmRhdGEuaWQ7CisKKyAgICAgICAgQ2xpZW50Q29tcG9zaXRvcjo6TGF5ZXJNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9jbGllbnRDb21wb3NpdG9yLT5sYXllcnMuZmluZChpZCk7CisgICAg
ICAgIGlmIChpdCA9PSBtX2NsaWVudENvbXBvc2l0b3ItPmxheWVycy5lbmQoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIENsaWVudENvbXBvc2l0b3I6OkxheWVyRGF0YSYgZGF0
YSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gZGF0YS5sYXll
cjsKKworICAgICAgICBsYXllci0+c2V0TmFtZShjb25maWcubmFtZSk7CisKKyAgICAgICAgLy8g
V2UgaGF2ZSBhIGNvbnRhaW5lciBsYXllciBhcyBhIHBhcmVudCB0byB0aGUgcm9vdCBsYXllciwg
c28gd2Ugc2hvdWxkbid0IHBhcmVudCBpdCB0byB0aGUgd2ViIHByb2Nlc3MgdmFsdWUuCisgICAg
ICAgIGlmIChpZCAhPSBpbmZvLnJvb3RMYXllcklEKQorICAgICAgICAgICAgbGF5ZXItPnNldFBh
cmVudChtX2NsaWVudENvbXBvc2l0b3ItPmxheWVyQnlJRChjb25maWcuZGF0YS5wYXJlbnQpKTsK
KyAgICAgICAgbGF5ZXItPnNldFJlcGxpY2F0ZWRCeUxheWVyKG1fY2xpZW50Q29tcG9zaXRvci0+
bGF5ZXJCeUlEKGNvbmZpZy5kYXRhLnJlcGxpY2EpKTsKKyAgICAgICAgbGF5ZXItPnNldE1hc2tM
YXllcihtX2NsaWVudENvbXBvc2l0b3ItPmxheWVyQnlJRChjb25maWcuZGF0YS5tYXNrKSk7CisK
KyAgICAgICAgbGF5ZXItPnNldFBvc2l0aW9uKGNvbmZpZy5kYXRhLnBvcyk7CisgICAgICAgIGxh
eWVyLT5zZXRTaXplKGNvbmZpZy5kYXRhLnNpemUpOworICAgICAgICBsYXllci0+c2V0VHJhbnNm
b3JtKGNvbmZpZy5kYXRhLnRyYW5zZm9ybSk7CisgICAgICAgIGxheWVyLT5zZXRBbmNob3JQb2lu
dChjb25maWcuZGF0YS5hbmNob3JQb2ludCk7CisgICAgICAgIGxheWVyLT5zZXRDaGlsZHJlblRy
YW5zZm9ybShjb25maWcuZGF0YS5jaGlsZHJlblRyYW5zZm9ybSk7CisgICAgICAgIGxheWVyLT5z
ZXRCYWNrZmFjZVZpc2liaWxpdHkoY29uZmlnLmRhdGEuYmFja2ZhY2VWaXNpYmxlKTsKKyAgICAg
ICAgbGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKGNvbmZpZy5kYXRhLmNvbnRlbnRzT3BhcXVlKTsK
KyAgICAgICAgbGF5ZXItPnNldENvbnRlbnRzUmVjdChjb25maWcuZGF0YS5jb250ZW50c1JlY3Qp
OworICAgICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KGNvbmZpZy5kYXRhLmRyYXdzQ29udGVu
dCk7CisKKyAgICAgICAgLy8gTmV2ZXIgbWFrZSB0aGUgcm9vdCBsYXllciBjbGlwLgorICAgICAg
ICBsYXllci0+c2V0TWFza3NUb0JvdW5kcyhpZCA9PSBpbmZvLnJvb3RMYXllcklEID8gZmFsc2Ug
OiBjb25maWcuZGF0YS5tYXNrc1RvQm91bmRzKTsKKyAgICAgICAgbGF5ZXItPnNldE9wYWNpdHko
Y29uZmlnLmRhdGEub3BhY2l0eSk7CisgICAgICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChjb25m
aWcuZGF0YS5wcmVzZXJ2ZXMzRCk7CisgICAgICAgIFZlY3RvcjxHcmFwaGljc0xheWVyKj4gY2hp
bGRyZW47CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb25maWcuY2hpbGRyZW4u
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBjaGlsZCA9IG1f
Y2xpZW50Q29tcG9zaXRvci0+bGF5ZXJCeUlEKGNvbmZpZy5jaGlsZHJlbltpXSkpCisgICAgICAg
ICAgICAgICAgY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKKyAgICAgICAgfQorICAgICAgICBsYXll
ci0+c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY29uZmlnLmFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFdl
YktpdDo6V2ViU2VyaWFsaXplZExheWVyQW5pbWF0aW9uJiBhbmltID0gY29uZmlnLmFuaW1hdGlv
bnNbaV07CisgICAgICAgICAgICBzd2l0Y2ggKGFuaW0ub3BlcmF0aW9uKSB7CisgICAgICAgICAg
ICBjYXNlIFdlYktpdDo6V2ViU2VyaWFsaXplZExheWVyQW5pbWF0aW9uOjpBZGRBbmltYXRpb246
IHsKKyAgICAgICAgICAgICAgICBLZXlmcmFtZVZhbHVlTGlzdCBrZXlmcmFtZXMoYW5pbS5hZGRE
YXRhLnByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGFu
aW0ua2V5ZnJhbWVzLnNpemUoKTsgKytqKQorICAgICAgICAgICAgICAgICAgICBrZXlmcmFtZXMu
aW5zZXJ0KGFuaW0ua2V5ZnJhbWVzW2pdLnRvS2V5ZnJhbWUoKSk7CisKKyAgICAgICAgICAgICAg
ICBjb25zdCBJbnRTaXplIGJveFNpemUgPSBhbmltLmFkZERhdGEuYm94U2l6ZTsKKyAgICAgICAg
ICAgICAgICBSZWZQdHI8QW5pbWF0aW9uPiB3ZWJDb3JlQW5pbWF0aW9uID0gQW5pbWF0aW9uOjpj
cmVhdGUoKTsKKyAgICAgICAgICAgICAgICB3ZWJDb3JlQW5pbWF0aW9uLT5zZXREZWxheShhbmlt
LmFkZERhdGEuZGVsYXkpOworICAgICAgICAgICAgICAgIHdlYkNvcmVBbmltYXRpb24tPnNldERp
cmVjdGlvbihhbmltLmFkZERhdGEuZGlyZWN0aW9uKTsKKyAgICAgICAgICAgICAgICB3ZWJDb3Jl
QW5pbWF0aW9uLT5zZXREdXJhdGlvbihhbmltLmFkZERhdGEuZHVyYXRpb24pOworICAgICAgICAg
ICAgICAgIHdlYkNvcmVBbmltYXRpb24tPnNldEZpbGxNb2RlKGFuaW0uYWRkRGF0YS5maWxsTW9k
ZSk7CisgICAgICAgICAgICAgICAgd2ViQ29yZUFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQo
YW5pbS5hZGREYXRhLml0ZXJhdGlvbkNvdW50KTsKKyAgICAgICAgICAgICAgICB3ZWJDb3JlQW5p
bWF0aW9uLT5zZXRQbGF5U3RhdGUoYW5pbS5hZGREYXRhLnBsYXlTdGF0ZSk7CisgICAgICAgICAg
ICAgICAgUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbiA9IGFuaW0uYWRkRGF0
YS50aW1pbmdGdW5jdGlvbi50b1RpbWluZ0Z1bmN0aW9uKCk7CisgICAgICAgICAgICAgICAgaWYg
KHRpbWluZ0Z1bmN0aW9uKQorICAgICAgICAgICAgICAgICAgICB3ZWJDb3JlQW5pbWF0aW9uLT5z
ZXRUaW1pbmdGdW5jdGlvbih0aW1pbmdGdW5jdGlvbik7CisgICAgICAgICAgICAgICAgZG91Ymxl
IG9mZnNldCA9IFdURjo6Y3VycmVudFRpbWUoKSAtIGFuaW0uc3RhcnRUaW1lOworICAgICAgICAg
ICAgICAgIGxheWVyLT5hZGRBbmltYXRpb24oa2V5ZnJhbWVzLCBib3hTaXplLCB3ZWJDb3JlQW5p
bWF0aW9uLmdldCgpLCBhbmltLm5hbWUsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgcGFnZSgp
LT5wcm9jZXNzKCktPmRlcHJlY2F0ZWRTZW5kKERyYXdpbmdBcmVhTGVnYWN5TWVzc2FnZTo6Tm90
aWZ5QW5pbWF0aW9uU3RhcnRlZCwgcGFnZSgpLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4odWludDMy
X3QoaWQpLCBXVEY6OmN1cnJlbnRUaW1lKCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgV2ViS2l0OjpXZWJTZXJpYWxpemVkTGF5ZXJB
bmltYXRpb246OlJlbW92ZUFuaW1hdGlvbjoKKyAgICAgICAgICAgICAgICBsYXllci0+cmVtb3Zl
QW5pbWF0aW9uKGFuaW0ubmFtZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIFdlYktpdDo6V2ViU2VyaWFsaXplZExheWVyQW5pbWF0aW9uOjpQYXVzZUFuaW1hdGlv
bjoKKyAgICAgICAgICAgICAgICBkb3VibGUgb2Zmc2V0ID0gV1RGOjpjdXJyZW50VGltZSgpIC0g
YW5pbS5zdGFydFRpbWU7CisgICAgICAgICAgICAgICAgbGF5ZXItPnBhdXNlQW5pbWF0aW9uKGFu
aW0ubmFtZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25maWcuaW1hZ2VTaGFyZWFibGVCaXRtYXApIHsK
KyAgICAgICAgICAgIGxheWVyLT5zZXRDb250ZW50c1RvSW1hZ2UoY29uZmlnLmltYWdlU2hhcmVh
YmxlQml0bWFwLT5jcmVhdGVJbWFnZSgpLmdldCgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgbGF5ZXItPnNldENvbnRlbnRzVG9JbWFnZSgwKTsKKworICAg
ICAgICBpZiAoIWNvbmZpZy5kYXRhLmRyYXdzQ29udGVudCkgeworICAgICAgICAgICAgZGF0YS5p
bWFnZSA9IFFJbWFnZSgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAg
ICAgSW50U2l6ZSB3YW50ZWRTaXplKGNvbmZpZy5kYXRhLnNpemUud2lkdGgoKSwgY29uZmlnLmRh
dGEuc2l6ZS5oZWlnaHQoKSk7CisKKyAgICAgICAgaWYgKEludFNpemUoZGF0YS5pbWFnZS5zaXpl
KCkpICE9IGNvbmZpZy5kYXRhLnNpemUpIHsKKyAgICAgICAgICAgIFFJbWFnZSBpbWFnZSh3YW50
ZWRTaXplLndpZHRoKCksIHdhbnRlZFNpemUuaGVpZ2h0KCksIGxheWVyLT5jb250ZW50c09wYXF1
ZSgpID8gUUltYWdlOjpGb3JtYXRfUkdCMTYgOiBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVs
dGlwbGllZCk7CisgICAgICAgICAgICBpbWFnZS5maWxsKDApOworICAgICAgICAgICAgZGF0YS5p
bWFnZSA9IGltYWdlOworICAgICAgICB9CisgICAgfQorCisgICAgbV93ZWJWaWV3LT51cGRhdGUo
KTsKK30KKwordm9pZCBUaWxlZERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5
ZXJDb250ZW50KHVpbnQzMl90IGlkLCBVcGRhdGVDaHVuayYgY2h1bmspCit7CisgICAgaWYgKGNo
dW5rLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ2xpZW50Q29tcG9zaXRvcjo6
TGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jbGllbnRDb21wb3NpdG9yLT5sYXllcnMuZmluZChp
ZCk7CisgICAgaWYgKGl0ID09IG1fY2xpZW50Q29tcG9zaXRvci0+bGF5ZXJzLmVuZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBRUGFpbnRlciBwYWludGVyKCZpdC0+c2Vjb25kLmltYWdlKTsK
KyAgICBRSW1hZ2UgaW1hZ2VGcm9tVXBkYXRlQ2h1bmsgPSBjaHVuay5jcmVhdGVJbWFnZSgpOwor
ICAgIGlmIChpbWFnZUZyb21VcGRhdGVDaHVuay5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgRmxvYXRSZWN0IHNjYWxlZFJlY3QoY2h1bmsucmVjdCgpKTsKKyAgICBzY2FsZWRSZWN0
LnNjYWxlKDEuMCAvIG1fY2xpZW50Q29tcG9zaXRvci0+Y29udGVudFNjYWxlKTsKKyAgICBpdC0+
c2Vjb25kLmxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3Qoc2NhbGVkUmVjdCk7CisgICAgcGFp
bnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2Up
OworICAgIHBhaW50ZXIuZHJhd0ltYWdlKGNodW5rLnJlY3QoKSwgaW1hZ2VGcm9tVXBkYXRlQ2h1
bmspOworfQorCisjZGVmaW5lIFBSSU5UX0ZQUyAwCisKKwordm9pZCBUaWxlZERyYXdpbmdBcmVh
UHJveHk6OnBhaW50Q29tcG9zaXRpbmdMYXllcihRUGFpbnRlciogdGFyZ2V0UGFpbnRlciwgY29u
c3QgSW50UmVjdCYpCit7CisgICAgaWYgKCFtX2NsaWVudENvbXBvc2l0b3IpCisgICAgICAgIHJl
dHVybjsKKworICAgIEZsb2F0UmVjdCBjbGlwUmVjdChRUmVjdEYodGFyZ2V0UGFpbnRlci0+Y2xp
cFJlZ2lvbigpLmJvdW5kaW5nUmVjdCgpKSk7CisgICAgRmxvYXRSZWN0IHNjYWxlZENvbnRlbnRz
UmVjdCA9IHRoaXMtPnNjYWxlZENvbnRlbnRzUmVjdCgpOworICAgIHNjYWxlZENvbnRlbnRzUmVj
dC5zY2FsZSgxLjAgLyBjb250ZW50c1NjYWxlKCkpOworICAgIGNsaXBSZWN0LmludGVyc2VjdChz
Y2FsZWRDb250ZW50c1JlY3QpOworCisjaWYgUFJJTlRfRlBTCisgICAgc3RhdGljIFFEYXRlVGlt
ZSBkdCA9IFFEYXRlVGltZTo6Y3VycmVudERhdGVUaW1lKCk7CisgICAgY29uc3QgUURhdGVUaW1l
IG5vdyA9IFFEYXRlVGltZTo6Y3VycmVudERhdGVUaW1lKCk7CisgICAgaW50IG1zZWNzID0gZHQu
bXNlY3NUbyhub3cpOworICAgIGlmIChtc2VjcykKKyAgICAgICAgcHJpbnRmKCIlZCBGUFMgKCVk
KVxuIiwgaW50KDEwMDAuMCAvIGZsb2F0KG1zZWNzKSksIG1zZWNzKTsKKyAgICBkdCA9IG5vdzsK
KyNlbmRpZgorICAgIEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllciA9IG1fY2xpZW50Q29tcG9zaXRv
ci0+cm9vdExheWVyKCk7CisgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVN
YXBwZXJOb2RlKHJvb3RMYXllcik7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisK
KyAgICAvL3RhcmdldFBhaW50ZXItPmJlZ2luTmF0aXZlUGFpbnRpbmcoKTsKKworICAgIC8vIFJl
c2V0IHRoZSBHTCBlcnJvciBzdGF0ZSwgc28gdGhhdCB0ZXh0dXJlLW1hcHBlciBkb2Vzbid0IHRo
aW5rIHRoZXJlJ3MgYW4gZXJyb3IuCisgICAgLy9nbEdldEVycm9yKCk7CisgICAgaWYgKCFtX2Ns
aWVudENvbXBvc2l0b3ItPnRleHR1cmVNYXBwZXIpCisgICAgICAgIG1fY2xpZW50Q29tcG9zaXRv
ci0+dGV4dHVyZU1hcHBlciA9IG5ldyBUZXh0dXJlTWFwcGVyUXQ7Ly8gbmV3IFRleHR1cmVNYXBw
ZXJHTDsKKworICAgIC8vR0xpbnQgdnBbNF07CisgICAgLy9HTGludCBwcmV2UHJvZ3JhbTsKKyAg
ICAvL2dsR2V0SW50ZWdlcnYoR0xfVklFV1BPUlQsIHZwKTsKKyAgICAvL2dsR2V0SW50ZWdlcnYo
R0xfQ1VSUkVOVF9QUk9HUkFNLCAmcHJldlByb2dyYW0pOworICAgIC8vbV9jbGllbnRDb21wb3Np
dG9yLT50ZXh0dXJlTWFwcGVyLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSh2cFsyXSwgdnBbM10p
KTsKKworLy8gICAgR0xpbnQgdyA9IG1fdmlld1NpemUud2lkdGgoKTsKKy8vICAgIEdMaW50IGgg
PSAoR0xpbnQpbV92aWV3U2l6ZS5oZWlnaHQoKTsKKyAgICBtX2NsaWVudENvbXBvc2l0b3ItPnRl
eHR1cmVNYXBwZXItPnNldFZpZXdwb3J0U2l6ZShtX3ZpZXdTaXplKTsKKworICAgIC8vIFdlIGNs
ZWFyIHRoZSBzdGVuY2lsIGJ1ZmZlciB0byAwLCBzaW5jZSBRdCBnaXZlcyB1cyAweGZmLgorLyog
ICAgZ2xDbGVhclN0ZW5jaWwoMCk7CisgICAgZ2xDbGVhcihHTF9TVEVOQ0lMX0JVRkZFUl9CSVQp
OworKi8KKyAgICBub2RlLT5zZXRUZXh0dXJlTWFwcGVyKG1fY2xpZW50Q29tcG9zaXRvci0+dGV4
dHVyZU1hcHBlci5nZXQoKSk7CisgICAgY29uc3QgUVRyYW5zZm9ybSB0ID0gdGFyZ2V0UGFpbnRl
ci0+dHJhbnNmb3JtKCk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgodC5tMTEo
KSwgdC5tMTIoKSwgMCwgdC5tMTMoKSwgdC5tMjEoKSwgdC5tMjIoKSwgMCwgdC5tMjMoKSwgMCwg
MCwgMSwgMCwgdC5tMzEoKSwgdC5tMzIoKSwgMCwgdC5tMzMoKSk7CisgICAgbV9jbGllbnRDb21w
b3NpdG9yLT50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsKKyAgICBHcmFwaGljc0NvbnRl
eHQgY29udGV4dCh0YXJnZXRQYWludGVyKTsKKyAgICBtX2NsaWVudENvbXBvc2l0b3ItPnRleHR1
cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dCgmY29udGV4dCk7CisgICAgbV9jbGllbnRDb21w
b3NpdG9yLT50ZXh0dXJlTWFwcGVyLT5iZWdpbkNsaXAobWF0cml4LCBjbGlwUmVjdCk7CisgICAg
cm9vdExheWVyLT5zZXRPcGFjaXR5KHRhcmdldFBhaW50ZXItPm9wYWNpdHkoKSk7CisgICAgYm9v
bCBmb3JjZVN5bmMgPSBtYXRyaXggIT0gcm9vdExheWVyLT50cmFuc2Zvcm0oKTsKKyAgICByb290
TGF5ZXItPnNldFRyYW5zZm9ybShtYXRyaXgpOworICAgIGJvb2wgYWxsb3dTeW5jID0gdHJ1ZTsK
KyAgICBpZiAoIWZvcmNlU3luYykgeworICAgICAgICBUaWxlZERyYXdpbmdBcmVhVGlsZVNldDo6
VGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV9tYWluVGlsZXMtPnRpbGVzKCkuZW5kKCk7CisgICAg
ICAgIGZvciAoVGlsZWREcmF3aW5nQXJlYVRpbGVTZXQ6OlRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9tYWluVGlsZXMtPnRpbGVzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
ICAgICBSZWZQdHI8VGlsZWREcmF3aW5nQXJlYVRpbGU+JiBjdXJyZW50ID0gaXQtPnNlY29uZDsK
KyAgICAgICAgICAgIGlmICghY3VycmVudC0+aXNSZWFkeVRvUGFpbnQoKSB8fCAhKGN1cnJlbnQt
PmlzRGlydHkoKSB8fCBjdXJyZW50LT5oYXNCYWNrQnVmZmVyVXBkYXRlUGVuZGluZygpKSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGFsbG93U3luYyA9IGZhbHNlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYWxsb3dTeW5j
KSB7CisgICAgICAgIG1fY2xpZW50Q29tcG9zaXRvci0+c3luY0RlbGV0ZWRMYXllcnMoKTsKKyAg
ICAgICAgcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOworICAgIH0KKworICAgIG5v
ZGUtPnBhaW50KCk7CisKKyAgICBtX2NsaWVudENvbXBvc2l0b3ItPnRleHR1cmVNYXBwZXItPmVu
ZENsaXAoKTsKKworLy8gICAgZ2xDbGVhclN0ZW5jaWwoMHgxKTsKKy8vICAgIGdsQ2xlYXIoR0xf
U1RFTkNJTF9CVUZGRVJfQklUKTsKKy8vICAgIGdsVXNlUHJvZ3JhbShwcmV2UHJvZ3JhbSk7Cisv
LyAgICB0YXJnZXRQYWludGVyLT5lbmROYXRpdmVQYWludGluZygpOworCisgICAgaWYgKG5vZGUt
PmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpCisgICAgICAgIG1fd2Vi
Vmlldy0+dXBkYXRlKCk7Cit9CisKK3ZvaWQgVGlsZWREcmF3aW5nQXJlYVByb3h5OjphdHRhY2hD
b21wb3NpdGluZ0NvbnRleHQodWludDMyX3QgaWQpCit7CisgICAgbV9jb21wb3NpdGluZ0NvbnRl
eHRJRCA9IGlkOworICAgIHVwZGF0ZVdlYlZpZXcoKTsKK30KKwordm9pZCBUaWxlZERyYXdpbmdB
cmVhUHJveHk6OmRldGFjaENvbXBvc2l0aW5nQ29udGV4dCgpCit7CisgICAgbV9jb21wb3NpdGlu
Z0NvbnRleHRJRCA9IDA7CisgICAgaWYgKG1fY2xpZW50Q29tcG9zaXRvcikKKyAgICAgICAgbV9j
bGllbnRDb21wb3NpdG9yLT5tX3Jvb3RMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKyAgICB1
cGRhdGVXZWJWaWV3KCk7Cit9CisKKyNlbmRpZgogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1RpbGVkRHJhd2lu
Z0FyZWFUaWxlUXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1RpbGVkRHJhd2lu
Z0FyZWFUaWxlUXQuY3BwCmluZGV4IDExZTMyNWYuLmNkZWRlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9UaWxlZERyYXdpbmdBcmVhVGlsZVF0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVRpbGVRdC5jcHAKQEAg
LTQ2LDYgKzQ2LDggQEAgVGlsZWREcmF3aW5nQXJlYVRpbGU6OlRpbGVkRHJhd2luZ0FyZWFUaWxl
KFRpbGVkRHJhd2luZ0FyZWFQcm94eSogcHJveHksIGNvbnN0IEMKICAgICAsIG1fY29vcmRpbmF0
ZSh0aWxlQ29vcmRpbmF0ZSkKICAgICAsIG1fcmVjdChwcm94eS0+dGlsZVJlY3RGb3JDb29yZGlu
YXRlKHRpbGVDb29yZGluYXRlKSkKICAgICAsIG1faGFzVXBkYXRlUGVuZGluZyhmYWxzZSkKKyAg
ICAsIG1faXNCYWNrQnVmZmVyVmFsaWQoZmFsc2UpCisgICAgLCBtX2lzRnJvbnRCdWZmZXJWYWxp
ZChmYWxzZSkKICAgICAsIG1fZGlydHlSZWdpb24obV9yZWN0KQogewogICAgIHN0YXRpYyBpbnQg
aWQgPSAwOwpAQCAtNjAsNiArNjIsNyBAQCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6flRpbGVkRHJh
d2luZ0FyZWFUaWxlKCkKICNpZmRlZiBUSUxFX0RFQlVHX0xPRwogICAgIHFEZWJ1ZygpIDw8ICJk
ZWxldGluZyB0aWxlIGlkPSIgPDwgbV9JRDsKICNlbmRpZgorICAgIGNhbmNlbEJhY2tCdWZmZXJV
cGRhdGUoKTsKIH0KIAogYm9vbCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6aXNEaXJ0eSgpIGNvbnN0
CkBAIC02OSwxMiArNzIsMTIgQEAgYm9vbCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6aXNEaXJ0eSgp
IGNvbnN0CiAKIGJvb2wgVGlsZWREcmF3aW5nQXJlYVRpbGU6OmlzUmVhZHlUb1BhaW50KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gIW1fYnVmZmVyLmlzTnVsbCgpOworICAgIHJldHVybiBtX2lzRnJv
bnRCdWZmZXJWYWxpZDsKIH0KIAogYm9vbCBUaWxlZERyYXdpbmdBcmVhVGlsZTo6aGFzUmVhZHlC
YWNrQnVmZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gIW1fYmFja0J1ZmZlci5pc051bGwoKSAm
JiAhbV9oYXNVcGRhdGVQZW5kaW5nOworICAgIHJldHVybiBtX2lzQmFja0J1ZmZlclZhbGlkICYm
ICFtX2hhc1VwZGF0ZVBlbmRpbmc7CiB9CiAKIHZvaWQgVGlsZWREcmF3aW5nQXJlYVRpbGU6Omlu
dmFsaWRhdGUoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQpAQCAtMTAwLDggKzEwMywxMSBAQCB2
b2lkIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpzd2FwQmFja0J1ZmZlclRvRnJvbnQoKQogewogICAg
IEFTU0VSVCghbV9iYWNrQnVmZmVyLmlzTnVsbCgpKTsKIAorICAgIGNvbnN0IFFQaXhtYXAgc3dh
cCA9IG1fYnVmZmVyOwogICAgIG1fYnVmZmVyID0gbV9iYWNrQnVmZmVyOwotICAgIG1fYmFja0J1
ZmZlciA9IFFQaXhtYXAoKTsKKyAgICBtX2lzRnJvbnRCdWZmZXJWYWxpZCA9IG1faXNCYWNrQnVm
ZmVyVmFsaWQ7CisgICAgbV9pc0JhY2tCdWZmZXJWYWxpZCA9IGZhbHNlOworICAgIG1fYmFja0J1
ZmZlciA9IHN3YXA7CiB9CiAKIHZvaWQgVGlsZWREcmF3aW5nQXJlYVRpbGU6OnBhaW50KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTEyMiwyMiArMTI4
LDMwIEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYVRpbGU6OnVwZGF0ZUZyb21DaHVuayhVcGRhdGVD
aHVuayogdXBkYXRlQ2h1bmssIGZsb2F0KQogICAgIFFJbWFnZSBpbWFnZSh1cGRhdGVDaHVuay0+
Y3JlYXRlSW1hZ2UoKSk7CiAgICAgY29uc3QgSW50UmVjdCYgdXBkYXRlQ2h1bmtSZWN0ID0gdXBk
YXRlQ2h1bmstPnJlY3QoKTsKIAotI2lmZGVmIFRJTEVfREVCVUdfTE9HCi0gICAgcURlYnVnKCkg
PDwgInRpbGUgdXBkYXRlZCBpZD0iIDw8IElEKCkgPDwgIiByZWN0PSIgPDwgUVJlY3QodXBkYXRl
Q2h1bmtSZWN0KTsKLSNlbmRpZgotICAgIGlmICh1cGRhdGVDaHVua1JlY3Quc2l6ZSgpID09IG1f
cHJveHktPnRpbGVTaXplKCkpIHsKLSAgICAgICAgLy8gTWFrZSBhIGRlZXAgY29weSBvZiB0aGUg
aW1hZ2Ugc2luY2UgaXQncyBpbiBzaGFyZWQgbWVtb3J5LgotICAgICAgICBtX2JhY2tCdWZmZXIg
PSBRUGl4bWFwOjpmcm9tSW1hZ2UoaW1hZ2UuY29weSgpKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAobV9iYWNrQnVmZmVyLmlzTnVsbCgpKQotICAgICAgICAgICAgbV9iYWNrQnVmZmVyID0g
bV9idWZmZXIuaXNOdWxsKCkgPyBRUGl4bWFwKG1fcHJveHktPnRpbGVTaXplKCkpIDogbV9idWZm
ZXI7Ci0gICAgICAgIFFQYWludGVyIHBhaW50ZXIoJm1fYmFja0J1ZmZlcik7Ci0gICAgICAgIElu
dFNpemUgZHJhd1BvaW50ID0gdXBkYXRlQ2h1bmtSZWN0LmxvY2F0aW9uKCkgLSBtX3JlY3QubG9j
YXRpb24oKTsKLSAgICAgICAgcGFpbnRlci5kcmF3SW1hZ2UoUVBvaW50KGRyYXdQb2ludC53aWR0
aCgpLCBkcmF3UG9pbnQuaGVpZ2h0KCkpLCBpbWFnZSk7CisgICAgY29uc3QgUVNpemUgdGlsZVNp
emUgPSBtX3Byb3h5LT50aWxlU2l6ZSgpOworCisgICAgaWYgKG1fYmFja0J1ZmZlci5zaXplKCkg
IT0gdGlsZVNpemUpIHsKKyAgICAgICAgbV9iYWNrQnVmZmVyID0gUVBpeG1hcCh0aWxlU2l6ZSk7
CisgICAgICAgIG1fYmFja0J1ZmZlci5maWxsKFF0Ojp3aGl0ZSk7CiAgICAgfQorCisgICAgUVBh
aW50ZXIgcGFpbnRlcigmbV9iYWNrQnVmZmVyKTsKKyAgICAvLyBDb3B5IHRoZSBmcm9udCBidWZm
ZXIgb3ZlciB0byBhbGxvdyBwYXJ0aWFsIHVwZGF0ZXMuCisgICAgLy8gSWYgdGhlIGJhY2sgYnVm
ZmVyIGlzIGFscmVhZHkgdmFsaWQsIHdlIGFscmVhZHkgZGlkIHNvIHNpbmNlIHRoZSBsYXN0IHN3
YXAuIERvbid0IGRvIGl0IGFnYWluLgorICAgIGlmICghbV9pc0JhY2tCdWZmZXJWYWxpZCAmJiBt
X2JhY2tCdWZmZXIuc2l6ZSgpICE9IHN0YXRpY19jYXN0PFFTaXplPih1cGRhdGVDaHVuay0+cmVj
dCgpLnNpemUoKSkpCisgICAgICAgIHBhaW50ZXIuZHJhd1BpeG1hcCgwLCAwLCBtX2J1ZmZlcik7
CisgICAgSW50U2l6ZSBkcmF3UG9pbnQgPSB1cGRhdGVDaHVua1JlY3QubG9jYXRpb24oKSAtIG1f
cmVjdC5sb2NhdGlvbigpOworICAgIHBhaW50ZXIuZHJhd0ltYWdlKFFQb2ludChkcmF3UG9pbnQu
d2lkdGgoKSwgZHJhd1BvaW50LmhlaWdodCgpKSwgaW1hZ2UpOworCisgICAgbV9pc0JhY2tCdWZm
ZXJWYWxpZCA9IHRydWU7CiAgICAgbV9oYXNVcGRhdGVQZW5kaW5nID0gZmFsc2U7CiB9CiAKK3Zv
aWQgVGlsZWREcmF3aW5nQXJlYVRpbGU6OnJlbGVhc2VCYWNrQnVmZmVyKCkKK3sKKyAgICBtX2Jh
Y2tCdWZmZXIgPSBRUGl4bWFwKCk7Cit9CisKIHZvaWQgVGlsZWREcmF3aW5nQXJlYVRpbGU6OnVw
ZGF0ZUJhY2tCdWZmZXIoKQogewogICAgIGlmIChpc1JlYWR5VG9QYWludCgpICYmICFpc0RpcnR5
KCkpCkBAIC0xNTAsMTIgKzE2NCwyMiBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjp1cGRh
dGVCYWNrQnVmZmVyKCkKICNpZmRlZiBUSUxFX0RFQlVHX0xPRwogICAgIHFEZWJ1ZygpIDw8ICJy
ZXF1ZXN0aW5nIHRpbGUgdXBkYXRlIGlkPSIgPDwgbV9JRCA8PCAiIHJlY3Q9IiA8PCBRUmVjdChk
aXJ0eVJlY3QpIDw8ICIgc2NhbGU9IiA8PCBtX3Byb3h5LT5jb250ZW50c1NjYWxlKCk7CiAjZW5k
aWYKLSAgICBpZiAoIW1fcHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5pc1ZhbGlkKCkpCisgICAg
aWYgKCFtX3Byb3h5LT5wYWdlKCktPmlzVmFsaWQoKSB8fCAhbV9wcm94eS0+cGFnZSgpLT5wcm9j
ZXNzKCktPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fcHJveHktPnJlcXVlc3RU
aWxlVXBkYXRlKG1fSUQsIGRpcnR5UmVjdCk7CiAKICAgICBtX2hhc1VwZGF0ZVBlbmRpbmcgPSB0
cnVlOwogfQogCit2b2lkIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpjYW5jZWxCYWNrQnVmZmVyVXBk
YXRlKCkKK3sKKyAgICBpZiAoIW1faGFzVXBkYXRlUGVuZGluZykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9wcm94eS0+Y2FuY2VsVGlsZVVwZGF0ZShtX0lEKTsKKworICAgIG1faGFzVXBkYXRl
UGVuZGluZyA9IGZhbHNlOworfQorCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYktpdDIucHJvIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KaW5kZXggMjNmM2U5
ZS4uZGQ1ZTQ1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KKysrIGIv
U291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KQEAgLTExMyw2ICsxMTMsNyBAQCBIRUFERVJTICs9
IFwKICAgICBTaGFyZWQvSW1hZ2VPcHRpb25zLmggXAogICAgIFNoYXJlZC9JbW11dGFibGVBcnJh
eS5oIFwKICAgICBTaGFyZWQvSW1tdXRhYmxlRGljdGlvbmFyeS5oIFwKKyAgICBTaGFyZWQvTGF5
ZXJUcmVlQ29udGV4dC5oIFwKICAgICBTaGFyZWQvTXV0YWJsZUFycmF5LmggXAogICAgIFNoYXJl
ZC9NdXRhYmxlRGljdGlvbmFyeS5oIFwKICAgICBTaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVu
dC5oIFwKQEAgLTE0NSw2ICsxNDYsNyBAQCBIRUFERVJTICs9IFwKICAgICBTaGFyZWQvV2ViUG9w
dXBJdGVtLmggXAogICAgIFNoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmggXAogICAgIFNoYXJl
ZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggXAorICAgIFNoYXJlZC9XZWJTZXJpYWxp
emVkQ29tcG9zaXRpbmdJbmZvLmggXAogICAgIFNoYXJlZC9XZWJVUkxSZXF1ZXN0LmggXAogICAg
IFNoYXJlZC9XZWJVUkxSZXNwb25zZS5oIFwKICAgICBTaGFyZWQvV2ViVXNlckNvbnRlbnRVUkxQ
YXR0ZXJuLmggXApAQCAtMjY1LDYgKzI2Nyw3IEBAIEhFQURFUlMgKz0gXAogICAgIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaCBcCiAgICAgV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNsaWVudC5oIFwKICAgICBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5oIFwKKyAgICBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L0dyYXBoaWNzTGF5ZXJXSzIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIFwKICAgICBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oIFwKICAgICBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlBvcHVwTWVudS5oIFwKQEAgLTM0MSwxMCArMzQ0LDEyIEBAIFNPVVJD
RVMgKz0gXAogICAgIFNoYXJlZC9XZWJQb3B1cEl0ZW0uY3BwIFwKICAgICBTaGFyZWQvV2ViUHJl
ZmVyZW5jZXNTdG9yZS5jcHAgXAogICAgIFNoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmNwcCBcCisgICAgU2hhcmVkL1dlYlNlcmlhbGl6ZWRDb21wb3NpdGluZ0luZm8uY3BwIFwK
ICAgICBTaGFyZWQvV2ViVG91Y2hFdmVudC5jcHAgXAogICAgIFNoYXJlZC9XZWJVUkxSZXF1ZXN0
LmNwcCBcCiAgICAgU2hhcmVkL1dlYlVSTFJlc3BvbnNlLmNwcCBcCiAgICAgU2hhcmVkL1dlYldo
ZWVsRXZlbnQuY3BwIFwKKyAgICBTaGFyZWQvcXQvTGF5ZXJUcmVlQ29udGV4dFF0LmNwcCBcCiAg
ICAgU2hhcmVkL3F0L1NoYXJlYWJsZUJpdG1hcFF0LmNwcCBcCiAgICAgU2hhcmVkL3F0L05hdGl2
ZVdlYktleWJvYXJkRXZlbnRRdC5jcHAgXAogICAgIFNoYXJlZC9xdC9VcGRhdGVDaHVuay5jcHAg
XApAQCAtMzc0LDYgKzM3OSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9QbHVnaW5z
L3F0L1BsdWdpblByb2Nlc3NQcm94eVF0LmNwcCBcCiAgICAgVUlQcm9jZXNzL1Jlc3BvbnNpdmVu
ZXNzVGltZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcCBc
CisgICAgVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFUaWxlU2V0LmNwcCBcCiAgICAgVUlQcm9j
ZXNzL1Zpc2l0ZWRMaW5rUHJvdmlkZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvV2ViQXBwbGljYXRp
b25DYWNoZU1hbmFnZXJQcm94eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExp
c3QuY3BwIFwKQEAgLTUwMyw1ICs1MDksNiBAQCBTT1VSQ0VTICs9IFwKICAgICBXZWJQcm9jZXNz
L1dlYlByb2Nlc3MuY3BwIFwKICAgICBXZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3Bw
IFwKICAgICBXZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NRdC5jcHAgXAorICAgIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvR3JhcGhpY3NMYXllcldLMi5jcHAgXAogICAgICQkV0VCS0lUMl9HRU5F
UkFURURfU09VUkNFUwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L0dyYXBoaWNzTGF5ZXJXSzIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9HcmFwaGljc0xheWVyV0syLmNwcAppbmRleCBkYmNkYWFiLi43
MGVjZjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L0dyYXBoaWNzTGF5ZXJXSzIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvR3JhcGhpY3NMYXllcldLMi5jcHAKQEAgLTI3LDYgKzI3LDkgQEAKICNp
bmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJ0ZXh0L0NTdHJpbmcuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaW5j
bHVkZSAiR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIKKyNlbmRpZgogI2luY2x1ZGUgPEhh
c2hNYXAuaD4KICNpbmNsdWRlIDxRRGVidWc+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
CkBAIC00MTUsMTAgKzQxOCwyNSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJXSzI6OnN5bmNDb21wb3Np
dGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCiAgICAgICAgIG1fbGF5ZXJDb25maWd1cmF0aW9u
LmNoaWxkcmVuLmFwcGVuZCh0b1dlYkxheWVySUQoY2hpbGRyZW4oKVtpXSkpOwogfQogCisjaWYg
VVNFKFRFWFRVUkVfTUFQUEVSKQorc3RhdGljIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gV0sy
R3JhcGhpY3NMYXllckZhY3RvcnkoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQoreworICAg
IHJldHVybiBuZXcgR3JhcGhpY3NMYXllcldLMihjbGllbnQpOworfQorCit2b2lkIEdyYXBoaWNz
TGF5ZXJXSzI6OmluaXRHcmFwaGljc0xheWVycygpCit7CisgICAgR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6OnNldEdyYXBoaWNzTGF5ZXJGYWN0b3J5KFdLMkdyYXBoaWNzTGF5ZXJGYWN0b3J5
KTsKK30KKyNlbHNlCiBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IEdyYXBoaWNzTGF5ZXI6OmNy
ZWF0ZShHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCiB7CiAgICAgcmV0dXJuIG5ldyBHcmFw
aGljc0xheWVyV0syKGNsaWVudCk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NMYXllcldLMjo6aW5pdEdy
YXBoaWNzTGF5ZXJzKCkKK3sKK30KKyNlbmRpZgogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L0dyYXBoaWNzTGF5ZXJXSzIuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvR3JhcGhpY3NMYXllcldL
Mi5oCmluZGV4IDc2YjFjZGQuLmI4MmZkNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvR3JhcGhpY3NMYXllcldLMi5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvR3JhcGhpY3NMYXllcldLMi5oCkBAIC04
Myw2ICs4Myw4IEBAIHB1YmxpYzoKICAgICBJbWFnZSogaW1hZ2UoKSB7IHJldHVybiBtX2ltYWdl
LmdldCgpOyB9CiAgICAgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSk7CiAKKyAg
ICBzdGF0aWMgdm9pZCBpbml0R3JhcGhpY3NMYXllcnMoKTsKKwogcHJpdmF0ZToKICAgICBXZWJL
aXQ6OldlYlNlcmlhbGl6ZWRMYXllckNvbmZpZ3VyYXRpb24gbV9sYXllckNvbmZpZ3VyYXRpb247
CiAgICAgUmVmUHRyPFdlYktpdDo6U2hhcmVhYmxlQml0bWFwPiBtX1NoYXJlYWJsZUJpdG1hcDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCA3Zjc1MDA3Li4zNWVhNmEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuY3BwCkBAIC02OCw2ICs2OCwxNSBAQCBzdGF0aWMgZG91YmxlIGFyZWEoV2Vi
RnJhbWUqIGZyYW1lKQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHNpemUuaGVpZ2h0
KCkpICogc2l6ZS53aWR0aCgpOwogfQogCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUp
CisjaWYgUExBVEZPUk0oUVQpCisvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBiZSBzeW5jcm9uaXpl
ZCB3aXRoIFFXS1BhZ2U6OnZpZXdwb3J0QXR0cmlidXRlc0ZvclNpemUoKQorc3RhdGljIGNvbnN0
IGludCBkZXNrdG9wV2lkdGggPSA5ODA7CitzdGF0aWMgY29uc3QgaW50IGRldmljZURQSSA9IDI0
MDsKK3N0YXRpYyBjb25zdCBpbnQgZGV2aWNlV2lkdGggPSA0ODA7CitzdGF0aWMgY29uc3QgaW50
IGRldmljZUhlaWdodCA9IDg1NDsKKyNlbmRpZgorI2VuZGlmCiAKIHN0YXRpYyBXZWJGcmFtZSog
ZmluZExhcmdlc3RGcmFtZUluRnJhbWVTZXQoV2ViUGFnZSogcGFnZSkKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5oCmluZGV4IGI0YjEyMzAuLjNlYzU1ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAt
MTAyLDYgKzEwMiw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHJ1bkphdmFTY3JpcHRQ
cm9tcHQoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmlu
ZyYgZGVmYXVsdFZhbHVlLCBTdHJpbmcmIHJlc3VsdCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFN0
YXR1c2JhclRleHQoY29uc3QgU3RyaW5nJik7CiAgICAgdmlydHVhbCBib29sIHNob3VsZEludGVy
cnVwdEphdmFTY3JpcHQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgdGFic1RvTGlua3MoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfTsgLy8gVGVtcG9yYXJpbHkgYWRkZWQgdW50aWwgbmV4dCB0cnVuayB1
cGFkdGUuIEFscmVhZHkgcmVtb3ZlZCBvbiB0cnVuay4KIAogICAgIHZpcnR1YWwgV2ViQ29yZTo6
S2V5Ym9hcmRVSU1vZGUga2V5Ym9hcmRVSU1vZGUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAppbmRleCA5NDBlNDBlLi5iNjNjMzFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaApA
QCAtMzgsMTEgKzM4LDE0IEBAIG5hbWVzcGFjZSBDb3JlSVBDIHsKIH0KIAogbmFtZXNwYWNlIFdl
YkNvcmUgeworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBjbGFzcyBHcmFw
aGljc0xheWVyOworI2VuZGlmCiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBVcGRh
dGVDaHVuazsKIGNsYXNzIFdlYlBhZ2U7CiBzdHJ1Y3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVy
czsKIApAQCAtNzUsNyArNzgsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2Fn
ZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKSA9IDA7Ci0KKyAgICBEcmF3aW5nQXJlYVR5
cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogcHJvdGVjdGVkOgogICAgIERyYXdp
bmdBcmVhKERyYXdpbmdBcmVhVHlwZSwgV2ViUGFnZSopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5jcHAKaW5kZXggNTk5
NzU2NC4uYmExN2NkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1RpbGVkRHJhd2luZ0FyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmNwcApAQCAtNDksNiArNDksMTAgQEAgVGlsZWREcmF3
aW5nQXJlYTo6VGlsZWREcmF3aW5nQXJlYShXZWJQYWdlKiB3ZWJQYWdlKQogICAgICwgbV9zaG91
bGRQYWludCh0cnVlKQogICAgICwgbV9kaXNwbGF5VGltZXIoV2ViUHJvY2Vzczo6c2hhcmVkKCku
cnVuTG9vcCgpLCB0aGlzLCAmVGlsZWREcmF3aW5nQXJlYTo6ZGlzcGxheSkKICAgICAsIG1fdGls
ZVVwZGF0ZVRpbWVyKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnJ1bkxvb3AoKSwgdGhpcywgJlRpbGVk
RHJhd2luZ0FyZWE6OnRpbGVVcGRhdGVUaW1lckZpcmVkKQorI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyAgICAsIG1fc3luY1RpbWVyKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnJ1bkxv
b3AoKSwgdGhpcywgJlRpbGVkRHJhd2luZ0FyZWE6OnN5bmNDb21wb3NpdGluZ0xheWVycykKKyAg
ICAsIG1fcm9vdExheWVyKDApCisjZW5kaWYKIHsKIH0KIApAQCAtODQsNiArODgsOSBAQCB2b2lk
IFRpbGVkRHJhd2luZ0FyZWE6OmRpc3BsYXkoKQogCiAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCku
Y29ubmVjdGlvbigpLT5kZXByZWNhdGVkU2VuZChEcmF3aW5nQXJlYVByb3h5TGVnYWN5TWVzc2Fn
ZTo6SW52YWxpZGF0ZSwgbV93ZWJQYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4oZGlydHlSZWN0
KSk7CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgc3luY0NvbXBvc2l0
aW5nTGF5ZXJzKCk7CisjZW5kaWYKICAgICBtX2Rpc3BsYXlUaW1lci5zdG9wKCk7CiB9CiAKQEAg
LTExNiw2ICsxMjMsNyBAQCB2b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnN1c3BlbmRQYWludGluZygp
CiAKICAgICBtX3Nob3VsZFBhaW50ID0gZmFsc2U7CiAgICAgbV9kaXNwbGF5VGltZXIuc3RvcCgp
OworICAgIG1fdGlsZVVwZGF0ZVRpbWVyLnN0b3AoKTsKIH0KIAogdm9pZCBUaWxlZERyYXdpbmdB
cmVhOjpyZXN1bWVQYWludGluZygpCkBAIC0xMjYsNiArMTM0LDggQEAgdm9pZCBUaWxlZERyYXdp
bmdBcmVhOjpyZXN1bWVQYWludGluZygpCiAKICAgICAvLyBEaXNwbGF5IGlmIG5lZWRlZC4KICAg
ICBkaXNwbGF5KCk7CisgICAgaWYgKCFtX3BlbmRpbmdVcGRhdGVzLmlzRW1wdHkoKSkKKyAgICAg
ICAgc2NoZWR1bGVUaWxlVXBkYXRlKCk7CiB9CiAKIHZvaWQgVGlsZWREcmF3aW5nQXJlYTo6ZGlk
VXBkYXRlKCkKQEAgLTE0NSwyMCArMTU1LDMwIEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYTo6dXBk
YXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QsIGZsb2F0IHNjCiAg
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5kZXByZWNhdGVkU2VuZChEcmF3
aW5nQXJlYVByb3h5TGVnYWN5TWVzc2FnZTo6VGlsZVVwZGF0ZWQsIG1fd2ViUGFnZS0+cGFnZUlE
KCksIENvcmVJUEM6OkluKHRpbGVJRCwgdXBkYXRlQ2h1bmssIHNjYWxlLCBwZW5kaW5nVXBkYXRl
Q291bnQpKTsKIH0KIAordm9pZCBUaWxlZERyYXdpbmdBcmVhOjpzY2hlZHVsZVRpbGVVcGRhdGUo
KQoreworICAgIGlmICghbV9zaG91bGRQYWludCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KG1fdGlsZVVwZGF0ZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
dGlsZVVwZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwogdm9pZCBUaWxlZERyYXdpbmdB
cmVhOjp0aWxlVXBkYXRlVGltZXJGaXJlZCgpCiB7CiAgICAgQVNTRVJUKCFtX3BlbmRpbmdVcGRh
dGVzLmlzRW1wdHkoKSk7CiAKLSAgICBVcGRhdGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5n
VXBkYXRlcy5iZWdpbigpOwotICAgIFRpbGVVcGRhdGUgdXBkYXRlID0gaXQtPnNlY29uZDsKLSAg
ICBtX3BlbmRpbmdVcGRhdGVzLnJlbW92ZShpdCk7CisgICAgT3duUHRyPFRpbGVVcGRhdGU+IHVw
ZGF0ZSA9IG1fcGVuZGluZ1VwZGF0ZXMuZmlyc3QoKS5yZWxlYXNlKCk7CisgICAgbV9wZW5kaW5n
VXBkYXRlcy5yZW1vdmVGaXJzdCgpOwogCi0gICAgdXBkYXRlVGlsZSh1cGRhdGUudGlsZUlELCB1
cGRhdGUuZGlydHlSZWN0LCB1cGRhdGUuc2NhbGUpOworICAgIHVwZGF0ZVRpbGUodXBkYXRlLT50
aWxlSUQsIHVwZGF0ZS0+ZGlydHlSZWN0LCB1cGRhdGUtPnNjYWxlKTsKIAogICAgIGlmIChtX3Bl
bmRpbmdVcGRhdGVzLmlzRW1wdHkoKSkKICAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29u
bmVjdGlvbigpLT5kZXByZWNhdGVkU2VuZChEcmF3aW5nQXJlYVByb3h5TGVnYWN5TWVzc2FnZTo6
QWxsVGlsZVVwZGF0ZXNQcm9jZXNzZWQsIG1fd2ViUGFnZS0+cGFnZUlEKCksIENvcmVJUEM6Oklu
KCkpOwogICAgIGVsc2UKLSAgICAgICAgbV90aWxlVXBkYXRlVGltZXIuc3RhcnRPbmVTaG90KDAu
MDAxKTsKKyAgICAgICAgc2NoZWR1bGVUaWxlVXBkYXRlKCk7CiB9CiAKIHZvaWQgVGlsZWREcmF3
aW5nQXJlYTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6
Ok1lc3NhZ2VJRCBtZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRz
KQpAQCAtMTgyLDI3ICsyMDIsMzMgQEAgdm9pZCBUaWxlZERyYXdpbmdBcmVhOjpkaWRSZWNlaXZl
TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUkKICAgICAgICAg
aW50IHRpbGVJRDsKICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQo
dGlsZUlEKSkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFVwZGF0ZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX3BlbmRpbmdVcGRhdGVzLmZpbmQodGlsZUlEKTsKLSAgICAgICAgaWYgKGl0ICE9
IG1fcGVuZGluZ1VwZGF0ZXMuZW5kKCkpIHsKLSAgICAgICAgICAgIG1fcGVuZGluZ1VwZGF0ZXMu
cmVtb3ZlKGl0KTsKLSAgICAgICAgICAgIGlmIChtX3BlbmRpbmdVcGRhdGVzLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+ZGVw
cmVjYXRlZFNlbmQoRHJhd2luZ0FyZWFQcm94eUxlZ2FjeU1lc3NhZ2U6OkFsbFRpbGVVcGRhdGVz
UHJvY2Vzc2VkLCBtX3dlYlBhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbigpKTsKLSAgICAgICAg
ICAgICAgICBtX3RpbGVVcGRhdGVUaW1lci5zdG9wKCk7CisgICAgICAgIGZvciAoVXBkYXRlTGlz
dDo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdVcGRhdGVzLmJlZ2luKCk7IGl0ICE9IG1fcGVuZGlu
Z1VwZGF0ZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIGlmICgoKml0KS0+dGlsZUlEID09
IHRpbGVJRCkgeworICAgICAgICAgICAgICAgIG1fcGVuZGluZ1VwZGF0ZXMucmVtb3ZlKGl0KTsK
KyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAg
ICBpZiAobV9wZW5kaW5nVXBkYXRlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+ZGVwcmVjYXRlZFNlbmQoRHJhd2luZ0FyZWFQcm94
eUxlZ2FjeU1lc3NhZ2U6OkFsbFRpbGVVcGRhdGVzUHJvY2Vzc2VkLCBtX3dlYlBhZ2UtPnBhZ2VJ
RCgpLCBDb3JlSVBDOjpJbigpKTsKKyAgICAgICAgICAgIG1fdGlsZVVwZGF0ZVRpbWVyLnN0b3Ao
KTsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBEcmF3aW5nQXJl
YUxlZ2FjeU1lc3NhZ2U6OlJlcXVlc3RUaWxlVXBkYXRlOiB7Ci0gICAgICAgIFRpbGVVcGRhdGUg
dXBkYXRlOwotICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dCh1cGRh
dGUudGlsZUlELCB1cGRhdGUuZGlydHlSZWN0LCB1cGRhdGUuc2NhbGUpKSkKKyAgICAgICAgT3du
UHRyPFRpbGVVcGRhdGU+IHVwZGF0ZShhZG9wdFB0cihuZXcgVGlsZVVwZGF0ZSkpOworICAgICAg
ICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dCh1cGRhdGUtPnRpbGVJRCwgdXBk
YXRlLT5kaXJ0eVJlY3QsIHVwZGF0ZS0+c2NhbGUpKSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgVXBkYXRlTWFwOjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ1VwZGF0ZXMuZmluZCh1cGRh
dGUudGlsZUlEKTsKLSAgICAgICAgaWYgKGl0ICE9IG1fcGVuZGluZ1VwZGF0ZXMuZW5kKCkpCi0g
ICAgICAgICAgICBpdC0+c2Vjb25kLmRpcnR5UmVjdC51bml0ZSh1cGRhdGUuZGlydHlSZWN0KTsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBtX3BlbmRpbmdVcGRhdGVzLmFkZCh1cGRhdGUu
dGlsZUlELCB1cGRhdGUpOwotICAgICAgICAgICAgaWYgKCFtX3RpbGVVcGRhdGVUaW1lci5pc0Fj
dGl2ZSgpKQotICAgICAgICAgICAgICAgIG1fdGlsZVVwZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgw
KTsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBmb3IgKFVwZGF0ZUxpc3Q6
Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nVXBkYXRlcy5iZWdpbigpOyBpdCAhPSBtX3BlbmRpbmdV
cGRhdGVzLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBpZiAoKCppdCktPnRpbGVJRCA9PSB1
cGRhdGUtPnRpbGVJRCkgeworICAgICAgICAgICAgICAgICgqaXQpLT5kaXJ0eVJlY3QudW5pdGUo
dXBkYXRlLT5kaXJ0eVJlY3QpOworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAo
IWZvdW5kKSB7CisgICAgICAgICAgICBtX3BlbmRpbmdVcGRhdGVzLmFwcGVuZCh1cGRhdGUucmVs
ZWFzZSgpKTsKKyAgICAgICAgICAgIHNjaGVkdWxlVGlsZVVwZGF0ZSgpOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTIyNSw2ICsyNTEsMTYgQEAgdm9pZCBUaWxlZERyYXdp
bmdBcmVhOjpkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6
TWVzc2FnZUkKICAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5kZXBy
ZWNhdGVkU2VuZChEcmF3aW5nQXJlYVByb3h5TGVnYWN5TWVzc2FnZTo6U25hcHNob3RUYWtlbiwg
bV93ZWJQYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4odXBkYXRlQ2h1bmspKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBjYXNl
IERyYXdpbmdBcmVhTGVnYWN5TWVzc2FnZTo6Tm90aWZ5QW5pbWF0aW9uU3RhcnRlZDogeworICAg
ICAgICB1aW50MzJfdCBsYXllcklEOworICAgICAgICBkb3VibGUgdGltZTsKKyAgICAgICAgaWYg
KCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQobGF5ZXJJRCwgdGltZSkpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBub3RpZnlDb21wb3NpdGVkQW5pbWF0aW9uU3RhcnRlZChs
YXllcklELCB0aW1lKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCiAgICAgZGVmYXVs
dDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZERyYXdpbmdBcmVhLmgK
aW5kZXggMzU3MmM5Zi4uODVhNWQ2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1RpbGVkRHJhd2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvVGlsZWREcmF3aW5nQXJlYS5oCkBAIC0zMiw2ICszMiwxMiBAQAogI2lu
Y2x1ZGUgIlJ1bkxvb3AuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgi
CisjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXIuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIApAQCAtNDcsMTIgKzUzLDIxIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGxheSgpOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lmIFBMQVRG
T1JNKFFUKQorICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hDb21wb3NpdGluZ0NvbnRleHQoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGV0YWNoQ29tcG9zaXRpbmdDb250ZXh0KCk7CisgICAgdmlydHVhbCB2
b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpOworICAgIHZpcnR1
YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdMYXllcnMoKTsKKyAgICB2b2lkIG5vdGlmeUNvbXBvc2l0
ZWRBbmltYXRpb25TdGFydGVkKHVpbnQzMl90IGlkLCBkb3VibGUgdGltZSk7CisjZWxzZQogICAg
IHZpcnR1YWwgdm9pZCBhdHRhY2hDb21wb3NpdGluZ0NvbnRleHQoKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgZGV0YWNoQ29tcG9zaXRpbmdDb250ZXh0KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNl
dFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSB7IH0KICAgICB2
aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdMYXllcnMoKSB7IH0KICNlbmRpZgorI2VuZGlmCiAKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENv
cmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CiAKQEAgLTY5LDYg
Kzg0LDcgQEAgcHJpdmF0ZToKICAgICAvLyBQbGF0Zm9ybSBvdmVycmlkZXMKICAgICB2b2lkIHBh
aW50SW50b1VwZGF0ZUNodW5rKFVwZGF0ZUNodW5rKiwgZmxvYXQgc2NhbGUpOwogCisgICAgdm9p
ZCBzY2hlZHVsZVRpbGVVcGRhdGUoKTsKICAgICB2b2lkIHRpbGVVcGRhdGVUaW1lckZpcmVkKCk7
CiAKICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fZGlydHlSZWN0OwpAQCAtODEsOSArOTcsMjAgQEAg
cHJpdmF0ZToKICAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBkaXJ0eVJlY3Q7CiAgICAgICAgIGZs
b2F0IHNjYWxlOwogICAgIH07Ci0gICAgdHlwZWRlZiBIYXNoTWFwPGludCwgVGlsZVVwZGF0ZT4g
VXBkYXRlTWFwOwotICAgIFVwZGF0ZU1hcCBtX3BlbmRpbmdVcGRhdGVzOworICAgIHR5cGVkZWYg
RGVxdWU8T3duUHRyPFRpbGVVcGRhdGU+ID4gVXBkYXRlTGlzdDsKKyAgICBVcGRhdGVMaXN0IG1f
cGVuZGluZ1VwZGF0ZXM7CisKKy8vICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFRpbGVVcGRhdGU+
IFVwZGF0ZU1hcDsKKy8vICAgIFVwZGF0ZU1hcCBtX3BlbmRpbmdVcGRhdGVzOwogICAgIFJ1bkxv
b3A6OlRpbWVyPFRpbGVkRHJhd2luZ0FyZWE+IG1fdGlsZVVwZGF0ZVRpbWVyOworCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqIHRl
eHR1cmVNYXBwZXIoKSB7IHJldHVybiBtX3RleHR1cmVNYXBwZXIuZ2V0KCk7IH0KKyAgICBSdW5M
b29wOjpUaW1lcjxUaWxlZERyYXdpbmdBcmVhPiBtX3N5bmNUaW1lcjsKKyAgICBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKiBtX3Jvb3RMYXllcjsKKyAgICBPd25QdHI8V2ViQ29yZTo6VGV4dHVyZU1h
cHBlcj4gbV90ZXh0dXJlTWFwcGVyOworI2VuZGlmCisKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmlu
ZGV4IGRhNzdiMGIuLmJiMDg3ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJXZWJQYWdlLmgiCiAKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyV0syLmgiCiAj
aW5jbHVkZSAiQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgogI2luY2x1
ZGUgIkRlY29kZXJBZGFwdGVyLmgiCkBAIC0zMzAsMTMgKzMzMSwzNyBAQCB2b2lkIFdlYlBhZ2U6
OmNsZWFyTWFpbkZyYW1lTmFtZSgpCiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCit2b2lkIFdlYlBhZ2U6OmNoYW5nZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIGlmIChtX2lzQ2xvc2VkKQorICAgICAg
ICByZXR1cm47CisjaWYgUExBVEZPUk0oTUFDKQorICAgIC8vIFdpdGggdGhlIG5ldyBkcmF3aW5n
IGFyZWEgd2UgZG9uJ3QgbmVlZCB0byBpbmZvcm0gdGhlIFVJIHByb2Nlc3Mgd2hlbiB0aGUgYWNj
ZWxlcmF0ZWQKKyAgICAvLyBjb21wb3NpdGluZyBtb2RlIGNoYW5nZXMuCisgICAgaWYgKG1fZHJh
d2luZ0FyZWEtPmluZm8oKS50eXBlID09IERyYXdpbmdBcmVhSW5mbzo6SW1wbCkKKyAgICAgICAg
cmV0dXJuOworI2VuZGlmCisgICAgYm9vbCBjb21wb3NpdGluZyA9IGxheWVyOworCisgICAgLy8g
VGVsbCB0aGUgVUkgcHJvY2VzcyB0aGF0IGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIGNoYW5nZWQu
IEl0IG1heSByZXNwb25kIGJ5IGNoYW5naW5nCisgICAgLy8gZHJhd2luZyBhcmVhIHR5cGVzLgor
ICAgIHVpbnQzMl90IG5ld0RyYXdpbmdBcmVhSW5mbyA9IGxheWVyID8gdG9HcmFwaGljc0xheWVy
V0syKGxheWVyKS0+aWQoKSAgICAgOiAwOworCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQo
KS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZENoYW5n
ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoY29tcG9zaXRpbmcsIG5ld0RyYXdpbmdBcmVhSW5mbyks
IE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZENoYW5nZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmc6
OlJlcGx5KG5ld0RyYXdpbmdBcmVhSW5mbyksIG1fcGFnZUlEKSkKKyAgICAgICAgcmV0dXJuOwor
CisvLyAgICBjaGFuZ2VEcmF3aW5nQXJlYVR5cGUoc3RhdGljX2Nhc3Q8V2ViS2l0OjpEcmF3aW5n
QXJlYVR5cGU+KG5ld0RyYXdpbmdBcmVhSW5mbykpOworfQorCiB2b2lkIFdlYlBhZ2U6OmVudGVy
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7CisgICAg
Y2hhbmdlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXIpOwogICAgIG1fZHJhd2luZ0Fy
ZWEtPnNldFJvb3RDb21wb3NpdGluZ0xheWVyKGxheWVyKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpl
eGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQogeworICAgIGNoYW5nZUFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKDApOwogICAgIG1fZHJhd2luZ0FyZWEtPnNldFJvb3RDb21wb3NpdGlu
Z0xheWVyKDApOwogfQogI2VuZGlmCkBAIC01MjgsNiArNTUzLDggQEAgdm9pZCBXZWJQYWdlOjpz
ZXRBY3R1YWxWaXNpYmxlQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBGcmFt
ZSogZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOwogCiAgICAgZnJhbWUtPnZpZXcoKS0+c2V0
QWN0dWFsVmlzaWJsZUNvbnRlbnRSZWN0KHJlY3QpOworLy8gICAgbV9wYWdlLT5tYWluRnJhbWUo
KS0+dmlldygpLT5zZXRBY3R1YWxWaXNpYmxlQ29udGVudFJlY3QocmVjdCk7CisvLyAgICBtX3Bh
Z2UtPm1haW5GcmFtZSgpLT52aWV3KCktPnNjcm9sbFBvc2l0aW9uQ2hhbmdlZCgpOwogfQogCiB2
b2lkIFdlYlBhZ2U6OnNldFJlc2l6ZXNUb0NvbnRlbnRzVXNpbmdMYXlvdXRTaXplKGNvbnN0IElu
dFNpemUmIHRhcmdldExheW91dFNpemUpCkBAIC01OTUsNiArNjIyLDEzIEBAIHZvaWQgV2ViUGFn
ZTo6ZHJhd1JlY3QoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiAgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAocmVjdCk7CiAgICAgbV9tYWluRnJh
bWUtPmNvcmVGcmFtZSgpLT52aWV3KCktPnBhaW50KCZncmFwaGljc0NvbnRleHQsIHJlY3QpOwog
ICAgIGdyYXBoaWNzQ29udGV4dC5yZXN0b3JlKCk7CisKKyAgICBpZiAobV9wYWdlT3ZlcmxheSkg
eworICAgICAgICBncmFwaGljc0NvbnRleHQuc2F2ZSgpOworICAgICAgICBncmFwaGljc0NvbnRl
eHQuY2xpcChyZWN0KTsKKyAgICAgICAgbV9wYWdlT3ZlcmxheS0+ZHJhd1JlY3QoZ3JhcGhpY3ND
b250ZXh0LCByZWN0KTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnJlc3RvcmUoKTsKKyAgICB9
CiB9CiAKIHZvaWQgV2ViUGFnZTo6ZHJhd1BhZ2VPdmVybGF5KEdyYXBoaWNzQ29udGV4dCYgZ3Jh
cGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtNzE2LDYgKzc1MCw3IEBAIHZv
aWQgV2ViUGFnZTo6dW5pbnN0YWxsUGFnZU92ZXJsYXkoUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5
KQogICAgIG1fcGFnZU92ZXJsYXkgPSBudWxscHRyOwogCiAgICAgbV9kcmF3aW5nQXJlYS0+ZGlk
VW5pbnN0YWxsUGFnZU92ZXJsYXkoKTsKKyAgICBtX2RyYXdpbmdBcmVhLT5zZXROZWVkc0Rpc3Bs
YXkoSW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV92aWV3U2l6ZSkpOwogfQogCiBQYXNzUmVmUHRy
PFdlYkltYWdlPiBXZWJQYWdlOjpzbmFwc2hvdEluVmlld0Nvb3JkaW5hdGVzKGNvbnN0IEludFJl
Y3QmIHJlY3QsIEltYWdlT3B0aW9ucyBvcHRpb25zKQpAQCAtMTgxNywxMCArMTg1MiwyNiBAQCBJ
bmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdCogV2ViUGFnZTo6YmFja0ZvcndhcmRMaXN0KCkK
ICAgICByZXR1cm4gbV9iYWNrRm9yd2FyZExpc3QuZ2V0KCk7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6
Y2hhbmdlRHJhd2luZ0FyZWFUeXBlKHVuc2lnbmVkIGludCBuZXdEcmF3aW5nQXJlYUluZm8pCit7
CisgICAgaWYgKG5ld0RyYXdpbmdBcmVhSW5mbyA9PSBkcmF3aW5nQXJlYSgpLT50eXBlKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fZHJhd2luZ0FyZWEgPSAwOworICAgIFdlYlBhZ2VDcmVh
dGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsgLy8gRklYTUUhISEKKyAgICBwYXJhbWV0ZXJzLmRy
YXdpbmdBcmVhVHlwZSA9IHN0YXRpY19jYXN0PERyYXdpbmdBcmVhVHlwZT4obmV3RHJhd2luZ0Fy
ZWFJbmZvKTsKKyAgICBtX2RyYXdpbmdBcmVhID0gRHJhd2luZ0FyZWE6OmNyZWF0ZSh0aGlzLCBw
YXJhbWV0ZXJzKTsKKyAgICAvLyBJbmZvcm0gdGhlIFVJIHByb2Nlc3MgYWJvdXQgdGhlIGRyYXdp
bmcgYXJlYSBjaGFuZ2UuCisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZENoYW5nZURyYXdpbmdBcmVhVHlwZSgwKSwg
bV9wYWdlSUQpOworCisgICAgbV9kcmF3aW5nQXJlYS0+c2V0TmVlZHNEaXNwbGF5KEludFJlY3Qo
SW50UG9pbnQoMCwgMCksIG1fdmlld1NpemUpKTsKK30KKwogI2lmIFBMQVRGT1JNKFFUKQogdm9p
ZCBXZWJQYWdlOjpmaW5kWm9vbWFibGVBcmVhRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmIHBvaW50KQogewogICAgIGNvbnN0IGludCBtaW5pbXVtWm9vbVRhcmdldFdpZHRoID0gMTAw
OworLy8gICAgY29uc3QgaW50IG1pbmltdW1ab29tVGFyZ2V0SGVpZ2h0ID0gMTA7CiAKICAgICBG
cmFtZSogbWFpbmZyYW1lID0gbV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpOwogICAgIEhpdFRlc3RS
ZXN1bHQgcmVzdWx0ID0gbWFpbmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0
UG9pbnQobWFpbmZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMocG9pbnQpLCAvKmFsbG93
U2hhZG93Q29udGVudCovIGZhbHNlLCAvKmlnbm9yZUNsaXBwaW5nKi8gdHJ1ZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCBhNTczZGUyLi42Njc1
NTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAg
LTEzNCw2ICsxMzQsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgSW5qZWN0ZWRCdW5kbGVCYWNrRm9y
d2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCgpOwogICAgIERyYXdpbmdBcmVhKiBkcmF3aW5nQXJl
YSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd2luZ0FyZWEuZ2V0KCk7IH0KKyAgICB2b2lkIGNoYW5n
ZURyYXdpbmdBcmVhVHlwZSh1bnNpZ25lZCBpbnQpOwogCiAgICAgV2ViUGFnZUdyb3VwUHJveHkq
IHBhZ2VHcm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUdyb3VwLmdldCgpOyB9CiAKQEAgLTIy
NCw2ICsyMjUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVm
ZXJMb2FkaW5nKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICB2b2lk
IGNoYW5nZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
KTsKICAgICB2b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciopOwogICAgIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCk7
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggNjRmN2RhZi4uZmU1NjE5NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAg
LTE1Myw2ICsxNTMsOCBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsKIAogICAgIFNldFdpbmRvd1Jl
c2l6ZXJTaXplKFdlYkNvcmU6OkludFNpemUgaW50ZXJzZWN0c1ZpZXcpCiAKKyAgICBDaGFuZ2VE
cmF3aW5nQXJlYVR5cGUodWludDMyX3QgbmV3RHJhd2luZ0FyZWEpOworCiAgICAgIyBQcmludGlu
Zy4KICAgICBCZWdpblByaW50aW5nKHVpbnQ2NF90IGZyYW1lSUQsIFdlYktpdDo6UHJpbnRJbmZv
IHByaW50SW5mbykKICAgICBFbmRQcmludGluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L1RpbGVkRHJhd2luZ0FyZWFRdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvVGlsZWREcmF3aW5nQXJlYVF0LmNwcAppbmRl
eCBjOWFlMDNkLi5lNzE5YTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvcXQvVGlsZWREcmF3aW5nQXJlYVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvcXQvVGlsZWREcmF3aW5nQXJlYVF0LmNwcApAQCAtMjgsMTMgKzI4
LDIzIEBACiAKICNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKIAorI2luY2x1ZGUgIkRy
YXdpbmdBcmVhUHJveHlNZXNzYWdlS2luZHMuaCIKKy8vI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNs
dWRlICJVcGRhdGVDaHVuay5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQ
cm9jZXNzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RnJhbWVWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KIAogI2lu
Y2x1ZGUgPFFJbWFnZT4KICNpbmNsdWRlIDxRUGFpbnRlcj4KIAorI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyV0syLmgiCisjZW5kaWYKKwor
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00NCw2
ICs1NCw3IEBAIHZvaWQgVGlsZWREcmF3aW5nQXJlYTo6cGFpbnRJbnRvVXBkYXRlQ2h1bmsoVXBk
YXRlQ2h1bmsqIHVwZGF0ZUNodW5rLCBmbG9hdCBzY2FsCiAgICAgSW50UmVjdCB0aWxlUmVjdCA9
IHVwZGF0ZUNodW5rLT5yZWN0KCk7CiAgICAgUUltYWdlIGltYWdlKHVwZGF0ZUNodW5rLT5jcmVh
dGVJbWFnZSgpKTsKICAgICBRUGFpbnRlciBwYWludGVyKCZpbWFnZSk7CisgICAgcGFpbnRlci5z
ZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOwogICAgIC8vIE5vdyBw
YWludCBpbnRvIHRoZSBiYWNraW5nIHN0b3JlLgogICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGlj
c0NvbnRleHQoJnBhaW50ZXIpOwogICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoLXRpbGVS
ZWN0LngoKSwgLXRpbGVSZWN0LnkoKSk7CkBAIC01Miw5ICs2MywxNDAgQEAgdm9pZCBUaWxlZERy
YXdpbmdBcmVhOjpwYWludEludG9VcGRhdGVDaHVuayhVcGRhdGVDaHVuayogdXBkYXRlQ2h1bmss
IGZsb2F0IHNjYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGlsZVJlY3QueSgpIC8gc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCkgLyBzY2FsZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZVJl
Y3QuaGVpZ2h0KCkgLyBzY2FsZSkpOworCiAgICAgbV93ZWJQYWdlLT5kcmF3UmVjdChncmFwaGlj
c0NvbnRleHQsIGNvbnRlbnRSZWN0KTsKIH0KIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKK3ZvaWQgVGlsZWREcmF3aW5nQXJlYTo6YXR0YWNoQ29tcG9zaXRpbmdDb250ZXh0KCkK
K3sKK30KKwordm9pZCBUaWxlZERyYXdpbmdBcmVhOjpkZXRhY2hDb21wb3NpdGluZ0NvbnRleHQo
KQoreworfQorCit2b2lkIFRpbGVkRHJhd2luZ0FyZWE6OnNldFJvb3RDb21wb3NpdGluZ0xheWVy
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIGlmIChsYXllciA9PSBtX3Jv
b3RMYXllcikKKyAgICAgICAgcmV0dXJuOworICAgIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5
bmMoKTsKKyAgICBtX3Jvb3RMYXllciA9IGxheWVyOworfQorCit2b2lkIFRpbGVkRHJhd2luZ0Fy
ZWE6OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKQoreworICAgIGlmICghbV9kaXNwbGF5
VGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9kaXNwbGF5VGltZXIuc3RhcnRPbmVTaG90KDAp
OworfQorCitzdGF0aWMgVmVjdG9yPEZsb2F0UmVjdD4gZGl2aWRlSW50b1RpbGVzKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3sKKyAgICBWZWN0b3I8RmxvYXRSZWN0PiB0aWxlczsKKyAgICBzdGF0
aWMgY29uc3QgZmxvYXQgZ0RpbWVuc2lvbiA9IDUxMi4wOworICAgIGZvciAoZmxvYXQgeSA9IHJl
Y3QueSgpOyB5IDwgcmVjdC5tYXhZKCk7IHkgKz0gZ0RpbWVuc2lvbikgeworICAgICAgICBmb3Ig
KGZsb2F0IHggPSByZWN0LngoKTsgeCA8IHJlY3QubWF4WCgpOyB4ICs9IGdEaW1lbnNpb24pIHsK
KyAgICAgICAgICAgIEZsb2F0UmVjdCB0aWxlKHgsIHksIGdEaW1lbnNpb24sIGdEaW1lbnNpb24p
OworICAgICAgICAgICAgdGlsZS5pbnRlcnNlY3QocmVjdCk7CisgICAgICAgICAgICB0aWxlcy5h
cHBlbmQodGlsZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRpbGVzOworfQorCitz
dGF0aWMgdm9pZCBjb2xsZWN0Q29tcG9zaXRpbmdJbmZvRm9yVGhpc0xheWVyKEdyYXBoaWNzTGF5
ZXIqIGxheWVyLCBXZWJTZXJpYWxpemVkQ29tcG9zaXRpbmdJbmZvJiBvdXRJbmZvLCBWZWN0b3I8
R3JhcGhpY3NMYXllcldLMio+JiBvdXRMYXllcnMpCit7CisgICAgR3JhcGhpY3NMYXllcldLMiog
bGF5ZXJXSzIgPSB0b0dyYXBoaWNzTGF5ZXJXSzIobGF5ZXIpOworICAgIGlmICghbGF5ZXJXSzIp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWxheWVyV0syLT5pc01vZGlmaWVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG91dExheWVycy5hcHBlbmQobGF5ZXJXSzIpOworICAgIG91dElu
Zm8ubGF5ZXJzLmFwcGVuZChsYXllcldLMi0+bGF5ZXJDb25maWd1cmF0aW9uKCkpOworCisgICAg
V2ViU2VyaWFsaXplZExheWVyQ29uZmlndXJhdGlvbiYgY29uZmlnID0gb3V0SW5mby5sYXllcnNb
b3V0SW5mby5sYXllcnMuc2l6ZSgpIC0gMV07CisgICAgaWYgKGxheWVyV0syLT5pbWFnZSgpKQor
ICAgICAgICBjb25maWcuZGF0YS5kcmF3c0NvbnRlbnQgPSB0cnVlOworfQorCitzdGF0aWMgdm9p
ZCBjb2xsZWN0Q29tcG9zaXRpbmdJbmZvUmVjdXJzaXZlKEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXll
ciwgV2ViU2VyaWFsaXplZENvbXBvc2l0aW5nSW5mbyYgb3V0SW5mbywgVmVjdG9yPEdyYXBoaWNz
TGF5ZXJXSzIqPiYgb3V0TGF5ZXJzKQoreworICAgIGlmICghcm9vdExheWVyKQorICAgICAgICBy
ZXR1cm47CisgICAgY29sbGVjdENvbXBvc2l0aW5nSW5mb0ZvclRoaXNMYXllcihyb290TGF5ZXIs
IG91dEluZm8sIG91dExheWVycyk7CisgICAgY29sbGVjdENvbXBvc2l0aW5nSW5mb0ZvclRoaXNM
YXllcihyb290TGF5ZXItPm1hc2tMYXllcigpLCBvdXRJbmZvLCBvdXRMYXllcnMpOworICAgIGNv
bGxlY3RDb21wb3NpdGluZ0luZm9SZWN1cnNpdmUocm9vdExheWVyLT5yZXBsaWNhTGF5ZXIoKSwg
b3V0SW5mbywgb3V0TGF5ZXJzKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdExh
eWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBjb2xsZWN0Q29tcG9zaXRpbmdJ
bmZvUmVjdXJzaXZlKHJvb3RMYXllci0+Y2hpbGRyZW4oKVtpXSwgb3V0SW5mbywgb3V0TGF5ZXJz
KTsKK30KKwordm9pZCBUaWxlZERyYXdpbmdBcmVhOjpub3RpZnlDb21wb3NpdGVkQW5pbWF0aW9u
U3RhcnRlZCh1aW50MzJfdCBpZCwgZG91YmxlIHRpbWUpCit7CisgICAgR3JhcGhpY3NMYXllcldL
MiogbGF5ZXIgPSBHcmFwaGljc0xheWVyV0syOjpsYXllckJ5SUQoaWQpOworICAgIGlmICghbGF5
ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBsYXllci0+bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCh0
aW1lKTsKK30KKwordm9pZCBUaWxlZERyYXdpbmdBcmVhOjpzeW5jQ29tcG9zaXRpbmdMYXllcnMo
KQoreworICAgIGlmICghbV9yb290TGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fd2Vi
UGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKKyAgICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5G
cmFtZSgpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7
CisgICAgV2ViU2VyaWFsaXplZENvbXBvc2l0aW5nSW5mbyBjb21wb3NpdGluZ0luZm87CisgICAg
Y29tcG9zaXRpbmdJbmZvLnJvb3RMYXllcklEID0gdG9HcmFwaGljc0xheWVyV0syKG1fcm9vdExh
eWVyKS0+aWQoKTsKKyAgICBjb21wb3NpdGluZ0luZm8uY29udGVudFNjYWxlID0gMS4wOworICAg
IGNvbXBvc2l0aW5nSW5mby5kZWxldGVkTGF5ZXJzID0gR3JhcGhpY3NMYXllcldLMjo6dGFrZUxh
eWVyc1RvRGVsZXRlKCk7CisgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXJXSzIqPiBsYXllcnM7Cisg
ICAgY29sbGVjdENvbXBvc2l0aW5nSW5mb1JlY3Vyc2l2ZShtX3Jvb3RMYXllciwgY29tcG9zaXRp
bmdJbmZvLCBsYXllcnMpOworCisgICAgaWYgKGNvbXBvc2l0aW5nSW5mby5kZWxldGVkTGF5ZXJz
LmlzRW1wdHkoKSAmJiBjb21wb3NpdGluZ0luZm8ubGF5ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5kZXByZWNh
dGVkU2VuZChEcmF3aW5nQXJlYVByb3h5TGVnYWN5TWVzc2FnZTo6U3luY0NvbXBvc2l0aW5nTGF5
ZXJzLCBtX3dlYlBhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbihjb21wb3NpdGluZ0luZm8pKTsK
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIEdyYXBoaWNzTGF5ZXJXSzIqIGxheWVyV0syID0gbGF5ZXJzW2ldOworICAgICAgICBGbG9h
dFJlY3QgdXBkYXRlUmVjdCA9IGxheWVyV0syLT5uZWVkc0Rpc3BsYXlSZWN0KCk7CisKKyAgICAg
ICAgbGF5ZXJXSzItPmRpZFN5bmNocm9uaXplKCk7CisKKyAgICAgICAgaWYgKHVwZGF0ZVJlY3Qu
aXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgUmVmUHRyPEltYWdl
PiBkaXJlY3RJbWFnZSA9IGxheWVyV0syLT5pbWFnZSgpOworICAgICAgICBpZiAoZGlyZWN0SW1h
Z2UpCisgICAgICAgICAgICB1cGRhdGVSZWN0ID0gbGF5ZXJXSzItPmNvbnRlbnRzUmVjdCgpOwor
ICAgICAgICBlbHNlIGlmICghbGF5ZXJXSzItPmRyYXdzQ29udGVudCgpKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgVmVjdG9yPEZsb2F0UmVjdD4gdGlsZVJlY3RzID0gZGl2aWRl
SW50b1RpbGVzKHVwZGF0ZVJlY3QpOworICAgICAgICBmb3IgKHNpemVfdCB0aWxlSW5kZXggPSAw
OyB0aWxlSW5kZXggPCB0aWxlUmVjdHMuc2l6ZSgpOyArK3RpbGVJbmRleCkgeworICAgICAgICAg
ICAgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCA9IHRpbGVSZWN0c1t0aWxlSW5kZXhdOworICAg
ICAgICAgICAgSW50UmVjdCBlbmNsb3NpbmdVcGRhdGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdCh0
aWxlUmVjdCk7CisKKyAgICAgICAgICAgIFVwZGF0ZUNodW5rIGNodW5rKGVuY2xvc2luZ1VwZGF0
ZVJlY3QsIFVwZGF0ZUNodW5rOjpIYXNBbHBoYSk7CisgICAgICAgICAgICBRSW1hZ2UgdGlsZUlt
YWdlID0gY2h1bmsuY3JlYXRlSW1hZ2UoKTsKKyAgICAgICAgICAgIHRpbGVJbWFnZS5maWxsKDAp
OworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnRpbGVJ
bWFnZSk7CisgICAgICAgICAgICAgICAgcGFpbnRlci50cmFuc2xhdGUoLXRpbGVSZWN0LngoKSwg
LXRpbGVSZWN0LnkoKSk7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQo
JnBhaW50ZXIpOworICAgICAgICAgICAgICAgIGlmIChkaXJlY3RJbWFnZSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoZGlyZWN0SW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIGxheWVyV0syLT5jb250ZW50c1JlY3QoKSwgRmxvYXRSZWN0KDAsIDAsIGRpcmVj
dEltYWdlLT53aWR0aCgpLCBkaXJlY3RJbWFnZS0+aGVpZ2h0KCkpKTsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGxheWVyV0syLT5wYWludEdyYXBoaWNzTGF5ZXJD
b250ZW50cyhjb250ZXh0LCBlbmNsb3NpbmdVcGRhdGVSZWN0KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+ZGVwcmVjYXRlZFNl
bmQoRHJhd2luZ0FyZWFQcm94eUxlZ2FjeU1lc3NhZ2U6OlVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJD
b250ZW50LCBtX3dlYlBhZ2UtPnBhZ2VJRCgpLCBDb3JlSVBDOjpJbih1aW50MzJfdChsYXllcldL
Mi0+aWQoKSksIGNodW5rKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisjZW5kaWYKKwogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBUSUxFRF9CQUNLSU5HX1NUT1JFCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAppbmRleCA1ZDEyNWE2Li4wZjJhMjZmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKQEAgLTgwLDYgKzgwLDEw
IEBACiAjaW5jbHVkZSAiTmV0c2NhcGVQbHVnaW5Nb2R1bGUuaCIKICNlbmRpZgogCisjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSKSAmJiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaW5jbHVk
ZSAiR3JhcGhpY3NMYXllcldLMi5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTIyOSw2ICsyMzMsOSBAQCB2b2lkIFdlYlByb2Nl
c3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMmIHBhcmFtZQogI2lmIFVTRShDRlVSTFNUT1JBR0VTRVNTSU9OUykKICAgICBXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZTo6c2V0UHJpdmF0ZUJyb3dzaW5nU3RvcmFnZVNlc3Npb25JZGVudGlmaWVy
QmFzZShwYXJhbWV0ZXJzLnVpUHJvY2Vzc0J1bmRsZUlkZW50aWZpZXIpOwogI2VuZGlmCisjaWYg
VVNFKFRFWFRVUkVfTUFQUEVSKSAmJiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAg
R3JhcGhpY3NMYXllcldLMjo6aW5pdEdyYXBoaWNzTGF5ZXJzKCk7CisjZW5kaWYKIH0KIAogdm9p
ZCBXZWJQcm9jZXNzOjpzZXRTaG91bGRUcmFja1Zpc2l0ZWRMaW5rcyhib29sIHNob3VsZFRyYWNr
VmlzaXRlZExpbmtzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96896</attachid>
            <date>2011-06-12 17:40:13 -0700</date>
            <delta_ts>2011-06-13 09:43:52 -0700</delta_ts>
            <desc>Patch 1: WebLayerTreeInfo</desc>
            <filename>patch-1.diff</filename>
            <type>text/plain</type>
            <size>7856</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4NjIxKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDYtMTIgIE5vYW0gUm9z
ZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gSW1wbGVtZW50IGFjY2VsZXJhdGVkIGNv
bXBvc2l0aW5nIG9uIFdLMiBRdCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01NjkzNQorCisgICAgICAgIEFkZGVkIFdlYkxheWVyVHJlZUluZm86
IGEgc2V0IG9mIHN0cnVjdHVyZXMgdGhhdCBjYW4gc2VyaWFsaXplIGEgdHJlZSBvZiBHcmFwaGlj
c0xheWVycworICAgICAgICBhY3Jvc3MgdG8gdGhlIFVJIHByb2Nlc3MuCisKKyAgICAgICAgVG9n
ZXRoZXIgd2l0aCBWaWF0Y2hlc2xhdiBPc3RhcGVua28uCisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdDIvbWVzc2FnZXMucHk6CisgICAgICAgICogU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oOiBBZGRlZC4KKwog
MjAxMS0wNi0xMiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TY3Jp
cHRzL3dlYmtpdDIvbWVzc2FnZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2Ny
aXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5CShyZXZpc2lvbiA4ODYyMSkKKysrIFNvdXJjZS9XZWJL
aXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQkod29ya2luZyBjb3B5KQpAQCAtNDY0LDYg
KzQ2NCw3IEBAIGRlZiBoZWFkZXJzX2Zvcl90eXBlKHR5cGUpOgogICAgICAgICAnV2ViQ29yZTo6
VGV4dENoZWNraW5nUmVzdWx0JzogJzxXZWJDb3JlL1RleHRDaGVja2VyQ2xpZW50Lmg+JywKICAg
ICAgICAgJ1dlYktpdDo6V2ViR2VzdHVyZUV2ZW50JzogJyJXZWJFdmVudC5oIicsCiAgICAgICAg
ICdXZWJLaXQ6OldlYktleWJvYXJkRXZlbnQnOiAnIldlYkV2ZW50LmgiJywKKyAgICAgICAgJ1dl
YktpdDo6V2ViTGF5ZXJUcmVlVXBkYXRlSW5mbyc6ICciV2ViTGF5ZXJUcmVlSW5mby5oIicsCiAg
ICAgICAgICdXZWJLaXQ6OldlYk1vdXNlRXZlbnQnOiAnIldlYkV2ZW50LmgiJywKICAgICAgICAg
J1dlYktpdDo6V2ViVG91Y2hFdmVudCc6ICciV2ViRXZlbnQuaCInLAogICAgICAgICAnV2ViS2l0
OjpXZWJXaGVlbEV2ZW50JzogJyJXZWJFdmVudC5oIicsCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg3
IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAi
V2ViTGF5ZXJUcmVlSW5mby5oIgorCisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5jbHVk
ZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBDb3JlSVBDOwor
CituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJMYXllckluZm86OmVuY29kZShDb3JlSVBD
OjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2Rlci0+ZW5jb2Rl
KENvcmVJUEM6OkluKGlkLCBuYW1lLCBwYXJlbnQsIGNoaWxkcmVuLCBmbGFncywgcmVwbGljYSwg
bWFzaykpOworICAgIGVuY29kZXItPmVuY29kZShDb3JlSVBDOjpJbihwb3MsIHNpemUsIHRyYW5z
Zm9ybSwgb3BhY2l0eSwgYW5jaG9yUG9pbnQsIGNoaWxkcmVuVHJhbnNmb3JtLCBjb250ZW50c1Jl
Y3QpKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUoaW1hZ2VCYWNraW5nU3RvcmUgPyBpbWFnZUJhY2tp
bmdTdG9yZS0+c2l6ZSgpIDogSW50U2l6ZSgpKTsKKworICAgIGlmICghaW1hZ2VCYWNraW5nU3Rv
cmUpCisgICAgICAgIHJldHVybjsKKworICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGltYWdl
SGFuZGxlOworICAgIGlmIChpbWFnZUJhY2tpbmdTdG9yZS0+Y3JlYXRlSGFuZGxlKGltYWdlSGFu
ZGxlKSkKKyAgICAgICAgaW1hZ2VIYW5kbGUuZW5jb2RlKGVuY29kZXIpOworfQorCitib29sIFdl
YkxheWVySW5mbzo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgV2Vi
TGF5ZXJJbmZvJiBpbmZvKQoreworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKENvcmVJUEM6Ok91
dChpbmZvLmlkLCBpbmZvLm5hbWUsIGluZm8ucGFyZW50LCBpbmZvLmNoaWxkcmVuLCBpbmZvLmZs
YWdzLCBpbmZvLnJlcGxpY2EsIGluZm8ubWFzaykpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGluZm8ucG9zLCBpbmZvLnNpemUs
IGluZm8udHJhbnNmb3JtLCBpbmZvLm9wYWNpdHksIGluZm8uYW5jaG9yUG9pbnQsIGluZm8uY2hp
bGRyZW5UcmFuc2Zvcm0sIGluZm8uY29udGVudHNSZWN0KSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIEludFNpemUgaW1hZ2VCYWNraW5nU3RvcmVTaXplOworICAgIGlmICghZGVjb2Rl
ci0+ZGVjb2RlKGltYWdlQmFja2luZ1N0b3JlU2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoaW1hZ2VCYWNraW5nU3RvcmVTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBpbWFnZUhhbmRsZTsKKyAgICBp
ZiAoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGU6OmRlY29kZShkZWNvZGVyLCBpbWFnZUhhbmRsZSkp
CisgICAgICAgIGluZm8uaW1hZ2VCYWNraW5nU3RvcmUgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0
ZShpbWFnZUhhbmRsZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVl
SW5mbzo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKK3sK
KyAgICBlbmNvZGVyLT5lbmNvZGUoQ29yZUlQQzo6SW4obGF5ZXJzLCByb290TGF5ZXJJRCwgZGVs
ZXRlZExheWVycywgY29udGVudFNjYWxlKSk7Cit9CisKK2Jvb2wgV2ViTGF5ZXJUcmVlSW5mbzo6
ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgV2ViTGF5ZXJUcmVlSW5m
byYgaW5mbykKK3sKKyAgICByZXR1cm4gZGVjb2Rlci0+ZGVjb2RlKENvcmVJUEM6Ok91dChpbmZv
LmxheWVycywgaW5mby5yb290TGF5ZXJJRCwgaW5mby5kZWxldGVkTGF5ZXJzLCBpbmZvLmNvbnRl
bnRTY2FsZSkpOworfQorCit2b2lkIFdlYkxheWVyVXBkYXRlSW5mbzo6ZW5jb2RlKENvcmVJUEM6
OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyLT5lbmNvZGUo
Q29yZUlQQzo6SW4obGF5ZXJJRCwgcmVjdCwgYml0bWFwSGFuZGxlKSk7Cit9CisKK2Jvb2wgV2Vi
TGF5ZXJVcGRhdGVJbmZvOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVy
LCBXZWJMYXllclVwZGF0ZUluZm8mIGluZm8pCit7CisgICAgcmV0dXJuIGRlY29kZXItPmRlY29k
ZShDb3JlSVBDOjpPdXQoaW5mby5sYXllcklELCBpbmZvLnJlY3QsIGluZm8uYml0bWFwSGFuZGxl
KSk7Cit9CisKK30KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVy
VHJlZUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJU
cmVlSW5mby5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVy
VHJlZUluZm8uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5OCBAQAorLyoKKyBDb3B5cmlnaHQg
KEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisK
KyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViTGF5ZXJUcmVlSW5mb19oCisjZGVm
aW5lIFdlYkxheWVyVHJlZUluZm9faAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorCisjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCisjaW5jbHVkZSAiQXJndW1lbnRFbmNv
ZGVyLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3R5cGVk
ZWYgdWludDMyX3QgV2ViTGF5ZXJJRDsKKworc3RydWN0IFdlYkxheWVyVXBkYXRlSW5mbyB7Cisg
ICAgV2ViTGF5ZXJVcGRhdGVJbmZvKCkgeyB9CisgICAgV2ViTGF5ZXJVcGRhdGVJbmZvKGNvbnN0
IEludFJlY3QmIHIpCisgICAgICAgIDogcmVjdChyKSB7IH0KKworICAgIFdlYkxheWVySUQgbGF5
ZXJJRDsKKyAgICBJbnRSZWN0IHJlY3Q7CisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgYml0
bWFwSGFuZGxlOworCisgICAgdm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKikg
Y29uc3Q7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlcios
IFdlYkxheWVyVXBkYXRlSW5mbyYpOworfTsKKworc3RydWN0IFdlYkxheWVySW5mbyB7CisgICAg
U3RyaW5nIG5hbWU7CisgICAgV2ViTGF5ZXJJRCBpZDsKKyAgICBXZWJMYXllcklEIHBhcmVudDsK
KyAgICBXZWJMYXllcklEIHJlcGxpY2E7CisgICAgV2ViTGF5ZXJJRCBtYXNrOworCisgICAgRmxv
YXRQb2ludCBwb3M7CisgICAgRmxvYXRQb2ludDNEIGFuY2hvclBvaW50OworICAgIEZsb2F0U2l6
ZSBzaXplOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBjaGlsZHJlblRyYW5zZm9ybTsKKyAgICBJbnRSZWN0IGNvbnRlbnRzUmVj
dDsKKyAgICBmbG9hdCBvcGFjaXR5OworCisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3Qgewor
ICAgICAgICAgICAgYm9vbCBjb250ZW50c09wYXF1ZSA6IDE7CisgICAgICAgICAgICBib29sIGRy
YXdzQ29udGVudCA6IDE7CisgICAgICAgICAgICBib29sIGJhY2tmYWNlVmlzaWJsZSA6IDE7Cisg
ICAgICAgICAgICBib29sIG1hc2tzVG9Cb3VuZHMgOiAxOworICAgICAgICAgICAgYm9vbCBwcmVz
ZXJ2ZXMzRCA6IDE7CisgICAgICAgICAgICBib29sIGNvbnRlbnROZWVkc0Rpc3BsYXkgOiAxOwor
ICAgICAgICB9OworICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7CisgICAgfTsKKyAgICBWZWN0
b3I8V2ViTGF5ZXJJRD4gY2hpbGRyZW47CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gaW1h
Z2VCYWNraW5nU3RvcmU7CisKKyAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29k
ZXIqKSBjb25zdDsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNv
ZGVyKiwgV2ViTGF5ZXJJbmZvJik7Cit9OworCitzdHJ1Y3QgV2ViTGF5ZXJUcmVlSW5mbyB7Cisg
ICAgVmVjdG9yPFdlYkxheWVySW5mbz4gbGF5ZXJzOworICAgIFZlY3RvcjxXZWJMYXllcklEPiBk
ZWxldGVkTGF5ZXJzOworICAgIFdlYkxheWVySUQgcm9vdExheWVySUQ7CisgICAgZmxvYXQgY29u
dGVudFNjYWxlOworCisgICAgdm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKikg
Y29uc3Q7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlcios
IFdlYkxheWVyVHJlZUluZm8mKTsKK307CisKK30KKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKworI2VuZGlmIC8vIFdlYkxheWVyVHJlZUluZm9faAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96897</attachid>
            <date>2011-06-12 17:47:18 -0700</date>
            <delta_ts>2011-06-13 09:39:40 -0700</delta_ts>
            <desc>Patch 2: WebGraphicsLayer</desc>
            <filename>patch-2.diff</filename>
            <type>text/plain</type>
            <size>19635</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4NjIxKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDYtMTIgIE5vJ2FtIFJv
c2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIEltcGxlbWVudCBhY2NlbGVyYXRlZCBj
b21wb3NpdGluZyBvbiBXSzIgUXQgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTY5MzUKKworICAgICAgICBBZGRlZCBXZWJHcmFwaGljc0xheWVy
LCBhIHN1YmNsYXNzIG9mIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIgdGhhdCBzZXJpYWxpemVzIHRo
ZQorICAgICAgICBzdGF0ZSBvZiB0aGUgbGF5ZXIgdHJlZSB0byB0aGUgVUkgcHJvY2VzcyBXZWJM
YXllclRyZWVJbmZvLgorICAgICAgICBGb3Igbm93IHRoaXMgcGF0Y2ggZG9lc24ndCBzZXJpYWxp
emUgdGhlIGFuaW1hdGlvbiBpbmZvcm1hdGlvbiwgYSBmZWF0dXJlIHRoYXQgd2lsbCBiZSB1cHN0
cmVhbWVkCisgICAgICAgIGxhdGVyIG9uLgorCisgICAgICAgIFRvZ2V0aGVyIHdpdGggVmlhdGNo
ZXNsYXYgT3N0YXBlbmtvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJHcmFwaGljc0xheWVyLmNwcDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmg6IEFkZGVkLgorCiAyMDExLTA2LTEyICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFBy
b3NrdXJ5YWtvdi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViR3JhcGhpY3NMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NM
YXllci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTA3IEBACisvKgorIENvcHlyaWdodCAo
QykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKwor
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiV2ViR3JhcGhpY3NMYXllci5oIgor
CisjaW5jbHVkZSAiQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCisjaW5j
bHVkZSAiRHJhd2luZ0FyZWFNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlN
ZXNzYWdlcy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgor
I2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAidGV4dC9D
U3RyaW5nLmgiCisjaW5jbHVkZSA8SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0YXRpYyBIYXNoTWFwPFdlYkxheWVySUQsIFdlYkdyYXBoaWNzTGF5ZXIqPiYgbGF5ZXJCeUlE
VGFibGUoKQoreworICAgIHN0YXRpYyBIYXNoTWFwPFdlYkxheWVySUQsIFdlYkdyYXBoaWNzTGF5
ZXIqPiBzTGF5ZXJCeUlEVGFibGU7CisgICAgcmV0dXJuIHNMYXllckJ5SURUYWJsZTsKK30KKwor
V2ViR3JhcGhpY3NMYXllciogV2ViR3JhcGhpY3NMYXllcjo6bGF5ZXJCeUlEKFdlYktpdDo6V2Vi
TGF5ZXJJRCBpZCkKK3sKKyAgICBIYXNoTWFwPFdlYkxheWVySUQsIFdlYkdyYXBoaWNzTGF5ZXIq
PiYgdGFibGUgPSBsYXllckJ5SURUYWJsZSgpOworICAgIEhhc2hNYXA8V2ViTGF5ZXJJRCwgV2Vi
R3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IHRhYmxlLmZpbmQoaWQpOworICAgIGlmIChp
dCA9PSB0YWJsZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGl0LT5zZWNv
bmQ7Cit9CisKK3N0YXRpYyBWZWN0b3I8V2ViTGF5ZXJJRD4mIGRlbGV0ZWRMYXllcnMoKQorewor
ICAgIHN0YXRpYyBWZWN0b3I8V2ViTGF5ZXJJRD4gbGF5ZXJzOworICAgIHJldHVybiBsYXllcnM7
Cit9CisKK3N0YXRpYyBXZWJMYXllcklEIHRvV2ViTGF5ZXJJRChHcmFwaGljc0xheWVyKiBsYXll
cikKK3sKKyAgICByZXR1cm4gbGF5ZXIgPyB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5pZCgp
IDogMDsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpub3RpZnlDaGFuZ2UoKQoreworICAg
IG1fbW9kaWZpZWQgPSB0cnVlOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCkt
Pm5vdGlmeVN5bmNSZXF1aXJlZCh0aGlzKTsKK30KKworV2ViR3JhcGhpY3NMYXllcjo6V2ViR3Jh
cGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCisgICAgOiBHcmFwaGljc0xh
eWVyKGNsaWVudCkKKyAgICAsIG1fbmVlZHNEaXNwbGF5KGZhbHNlKQorICAgICwgbV9tb2RpZmll
ZChmYWxzZSkKKyAgICAsIG1fY29udGVudE5lZWRzRGlzcGxheShmYWxzZSkKKyAgICAsIG1faGFz
UGVuZGluZ0FuaW1hdGlvbnMoZmFsc2UpCisgICAgLCBtX2NvbnRlbnRTY2FsZSgxLmYpCit7Cisg
ICAgc3RhdGljIFdlYkxheWVySUQgc0lEID0gMTAwMDsKKyAgICBtX2xheWVySW5mby5pZCA9ICsr
c0lEOworICAgIGxheWVyQnlJRFRhYmxlKCkuYWRkKGlkKCksIHRoaXMpOworfQorCitXZWJHcmFw
aGljc0xheWVyOjp+V2ViR3JhcGhpY3NMYXllcigpCit7CisgICAgbGF5ZXJCeUlEVGFibGUoKS5y
ZW1vdmUoaWQoKSk7CisgICAgZGVsZXRlZExheWVycygpLmFwcGVuZChpZCgpKTsKK30KKworYm9v
bCBXZWJHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXll
cio+JiBjaGlsZHJlbikKK3sKKyAgICBib29sIG9rID0gR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRy
ZW4oY2hpbGRyZW4pOworICAgIGlmIChvaykKKyAgICAgICAgbm90aWZ5Q2hhbmdlKCk7CisgICAg
cmV0dXJuIG9rOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkKEdyYXBoaWNz
TGF5ZXIqIGxheWVyKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkKGxheWVyKTsKKyAg
ICBub3RpZnlDaGFuZ2UoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0
SW5kZXgoR3JhcGhpY3NMYXllciogbGF5ZXIsIGludCBpbmRleCkKK3sKKyAgICBHcmFwaGljc0xh
eWVyOjphZGRDaGlsZEF0SW5kZXgobGF5ZXIsIGluZGV4KTsKKyAgICBub3RpZnlDaGFuZ2UoKTsK
K30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIq
IGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OmFk
ZENoaWxkQWJvdmUobGF5ZXIsIHNpYmxpbmcpOworICAgIG5vdGlmeUNoYW5nZSgpOworfQorCit2
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3coR3JhcGhpY3NMYXllciogbGF5ZXIs
IEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpCit7CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRC
ZWxvdyhsYXllciwgc2libGluZyk7CisgICAgbm90aWZ5Q2hhbmdlKCk7Cit9CisKK2Jvb2wgV2Vi
R3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFw
aGljc0xheWVyKiBuZXdDaGlsZCkKK3sKKyAgICBib29sIG9rID0gR3JhcGhpY3NMYXllcjo6cmVw
bGFjZUNoaWxkKG9sZENoaWxkLCBuZXdDaGlsZCk7CisKKyAgICBpZiAob2spCisgICAgICAgIG5v
dGlmeUNoYW5nZSgpOworICAgIHJldHVybiBvazsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVy
OjpyZW1vdmVGcm9tUGFyZW50KCkKK3sKKyAgICBHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFy
ZW50KCk7CisgICAgbm90aWZ5Q2hhbmdlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6
c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBpZiAocG9zaXRpb24oKSA9
PSBwKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihw
KTsKKyAgICBub3RpZnlDaGFuZ2UoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRB
bmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHApCit7CisgICAgaWYgKGFuY2hvclBvaW50
KCkgPT0gcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9y
UG9pbnQocCk7CisgICAgbm90aWZ5Q2hhbmdlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXll
cjo6c2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit7CisgICAgaWYgKHRoaXMtPnNpemUo
KSA9PSBzaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRTaXpl
KHNpemUpOworICAgIHNldE5lZWRzRGlzcGxheSgpOworICAgIG5vdGlmeUNoYW5nZSgpOworfQor
Cit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdCkKK3sKKyAgICBpZiAodHJhbnNmb3JtKCkgPT0gdCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKHQpOworICAgIG5vdGlmeUNoYW5n
ZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuVHJhbnNmb3JtKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KQoreworICAgIGlmIChjaGlsZHJlblRyYW5zZm9y
bSgpID09IHQpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENoaWxk
cmVuVHJhbnNmb3JtKHQpOworICAgIG5vdGlmeUNoYW5nZSgpOworfQorCit2b2lkIFdlYkdyYXBo
aWNzTGF5ZXI6OnNldFByZXNlcnZlczNEKGJvb2wgYikKK3sKKyAgICBpZiAocHJlc2VydmVzM0Qo
KSA9PSBiKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2
ZXMzRChiKTsKKyAgICBub3RpZnlDaGFuZ2UoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVy
OjpzZXRNYXNrc1RvQm91bmRzKGJvb2wgYikKK3sKKyAgICBpZiAobWFza3NUb0JvdW5kcygpID09
IGIpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRz
KGIpOworICAgIG5vdGlmeUNoYW5nZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNl
dERyYXdzQ29udGVudChib29sIGIpCit7CisgICAgaWYgKGRyYXdzQ29udGVudCgpID09IGIpCisg
ICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXREcmF3c0NvbnRlbnQoYik7CisK
KyAgICBpZiAoYikKKyAgICAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgbm90aWZ5Q2hhbmdl
KCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUoYm9vbCBi
KQoreworICAgIGlmIChjb250ZW50c09wYXF1ZSgpID09IGIpCisgICAgICAgIHJldHVybjsKKyAg
ICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09wYXF1ZShiKTsKKyAgICBub3RpZnlDaGFuZ2Uo
KTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkoYm9v
bCBiKQoreworICAgIGlmIChiYWNrZmFjZVZpc2liaWxpdHkoKSA9PSBiKQorICAgICAgICByZXR1
cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkoYik7CisgICAg
bm90aWZ5Q2hhbmdlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0T3BhY2l0eShm
bG9hdCBvcGFjaXR5KQoreworICAgIGlmICh0aGlzLT5vcGFjaXR5KCkgPT0gb3BhY2l0eSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0T3BhY2l0eShvcGFjaXR5KTsK
KyAgICBub3RpZnlDaGFuZ2UoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRDb250
ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBpZiAoY29udGVudHNSZWN0KCkgPT0g
cikKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2ltYWdlKQorICAgICAgICBzZXROZWVkc0Rp
c3BsYXkoKTsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdChyKTsKKyAgICBu
b3RpZnlDaGFuZ2UoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpub3RpZnlBbmltYXRp
b25TdGFydGVkKGRvdWJsZSB0aW1lKQoreworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xp
ZW50KCktPm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQodGhpcywgdGltZSk7Cit9CisKK2Jvb2wgV2Vi
R3JhcGhpY3NMYXllcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1
ZUxpc3QsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbSwgY29u
c3QgU3RyaW5nJiBrZXlmcmFtZXNOYW1lLCBkb3VibGUgdGltZU9mZnNldCkKK3sKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6cGF1c2VBbmltYXRpb24oY29u
c3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKK3sKK30KKwordm9p
ZCBXZWJHcmFwaGljc0xheWVyOjpyZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRp
b25OYW1lKQoreworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFn
ZShJbWFnZSogaW1hZ2UpCit7CisgICAgaWYgKGltYWdlID09IG1faW1hZ2UuZ2V0KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1faW1hZ2UgPSBpbWFnZTsKKyAgICBzZXROZWVkc0Rpc3BsYXko
KTsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UpOworICAgIG5v
dGlmeUNoYW5nZSgpOworfQordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRNYXNrTGF5ZXIoR3Jh
cGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVyKGxh
eWVyKTsKKyAgICBub3RpZnlDaGFuZ2UoKTsKK30KK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0
UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgaWYgKGxheWVy
ID09IHJlcGxpY2FMYXllcigpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6
c2V0UmVwbGljYXRlZEJ5TGF5ZXIobGF5ZXIpOworICAgIG5vdGlmeUNoYW5nZSgpOworfQordm9p
ZCBXZWJHcmFwaGljc0xheWVyOjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAgIG1fbmVlZHNEaXNw
bGF5ID0gdHJ1ZTsKKyAgICBub3RpZnlDaGFuZ2UoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAg
IG1fbmVlZHNEaXNwbGF5UmVjdC51bml0ZShyZWN0KTsKKyAgICBub3RpZnlDaGFuZ2UoKTsKK30K
Kwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgpCit7Cisg
ICAgc2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKK1dlYkxheWVySUQgV2ViR3JhcGhpY3NMYXllcjo6
aWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVySW5mby5pZDsKK30KKwordm9pZCBXZWJH
cmFwaGljc0xheWVyOjpkaWRTeW5jaHJvbml6ZSgpCit7CisgICAgbV9uZWVkc0Rpc3BsYXkgPSBm
YWxzZTsKKyAgICBtX21vZGlmaWVkID0gZmFsc2U7CisgICAgbV9uZWVkc0Rpc3BsYXlSZWN0ID0g
RmxvYXRSZWN0KCk7CisgICAgaWYgKG1faGFzUGVuZGluZ0FuaW1hdGlvbnMpCisgICAgICAgIG5v
dGlmeUFuaW1hdGlvblN0YXJ0ZWQoV1RGOjpjdXJyZW50VGltZSgpKTsKKyAgICBtX2hhc1BlbmRp
bmdBbmltYXRpb25zID0gZmFsc2U7Cit9CisKK2NvbnN0IFdlYkxheWVySW5mbyYgV2ViR3JhcGhp
Y3NMYXllcjo6bGF5ZXJJbmZvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllckluZm87Cit9
CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGUoKQoreworICAg
IHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgY2hpbGRyZW4oKVtp
XS0+c3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKKyAgICBpZiAocmVwbGljYUxheWVyKCkpCisgICAg
ICAgIHJlcGxpY2FMYXllcigpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOworICAgIGlmIChtYXNr
TGF5ZXIoKSkKKyAgICAgICAgbWFza0xheWVyKCktPnN5bmNDb21wb3NpdGluZ1N0YXRlKCk7Cit9
CisKK1dlYkdyYXBoaWNzTGF5ZXIqIHRvV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBs
YXllcikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViR3JhcGhpY3NMYXllcio+KGxheWVy
KTsKK30KKworRmxvYXRSZWN0IFdlYkdyYXBoaWNzTGF5ZXI6Om5lZWRzRGlzcGxheVJlY3QoKSBj
b25zdAoreworICAgIEZsb2F0UmVjdCByZWN0ID0gRmxvYXRSZWN0KDAsIDAsIHNpemUoKS53aWR0
aCgpLCBzaXplKCkuaGVpZ2h0KCkpOworICAgIGlmICghbV9uZWVkc0Rpc3BsYXkpCisgICAgICAg
IHJlY3QuaW50ZXJzZWN0KG1fbmVlZHNEaXNwbGF5UmVjdCk7CisgICAgcmV0dXJuIHJlY3Q7Cit9
CisKK1ZlY3RvcjxXZWJLaXQ6OldlYkxheWVySUQ+IFdlYkdyYXBoaWNzTGF5ZXI6OnRha2VMYXll
cnNUb0RlbGV0ZSgpCit7CisgICAgVmVjdG9yPFdlYktpdDo6V2ViTGF5ZXJJRD4gbGF5ZXJzID0g
ZGVsZXRlZExheWVycygpOworICAgIGRlbGV0ZWRMYXllcnMoKS5jbGVhcigpOworICAgIHJldHVy
biBsYXllcnM7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3Rh
dGVGb3JUaGlzTGF5ZXJPbmx5KCkKK3sKKyAgICBtX2xheWVySW5mby5uYW1lID0gbmFtZSgpOwor
ICAgIG1fbGF5ZXJJbmZvLmFuY2hvclBvaW50ID0gYW5jaG9yUG9pbnQoKTsKKyAgICBtX2xheWVy
SW5mby5iYWNrZmFjZVZpc2libGUgPSBiYWNrZmFjZVZpc2liaWxpdHkoKTsKKyAgICBtX2xheWVy
SW5mby5jaGlsZHJlblRyYW5zZm9ybSA9IGNoaWxkcmVuVHJhbnNmb3JtKCk7CisgICAgbV9sYXll
ckluZm8uY29udGVudHNPcGFxdWUgPSBjb250ZW50c09wYXF1ZSgpOworICAgIG1fbGF5ZXJJbmZv
LmNvbnRlbnRzUmVjdCA9IGNvbnRlbnRzUmVjdCgpOworICAgIG1fbGF5ZXJJbmZvLmRyYXdzQ29u
dGVudCA9IGRyYXdzQ29udGVudCgpOworICAgIG1fbGF5ZXJJbmZvLm1hc2sgPSB0b1dlYkxheWVy
SUQobWFza0xheWVyKCkpOworICAgIG1fbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMgPSBtYXNrc1Rv
Qm91bmRzKCk7CisgICAgbV9sYXllckluZm8ub3BhY2l0eSA9IG9wYWNpdHkoKTsKKyAgICBtX2xh
eWVySW5mby5wYXJlbnQgPSB0b1dlYkxheWVySUQocGFyZW50KCkpOworICAgIG1fbGF5ZXJJbmZv
LnBvcyA9IHBvc2l0aW9uKCk7CisgICAgbV9sYXllckluZm8ucHJlc2VydmVzM0QgPSBwcmVzZXJ2
ZXMzRCgpOworICAgIG1fbGF5ZXJJbmZvLnJlcGxpY2EgPSB0b1dlYkxheWVySUQocmVwbGljYUxh
eWVyKCkpOworICAgIG1fbGF5ZXJJbmZvLnNpemUgPSBGbG9hdFNpemUoc2l6ZSgpLndpZHRoKCkg
KiBtX2NvbnRlbnRTY2FsZSwgc2l6ZSgpLmhlaWdodCgpICogbV9jb250ZW50U2NhbGUpOworICAg
IG1fbGF5ZXJJbmZvLnRyYW5zZm9ybSA9IHRyYW5zZm9ybSgpOworICAgIG1fY29udGVudE5lZWRz
RGlzcGxheSA9IGZhbHNlOworICAgIG1fbGF5ZXJJbmZvLmNoaWxkcmVuLmNsZWFyKCk7CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAg
IG1fbGF5ZXJJbmZvLmNoaWxkcmVuLmFwcGVuZCh0b1dlYkxheWVySUQoY2hpbGRyZW4oKVtpXSkp
OworfQorCitzdGF0aWMgVmVjdG9yPEZsb2F0UmVjdD4gZGl2aWRlSW50b1RpbGVzKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3sKKyAgICBWZWN0b3I8RmxvYXRSZWN0PiB0aWxlczsKKyAgICBzdGF0
aWMgY29uc3QgZmxvYXQgZ0RpbWVuc2lvbiA9IDEwMjQuMDsKKyAgICBmb3IgKGZsb2F0IHkgPSBy
ZWN0LnkoKTsgeSA8IHJlY3QubWF4WSgpOyB5ICs9IGdEaW1lbnNpb24pIHsKKyAgICAgICAgZm9y
IChmbG9hdCB4ID0gcmVjdC54KCk7IHggPCByZWN0Lm1heFgoKTsgeCArPSBnRGltZW5zaW9uKSB7
CisgICAgICAgICAgICBGbG9hdFJlY3QgdGlsZSh4LCB5LCBnRGltZW5zaW9uLCBnRGltZW5zaW9u
KTsKKyAgICAgICAgICAgIHRpbGUuaW50ZXJzZWN0KHJlY3QpOworICAgICAgICAgICAgdGlsZXMu
YXBwZW5kKHRpbGUpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0aWxlczsKK30KKwor
c3RhdGljIHZvaWQgY29sbGVjdENvbXBvc2l0aW5nSW5mb0ZvclRoaXNMYXllcihHcmFwaGljc0xh
eWVyKiBsYXllciwgV2ViTGF5ZXJUcmVlSW5mbyYgb3V0SW5mbywgVmVjdG9yPFdlYkdyYXBoaWNz
TGF5ZXIqPiYgb3V0TGF5ZXJzKQoreworICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyV0syID0g
dG9XZWJHcmFwaGljc0xheWVyKGxheWVyKTsKKyAgICBpZiAoIWxheWVyV0syKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCFsYXllcldLMi0+aXNNb2RpZmllZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBvdXRMYXllcnMuYXBwZW5kKGxheWVyV0syKTsKKyAgICBvdXRJbmZvLmxheWVycy5h
cHBlbmQobGF5ZXJXSzItPmxheWVySW5mbygpKTsKKworICAgIFdlYkxheWVySW5mbyYgbGF5ZXJJ
bmZvID0gb3V0SW5mby5sYXllcnNbb3V0SW5mby5sYXllcnMuc2l6ZSgpIC0gMV07CisgICAgaWYg
KGxheWVyV0syLT5pbWFnZSgpKQorICAgICAgICBsYXllckluZm8uZHJhd3NDb250ZW50ID0gdHJ1
ZTsKK30KKworc3RhdGljIHZvaWQgY29sbGVjdENvbXBvc2l0aW5nSW5mb1JlY3Vyc2l2ZShHcmFw
aGljc0xheWVyKiByb290TGF5ZXIsIFdlYkxheWVyVHJlZUluZm8mIG91dEluZm8sIFZlY3RvcjxX
ZWJHcmFwaGljc0xheWVyKj4mIG91dExheWVycykKK3sKKyAgICBpZiAoIXJvb3RMYXllcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY29sbGVjdENvbXBvc2l0aW5nSW5mb0ZvclRoaXNMYXllcihy
b290TGF5ZXIsIG91dEluZm8sIG91dExheWVycyk7CisgICAgY29sbGVjdENvbXBvc2l0aW5nSW5m
b0ZvclRoaXNMYXllcihyb290TGF5ZXItPm1hc2tMYXllcigpLCBvdXRJbmZvLCBvdXRMYXllcnMp
OworICAgIGNvbGxlY3RDb21wb3NpdGluZ0luZm9SZWN1cnNpdmUocm9vdExheWVyLT5yZXBsaWNh
TGF5ZXIoKSwgb3V0SW5mbywgb3V0TGF5ZXJzKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcm9vdExheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBjb2xsZWN0Q29t
cG9zaXRpbmdJbmZvUmVjdXJzaXZlKHJvb3RMYXllci0+Y2hpbGRyZW4oKVtpXSwgb3V0SW5mbywg
b3V0TGF5ZXJzKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZW5kTGF5ZXJzVG9VSShX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKiByb290TGF5ZXIsIFdlYlBhZ2UqIHdlYlBhZ2UpCit7Cisg
ICAgd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKKyAgICB3ZWJQYWdlLT5jb3JlUGFnZSgpLT5t
YWluRnJhbWUoKS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1l
cygpOworICAgIFdlYkxheWVyVHJlZUluZm8gY29tcG9zaXRpbmdJbmZvOworICAgIGNvbXBvc2l0
aW5nSW5mby5yb290TGF5ZXJJRCA9IHJvb3RMYXllciA/IHRvV2ViR3JhcGhpY3NMYXllcihyb290
TGF5ZXIpLT5pZCgpIDogMDsKKyAgICBjb21wb3NpdGluZ0luZm8uY29udGVudFNjYWxlID0gMS4w
OworICAgIGNvbXBvc2l0aW5nSW5mby5kZWxldGVkTGF5ZXJzID0gV2ViR3JhcGhpY3NMYXllcjo6
dGFrZUxheWVyc1RvRGVsZXRlKCk7CisgICAgVmVjdG9yPFdlYkdyYXBoaWNzTGF5ZXIqPiBsYXll
cnM7CisgICAgaWYgKHJvb3RMYXllcikKKyAgICAgICAgY29sbGVjdENvbXBvc2l0aW5nSW5mb1Jl
Y3Vyc2l2ZShyb290TGF5ZXIsIGNvbXBvc2l0aW5nSW5mbywgbGF5ZXJzKTsKKworICAgIGlmIChj
b21wb3NpdGluZ0luZm8uZGVsZXRlZExheWVycy5pc0VtcHR5KCkgJiYgY29tcG9zaXRpbmdJbmZv
LmxheWVycy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHdlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6OlN5bmNDb21wb3NpdGluZ0xheWVycyhjb21wb3Np
dGluZ0luZm8pKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyV0syID0gbGF5ZXJzW2ldOwor
ICAgICAgICBGbG9hdFJlY3QgdXBkYXRlUmVjdCA9IGxheWVyV0syLT5uZWVkc0Rpc3BsYXlSZWN0
KCk7CisKKyAgICAgICAgbGF5ZXJXSzItPmRpZFN5bmNocm9uaXplKCk7CisKKyAgICAgICAgaWYg
KHVwZGF0ZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
UmVmUHRyPEltYWdlPiBkaXJlY3RJbWFnZSA9IGxheWVyV0syLT5pbWFnZSgpOworICAgICAgICBp
ZiAoZGlyZWN0SW1hZ2UpCisgICAgICAgICAgICB1cGRhdGVSZWN0ID0gbGF5ZXJXSzItPmNvbnRl
bnRzUmVjdCgpOworICAgICAgICBlbHNlIGlmICghbGF5ZXJXSzItPmRyYXdzQ29udGVudCgpKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgVmVjdG9yPEZsb2F0UmVjdD4gdGlsZVJl
Y3RzID0gZGl2aWRlSW50b1RpbGVzKHVwZGF0ZVJlY3QpOworICAgICAgICBmb3IgKHNpemVfdCB0
aWxlSW5kZXggPSAwOyB0aWxlSW5kZXggPCB0aWxlUmVjdHMuc2l6ZSgpOyArK3RpbGVJbmRleCkg
eworICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCA9IHRpbGVSZWN0c1t0aWxl
SW5kZXhdOworICAgICAgICAgICAgSW50UmVjdCBlbmNsb3NpbmdVcGRhdGVSZWN0ID0gZW5jbG9z
aW5nSW50UmVjdCh0aWxlUmVjdCk7CisKKyAgICAgICAgICAgIFdlYkxheWVyVXBkYXRlSW5mbyBj
aHVuayhlbmNsb3NpbmdVcGRhdGVSZWN0KTsKKyAgICAgICAgICAgIGNodW5rLmxheWVySUQgPSB1
aW50MzJfdChsYXllcldLMi0+aWQoKSk7CisgICAgICAgICAgICBSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShjaHVuay5yZWN0
LnNpemUoKSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKKyAgICAgICAgICAgIGlm
ICghYml0bWFwKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKCFi
aXRtYXAtPmNyZWF0ZUhhbmRsZShjaHVuay5iaXRtYXBIYW5kbGUpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKworI2lmIFBMQVRGT1JNKFFUKQorICAgICAgICAgICAgUUltYWdlIHRpbGVJbWFn
ZSA9IGJpdG1hcC0+Y3JlYXRlUUltYWdlKCk7CisgICAgICAgICAgICB0aWxlSW1hZ2UuZmlsbCgw
KTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBRUGFpbnRlciBwYWludGVyKCZ0aWxl
SW1hZ2UpOworICAgICAgICAgICAgICAgIHBhaW50ZXIudHJhbnNsYXRlKC10aWxlUmVjdC54KCks
IC10aWxlUmVjdC55KCkpOworICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0
KCZwYWludGVyKTsKKyAgICAgICAgICAgICAgICBpZiAoZGlyZWN0SW1hZ2UpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGRpcmVjdEltYWdlLmdldCgpLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBsYXllcldLMi0+Y29udGVudHNSZWN0KCksIEZsb2F0UmVjdCgwLCAwLCBkaXJl
Y3RJbWFnZS0+d2lkdGgoKSwgZGlyZWN0SW1hZ2UtPmhlaWdodCgpKSk7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBsYXllcldLMi0+cGFpbnRHcmFwaGljc0xheWVy
Q29udGVudHMoY29udGV4dCwgZW5jbG9zaW5nVXBkYXRlUmVjdCk7CisgICAgICAgICAgICB9Cisj
ZW5kaWYKKworICAgICAgICAgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQ
cm94eTo6VXBkYXRlQ29tcG9zaXRpbmdMYXllckNvbnRlbnQoY2h1bmspKTsKKyAgICAgICAgfQor
ICAgIH0KK30KKworc3RhdGljIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gY3JlYXRlV2ViR3Jh
cGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBXZWJHcmFwaGljc0xheWVyKGNsaWVudCkpOworfQorCit2b2lkIFdlYkdyYXBo
aWNzTGF5ZXI6OmluaXRGYWN0b3J5KCkKK3sKKyAgICBHcmFwaGljc0xheWVyOjpzZXRHcmFwaGlj
c0xheWVyRmFjdG9yeShjcmVhdGVXZWJHcmFwaGljc0xheWVyKTsKK30KKworfQorI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNz
TGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKworI2lmbmRlZiBXZWJHcmFwaGljc0xheWVyX2gKKyNkZWZpbmUgV2ViR3JhcGhpY3NMYXll
cl9oCisKKyNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVy
LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAi
UnVuTG9vcC5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgIlRyYW5z
Zm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgorI2luY2x1
ZGUgIldlYlByb2Nlc3MuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwor
bmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJQYWdlOworfQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFdlYkdyYXBoaWNzTGF5ZXIgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NM
YXllciB7CitwdWJsaWM6CisgICAgV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50
Kik7CisgICAgdmlydHVhbCB+V2ViR3JhcGhpY3NMYXllcigpOworCisgICAgYm9vbCBzZXRDaGls
ZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+Jik7CisgICAgdm9pZCBhZGRDaGlsZChH
cmFwaGljc0xheWVyKik7CisgICAgdm9pZCBhZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllcios
IGludCk7CisgICAgdm9pZCBhZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xh
eWVyKik7CisgICAgdm9pZCBhZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xh
eWVyKik7CisgICAgYm9vbCByZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciosIEdyYXBoaWNzTGF5
ZXIqKTsKKyAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICB2b2lkIHNldFBvc2l0aW9u
KGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0
UG9pbnQzRCYpOworICAgIHZvaWQgc2V0U2l6ZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICB2b2lk
IHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIHZvaWQgc2V0
Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICB2b2lk
IHNldFByZXNlcnZlczNEKGJvb2wpOworICAgIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKTsK
KyAgICB2b2lkIHNldERyYXdzQ29udGVudChib29sKTsKKyAgICB2b2lkIHNldENvbnRlbnRzT3Bh
cXVlKGJvb2wpOworICAgIHZvaWQgc2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wpOworICAgIHZv
aWQgc2V0T3BhY2l0eShmbG9hdCk7CisgICAgdm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3QgSW50
UmVjdCYpOworICAgIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0Jiwg
Y29uc3QgSW50U2l6ZSYgLypib3hTaXplKi8sIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmlu
ZyYgLyphbmltYXRpb25OYW1lKi8sIGRvdWJsZSAvKnRpbWVPZmZzZXQqLyk7CisgICAgdm9pZCBw
YXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIC8qYW5pbWF0aW9uTmFtZSovLCBkb3VibGUgLyp0
aW1lT2Zmc2V0Ki8pOworICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgLyph
bmltYXRpb25OYW1lKi8pOworICAgIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7Cisg
ICAgdm9pZCBzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciopOworICAgIHZvaWQgc2V0UmVwbGlj
YXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciopOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7
CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAg
dm9pZCBzZXRDb250ZW50c05lZWRzRGlzcGxheSgpOworICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29t
cG9zaXRpbmdTdGF0ZSgpOworICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZUZv
clRoaXNMYXllck9ubHkoKTsKKworICAgIFdlYktpdDo6V2ViTGF5ZXJJRCBpZCgpIGNvbnN0Owor
ICAgIGNvbnN0IFdlYktpdDo6V2ViTGF5ZXJJbmZvJiBsYXllckluZm8oKSBjb25zdDsKKyAgICBG
bG9hdFJlY3QgbmVlZHNEaXNwbGF5UmVjdCgpIGNvbnN0OworICAgIHN0YXRpYyBWZWN0b3I8V2Vi
S2l0OjpXZWJMYXllcklEPiB0YWtlTGF5ZXJzVG9EZWxldGUoKTsKKyAgICBzdGF0aWMgV2ViR3Jh
cGhpY3NMYXllciogbGF5ZXJCeUlEKFdlYktpdDo6V2ViTGF5ZXJJRCk7CisgICAgYm9vbCBpc01v
ZGlmaWVkKCkgY29uc3QgeyByZXR1cm4gbV9tb2RpZmllZDsgfQorICAgIHZvaWQgZGlkU3luY2hy
b25pemUoKTsKKyAgICBJbWFnZSogaW1hZ2UoKSB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9Cisg
ICAgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSk7CisKKyAgICBzdGF0aWMgdm9p
ZCBpbml0RmFjdG9yeSgpOworICAgIHN0YXRpYyB2b2lkIHNlbmRMYXllcnNUb1VJKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqLCBXZWJLaXQ6OldlYlBhZ2UqKTsKKworcHJpdmF0ZToKKyAgICBXZWJL
aXQ6OldlYkxheWVySW5mbyBtX2xheWVySW5mbzsKKyAgICBSZWZQdHI8V2ViS2l0OjpTaGFyZWFi
bGVCaXRtYXA+IG1fYmFja2luZ1N0b3JlOworICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKKyAg
ICBGbG9hdFJlY3QgbV9uZWVkc0Rpc3BsYXlSZWN0OworICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXk7
CisgICAgYm9vbCBtX21vZGlmaWVkOworICAgIGJvb2wgbV9jb250ZW50TmVlZHNEaXNwbGF5Owor
ICAgIGJvb2wgbV9oYXNQZW5kaW5nQW5pbWF0aW9uczsKKworICAgIGZsb2F0IG1fY29udGVudFNj
YWxlOworCisgICAgdm9pZCBub3RpZnlDaGFuZ2UoKTsKK307CisKK1dlYkdyYXBoaWNzTGF5ZXIq
IHRvV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKik7CisKK30KKyNlbmRpZgorCisjZW5k
aWYgLy8gV2ViR3JhcGhpY3NMYXllcl9ICisK
</data>
<flag name="review"
          id="90686"
          type_id="1"
          status="-"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96914</attachid>
            <date>2011-06-12 20:15:54 -0700</date>
            <delta_ts>2011-06-14 06:54:41 -0700</delta_ts>
            <desc>Patch 3: Expose ShareableImage::createImage() for directly composited images</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>2806</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4NjI1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDYtMTIgIE5vYW0gUm9z
ZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gSW1wbGVtZW50IGFjY2VsZXJhdGVkIGNv
bXBvc2l0aW5nIG9uIFdLMiBRdCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01NjkzNQorCisgICAgICAgIEFkZCBhIGNyZWF0ZUltYWdlKCkgZnVu
Y3Rpb24gdG8gU2hhcmVhYmxlQml0bWFwLCBmb3Igbm93IGlmZGVmJ2VkIHRvIFF0IG9ubHkuCisg
ICAgICAgIFRoaXMgYWxsb3dzIHVzIHRvIHN1cHBvcnQgZGlyZWN0bHkgY29tcG9zaXRlZCBpbWFn
ZXMgYWNyb3NzIHRoZSBXZWJLaXQyIHByb2Nlc3Nlcy4KKworICAgICAgICBUb2dldGhlciB3aXRo
IFZpYXRjaGVzbGF2IE9zdGFwZW5rby4KKworICAgICAgICAqIFNoYXJlZC9TaGFyZWFibGVCaXRt
YXAuaDoKKyAgICAgICAgKiBTaGFyZWQvcXQvU2hhcmVhYmxlQml0bWFwUXQuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVFJbWFnZSk6CisgICAgICAgIChXZWJL
aXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlSW1hZ2UpOgorCiAyMDExLTA2LTEyICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlk
ZWwuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oCShyZXZpc2lv
biA4ODYyMSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBTaGFyZWFibGVCaXRtYXBfaAog
CiAjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTEyMSw2ICsxMjIsNyBAQCBwdWJsaWM6
CiAgICAgLy8gVGhpcyBjcmVhdGVzIGEgUUltYWdlIHRoYXQgZGlyZWN0bHkgcmVmZXJlbmNlcyB0
aGUgc2hhcmVkIGJpdG1hcCBkYXRhLgogICAgIC8vIFRoaXMgaXMgb25seSBzYWZlIHRvIHVzZSB3
aGVuIHdlIGtub3cgdGhhdCB0aGUgY29udGVudHMgb2YgdGhlIHNoYXJlYWJsZSBiaXRtYXAgd29u
J3QgY2hhbmdlLgogICAgIFFJbWFnZSBjcmVhdGVRSW1hZ2UoKTsKKyAgICBQYXNzUmVmUHRyPFdl
YkNvcmU6OkltYWdlPiBjcmVhdGVJbWFnZSgpOwogI2VuZGlmCiAKIHByaXZhdGU6CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvU2hhcmVhYmxlQml0bWFwUXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9TaGFyZWFibGVCaXRtYXBRdC5jcHAJKHJldmlz
aW9uIDg4NjIxKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1NoYXJlYWJsZUJpdG1hcFF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8UUltYWdl
PgogI2luY2x1ZGUgPFFQYWludGVyPgorI2luY2x1ZGUgPFdlYkNvcmUvQml0bWFwSW1hZ2UuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKQEAgLTM2LDkgKzM3LDE4IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBRSW1hZ2Ug
U2hhcmVhYmxlQml0bWFwOjpjcmVhdGVRSW1hZ2UoKQogewotICAgIHJldHVybiBRSW1hZ2UocmVp
bnRlcnByZXRfY2FzdDx1Y2hhcio+KGRhdGEoKSksIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVp
Z2h0KCksIG1fc2l6ZS53aWR0aCgpICogNCwgUUltYWdlOjpGb3JtYXRfUkdCMzIpOworICAgIHJl
dHVybiBRSW1hZ2UocmVpbnRlcnByZXRfY2FzdDx1Y2hhcio+KGRhdGEoKSksIG1fc2l6ZS53aWR0
aCgpLCBtX3NpemUuaGVpZ2h0KCksIG1fc2l6ZS53aWR0aCgpICogNCwKKyAgICAgICAgICAgICAg
ICAgIG1fZmxhZ3MgJiBTdXBwb3J0c0FscGhhID8gUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11
bHRpcGxpZWQgOiBRSW1hZ2U6OkZvcm1hdF9SR0IzMik7CiB9CiAKKyNpZiBQTEFURk9STShRVCkK
K1Bhc3NSZWZQdHI8SW1hZ2U+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlSW1hZ2UoKQoreworICAg
IFFQaXhtYXAqIHBpeG1hcCA9IG5ldyBRUGl4bWFwKFFQaXhtYXA6OmZyb21JbWFnZShjcmVhdGVR
SW1hZ2UoKSkpOworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKHBpeG1hcCk7Cit9Cisj
ZW5kaWYKKwogUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJpdG1hcDo6Y3Jl
YXRlR3JhcGhpY3NDb250ZXh0KCkKIHsKICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgT3du
UHRyPFFJbWFnZT4/Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96915</attachid>
            <date>2011-06-12 20:49:32 -0700</date>
            <delta_ts>2011-06-14 16:00:02 -0700</delta_ts>
            <desc>Patch 4: Expose webViewVisibleRect, so that we can avoid rendering texture outside of our view.</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>3962</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4NjI1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDYtMTIgIE5vJ2FtIFJv
c2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIEltcGxlbWVudCBhY2NlbGVyYXRlZCBj
b21wb3NpdGluZyBvbiBXSzIgUXQgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTY5MzUKKworICAgICAgICBFeHBvc2Ugd2ViVmlld1Zpc2libGVS
ZWN0KCksIHNvIHRoYXQgd2UgY2FuIGRldGVjdCB3aGljaCBwYXJ0cyBvZiBhIHRleHR1cmUgYWN0
dWFsbHkKKyAgICAgICAgbmVlZCB0byBiZSB1cGxvYWRlZC4KKworICAgICAgICBUb2dldGhlciB3
aXRoIFZpYXRjaGVzbGF2IE9zdGFwZW5rby4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQv
cXdrcGFnZS5jcHA6CisgICAgICAgIChRV0tQYWdlUHJpdmF0ZTo6d2ViVmlld1Zpc2libGVSZWN0
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F3a3BhZ2VfcC5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9XZWJQYWdlUHJveHlRdC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6d2ViVmlld1Zpc2libGVSZWN0KToKKwogMjAxMS0wNi0xMiAg
QWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVy
aWMgU2VpZGVsLgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCShyZXZp
c2lvbiA4ODYyMSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwMSw2ICsxMDEsNyBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oUVQp
CiAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5kWm9vbWFibGVBcmVhKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHdl
YlZpZXdWaXNpYmxlUmVjdCgpIGNvbnN0ID0gMDsKICNlbmRpZgogCiAgICAgdmlydHVhbCB2b2lk
IHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKSA9IDA7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiA4ODYyMSkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNDg5LDYg
KzQ4OSw3IEBAIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKFFUKQogICAgIHZvaWQgZmluZFpvb21h
YmxlQXJlYUZvclBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgV2ViQ29yZTo6
SW50UmVjdCB3ZWJWaWV3VmlzaWJsZVJlY3QoKTsKICNlbmRpZgogCiAgICAgdm9pZCBhZHZhbmNl
VG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikgY29uc3Q7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a3BhZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdrcGFnZS5jcHAJKHJldmlzaW9u
IDg4NjIxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODI2LDYgKzgyNiwxMiBAQCB2b2lkIFFXS1BhZ2VQcml2YXRlOjpk
aWRGaW5kWm9vbWFibGVBcmVhCiAgICAgZW1pdCBxLT56b29tYWJsZUFyZWFGb3VuZChRUmVjdChh
cmVhKSk7CiB9CiAKK1dlYkNvcmU6OkludFJlY3QgUVdLUGFnZVByaXZhdGU6OndlYlZpZXdWaXNp
YmxlUmVjdCgpIGNvbnN0Cit7CisgICAgUUdyYXBoaWNzV0tWaWV3KiB3a1ZpZXcgPSBzdGF0aWNf
Y2FzdDxRR3JhcGhpY3NXS1ZpZXcqPih2aWV3KTsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVj
dChGbG9hdFJlY3Qod2tWaWV3LT52aXNpYmxlUmVjdCgpKSk7Cit9CisKIGJvb2wgUVdLUGFnZTo6
aXNDb25uZWN0ZWRUb0VuZ2luZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGQtPmlzQ29ubmVjdGVk
VG9FbmdpbmU7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a3BhZ2Vf
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdrcGFn
ZV9wLmgJKHJldmlzaW9uIDg4NjIxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xd2twYWdlX3AuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGRpZFJlbGF1bmNoUHJvY2VzcygpOwogICAgIHZpcnR1YWwgdm9pZCBk
aWRDaGFuZ2VDb250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBkaWRGaW5kWm9vbWFibGVBcmVhKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgd2ViVmlld1Zpc2libGVSZWN0KCkgY29uc3Q7CiAg
ICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0Vmlld3BvcnRBcmd1bWVudHMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRB
cmd1bWVudHMmKTsKICAgICB2aXJ0dWFsIHZvaWQgdG9vbFRpcENoYW5nZWQoY29uc3QgV1RGOjpT
dHJpbmcmLCBjb25zdCBXVEY6OlN0cmluZyYpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1dlYlBhZ2VQcm94eVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvV2ViUGFnZVByb3h5UXQuY3BwCShyZXZpc2lvbiA4ODYyMSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJQYWdlUHJveHlRdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJQYWdl
UHJveHkuaCIKIAorI2luY2x1ZGUgIlBhZ2VDbGllbnQuaCIKICNpbmNsdWRlIDxXZWJDb3JlL05v
dEltcGxlbWVudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNDYsNCArNDcsOSBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6bG9hZFJlY2VudFNlYXJjaGVzKGNvCiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAorV2ViQ29yZTo6SW50UmVjdCBXZWJQYWdlUHJveHk6OndlYlZpZXdWaXNpYmxl
UmVjdCgpCit7CisgICAgcmV0dXJuIG1fcGFnZUNsaWVudC0+d2ViVmlld1Zpc2libGVSZWN0KCk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96962</attachid>
            <date>2011-06-13 09:39:40 -0700</date>
            <delta_ts>2011-06-18 13:31:17 -0700</delta_ts>
            <desc> Patch 2: WebGraphicsLayer</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>19686</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4NjQzKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDYtMTIgIE5vJ2FtIFJv
c2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIEltcGxlbWVudCBhY2NlbGVyYXRlZCBj
b21wb3NpdGluZyBvbiBXSzIgUXQgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTY5MzUKKworICAgICAgICBBZGRlZCBXZWJHcmFwaGljc0xheWVy
LCBhIHN1YmNsYXNzIG9mIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIgdGhhdCBzZXJpYWxpemVzIHRo
ZSBzdGF0ZSBvZiB0aGUgbGF5ZXIKKyAgICAgICAgdHJlZSB0byB0aGUgVUkgcHJvY2VzcyBXZWJM
YXllclRyZWVJbmZvLgorICAgICAgICBGb3Igbm93IHRoaXMgcGF0Y2ggZG9lc24ndCBzZXJpYWxp
emUgdGhlIGFuaW1hdGlvbiBpbmZvcm1hdGlvbiwgYSBmZWF0dXJlIHRoYXQgd2lsbCBiZSB1cHN0
cmVhbWVkIGxhdGVyIG9uLgorCisgICAgICAgIFRvZ2V0aGVyIHdpdGggVmlhdGNoZXNsYXYgT3N0
YXBlbmtvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGlj
c0xheWVyLmNwcDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJHcmFwaGljc0xheWVyLmg6IEFkZGVkLgorCiAyMDExLTA2LTEzICBFdW5taSBMZWUgIDxldW5t
aTE1LmxlZUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRl
IENocmlzdGlhbnNlbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhp
Y3NMYXllci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEyIEBACisvKgorIENvcHlyaWdo
dCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiV2ViR3JhcGhpY3NMYXllci5o
IgorCisjaW5jbHVkZSAiQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCisj
aW5jbHVkZSAiRHJhd2luZ0FyZWFNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJv
eHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5o
IgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAidGV4
dC9DU3RyaW5nLmgiCisjaW5jbHVkZSA8SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0YXRpYyBIYXNoTWFwPFdlYkxheWVySUQsIFdlYkdyYXBoaWNzTGF5ZXIqPiYgbGF5ZXJC
eUlETWFwKCkKK3sKKyAgICBzdGF0aWMgSGFzaE1hcDxXZWJMYXllcklELCBXZWJHcmFwaGljc0xh
eWVyKj4gZ2xvYmFsTWFwOworICAgIHJldHVybiBnbG9iYWxNYXA7Cit9CisKK3N0YXRpYyBjb25z
dCBmbG9hdCBnVGlsZURpbWVuc2lvbiA9IDEwMjQuMDsKKworV2ViR3JhcGhpY3NMYXllciogV2Vi
R3JhcGhpY3NMYXllcjo6bGF5ZXJCeUlEKFdlYktpdDo6V2ViTGF5ZXJJRCBpZCkKK3sKKyAgICBI
YXNoTWFwPFdlYkxheWVySUQsIFdlYkdyYXBoaWNzTGF5ZXIqPiYgdGFibGUgPSBsYXllckJ5SURN
YXAoKTsKKyAgICBIYXNoTWFwPFdlYkxheWVySUQsIFdlYkdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0
b3IgaXQgPSB0YWJsZS5maW5kKGlkKTsKKyAgICBpZiAoaXQgPT0gdGFibGUuZW5kKCkpCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiBpdC0+c2Vjb25kOworfQorCitzdGF0aWMgVmVjdG9y
PFdlYkxheWVySUQ+JiBkZWxldGVkTGF5ZXJJRHMoKQoreworICAgIHN0YXRpYyBWZWN0b3I8V2Vi
TGF5ZXJJRD4gbGF5ZXJzOworICAgIHJldHVybiBsYXllcnM7Cit9CisKK3N0YXRpYyBXZWJMYXll
cklEIHRvV2ViTGF5ZXJJRChHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICByZXR1cm4gbGF5
ZXIgPyB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5pZCgpIDogMDsKK30KKwordm9pZCBXZWJH
cmFwaGljc0xheWVyOjpub3RpZnlDaGFuZ2UoKQoreworICAgIG1fbW9kaWZpZWQgPSB0cnVlOwor
ICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZCh0
aGlzKTsKK30KKworV2ViR3JhcGhpY3NMYXllcjo6V2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xh
eWVyQ2xpZW50KiBjbGllbnQpCisgICAgOiBHcmFwaGljc0xheWVyKGNsaWVudCkKKyAgICAsIG1f
bmVlZHNEaXNwbGF5KGZhbHNlKQorICAgICwgbV9tb2RpZmllZChmYWxzZSkKKyAgICAsIG1fY29u
dGVudE5lZWRzRGlzcGxheShmYWxzZSkKKyAgICAsIG1faGFzUGVuZGluZ0FuaW1hdGlvbnMoZmFs
c2UpCisgICAgLCBtX2NvbnRlbnRTY2FsZSgxLmYpCit7CisgICAgc3RhdGljIFdlYkxheWVySUQg
c0lEID0gMTAwMDsKKyAgICBtX2xheWVySW5mby5pZCA9ICsrc0lEOworICAgIGxheWVyQnlJRE1h
cCgpLmFkZChpZCgpLCB0aGlzKTsKK30KKworV2ViR3JhcGhpY3NMYXllcjo6fldlYkdyYXBoaWNz
TGF5ZXIoKQoreworICAgIGxheWVyQnlJRE1hcCgpLnJlbW92ZShpZCgpKTsKKyAgICBkZWxldGVk
TGF5ZXJJRHMoKS5hcHBlbmQoaWQoKSk7Cit9CisKK2Jvb2wgV2ViR3JhcGhpY3NMYXllcjo6c2V0
Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRyZW4pCit7CisgICAg
Ym9vbCBvayA9IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuKGNoaWxkcmVuKTsKKyAgICBpZiAo
b2spCisgICAgICAgIG5vdGlmeUNoYW5nZSgpOworICAgIHJldHVybiBvazsKK30KKwordm9pZCBX
ZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZChHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBH
cmFwaGljc0xheWVyOjphZGRDaGlsZChsYXllcik7CisgICAgbm90aWZ5Q2hhbmdlKCk7Cit9CisK
K3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqIGxh
eWVyLCBpbnQgaW5kZXgpCit7CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KGxh
eWVyLCBpbmRleCk7CisgICAgbm90aWZ5Q2hhbmdlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6YWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciog
c2libGluZykKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEFib3ZlKGxheWVyLCBzaWJs
aW5nKTsKKyAgICBub3RpZnlDaGFuZ2UoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjph
ZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5n
KQoreworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3cobGF5ZXIsIHNpYmxpbmcpOwor
ICAgIG5vdGlmeUNoYW5nZSgpOworfQorCitib29sIFdlYkdyYXBoaWNzTGF5ZXI6OnJlcGxhY2VD
aGlsZChHcmFwaGljc0xheWVyKiBvbGRDaGlsZCwgR3JhcGhpY3NMYXllciogbmV3Q2hpbGQpCit7
CisgICAgYm9vbCBvayA9IEdyYXBoaWNzTGF5ZXI6OnJlcGxhY2VDaGlsZChvbGRDaGlsZCwgbmV3
Q2hpbGQpOworCisgICAgaWYgKG9rKQorICAgICAgICBub3RpZnlDaGFuZ2UoKTsKKyAgICByZXR1
cm4gb2s7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpCit7
CisgICAgR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIG5vdGlmeUNoYW5n
ZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0
UG9pbnQmIHApCit7CisgICAgaWYgKHBvc2l0aW9uKCkgPT0gcCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24ocCk7CisgICAgbm90aWZ5Q2hhbmdlKCk7
Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQ
b2ludDNEJiBwKQoreworICAgIGlmIChhbmNob3JQb2ludCgpID09IHApCisgICAgICAgIHJldHVy
bjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEFuY2hvclBvaW50KHApOworICAgIG5vdGlmeUNo
YW5nZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFNpemUoY29uc3QgRmxvYXRT
aXplJiBzaXplKQoreworICAgIGlmICh0aGlzLT5zaXplKCkgPT0gc2l6ZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0U2l6ZShzaXplKTsKKyAgICBzZXROZWVkc0Rp
c3BsYXkoKTsKKyAgICBub3RpZnlDaGFuZ2UoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVy
OjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCit7CisgICAgaWYg
KHRyYW5zZm9ybSgpID09IHQpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6
OnNldFRyYW5zZm9ybSh0KTsKKyAgICBub3RpZnlDaGFuZ2UoKTsKK30KKwordm9pZCBXZWJHcmFw
aGljc0xheWVyOjpzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgdCkKK3sKKyAgICBpZiAoY2hpbGRyZW5UcmFuc2Zvcm0oKSA9PSB0KQorICAgICAgICByZXR1
cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlblRyYW5zZm9ybSh0KTsKKyAgICBu
b3RpZnlDaGFuZ2UoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMz
RChib29sIGIpCit7CisgICAgaWYgKHByZXNlcnZlczNEKCkgPT0gYikKKyAgICAgICAgcmV0dXJu
OworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0QoYik7CisgICAgbm90aWZ5Q2hh
bmdlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0TWFza3NUb0JvdW5kcyhib29s
IGIpCit7CisgICAgaWYgKG1hc2tzVG9Cb3VuZHMoKSA9PSBiKQorICAgICAgICByZXR1cm47Cisg
ICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza3NUb0JvdW5kcyhiKTsKKyAgICBub3RpZnlDaGFuZ2Uo
KTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXREcmF3c0NvbnRlbnQoYm9vbCBiKQor
eworICAgIGlmIChkcmF3c0NvbnRlbnQoKSA9PSBiKQorICAgICAgICByZXR1cm47CisgICAgR3Jh
cGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50KGIpOworCisgICAgaWYgKGIpCisgICAgICAgIHNl
dE5lZWRzRGlzcGxheSgpOworICAgIG5vdGlmeUNoYW5nZSgpOworfQorCit2b2lkIFdlYkdyYXBo
aWNzTGF5ZXI6OnNldENvbnRlbnRzT3BhcXVlKGJvb2wgYikKK3sKKyAgICBpZiAoY29udGVudHNP
cGFxdWUoKSA9PSBiKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29u
dGVudHNPcGFxdWUoYik7CisgICAgbm90aWZ5Q2hhbmdlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhp
Y3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wgYikKK3sKKyAgICBpZiAoYmFja2Zh
Y2VWaXNpYmlsaXR5KCkgPT0gYikKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXll
cjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGIpOworICAgIG5vdGlmeUNoYW5nZSgpOworfQorCit2
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBp
ZiAodGhpcy0+b3BhY2l0eSgpID09IG9wYWNpdHkpCisgICAgICAgIHJldHVybjsKKworICAgIEdy
YXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkob3BhY2l0eSk7CisgICAgbm90aWZ5Q2hhbmdlKCk7Cit9
CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3Qm
IHIpCit7CisgICAgaWYgKGNvbnRlbnRzUmVjdCgpID09IHIpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAobV9pbWFnZSkKKyAgICAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CisKKyAgICBHcmFwaGlj
c0xheWVyOjpzZXRDb250ZW50c1JlY3Qocik7CisgICAgbm90aWZ5Q2hhbmdlKCk7Cit9CisKK3Zv
aWQgV2ViR3JhcGhpY3NMYXllcjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChkb3VibGUgdGltZSkK
K3sKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5ub3RpZnlBbmltYXRpb25T
dGFydGVkKHRoaXMsIHRpbWUpOworfQorCisvLyBXZSBwdXQgdGhlc2Ugc3R1YiBpbXBsZW1lbnRh
dGlvbnMgaGVyZSBmb3Igd2hlbiB3ZSBpbXBsZW1lbnQgYWNjZWxlcmF0ZWQgY3Jvc3MtcHJvY2Vz
cyBhbmltYXRpb25zLgorYm9vbCBXZWJHcmFwaGljc0xheWVyOjphZGRBbmltYXRpb24oY29uc3Qg
S2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29u
c3QgQW5pbWF0aW9uKiBhbmltLCBjb25zdCBTdHJpbmcmIGtleWZyYW1lc05hbWUsIGRvdWJsZSB0
aW1lT2Zmc2V0KQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0
aW1lT2Zmc2V0KQoreworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnJlbW92ZUFuaW1hdGlv
bihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpCit7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKK3sKKyAgICBpZiAoaW1hZ2Ug
PT0gbV9pbWFnZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbWFnZSA9IGltYWdl
OworICAgIHNldE5lZWRzRGlzcGxheSgpOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRz
VG9JbWFnZShpbWFnZSk7CisgICAgbm90aWZ5Q2hhbmdlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhp
Y3NMYXllcjo6c2V0TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIEdyYXBo
aWNzTGF5ZXI6OnNldE1hc2tMYXllcihsYXllcik7CisgICAgbm90aWZ5Q2hhbmdlKCk7Cit9CisK
K3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXll
ciogbGF5ZXIpCit7CisgICAgaWYgKGxheWVyID09IHJlcGxpY2FMYXllcigpKQorICAgICAgICBy
ZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIobGF5ZXIpOwor
ICAgIG5vdGlmeUNoYW5nZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldE5lZWRz
RGlzcGxheSgpCit7CisgICAgbV9uZWVkc0Rpc3BsYXkgPSB0cnVlOworICAgIG5vdGlmeUNoYW5n
ZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgbV9uZWVkc0Rpc3BsYXlSZWN0LnVuaXRlKHJl
Y3QpOworICAgIG5vdGlmeUNoYW5nZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNl
dENvbnRlbnRzTmVlZHNEaXNwbGF5KCkKK3sKKyAgICBzZXROZWVkc0Rpc3BsYXkoKTsKK30KKwor
V2ViTGF5ZXJJRCBXZWJHcmFwaGljc0xheWVyOjppZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
bGF5ZXJJbmZvLmlkOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmRpZFN5bmNocm9uaXpl
KCkKK3sKKyAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOworICAgIG1fbW9kaWZpZWQgPSBmYWxz
ZTsKKyAgICBtX25lZWRzRGlzcGxheVJlY3QgPSBGbG9hdFJlY3QoKTsKKyAgICBpZiAobV9oYXNQ
ZW5kaW5nQW5pbWF0aW9ucykKKyAgICAgICAgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChXVEY6OmN1
cnJlbnRUaW1lKCkpOworICAgIG1faGFzUGVuZGluZ0FuaW1hdGlvbnMgPSBmYWxzZTsKK30KKwor
Y29uc3QgV2ViTGF5ZXJJbmZvJiBXZWJHcmFwaGljc0xheWVyOjpsYXllckluZm8oKSBjb25zdAor
eworICAgIHJldHVybiBtX2xheWVySW5mbzsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpz
eW5jQ29tcG9zaXRpbmdTdGF0ZSgpCit7CisgICAgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlz
TGF5ZXJPbmx5KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUo
KTsgKytpKQorICAgICAgICBjaGlsZHJlbigpW2ldLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOwor
ICAgIGlmIChyZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgcmVwbGljYUxheWVyKCktPnN5bmNDb21w
b3NpdGluZ1N0YXRlKCk7CisgICAgaWYgKG1hc2tMYXllcigpKQorICAgICAgICBtYXNrTGF5ZXIo
KS0+c3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKK30KKworV2ViR3JhcGhpY3NMYXllciogdG9XZWJH
cmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxXZWJHcmFwaGljc0xheWVyKj4obGF5ZXIpOworfQorCitGbG9hdFJlY3QgV2ViR3JhcGhp
Y3NMYXllcjo6bmVlZHNEaXNwbGF5UmVjdCgpIGNvbnN0Cit7CisgICAgRmxvYXRSZWN0IHJlY3Qg
PSBGbG9hdFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSk7CisgICAg
aWYgKCFtX25lZWRzRGlzcGxheSkKKyAgICAgICAgcmVjdC5pbnRlcnNlY3QobV9uZWVkc0Rpc3Bs
YXlSZWN0KTsKKyAgICByZXR1cm4gcmVjdDsKK30KKworVmVjdG9yPFdlYktpdDo6V2ViTGF5ZXJJ
RD4gV2ViR3JhcGhpY3NMYXllcjo6dGFrZUxheWVyc1RvRGVsZXRlKCkKK3sKKyAgICBWZWN0b3I8
V2ViS2l0OjpXZWJMYXllcklEPiBsYXllcnMgPSBkZWxldGVkTGF5ZXJJRHMoKTsKKyAgICBkZWxl
dGVkTGF5ZXJJRHMoKS5jbGVhcigpOworICAgIHJldHVybiBsYXllcnM7Cit9CisKK3ZvaWQgV2Vi
R3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKK3sK
KyAgICBtX2xheWVySW5mby5uYW1lID0gbmFtZSgpOworICAgIG1fbGF5ZXJJbmZvLmFuY2hvclBv
aW50ID0gYW5jaG9yUG9pbnQoKTsKKyAgICBtX2xheWVySW5mby5iYWNrZmFjZVZpc2libGUgPSBi
YWNrZmFjZVZpc2liaWxpdHkoKTsKKyAgICBtX2xheWVySW5mby5jaGlsZHJlblRyYW5zZm9ybSA9
IGNoaWxkcmVuVHJhbnNmb3JtKCk7CisgICAgbV9sYXllckluZm8uY29udGVudHNPcGFxdWUgPSBj
b250ZW50c09wYXF1ZSgpOworICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzUmVjdCA9IGNvbnRlbnRz
UmVjdCgpOworICAgIG1fbGF5ZXJJbmZvLmRyYXdzQ29udGVudCA9IGRyYXdzQ29udGVudCgpOwor
ICAgIG1fbGF5ZXJJbmZvLm1hc2sgPSB0b1dlYkxheWVySUQobWFza0xheWVyKCkpOworICAgIG1f
bGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMgPSBtYXNrc1RvQm91bmRzKCk7CisgICAgbV9sYXllcklu
Zm8ub3BhY2l0eSA9IG9wYWNpdHkoKTsKKyAgICBtX2xheWVySW5mby5wYXJlbnQgPSB0b1dlYkxh
eWVySUQocGFyZW50KCkpOworICAgIG1fbGF5ZXJJbmZvLnBvcyA9IHBvc2l0aW9uKCk7CisgICAg
bV9sYXllckluZm8ucHJlc2VydmVzM0QgPSBwcmVzZXJ2ZXMzRCgpOworICAgIG1fbGF5ZXJJbmZv
LnJlcGxpY2EgPSB0b1dlYkxheWVySUQocmVwbGljYUxheWVyKCkpOworICAgIG1fbGF5ZXJJbmZv
LnNpemUgPSBGbG9hdFNpemUoc2l6ZSgpLndpZHRoKCkgKiBtX2NvbnRlbnRTY2FsZSwgc2l6ZSgp
LmhlaWdodCgpICogbV9jb250ZW50U2NhbGUpOworICAgIG1fbGF5ZXJJbmZvLnRyYW5zZm9ybSA9
IHRyYW5zZm9ybSgpOworICAgIG1fY29udGVudE5lZWRzRGlzcGxheSA9IGZhbHNlOworICAgIG1f
bGF5ZXJJbmZvLmNoaWxkcmVuLmNsZWFyKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fbGF5ZXJJbmZvLmNoaWxkcmVuLmFw
cGVuZCh0b1dlYkxheWVySUQoY2hpbGRyZW4oKVtpXSkpOworfQorCitzdGF0aWMgVmVjdG9yPEZs
b2F0UmVjdD4gZGl2aWRlSW50b1RpbGVzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBW
ZWN0b3I8RmxvYXRSZWN0PiB0aWxlczsKKyAgICBmb3IgKGZsb2F0IHkgPSByZWN0LnkoKTsgeSA8
IHJlY3QubWF4WSgpOyB5ICs9IGdUaWxlRGltZW5zaW9uKSB7CisgICAgICAgIGZvciAoZmxvYXQg
eCA9IHJlY3QueCgpOyB4IDwgcmVjdC5tYXhYKCk7IHggKz0gZ1RpbGVEaW1lbnNpb24pIHsKKyAg
ICAgICAgICAgIEZsb2F0UmVjdCB0aWxlKHgsIHksIGdUaWxlRGltZW5zaW9uLCBnVGlsZURpbWVu
c2lvbik7CisgICAgICAgICAgICB0aWxlLmludGVyc2VjdChyZWN0KTsKKyAgICAgICAgICAgIHRp
bGVzLmFwcGVuZCh0aWxlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdGlsZXM7Cit9
CisKK3N0YXRpYyB2b2lkIGNvbGxlY3RDb21wb3NpdGluZ0luZm9Gb3JUaGlzTGF5ZXIoR3JhcGhp
Y3NMYXllciogbGF5ZXIsIFdlYkxheWVyVHJlZUluZm8mIG91dEluZm8sIFZlY3RvcjxXZWJHcmFw
aGljc0xheWVyKj4mIG91dExheWVycykKK3sKKyAgICBXZWJHcmFwaGljc0xheWVyKiBsYXllciA9
IHRvV2ViR3JhcGhpY3NMYXllcihsYXllcik7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0
dXJuOworICAgIGlmICghbGF5ZXItPmlzTW9kaWZpZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgb3V0TGF5ZXJzLmFwcGVuZChsYXllcik7CisgICAgb3V0SW5mby5sYXllcnMuYXBwZW5kKGxh
eWVyLT5sYXllckluZm8oKSk7CisKKyAgICBXZWJMYXllckluZm8mIGxheWVySW5mbyA9IG91dElu
Zm8ubGF5ZXJzW291dEluZm8ubGF5ZXJzLnNpemUoKSAtIDFdOworICAgIGlmIChsYXllci0+aW1h
Z2UoKSkKKyAgICAgICAgbGF5ZXJJbmZvLmRyYXdzQ29udGVudCA9IHRydWU7Cit9CisKK3N0YXRp
YyB2b2lkIGNvbGxlY3RDb21wb3NpdGluZ0luZm9SZWN1cnNpdmVseShHcmFwaGljc0xheWVyKiBy
b290TGF5ZXIsIFdlYkxheWVyVHJlZUluZm8mIG91dEluZm8sIFZlY3RvcjxXZWJHcmFwaGljc0xh
eWVyKj4mIG91dExheWVycykKK3sKKyAgICBpZiAoIXJvb3RMYXllcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgY29sbGVjdENvbXBvc2l0aW5nSW5mb0ZvclRoaXNMYXllcihyb290TGF5ZXIsIG91
dEluZm8sIG91dExheWVycyk7CisgICAgY29sbGVjdENvbXBvc2l0aW5nSW5mb0ZvclRoaXNMYXll
cihyb290TGF5ZXItPm1hc2tMYXllcigpLCBvdXRJbmZvLCBvdXRMYXllcnMpOworICAgIGNvbGxl
Y3RDb21wb3NpdGluZ0luZm9SZWN1cnNpdmVseShyb290TGF5ZXItPnJlcGxpY2FMYXllcigpLCBv
dXRJbmZvLCBvdXRMYXllcnMpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290TGF5
ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGNvbGxlY3RDb21wb3NpdGluZ0lu
Zm9SZWN1cnNpdmVseShyb290TGF5ZXItPmNoaWxkcmVuKClbaV0sIG91dEluZm8sIG91dExheWVy
cyk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2VuZExheWVyc1RvVUlQcm9jZXNzKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllciwgV2ViUGFnZSogd2ViUGFnZSkKK3sKKyAg
ICB3ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgpOworICAgIHdlYlBhZ2UtPmNvcmVQYWdlKCktPm1h
aW5GcmFtZSgpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVz
KCk7CisgICAgV2ViTGF5ZXJUcmVlSW5mbyBjb21wb3NpdGluZ0luZm87CisgICAgY29tcG9zaXRp
bmdJbmZvLnJvb3RMYXllcklEID0gcm9vdExheWVyID8gdG9XZWJHcmFwaGljc0xheWVyKHJvb3RM
YXllciktPmlkKCkgOiAwOworICAgIGNvbXBvc2l0aW5nSW5mby5jb250ZW50U2NhbGUgPSAxLjA7
CisgICAgY29tcG9zaXRpbmdJbmZvLmRlbGV0ZWRMYXllcklEcyA9IFdlYkdyYXBoaWNzTGF5ZXI6
OnRha2VMYXllcnNUb0RlbGV0ZSgpOworICAgIFZlY3RvcjxXZWJHcmFwaGljc0xheWVyKj4gbGF5
ZXJzOworICAgIGlmIChyb290TGF5ZXIpCisgICAgICAgIGNvbGxlY3RDb21wb3NpdGluZ0luZm9S
ZWN1cnNpdmVseShyb290TGF5ZXIsIGNvbXBvc2l0aW5nSW5mbywgbGF5ZXJzKTsKKworICAgIGlm
IChjb21wb3NpdGluZ0luZm8uZGVsZXRlZExheWVySURzLmlzRW1wdHkoKSAmJiBjb21wb3NpdGlu
Z0luZm8ubGF5ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6U3luY0NvbXBvc2l0aW5nTGF5ZXJzKGNv
bXBvc2l0aW5nSW5mbykpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllcnMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllcnNbaV07
CisgICAgICAgIEZsb2F0UmVjdCB1cGRhdGVSZWN0ID0gbGF5ZXItPm5lZWRzRGlzcGxheVJlY3Qo
KTsKKworICAgICAgICBsYXllci0+ZGlkU3luY2hyb25pemUoKTsKKworICAgICAgICBpZiAodXBk
YXRlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBSZWZQ
dHI8SW1hZ2U+IGRpcmVjdEltYWdlID0gbGF5ZXItPmltYWdlKCk7CisgICAgICAgIGlmIChkaXJl
Y3RJbWFnZSkKKyAgICAgICAgICAgIHVwZGF0ZVJlY3QgPSBsYXllci0+Y29udGVudHNSZWN0KCk7
CisgICAgICAgIGVsc2UgaWYgKCFsYXllci0+ZHJhd3NDb250ZW50KCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBWZWN0b3I8RmxvYXRSZWN0PiB0aWxlUmVjdHMgPSBkaXZpZGVJ
bnRvVGlsZXModXBkYXRlUmVjdCk7CisgICAgICAgIGZvciAoc2l6ZV90IHRpbGVJbmRleCA9IDA7
IHRpbGVJbmRleCA8IHRpbGVSZWN0cy5zaXplKCk7ICsrdGlsZUluZGV4KSB7CisgICAgICAgICAg
ICBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0ID0gdGlsZVJlY3RzW3RpbGVJbmRleF07CisgICAg
ICAgICAgICBJbnRSZWN0IGVuY2xvc2luZ1VwZGF0ZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHRp
bGVSZWN0KTsKKworICAgICAgICAgICAgV2ViTGF5ZXJVcGRhdGVJbmZvIGNodW5rKGVuY2xvc2lu
Z1VwZGF0ZVJlY3QpOworICAgICAgICAgICAgY2h1bmsubGF5ZXJJRCA9IHVpbnQzMl90KGxheWVy
LT5pZCgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNo
YXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGNodW5rLnJlY3Quc2l6ZSgpLCBTaGFyZWFi
bGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOworICAgICAgICAgICAgaWYgKCFiaXRtYXApCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoIWJpdG1hcC0+Y3JlYXRlSGFu
ZGxlKGNodW5rLmJpdG1hcEhhbmRsZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisjaWYg
UExBVEZPUk0oUVQpCisgICAgICAgICAgICBRSW1hZ2UgdGlsZUltYWdlID0gYml0bWFwLT5jcmVh
dGVRSW1hZ2UoKTsKKyAgICAgICAgICAgIHRpbGVJbWFnZS5maWxsKDApOworICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnRpbGVJbWFnZSk7CisgICAgICAg
ICAgICAgICAgcGFpbnRlci50cmFuc2xhdGUoLXRpbGVSZWN0LngoKSwgLXRpbGVSZWN0LnkoKSk7
CisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoJnBhaW50ZXIpOworICAg
ICAgICAgICAgICAgIGlmIChkaXJlY3RJbWFnZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGV4
dC5kcmF3SW1hZ2UoZGlyZWN0SW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGxheWVy
LT5jb250ZW50c1JlY3QoKSwgRmxvYXRSZWN0KDAsIDAsIGRpcmVjdEltYWdlLT53aWR0aCgpLCBk
aXJlY3RJbWFnZS0+aGVpZ2h0KCkpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIGxheWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBlbmNs
b3NpbmdVcGRhdGVSZWN0KTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgICAgICB3
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpVcGRhdGVDb21wb3NpdGlu
Z0xheWVyQ29udGVudChjaHVuaykpOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgUGFz
c093blB0cjxHcmFwaGljc0xheWVyPiBjcmVhdGVXZWJHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5
ZXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdlYkdyYXBoaWNz
TGF5ZXIoY2xpZW50KSk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6aW5pdEZhY3Rvcnko
KQoreworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEdyYXBoaWNzTGF5ZXJGYWN0b3J5KGNyZWF0ZVdl
YkdyYXBoaWNzTGF5ZXIpOworfQorCit9CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXll
ci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJHcmFwaGljc0xheWVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEzIEBACisv
KgorIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworCisjaWZuZGVmIFdlYkdyYXBo
aWNzTGF5ZXJfaAorI2RlZmluZSBXZWJHcmFwaGljc0xheWVyX2gKKworI2luY2x1ZGUgIkZsb2F0
UG9pbnQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJJbWFnZS5o
IgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJSdW5Mb29wLmgiCisjaW5jbHVkZSAi
U2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNp
bmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorCisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCituYW1lc3BhY2UgV2ViS2l0IHsKK2Ns
YXNzIFdlYlBhZ2U7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2ViR3JhcGhp
Y3NMYXllciA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyIHsKK3B1YmxpYzoKKyAgICBX
ZWJHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqKTsKKyAgICB2aXJ0dWFsIH5XZWJH
cmFwaGljc0xheWVyKCk7CisKKyAgICAvLyBSZWltcGxlbWVudGF0aW9ucyBmcm9tIEdyYXBoaWNz
TGF5ZXIuaC4KKyAgICBib29sIHNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVy
Kj4mKTsKKyAgICB2b2lkIGFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2b2lkIGFkZENo
aWxkQXRJbmRleChHcmFwaGljc0xheWVyKiwgaW50KTsKKyAgICB2b2lkIGFkZENoaWxkQWJvdmUo
R3JhcGhpY3NMYXllciosIEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2b2lkIGFkZENoaWxkQmVsb3co
R3JhcGhpY3NMYXllciosIEdyYXBoaWNzTGF5ZXIqKTsKKyAgICBib29sIHJlcGxhY2VDaGlsZChH
cmFwaGljc0xheWVyKiwgR3JhcGhpY3NMYXllciopOworICAgIHZvaWQgcmVtb3ZlRnJvbVBhcmVu
dCgpOworICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZvaWQg
c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJik7CisgICAgdm9pZCBzZXRTaXplKGNv
bnN0IEZsb2F0U2l6ZSYpOworICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4Jik7CisgICAgdm9pZCBzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYpOworICAgIHZvaWQgc2V0UHJlc2VydmVzM0QoYm9vbCk7CisgICAgdm9p
ZCBzZXRNYXNrc1RvQm91bmRzKGJvb2wpOworICAgIHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wp
OworICAgIHZvaWQgc2V0Q29udGVudHNPcGFxdWUoYm9vbCk7CisgICAgdm9pZCBzZXRCYWNrZmFj
ZVZpc2liaWxpdHkoYm9vbCk7CisgICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0KTsKKyAgICB2b2lk
IHNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgYm9vbCBhZGRBbmltYXRpb24o
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgQW5pbWF0aW9u
KiwgY29uc3QgU3RyaW5nJiwgZG91YmxlKTsKKyAgICB2b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0
IFN0cmluZyYsIGRvdWJsZSk7CisgICAgdm9pZCByZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5n
Jik7CisgICAgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKTsKKyAgICB2b2lkIHNldE1h
c2tMYXllcihHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBzZXRSZXBsaWNhdGVkQnlMYXllcihH
cmFwaGljc0xheWVyKik7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICB2b2lkIHNl
dE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHNldENvbnRl
bnRzTmVlZHNEaXNwbGF5KCk7CisgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRl
KCk7CisgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25s
eSgpOworCisgICAgV2ViS2l0OjpXZWJMYXllcklEIGlkKCkgY29uc3Q7CisgICAgY29uc3QgV2Vi
S2l0OjpXZWJMYXllckluZm8mIGxheWVySW5mbygpIGNvbnN0OworICAgIEZsb2F0UmVjdCBuZWVk
c0Rpc3BsYXlSZWN0KCkgY29uc3Q7CisgICAgc3RhdGljIFZlY3RvcjxXZWJLaXQ6OldlYkxheWVy
SUQ+IHRha2VMYXllcnNUb0RlbGV0ZSgpOworICAgIHN0YXRpYyBXZWJHcmFwaGljc0xheWVyKiBs
YXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklEKTsKKyAgICBib29sIGlzTW9kaWZpZWQoKSBjb25z
dCB7IHJldHVybiBtX21vZGlmaWVkOyB9CisgICAgdm9pZCBkaWRTeW5jaHJvbml6ZSgpOworICAg
IEltYWdlKiBpbWFnZSgpIHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KKyAgICB2b2lkIG5vdGlm
eUFuaW1hdGlvblN0YXJ0ZWQoZG91YmxlKTsKKworICAgIHN0YXRpYyB2b2lkIGluaXRGYWN0b3J5
KCk7CisgICAgc3RhdGljIHZvaWQgc2VuZExheWVyc1RvVUlQcm9jZXNzKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqLCBXZWJLaXQ6OldlYlBhZ2UqKTsKKworcHJpdmF0ZToKKyAgICBXZWJLaXQ6Oldl
YkxheWVySW5mbyBtX2xheWVySW5mbzsKKyAgICBSZWZQdHI8V2ViS2l0OjpTaGFyZWFibGVCaXRt
YXA+IG1fYmFja2luZ1N0b3JlOworICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKKyAgICBGbG9h
dFJlY3QgbV9uZWVkc0Rpc3BsYXlSZWN0OworICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXk7CisgICAg
Ym9vbCBtX21vZGlmaWVkOworICAgIGJvb2wgbV9jb250ZW50TmVlZHNEaXNwbGF5OworICAgIGJv
b2wgbV9oYXNQZW5kaW5nQW5pbWF0aW9uczsKKworICAgIGZsb2F0IG1fY29udGVudFNjYWxlOwor
CisgICAgdm9pZCBub3RpZnlDaGFuZ2UoKTsKK307CisKK1dlYkdyYXBoaWNzTGF5ZXIqIHRvV2Vi
R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKik7CisKK30KKyNlbmRpZgorCisjZW5kaWYgLy8g
V2ViR3JhcGhpY3NMYXllcl9ICisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96963</attachid>
            <date>2011-06-13 09:43:52 -0700</date>
            <delta_ts>2011-06-13 11:09:57 -0700</delta_ts>
            <desc> Patch 1: WebLayerTreeInfo</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>7396</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4NjQzKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDYtMTIgIE5vJ2FtIFJv
c2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIEltcGxlbWVudCBhY2NlbGVyYXRlZCBj
b21wb3NpdGluZyBvbiBXSzIgUXQgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTY5MzUKKworICAgICAgICBBZGRlZCBXZWJMYXllclRyZWVJbmZv
OiBhIHNldCBvZiBzdHJ1Y3R1cmVzIHRoYXQgY2FuIHNlcmlhbGl6ZSBhIHRyZWUgb2YgR3JhcGhp
Y3NMYXllcnMKKyAgICAgICAgYWNyb3NzIHRvIHRoZSBVSSBwcm9jZXNzLgorCisgICAgICAgIFRv
Z2V0aGVyIHdpdGggVmlhdGNoZXNsYXYgT3N0YXBlbmtvLgorCisgICAgICAgICogU2NyaXB0cy93
ZWJraXQyL21lc3NhZ2VzLnB5OgorICAgICAgICAqIFNoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNw
cDogQWRkZWQuCisgICAgICAgICogU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaDogQWRkZWQuCisK
IDIwMTEtMDYtMTMgIEV1bm1pIExlZSAgPGV1bm1pMTUubGVlQHNhbXN1bmcuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpJbmRleDogU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw4OSBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwor
I2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKKworI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5o
IgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorCit1c2luZyBuYW1lc3BhY2Ug
Q29yZUlQQzsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViTGF5ZXJJbmZvOjplbmNv
ZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAoreworICAgIC8vIFdl
IGhhdmUgdG8gZGl2aWRlIGl0IHRvIHNldmVyYWwgbGluZXMsIGJlY2F1c2UgQ29yZUlQQzo6SW4v
T3V0IHRha2VzIGEgbWF4aW11bSBvZiAxMCBhcmd1bWVudHMuCisgICAgZW5jb2Rlci0+ZW5jb2Rl
KENvcmVJUEM6OkluKGlkLCBuYW1lLCBwYXJlbnQsIGNoaWxkcmVuLCBmbGFncywgcmVwbGljYSwg
bWFzaykpOworICAgIGVuY29kZXItPmVuY29kZShDb3JlSVBDOjpJbihwb3MsIHNpemUsIHRyYW5z
Zm9ybSwgb3BhY2l0eSwgYW5jaG9yUG9pbnQsIGNoaWxkcmVuVHJhbnNmb3JtLCBjb250ZW50c1Jl
Y3QpKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUoaW1hZ2VCYWNraW5nU3RvcmUgPyBpbWFnZUJhY2tp
bmdTdG9yZS0+c2l6ZSgpIDogSW50U2l6ZSgpKTsKKworICAgIGlmICghaW1hZ2VCYWNraW5nU3Rv
cmUpCisgICAgICAgIHJldHVybjsKKworICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGltYWdl
SGFuZGxlOworICAgIGlmIChpbWFnZUJhY2tpbmdTdG9yZS0+Y3JlYXRlSGFuZGxlKGltYWdlSGFu
ZGxlKSkKKyAgICAgICAgaW1hZ2VIYW5kbGUuZW5jb2RlKGVuY29kZXIpOworfQorCitib29sIFdl
YkxheWVySW5mbzo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgV2Vi
TGF5ZXJJbmZvJiBpbmZvKQoreworICAgIC8vIFdlIGhhdmUgdG8gZGl2aWRlIGl0IHRvIHNldmVy
YWwgbGluZXMsIGJlY2F1c2UgQ29yZUlQQzo6SW4vT3V0IHRha2VzIGEgbWF4aW11bSBvZiAxMCBh
cmd1bWVudHMuCisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGluZm8uaWQs
IGluZm8ubmFtZSwgaW5mby5wYXJlbnQsIGluZm8uY2hpbGRyZW4sIGluZm8uZmxhZ3MsIGluZm8u
cmVwbGljYSwgaW5mby5tYXNrKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRl
Y29kZXItPmRlY29kZShDb3JlSVBDOjpPdXQoaW5mby5wb3MsIGluZm8uc2l6ZSwgaW5mby50cmFu
c2Zvcm0sIGluZm8ub3BhY2l0eSwgaW5mby5hbmNob3JQb2ludCwgaW5mby5jaGlsZHJlblRyYW5z
Zm9ybSwgaW5mby5jb250ZW50c1JlY3QpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
SW50U2l6ZSBpbWFnZUJhY2tpbmdTdG9yZVNpemU7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUo
aW1hZ2VCYWNraW5nU3RvcmVTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChp
bWFnZUJhY2tpbmdTdG9yZVNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGltYWdlSGFuZGxlOworICAgIGlmIChTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZTo6ZGVjb2RlKGRlY29kZXIsIGltYWdlSGFuZGxlKSkKKyAgICAgICAg
aW5mby5pbWFnZUJhY2tpbmdTdG9yZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGltYWdlSGFu
ZGxlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJMYXllclRyZWVJbmZvOjplbmNv
ZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29k
ZXItPmVuY29kZShDb3JlSVBDOjpJbihsYXllcnMsIHJvb3RMYXllcklELCBkZWxldGVkTGF5ZXJJ
RHMsIGNvbnRlbnRTY2FsZSkpOworfQorCitib29sIFdlYkxheWVyVHJlZUluZm86OmRlY29kZShD
b3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFdlYkxheWVyVHJlZUluZm8mIGluZm8p
Cit7CisgICAgcmV0dXJuIGRlY29kZXItPmRlY29kZShDb3JlSVBDOjpPdXQoaW5mby5sYXllcnMs
IGluZm8ucm9vdExheWVySUQsIGluZm8uZGVsZXRlZExheWVySURzLCBpbmZvLmNvbnRlbnRTY2Fs
ZSkpOworfQorCit2b2lkIFdlYkxheWVyVXBkYXRlSW5mbzo6ZW5jb2RlKENvcmVJUEM6OkFyZ3Vt
ZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyLT5lbmNvZGUoQ29yZUlQ
Qzo6SW4obGF5ZXJJRCwgcmVjdCwgYml0bWFwSGFuZGxlKSk7Cit9CisKK2Jvb2wgV2ViTGF5ZXJV
cGRhdGVJbmZvOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBXZWJM
YXllclVwZGF0ZUluZm8mIGluZm8pCit7CisgICAgcmV0dXJuIGRlY29kZXItPmRlY29kZShDb3Jl
SVBDOjpPdXQoaW5mby5sYXllcklELCBpbmZvLnJlY3QsIGluZm8uYml0bWFwSGFuZGxlKSk7Cit9
CisKK30KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUlu
Zm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5m
by5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUlu
Zm8uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5OCBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIw
MTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViTGF5ZXJUcmVlSW5mb19oCisjZGVmaW5lIFdl
YkxheWVyVHJlZUluZm9faAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisj
aW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCisjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgi
CisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3R5cGVkZWYgdWlu
dDMyX3QgV2ViTGF5ZXJJRDsKKworc3RydWN0IFdlYkxheWVyVXBkYXRlSW5mbyB7CisgICAgV2Vi
TGF5ZXJVcGRhdGVJbmZvKCkgeyB9CisgICAgV2ViTGF5ZXJVcGRhdGVJbmZvKGNvbnN0IEludFJl
Y3QmIHIpCisgICAgICAgIDogcmVjdChyKSB7IH0KKworICAgIFdlYkxheWVySUQgbGF5ZXJJRDsK
KyAgICBJbnRSZWN0IHJlY3Q7CisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgYml0bWFwSGFu
ZGxlOworCisgICAgdm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKikgY29uc3Q7
CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIFdlYkxh
eWVyVXBkYXRlSW5mbyYpOworfTsKKworc3RydWN0IFdlYkxheWVySW5mbyB7CisgICAgU3RyaW5n
IG5hbWU7CisgICAgV2ViTGF5ZXJJRCBpZDsKKyAgICBXZWJMYXllcklEIHBhcmVudDsKKyAgICBX
ZWJMYXllcklEIHJlcGxpY2E7CisgICAgV2ViTGF5ZXJJRCBtYXNrOworCisgICAgRmxvYXRQb2lu
dCBwb3M7CisgICAgRmxvYXRQb2ludDNEIGFuY2hvclBvaW50OworICAgIEZsb2F0U2l6ZSBzaXpl
OworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBjaGlsZHJlblRyYW5zZm9ybTsKKyAgICBJbnRSZWN0IGNvbnRlbnRzUmVjdDsKKyAg
ICBmbG9hdCBvcGFjaXR5OworCisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAg
ICAgICAgYm9vbCBjb250ZW50c09wYXF1ZSA6IDE7CisgICAgICAgICAgICBib29sIGRyYXdzQ29u
dGVudCA6IDE7CisgICAgICAgICAgICBib29sIGJhY2tmYWNlVmlzaWJsZSA6IDE7CisgICAgICAg
ICAgICBib29sIG1hc2tzVG9Cb3VuZHMgOiAxOworICAgICAgICAgICAgYm9vbCBwcmVzZXJ2ZXMz
RCA6IDE7CisgICAgICAgICAgICBib29sIGNvbnRlbnROZWVkc0Rpc3BsYXkgOiAxOworICAgICAg
ICB9OworICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7CisgICAgfTsKKyAgICBWZWN0b3I8V2Vi
TGF5ZXJJRD4gY2hpbGRyZW47CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gaW1hZ2VCYWNr
aW5nU3RvcmU7CisKKyAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqKSBj
b25zdDsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwg
V2ViTGF5ZXJJbmZvJik7Cit9OworCitzdHJ1Y3QgV2ViTGF5ZXJUcmVlSW5mbyB7CisgICAgVmVj
dG9yPFdlYkxheWVySW5mbz4gbGF5ZXJzOworICAgIFZlY3RvcjxXZWJMYXllcklEPiBkZWxldGVk
TGF5ZXJJRHM7CisgICAgV2ViTGF5ZXJJRCByb290TGF5ZXJJRDsKKyAgICBmbG9hdCBjb250ZW50
U2NhbGU7CisKKyAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqKSBjb25z
dDsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwgV2Vi
TGF5ZXJUcmVlSW5mbyYpOworfTsKKworfQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorCisjZW5kaWYgLy8gV2ViTGF5ZXJUcmVlSW5mb19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96974</attachid>
            <date>2011-06-13 11:04:19 -0700</date>
            <delta_ts>2011-06-13 11:22:36 -0700</delta_ts>
            <desc>Patch 2: WebGraphicsLayer</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>37853</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4NjQzKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDYtMTIgIE5vJ2FtIFJv
c2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KKworICAgICAgICBbUXRdIEltcGxlbWVudCBh
Y2NlbGVyYXRlZCBjb21wb3NpdGluZyBvbiBXSzIgUXQgcG9ydAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY5MzUKKworICAgICAgICBBZGRlZCBXZWJH
cmFwaGljc0xheWVyLCBhIHN1YmNsYXNzIG9mIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIgdGhhdCBz
ZXJpYWxpemVzIHRoZSBzdGF0ZSBvZiB0aGUgbGF5ZXIKKyAgICAgICAgdHJlZSB0byB0aGUgVUkg
cHJvY2VzcyBXZWJMYXllclRyZWVJbmZvLgorICAgICAgICBGb3Igbm93IHRoaXMgcGF0Y2ggZG9l
c24ndCBzZXJpYWxpemUgdGhlIGFuaW1hdGlvbiBpbmZvcm1hdGlvbiwgYSBmZWF0dXJlIHRoYXQg
d2lsbCBiZSB1cHN0cmVhbWVkIGxhdGVyIG9uLgorCisgICAgICAgIFRvZ2V0aGVyIHdpdGggVmlh
dGNoZXNsYXYgT3N0YXBlbmtvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJHcmFwaGljc0xheWVyLmNwcDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmg6IEFkZGVkLgorCiAyMDExLTA2LTEzICBFdW5t
aSBMZWUgIDxldW5taTE1LmxlZUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBL
ZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViR3JhcGhpY3NMYXllci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAyNSBAQAor
LyoKKyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIldlYkdy
YXBoaWNzTGF5ZXIuaCIKKworI2luY2x1ZGUgIkFuaW1hdGlvbi5oIgorI2luY2x1ZGUgIkJhY2tp
bmdTdG9yZS5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJE
cmF3aW5nQXJlYVByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgor
I2luY2x1ZGUgInRleHQvQ1N0cmluZy5oIgorI2luY2x1ZGUgPEhhc2hNYXAuaD4KKyNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgZmxvYXQgZ1RpbGVEaW1lbnNpb24gPSAxMDI0
LjA7CisKK3N0YXRpYyBIYXNoTWFwPFdlYkxheWVySUQsIFdlYkdyYXBoaWNzTGF5ZXIqPiYgbGF5
ZXJCeUlETWFwKCkKK3sKKyAgICBzdGF0aWMgSGFzaE1hcDxXZWJMYXllcklELCBXZWJHcmFwaGlj
c0xheWVyKj4gZ2xvYmFsTWFwOworICAgIHJldHVybiBnbG9iYWxNYXA7Cit9CisKK1dlYkdyYXBo
aWNzTGF5ZXIqIFdlYkdyYXBoaWNzTGF5ZXI6OmxheWVyQnlJRChXZWJLaXQ6OldlYkxheWVySUQg
aWQpCit7CisgICAgSGFzaE1hcDxXZWJMYXllcklELCBXZWJHcmFwaGljc0xheWVyKj4mIHRhYmxl
ID0gbGF5ZXJCeUlETWFwKCk7CisgICAgSGFzaE1hcDxXZWJMYXllcklELCBXZWJHcmFwaGljc0xh
eWVyKj46Oml0ZXJhdG9yIGl0ID0gdGFibGUuZmluZChpZCk7CisgICAgaWYgKGl0ID09IHRhYmxl
LmVuZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaXQtPnNlY29uZDsKK30KKwor
c3RhdGljIFZlY3RvcjxXZWJMYXllcklEPiYgZGVsZXRlZExheWVySURzKCkKK3sKKyAgICBzdGF0
aWMgVmVjdG9yPFdlYkxheWVySUQ+IGxheWVyczsKKyAgICByZXR1cm4gbGF5ZXJzOworfQorCitz
dGF0aWMgV2ViTGF5ZXJJRCB0b1dlYkxheWVySUQoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7Cisg
ICAgcmV0dXJuIGxheWVyID8gdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+aWQoKSA6IDA7Cit9
CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6bm90aWZ5Q2hhbmdlKCkKK3sKKyAgICBtX21vZGlm
aWVkID0gdHJ1ZTsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5ub3RpZnlT
eW5jUmVxdWlyZWQodGhpcyk7Cit9CisKK1dlYkdyYXBoaWNzTGF5ZXI6OldlYkdyYXBoaWNzTGF5
ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQorICAgIDogR3JhcGhpY3NMYXllcihjbGll
bnQpCisgICAgLCBtX25lZWRzRGlzcGxheShmYWxzZSkKKyAgICAsIG1fbW9kaWZpZWQoZmFsc2Up
CisgICAgLCBtX2NvbnRlbnROZWVkc0Rpc3BsYXkoZmFsc2UpCisgICAgLCBtX2hhc1BlbmRpbmdB
bmltYXRpb25zKGZhbHNlKQorICAgICwgbV9jb250ZW50U2NhbGUoMS5mKQoreworICAgIC8vIFN0
YXJ0aW5nIGxheWVyIElEcyBmcm9tIDEwMDAsIHRvIGhlbHAgZGV0ZWN0IGZhdWx0eSBJRHMgZWFz
aWx5LgorICAgIHN0YXRpYyBXZWJMYXllcklEIHNJRCA9IDEwMDA7CisgICAgbV9sYXllckluZm8u
aWQgPSArK3NJRDsKKyAgICBsYXllckJ5SURNYXAoKS5hZGQoaWQoKSwgdGhpcyk7Cit9CisKK1dl
YkdyYXBoaWNzTGF5ZXI6On5XZWJHcmFwaGljc0xheWVyKCkKK3sKKyAgICBsYXllckJ5SURNYXAo
KS5yZW1vdmUoaWQoKSk7CisgICAgZGVsZXRlZExheWVySURzKCkuYXBwZW5kKGlkKCkpOworfQor
Citib29sIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGlj
c0xheWVyKj4mIGNoaWxkcmVuKQoreworICAgIGJvb2wgb2sgPSBHcmFwaGljc0xheWVyOjpzZXRD
aGlsZHJlbihjaGlsZHJlbik7CisgICAgaWYgKG9rKQorICAgICAgICBub3RpZnlDaGFuZ2UoKTsK
KyAgICByZXR1cm4gb2s7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoR3Jh
cGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQobGF5ZXIp
OworICAgIG5vdGlmeUNoYW5nZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmFkZENo
aWxkQXRJbmRleChHcmFwaGljc0xheWVyKiBsYXllciwgaW50IGluZGV4KQoreworICAgIEdyYXBo
aWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChsYXllciwgaW5kZXgpOworICAgIG5vdGlmeUNoYW5n
ZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUoR3JhcGhpY3NM
YXllciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpCit7CisgICAgR3JhcGhpY3NMYXll
cjo6YWRkQ2hpbGRBYm92ZShsYXllciwgc2libGluZyk7CisgICAgbm90aWZ5Q2hhbmdlKCk7Cit9
CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBs
YXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRD
aGlsZEJlbG93KGxheWVyLCBzaWJsaW5nKTsKKyAgICBub3RpZnlDaGFuZ2UoKTsKK30KKworYm9v
bCBXZWJHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQs
IEdyYXBoaWNzTGF5ZXIqIG5ld0NoaWxkKQoreworICAgIGJvb2wgb2sgPSBHcmFwaGljc0xheWVy
OjpyZXBsYWNlQ2hpbGQob2xkQ2hpbGQsIG5ld0NoaWxkKTsKKworICAgIGlmIChvaykKKyAgICAg
ICAgbm90aWZ5Q2hhbmdlKCk7CisgICAgcmV0dXJuIG9rOworfQorCit2b2lkIFdlYkdyYXBoaWNz
TGF5ZXI6OnJlbW92ZUZyb21QYXJlbnQoKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OnJlbW92ZUZy
b21QYXJlbnQoKTsKKyAgICBub3RpZnlDaGFuZ2UoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIGlmIChwb3NpdGlv
bigpID09IHApCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0
aW9uKHApOworICAgIG5vdGlmeUNoYW5nZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6
OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgcCkKK3sKKyAgICBpZiAoYW5jaG9y
UG9pbnQoKSA9PSBwKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRB
bmNob3JQb2ludChwKTsKKyAgICBub3RpZnlDaGFuZ2UoKTsKK30KKwordm9pZCBXZWJHcmFwaGlj
c0xheWVyOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAodGhpcy0+
c2l6ZSgpID09IHNpemUpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dFNpemUoc2l6ZSk7CisgICAgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgbm90aWZ5Q2hhbmdlKCk7
Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiB0KQoreworICAgIGlmICh0cmFuc2Zvcm0oKSA9PSB0KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0odCk7CisgICAgbm90aWZ5
Q2hhbmdlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zv
cm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCit7CisgICAgaWYgKGNoaWxkcmVuVHJh
bnNmb3JtKCkgPT0gdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0
Q2hpbGRyZW5UcmFuc2Zvcm0odCk7CisgICAgbm90aWZ5Q2hhbmdlKCk7Cit9CisKK3ZvaWQgV2Vi
R3JhcGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0QoYm9vbCBiKQoreworICAgIGlmIChwcmVzZXJ2
ZXMzRCgpID09IGIpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFBy
ZXNlcnZlczNEKGIpOworICAgIG5vdGlmeUNoYW5nZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNz
TGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHMoYm9vbCBiKQoreworICAgIGlmIChtYXNrc1RvQm91bmRz
KCkgPT0gYikKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tzVG9C
b3VuZHMoYik7CisgICAgbm90aWZ5Q2hhbmdlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXll
cjo6c2V0RHJhd3NDb250ZW50KGJvb2wgYikKK3sKKyAgICBpZiAoZHJhd3NDb250ZW50KCkgPT0g
YikKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29udGVudChi
KTsKKworICAgIGlmIChiKQorICAgICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBub3RpZnlD
aGFuZ2UoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09wYXF1ZShi
b29sIGIpCit7CisgICAgaWYgKGNvbnRlbnRzT3BhcXVlKCkgPT0gYikKKyAgICAgICAgcmV0dXJu
OworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3BhcXVlKGIpOworICAgIG5vdGlmeUNo
YW5nZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0
eShib29sIGIpCit7CisgICAgaWYgKGJhY2tmYWNlVmlzaWJpbGl0eSgpID09IGIpCisgICAgICAg
IHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eShiKTsK
KyAgICBub3RpZnlDaGFuZ2UoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRPcGFj
aXR5KGZsb2F0IG9wYWNpdHkpCit7CisgICAgaWYgKHRoaXMtPm9wYWNpdHkoKSA9PSBvcGFjaXR5
KQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRPcGFjaXR5KG9wYWNp
dHkpOworICAgIG5vdGlmeUNoYW5nZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNl
dENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByKQoreworICAgIGlmIChjb250ZW50c1JlY3Qo
KSA9PSByKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1faW1hZ2UpCisgICAgICAgIHNldE5l
ZWRzRGlzcGxheSgpOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KHIpOwor
ICAgIG5vdGlmeUNoYW5nZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6Om5vdGlmeUFu
aW1hdGlvblN0YXJ0ZWQoZG91YmxlIHRpbWUpCit7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAg
ICBjbGllbnQoKS0+bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCh0aGlzLCB0aW1lKTsKK30KKworLy8g
V2UgcHV0IHRoZXNlIHN0dWIgaW1wbGVtZW50YXRpb25zIGhlcmUgZm9yIHdoZW4gd2UgaW1wbGVt
ZW50IGFjY2VsZXJhdGVkIGNyb3NzLXByb2Nlc3MgYW5pbWF0aW9ucy4KK2Jvb2wgV2ViR3JhcGhp
Y3NMYXllcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3Qs
IGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbSwgY29uc3QgU3Ry
aW5nJiBrZXlmcmFtZXNOYW1lLCBkb3VibGUgdGltZU9mZnNldCkKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6cGF1c2VBbmltYXRpb24oY29uc3QgU3Ry
aW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKK3sKK30KKwordm9pZCBXZWJH
cmFwaGljc0xheWVyOjpyZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1l
KQoreworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZShJbWFn
ZSogaW1hZ2UpCit7CisgICAgaWYgKGltYWdlID09IG1faW1hZ2UuZ2V0KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1faW1hZ2UgPSBpbWFnZTsKKyAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKyAg
ICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UpOworICAgIG5vdGlmeUNo
YW5nZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihHcmFwaGlj
c0xheWVyKiBsYXllcikKK3sKKyAgICBHcmFwaGljc0xheWVyOjpzZXRNYXNrTGF5ZXIobGF5ZXIp
OworICAgIG5vdGlmeUNoYW5nZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFJl
cGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIGlmIChsYXllciA9
PSByZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dFJlcGxpY2F0ZWRCeUxheWVyKGxheWVyKTsKKyAgICBub3RpZnlDaGFuZ2UoKTsKK30KKwordm9p
ZCBXZWJHcmFwaGljc0xheWVyOjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAgIG1fbmVlZHNEaXNw
bGF5ID0gdHJ1ZTsKKyAgICBub3RpZnlDaGFuZ2UoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAg
IG1fbmVlZHNEaXNwbGF5UmVjdC51bml0ZShyZWN0KTsKKyAgICBub3RpZnlDaGFuZ2UoKTsKK30K
Kwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgpCit7Cisg
ICAgc2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKK1dlYkxheWVySUQgV2ViR3JhcGhpY3NMYXllcjo6
aWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVySW5mby5pZDsKK30KKwordm9pZCBXZWJH
cmFwaGljc0xheWVyOjpkaWRTeW5jaHJvbml6ZSgpCit7CisgICAgbV9uZWVkc0Rpc3BsYXkgPSBm
YWxzZTsKKyAgICBtX21vZGlmaWVkID0gZmFsc2U7CisgICAgbV9uZWVkc0Rpc3BsYXlSZWN0ID0g
RmxvYXRSZWN0KCk7CisgICAgaWYgKG1faGFzUGVuZGluZ0FuaW1hdGlvbnMpCisgICAgICAgIG5v
dGlmeUFuaW1hdGlvblN0YXJ0ZWQoV1RGOjpjdXJyZW50VGltZSgpKTsKKyAgICBtX2hhc1BlbmRp
bmdBbmltYXRpb25zID0gZmFsc2U7Cit9CisKK2NvbnN0IFdlYkxheWVySW5mbyYgV2ViR3JhcGhp
Y3NMYXllcjo6bGF5ZXJJbmZvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllckluZm87Cit9
CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGUoKQoreworICAg
IHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgY2hpbGRyZW4oKVtp
XS0+c3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKKyAgICBpZiAocmVwbGljYUxheWVyKCkpCisgICAg
ICAgIHJlcGxpY2FMYXllcigpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOworICAgIGlmIChtYXNr
TGF5ZXIoKSkKKyAgICAgICAgbWFza0xheWVyKCktPnN5bmNDb21wb3NpdGluZ1N0YXRlKCk7Cit9
CisKK1dlYkdyYXBoaWNzTGF5ZXIqIHRvV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBs
YXllcikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViR3JhcGhpY3NMYXllcio+KGxheWVy
KTsKK30KKworRmxvYXRSZWN0IFdlYkdyYXBoaWNzTGF5ZXI6Om5lZWRzRGlzcGxheVJlY3QoKSBj
b25zdAoreworICAgIEZsb2F0UmVjdCByZWN0ID0gRmxvYXRSZWN0KDAsIDAsIHNpemUoKS53aWR0
aCgpLCBzaXplKCkuaGVpZ2h0KCkpOworICAgIGlmICghbV9uZWVkc0Rpc3BsYXkpCisgICAgICAg
IHJlY3QuaW50ZXJzZWN0KG1fbmVlZHNEaXNwbGF5UmVjdCk7CisgICAgcmV0dXJuIHJlY3Q7Cit9
CisKK1ZlY3RvcjxXZWJLaXQ6OldlYkxheWVySUQ+IFdlYkdyYXBoaWNzTGF5ZXI6OnRha2VMYXll
cnNUb0RlbGV0ZSgpCit7CisgICAgVmVjdG9yPFdlYktpdDo6V2ViTGF5ZXJJRD4gbGF5ZXJzID0g
ZGVsZXRlZExheWVySURzKCk7CisgICAgZGVsZXRlZExheWVySURzKCkuY2xlYXIoKTsKKyAgICBy
ZXR1cm4gbGF5ZXJzOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGlu
Z1N0YXRlRm9yVGhpc0xheWVyT25seSgpCit7CisgICAgbV9sYXllckluZm8ubmFtZSA9IG5hbWUo
KTsKKyAgICBtX2xheWVySW5mby5hbmNob3JQb2ludCA9IGFuY2hvclBvaW50KCk7CisgICAgbV9s
YXllckluZm8uYmFja2ZhY2VWaXNpYmxlID0gYmFja2ZhY2VWaXNpYmlsaXR5KCk7CisgICAgbV9s
YXllckluZm8uY2hpbGRyZW5UcmFuc2Zvcm0gPSBjaGlsZHJlblRyYW5zZm9ybSgpOworICAgIG1f
bGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlID0gY29udGVudHNPcGFxdWUoKTsKKyAgICBtX2xheWVy
SW5mby5jb250ZW50c1JlY3QgPSBjb250ZW50c1JlY3QoKTsKKyAgICBtX2xheWVySW5mby5kcmF3
c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQoKTsKKyAgICBtX2xheWVySW5mby5tYXNrID0gdG9XZWJM
YXllcklEKG1hc2tMYXllcigpKTsKKyAgICBtX2xheWVySW5mby5tYXNrc1RvQm91bmRzID0gbWFz
a3NUb0JvdW5kcygpOworICAgIG1fbGF5ZXJJbmZvLm9wYWNpdHkgPSBvcGFjaXR5KCk7CisgICAg
bV9sYXllckluZm8ucGFyZW50ID0gdG9XZWJMYXllcklEKHBhcmVudCgpKTsKKyAgICBtX2xheWVy
SW5mby5wb3MgPSBwb3NpdGlvbigpOworICAgIG1fbGF5ZXJJbmZvLnByZXNlcnZlczNEID0gcHJl
c2VydmVzM0QoKTsKKyAgICBtX2xheWVySW5mby5yZXBsaWNhID0gdG9XZWJMYXllcklEKHJlcGxp
Y2FMYXllcigpKTsKKyAgICBtX2xheWVySW5mby5zaXplID0gRmxvYXRTaXplKHNpemUoKS53aWR0
aCgpICogbV9jb250ZW50U2NhbGUsIHNpemUoKS5oZWlnaHQoKSAqIG1fY29udGVudFNjYWxlKTsK
KyAgICBtX2xheWVySW5mby50cmFuc2Zvcm0gPSB0cmFuc2Zvcm0oKTsKKyAgICBtX2NvbnRlbnRO
ZWVkc0Rpc3BsYXkgPSBmYWxzZTsKKyAgICBtX2xheWVySW5mby5jaGlsZHJlbi5jbGVhcigpOwor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAg
ICAgICBtX2xheWVySW5mby5jaGlsZHJlbi5hcHBlbmQodG9XZWJMYXllcklEKGNoaWxkcmVuKClb
aV0pKTsKK30KKworc3RhdGljIFZlY3RvcjxGbG9hdFJlY3Q+IGRpdmlkZUludG9UaWxlcyhjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgVmVjdG9yPEZsb2F0UmVjdD4gdGlsZXM7CisgICAg
Zm9yIChmbG9hdCB5ID0gcmVjdC55KCk7IHkgPCByZWN0Lm1heFkoKTsgeSArPSBnVGlsZURpbWVu
c2lvbikgeworICAgICAgICBmb3IgKGZsb2F0IHggPSByZWN0LngoKTsgeCA8IHJlY3QubWF4WCgp
OyB4ICs9IGdUaWxlRGltZW5zaW9uKSB7CisgICAgICAgICAgICBGbG9hdFJlY3QgdGlsZSh4LCB5
LCBnVGlsZURpbWVuc2lvbiwgZ1RpbGVEaW1lbnNpb24pOworICAgICAgICAgICAgdGlsZS5pbnRl
cnNlY3QocmVjdCk7CisgICAgICAgICAgICB0aWxlcy5hcHBlbmQodGlsZSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIHRpbGVzOworfQorCitzdGF0aWMgdm9pZCBjb2xsZWN0Q29tcG9z
aXRpbmdJbmZvRm9yVGhpc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBXZWJMYXllclRyZWVJ
bmZvJiBvdXRJbmZvLCBWZWN0b3I8V2ViR3JhcGhpY3NMYXllcio+JiBvdXRMYXllcnMpCit7Cisg
ICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpOwor
ICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWxheWVyLT5pc01vZGlm
aWVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG91dExheWVycy5hcHBlbmQobGF5ZXIpOwor
ICAgIG91dEluZm8ubGF5ZXJzLmFwcGVuZChsYXllci0+bGF5ZXJJbmZvKCkpOworCisgICAgV2Vi
TGF5ZXJJbmZvJiBsYXllckluZm8gPSBvdXRJbmZvLmxheWVyc1tvdXRJbmZvLmxheWVycy5zaXpl
KCkgLSAxXTsKKyAgICBpZiAobGF5ZXItPmltYWdlKCkpCisgICAgICAgIGxheWVySW5mby5kcmF3
c0NvbnRlbnQgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBjb2xsZWN0Q29tcG9zaXRpbmdJbmZv
UmVjdXJzaXZlbHkoR3JhcGhpY3NMYXllciogcm9vdExheWVyLCBXZWJMYXllclRyZWVJbmZvJiBv
dXRJbmZvLCBWZWN0b3I8V2ViR3JhcGhpY3NMYXllcio+JiBvdXRMYXllcnMpCit7CisgICAgaWYg
KCFyb290TGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbGxlY3RDb21wb3NpdGluZ0lu
Zm9Gb3JUaGlzTGF5ZXIocm9vdExheWVyLCBvdXRJbmZvLCBvdXRMYXllcnMpOworICAgIGNvbGxl
Y3RDb21wb3NpdGluZ0luZm9Gb3JUaGlzTGF5ZXIocm9vdExheWVyLT5tYXNrTGF5ZXIoKSwgb3V0
SW5mbywgb3V0TGF5ZXJzKTsKKyAgICBjb2xsZWN0Q29tcG9zaXRpbmdJbmZvUmVjdXJzaXZlbHko
cm9vdExheWVyLT5yZXBsaWNhTGF5ZXIoKSwgb3V0SW5mbywgb3V0TGF5ZXJzKTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdExheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKQor
ICAgICAgICBjb2xsZWN0Q29tcG9zaXRpbmdJbmZvUmVjdXJzaXZlbHkocm9vdExheWVyLT5jaGls
ZHJlbigpW2ldLCBvdXRJbmZvLCBvdXRMYXllcnMpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5
ZXI6OnNlbmRMYXllcnNUb1VJUHJvY2VzcyhXZWJDb3JlOjpHcmFwaGljc0xheWVyKiByb290TGF5
ZXIsIFdlYlBhZ2UqIHdlYlBhZ2UpCit7CisgICAgd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsK
KyAgICB3ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5zeW5jQ29tcG9z
aXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworICAgIFdlYkxheWVyVHJlZUluZm8gY29t
cG9zaXRpbmdJbmZvOworICAgIGNvbXBvc2l0aW5nSW5mby5yb290TGF5ZXJJRCA9IHJvb3RMYXll
ciA/IHRvV2ViR3JhcGhpY3NMYXllcihyb290TGF5ZXIpLT5pZCgpIDogMDsKKyAgICBjb21wb3Np
dGluZ0luZm8uY29udGVudFNjYWxlID0gMS4wOworICAgIGNvbXBvc2l0aW5nSW5mby5kZWxldGVk
TGF5ZXJJRHMgPSBXZWJHcmFwaGljc0xheWVyOjp0YWtlTGF5ZXJzVG9EZWxldGUoKTsKKyAgICBW
ZWN0b3I8V2ViR3JhcGhpY3NMYXllcio+IGxheWVyczsKKyAgICBpZiAocm9vdExheWVyKQorICAg
ICAgICBjb2xsZWN0Q29tcG9zaXRpbmdJbmZvUmVjdXJzaXZlbHkocm9vdExheWVyLCBjb21wb3Np
dGluZ0luZm8sIGxheWVycyk7CisKKyAgICBpZiAoY29tcG9zaXRpbmdJbmZvLmRlbGV0ZWRMYXll
cklEcy5pc0VtcHR5KCkgJiYgY29tcG9zaXRpbmdJbmZvLmxheWVycy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJv
eHk6OlN5bmNDb21wb3NpdGluZ0xheWVycyhjb21wb3NpdGluZ0luZm8pKTsKKworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYkdyYXBo
aWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJzW2ldOworICAgICAgICBGbG9hdFJlY3QgdXBkYXRlUmVj
dCA9IGxheWVyLT5uZWVkc0Rpc3BsYXlSZWN0KCk7CisKKyAgICAgICAgbGF5ZXItPmRpZFN5bmNo
cm9uaXplKCk7CisKKyAgICAgICAgaWYgKHVwZGF0ZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgUmVmUHRyPEltYWdlPiBkaXJlY3RJbWFnZSA9IGxheWVy
LT5pbWFnZSgpOworICAgICAgICBpZiAoZGlyZWN0SW1hZ2UpCisgICAgICAgICAgICB1cGRhdGVS
ZWN0ID0gbGF5ZXItPmNvbnRlbnRzUmVjdCgpOworICAgICAgICBlbHNlIGlmICghbGF5ZXItPmRy
YXdzQ29udGVudCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgVmVjdG9yPEZs
b2F0UmVjdD4gdGlsZVJlY3RzID0gZGl2aWRlSW50b1RpbGVzKHVwZGF0ZVJlY3QpOworICAgICAg
ICBmb3IgKHNpemVfdCB0aWxlSW5kZXggPSAwOyB0aWxlSW5kZXggPCB0aWxlUmVjdHMuc2l6ZSgp
OyArK3RpbGVJbmRleCkgeworICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCA9
IHRpbGVSZWN0c1t0aWxlSW5kZXhdOworICAgICAgICAgICAgSW50UmVjdCBlbmNsb3NpbmdVcGRh
dGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdCh0aWxlUmVjdCk7CisKKyAgICAgICAgICAgIFdlYkxh
eWVyVXBkYXRlSW5mbyBjaHVuayhlbmNsb3NpbmdVcGRhdGVSZWN0KTsKKyAgICAgICAgICAgIGNo
dW5rLmxheWVySUQgPSB1aW50MzJfdChsYXllci0+aWQoKSk7CisgICAgICAgICAgICBSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJs
ZShjaHVuay5yZWN0LnNpemUoKSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKKyAg
ICAgICAgICAgIGlmICghYml0bWFwKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgaWYgKCFiaXRtYXAtPmNyZWF0ZUhhbmRsZShjaHVuay5iaXRtYXBIYW5kbGUpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKworI2lmIFBMQVRGT1JNKFFUKQorICAgICAgICAgICAgUUlt
YWdlIHRpbGVJbWFnZSA9IGJpdG1hcC0+Y3JlYXRlUUltYWdlKCk7CisgICAgICAgICAgICB0aWxl
SW1hZ2UuZmlsbCgwKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBRUGFpbnRlciBw
YWludGVyKCZ0aWxlSW1hZ2UpOworICAgICAgICAgICAgICAgIHBhaW50ZXIudHJhbnNsYXRlKC10
aWxlUmVjdC54KCksIC10aWxlUmVjdC55KCkpOworICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dCBjb250ZXh0KCZwYWludGVyKTsKKyAgICAgICAgICAgICAgICBpZiAoZGlyZWN0SW1hZ2Up
CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGRpcmVjdEltYWdlLmdldCgp
LCBDb2xvclNwYWNlRGV2aWNlUkdCLCBsYXllci0+Y29udGVudHNSZWN0KCksIEZsb2F0UmVjdCgw
LCAwLCBkaXJlY3RJbWFnZS0+d2lkdGgoKSwgZGlyZWN0SW1hZ2UtPmhlaWdodCgpKSk7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBsYXllci0+cGFpbnRHcmFwaGlj
c0xheWVyQ29udGVudHMoY29udGV4dCwgZW5jbG9zaW5nVXBkYXRlUmVjdCk7CisgICAgICAgICAg
ICB9CisjZW5kaWYKKworICAgICAgICAgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6RHJhd2lu
Z0FyZWFQcm94eTo6VXBkYXRlQ29tcG9zaXRpbmdMYXllckNvbnRlbnQoY2h1bmspKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKworc3RhdGljIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gY3JlYXRl
V2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBXZWJHcmFwaGljc0xheWVyKGNsaWVudCkpOworfQorCit2b2lkIFdl
YkdyYXBoaWNzTGF5ZXI6OmluaXRGYWN0b3J5KCkKK3sKKyAgICBHcmFwaGljc0xheWVyOjpzZXRH
cmFwaGljc0xheWVyRmFjdG9yeShjcmVhdGVXZWJHcmFwaGljc0xheWVyKTsKK30KKworfQorI2Vu
ZGlmCisvKgorIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAi
V2ViR3JhcGhpY3NMYXllci5oIgorCisjaW5jbHVkZSAiQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAi
QmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIkRyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQYWdl
LmgiCisjaW5jbHVkZSAidGV4dC9DU3RyaW5nLmgiCisjaW5jbHVkZSA8SGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBIYXNoTWFwPFdlYkxheWVySUQsIFdlYkdyYXBo
aWNzTGF5ZXIqPiYgbGF5ZXJCeUlETWFwKCkKK3sKKyAgICBzdGF0aWMgSGFzaE1hcDxXZWJMYXll
cklELCBXZWJHcmFwaGljc0xheWVyKj4gZ2xvYmFsTWFwOworICAgIHJldHVybiBnbG9iYWxNYXA7
Cit9CisKK3N0YXRpYyBjb25zdCBmbG9hdCBnVGlsZURpbWVuc2lvbiA9IDEwMjQuMDsKKworV2Vi
R3JhcGhpY3NMYXllciogV2ViR3JhcGhpY3NMYXllcjo6bGF5ZXJCeUlEKFdlYktpdDo6V2ViTGF5
ZXJJRCBpZCkKK3sKKyAgICBIYXNoTWFwPFdlYkxheWVySUQsIFdlYkdyYXBoaWNzTGF5ZXIqPiYg
dGFibGUgPSBsYXllckJ5SURNYXAoKTsKKyAgICBIYXNoTWFwPFdlYkxheWVySUQsIFdlYkdyYXBo
aWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSB0YWJsZS5maW5kKGlkKTsKKyAgICBpZiAoaXQgPT0g
dGFibGUuZW5kKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBpdC0+c2Vjb25kOwor
fQorCitzdGF0aWMgVmVjdG9yPFdlYkxheWVySUQ+JiBkZWxldGVkTGF5ZXJJRHMoKQoreworICAg
IHN0YXRpYyBWZWN0b3I8V2ViTGF5ZXJJRD4gbGF5ZXJzOworICAgIHJldHVybiBsYXllcnM7Cit9
CisKK3N0YXRpYyBXZWJMYXllcklEIHRvV2ViTGF5ZXJJRChHcmFwaGljc0xheWVyKiBsYXllcikK
K3sKKyAgICByZXR1cm4gbGF5ZXIgPyB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5pZCgpIDog
MDsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpub3RpZnlDaGFuZ2UoKQoreworICAgIG1f
bW9kaWZpZWQgPSB0cnVlOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPm5v
dGlmeVN5bmNSZXF1aXJlZCh0aGlzKTsKK30KKworV2ViR3JhcGhpY3NMYXllcjo6V2ViR3JhcGhp
Y3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCisgICAgOiBHcmFwaGljc0xheWVy
KGNsaWVudCkKKyAgICAsIG1fbmVlZHNEaXNwbGF5KGZhbHNlKQorICAgICwgbV9tb2RpZmllZChm
YWxzZSkKKyAgICAsIG1fY29udGVudE5lZWRzRGlzcGxheShmYWxzZSkKKyAgICAsIG1faGFzUGVu
ZGluZ0FuaW1hdGlvbnMoZmFsc2UpCisgICAgLCBtX2NvbnRlbnRTY2FsZSgxLmYpCit7CisgICAg
c3RhdGljIFdlYkxheWVySUQgc0lEID0gMTAwMDsKKyAgICBtX2xheWVySW5mby5pZCA9ICsrc0lE
OworICAgIGxheWVyQnlJRE1hcCgpLmFkZChpZCgpLCB0aGlzKTsKK30KKworV2ViR3JhcGhpY3NM
YXllcjo6fldlYkdyYXBoaWNzTGF5ZXIoKQoreworICAgIGxheWVyQnlJRE1hcCgpLnJlbW92ZShp
ZCgpKTsKKyAgICBkZWxldGVkTGF5ZXJJRHMoKS5hcHBlbmQoaWQoKSk7Cit9CisKK2Jvb2wgV2Vi
R3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYg
Y2hpbGRyZW4pCit7CisgICAgYm9vbCBvayA9IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuKGNo
aWxkcmVuKTsKKyAgICBpZiAob2spCisgICAgICAgIG5vdGlmeUNoYW5nZSgpOworICAgIHJldHVy
biBvazsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZChHcmFwaGljc0xheWVy
KiBsYXllcikKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZChsYXllcik7CisgICAgbm90
aWZ5Q2hhbmdlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4
KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBpbnQgaW5kZXgpCit7CisgICAgR3JhcGhpY3NMYXllcjo6
YWRkQ2hpbGRBdEluZGV4KGxheWVyLCBpbmRleCk7CisgICAgbm90aWZ5Q2hhbmdlKCk7Cit9CisK
K3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiBsYXll
ciwgR3JhcGhpY3NMYXllciogc2libGluZykKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGls
ZEFib3ZlKGxheWVyLCBzaWJsaW5nKTsKKyAgICBub3RpZnlDaGFuZ2UoKTsKK30KKwordm9pZCBX
ZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFw
aGljc0xheWVyKiBzaWJsaW5nKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3co
bGF5ZXIsIHNpYmxpbmcpOworICAgIG5vdGlmeUNoYW5nZSgpOworfQorCitib29sIFdlYkdyYXBo
aWNzTGF5ZXI6OnJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiBvbGRDaGlsZCwgR3JhcGhpY3NM
YXllciogbmV3Q2hpbGQpCit7CisgICAgYm9vbCBvayA9IEdyYXBoaWNzTGF5ZXI6OnJlcGxhY2VD
aGlsZChvbGRDaGlsZCwgbmV3Q2hpbGQpOworCisgICAgaWYgKG9rKQorICAgICAgICBub3RpZnlD
aGFuZ2UoKTsKKyAgICByZXR1cm4gb2s7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6cmVt
b3ZlRnJvbVBhcmVudCgpCit7CisgICAgR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgp
OworICAgIG5vdGlmeUNoYW5nZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFBv
c2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgaWYgKHBvc2l0aW9uKCkgPT0gcCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24ocCk7Cisg
ICAgbm90aWZ5Q2hhbmdlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9y
UG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiBwKQoreworICAgIGlmIChhbmNob3JQb2ludCgpID09
IHApCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEFuY2hvclBvaW50
KHApOworICAgIG5vdGlmeUNoYW5nZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNl
dFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIGlmICh0aGlzLT5zaXplKCkgPT0g
c2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0U2l6ZShzaXpl
KTsKKyAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBub3RpZnlDaGFuZ2UoKTsKK30KKwordm9p
ZCBXZWJHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHQpCit7CisgICAgaWYgKHRyYW5zZm9ybSgpID09IHQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEdyYXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybSh0KTsKKyAgICBub3RpZnlDaGFuZ2UoKTsK
K30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKK3sKKyAgICBpZiAoY2hpbGRyZW5UcmFuc2Zvcm0oKSA9
PSB0KQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlblRy
YW5zZm9ybSh0KTsKKyAgICBub3RpZnlDaGFuZ2UoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpzZXRQcmVzZXJ2ZXMzRChib29sIGIpCit7CisgICAgaWYgKHByZXNlcnZlczNEKCkgPT0g
YikKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0Qo
Yik7CisgICAgbm90aWZ5Q2hhbmdlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0
TWFza3NUb0JvdW5kcyhib29sIGIpCit7CisgICAgaWYgKG1hc2tzVG9Cb3VuZHMoKSA9PSBiKQor
ICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza3NUb0JvdW5kcyhiKTsK
KyAgICBub3RpZnlDaGFuZ2UoKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXREcmF3
c0NvbnRlbnQoYm9vbCBiKQoreworICAgIGlmIChkcmF3c0NvbnRlbnQoKSA9PSBiKQorICAgICAg
ICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50KGIpOworCisgICAg
aWYgKGIpCisgICAgICAgIHNldE5lZWRzRGlzcGxheSgpOworICAgIG5vdGlmeUNoYW5nZSgpOwor
fQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3BhcXVlKGJvb2wgYikKK3sK
KyAgICBpZiAoY29udGVudHNPcGFxdWUoKSA9PSBiKQorICAgICAgICByZXR1cm47CisgICAgR3Jh
cGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUoYik7CisgICAgbm90aWZ5Q2hhbmdlKCk7Cit9
CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wgYikK
K3sKKyAgICBpZiAoYmFja2ZhY2VWaXNpYmlsaXR5KCkgPT0gYikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR3JhcGhpY3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGIpOworICAgIG5vdGlm
eUNoYW5nZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkoZmxvYXQg
b3BhY2l0eSkKK3sKKyAgICBpZiAodGhpcy0+b3BhY2l0eSgpID09IG9wYWNpdHkpCisgICAgICAg
IHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkob3BhY2l0eSk7CisgICAg
bm90aWZ5Q2hhbmdlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNS
ZWN0KGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgaWYgKGNvbnRlbnRzUmVjdCgpID09IHIpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAobV9pbWFnZSkKKyAgICAgICAgc2V0TmVlZHNEaXNwbGF5
KCk7CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1JlY3Qocik7CisgICAgbm90aWZ5
Q2hhbmdlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6bm90aWZ5QW5pbWF0aW9uU3Rh
cnRlZChkb3VibGUgdGltZSkKK3sKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgp
LT5ub3RpZnlBbmltYXRpb25TdGFydGVkKHRoaXMsIHRpbWUpOworfQorCisvLyBXZSBwdXQgdGhl
c2Ugc3R1YiBpbXBsZW1lbnRhdGlvbnMgaGVyZSBmb3Igd2hlbiB3ZSBpbXBsZW1lbnQgYWNjZWxl
cmF0ZWQgY3Jvc3MtcHJvY2VzcyBhbmltYXRpb25zLgorYm9vbCBXZWJHcmFwaGljc0xheWVyOjph
ZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgSW50
U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltLCBjb25zdCBTdHJpbmcmIGtleWZy
YW1lc05hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBXZWJHcmFwaGljc0xheWVyOjpwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1h
dGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQoreworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5
ZXI6OnJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpCit7Cit9CisK
K3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkK
K3sKKyAgICBpZiAoaW1hZ2UgPT0gbV9pbWFnZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9pbWFnZSA9IGltYWdlOworICAgIHNldE5lZWRzRGlzcGxheSgpOworICAgIEdyYXBoaWNz
TGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZShpbWFnZSk7CisgICAgbm90aWZ5Q2hhbmdlKCk7Cit9
CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxh
eWVyKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihsYXllcik7CisgICAgbm90
aWZ5Q2hhbmdlKCk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5
TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgaWYgKGxheWVyID09IHJlcGxpY2FM
YXllcigpKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRl
ZEJ5TGF5ZXIobGF5ZXIpOworICAgIG5vdGlmeUNoYW5nZSgpOworfQorCit2b2lkIFdlYkdyYXBo
aWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAgbV9uZWVkc0Rpc3BsYXkgPSB0cnVl
OworICAgIG5vdGlmeUNoYW5nZSgpOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldE5l
ZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgbV9uZWVkc0Rp
c3BsYXlSZWN0LnVuaXRlKHJlY3QpOworICAgIG5vdGlmeUNoYW5nZSgpOworfQorCit2b2lkIFdl
YkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCkKK3sKKyAgICBzZXROZWVk
c0Rpc3BsYXkoKTsKK30KKworV2ViTGF5ZXJJRCBXZWJHcmFwaGljc0xheWVyOjppZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJJbmZvLmlkOworfQorCit2b2lkIFdlYkdyYXBoaWNzTGF5
ZXI6OmRpZFN5bmNocm9uaXplKCkKK3sKKyAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOworICAg
IG1fbW9kaWZpZWQgPSBmYWxzZTsKKyAgICBtX25lZWRzRGlzcGxheVJlY3QgPSBGbG9hdFJlY3Qo
KTsKKyAgICBpZiAobV9oYXNQZW5kaW5nQW5pbWF0aW9ucykKKyAgICAgICAgbm90aWZ5QW5pbWF0
aW9uU3RhcnRlZChXVEY6OmN1cnJlbnRUaW1lKCkpOworICAgIG1faGFzUGVuZGluZ0FuaW1hdGlv
bnMgPSBmYWxzZTsKK30KKworY29uc3QgV2ViTGF5ZXJJbmZvJiBXZWJHcmFwaGljc0xheWVyOjps
YXllckluZm8oKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVySW5mbzsKK30KKwordm9pZCBX
ZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSgpCit7CisgICAgc3luY0NvbXBv
c2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBjaGlsZHJlbigpW2ldLT5zeW5jQ29t
cG9zaXRpbmdTdGF0ZSgpOworICAgIGlmIChyZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgcmVwbGlj
YUxheWVyKCktPnN5bmNDb21wb3NpdGluZ1N0YXRlKCk7CisgICAgaWYgKG1hc2tMYXllcigpKQor
ICAgICAgICBtYXNrTGF5ZXIoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKK30KKworV2ViR3Jh
cGhpY3NMYXllciogdG9XZWJHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQorewor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJHcmFwaGljc0xheWVyKj4obGF5ZXIpOworfQorCitG
bG9hdFJlY3QgV2ViR3JhcGhpY3NMYXllcjo6bmVlZHNEaXNwbGF5UmVjdCgpIGNvbnN0Cit7Cisg
ICAgRmxvYXRSZWN0IHJlY3QgPSBGbG9hdFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUo
KS5oZWlnaHQoKSk7CisgICAgaWYgKCFtX25lZWRzRGlzcGxheSkKKyAgICAgICAgcmVjdC5pbnRl
cnNlY3QobV9uZWVkc0Rpc3BsYXlSZWN0KTsKKyAgICByZXR1cm4gcmVjdDsKK30KKworVmVjdG9y
PFdlYktpdDo6V2ViTGF5ZXJJRD4gV2ViR3JhcGhpY3NMYXllcjo6dGFrZUxheWVyc1RvRGVsZXRl
KCkKK3sKKyAgICBWZWN0b3I8V2ViS2l0OjpXZWJMYXllcklEPiBsYXllcnMgPSBkZWxldGVkTGF5
ZXJJRHMoKTsKKyAgICBkZWxldGVkTGF5ZXJJRHMoKS5jbGVhcigpOworICAgIHJldHVybiBsYXll
cnM7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCkKK3sKKyAgICBtX2xheWVySW5mby5uYW1lID0gbmFtZSgpOworICAgIG1f
bGF5ZXJJbmZvLmFuY2hvclBvaW50ID0gYW5jaG9yUG9pbnQoKTsKKyAgICBtX2xheWVySW5mby5i
YWNrZmFjZVZpc2libGUgPSBiYWNrZmFjZVZpc2liaWxpdHkoKTsKKyAgICBtX2xheWVySW5mby5j
aGlsZHJlblRyYW5zZm9ybSA9IGNoaWxkcmVuVHJhbnNmb3JtKCk7CisgICAgbV9sYXllckluZm8u
Y29udGVudHNPcGFxdWUgPSBjb250ZW50c09wYXF1ZSgpOworICAgIG1fbGF5ZXJJbmZvLmNvbnRl
bnRzUmVjdCA9IGNvbnRlbnRzUmVjdCgpOworICAgIG1fbGF5ZXJJbmZvLmRyYXdzQ29udGVudCA9
IGRyYXdzQ29udGVudCgpOworICAgIG1fbGF5ZXJJbmZvLm1hc2sgPSB0b1dlYkxheWVySUQobWFz
a0xheWVyKCkpOworICAgIG1fbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMgPSBtYXNrc1RvQm91bmRz
KCk7CisgICAgbV9sYXllckluZm8ub3BhY2l0eSA9IG9wYWNpdHkoKTsKKyAgICBtX2xheWVySW5m
by5wYXJlbnQgPSB0b1dlYkxheWVySUQocGFyZW50KCkpOworICAgIG1fbGF5ZXJJbmZvLnBvcyA9
IHBvc2l0aW9uKCk7CisgICAgbV9sYXllckluZm8ucHJlc2VydmVzM0QgPSBwcmVzZXJ2ZXMzRCgp
OworICAgIG1fbGF5ZXJJbmZvLnJlcGxpY2EgPSB0b1dlYkxheWVySUQocmVwbGljYUxheWVyKCkp
OworICAgIG1fbGF5ZXJJbmZvLnNpemUgPSBGbG9hdFNpemUoc2l6ZSgpLndpZHRoKCkgKiBtX2Nv
bnRlbnRTY2FsZSwgc2l6ZSgpLmhlaWdodCgpICogbV9jb250ZW50U2NhbGUpOworICAgIG1fbGF5
ZXJJbmZvLnRyYW5zZm9ybSA9IHRyYW5zZm9ybSgpOworICAgIG1fY29udGVudE5lZWRzRGlzcGxh
eSA9IGZhbHNlOworICAgIG1fbGF5ZXJJbmZvLmNoaWxkcmVuLmNsZWFyKCk7CisKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fbGF5
ZXJJbmZvLmNoaWxkcmVuLmFwcGVuZCh0b1dlYkxheWVySUQoY2hpbGRyZW4oKVtpXSkpOworfQor
CitzdGF0aWMgVmVjdG9yPEZsb2F0UmVjdD4gZGl2aWRlSW50b1RpbGVzKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3sKKyAgICBWZWN0b3I8RmxvYXRSZWN0PiB0aWxlczsKKyAgICBmb3IgKGZsb2F0
IHkgPSByZWN0LnkoKTsgeSA8IHJlY3QubWF4WSgpOyB5ICs9IGdUaWxlRGltZW5zaW9uKSB7Cisg
ICAgICAgIGZvciAoZmxvYXQgeCA9IHJlY3QueCgpOyB4IDwgcmVjdC5tYXhYKCk7IHggKz0gZ1Rp
bGVEaW1lbnNpb24pIHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCB0aWxlKHgsIHksIGdUaWxlRGlt
ZW5zaW9uLCBnVGlsZURpbWVuc2lvbik7CisgICAgICAgICAgICB0aWxlLmludGVyc2VjdChyZWN0
KTsKKyAgICAgICAgICAgIHRpbGVzLmFwcGVuZCh0aWxlKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gdGlsZXM7Cit9CisKK3N0YXRpYyB2b2lkIGNvbGxlY3RDb21wb3NpdGluZ0luZm9G
b3JUaGlzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIsIFdlYkxheWVyVHJlZUluZm8mIG91dElu
Zm8sIFZlY3RvcjxXZWJHcmFwaGljc0xheWVyKj4mIG91dExheWVycykKK3sKKyAgICBXZWJHcmFw
aGljc0xheWVyKiBsYXllciA9IHRvV2ViR3JhcGhpY3NMYXllcihsYXllcik7CisgICAgaWYgKCFs
YXllcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghbGF5ZXItPmlzTW9kaWZpZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgb3V0TGF5ZXJzLmFwcGVuZChsYXllcik7CisgICAgb3V0SW5m
by5sYXllcnMuYXBwZW5kKGxheWVyLT5sYXllckluZm8oKSk7CisKKyAgICBXZWJMYXllckluZm8m
IGxheWVySW5mbyA9IG91dEluZm8ubGF5ZXJzW291dEluZm8ubGF5ZXJzLnNpemUoKSAtIDFdOwor
ICAgIGlmIChsYXllci0+aW1hZ2UoKSkKKyAgICAgICAgbGF5ZXJJbmZvLmRyYXdzQ29udGVudCA9
IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGNvbGxlY3RDb21wb3NpdGluZ0luZm9SZWN1cnNpdmVs
eShHcmFwaGljc0xheWVyKiByb290TGF5ZXIsIFdlYkxheWVyVHJlZUluZm8mIG91dEluZm8sIFZl
Y3RvcjxXZWJHcmFwaGljc0xheWVyKj4mIG91dExheWVycykKK3sKKyAgICBpZiAoIXJvb3RMYXll
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgY29sbGVjdENvbXBvc2l0aW5nSW5mb0ZvclRoaXNM
YXllcihyb290TGF5ZXIsIG91dEluZm8sIG91dExheWVycyk7CisgICAgY29sbGVjdENvbXBvc2l0
aW5nSW5mb0ZvclRoaXNMYXllcihyb290TGF5ZXItPm1hc2tMYXllcigpLCBvdXRJbmZvLCBvdXRM
YXllcnMpOworICAgIGNvbGxlY3RDb21wb3NpdGluZ0luZm9SZWN1cnNpdmVseShyb290TGF5ZXIt
PnJlcGxpY2FMYXllcigpLCBvdXRJbmZvLCBvdXRMYXllcnMpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCByb290TGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGNv
bGxlY3RDb21wb3NpdGluZ0luZm9SZWN1cnNpdmVseShyb290TGF5ZXItPmNoaWxkcmVuKClbaV0s
IG91dEluZm8sIG91dExheWVycyk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2VuZExh
eWVyc1RvVUlQcm9jZXNzKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllciwgV2ViUGFn
ZSogd2ViUGFnZSkKK3sKKyAgICB3ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgpOworICAgIHdlYlBh
Z2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRl
SW5jbHVkaW5nU3ViZnJhbWVzKCk7CisgICAgV2ViTGF5ZXJUcmVlSW5mbyBjb21wb3NpdGluZ0lu
Zm87CisgICAgY29tcG9zaXRpbmdJbmZvLnJvb3RMYXllcklEID0gcm9vdExheWVyID8gdG9XZWJH
cmFwaGljc0xheWVyKHJvb3RMYXllciktPmlkKCkgOiAwOworICAgIGNvbXBvc2l0aW5nSW5mby5j
b250ZW50U2NhbGUgPSAxLjA7CisgICAgY29tcG9zaXRpbmdJbmZvLmRlbGV0ZWRMYXllcklEcyA9
IFdlYkdyYXBoaWNzTGF5ZXI6OnRha2VMYXllcnNUb0RlbGV0ZSgpOworICAgIFZlY3RvcjxXZWJH
cmFwaGljc0xheWVyKj4gbGF5ZXJzOworICAgIGlmIChyb290TGF5ZXIpCisgICAgICAgIGNvbGxl
Y3RDb21wb3NpdGluZ0luZm9SZWN1cnNpdmVseShyb290TGF5ZXIsIGNvbXBvc2l0aW5nSW5mbywg
bGF5ZXJzKTsKKworICAgIGlmIChjb21wb3NpdGluZ0luZm8uZGVsZXRlZExheWVySURzLmlzRW1w
dHkoKSAmJiBjb21wb3NpdGluZ0luZm8ubGF5ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6U3luY0Nv
bXBvc2l0aW5nTGF5ZXJzKGNvbXBvc2l0aW5nSW5mbykpOworCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsYXllcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViR3JhcGhpY3NMYXllciog
bGF5ZXIgPSBsYXllcnNbaV07CisgICAgICAgIEZsb2F0UmVjdCB1cGRhdGVSZWN0ID0gbGF5ZXIt
Pm5lZWRzRGlzcGxheVJlY3QoKTsKKworICAgICAgICBsYXllci0+ZGlkU3luY2hyb25pemUoKTsK
KworICAgICAgICBpZiAodXBkYXRlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBSZWZQdHI8SW1hZ2U+IGRpcmVjdEltYWdlID0gbGF5ZXItPmltYWdlKCk7
CisgICAgICAgIGlmIChkaXJlY3RJbWFnZSkKKyAgICAgICAgICAgIHVwZGF0ZVJlY3QgPSBsYXll
ci0+Y29udGVudHNSZWN0KCk7CisgICAgICAgIGVsc2UgaWYgKCFsYXllci0+ZHJhd3NDb250ZW50
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBWZWN0b3I8RmxvYXRSZWN0PiB0
aWxlUmVjdHMgPSBkaXZpZGVJbnRvVGlsZXModXBkYXRlUmVjdCk7CisgICAgICAgIGZvciAoc2l6
ZV90IHRpbGVJbmRleCA9IDA7IHRpbGVJbmRleCA8IHRpbGVSZWN0cy5zaXplKCk7ICsrdGlsZUlu
ZGV4KSB7CisgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0ID0gdGlsZVJlY3Rz
W3RpbGVJbmRleF07CisgICAgICAgICAgICBJbnRSZWN0IGVuY2xvc2luZ1VwZGF0ZVJlY3QgPSBl
bmNsb3NpbmdJbnRSZWN0KHRpbGVSZWN0KTsKKworICAgICAgICAgICAgV2ViTGF5ZXJVcGRhdGVJ
bmZvIGNodW5rKGVuY2xvc2luZ1VwZGF0ZVJlY3QpOworICAgICAgICAgICAgY2h1bmsubGF5ZXJJ
RCA9IHVpbnQzMl90KGxheWVyLT5pZCgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGNodW5rLnJl
Y3Quc2l6ZSgpLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOworICAgICAgICAgICAg
aWYgKCFiaXRtYXApCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAo
IWJpdG1hcC0+Y3JlYXRlSGFuZGxlKGNodW5rLmJpdG1hcEhhbmRsZSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworCisjaWYgUExBVEZPUk0oUVQpCisgICAgICAgICAgICBRSW1hZ2UgdGlsZUlt
YWdlID0gYml0bWFwLT5jcmVhdGVRSW1hZ2UoKTsKKyAgICAgICAgICAgIHRpbGVJbWFnZS5maWxs
KDApOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnRp
bGVJbWFnZSk7CisgICAgICAgICAgICAgICAgcGFpbnRlci50cmFuc2xhdGUoLXRpbGVSZWN0Lngo
KSwgLXRpbGVSZWN0LnkoKSk7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRl
eHQoJnBhaW50ZXIpOworICAgICAgICAgICAgICAgIGlmIChkaXJlY3RJbWFnZSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoZGlyZWN0SW1hZ2UuZ2V0KCksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIGxheWVyLT5jb250ZW50c1JlY3QoKSwgRmxvYXRSZWN0KDAsIDAsIGRpcmVj
dEltYWdlLT53aWR0aCgpLCBkaXJlY3RJbWFnZS0+aGVpZ2h0KCkpKTsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGxheWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250
ZW50cyhjb250ZXh0LCBlbmNsb3NpbmdVcGRhdGVSZWN0KTsKKyAgICAgICAgICAgIH0KKyNlbmRp
ZgorCisgICAgICAgICAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5
OjpVcGRhdGVDb21wb3NpdGluZ0xheWVyQ29udGVudChjaHVuaykpOworICAgICAgICB9CisgICAg
fQorfQorCitzdGF0aWMgUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBjcmVhdGVXZWJHcmFwaGlj
c0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IFdlYkdyYXBoaWNzTGF5ZXIoY2xpZW50KSk7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6aW5pdEZhY3RvcnkoKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEdyYXBoaWNzTGF5
ZXJGYWN0b3J5KGNyZWF0ZVdlYkdyYXBoaWNzTGF5ZXIpOworfQorCit9CisjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXll
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViR3JhcGhpY3NMYXllci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMjI2IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
CisjaWZuZGVmIFdlYkdyYXBoaWNzTGF5ZXJfaAorI2RlZmluZSBXZWJHcmFwaGljc0xheWVyX2gK
KworI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIK
KyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJSdW5M
b29wLmgiCisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSAiVHJhbnNmb3Jt
YXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCisjaW5jbHVkZSAi
V2ViUHJvY2Vzcy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCituYW1l
c3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlBhZ2U7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgV2ViR3JhcGhpY3NMYXllciA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVy
IHsKK3B1YmxpYzoKKyAgICBXZWJHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqKTsK
KyAgICB2aXJ0dWFsIH5XZWJHcmFwaGljc0xheWVyKCk7CisKKyAgICAvLyBSZWltcGxlbWVudGF0
aW9ucyBmcm9tIEdyYXBoaWNzTGF5ZXIuaC4KKyAgICBib29sIHNldENoaWxkcmVuKGNvbnN0IFZl
Y3RvcjxHcmFwaGljc0xheWVyKj4mKTsKKyAgICB2b2lkIGFkZENoaWxkKEdyYXBoaWNzTGF5ZXIq
KTsKKyAgICB2b2lkIGFkZENoaWxkQXRJbmRleChHcmFwaGljc0xheWVyKiwgaW50KTsKKyAgICB2
b2lkIGFkZENoaWxkQWJvdmUoR3JhcGhpY3NMYXllciosIEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2
b2lkIGFkZENoaWxkQmVsb3coR3JhcGhpY3NMYXllciosIEdyYXBoaWNzTGF5ZXIqKTsKKyAgICBi
b29sIHJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NMYXllciopOworICAgIHZv
aWQgcmVtb3ZlRnJvbVBhcmVudCgpOworICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQ
b2ludCYpOworICAgIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJik7Cisg
ICAgdm9pZCBzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHZvaWQgc2V0VHJhbnNmb3Jt
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgdm9pZCBzZXRDaGlsZHJlblRyYW5z
Zm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIHZvaWQgc2V0UHJlc2VydmVz
M0QoYm9vbCk7CisgICAgdm9pZCBzZXRNYXNrc1RvQm91bmRzKGJvb2wpOworICAgIHZvaWQgc2V0
RHJhd3NDb250ZW50KGJvb2wpOworICAgIHZvaWQgc2V0Q29udGVudHNPcGFxdWUoYm9vbCk7Cisg
ICAgdm9pZCBzZXRCYWNrZmFjZVZpc2liaWxpdHkoYm9vbCk7CisgICAgdm9pZCBzZXRPcGFjaXR5
KGZsb2F0KTsKKyAgICB2b2lkIHNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAg
Ym9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXpl
JiwgY29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiwgZG91YmxlKTsKKyAgICB2b2lkIHBh
dXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYsIGRvdWJsZSk7CisgICAgdm9pZCByZW1vdmVBbmlt
YXRpb24oY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2Uq
KTsKKyAgICB2b2lkIHNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBzZXRS
ZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBzZXROZWVkc0Rpc3Bs
YXkoKTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmKTsK
KyAgICB2b2lkIHNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCk7CisgICAgdmlydHVhbCB2b2lkIHN5
bmNDb21wb3NpdGluZ1N0YXRlKCk7CisgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0
YXRlRm9yVGhpc0xheWVyT25seSgpOworCisgICAgV2ViS2l0OjpXZWJMYXllcklEIGlkKCkgY29u
c3Q7CisgICAgY29uc3QgV2ViS2l0OjpXZWJMYXllckluZm8mIGxheWVySW5mbygpIGNvbnN0Owor
ICAgIEZsb2F0UmVjdCBuZWVkc0Rpc3BsYXlSZWN0KCkgY29uc3Q7CisgICAgc3RhdGljIFZlY3Rv
cjxXZWJLaXQ6OldlYkxheWVySUQ+IHRha2VMYXllcnNUb0RlbGV0ZSgpOworICAgIHN0YXRpYyBX
ZWJHcmFwaGljc0xheWVyKiBsYXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklEKTsKKyAgICBib29s
IGlzTW9kaWZpZWQoKSBjb25zdCB7IHJldHVybiBtX21vZGlmaWVkOyB9CisgICAgdm9pZCBkaWRT
eW5jaHJvbml6ZSgpOworICAgIEltYWdlKiBpbWFnZSgpIHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7
IH0KKyAgICB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoZG91YmxlKTsKKworICAgIHN0YXRp
YyB2b2lkIGluaXRGYWN0b3J5KCk7CisgICAgc3RhdGljIHZvaWQgc2VuZExheWVyc1RvVUlQcm9j
ZXNzKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJLaXQ6OldlYlBhZ2UqKTsKKworcHJpdmF0
ZToKKyAgICBXZWJLaXQ6OldlYkxheWVySW5mbyBtX2xheWVySW5mbzsKKyAgICBSZWZQdHI8V2Vi
S2l0OjpTaGFyZWFibGVCaXRtYXA+IG1fYmFja2luZ1N0b3JlOworICAgIFJlZlB0cjxJbWFnZT4g
bV9pbWFnZTsKKyAgICBGbG9hdFJlY3QgbV9uZWVkc0Rpc3BsYXlSZWN0OworICAgIGJvb2wgbV9u
ZWVkc0Rpc3BsYXk7CisgICAgYm9vbCBtX21vZGlmaWVkOworICAgIGJvb2wgbV9jb250ZW50TmVl
ZHNEaXNwbGF5OworICAgIGJvb2wgbV9oYXNQZW5kaW5nQW5pbWF0aW9uczsKKworICAgIGZsb2F0
IG1fY29udGVudFNjYWxlOworCisgICAgdm9pZCBub3RpZnlDaGFuZ2UoKTsKK307CisKK1dlYkdy
YXBoaWNzTGF5ZXIqIHRvV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKik7CisKK30KKyNl
bmRpZgorCisjZW5kaWYgLy8gV2ViR3JhcGhpY3NMYXllcl9ICisKKy8qCisgQ29weXJpZ2h0IChD
KSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisKKyNpZm5kZWYgV2ViR3JhcGhpY3NMYXllcl9oCisjZGVm
aW5lIFdlYkdyYXBoaWNzTGF5ZXJfaAorCisjaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW50
U2l6ZS5oIgorI2luY2x1ZGUgIlJ1bkxvb3AuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAu
aCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIldlYkxheWVy
VHJlZUluZm8uaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViUGFnZTsKK30K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXZWJHcmFwaGljc0xheWVyIDogcHVibGlj
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIgeworcHVibGljOgorICAgIFdlYkdyYXBoaWNzTGF5ZXIo
R3JhcGhpY3NMYXllckNsaWVudCopOworICAgIHZpcnR1YWwgfldlYkdyYXBoaWNzTGF5ZXIoKTsK
KworICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gR3JhcGhpY3NMYXllci5oLgorICAgIGJv
b2wgc2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYpOworICAgIHZvaWQg
YWRkQ2hpbGQoR3JhcGhpY3NMYXllciopOworICAgIHZvaWQgYWRkQ2hpbGRBdEluZGV4KEdyYXBo
aWNzTGF5ZXIqLCBpbnQpOworICAgIHZvaWQgYWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiwg
R3JhcGhpY3NMYXllciopOworICAgIHZvaWQgYWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiwg
R3JhcGhpY3NMYXllciopOworICAgIGJvb2wgcmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqLCBH
cmFwaGljc0xheWVyKik7CisgICAgdm9pZCByZW1vdmVGcm9tUGFyZW50KCk7CisgICAgdm9pZCBz
ZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdm9pZCBzZXRBbmNob3JQb2ludChj
b25zdCBGbG9hdFBvaW50M0QmKTsKKyAgICB2b2lkIHNldFNpemUoY29uc3QgRmxvYXRTaXplJik7
CisgICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAg
ICB2b2lkIHNldENoaWxkcmVuVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7
CisgICAgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29sKTsKKyAgICB2b2lkIHNldE1hc2tzVG9Cb3Vu
ZHMoYm9vbCk7CisgICAgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCk7CisgICAgdm9pZCBzZXRD
b250ZW50c09wYXF1ZShib29sKTsKKyAgICB2b2lkIHNldEJhY2tmYWNlVmlzaWJpbGl0eShib29s
KTsKKyAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQpOworICAgIHZvaWQgc2V0Q29udGVudHNSZWN0
KGNvbnN0IEludFJlY3QmKTsKKyAgICBib29sIGFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZh
bHVlTGlzdCYsIGNvbnN0IEludFNpemUmLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcm
LCBkb3VibGUpOworICAgIHZvaWQgcGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiwgZG91Ymxl
KTsKKyAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHNl
dENvbnRlbnRzVG9JbWFnZShJbWFnZSopOworICAgIHZvaWQgc2V0TWFza0xheWVyKEdyYXBoaWNz
TGF5ZXIqKTsKKyAgICB2b2lkIHNldFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqKTsK
KyAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgc2V0Q29udGVudHNOZWVkc0Rpc3BsYXko
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisKKyAgICBXZWJL
aXQ6OldlYkxheWVySUQgaWQoKSBjb25zdDsKKyAgICBjb25zdCBXZWJLaXQ6OldlYkxheWVySW5m
byYgbGF5ZXJJbmZvKCkgY29uc3Q7CisgICAgRmxvYXRSZWN0IG5lZWRzRGlzcGxheVJlY3QoKSBj
b25zdDsKKyAgICBzdGF0aWMgVmVjdG9yPFdlYktpdDo6V2ViTGF5ZXJJRD4gdGFrZUxheWVyc1Rv
RGVsZXRlKCk7CisgICAgc3RhdGljIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyQnlJRChXZWJLaXQ6
OldlYkxheWVySUQpOworICAgIGJvb2wgaXNNb2RpZmllZCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9k
aWZpZWQ7IH0KKyAgICB2b2lkIGRpZFN5bmNocm9uaXplKCk7CisgICAgSW1hZ2UqIGltYWdlKCkg
eyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQorICAgIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRl
ZChkb3VibGUpOworCisgICAgc3RhdGljIHZvaWQgaW5pdEZhY3RvcnkoKTsKKyAgICBzdGF0aWMg
dm9pZCBzZW5kTGF5ZXJzVG9VSVByb2Nlc3MoV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYktp
dDo6V2ViUGFnZSopOworCitwcml2YXRlOgorICAgIFdlYktpdDo6V2ViTGF5ZXJJbmZvIG1fbGF5
ZXJJbmZvOworICAgIFJlZlB0cjxXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcD4gbV9iYWNraW5nU3Rv
cmU7CisgICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOworICAgIEZsb2F0UmVjdCBtX25lZWRzRGlz
cGxheVJlY3Q7CisgICAgYm9vbCBtX25lZWRzRGlzcGxheTsKKyAgICBib29sIG1fbW9kaWZpZWQ7
CisgICAgYm9vbCBtX2NvbnRlbnROZWVkc0Rpc3BsYXk7CisgICAgYm9vbCBtX2hhc1BlbmRpbmdB
bmltYXRpb25zOworCisgICAgZmxvYXQgbV9jb250ZW50U2NhbGU7CisKKyAgICB2b2lkIG5vdGlm
eUNoYW5nZSgpOworfTsKKworV2ViR3JhcGhpY3NMYXllciogdG9XZWJHcmFwaGljc0xheWVyKEdy
YXBoaWNzTGF5ZXIqKTsKKworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBXZWJHcmFwaGljc0xheWVy
X0gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97035</attachid>
            <date>2011-06-13 16:57:29 -0700</date>
            <delta_ts>2011-06-15 10:33:32 -0700</delta_ts>
            <desc>Patch 5: LayerTreeContext/LayerTreeHost</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>23799</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4NzMzKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzMgQEAKKzIwMTEtMDYtMTMgIE5vJ2FtIFJv
c2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4gYW5kIFZpYXRjaGVzbGF2IE9zdGFw
ZW5rbyA8b3N0YXBlbmtvLnZpYXRjaGVzbGF2QG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIEltcGxlbWVudCBhY2NlbGVyYXRl
ZCBjb21wb3NpdGluZyBvbiBXSzIgUXQgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY5MzUKKworICAgICAgICBJbXBsZW1lbnRpbmcgTGF5ZXJU
cmVlSG9zdCBhbmQgTGF5ZXJUcmVlQ29udGV4dCBhbmQgTGF5ZXJUcmVlSG9zdCBmb3IgUXQuCisg
ICAgICAgIEFkZCB0aGUgbmVjZXNzYXJ5IHBsdW1iaW5nIHRvIG1ha2UgdGhlIExheWVyVHJlZUhv
c3Qgd29yayB3aXRoIFF0LCBiYXNlZCBvbiB0aGUgb3JpZ2luYWwgTWFjCisgICAgICAgIGltcGxl
bWVudGF0aW9uICh0aGUgY29kZSBpcyBuZWFybHkgaWRlbnRpY2FsKS4gVGhpcyBpbmNsdWRlcyBj
cmVhdGluZyB0aGUgcmlnaHQgbGF5ZXJzIGZvciB0aGUKKyAgICAgICAgb3ZlcmxheSBhbmQgZm9y
IHRoZSBub24tY29tcG9zaXRlZCBjb250ZW50LCBhbmQgcGFzc2luZyB0aGUgcm9vdCBsYXllciB0
byB0aGUgVUkgcHJvY2Vzcy4KKworICAgICAgICBBbHNvLCBzaW5jZSBMYXllclRyZWVIb3N0UXQg
aXMgY29tcGlsZWQsIHdlIGhhdmUgdG8gYWRkIHNvbWUgb2YgdGhlIHJlc3Qgb2YgdGhlIGV4aXN0
aW5nIHBhdGNoZXMsCisgICAgICAgIG5hbWVseSB0aGUgbmV3IG1lc3NhZ2VzOiBzeW5jQ29tcG9z
aXRpbmdMYXllcnMgYW5kIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJDb250ZW50LCBhbmQgY3JlYXRl
IGEKKyAgICAgICAgc3R1YiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlbSBpbiBEcmF3aW5nQXJlYVBy
b3h5LgorCisgICAgICAgIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBhY3RpdmF0ZWQgeWV0LCB1bnRp
bCB3ZSBlbmFibGUgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgaW4gdGhlIHNldHRpbmdzIGFuZAor
ICAgICAgICBjcmVhdGUgdGhlIHJpZ2h0IEdyYXBoaWNzTGF5ZXIuCisKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdDIvbWVzc2FnZXMucHk6CisgICAgICAgICogU2hhcmVkL0xheWVyVHJlZUNvbnRl
eHQuaDoKKyAgICAgICAgKiBTaGFyZWQvcXQvTGF5ZXJUcmVlQ29udGV4dFF0LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dDo6TGF5ZXJUcmVlQ29udGV4dCk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUNvbnRleHQ6On5MYXllclRyZWVDb250ZXh0KToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dDo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlQ29udGV4dDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4
dDo6aXNFbXB0eSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVh
UHJveHk6OnN5bmNDb21wb3NpdGluZ0xheWVycyk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdB
cmVhUHJveHk6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJDb250ZW50KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJLaXQyLnBy
bzoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdENvbXBvc2l0aW5nSW5mb0ZvclRoaXNMYXll
cik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpjcmVhdGUpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UXQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6
fkxheWVyVHJlZUhvc3RRdCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6TGF5
ZXJUcmVlSG9zdFF0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXRMYXll
ckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UXQ6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RR
dDo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0UXQ6OnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2gpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjppbnZhbGlkYXRlKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlz
cGxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2Nyb2xsTm9uQ29tcG9z
aXRlZENvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojpmb3JjZVJl
cGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNpemVEaWRDaGFuZ2Up
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRpZEluc3RhbGxQYWdlT3Zlcmxh
eSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6ZGlkVW5pbnN0YWxsUGFnZU92
ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFBhZ2VPdmVybGF5
TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpmbHVzaFBl
bmRpbmdMYXllckNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnBl
cmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9z
dFF0OjpsYXllckZsdXNoVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3RRdDo6Y3JlYXRlUGFnZU92ZXJsYXlMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3RRdDo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UXQ6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UXQ6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RRdDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3RRdDo6c2hvd0RlYnVnQm9yZGVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3RRdDo6c2hvd1JlcGFpbnRDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9z
dDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UXQ6OmxheWVyVHJlZUNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UXQ6OnBhdXNlUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdFF0OjpyZXN1bWVSZW5kZXJpbmcpOgorCiAyMDExLTA2LTEzICBSeXVhbiBDaG9pICA8cnl1
YW4uY2hvaUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRl
IENocmlzdGlhbnNlbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCShyZXZpc2lvbiA4ODY5OCkKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksNiArMTQ5LDcg
QEAgSEVBREVSUyArPSBcCiAgICAgU2hhcmVkL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24uaCBcCiAg
ICAgU2hhcmVkL1dlYkdyYXBoaWNzQ29udGV4dC5oIFwKICAgICBTaGFyZWQvV2ViSW1hZ2UuaCBc
CisgICAgU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaCBcCiAgICAgU2hhcmVkL1dlYk5hdmlnYXRp
b25EYXRhU3RvcmUuaCBcCiAgICAgU2hhcmVkL1dlYk51bWJlci5oIFwKICAgICBTaGFyZWQvV2Vi
T3BlblBhbmVsUGFyYW1ldGVycy5oIFwKQEAgLTI3OSw2ICsyODAsNyBAQCBIRUFERVJTICs9IFwK
ICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVycm9ycy5oIFwKICAgICBXZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmggXAogICAgIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25DbGllbnQuaCBcCisgICAgV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmggXAogICAgIFdlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCBcCkBAIC0zNTcsNiArMzU5LDcg
QEAgU09VUkNFUyArPSBcCiAgICAgU2hhcmVkL1dlYkdyYXBoaWNzQ29udGV4dC5jcHAgXAogICAg
IFNoYXJlZC9XZWJLZXlib2FyZEV2ZW50LmNwcCBcCiAgICAgU2hhcmVkL1dlYkltYWdlLmNwcCBc
CisgICAgU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwIFwKICAgICBTaGFyZWQvV2ViTW91c2VF
dmVudC5jcHAgXAogICAgIFNoYXJlZC9XZWJPcGVuUGFuZWxQYXJhbWV0ZXJzLmNwcCBcCiAgICAg
U2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuY3BwIFwKQEAgLTUwNCw2ICs1MDcsNyBA
QCBTT1VSQ0VTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJD
bGllbnQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9u
Q2xpZW50LmNwcCBcCisgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xh
eWVyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JDbGll
bnQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckZyb250
ZW5kQ2xpZW50LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9y
bVN0cmF0ZWdpZXMuY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9t
ZXNzYWdlcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIv
bWVzc2FnZXMucHkJKHJldmlzaW9uIDg4Njk4KQorKysgU291cmNlL1dlYktpdDIvU2NyaXB0cy93
ZWJraXQyL21lc3NhZ2VzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00NjQsNiArNDY0LDcgQEAgZGVm
IGhlYWRlcnNfZm9yX3R5cGUodHlwZSk6CiAgICAgICAgICdXZWJDb3JlOjpUZXh0Q2hlY2tpbmdS
ZXN1bHQnOiAnPFdlYkNvcmUvVGV4dENoZWNrZXJDbGllbnQuaD4nLAogICAgICAgICAnV2ViS2l0
OjpXZWJHZXN0dXJlRXZlbnQnOiAnIldlYkV2ZW50LmgiJywKICAgICAgICAgJ1dlYktpdDo6V2Vi
S2V5Ym9hcmRFdmVudCc6ICciV2ViRXZlbnQuaCInLAorICAgICAgICAnV2ViS2l0OjpXZWJMYXll
clVwZGF0ZUluZm8nOiAnIldlYkxheWVyVHJlZUluZm8uaCInLAogICAgICAgICAnV2ViS2l0OjpX
ZWJNb3VzZUV2ZW50JzogJyJXZWJFdmVudC5oIicsCiAgICAgICAgICdXZWJLaXQ6OldlYlRvdWNo
RXZlbnQnOiAnIldlYkV2ZW50LmgiJywKICAgICAgICAgJ1dlYktpdDo6V2ViV2hlZWxFdmVudCc6
ICciV2ViRXZlbnQuaCInLApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0xheWVyVHJlZUNv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTGF5ZXJUcmVlQ29u
dGV4dC5oCShyZXZpc2lvbiA4ODY5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9MYXllclRy
ZWVDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDggQEAgcHVibGljOgogICAg
IHVpbnQzMl90IGNvbnRleHRJRDsKICNlbGlmIFBMQVRGT1JNKFdJTikKICAgICBIV05EIHdpbmRv
dzsKKyNlbGlmIFBMQVRGT1JNKFFUKQorICAgIHVpbnQzMl90IHdlYkxheWVySUQ7CiAjZW5kaWYK
IH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9MYXllclRyZWVDb250ZXh0UXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9MYXllclRyZWVDb250
ZXh0UXQuY3BwCShyZXZpc2lvbiA4ODY5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9M
YXllclRyZWVDb250ZXh0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw0MSArMjYsMzggQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCiAKLSNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgor
I2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogTGF5
ZXJUcmVlQ29udGV4dDo6TGF5ZXJUcmVlQ29udGV4dCgpCisgICAgOiB3ZWJMYXllcklEKDApCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogTGF5ZXJUcmVlQ29udGV4dDo6fkxheWVyVHJl
ZUNvbnRleHQoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVl
Q29udGV4dDo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciopIGNvbnN0Cit2b2lkIExh
eWVyVHJlZUNvbnRleHQ6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIp
IGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUod2Vi
TGF5ZXJJRCk7CiB9CiAKLWJvb2wgTGF5ZXJUcmVlQ29udGV4dDo6ZGVjb2RlKENvcmVJUEM6OkFy
Z3VtZW50RGVjb2RlciosIExheWVyVHJlZUNvbnRleHQmKQorYm9vbCBMYXllclRyZWVDb250ZXh0
OjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBMYXllclRyZWVDb250
ZXh0JiBjb250ZXh0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIGRlY29kZXItPmRlY29kZShjb250ZXh0LndlYkxheWVySUQpOwogfQogCiBi
b29sIExheWVyVHJlZUNvbnRleHQ6OmlzRW1wdHkoKSBjb25zdAogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuICF3ZWJMYXllcklEOwogfQogCi1i
b29sIG9wZXJhdG9yPT0oY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYsIGNvbnN0IExheWVyVHJlZUNv
bnRleHQmKQorYm9vbCBvcGVyYXRvcj09KGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGEsIGNvbnN0
IExheWVyVHJlZUNvbnRleHQmIGIpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gYS53ZWJMYXllcklEID09IGIud2ViTGF5ZXJJRDsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJh
d2luZ0FyZWFQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5LmgJKHJldmlzaW9uIDg4Njk4KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsOCBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTGF5ZXJUcmVlQ29udGV4dDsKIGNsYXNzIFVw
ZGF0ZUluZm87CitjbGFzcyBXZWJMYXllclRyZWVJbmZvOworY2xhc3MgV2ViTGF5ZXJVcGRhdGVJ
bmZvOwogY2xhc3MgV2ViUGFnZVByb3h5OwogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMTA3LDYg
KzEwOSwxMCBAQCBwcml2YXRlOgogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAg
ICB2aXJ0dWFsIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBi
YWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBMYXllclRyZWVDb250ZXh0JikgeyB9CiAgICAgdmly
dHVhbCB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5n
U3RvcmVTdGF0ZUlELCBjb25zdCBVcGRhdGVJbmZvJikgeyB9CisjaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQorICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdMYXllcnMoY29uc3QgV2ViTGF5
ZXJUcmVlSW5mbyYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdGluZ0xheWVy
Q29udGVudChjb25zdCBXZWJMYXllclVwZGF0ZUluZm8mKSB7IH0KKyNlbmRpZgogI2VuZGlmCiAj
aWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAgICAgdmlydHVhbCB2b2lkIGRpZFNldFNp
emUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIHsgfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0RyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9u
IDg4Njk4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkubWVz
c2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDEwIEBAIG1lc3NhZ2VzIC0+IERy
YXdpbmdBcmVhUHJveHkgewogICAgIEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWlu
dDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgV2ViS2l0OjpMYXllclRyZWVDb250ZXh0IGNvbnRl
eHQpCiAgICAgRXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdT
dG9yZVN0YXRlSUQsIFdlYktpdDo6VXBkYXRlSW5mbyB1cGRhdGVJbmZvKQogI2VuZGlmCisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAg
U3luY0NvbXBvc2l0aW5nTGF5ZXJzKFdlYktpdDo6V2ViTGF5ZXJUcmVlSW5mbyBsYXllclRyZWVJ
bmZvKQorICAgIFVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJDb250ZW50KFdlYktpdDo6V2ViTGF5ZXJV
cGRhdGVJbmZvIGxheWVyVXBkYXRlSW5mbykKKyNlbmRpZgogI2lmIEVOQUJMRShUSUxFRF9CQUNL
SU5HX1NUT1JFKQogICAgIEludmFsaWRhdGUoV2ViQ29yZTo6SW50UmVjdCBkaXJ0eVJlY3QpCiAg
ICAgRGlkU2V0U2l6ZShXZWJDb3JlOjpJbnRTaXplIHZpZXdTaXplKQpJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdy
YXBoaWNzTGF5ZXIuY3BwCShyZXZpc2lvbiA4ODY5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwNSw5ICs0MDUsOSBAQCBzdGF0aWMgVmVjdG9yPEZsb2F0UmVjdD4gZGl2aWRlSW50b1Rp
bGVzCiAgICAgcmV0dXJuIHRpbGVzOwogfQogCi1zdGF0aWMgdm9pZCBjb2xsZWN0Q29tcG9zaXRp
bmdJbmZvRm9yVGhpc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBXZWJMYXllclRyZWVJbmZv
JiBvdXRJbmZvLCBWZWN0b3I8V2ViR3JhcGhpY3NMYXllcio+JiBvdXRMYXllcnMpCitzdGF0aWMg
dm9pZCBjb2xsZWN0Q29tcG9zaXRpbmdJbmZvRm9yVGhpc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdy
YXBoaWNzTGF5ZXIsIFdlYkxheWVyVHJlZUluZm8mIG91dEluZm8sIFZlY3RvcjxXZWJHcmFwaGlj
c0xheWVyKj4mIG91dExheWVycykKIHsKLSAgICBXZWJHcmFwaGljc0xheWVyKiBsYXllciA9IHRv
V2ViR3JhcGhpY3NMYXllcihsYXllcik7CisgICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSB0
b1dlYkdyYXBoaWNzTGF5ZXIoZ3JhcGhpY3NMYXllcik7CiAgICAgaWYgKCFsYXllcikKICAgICAg
ICAgcmV0dXJuOwogICAgIGlmICghbGF5ZXItPmlzTW9kaWZpZWQoKSkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAJKHJl
dmlzaW9uIDg4Njk4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVy
VHJlZUhvc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCwxMCBAQAogI2VuZGlmCiAj
ZW5kaWYKIAorI2lmIFBMQVRGT1JNKFFUKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaW5jbHVk
ZSAicXQvTGF5ZXJUcmVlSG9zdFF0LmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNDQsNiArNDgsOCBAQCBQYXNzUmVmUHRyPExh
eWVyVHJlZUhvc3Q+IExheWVyVHJlZUhvc3Q6CiAgICAgcmV0dXJuIExheWVyVHJlZUhvc3RDQU1h
Yzo6Y3JlYXRlKHdlYlBhZ2UpOwogI2VsaWYgUExBVEZPUk0oV0lOKSAmJiBIQVZFKFdLUUNBKQog
ICAgIHJldHVybiBMYXllclRyZWVIb3N0Q0FXaW46OmNyZWF0ZSh3ZWJQYWdlKTsKKyNlbGlmIFBM
QVRGT1JNKFFUKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgcmV0dXJuIExheWVyVHJlZUhv
c3RRdDo6Y3JlYXRlKHdlYlBhZ2UpOwogI2Vsc2UKICAgICByZXR1cm4gMDsKICNlbmRpZgpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xh
eWVyVHJlZUhvc3RRdC5jcHAJKHJldmlzaW9uIDg4Njk4KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDggKzI1LDI3NyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RRdC5oIgor
CisjaW5jbHVkZSAiRHJhd2luZ0FyZWFJbXBsLmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFNZXNz
YWdlcy5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgorI2luY2x1ZGUgIldl
YkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NSZWZQdHI8TGF5ZXJU
cmVlSG9zdFF0PiBMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZShXZWJQYWdlKiB3ZWJQYWdlKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJUcmVlSG9zdFF0KHdlYlBhZ2UpKTsKK30KKwor
TGF5ZXJUcmVlSG9zdFF0Ojp+TGF5ZXJUcmVlSG9zdFF0KCkKK3sKK30KKworTGF5ZXJUcmVlSG9z
dFF0OjpMYXllclRyZWVIb3N0UXQoV2ViUGFnZSogd2ViUGFnZSkKKyAgICA6IExheWVyVHJlZUhv
c3Qod2ViUGFnZSkKKyAgICAsIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKGZhbHNl
KQorICAgICwgbV9pc1ZhbGlkKHRydWUpCisgICAgLCBtX2xheWVyRmx1c2hUaW1lcih0aGlzLCAm
TGF5ZXJUcmVlSG9zdFF0OjpsYXllckZsdXNoVGltZXJGaXJlZCkKKyAgICAsIG1fbGF5ZXJGbHVz
aFNjaGVkdWxpbmdFbmFibGVkKHRydWUpCit7CisgICAgLy8gQ3JlYXRlIGEgcm9vdCBsYXllci4K
KyAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyNpZm5kZWYg
TkRFQlVHCisgICAgbV9yb290TGF5ZXItPnNldE5hbWUoIkxheWVyVHJlZUhvc3RRdCByb290IGxh
eWVyIik7CisjZW5kaWYKKyAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsK
KyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisgICAgbV9sYXll
clRyZWVDb250ZXh0LndlYkxheWVySUQgPSB0b1dlYkdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIu
Z2V0KCkpLT5pZCgpOworCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyID0gR3JhcGhp
Y3NMYXllcjo6Y3JlYXRlKHRoaXMpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX25vbkNvbXBvc2l0
ZWRDb250ZW50TGF5ZXItPnNldE5hbWUoIkxheWVyVHJlZUhvc3RRdCBub24tY29tcG9zaXRlZCBj
b250ZW50Iik7CisjZW5kaWYKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldERy
YXdzQ29udGVudCh0cnVlKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldENv
bnRlbnRzT3BhcXVlKG1fd2ViUGFnZS0+ZHJhd3NCYWNrZ3JvdW5kKCkgJiYgIW1fd2ViUGFnZS0+
ZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoKSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKworICAgIG1fcm9vdExheWVyLT5h
ZGRDaGlsZChtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpOworCisgICAgaWYgKG1f
d2ViUGFnZS0+aGFzUGFnZU92ZXJsYXkoKSkKKyAgICAgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXll
cigpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dFF0OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCBsYXllckZsdXNoaW5nRW5h
YmxlZCkKK3sKKyAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPT0gbGF5ZXJG
bHVzaGluZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGF5ZXJGbHVzaFNjaGVk
dWxpbmdFbmFibGVkID0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQ7CisKKyAgICBpZiAobV9sYXllckZs
dXNoU2NoZWR1bGluZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGNhbmNlbFBlbmRp
bmdMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzY2hlZHVsZUxheWVy
Rmx1c2goKQoreworICAgIGlmICghbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghbV9sYXllckZsdXNoVGltZXIuaXNBY3RpdmUoKSkKKyAg
ICAgICAgbV9sYXllckZsdXNoVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIExheWVy
VHJlZUhvc3RRdDo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKQoreworICAgIG1fbGF5ZXJGbHVz
aFRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFNob3VsZE5vdGlm
eUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCBub3RpZnlBZnRlclNjaGVkdWxlZExh
eWVyRmx1c2gpCit7CisgICAgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2ggPSBub3Rp
ZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpz
ZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xh
eWVyKQoreworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+cmVtb3ZlQWxsQ2hpbGRy
ZW4oKTsKKworICAgIC8vIEFkZCB0aGUgYWNjZWxlcmF0ZWQgbGF5ZXIgdHJlZSBoaWVyYXJjaHku
CisgICAgaWYgKGdyYXBoaWNzTGF5ZXIpCisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllci0+YWRkQ2hpbGQoZ3JhcGhpY3NMYXllcik7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0
OjppbnZhbGlkYXRlKCkKK3sKKyAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworCisgICAg
QVNTRVJUKG1faXNWYWxpZCk7CisgICAgbV9yb290TGF5ZXIgPSBudWxscHRyOworICAgIG1faXNW
YWxpZCA9IGZhbHNlOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0Tm9uQ29tcG9zaXRl
ZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAg
ICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0
KTsKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQorICAgICAgICBtX3BhZ2VPdmVybGF5TGF5
ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVz
aCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRl
bnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNjcm9sbE9mZnNldCkKK3sKKyAgICBzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVk
RGlzcGxheShzY3JvbGxSZWN0KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmZvcmNlUmVw
YWludCgpCit7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
SG9zdFF0OjpzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpCit7
CisgICAgbV9yb290TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICAvLyBJZiB0aGUgbmV3
U2l6ZSBleHBvc2VzIG5ldyBhcmVhcyBvZiB0aGUgbm9uLWNvbXBvc2l0ZWQgY29udGVudCBhIHNl
dE5lZWRzRGlzcGxheSBpcyBuZWVkZWQKKyAgICAvLyBmb3IgdGhvc2UgbmV3bHkgZXhwb3NlZCBh
cmVhcy4KKyAgICBGbG9hdFNpemUgb2xkU2l6ZSA9IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXll
ci0+c2l6ZSgpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShuZXdT
aXplKTsKKworICAgIGlmIChuZXdTaXplLndpZHRoKCkgPiBvbGRTaXplLndpZHRoKCkpIHsKKyAg
ICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5ld1NpemUu
aGVpZ2h0KCkpLCBvbGRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29u
dGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KG9sZFNpemUud2lkdGgo
KSwgMCwgbmV3U2l6ZS53aWR0aCgpIC0gb2xkU2l6ZS53aWR0aCgpLCBoZWlnaHQpKTsKKyAgICB9
CisKKyAgICBpZiAobmV3U2l6ZS5oZWlnaHQoKSA+IG9sZFNpemUuaGVpZ2h0KCkpCisgICAgICAg
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0
UmVjdCgwLCBvbGRTaXplLmhlaWdodCgpLCBuZXdTaXplLndpZHRoKCksIG5ld1NpemUuaGVpZ2h0
KCkgLSBvbGRTaXplLmhlaWdodCgpKSk7CisKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQor
ICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICBzY2hl
ZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmRpZEluc3RhbGxQ
YWdlT3ZlcmxheSgpCit7CisgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOworICAgIHNjaGVk
dWxlTGF5ZXJGbHVzaCgpOworCit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpkaWRVbmluc3Rh
bGxQYWdlT3ZlcmxheSgpCit7CisgICAgZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICBz
Y2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFBhZ2VP
dmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAg
QVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRO
ZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisK
K2Jvb2wgTGF5ZXJUcmVlSG9zdFF0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKQoreworICAg
IG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAg
ICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhp
c0xheWVyT25seSgpOworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCisgICAgICAgIG1fcGFn
ZU92ZXJsYXlMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisK
KyAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5z
eW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworfQorCisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdFF0OjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpCit7CisgICAgbV93ZWJQ
YWdlLT5sYXlvdXRJZk5lZWRlZCgpOworCisgICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKSkgeworICAgICAgICBp
ZiAobV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gpIHsKKyAgICAgICAgICAgIC8vIExl
dCB0aGUgZHJhd2luZyBhcmVhIGtub3cgdGhhdCB3ZSd2ZSBkb25lIGEgZmx1c2ggb2YgdGhlIGxh
eWVyIGNoYW5nZXMuCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYUltcGwqPiht
X3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCkpLT5sYXllckhvc3REaWRGbHVzaExheWVycygpOworICAg
ICAgICAgICAgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2ggPSBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBXZWJHcmFwaGljc0xheWVyOjpzZW5kTGF5ZXJzVG9VSVByb2Nlc3MobV9y
b290TGF5ZXIuZ2V0KCksIG1fd2ViUGFnZSk7CisgICAgfQorfQorCit2b2lkIExheWVyVHJlZUhv
c3RRdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoVGltZXI8TGF5ZXJUcmVlSG9zdFF0PiopCit7Cisg
ICAgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0
UXQ6OmNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKQoreworICAgIEFTU0VSVCghbV9wYWdlT3Zlcmxh
eUxheWVyKTsKKworICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0
ZSh0aGlzKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROYW1l
KCJMYXllclRyZWVIb3N0UXQgcGFnZSBvdmVybGF5IGNvbnRlbnQiKTsKKyNlbmRpZgorCisgICAg
bV9wYWdlT3ZlcmxheUxheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9wYWdlT3Zl
cmxheUxheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKworICAgIG1fcm9vdExheWVy
LT5hZGRDaGlsZChtX3BhZ2VPdmVybGF5TGF5ZXIuZ2V0KCkpOworfQorCit2b2lkIExheWVyVHJl
ZUhvc3RRdDo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKQoreworICAgIEFTU0VSVChtX3BhZ2VP
dmVybGF5TGF5ZXIpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+cmVtb3ZlRnJvbVBhcmVudCgp
OworICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
SG9zdFF0Ojpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqLCBkb3VibGUgdGltZSkKK3sKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6Om5vdGlmeVN5
bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKK3sKK30KKwordm9pZCBM
YXllclRyZWVIb3N0UXQ6OnBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciogZ3JhcGhpY3NMYXllciwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRl
eHQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBjbGlwUmVjdCkKK3sKKyAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX25vbkNvbXBv
c2l0ZWRDb250ZW50TGF5ZXIpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5kcmF3UmVjdChncmFwaGlj
c0NvbnRleHQsIGNsaXBSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChn
cmFwaGljc0xheWVyID09IG1fcGFnZU92ZXJsYXlMYXllcikgeworICAgICAgICBtX3dlYlBhZ2Ut
PmRyYXdQYWdlT3ZlcmxheShncmFwaGljc0NvbnRleHQsIGNsaXBSZWN0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KK30KKworYm9vbCBMYXllclRyZWVIb3N0UXQ6OnNob3dEZWJ1Z0JvcmRlcnMo
KSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkt
PnNob3dEZWJ1Z0JvcmRlcnMoKTsKK30KKworYm9vbCBMYXllclRyZWVIb3N0UXQ6OnNob3dSZXBh
aW50Q291bnRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+
c2V0dGluZ3MoKS0+c2hvd1JlcGFpbnRDb3VudGVyKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9z
dDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisjZWxzZQogI2luY2x1ZGUgIkxheWVyVHJlZUhv
c3QuaCIKIAordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCkBA
IC0zNSwzICszMDQsNCBAQCBib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRD
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVy
VHJlZUhvc3RRdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk3IEBACisvKgorICAgIENvcHly
aWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisqLworCisjaWZuZGVmIExheWVyVHJlZUhvc3RRdF9oCisjZGVmaW5lIExheWVyVHJlZUhvc3RR
dF9oCisKKyNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVl
SG9zdC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xh
eWVyQ2xpZW50Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgVXBkYXRlSW5mbzsKK2NsYXNzIFdlYlBhZ2U7CisKK2NsYXNzIExheWVyVHJl
ZUhvc3RRdCA6IHB1YmxpYyBMYXllclRyZWVIb3N0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xp
ZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0UXQ+IGNy
ZWF0ZShXZWJQYWdlKik7CisgICAgdmlydHVhbCB+TGF5ZXJUcmVlSG9zdFF0KCk7CisKKyAgICBz
dGF0aWMgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKKworICAgIHZpcnR1
YWwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCgpIHsgcmV0dXJuIG1f
bGF5ZXJUcmVlQ29udGV4dDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckZsdXNoU2NoZWR1
bGluZ0VuYWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaCgp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXll
ckZsdXNoKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsK
KworICAgIHZpcnR1YWwgdm9pZCBzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShj
b25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbE5vbkNvbXBv
c2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCBmb3JjZVJl
cGFpbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBuZXdTaXplKTsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRJbnN0YWxsUGFnZU92ZXJs
YXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCkgeyB9CisgICAgdmly
dHVhbCB2b2lkIHJlc3VtZVJlbmRlcmluZygpIHsgfQorCitwcm90ZWN0ZWQ6CisgICAgZXhwbGlj
aXQgTGF5ZXJUcmVlSG9zdFF0KFdlYlBhZ2UqKTsKKworcHJpdmF0ZToKKyAgICAvLyBHcmFwaGlj
c0xheWVyQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29u
c3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKTsKKyAgICB2aXJ0dWFsIHZv
aWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
KiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50
aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKKyAgICB2aXJ0dWFs
IGJvb2wgc2hvd0RlYnVnQm9yZGVycygpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaG93UmVw
YWludENvdW50ZXIoKSBjb25zdDsKKworICAgIC8vIExheWVyVHJlZUhvc3RRdAorICAgIHZvaWQg
Y3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOworICAgIHZvaWQgZGVzdHJveVBhZ2VPdmVybGF5TGF5
ZXIoKTsKKyAgICBib29sIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOworICAgIHZvaWQgY2Fu
Y2VsUGVuZGluZ0xheWVyRmx1c2goKTsKKyAgICB2b2lkIHBlcmZvcm1TY2hlZHVsZWRMYXllckZs
dXNoKCk7CisgICAgdm9pZCBzZW5kTGF5ZXJzVG9VSSgpOworCisgICAgT3duUHRyPFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworCisgICAgLy8gVGhlIGxheWVyIHdoaWNoIGNv
bnRhaW5zIGFsbCBub24tY29tcG9zaXRlZCBjb250ZW50LgorICAgIE93blB0cjxXZWJDb3JlOjpH
cmFwaGljc0xheWVyPiBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXI7CisKKyAgICAvLyBUaGUg
cGFnZSBvdmVybGF5IGxheWVyLiBXaWxsIGJlIG51bGwgaWYgdGhlcmUncyBubyBwYWdlIG92ZXJs
YXkuCisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcGFnZU92ZXJsYXlMYXll
cjsKKworICAgIGJvb2wgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7CisgICAgYm9v
bCBtX2lzVmFsaWQ7CisgICAgTGF5ZXJUcmVlQ29udGV4dCBtX2xheWVyVHJlZUNvbnRleHQ7Cisg
ICAgdm9pZCBsYXllckZsdXNoVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxMYXllclRyZWVIb3N0
UXQ+Kik7CisgICAgV2ViQ29yZTo6VGltZXI8TGF5ZXJUcmVlSG9zdFF0PiBtX2xheWVyRmx1c2hU
aW1lcjsKKyAgICBib29sIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkOworfTsKKworfQor
CisjZW5kaWYgLy8gTGF5ZXJUcmVlSG9zdFF0X2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97178</attachid>
            <date>2011-06-14 16:00:02 -0700</date>
            <delta_ts>2011-06-14 17:12:41 -0700</delta_ts>
            <desc>Patch 4: Expose viewportVisibleRect, so that we can avoid rendering texture outside of our view.</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>3971</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4NjI1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDYtMTIgIE5vJ2FtIFJv
c2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIEltcGxlbWVudCBhY2NlbGVyYXRlZCBj
b21wb3NpdGluZyBvbiBXSzIgUXQgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTY5MzUKKworICAgICAgICBFeHBvc2Ugdmlld3BvcnRWaXNpYmxl
UmVjdCgpLCBzbyB0aGF0IHdlIGNhbiBkZXRlY3Qgd2hpY2ggcGFydHMgb2YgYSB0ZXh0dXJlIGFj
dHVhbGx5CisgICAgICAgIG5lZWQgdG8gYmUgdXBsb2FkZWQuCisKKyAgICAgICAgVG9nZXRoZXIg
d2l0aCBWaWF0Y2hlc2xhdiBPc3RhcGVua28uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0
L3F3a3BhZ2UuY3BwOgorICAgICAgICAoUVdLUGFnZVByaXZhdGU6OnZpZXdwb3J0VmlzaWJsZVJl
Y3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXdrcGFnZV9wLmg6CisgICAgICAgICog
VUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1dlYlBhZ2VQcm94eVF0LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5Ojp2aWV3cG9ydFZpc2libGVSZWN0KToKKwogMjAxMS0wNi0x
MiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEVyaWMgU2VpZGVsLgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCShy
ZXZpc2lvbiA4ODYyMSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwMSw2ICsxMDEsNyBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0o
UVQpCiAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5kWm9vbWFibGVBcmVhKGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0
IHZpZXdwb3J0VmlzaWJsZVJlY3QoKSBjb25zdCA9IDA7CiAjZW5kaWYKIAogICAgIHZpcnR1YWwg
dm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJikgPSAwOwpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gODg2MjEpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4
OSw2ICs0ODksNyBAQCBwdWJsaWM6CiAKICNpZiBQTEFURk9STShRVCkKICAgICB2b2lkIGZpbmRa
b29tYWJsZUFyZWFGb3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworICAgIFdlYkNv
cmU6OkludFJlY3Qgdmlld3BvcnRWaXNpYmxlUmVjdCgpOwogI2VuZGlmCiAKICAgICB2b2lkIGFk
dmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdrcGFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdlLmNwcAkocmV2
aXNpb24gODg2MjEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a3BhZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MjYsNiArODI2LDEyIEBAIHZvaWQgUVdLUGFnZVByaXZh
dGU6OmRpZEZpbmRab29tYWJsZUFyZWEKICAgICBlbWl0IHEtPnpvb21hYmxlQXJlYUZvdW5kKFFS
ZWN0KGFyZWEpKTsKIH0KIAorV2ViQ29yZTo6SW50UmVjdCBRV0tQYWdlUHJpdmF0ZTo6dmlld3Bv
cnRWaXNpYmxlUmVjdCgpIGNvbnN0Cit7CisgICAgUUdyYXBoaWNzV0tWaWV3KiB3a1ZpZXcgPSBz
dGF0aWNfY2FzdDxRR3JhcGhpY3NXS1ZpZXcqPih2aWV3KTsKKyAgICByZXR1cm4gZW5jbG9zaW5n
SW50UmVjdChGbG9hdFJlY3Qod2tWaWV3LT52aXNpYmxlUmVjdCgpKSk7Cit9CisKIGJvb2wgUVdL
UGFnZTo6aXNDb25uZWN0ZWRUb0VuZ2luZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGQtPmlzQ29u
bmVjdGVkVG9FbmdpbmU7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3
a3BhZ2VfcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cXdrcGFnZV9wLmgJKHJldmlzaW9uIDg4NjIxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9xd2twYWdlX3AuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlbGF1bmNoUHJvY2VzcygpOwogICAgIHZpcnR1YWwg
dm9pZCBkaWRDaGFuZ2VDb250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogICAg
IHZpcnR1YWwgdm9pZCBkaWRGaW5kWm9vbWFibGVBcmVhKGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgdmlld3BvcnRWaXNpYmxlUmVjdCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7
CiAgICAgdmlydHVhbCB2b2lkIHNldFZpZXdwb3J0QXJndW1lbnRzKGNvbnN0IFdlYkNvcmU6OlZp
ZXdwb3J0QXJndW1lbnRzJik7CiAgICAgdmlydHVhbCB2b2lkIHRvb2xUaXBDaGFuZ2VkKGNvbnN0
IFdURjo6U3RyaW5nJiwgY29uc3QgV1RGOjpTdHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9XZWJQYWdlUHJveHlRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L1dlYlBhZ2VQcm94eVF0LmNwcAkocmV2aXNpb24gODg2MjEpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViUGFnZVByb3h5UXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCiAKKyNpbmNsdWRlICJQYWdlQ2xpZW50LmgiCiAjaW5jbHVkZSA8V2Vi
Q29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQ2LDQgKzQ3
LDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmxvYWRSZWNlbnRTZWFyY2hlcyhjbwogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKK1dlYkNvcmU6OkludFJlY3QgV2ViUGFnZVByb3h5Ojp2aWV3cG9y
dFZpc2libGVSZWN0KCkKK3sKKyAgICByZXR1cm4gbV9wYWdlQ2xpZW50LT52aWV3cG9ydFZpc2li
bGVSZWN0KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97188</attachid>
            <date>2011-06-14 16:31:08 -0700</date>
            <delta_ts>2011-06-14 19:47:50 -0700</delta_ts>
            <desc>Patch 6: Glue LayerTreeHost to DrawingAreaImpl via a new LayerTreeHostProxy class</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>20889</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4ODY5KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTEtMDYtMTQgIE5vJ2FtIFJv
c2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4gYW5kIFZpYXRjaGVzbGF2IE9zdGFw
ZW5rbyA8b3N0YXBlbmtvLnZpYXRjaGVzbGF2QG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIEltcGxlbWVudCBhY2NlbGVyYXRl
ZCBjb21wb3NpdGluZyBvbiBXSzIgUXQgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY5MzUKKworICAgICAgICBQYXRjaCB0aGUgY29tcG9zaXRl
ZCBpbmZvcm1hdGlvbiBmcm9tIExheWVyVHJlZUhvc3QgdG8gdGhlIERyYXdpbmdBcmVhLgorICAg
ICAgICBSZWdlbmVyYXRlIHRoZSBsYXllciB0cmVlIHVzaW5nIFRleHR1cmVNYXBwZXIsIGJhc2Vk
IG9uIHRoZSBsYXllciB0cmVlIGNyZWF0ZWQgaW4gV2ViR3JhcGhpY3NMYXllci4KKyAgICAgICAg
VGhpcyB3b3JrIGlzIGRvbmUgaW4gTGF5ZXJUcmVlSG9zdFByb3h5LCB3aGljaCBpcyBjdXJyZW50
bHkgb25seSBpbXBsZW1lbnRlZCBmb3IgUXQuCisKKyAgICAgICAgKiBXZWJLaXQyLnBybzoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVh
UHJveHlJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBs
OjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6RHJh
d2luZ0FyZWFQcm94eUltcGw6OnN5bmNDb21wb3NpdGluZ0xheWVycyk6CisgICAgICAgIChXZWJL
aXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBsOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyQ29udGVudCk6
CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBsOjp1cGRhdGVXZWJWaWV3KToK
KyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OnZpZXdwb3J0VmlzaWJsZVJl
Y3QpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6Y29udGVudHNSZWN0
KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmNvbnRlbnRzU2NhbGUp
OgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6YmFja2luZ1N0b3JlUmVh
ZHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oOgorICAgICAg
ICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZHJhd2luZ0FyZWFQcm94eSk6CisgICAg
ICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBsOjp3ZWJQYWdlUHJveHkpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaDogQWRkZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcDogQWRkZWQuCisKIDIwMTEtMDYtMTQg
IEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBTYW0gV2VpbmlnLgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8JKHJldmlzaW9uIDg4Njk4KQorKysg
U291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTE4NCw2ICsxODQs
NyBAQCBIRUFERVJTICs9IFwKICAgICBVSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdFByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuaCBc
CiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmggXAorICAgIFVJUHJvY2Vz
cy9MYXllclRyZWVIb3N0UHJveHkuaCBcCiAgICAgVUlQcm9jZXNzL1BhZ2VDbGllbnQuaCBcCiAg
ICAgVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmggXAogICAgIFVJUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5oIFwKQEAgLTQ0MSw2ICs0NDIsNyBAQCBTT1VSQ0VT
ICs9IFwKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eS5jcHAgXAog
ICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3Mv
V2ViVUlDbGllbnQuY3BwIFwKKyAgICBVSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQu
Y3BwIFwKICAgICBVSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVByb3h5UXQuY3BwIFwKICAg
ICBVSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVRpbGVRdC5jcHAgXAogICAgIFVJUHJvY2Vz
cy9xdC9UZXh0Q2hlY2tlclF0LmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
RHJhd2luZ0FyZWFQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9EcmF3aW5nQXJlYVByb3h5LmgJKHJldmlzaW9uIDg4Njk4KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAs
MTMgQEAgcHVibGljOgogICAgIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUoKSBjb25zdCB7
IHJldHVybiBtX3NpemU7IH0KICAgICB2b2lkIHNldFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCk7CiAKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlV2ViVmlldygpID0gMDsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qg
dmlld3BvcnRWaXNpYmxlUmVjdCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6Oklu
dFJlY3QgY29udGVudHNSZWN0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZmxvYXQgY29udGVu
dHNTY2FsZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYmFja2luZ1N0b3JlUmVhZHko
KSBjb25zdCA9IDA7CisjZW5kaWYKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBEcmF3aW5nQXJl
YVByb3h5KERyYXdpbmdBcmVhVHlwZSwgV2ViUGFnZVByb3h5Kik7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcAkocmV2aXNp
b24gODg2OTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUlt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCwxMCBAQAogI2luY2x1ZGUgIldlYlBh
Z2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgogCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaW5jbHVkZSAiTGF5
ZXJUcmVlSG9zdFByb3h5LmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNjcsOCArNzEsMTMgQEAgdm9pZCBEcmF3aW5nQXJlYVBy
b3h5SW1wbDo6cGFpbnQoQmFja2luZwogewogICAgIHVucGFpbnRlZFJlZ2lvbiA9IHJlY3Q7CiAK
LSAgICBpZiAoaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpCisgICAgaWYgKGlzSW5B
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpKSB7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgICAgIGlmIChtX2xheWVyVHJlZUhv
c3RQcm94eSkKKyAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5LT5wYWludChjb250ZXh0
LCByZWN0LCB1bnBhaW50ZWRSZWdpb24pOworI2VuZGlmCiAgICAgICAgIHJldHVybjsKKyAgICB9
CiAKICAgICBBU1NFUlQobV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRCA8PSBtX25leHRCYWNr
aW5nU3RvcmVTdGF0ZUlEKTsKICAgICBpZiAobV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRCA8
IG1fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQpIHsKQEAgLTMyOSw2ICszMzgsMTAgQEAgdm9pZCBE
cmF3aW5nQXJlYVByb3h5SW1wbDo6ZW50ZXJBY2NlbGVyYQogICAgIG1fYmFja2luZ1N0b3JlID0g
bnVsbHB0cjsKICAgICBtX2xheWVyVHJlZUNvbnRleHQgPSBsYXllclRyZWVDb250ZXh0OwogICAg
IG1fd2ViUGFnZVByb3h5LT5lbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGxheWVyVHJl
ZUNvbnRleHQpOworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBpZiAoIW1fbGF5ZXJUcmVl
SG9zdFByb3h5KQorICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eSA9IGFkb3B0UHRyKG5ldyBM
YXllclRyZWVIb3N0UHJveHkodGhpcykpOworI2VuZGlmCiB9CiAKIHZvaWQgRHJhd2luZ0FyZWFQ
cm94eUltcGw6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpCkBAIC0zNTgsNCArMzcx
LDQxIEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmRpc2NhcmRCYWNraW4KICAgICBiYWNr
aW5nU3RvcmVTdGF0ZURpZENoYW5nZShEb05vdFJlc3BvbmRJbW1lZGlhdGVseSk7CiB9CiAKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKK3Zv
aWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OnN5bmNDb21wb3NpdGluZ0xheWVycyhjb25zdCBXZWJM
YXllclRyZWVJbmZvJiBpbmZvKQoreworICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5LT5zeW5jQ29t
cG9zaXRpbmdMYXllcnMoaW5mbyk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OnVw
ZGF0ZUNvbXBvc2l0aW5nTGF5ZXJDb250ZW50KGNvbnN0IFdlYkxheWVyVXBkYXRlSW5mbyYgaW5m
bykKK3sKKyAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+dXBkYXRlQ29tcG9zaXRpbmdMYXllckNv
bnRlbnQoaW5mbyk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OnVwZGF0ZVdlYlZp
ZXcoKQoreworICAgIG1fd2ViUGFnZVByb3h5LT5zZXRWaWV3TmVlZHNEaXNwbGF5KHZpZXdwb3J0
VmlzaWJsZVJlY3QoKSk7Cit9CisKK1dlYkNvcmU6OkludFJlY3QgRHJhd2luZ0FyZWFQcm94eUlt
cGw6OnZpZXdwb3J0VmlzaWJsZVJlY3QoKSBjb25zdAoreworICAgIHJldHVybiB3ZWJQYWdlUHJv
eHkoKS0+dmlld3BvcnRWaXNpYmxlUmVjdCgpOworfQorCitXZWJDb3JlOjpJbnRSZWN0IERyYXdp
bmdBcmVhUHJveHlJbXBsOjpjb250ZW50c1JlY3QoKSBjb25zdAoreworICAgIHJldHVybiB2aWV3
cG9ydFZpc2libGVSZWN0KCk7Cit9CisKK2Zsb2F0IERyYXdpbmdBcmVhUHJveHlJbXBsOjpjb250
ZW50c1NjYWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMTsKK30KKworYm9vbCBEcmF3aW5nQXJl
YVByb3h5SW1wbDo6YmFja2luZ1N0b3JlUmVhZHkoKSBjb25zdAoreworICAgIHJldHVybiB0cnVl
OworfQorCisjZW5kaWYKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmgJKHJldmlzaW9uIDg4Njk4
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2Ns
YXNzIExheWVyVHJlZUhvc3RQcm94eTsKIGNsYXNzIFJlZ2lvbjsKIAogY2xhc3MgRHJhd2luZ0Fy
ZWFQcm94eUltcGwgOiBwdWJsaWMgRHJhd2luZ0FyZWFQcm94eSB7CkBAIC03OSw2ICs4MCwxNyBA
QCBwcml2YXRlOgogCiAgICAgdm9pZCBkaXNjYXJkQmFja2luZ1N0b3JlU29vbigpOwogICAgIHZv
aWQgZGlzY2FyZEJhY2tpbmdTdG9yZSgpOworICAgIERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdB
cmVhUHJveHkoKSB7IHJldHVybiB0aGlzOyB9CisgICAgV2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJv
eHkoKSBjb25zdCB7IHJldHVybiBtX3dlYlBhZ2VQcm94eTsgfQorI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVXZWJWaWV3KCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHZpZXdwb3J0Vmlz
aWJsZVJlY3QoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgY29udGVudHNS
ZWN0KCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBjb250ZW50c1NjYWxlKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBib29sIGJhY2tpbmdTdG9yZVJlYWR5KCkgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIHN5bmNDb21wb3NpdGluZ0xheWVycyhjb25zdCBXZWJMYXllclRyZWVJbmZvJik7CisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJDb250ZW50KGNvbnN0IFdlYkxheWVy
VXBkYXRlSW5mbyYpOworI2VuZGlmCiAKICAgICAvLyBUaGUgc3RhdGUgSUQgY29ycmVzcG9uZGlu
ZyB0byBvdXIgY3VycmVudCBiYWNraW5nIHN0b3JlLiBVcGRhdGVkIHdoZW5ldmVyIHdlIGFsbG9j
YXRlCiAgICAgLy8gYSBuZXcgYmFja2luZyBzdG9yZS4gQW55IG1lc3NhZ2VzIHJlY2VpdmVkIHRo
YXQgY29ycmVzcG9uZCB0byBhbiBlYXJsaWVyIHN0YXRlIGFyZSBpZ25vcmVkLApAQCAtMTA1LDYg
KzExNyw5IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPEJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3Rv
cmU7CiAKICAgICBSdW5Mb29wOjpUaW1lcjxEcmF3aW5nQXJlYVByb3h5SW1wbD4gbV9kaXNjYXJk
QmFja2luZ1N0b3JlVGltZXI7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBV
U0UoVEVYVFVSRV9NQVBQRVIpCisgICAgT3duUHRyPExheWVyVHJlZUhvc3RQcm94eT4gbV9sYXll
clRyZWVIb3N0UHJveHk7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHku
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lm
bmRlZiBMYXllclRyZWVIb3N0UHJveHlfaAorI2RlZmluZSBMYXllclRyZWVIb3N0UHJveHlfaAor
CisjaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5o
IgorI2luY2x1ZGUgIlJlZ2lvbi5oIgorI2luY2x1ZGUgIlJ1bkxvb3AuaCIKKyNpbmNsdWRlICJX
ZWJMYXllclRyZWVJbmZvLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0lu
dFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgorCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorbmFtZXNwYWNlIFdlYkNvcmUgewor
Y2xhc3MgVGV4dHVyZU1hcHBlcjsKK30KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgV2ViTGF5ZXJUcmVlSW5mbzsKK2NsYXNzIFdlYkxheWVyVXBkYXRlSW5mbzsKKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NsYXNzIExheWVyVHJlZUhvc3RQcm94eSA6IHB1Ymxp
YyBHcmFwaGljc0xheWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBMYXllclRyZWVIb3N0UHJveHko
RHJhd2luZ0FyZWFQcm94eSopOworICAgIHZpcnR1YWwgfkxheWVyVHJlZUhvc3RQcm94eSgpOwor
ICAgIHZvaWQgc3luY0NvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFdlYkxheWVyVHJlZUluZm8mKTsK
KyAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJDb250ZW50KGNvbnN0IFdlYkxheWVyVXBk
YXRlSW5mbyYpOworICAgIHZvaWQgcGFpbnRDb21wb3NpdGluZ0xheWVyKFBsYXRmb3JtRHJhd2lu
Z0NvbnRleHQgdGFyZ2V0UGFpbnRlciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZv
aWQgZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3Nh
Z2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisgICAgdm9pZCBwYWludChCYWNraW5n
U3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jiwg
UmVnaW9uJik7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHVwZGF0ZVdlYlZpZXcoKTsKKworICAg
IEdyYXBoaWNzTGF5ZXIqIGNyZWF0ZUxheWVyKCk7CisKKyAgICBHcmFwaGljc0xheWVyKiBsYXll
ckJ5SUQoV2ViTGF5ZXJJRCBpZCkgeyByZXR1cm4gaWQgPyBtX2xheWVycy5nZXQoaWQpLmxheWVy
IDogMDsgfQorICAgIEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExh
eWVyLmdldCgpOyB9CisKKyAgICB2b2lkIHN5bmNEZWxldGVkTGF5ZXJzKCk7CisgICAgdmlydHVh
bCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4
dCYsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmly
dHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRv
dWJsZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBHcmFw
aGljc0xheWVyKikgeyB9CisgICAgdmlydHVhbCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgUnVuTG9vcDo6VGltZXI8TGF5ZXJUcmVl
SG9zdFByb3h5PiBtX2FuaW1hdGlvblRpbWVyOworICAgIERyYXdpbmdBcmVhUHJveHkqIG1fZHJh
d2luZ0FyZWFQcm94eTsKKworICAgIHN0cnVjdCBMYXllckRhdGEgeworICAgICAgICBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKiBsYXllcjsKKyAgICAgICAgUUltYWdlIGltYWdlOworICAgICAgICBM
YXllckRhdGEoKSA6IGxheWVyKDApIHsgfQorICAgIH07CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8
V2ViTGF5ZXJJRCwgTGF5ZXJEYXRhPiBMYXllck1hcDsKKyAgICBmbG9hdCBtX2NvbnRlbnRTY2Fs
ZTsKKworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBPd25QdHI8VGV4dHVyZU1hcHBlcj4g
bV90ZXh0dXJlTWFwcGVyOworI2VuZGlmCisgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fcm9v
dExheWVyOworICAgIFZlY3RvcjxXZWJMYXllcklEPiBtX2xheWVyc1RvRGVsZXRlOworCisgICAg
TGF5ZXJNYXAgbV9sYXllcnM7CisgICAgV2ViTGF5ZXJJRCBtX3Jvb3RMYXllcklEOworfTsKKwor
fQorCisjZW5kaWYgLy8gTGF5ZXJUcmVlSG9zdFByb3h5X2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlR
dC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjc2IEBACisvKgorICAgIENvcHlyaWdodCAo
QykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5LmgiCisKKyNpbmNsdWRlICJEcmF3aW5nQXJl
YU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmgiCisjaW5j
bHVkZSAiTWVzc2FnZUlELmgiCisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlclF0LmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgi
CisjaW5jbHVkZSAidGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVk
ZSAidGV4bWFwL1RleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBl
ck5vZGUuaCIKKyNpbmNsdWRlIDxRRGF0ZVRpbWU+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitH
cmFwaGljc0xheWVyKiBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUxheWVyKCkKK3sKKyAgICBy
ZXR1cm4gbmV3IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKHRoaXMpOworfQorCit2b2lkIExh
eWVyVHJlZUhvc3RQcm94eTo6c3luY0RlbGV0ZWRMYXllcnMoKQoreworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9sYXllcnNUb0RlbGV0ZS5zaXplKCk7ICsraSkgeworICAgICAgICBjb25z
dCBXZWJMYXllcklEIGlkID0gbV9sYXllcnNUb0RlbGV0ZVtpXTsKKworICAgICAgICAvLyBUaGlz
IG1pZ2h0IGhhcHBlbiBpZiB0aGUgd2ViIHByb2Nlc3MgZGVsZXRlcyB0aGUgbGF5ZXIgYWZ0ZXIg
dGhlIFVJIHByb2Nlc3MgYWxyZWFkeSBjbGVhcmVkIHRoZSBsYXllcnMgaGVyZS4KKyAgICAgICAg
aWYgKCFtX2xheWVycy5jb250YWlucyhpZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgZGVsZXRlIG1fbGF5ZXJzLmdldChpZCkubGF5ZXI7CisgICAgICAgIG1fbGF5ZXJzLnJlbW92
ZShpZCk7CisgICAgfQorfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRDb250ZW50
cyhjb25zdCBHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBH
cmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYgaW5DbGlwKQoreworICAg
IGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuYmVnaW4oKTsgaXQgIT0gbV9s
YXllcnMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT5zZWNvbmQubGF5ZXIgIT0gbGF5
ZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBMYXllckRhdGEmIGRhdGEgPSBp
dC0+c2Vjb25kOworICAgICAgICBJbnRSZWN0IGNsaXAoaW5DbGlwKTsKKyAgICAgICAgY2xpcC5p
bnRlcnNlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBkYXRhLmltYWdlLnNpemUoKSkpOwor
ICAgICAgICBRUGFpbnRlciogcGFpbnRlciA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7Cisg
ICAgICAgIHBhaW50ZXItPnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25N
b2RlX1NvdXJjZSk7CisgICAgICAgIHBhaW50ZXItPmRyYXdJbWFnZShjbGlwLCBkYXRhLmltYWdl
LCBjbGlwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworTGF5ZXJUcmVlSG9zdFByb3h5
OjpMYXllclRyZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWFQcm94eSkK
KyAgICA6IG1fYW5pbWF0aW9uVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmTGF5ZXJUcmVl
SG9zdFByb3h5Ojp1cGRhdGVXZWJWaWV3KQorICAgICwgbV9kcmF3aW5nQXJlYVByb3h5KGRyYXdp
bmdBcmVhUHJveHkpCit7CisgICAgbV9yb290TGF5ZXIgPSBhZG9wdFB0cihjcmVhdGVMYXllcigp
KTsKKyAgICBtX3Jvb3RMYXllci0+c2V0TWFza3NUb0JvdW5kcyhmYWxzZSk7CisgICAgbV9yb290
TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7CisgICAgbV9yb290TGF5ZXItPnNldEFuY2hv
clBvaW50KEZsb2F0UG9pbnQzRCgwLCAwLCAwKSk7CisKKyAgICAvLyBUaGUgcm9vdCBsYXllciBz
aG91bGQgbm90IGhhdmUgemVybyBzaXplLCBvciBpdCB3b3VsZCBiZSBvcHRpbWl6ZWQgb3V0Lgor
ICAgIG1fcm9vdExheWVyLT5zZXRTaXplKEZsb2F0U2l6ZSgxLjAsIDEuMCkpOworfQorCitMYXll
clRyZWVIb3N0UHJveHk6On5MYXllclRyZWVIb3N0UHJveHkoKQoreworfQorCit2b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6c3luY0NvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFdlYkxheWVyVHJlZUlu
Zm8mIGluZm8pCit7CisgICAgbV9jb250ZW50U2NhbGUgPSBpbmZvLmNvbnRlbnRTY2FsZTsKKyAg
ICBtX2xheWVyc1RvRGVsZXRlLmFwcGVuZChpbmZvLmRlbGV0ZWRMYXllcnMpOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBpbmZvLmxheWVycy5zaXplKCk7ICsraSkgeworICAgICAgICBj
b25zdCBXZWJMYXllcklEIGlkID0gaW5mby5sYXllcnNbaV0uaWQ7CisKKyAgICAgICAgaWYgKG1f
bGF5ZXJzLmNvbnRhaW5zKGlkKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIExh
eWVyRGF0YSBkYXRhOworICAgICAgICBkYXRhLmxheWVyID0gY3JlYXRlTGF5ZXIoKTsKKyAgICAg
ICAgbV9sYXllcnMuYWRkKGlkLCBkYXRhKTsKKworICAgICAgICBpZiAoaWQgIT0gaW5mby5yb290
TGF5ZXJJRCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIG1fcm9vdExheWVyLT5y
ZW1vdmVBbGxDaGlsZHJlbigpOworICAgICAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQoZGF0YS5s
YXllcik7CisgICAgfQorCisgICAgaWYgKGluZm8ucm9vdExheWVySUQgIT0gbV9yb290TGF5ZXJJ
RCkgeworICAgICAgICBtX3Jvb3RMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKyAgICAgICAg
bV9yb290TGF5ZXJJRCA9IGluZm8ucm9vdExheWVySUQ7CisgICAgICAgIGlmICghbV9yb290TGF5
ZXJJRCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIExheWVyTWFwOjppdGVyYXRv
ciBpdCA9IG1fbGF5ZXJzLmZpbmQoaW5mby5yb290TGF5ZXJJRCk7CisgICAgICAgIGlmIChpdCAh
PSBtX2xheWVycy5lbmQoKSkKKyAgICAgICAgICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChpdC0+
c2Vjb25kLmxheWVyKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBsYXllckluZGV4ID0gMDsg
bGF5ZXJJbmRleCA8IGluZm8ubGF5ZXJzLnNpemUoKTsgKytsYXllckluZGV4KSB7CisgICAgICAg
IGNvbnN0IFdlYkxheWVySW5mbyYgbGF5ZXJJbmZvID0gaW5mby5sYXllcnNbbGF5ZXJJbmRleF07
CisgICAgICAgIFdlYkxheWVySUQgaWQgPSBsYXllckluZm8uaWQ7CisKKyAgICAgICAgTGF5ZXJN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmluZChpZCk7CisgICAgICAgIGlmIChpdCA9PSBt
X2xheWVycy5lbmQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIExheWVyRGF0
YSYgZGF0YSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gZGF0
YS5sYXllcjsKKworICAgICAgICBsYXllci0+c2V0TmFtZShsYXllckluZm8ubmFtZSk7CisKKyAg
ICAgICAgLy8gV2UgaGF2ZSBhIGNvbnRhaW5lciBsYXllciBhcyBhIHBhcmVudCB0byB0aGUgcm9v
dCBsYXllciwgc28gd2Ugc2hvdWxkbid0IHBhcmVudCBpdCB0byB0aGUgd2ViIHByb2Nlc3MgdmFs
dWUuCisgICAgICAgIGlmIChpZCAhPSBpbmZvLnJvb3RMYXllcklEKQorICAgICAgICAgICAgbGF5
ZXItPnNldFBhcmVudChsYXllckJ5SUQobGF5ZXJJbmZvLnBhcmVudCkpOworICAgICAgICBsYXll
ci0+c2V0UmVwbGljYXRlZEJ5TGF5ZXIobGF5ZXJCeUlEKGxheWVySW5mby5yZXBsaWNhKSk7Cisg
ICAgICAgIGxheWVyLT5zZXRNYXNrTGF5ZXIobGF5ZXJCeUlEKGxheWVySW5mby5tYXNrKSk7CisK
KyAgICAgICAgbGF5ZXItPnNldFBvc2l0aW9uKGxheWVySW5mby5wb3MpOworICAgICAgICBsYXll
ci0+c2V0U2l6ZShsYXllckluZm8uc2l6ZSk7CisgICAgICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0o
bGF5ZXJJbmZvLnRyYW5zZm9ybSk7CisgICAgICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChsYXll
ckluZm8uYW5jaG9yUG9pbnQpOworICAgICAgICBsYXllci0+c2V0Q2hpbGRyZW5UcmFuc2Zvcm0o
bGF5ZXJJbmZvLmNoaWxkcmVuVHJhbnNmb3JtKTsKKyAgICAgICAgbGF5ZXItPnNldEJhY2tmYWNl
VmlzaWJpbGl0eShsYXllckluZm8uYmFja2ZhY2VWaXNpYmxlKTsKKyAgICAgICAgbGF5ZXItPnNl
dENvbnRlbnRzT3BhcXVlKGxheWVySW5mby5jb250ZW50c09wYXF1ZSk7CisgICAgICAgIGxheWVy
LT5zZXRDb250ZW50c1JlY3QobGF5ZXJJbmZvLmNvbnRlbnRzUmVjdCk7CisgICAgICAgIGxheWVy
LT5zZXREcmF3c0NvbnRlbnQobGF5ZXJJbmZvLmRyYXdzQ29udGVudCk7CisKKyAgICAgICAgLy8g
TmV2ZXIgbWFrZSB0aGUgcm9vdCBsYXllciBjbGlwLgorICAgICAgICBsYXllci0+c2V0TWFza3NU
b0JvdW5kcyhpZCA9PSBpbmZvLnJvb3RMYXllcklEID8gZmFsc2UgOiBsYXllckluZm8ubWFza3NU
b0JvdW5kcyk7CisgICAgICAgIGxheWVyLT5zZXRPcGFjaXR5KGxheWVySW5mby5vcGFjaXR5KTsK
KyAgICAgICAgbGF5ZXItPnNldFByZXNlcnZlczNEKGxheWVySW5mby5wcmVzZXJ2ZXMzRCk7Cisg
ICAgICAgIFZlY3RvcjxHcmFwaGljc0xheWVyKj4gY2hpbGRyZW47CisKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsYXllckluZm8uY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBjaGlsZCA9IGxheWVyQnlJRChsYXllckluZm8uY2hp
bGRyZW5baV0pKQorICAgICAgICAgICAgICAgIGNoaWxkcmVuLmFwcGVuZChjaGlsZCk7CisgICAg
ICAgIH0KKyAgICAgICAgbGF5ZXItPnNldENoaWxkcmVuKGNoaWxkcmVuKTsKKworICAgICAgICBp
ZiAobGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICBsYXllci0+c2V0
Q29udGVudHNUb0ltYWdlKGxheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZS0+Y3JlYXRlSW1hZ2Uo
KS5nZXQoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGxh
eWVyLT5zZXRDb250ZW50c1RvSW1hZ2UoMCk7CisKKyAgICAgICAgaWYgKCFsYXllckluZm8uZHJh
d3NDb250ZW50KSB7CisgICAgICAgICAgICBkYXRhLmltYWdlID0gUUltYWdlKCk7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBJbnRTaXplIHdhbnRlZFNpemUobGF5
ZXJJbmZvLnNpemUud2lkdGgoKSwgbGF5ZXJJbmZvLnNpemUuaGVpZ2h0KCkpOworCisgICAgICAg
IGlmIChJbnRTaXplKGRhdGEuaW1hZ2Uuc2l6ZSgpKSAhPSBsYXllckluZm8uc2l6ZSkgeworICAg
ICAgICAgICAgUUltYWdlIGltYWdlKHdhbnRlZFNpemUud2lkdGgoKSwgd2FudGVkU2l6ZS5oZWln
aHQoKSwgbGF5ZXItPmNvbnRlbnRzT3BhcXVlKCkgPyBRSW1hZ2U6OkZvcm1hdF9SR0IxNiA6IFFJ
bWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsKKyAgICAgICAgICAgIGltYWdlLmZp
bGwoMCk7CisgICAgICAgICAgICBkYXRhLmltYWdlID0gaW1hZ2U7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB1cGRhdGVXZWJWaWV3KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojp1
cGRhdGVDb21wb3NpdGluZ0xheWVyQ29udGVudChjb25zdCBXZWJMYXllclVwZGF0ZUluZm8mIGNo
dW5rKQoreworICAgIGlmIChjaHVuay5iaXRtYXBIYW5kbGUuaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZpbmQoY2h1bmsu
bGF5ZXJJRCk7CisgICAgaWYgKGl0ID09IG1fbGF5ZXJzLmVuZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBRUGFpbnRlciBwYWludGVyKCZpdC0+c2Vjb25kLmltYWdlKTsKKyAgICBSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShjaHVuay5i
aXRtYXBIYW5kbGUpOworICAgIGlmICghYml0bWFwKQorICAgICAgICByZXR1cm47CisgICAgUUlt
YWdlIGltYWdlRnJvbVVwZGF0ZUNodW5rID0gYml0bWFwLT5jcmVhdGVRSW1hZ2UoKTsKKyAgICBp
ZiAoaW1hZ2VGcm9tVXBkYXRlQ2h1bmsuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IEZsb2F0UmVjdCBzY2FsZWRSZWN0KGNodW5rLnJlY3QpOworICAgIHNjYWxlZFJlY3Quc2NhbGUo
MS4wIC8gbV9jb250ZW50U2NhbGUpOworICAgIGl0LT5zZWNvbmQubGF5ZXItPnNldE5lZWRzRGlz
cGxheUluUmVjdChzY2FsZWRSZWN0KTsKKyAgICBwYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShR
UGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7CisgICAgcGFpbnRlci5kcmF3SW1hZ2Uo
Y2h1bmsucmVjdCwgaW1hZ2VGcm9tVXBkYXRlQ2h1bmspOworfQorCit2b2lkIExheWVyVHJlZUhv
c3RQcm94eTo6cGFpbnRDb21wb3NpdGluZ0xheWVyKFFQYWludGVyKiB0YXJnZXRQYWludGVyLCBj
b25zdCBJbnRSZWN0JikKK3sKKyAgICBGbG9hdFJlY3QgY2xpcFJlY3QoUVJlY3RGKHRhcmdldFBh
aW50ZXItPmNsaXBSZWdpb24oKS5ib3VuZGluZ1JlY3QoKSkpOworICAgIGlmIChjbGlwUmVjdC5p
c0VtcHR5KCkpCisgICAgICAgIGNsaXBSZWN0ID0gbV9kcmF3aW5nQXJlYVByb3h5LT52aWV3cG9y
dFZpc2libGVSZWN0KCk7CisgICAgRmxvYXRSZWN0IHNjYWxlZENvbnRlbnRzUmVjdCA9IG1fZHJh
d2luZ0FyZWFQcm94eS0+Y29udGVudHNSZWN0KCk7CisgICAgc2NhbGVkQ29udGVudHNSZWN0LnNj
YWxlKDEuMCAvIG1fZHJhd2luZ0FyZWFQcm94eS0+Y29udGVudHNTY2FsZSgpKTsKKyAgICBjbGlw
UmVjdC5pbnRlcnNlY3Qoc2NhbGVkQ29udGVudHNSZWN0KTsKKworICAgIEdyYXBoaWNzTGF5ZXIq
IGN1cnJlbnRSb290TGF5ZXIgPSByb290TGF5ZXIoKTsKKyAgICBpZiAoIWN1cnJlbnRSb290TGF5
ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4
dHVyZU1hcHBlck5vZGUoY3VycmVudFJvb3RMYXllcik7CisKKyAgICBpZiAoIW5vZGUpCisgICAg
ICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHRhcmdldFBhaW50ZXIp
OworICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQorICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBU
ZXh0dXJlTWFwcGVyOjpjcmVhdGUoJmNvbnRleHQpOworCisgICAgbV90ZXh0dXJlTWFwcGVyLT5z
ZXRHcmFwaGljc0NvbnRleHQoJmNvbnRleHQpOworICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0SW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHko
KSk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dC50ZXh0
RHJhd2luZ01vZGUoKSk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRWaWV3cG9ydFNpemUobV9k
cmF3aW5nQXJlYVByb3h5LT52aWV3cG9ydFZpc2libGVSZWN0KCkuc2l6ZSgpKTsKKworICAgIG5v
ZGUtPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKKyAgICBjb25zdCBR
VHJhbnNmb3JtIHQgPSB0YXJnZXRQYWludGVyLT50cmFuc2Zvcm0oKTsKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBtYXRyaXgodC5tMTEoKSwgdC5tMTIoKSwgMCwgdC5tMTMoKSwgdC5tMjEoKSwg
dC5tMjIoKSwgMCwgdC5tMjMoKSwgMCwgMCwgMSwgMCwgdC5tMzEoKSwgdC5tMzIoKSwgMCwgdC5t
MzMoKSk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsKKyAgICBjdXJyZW50
Um9vdExheWVyLT5zZXRPcGFjaXR5KHRhcmdldFBhaW50ZXItPm9wYWNpdHkoKSk7CisgICAgYm9v
bCBmb3JjZVN5bmMgPSAobWF0cml4ICE9IGN1cnJlbnRSb290TGF5ZXItPnRyYW5zZm9ybSgpKTsK
KyAgICBjdXJyZW50Um9vdExheWVyLT5zZXRUcmFuc2Zvcm0obWF0cml4KTsKKworICAgIGJvb2wg
YWxsb3dTeW5jID0gdHJ1ZTsKKyAgICBpZiAoIWZvcmNlU3luYykKKyAgICAgICAgYWxsb3dTeW5j
ID0gbV9kcmF3aW5nQXJlYVByb3h5LT5iYWNraW5nU3RvcmVSZWFkeSgpOworCisgICAgaWYgKGFs
bG93U3luYykgeworICAgICAgICBzeW5jRGVsZXRlZExheWVycygpOworICAgICAgICBjdXJyZW50
Um9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOworICAgIH0KKworICAgIG1fdGV4dHVy
ZU1hcHBlci0+YmVnaW5QYWludGluZygpOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5DbGlw
KG1hdHJpeCwgY2xpcFJlY3QpOworCisgICAgbm9kZS0+cGFpbnQoKTsKKworICAgIG1fdGV4dHVy
ZU1hcHBlci0+ZW5kQ2xpcCgpOworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsK
KworICAgIGlmIChub2RlLT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygp
KQorICAgICAgICB1cGRhdGVXZWJWaWV3KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5
Ojp1cGRhdGVXZWJWaWV3KCkKK3sKKyAgICBtX2RyYXdpbmdBcmVhUHJveHktPnVwZGF0ZVdlYlZp
ZXcoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnBhaW50KEJhY2tpbmdTdG9yZTo6
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQgY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgUmVn
aW9uJiB1bnBhaW50ZWRSZWdpb24pCit7CisgICAgcGFpbnRDb21wb3NpdGluZ0xheWVyKGNvbnRl
eHQsIHJlY3QpOworfQorCit9CisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97192</attachid>
            <date>2011-06-14 16:38:26 -0700</date>
            <delta_ts>2011-08-12 15:55:14 -0700</delta_ts>
            <desc>Patch 7: Enable WebGraphicsLayer when in the web process</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>1561</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4ODcyKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDYtMTQgIE5vYW0gUm9z
ZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gSW1wbGVtZW50IGFjY2VsZXJhdGVkIGNv
bXBvc2l0aW5nIG9uIFdLMiBRdCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01NjkzNQorCisgICAgICAgIEVuYWJsZSBXZWJHcmFwaGljc0xheWVy
IHdoZW4gaW4gdGhlIFdlYlByb2Nlc3MuCisgICAgICAgIFRoaXMgcGF0Y2ggZWZmZWN0aXZlbHkg
ZW5hYmxlcyBUZXh0dXJlTWFwcGVyIG9uIFdlYktpdDIuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjppbml0aWFsaXpl
V2ViUHJvY2Vzcyk6CisKIDIwMTEtMDYtMTQgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiA4ODY5OCkKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgyLDYgKzgyLDEwIEBACiAjaW5jbHVkZSAiTmV0c2NhcGVQbHVnaW5Nb2R1bGUuaCIKICNlbmRp
ZgogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBQTEFURk9STShRVCkKKyNp
bmNsdWRlICJXZWJHcmFwaGljc0xheWVyLmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMjMzLDYgKzIzNyw5IEBAIHZvaWQgV2Vi
UHJvY2Vzczo6aW5pdGlhbGl6ZVdlYlByb2Nlc3MoY28KICNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VT
U0lPTlMpCiAgICAgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldFByaXZhdGVCcm93c2luZ1N0
b3JhZ2VTZXNzaW9uSWRlbnRpZmllckJhc2UocGFyYW1ldGVycy51aVByb2Nlc3NCdW5kbGVJZGVu
dGlmaWVyKTsKICNlbmRpZgorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgUExB
VEZPUk0oUVQpCisgICAgV2ViR3JhcGhpY3NMYXllcjo6aW5pdEZhY3RvcnkoKTsKKyNlbmRpZgog
fQogCiB2b2lkIFdlYlByb2Nlc3M6OnNldFNob3VsZFRyYWNrVmlzaXRlZExpbmtzKGJvb2wgc2hv
dWxkVHJhY2tWaXNpdGVkTGlua3MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97231</attachid>
            <date>2011-06-14 22:16:42 -0700</date>
            <delta_ts>2011-08-12 15:55:14 -0700</delta_ts>
            <desc>Patch 6: Glue LayerTreeHost with DrawingAreaProxy</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>21317</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4ODk1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTEtMDYtMTQgIE5vJ2FtIFJv
c2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4gYW5kIFZpYXRjaGVzbGF2IE9zdGFw
ZW5rbyA8b3N0YXBlbmtvLnZpYXRjaGVzbGF2QG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIEltcGxlbWVudCBhY2NlbGVyYXRl
ZCBjb21wb3NpdGluZyBvbiBXSzIgUXQgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY5MzUKKworICAgICAgICBQYXRjaCB0aGUgY29tcG9zaXRl
ZCBpbmZvcm1hdGlvbiBmcm9tIExheWVyVHJlZUhvc3QgdG8gdGhlIERyYXdpbmdBcmVhLgorICAg
ICAgICBSZWdlbmVyYXRlIHRoZSBsYXllciB0cmVlIHVzaW5nIFRleHR1cmVNYXBwZXIsIGJhc2Vk
IG9uIHRoZSBsYXllciB0cmVlIGNyZWF0ZWQgaW4gV2ViR3JhcGhpY3NMYXllci4KKyAgICAgICAg
VGhpcyB3b3JrIGlzIGRvbmUgaW4gTGF5ZXJUcmVlSG9zdFByb3h5LCB3aGljaCBpcyBjdXJyZW50
bHkgb25seSBpbXBsZW1lbnRlZCBmb3IgUXQuCisKKyAgICAgICAgKiBXZWJLaXQyLnBybzoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVh
UHJveHlJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBs
OjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6RHJh
d2luZ0FyZWFQcm94eUltcGw6OnN5bmNDb21wb3NpdGluZ0xheWVycyk6CisgICAgICAgIChXZWJL
aXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBsOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyQ29udGVudCk6
CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBsOjp1cGRhdGVXZWJWaWV3KToK
KyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OnZpZXdwb3J0VmlzaWJsZVJl
Y3QpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6Y29udGVudHNSZWN0
KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmNvbnRlbnRzU2NhbGUp
OgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6YmFja2luZ1N0b3JlUmVh
ZHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oOgorICAgICAg
ICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZHJhd2luZ0FyZWFQcm94eSk6CisgICAg
ICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBsOjp3ZWJQYWdlUHJveHkpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaDogQWRkZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcDogQWRkZWQuCisKIDIwMTEtMDYtMTQg
IEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBTYW0gV2VpbmlnLgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8JKHJldmlzaW9uIDg4ODk1KQorKysg
U291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTE4Niw2ICsxODYs
NyBAQCBIRUFERVJTICs9IFwKICAgICBVSVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdFByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuaCBc
CiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmggXAorICAgIFVJUHJvY2Vz
cy9MYXllclRyZWVIb3N0UHJveHkuaCBcCiAgICAgVUlQcm9jZXNzL1BhZ2VDbGllbnQuaCBcCiAg
ICAgVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmggXAogICAgIFVJUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5oIFwKQEAgLTQ0Nyw2ICs0NDgsNyBAQCBTT1VSQ0VT
ICs9IFwKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eS5jcHAgXAog
ICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3Mv
V2ViVUlDbGllbnQuY3BwIFwKKyAgICBVSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQu
Y3BwIFwKICAgICBVSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVByb3h5UXQuY3BwIFwKICAg
ICBVSVByb2Nlc3MvcXQvVGlsZWREcmF3aW5nQXJlYVRpbGVRdC5jcHAgXAogICAgIFVJUHJvY2Vz
cy9xdC9UZXh0Q2hlY2tlclF0LmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
RHJhd2luZ0FyZWFQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9EcmF3aW5nQXJlYVByb3h5LmgJKHJldmlzaW9uIDg4ODk1KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgs
OSBAQAogI2RlZmluZSBEcmF3aW5nQXJlYVByb3h5X2gKIAogI2luY2x1ZGUgIkRyYXdpbmdBcmVh
SW5mby5oIgotI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC00NCwxMCAr
NDUsNiBAQCBuYW1lc3BhY2UgQ29yZUlQQyB7CiAgICAgY2xhc3MgTWVzc2FnZUlEOwogfQogCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgSW50UmVjdDsKLX0KLQogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIGNsYXNzIExheWVyVHJlZUNvbnRleHQ7CkBAIC05Miw2ICs4OSwxMyBAQCBwdWJs
aWM6CiAgICAgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZTsgfQogICAgIHZvaWQgc2V0U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KTsKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVXZWJWaWV3KCkgeyB9CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHZpZXdwb3J0Vmlz
aWJsZVJlY3QoKSBjb25zdCB7IHJldHVybiBXZWJDb3JlOjpJbnRSZWN0KCk7IH0KKyAgICB2aXJ0
dWFsIFdlYkNvcmU6OkludFJlY3QgY29udGVudHNSZWN0KCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYmFj
a2luZ1N0b3JlUmVhZHkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCiBwcm90ZWN0
ZWQ6CiAgICAgZXhwbGljaXQgRHJhd2luZ0FyZWFQcm94eShEcmF3aW5nQXJlYVR5cGUsIFdlYlBh
Z2VQcm94eSopOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQ
cm94eUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3
aW5nQXJlYVByb3h5SW1wbC5jcHAJKHJldmlzaW9uIDg4ODk1KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NiArMzQsMTAgQEAKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9j
ZXNzUHJveHkuaCIKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRF
WFRVUkVfTUFQUEVSKQorI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgorI2VuZGlmCisK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTY3LDgg
KzcxLDEzIEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OnBhaW50KEJhY2tpbmcKIHsKICAg
ICB1bnBhaW50ZWRSZWdpb24gPSByZWN0OwogCi0gICAgaWYgKGlzSW5BY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSgpKQorICAgIGlmIChpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSkg
eworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVS
KQorICAgICAgICBpZiAobV9sYXllclRyZWVIb3N0UHJveHkpCisgICAgICAgICAgICBtX2xheWVy
VHJlZUhvc3RQcm94eS0+cGFpbnQoY29udGV4dCwgcmVjdCwgdW5wYWludGVkUmVnaW9uKTsKKyNl
bmRpZgogICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgQVNTRVJUKG1fY3VycmVudEJhY2tp
bmdTdG9yZVN0YXRlSUQgPD0gbV9uZXh0QmFja2luZ1N0b3JlU3RhdGVJRCk7CiAgICAgaWYgKG1f
Y3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQgPCBtX25leHRCYWNraW5nU3RvcmVTdGF0ZUlEKSB7
CkBAIC0zMjksNiArMzM4LDEwIEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVyQWNj
ZWxlcmEKICAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7CiAgICAgbV9sYXllclRyZWVDb250
ZXh0ID0gbGF5ZXJUcmVlQ29udGV4dDsKICAgICBtX3dlYlBhZ2VQcm94eS0+ZW50ZXJBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsKKyNpZiBVU0UoVEVYVFVSRV9N
QVBQRVIpCisgICAgaWYgKCFtX2xheWVyVHJlZUhvc3RQcm94eSkKKyAgICAgICAgbV9sYXllclRy
ZWVIb3N0UHJveHkgPSBhZG9wdFB0cihuZXcgTGF5ZXJUcmVlSG9zdFByb3h5KHRoaXMpKTsKKyNl
bmRpZgogfQogCiB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpleGl0QWNjZWxlcmF0ZWRDb21w
b3NpdGluZ01vZGUoKQpAQCAtMzU4LDQgKzM3MSw0MSBAQCB2b2lkIERyYXdpbmdBcmVhUHJveHlJ
bXBsOjpkaXNjYXJkQmFja2luCiAgICAgYmFja2luZ1N0b3JlU3RhdGVEaWRDaGFuZ2UoRG9Ob3RS
ZXNwb25kSW1tZWRpYXRlbHkpOwogfQogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCit2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpzeW5j
Q29tcG9zaXRpbmdMYXllcnMoY29uc3QgV2ViTGF5ZXJUcmVlSW5mbyYgaW5mbykKK3sKKyAgICBt
X2xheWVyVHJlZUhvc3RQcm94eS0+c3luY0NvbXBvc2l0aW5nTGF5ZXJzKGluZm8pOworfQorCit2
b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyQ29udGVudChj
b25zdCBXZWJMYXllclVwZGF0ZUluZm8mIGluZm8pCit7CisgICAgbV9sYXllclRyZWVIb3N0UHJv
eHktPnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJDb250ZW50KGluZm8pOworfQorCit2b2lkIERyYXdp
bmdBcmVhUHJveHlJbXBsOjp1cGRhdGVXZWJWaWV3KCkKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS0+
c2V0Vmlld05lZWRzRGlzcGxheSh2aWV3cG9ydFZpc2libGVSZWN0KCkpOworfQorCitXZWJDb3Jl
OjpJbnRSZWN0IERyYXdpbmdBcmVhUHJveHlJbXBsOjp2aWV3cG9ydFZpc2libGVSZWN0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gd2ViUGFnZVByb3h5KCktPnZpZXdwb3J0VmlzaWJsZVJlY3QoKTsK
K30KKworV2ViQ29yZTo6SW50UmVjdCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6Y29udGVudHNSZWN0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdmlld3BvcnRWaXNpYmxlUmVjdCgpOworfQorCitmbG9h
dCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6Y29udGVudHNTY2FsZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIDE7Cit9CisKK2Jvb2wgRHJhd2luZ0FyZWFQcm94eUltcGw6OmJhY2tpbmdTdG9yZVJlYWR5
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2VuZGlmCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5
SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJl
YVByb3h5SW1wbC5oCShyZXZpc2lvbiA4ODg5NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBMYXllclRyZWVIb3N0UHJveHk7CiBjbGFz
cyBSZWdpb247CiAKIGNsYXNzIERyYXdpbmdBcmVhUHJveHlJbXBsIDogcHVibGljIERyYXdpbmdB
cmVhUHJveHkgewpAQCAtNzksNiArODAsMTcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlzY2Fy
ZEJhY2tpbmdTdG9yZVNvb24oKTsKICAgICB2b2lkIGRpc2NhcmRCYWNraW5nU3RvcmUoKTsKKyAg
ICBEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYVByb3h5KCkgeyByZXR1cm4gdGhpczsgfQor
ICAgIFdlYlBhZ2VQcm94eSogd2ViUGFnZVByb3h5KCkgY29uc3QgeyByZXR1cm4gbV93ZWJQYWdl
UHJveHk7IH0KKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJF
X01BUFBFUikKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlV2ViVmlldygpOworICAgIHZpcnR1YWwg
V2ViQ29yZTo6SW50UmVjdCB2aWV3cG9ydFZpc2libGVSZWN0KCkgY29uc3Q7CisgICAgdmlydHVh
bCBXZWJDb3JlOjpJbnRSZWN0IGNvbnRlbnRzUmVjdCgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxv
YXQgY29udGVudHNTY2FsZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBiYWNraW5nU3RvcmVS
ZWFkeSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdMYXllcnMoY29u
c3QgV2ViTGF5ZXJUcmVlSW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdGlu
Z0xheWVyQ29udGVudChjb25zdCBXZWJMYXllclVwZGF0ZUluZm8mKTsKKyNlbmRpZgogCiAgICAg
Ly8gVGhlIHN0YXRlIElEIGNvcnJlc3BvbmRpbmcgdG8gb3VyIGN1cnJlbnQgYmFja2luZyBzdG9y
ZS4gVXBkYXRlZCB3aGVuZXZlciB3ZSBhbGxvY2F0ZQogICAgIC8vIGEgbmV3IGJhY2tpbmcgc3Rv
cmUuIEFueSBtZXNzYWdlcyByZWNlaXZlZCB0aGF0IGNvcnJlc3BvbmQgdG8gYW4gZWFybGllciBz
dGF0ZSBhcmUgaWdub3JlZCwKQEAgLTEwNSw2ICsxMTcsOSBAQCBwcml2YXRlOgogICAgIE93blB0
cjxCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwogCiAgICAgUnVuTG9vcDo6VGltZXI8RHJh
d2luZ0FyZWFQcm94eUltcGw+IG1fZGlzY2FyZEJhY2tpbmdTdG9yZVRpbWVyOworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIE93blB0
cjxMYXllclRyZWVIb3N0UHJveHk+IG1fbGF5ZXJUcmVlSG9zdFByb3h5OworI2VuZGlmCiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9M
YXllclRyZWVIb3N0UHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTYg
QEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTGF5ZXJUcmVlSG9zdFByb3h5X2gKKyNk
ZWZpbmUgTGF5ZXJUcmVlSG9zdFByb3h5X2gKKworI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgor
I2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNs
dWRlICJSdW5Mb29wLmgiCisjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xh
eWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9J
bnRTaXplLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworI2lmIFVTRShURVhUVVJFX01B
UFBFUikKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFRleHR1cmVNYXBwZXI7Cit9CisjZW5k
aWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkxheWVyVHJlZUluZm87CitjbGFz
cyBXZWJMYXllclVwZGF0ZUluZm87CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjbGFz
cyBMYXllclRyZWVIb3N0UHJveHkgOiBwdWJsaWMgR3JhcGhpY3NMYXllckNsaWVudCB7CitwdWJs
aWM6CisgICAgTGF5ZXJUcmVlSG9zdFByb3h5KERyYXdpbmdBcmVhUHJveHkqKTsKKyAgICB2aXJ0
dWFsIH5MYXllclRyZWVIb3N0UHJveHkoKTsKKyAgICB2b2lkIHN5bmNDb21wb3NpdGluZ0xheWVy
cyhjb25zdCBXZWJMYXllclRyZWVJbmZvJik7CisgICAgdm9pZCB1cGRhdGVDb21wb3NpdGluZ0xh
eWVyQ29udGVudChjb25zdCBXZWJMYXllclVwZGF0ZUluZm8mKTsKKyAgICB2b2lkIHBhaW50Q29t
cG9zaXRpbmdMYXllcihQbGF0Zm9ybURyYXdpbmdDb250ZXh0IHRhcmdldFBhaW50ZXIsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6
OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rl
ciopOworICAgIHZvaWQgcGFpbnQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFJlZ2lvbiYpOworCitwcm90ZWN0ZWQ6CisgICAg
dm9pZCB1cGRhdGVXZWJWaWV3KCk7CisKKyAgICBHcmFwaGljc0xheWVyKiBjcmVhdGVMYXllcigp
OworCisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJCeUlEKFdlYkxheWVySUQgaWQpIHsgcmV0dXJu
IGlkID8gbV9sYXllcnMuZ2V0KGlkKS5sYXllciA6IDA7IH0KKyAgICBHcmFwaGljc0xheWVyKiBy
b290TGF5ZXIoKSB7IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQorCisgICAgdm9pZCBzeW5j
RGVsZXRlZExheWVycygpOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEdy
YXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFz
ZSwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFy
dGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBkb3VibGUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlTeW5jUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopIHsgfQorICAgIHZpcnR1YWwg
Ym9vbCBzaG93RGVidWdCb3JkZXJzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwor
ICAgIFJ1bkxvb3A6OlRpbWVyPExheWVyVHJlZUhvc3RQcm94eT4gbV9hbmltYXRpb25UaW1lcjsK
KyAgICBEcmF3aW5nQXJlYVByb3h5KiBtX2RyYXdpbmdBcmVhUHJveHk7CisKKyAgICBzdHJ1Y3Qg
TGF5ZXJEYXRhIHsKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbGF5ZXI7CisgICAg
ICAgIFFJbWFnZSBpbWFnZTsKKyAgICAgICAgTGF5ZXJEYXRhKCkgOiBsYXllcigwKSB7IH0KKyAg
ICB9OworCisgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkxheWVySUQsIExheWVyRGF0YT4gTGF5ZXJN
YXA7CisgICAgZmxvYXQgbV9jb250ZW50U2NhbGU7CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIp
CisgICAgT3duUHRyPFRleHR1cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsKKyNlbmRpZgorICAg
IE93blB0cjxHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKKyAgICBWZWN0b3I8V2ViTGF5ZXJJ
RD4gbV9sYXllcnNUb0RlbGV0ZTsKKworICAgIExheWVyTWFwIG1fbGF5ZXJzOworICAgIFdlYkxh
eWVySUQgbV9yb290TGF5ZXJJRDsKK307CisKK30KKworI2VuZGlmIC8vIExheWVyVHJlZUhvc3RQ
cm94eV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFBy
b3h5UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXll
clRyZWVIb3N0UHJveHlRdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDI3NSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94
eS5oIgorCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkRyYXdp
bmdBcmVhUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgorI2luY2x1ZGUg
IlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJRdC5oIgorI2luY2x1
ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgInRleG1hcC9HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyLmgiCisj
aW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgiCisjaW5jbHVkZSA8UURhdGVUaW1l
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworR3JhcGhpY3NMYXllciogTGF5ZXJUcmVlSG9zdFBy
b3h5OjpjcmVhdGVMYXllcigpCit7CisgICAgcmV0dXJuIG5ldyBHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcih0aGlzKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnN5bmNEZWxldGVk
TGF5ZXJzKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbGF5ZXJzVG9EZWxldGUu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgV2ViTGF5ZXJJRCBpZCA9IG1fbGF5ZXJzVG9E
ZWxldGVbaV07CisKKyAgICAgICAgLy8gVGhpcyBtaWdodCBoYXBwZW4gaWYgdGhlIHdlYiBwcm9j
ZXNzIGRlbGV0ZXMgdGhlIGxheWVyIGFmdGVyIHRoZSBVSSBwcm9jZXNzIGFscmVhZHkgY2xlYXJl
ZCB0aGUgbGF5ZXJzIGhlcmUuCisgICAgICAgIGlmICghbV9sYXllcnMuY29udGFpbnMoaWQpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGRlbGV0ZSBtX2xheWVycy5nZXQoaWQpLmxh
eWVyOworICAgICAgICBtX2xheWVycy5yZW1vdmUoaWQpOworICAgIH0KK30KKwordm9pZCBMYXll
clRyZWVIb3N0UHJveHk6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciogbGF5ZXIs
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNv
bnN0IEludFJlY3QmIGluQ2xpcCkKK3sKKyAgICBmb3IgKExheWVyTWFwOjppdGVyYXRvciBpdCA9
IG1fbGF5ZXJzLmJlZ2luKCk7IGl0ICE9IG1fbGF5ZXJzLmVuZCgpOyArK2l0KSB7CisgICAgICAg
IGlmIChpdC0+c2Vjb25kLmxheWVyICE9IGxheWVyKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgTGF5ZXJEYXRhJiBkYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgSW50UmVjdCBj
bGlwKGluQ2xpcCk7CisgICAgICAgIGNsaXAuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQ6Onpl
cm8oKSwgZGF0YS5pbWFnZS5zaXplKCkpKTsKKyAgICAgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBj
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworICAgICAgICBwYWludGVyLT5zZXRDb21wb3NpdGlv
bk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2UpOworICAgICAgICBwYWludGVy
LT5kcmF3SW1hZ2UoY2xpcCwgZGF0YS5pbWFnZSwgY2xpcCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9Cit9CisKK0xheWVyVHJlZUhvc3RQcm94eTo6TGF5ZXJUcmVlSG9zdFByb3h5KERyYXdpbmdB
cmVhUHJveHkqIGRyYXdpbmdBcmVhUHJveHkpCisgICAgOiBtX2FuaW1hdGlvblRpbWVyKFJ1bkxv
b3A6Om1haW4oKSwgdGhpcywgJkxheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlV2ViVmlldykKKyAg
ICAsIG1fZHJhd2luZ0FyZWFQcm94eShkcmF3aW5nQXJlYVByb3h5KQoreworICAgIG1fcm9vdExh
eWVyID0gYWRvcHRQdHIoY3JlYXRlTGF5ZXIoKSk7CisgICAgbV9yb290TGF5ZXItPnNldE1hc2tz
VG9Cb3VuZHMoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2Up
OworICAgIG1fcm9vdExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoMCwgMCwgMCkp
OworCisgICAgLy8gVGhlIHJvb3QgbGF5ZXIgc2hvdWxkIG5vdCBoYXZlIHplcm8gc2l6ZSwgb3Ig
aXQgd291bGQgYmUgb3B0aW1pemVkIG91dC4KKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShGbG9h
dFNpemUoMS4wLCAxLjApKTsKK30KKworTGF5ZXJUcmVlSG9zdFByb3h5Ojp+TGF5ZXJUcmVlSG9z
dFByb3h5KCkKK3sKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnN5bmNDb21wb3NpdGlu
Z0xheWVycyhjb25zdCBXZWJMYXllclRyZWVJbmZvJiBpbmZvKQoreworICAgIG1fY29udGVudFNj
YWxlID0gaW5mby5jb250ZW50U2NhbGU7CisgICAgbV9sYXllcnNUb0RlbGV0ZS5hcHBlbmQoaW5m
by5kZWxldGVkTGF5ZXJJRHMpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmZvLmxh
eWVycy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBXZWJMYXllcklEIGlkID0gaW5mby5s
YXllcnNbaV0uaWQ7CisKKyAgICAgICAgaWYgKG1fbGF5ZXJzLmNvbnRhaW5zKGlkKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIExheWVyRGF0YSBkYXRhOworICAgICAgICBkYXRh
LmxheWVyID0gY3JlYXRlTGF5ZXIoKTsKKyAgICAgICAgbV9sYXllcnMuYWRkKGlkLCBkYXRhKTsK
KworICAgICAgICBpZiAoaWQgIT0gaW5mby5yb290TGF5ZXJJRCkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIG1fcm9vdExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOworICAgICAg
ICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQoZGF0YS5sYXllcik7CisgICAgfQorCisgICAgaWYgKGlu
Zm8ucm9vdExheWVySUQgIT0gbV9yb290TGF5ZXJJRCkgeworICAgICAgICBtX3Jvb3RMYXllci0+
cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKyAgICAgICAgbV9yb290TGF5ZXJJRCA9IGluZm8ucm9vdExh
eWVySUQ7CisgICAgICAgIGlmIChtX3Jvb3RMYXllcklEKSB7CisgICAgICAgICAgICBMYXllck1h
cDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5maW5kKGluZm8ucm9vdExheWVySUQpOworICAgICAg
ICAgICAgaWYgKGl0ICE9IG1fbGF5ZXJzLmVuZCgpKQorICAgICAgICAgICAgICAgIG1fcm9vdExh
eWVyLT5hZGRDaGlsZChpdC0+c2Vjb25kLmxheWVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGZvciAoc2l6ZV90IGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgaW5mby5sYXllcnMuc2l6
ZSgpOyArK2xheWVySW5kZXgpIHsKKyAgICAgICAgY29uc3QgV2ViTGF5ZXJJbmZvJiBsYXllcklu
Zm8gPSBpbmZvLmxheWVyc1tsYXllckluZGV4XTsKKyAgICAgICAgV2ViTGF5ZXJJRCBpZCA9IGxh
eWVySW5mby5pZDsKKworICAgICAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5m
aW5kKGlkKTsKKyAgICAgICAgaWYgKGl0ID09IG1fbGF5ZXJzLmVuZCgpKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgTGF5ZXJEYXRhJiBkYXRhID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBkYXRhLmxheWVyOworCisgICAgICAgIGxheWVyLT5z
ZXROYW1lKGxheWVySW5mby5uYW1lKTsKKworICAgICAgICAvLyBXZSBoYXZlIGEgY29udGFpbmVy
IGxheWVyIGFzIGEgcGFyZW50IHRvIHRoZSByb290IGxheWVyLCBzbyB3ZSBzaG91bGRuJ3QgcGFy
ZW50IGl0IHRvIHRoZSB3ZWIgcHJvY2VzcyB2YWx1ZS4KKyAgICAgICAgaWYgKGlkICE9IGluZm8u
cm9vdExheWVySUQpCisgICAgICAgICAgICBsYXllci0+c2V0UGFyZW50KGxheWVyQnlJRChsYXll
ckluZm8ucGFyZW50KSk7CisgICAgICAgIGxheWVyLT5zZXRSZXBsaWNhdGVkQnlMYXllcihsYXll
ckJ5SUQobGF5ZXJJbmZvLnJlcGxpY2EpKTsKKyAgICAgICAgbGF5ZXItPnNldE1hc2tMYXllcihs
YXllckJ5SUQobGF5ZXJJbmZvLm1hc2spKTsKKworICAgICAgICBsYXllci0+c2V0UG9zaXRpb24o
bGF5ZXJJbmZvLnBvcyk7CisgICAgICAgIGxheWVyLT5zZXRTaXplKGxheWVySW5mby5zaXplKTsK
KyAgICAgICAgbGF5ZXItPnNldFRyYW5zZm9ybShsYXllckluZm8udHJhbnNmb3JtKTsKKyAgICAg
ICAgbGF5ZXItPnNldEFuY2hvclBvaW50KGxheWVySW5mby5hbmNob3JQb2ludCk7CisgICAgICAg
IGxheWVyLT5zZXRDaGlsZHJlblRyYW5zZm9ybShsYXllckluZm8uY2hpbGRyZW5UcmFuc2Zvcm0p
OworICAgICAgICBsYXllci0+c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGxheWVySW5mby5iYWNrZmFj
ZVZpc2libGUpOworICAgICAgICBsYXllci0+c2V0Q29udGVudHNPcGFxdWUobGF5ZXJJbmZvLmNv
bnRlbnRzT3BhcXVlKTsKKyAgICAgICAgbGF5ZXItPnNldENvbnRlbnRzUmVjdChsYXllckluZm8u
Y29udGVudHNSZWN0KTsKKyAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChsYXllckluZm8u
ZHJhd3NDb250ZW50KTsKKworICAgICAgICAvLyBOZXZlciBtYWtlIHRoZSByb290IGxheWVyIGNs
aXAuCisgICAgICAgIGxheWVyLT5zZXRNYXNrc1RvQm91bmRzKGlkID09IGluZm8ucm9vdExheWVy
SUQgPyBmYWxzZSA6IGxheWVySW5mby5tYXNrc1RvQm91bmRzKTsKKyAgICAgICAgbGF5ZXItPnNl
dE9wYWNpdHkobGF5ZXJJbmZvLm9wYWNpdHkpOworICAgICAgICBsYXllci0+c2V0UHJlc2VydmVz
M0QobGF5ZXJJbmZvLnByZXNlcnZlczNEKTsKKyAgICAgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIq
PiBjaGlsZHJlbjsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW5mby5j
aGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGNo
aWxkID0gbGF5ZXJCeUlEKGxheWVySW5mby5jaGlsZHJlbltpXSkpCisgICAgICAgICAgICAgICAg
Y2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKKyAgICAgICAgfQorICAgICAgICBsYXllci0+c2V0Q2hp
bGRyZW4oY2hpbGRyZW4pOworCisgICAgICAgIGlmIChsYXllckluZm8uaW1hZ2VCYWNraW5nU3Rv
cmUpIHsKKyAgICAgICAgICAgIGxheWVyLT5zZXRDb250ZW50c1RvSW1hZ2UobGF5ZXJJbmZvLmlt
YWdlQmFja2luZ1N0b3JlLT5jcmVhdGVJbWFnZSgpLmdldCgpKTsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisKKyAgICAgICAgbGF5ZXItPnNldENvbnRlbnRzVG9JbWFnZSgwKTsK
KworICAgICAgICBpZiAoIWxheWVySW5mby5kcmF3c0NvbnRlbnQpIHsKKyAgICAgICAgICAgIGRh
dGEuaW1hZ2UgPSBRSW1hZ2UoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9Cisg
ICAgICAgIEludFNpemUgd2FudGVkU2l6ZShsYXllckluZm8uc2l6ZS53aWR0aCgpLCBsYXllcklu
Zm8uc2l6ZS5oZWlnaHQoKSk7CisKKyAgICAgICAgaWYgKEludFNpemUoZGF0YS5pbWFnZS5zaXpl
KCkpICE9IGxheWVySW5mby5zaXplKSB7CisgICAgICAgICAgICBRSW1hZ2UgaW1hZ2Uod2FudGVk
U2l6ZS53aWR0aCgpLCB3YW50ZWRTaXplLmhlaWdodCgpLCBsYXllci0+Y29udGVudHNPcGFxdWUo
KSA/IFFJbWFnZTo6Rm9ybWF0X1JHQjE2IDogUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRp
cGxpZWQpOworICAgICAgICAgICAgaW1hZ2UuZmlsbCgwKTsKKyAgICAgICAgICAgIGRhdGEuaW1h
Z2UgPSBpbWFnZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVwZGF0ZVdlYlZpZXcoKTsKK30K
Kwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJDb250ZW50
KGNvbnN0IFdlYkxheWVyVXBkYXRlSW5mbyYgY2h1bmspCit7CisgICAgaWYgKGNodW5rLmJpdG1h
cEhhbmRsZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTGF5ZXJNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9sYXllcnMuZmluZChjaHVuay5sYXllcklEKTsKKyAgICBpZiAoaXQgPT0gbV9s
YXllcnMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFFQYWludGVyIHBhaW50ZXIoJml0
LT5zZWNvbmQuaW1hZ2UpOworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNo
YXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGNodW5rLmJpdG1hcEhhbmRsZSk7CisgICAgaWYgKCFiaXRt
YXApCisgICAgICAgIHJldHVybjsKKyAgICBRSW1hZ2UgaW1hZ2VGcm9tVXBkYXRlQ2h1bmsgPSBi
aXRtYXAtPmNyZWF0ZVFJbWFnZSgpOworICAgIGlmIChpbWFnZUZyb21VcGRhdGVDaHVuay5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRmxvYXRSZWN0IHNjYWxlZFJlY3QoY2h1bmsu
cmVjdCk7CisgICAgc2NhbGVkUmVjdC5zY2FsZSgxLjAgLyBtX2NvbnRlbnRTY2FsZSk7CisgICAg
aXQtPnNlY29uZC5sYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHNjYWxlZFJlY3QpOworICAg
IHBhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291
cmNlKTsKKyAgICBwYWludGVyLmRyYXdJbWFnZShjaHVuay5yZWN0LCBpbWFnZUZyb21VcGRhdGVD
aHVuayk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludENvbXBvc2l0aW5nTGF5
ZXIoUVBhaW50ZXIqIHRhcmdldFBhaW50ZXIsIGNvbnN0IEludFJlY3QmKQoreworICAgIEZsb2F0
UmVjdCBjbGlwUmVjdChRUmVjdEYodGFyZ2V0UGFpbnRlci0+Y2xpcFJlZ2lvbigpLmJvdW5kaW5n
UmVjdCgpKSk7CisgICAgaWYgKGNsaXBSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgY2xpcFJlY3Qg
PSBtX2RyYXdpbmdBcmVhUHJveHktPnZpZXdwb3J0VmlzaWJsZVJlY3QoKTsKKyAgICBGbG9hdFJl
Y3Qgc2NhbGVkQ29udGVudHNSZWN0ID0gbV9kcmF3aW5nQXJlYVByb3h5LT5jb250ZW50c1JlY3Qo
KTsKKyAgICBzY2FsZWRDb250ZW50c1JlY3Quc2NhbGUoMS4wIC8gbV9kcmF3aW5nQXJlYVByb3h5
LT5jb250ZW50c1NjYWxlKCkpOworICAgIGNsaXBSZWN0LmludGVyc2VjdChzY2FsZWRDb250ZW50
c1JlY3QpOworCisgICAgR3JhcGhpY3NMYXllciogY3VycmVudFJvb3RMYXllciA9IHJvb3RMYXll
cigpOworICAgIGlmICghY3VycmVudFJvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOworICAgIFRl
eHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShjdXJyZW50Um9vdExh
eWVyKTsKKworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3ND
b250ZXh0IGNvbnRleHQodGFyZ2V0UGFpbnRlcik7CisgICAgaWYgKCFtX3RleHR1cmVNYXBwZXIp
CisgICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXI6OmNyZWF0ZSgmY29udGV4
dCk7CisKKyAgICBtX3RleHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dCgmY29udGV4dCk7
CisgICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGNvbnRl
eHQuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPnNl
dFRleHREcmF3aW5nTW9kZShjb250ZXh0LnRleHREcmF3aW5nTW9kZSgpKTsKKyAgICBtX3RleHR1
cmVNYXBwZXItPnNldFZpZXdwb3J0U2l6ZShtX2RyYXdpbmdBcmVhUHJveHktPnZpZXdwb3J0Vmlz
aWJsZVJlY3QoKS5zaXplKCkpOworCisgICAgbm9kZS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1
cmVNYXBwZXIuZ2V0KCkpOworICAgIGNvbnN0IFFUcmFuc2Zvcm0gdCA9IHRhcmdldFBhaW50ZXIt
PnRyYW5zZm9ybSgpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCh0Lm0xMSgpLCB0
Lm0xMigpLCAwLCB0Lm0xMygpLCB0Lm0yMSgpLCB0Lm0yMigpLCAwLCB0Lm0yMygpLCAwLCAwLCAx
LCAwLCB0Lm0zMSgpLCB0Lm0zMigpLCAwLCB0Lm0zMygpKTsKKyAgICBtX3RleHR1cmVNYXBwZXIt
PmJpbmRTdXJmYWNlKDApOworICAgIGN1cnJlbnRSb290TGF5ZXItPnNldE9wYWNpdHkodGFyZ2V0
UGFpbnRlci0+b3BhY2l0eSgpKTsKKyAgICBib29sIGZvcmNlU3luYyA9IChtYXRyaXggIT0gY3Vy
cmVudFJvb3RMYXllci0+dHJhbnNmb3JtKCkpOworICAgIGN1cnJlbnRSb290TGF5ZXItPnNldFRy
YW5zZm9ybShtYXRyaXgpOworCisgICAgYm9vbCBhbGxvd1N5bmMgPSB0cnVlOworICAgIGlmICgh
Zm9yY2VTeW5jKQorICAgICAgICBhbGxvd1N5bmMgPSBtX2RyYXdpbmdBcmVhUHJveHktPmJhY2tp
bmdTdG9yZVJlYWR5KCk7CisKKyAgICBpZiAoYWxsb3dTeW5jKSB7CisgICAgICAgIHN5bmNEZWxl
dGVkTGF5ZXJzKCk7CisgICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0
YXRlKCk7CisgICAgfQorCisgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKCk7Cisg
ICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpbkNsaXAobWF0cml4LCBjbGlwUmVjdCk7CisKKyAgICBu
b2RlLT5wYWludCgpOworCisgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRDbGlwKCk7CisgICAgbV90
ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygpOworCisgICAgaWYgKG5vZGUtPmRlc2NlbmRhbnRz
T3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpCisgICAgICAgIHVwZGF0ZVdlYlZpZXcoKTsK
K30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVdlYlZpZXcoKQoreworICAgIG1f
ZHJhd2luZ0FyZWFQcm94eS0+dXBkYXRlV2ViVmlldygpOworfQorCit2b2lkIExheWVyVHJlZUhv
c3RQcm94eTo6cGFpbnQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBSZWdpb24mIHVucGFpbnRlZFJlZ2lvbikKK3sKKyAg
ICBwYWludENvbXBvc2l0aW5nTGF5ZXIoY29udGV4dCwgcmVjdCk7Cit9CisKK30KKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97319</attachid>
            <date>2011-06-15 10:33:32 -0700</date>
            <delta_ts>2011-08-12 15:55:14 -0700</delta_ts>
            <desc>Patch 5: LayerTreeContext/LayerTreeHost with AC disabled by default until null handle problem fixed.</desc>
            <filename>LayerTreeHostQt_AC_disable.diff</filename>
            <type>text/plain</type>
            <size>28103</size>
            <attacher name="Viatcheslav Ostapenko">ostap73</attacher>
            
              <data encoding="base64">Y29tbWl0IGQwZjJiMDdhOTlkNmY1YWFhZDNmNTQ2MThmYjk1ODc0NjdmMmZkZWQKQXV0aG9yOiBj
b21taXQtcXVldWUgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgpEYXRlOiAgIFR1ZSBKdW4gMTQg
MTQ6MDc6NTUgMjAxMSArMDAwMAoKICAgIDIwMTEtMDYtMTQgIE5vJ2FtIFJvc2VudGhhbCAgPG5v
YW0ucm9zZW50aGFsQG5va2lhLmNvbT4gYW5kIFZpYXRjaGVzbGF2IE9zdGFwZW5rbyA8b3N0YXBl
bmtvLnZpYXRjaGVzbGF2QG5va2lhLmNvbT4KICAgIAogICAgICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KICAgIAogICAgICAgICAgICBbUXRdIEltcGxlbWVudCBhY2NlbGVyYXRl
ZCBjb21wb3NpdGluZyBvbiBXSzIgUXQgcG9ydAogICAgICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY5MzUKICAgIAogICAgICAgICAgICBJbXBsZW1lbnRp
bmcgTGF5ZXJUcmVlSG9zdCBhbmQgTGF5ZXJUcmVlQ29udGV4dCBhbmQgTGF5ZXJUcmVlSG9zdCBm
b3IgUXQuCiAgICAgICAgICAgIEFkZCB0aGUgbmVjZXNzYXJ5IHBsdW1iaW5nIHRvIG1ha2UgdGhl
IExheWVyVHJlZUhvc3Qgd29yayB3aXRoIFF0LCBiYXNlZCBvbiB0aGUgb3JpZ2luYWwgTWFjCiAg
ICAgICAgICAgIGltcGxlbWVudGF0aW9uICh0aGUgY29kZSBpcyBuZWFybHkgaWRlbnRpY2FsKS4g
VGhpcyBpbmNsdWRlcyBjcmVhdGluZyB0aGUgcmlnaHQgbGF5ZXJzIGZvciB0aGUKICAgICAgICAg
ICAgb3ZlcmxheSBhbmQgZm9yIHRoZSBub24tY29tcG9zaXRlZCBjb250ZW50LCBhbmQgcGFzc2lu
ZyB0aGUgcm9vdCBsYXllciB0byB0aGUgVUkgcHJvY2Vzcy4KICAgIAogICAgICAgICAgICBBbHNv
LCBzaW5jZSBMYXllclRyZWVIb3N0UXQgaXMgY29tcGlsZWQsIHdlIGhhdmUgdG8gYWRkIHNvbWUg
b2YgdGhlIHJlc3Qgb2YgdGhlIGV4aXN0aW5nIHBhdGNoZXMsCiAgICAgICAgICAgIG5hbWVseSB0
aGUgbmV3IG1lc3NhZ2VzOiBzeW5jQ29tcG9zaXRpbmdMYXllcnMgYW5kIHVwZGF0ZUNvbXBvc2l0
aW5nTGF5ZXJDb250ZW50LCBhbmQgY3JlYXRlIGEKICAgICAgICAgICAgc3R1YiBpbXBsZW1lbnRh
dGlvbiBmb3IgdGhlbSBpbiBEcmF3aW5nQXJlYVByb3h5LgogICAgCiAgICAgICAgICAgIE5vdGUg
dGhhdCB0aGlzIGlzIG5vdCBhY3RpdmF0ZWQgeWV0LCB1bnRpbCB3ZSBlbmFibGUgYWNjZWxlcmF0
ZWQgY29tcG9zaXRpbmcgaW4gdGhlIHNldHRpbmdzIGFuZAogICAgICAgICAgICBjcmVhdGUgdGhl
IHJpZ2h0IEdyYXBoaWNzTGF5ZXIuCiAgICAKICAgICAgICAgICAgKiBTY3JpcHRzL3dlYmtpdDIv
bWVzc2FnZXMucHk6CiAgICAgICAgICAgICogU2hhcmVkL0xheWVyVHJlZUNvbnRleHQuaDoKICAg
ICAgICAgICAgKiBTaGFyZWQvcXQvTGF5ZXJUcmVlQ29udGV4dFF0LmNwcDoKICAgICAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dDo6TGF5ZXJUcmVlQ29udGV4dCk6CiAgICAgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUNvbnRleHQ6On5MYXllclRyZWVDb250ZXh0KToKICAgICAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dDo6ZW5jb2RlKToKICAgICAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlQ29udGV4dDo6ZGVjb2RlKToKICAgICAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlQ29udGV4dDo6aXNFbXB0eSk6CiAgICAgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yPT0pOgog
ICAgICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lmg6CiAgICAgICAgICAgIChX
ZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OnN5bmNDb21wb3NpdGluZ0xheWVycyk6CiAgICAgICAg
ICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJDb250
ZW50KToKICAgICAgICAgICAgKiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5p
bjoKICAgICAgICAgICAgKiBXZWJLaXQyLnBybzoKICAgICAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwOgogICAgICAgICAgICAoV2ViQ29yZTo6
Y29sbGVjdENvbXBvc2l0aW5nSW5mb0ZvclRoaXNMYXllcik6CiAgICAgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwOgogICAgICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0OjpjcmVhdGUpOgogICAgICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9M
YXllclRyZWVIb3N0UXQuY3BwOgogICAgICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6
OmNyZWF0ZSk6CiAgICAgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6fkxheWVyVHJl
ZUhvc3RRdCk6CiAgICAgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6TGF5ZXJUcmVl
SG9zdFF0KToKICAgICAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXRMYXllckZs
dXNoU2NoZWR1bGluZ0VuYWJsZWQpOgogICAgICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UXQ6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6CiAgICAgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3RRdDo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2gpOgogICAgICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UXQ6OnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2gp
OgogICAgICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFJvb3RDb21wb3NpdGlu
Z0xheWVyKToKICAgICAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjppbnZhbGlkYXRl
KToKICAgICAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXROb25Db21wb3NpdGVk
Q29udGVudHNOZWVkRGlzcGxheSk6CiAgICAgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RR
dDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKToKICAgICAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlSG9zdFF0Ojpmb3JjZVJlcGFpbnQpOgogICAgICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0UXQ6OnNpemVEaWRDaGFuZ2UpOgogICAgICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0UXQ6OmRpZEluc3RhbGxQYWdlT3ZlcmxheSk6CiAgICAgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3RRdDo6ZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkpOgogICAgICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0UXQ6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KToKICAgICAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgog
ICAgICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnBlcmZvcm1TY2hlZHVsZWRMYXll
ckZsdXNoKToKICAgICAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpsYXllckZsdXNo
VGltZXJGaXJlZCk6CiAgICAgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6Y3JlYXRl
UGFnZU92ZXJsYXlMYXllcik6CiAgICAgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6
ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIpOgogICAgICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0UXQ6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQpOgogICAgICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UXQ6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CiAgICAgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RRdDo6cGFpbnRDb250ZW50cyk6CiAgICAgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3RRdDo6c2hvd0RlYnVnQm9yZGVycyk6CiAgICAgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3RRdDo6c2hvd1JlcGFpbnRDb3VudGVyKToKICAgICAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKToKICAgICAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0Lmg6IEFkZGVkLgogICAgICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmxheWVyVHJlZUNvbnRleHQpOgogICAgICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnBhdXNlUmVuZGVyaW5nKToKICAgICAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpyZXN1bWVSZW5kZXJpbmcpOgogICAgCiAgICBn
aXQtc3ZuLWlkOiBodHRwOi8vc3ZuLndlYmtpdC5vcmcvcmVwb3NpdG9yeS93ZWJraXQvdHJ1bmtA
ODg3OTkgMjY4ZjQ1Y2MtY2QwOS0wNDEwLWFiM2MtZDUyNjkxYjRkYmZjCgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4
IGI4YTNiMDUuLjM3YjNkMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MyBAQAorMjAxMS0wNi0x
NCAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPiBhbmQgVmlhdGNo
ZXNsYXYgT3N0YXBlbmtvIDxvc3RhcGVua28udmlhdGNoZXNsYXZAbm9raWEuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gSW1wbGVtZW50
IGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG9uIFdLMiBRdCBwb3J0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjkzNQorCisgICAgICAgIEltcGxlbWVu
dGluZyBMYXllclRyZWVIb3N0IGFuZCBMYXllclRyZWVDb250ZXh0IGFuZCBMYXllclRyZWVIb3N0
IGZvciBRdC4KKyAgICAgICAgQWRkIHRoZSBuZWNlc3NhcnkgcGx1bWJpbmcgdG8gbWFrZSB0aGUg
TGF5ZXJUcmVlSG9zdCB3b3JrIHdpdGggUXQsIGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBNYWMKKyAg
ICAgICAgaW1wbGVtZW50YXRpb24gKHRoZSBjb2RlIGlzIG5lYXJseSBpZGVudGljYWwpLiBUaGlz
IGluY2x1ZGVzIGNyZWF0aW5nIHRoZSByaWdodCBsYXllcnMgZm9yIHRoZQorICAgICAgICBvdmVy
bGF5IGFuZCBmb3IgdGhlIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQsIGFuZCBwYXNzaW5nIHRoZSBy
b290IGxheWVyIHRvIHRoZSBVSSBwcm9jZXNzLgorCisgICAgICAgIEFsc28sIHNpbmNlIExheWVy
VHJlZUhvc3RRdCBpcyBjb21waWxlZCwgd2UgaGF2ZSB0byBhZGQgc29tZSBvZiB0aGUgcmVzdCBv
ZiB0aGUgZXhpc3RpbmcgcGF0Y2hlcywKKyAgICAgICAgbmFtZWx5IHRoZSBuZXcgbWVzc2FnZXM6
IHN5bmNDb21wb3NpdGluZ0xheWVycyBhbmQgdXBkYXRlQ29tcG9zaXRpbmdMYXllckNvbnRlbnQs
IGFuZCBjcmVhdGUgYQorICAgICAgICBzdHViIGltcGxlbWVudGF0aW9uIGZvciB0aGVtIGluIERy
YXdpbmdBcmVhUHJveHkuCisKKyAgICAgICAgTm90ZSB0aGF0IHRoaXMgaXMgbm90IGFjdGl2YXRl
ZCB5ZXQsIHVudGlsIHdlIGVuYWJsZSBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBpbiB0aGUgc2V0
dGluZ3MgYW5kCisgICAgICAgIGNyZWF0ZSB0aGUgcmlnaHQgR3JhcGhpY3NMYXllci4KKworICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weToKKyAgICAgICAgKiBTaGFyZWQvTGF5
ZXJUcmVlQ29udGV4dC5oOgorICAgICAgICAqIFNoYXJlZC9xdC9MYXllclRyZWVDb250ZXh0UXQu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0OjpMYXllclRyZWVDb250ZXh0
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dDo6fkxheWVyVHJlZUNvbnRleHQp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0OjplbmNvZGUpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVDb250ZXh0OjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVDb250ZXh0Ojppc0VtcHR5KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6
RHJhd2luZ0FyZWFQcm94eTo6c3luY0NvbXBvc2l0aW5nTGF5ZXJzKToKKyAgICAgICAgKFdlYktp
dDo6RHJhd2luZ0FyZWFQcm94eTo6dXBkYXRlQ29tcG9zaXRpbmdMYXllckNvbnRlbnQpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAq
IFdlYktpdDIucHJvOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3Jh
cGhpY3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0Q29tcG9zaXRpbmdJbmZv
Rm9yVGhpc0xheWVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9z
dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OmNyZWF0ZSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlSG9zdFF0Ojp+TGF5ZXJUcmVlSG9zdFF0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdFF0OjpMYXllclRyZWVIb3N0UXQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UXQ6OnNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RRdDo6c2NoZWR1bGVMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlSG9zdFF0OjpjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUhvc3RRdDo6c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJG
bHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2V0Um9vdENvbXBvc2l0
aW5nTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmludmFsaWRhdGUp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldE5vbkNvbXBvc2l0ZWRDb250
ZW50c05lZWREaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzY3Jv
bGxOb25Db21wb3NpdGVkQ29udGVudHMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UXQ6OmZvcmNlUmVwYWludCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2l6
ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6ZGlkSW5zdGFs
bFBhZ2VPdmVybGF5KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpkaWRVbmlu
c3RhbGxQYWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2V0
UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UXQ6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3RRdDo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UXQ6OmxheWVyRmx1c2hUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlSG9zdFF0OjpjcmVhdGVQYWdlT3ZlcmxheUxheWVyKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlSG9zdFF0OjpkZXN0cm95UGFnZU92ZXJsYXlMYXllcik6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6bm90aWZ5U3luY1JlcXVpcmVkKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlSG9zdFF0OjpzaG93RGVidWdCb3JkZXJzKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlSG9zdFF0OjpzaG93UmVwYWludENvdW50ZXIpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuaDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6bGF5ZXJUcmVlQ29udGV4dCk6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6cGF1c2VSZW5kZXJpbmcpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0UXQ6OnJlc3VtZVJlbmRlcmluZyk6CisKIDIwMTEtMDYtMTQgIE5vYW0g
Um9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdDIvU2NyaXB0cy93
ZWJraXQyL21lc3NhZ2VzLnB5CmluZGV4IDI5ODIzMzMuLjljYTM0NGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkKQEAgLTQ2NCw2ICs0NjQsNyBAQCBkZWYg
aGVhZGVyc19mb3JfdHlwZSh0eXBlKToKICAgICAgICAgJ1dlYkNvcmU6OlRleHRDaGVja2luZ1Jl
c3VsdCc6ICc8V2ViQ29yZS9UZXh0Q2hlY2tlckNsaWVudC5oPicsCiAgICAgICAgICdXZWJLaXQ6
OldlYkdlc3R1cmVFdmVudCc6ICciV2ViRXZlbnQuaCInLAogICAgICAgICAnV2ViS2l0OjpXZWJL
ZXlib2FyZEV2ZW50JzogJyJXZWJFdmVudC5oIicsCisgICAgICAgICdXZWJLaXQ6OldlYkxheWVy
VXBkYXRlSW5mbyc6ICciV2ViTGF5ZXJUcmVlSW5mby5oIicsCiAgICAgICAgICdXZWJLaXQ6Oldl
Yk1vdXNlRXZlbnQnOiAnIldlYkV2ZW50LmgiJywKICAgICAgICAgJ1dlYktpdDo6V2ViVG91Y2hF
dmVudCc6ICciV2ViRXZlbnQuaCInLAogICAgICAgICAnV2ViS2l0OjpXZWJXaGVlbEV2ZW50Jzog
JyJXZWJFdmVudC5oIicsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTGF5ZXJU
cmVlQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0xheWVyVHJlZUNvbnRleHQuaApp
bmRleCA4NjY3Yzk4Li4yZGI1ODRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
TGF5ZXJUcmVlQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9MYXllclRyZWVD
b250ZXh0LmgKQEAgLTQ3LDYgKzQ3LDggQEAgcHVibGljOgogICAgIHVpbnQzMl90IGNvbnRleHRJ
RDsKICNlbGlmIFBMQVRGT1JNKFdJTikKICAgICBIV05EIHdpbmRvdzsKKyNlbGlmIFBMQVRGT1JN
KFFUKQorICAgIHVpbnQzMl90IHdlYkxheWVySUQ7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9MYXllclRyZWVDb250ZXh0UXQuY3BwIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL3F0L0xheWVyVHJlZUNvbnRleHRRdC5jcHAKaW5kZXggZjFiZjFiNC4u
ZDM3ZDc5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0xheWVyVHJlZUNv
bnRleHRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0xheWVyVHJlZUNvbnRl
eHRRdC5jcHAKQEAgLTI2LDQxICsyNiwzOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKIAotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisj
aW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCisjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgi
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBMYXllclRyZWVDb250ZXh0OjpMYXllclRyZWVDb250
ZXh0KCkKKyAgICA6IHdlYkxheWVySUQoMCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQog
CiBMYXllclRyZWVDb250ZXh0Ojp+TGF5ZXJUcmVlQ29udGV4dCgpCiB7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KIAotdm9pZCBMYXllclRyZWVDb250ZXh0OjplbmNvZGUoQ29yZUlQQzo6QXJn
dW1lbnRFbmNvZGVyKikgY29uc3QKK3ZvaWQgTGF5ZXJUcmVlQ29udGV4dDo6ZW5jb2RlKENvcmVJ
UEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIGVuY29kZXItPmVuY29kZSh3ZWJMYXllcklEKTsKIH0KIAotYm9vbCBMYXllclRy
ZWVDb250ZXh0OjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwgTGF5ZXJUcmVlQ29u
dGV4dCYpCitib29sIExheWVyVHJlZUNvbnRleHQ6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERl
Y29kZXIqIGRlY29kZXIsIExheWVyVHJlZUNvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZGVjb2Rlci0+ZGVjb2Rl
KGNvbnRleHQud2ViTGF5ZXJJRCk7CiB9CiAKIGJvb2wgTGF5ZXJUcmVlQ29udGV4dDo6aXNFbXB0
eSgpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gIXdlYkxheWVySUQ7CiB9CiAKLWJvb2wgb3BlcmF0b3I9PShjb25zdCBMYXllclRy
ZWVDb250ZXh0JiwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpCitib29sIG9wZXJhdG9yPT0oY29u
c3QgTGF5ZXJUcmVlQ29udGV4dCYgYSwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgYikKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBhLndlYkxh
eWVySUQgPT0gYi53ZWJMYXllcklEOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IDJhMWVhNWQuLmMx
YmQ5MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVBy
b3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaApA
QCAtNTIsNiArNTIsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTGF5ZXJUcmVlQ29u
dGV4dDsKIGNsYXNzIFVwZGF0ZUluZm87CitjbGFzcyBXZWJMYXllclRyZWVJbmZvOworY2xhc3Mg
V2ViTGF5ZXJVcGRhdGVJbmZvOwogY2xhc3MgV2ViUGFnZVByb3h5OwogCiAjaWYgUExBVEZPUk0o
TUFDKQpAQCAtMTA3LDYgKzEwOSwxMCBAQCBwcml2YXRlOgogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKICAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5n
TW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBMYXllclRyZWVDb250ZXh0
JikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1
aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBVcGRhdGVJbmZvJikgeyB9CisjaWYg
VVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdMYXll
cnMoY29uc3QgV2ViTGF5ZXJUcmVlSW5mbyYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVD
b21wb3NpdGluZ0xheWVyQ29udGVudChjb25zdCBXZWJMYXllclVwZGF0ZUluZm8mKSB7IH0KKyNl
bmRpZgogI2VuZGlmCiAjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAgICAgdmlydHVh
bCB2b2lkIGRpZFNldFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIHsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4g
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbgpp
bmRleCBlMTEyYWQ2Li4yZTc2MTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbgpAQCAtMjcsNiArMjcsMTAgQEAgbWVz
c2FnZXMgLT4gRHJhd2luZ0FyZWFQcm94eSB7CiAgICAgRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBXZWJLaXQ6OkxheWVyVHJlZUNv
bnRleHQgY29udGV4dCkKICAgICBFeGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0
X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgV2ViS2l0OjpVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCiAj
ZW5kaWYKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01B
UFBFUikKKyAgICBTeW5jQ29tcG9zaXRpbmdMYXllcnMoV2ViS2l0OjpXZWJMYXllclRyZWVJbmZv
IGxheWVyVHJlZUluZm8pCisgICAgVXBkYXRlQ29tcG9zaXRpbmdMYXllckNvbnRlbnQoV2ViS2l0
OjpXZWJMYXllclVwZGF0ZUluZm8gbGF5ZXJVcGRhdGVJbmZvKQorI2VuZGlmCiAjaWYgRU5BQkxF
KFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAgICAgSW52YWxpZGF0ZShXZWJDb3JlOjpJbnRSZWN0IGRp
cnR5UmVjdCkKICAgICBEaWRTZXRTaXplKFdlYkNvcmU6OkludFNpemUgdmlld1NpemUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybyBiL1NvdXJjZS9XZWJLaXQyL1dlYktp
dDIucHJvCmluZGV4IGRmYjhjYmIuLjQyMjIyMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYktpdDIucHJvCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCkBAIC0xNDksNiAr
MTQ5LDcgQEAgSEVBREVSUyArPSBcCiAgICAgU2hhcmVkL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24u
aCBcCiAgICAgU2hhcmVkL1dlYkdyYXBoaWNzQ29udGV4dC5oIFwKICAgICBTaGFyZWQvV2ViSW1h
Z2UuaCBcCisgICAgU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaCBcCiAgICAgU2hhcmVkL1dlYk5h
dmlnYXRpb25EYXRhU3RvcmUuaCBcCiAgICAgU2hhcmVkL1dlYk51bWJlci5oIFwKICAgICBTaGFy
ZWQvV2ViT3BlblBhbmVsUGFyYW1ldGVycy5oIFwKQEAgLTI3OSw2ICsyODAsNyBAQCBIRUFERVJT
ICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVycm9ycy5oIFwKICAgICBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmggXAogICAgIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25DbGllbnQuaCBcCisgICAgV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmggXAogICAgIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmggXAogICAgIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCBcCiAgICAgV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCBcCkBAIC0zNTcsNiAr
MzU5LDcgQEAgU09VUkNFUyArPSBcCiAgICAgU2hhcmVkL1dlYkdyYXBoaWNzQ29udGV4dC5jcHAg
XAogICAgIFNoYXJlZC9XZWJLZXlib2FyZEV2ZW50LmNwcCBcCiAgICAgU2hhcmVkL1dlYkltYWdl
LmNwcCBcCisgICAgU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwIFwKICAgICBTaGFyZWQvV2Vi
TW91c2VFdmVudC5jcHAgXAogICAgIFNoYXJlZC9XZWJPcGVuUGFuZWxQYXJhbWV0ZXJzLmNwcCBc
CiAgICAgU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuY3BwIFwKQEAgLTUwNCw2ICs1
MDcsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVM
b2FkZXJDbGllbnQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xv
Y2F0aW9uQ2xpZW50LmNwcCBcCisgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFw
aGljc0xheWVyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0
b3JDbGllbnQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IDIx
OGYyZmYuLjA1OGVmY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcApAQCAtNDA1LDkgKzQw
NSw5IEBAIHN0YXRpYyBWZWN0b3I8RmxvYXRSZWN0PiBkaXZpZGVJbnRvVGlsZXMoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogICAgIHJldHVybiB0aWxlczsKIH0KIAotc3RhdGljIHZvaWQgY29sbGVj
dENvbXBvc2l0aW5nSW5mb0ZvclRoaXNMYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgV2ViTGF5
ZXJUcmVlSW5mbyYgb3V0SW5mbywgVmVjdG9yPFdlYkdyYXBoaWNzTGF5ZXIqPiYgb3V0TGF5ZXJz
KQorc3RhdGljIHZvaWQgY29sbGVjdENvbXBvc2l0aW5nSW5mb0ZvclRoaXNMYXllcihHcmFwaGlj
c0xheWVyKiBncmFwaGljc0xheWVyLCBXZWJMYXllclRyZWVJbmZvJiBvdXRJbmZvLCBWZWN0b3I8
V2ViR3JhcGhpY3NMYXllcio+JiBvdXRMYXllcnMpCiB7Ci0gICAgV2ViR3JhcGhpY3NMYXllciog
bGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpOworICAgIFdlYkdyYXBoaWNzTGF5ZXIq
IGxheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKGdyYXBoaWNzTGF5ZXIpOwogICAgIGlmICghbGF5
ZXIpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIWxheWVyLT5pc01vZGlmaWVkKCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAK
aW5kZXggZGE0MmFlNi4uMDMxYzNmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcApAQCAtMzQsNiArMzQsMTAgQEAKICNlbmRp
ZgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShRVCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2lu
Y2x1ZGUgInF0L0xheWVyVHJlZUhvc3RRdC5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQ0LDYgKzQ4LDggQEAgUGFzc1JlZlB0
cjxMYXllclRyZWVIb3N0PiBMYXllclRyZWVIb3N0OjpjcmVhdGUoV2ViUGFnZSogd2ViUGFnZSkK
ICAgICByZXR1cm4gTGF5ZXJUcmVlSG9zdENBTWFjOjpjcmVhdGUod2ViUGFnZSk7CiAjZWxpZiBQ
TEFURk9STShXSU4pICYmIEhBVkUoV0tRQ0EpCiAgICAgcmV0dXJuIExheWVyVHJlZUhvc3RDQVdp
bjo6Y3JlYXRlKHdlYlBhZ2UpOworI2VsaWYgUExBVEZPUk0oUVQpICYmIFVTRShURVhUVVJFX01B
UFBFUikKKyAgICByZXR1cm4gTGF5ZXJUcmVlSG9zdFF0OjpjcmVhdGUod2ViUGFnZSk7CiAjZWxz
ZQogICAgIHJldHVybiAwOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCmluZGV4IDU3OGFlMDguLjJi
N2U0YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9M
YXllclRyZWVIb3N0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCkBAIC0yNSw4ICsyNSwyNzkgQEAKICAqLwogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNp
bmNsdWRlICJMYXllclRyZWVIb3N0UXQuaCIKKworI2luY2x1ZGUgIkRyYXdpbmdBcmVhSW1wbC5o
IgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJEcmF3aW5nQXJl
YVByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJNZXNzYWdlSUQuaCIKKyNpbmNsdWRlICJXZWJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAi
V2ViUGFnZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvU2V0dGluZ3MuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitQYXNzUmVmUHRyPExheWVyVHJlZUhvc3RRdD4gTGF5ZXJUcmVlSG9zdFF0Ojpj
cmVhdGUoV2ViUGFnZSogd2ViUGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVy
VHJlZUhvc3RRdCh3ZWJQYWdlKSk7Cit9CisKK0xheWVyVHJlZUhvc3RRdDo6fkxheWVyVHJlZUhv
c3RRdCgpCit7Cit9CisKK0xheWVyVHJlZUhvc3RRdDo6TGF5ZXJUcmVlSG9zdFF0KFdlYlBhZ2Uq
IHdlYlBhZ2UpCisgICAgOiBMYXllclRyZWVIb3N0KHdlYlBhZ2UpCisgICAgLCBtX25vdGlmeUFm
dGVyU2NoZWR1bGVkTGF5ZXJGbHVzaChmYWxzZSkKKyAgICAsIG1faXNWYWxpZCh0cnVlKQorICAg
ICwgbV9sYXllckZsdXNoVGltZXIodGhpcywgJkxheWVyVHJlZUhvc3RRdDo6bGF5ZXJGbHVzaFRp
bWVyRmlyZWQpCisgICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCh0cnVlKQorewor
ICAgIC8vIENyZWF0ZSBhIHJvb3QgbGF5ZXIuCisgICAgbV9yb290TGF5ZXIgPSBHcmFwaGljc0xh
eWVyOjpjcmVhdGUodGhpcyk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fcm9vdExheWVyLT5zZXRO
YW1lKCJMYXllclRyZWVIb3N0UXQgcm9vdCBsYXllciIpOworI2VuZGlmCisgICAgbV9yb290TGF5
ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7CisgICAgbV9yb290TGF5ZXItPnNldFNpemUobV93
ZWJQYWdlLT5zaXplKCkpOworICAgIG1fbGF5ZXJUcmVlQ29udGV4dC53ZWJMYXllcklEID0gdG9X
ZWJHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+aWQoKTsKKworICAgIG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyNpZm5k
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
Z2VPdmVybGF5TGF5ZXIoKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKworfQorCit2b2lk
IExheWVyVHJlZUhvc3RRdDo6ZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkoKQoreworICAgIGRlc3Ry
b3lQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOwor
ICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAg
IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCitib29sIExheWVyVHJlZUhvc3RRdDo6Zmx1c2hQ
ZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKK3sKKyAgICBtX3Jvb3RMYXllci0+c3luY0NvbXBvc2l0aW5n
U3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
LT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBpZiAobV9wYWdl
T3ZlcmxheUxheWVyKQorICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnN5bmNDb21wb3NpdGlu
Z1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworCisgICAgcmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBh
Z2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdT
dWJmcmFtZXMoKTsKK30KKworCit2b2lkIExheWVyVHJlZUhvc3RRdDo6cGVyZm9ybVNjaGVkdWxl
ZExheWVyRmx1c2goKQoreworICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKKworICAg
IGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZmx1c2hQZW5kaW5n
TGF5ZXJDaGFuZ2VzKCkpIHsKKyAgICAgICAgaWYgKG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXll
ckZsdXNoKSB7CisgICAgICAgICAgICAvLyBMZXQgdGhlIGRyYXdpbmcgYXJlYSBrbm93IHRoYXQg
d2UndmUgZG9uZSBhIGZsdXNoIG9mIHRoZSBsYXllciBjaGFuZ2VzLgorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8RHJhd2luZ0FyZWFJbXBsKj4obV93ZWJQYWdlLT5kcmF3aW5nQXJlYSgpKS0+bGF5
ZXJIb3N0RGlkRmx1c2hMYXllcnMoKTsKKyAgICAgICAgICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVs
ZWRMYXllckZsdXNoID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgV2ViR3JhcGhpY3NMYXll
cjo6c2VuZExheWVyc1RvVUlQcm9jZXNzKG1fcm9vdExheWVyLmdldCgpLCBtX3dlYlBhZ2UpOwor
ICAgIH0KK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmxheWVyRmx1c2hUaW1lckZpcmVkKFRp
bWVyPExheWVyVHJlZUhvc3RRdD4qKQoreworICAgIHBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNo
KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCkK
K3sKKyAgICBBU1NFUlQoIW1fcGFnZU92ZXJsYXlMYXllcik7CisKKyAgICBtX3BhZ2VPdmVybGF5
TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7CisjaWZuZGVmIE5ERUJVRworICAg
IG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVlSG9zdFF0IHBhZ2Ugb3Zlcmxh
eSBjb250ZW50Iik7CisjZW5kaWYKKworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0RHJhd3ND
b250ZW50KHRydWUpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2Ut
PnNpemUoKSk7CisKKyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9wYWdlT3ZlcmxheUxheWVy
LmdldCgpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmRlc3Ryb3lQYWdlT3ZlcmxheUxh
eWVyKCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKKyAgICBtX3BhZ2VPdmVy
bGF5TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBu
dWxscHRyOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6bm90aWZ5QW5pbWF0aW9uU3RhcnRl
ZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpCit7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlSG9zdFF0Ojpub3RpZnlTeW5jUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciopCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpwYWludENvbnRlbnRz
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFp
bnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpCit7CisgICAgaWYg
KGdyYXBoaWNzTGF5ZXIgPT0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyKSB7CisgICAgICAg
IG1fd2ViUGFnZS0+ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX3BhZ2VPdmVybGF5
TGF5ZXIpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5kcmF3UGFnZU92ZXJsYXkoZ3JhcGhpY3NDb250
ZXh0LCBjbGlwUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK2Jvb2wgTGF5ZXJU
cmVlSG9zdFF0OjpzaG93RGVidWdCb3JkZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJQ
YWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5zaG93RGVidWdCb3JkZXJzKCk7Cit9CisKK2Jv
b2wgTGF5ZXJUcmVlSG9zdFF0OjpzaG93UmVwYWludENvdW50ZXIoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCktPnNob3dSZXBhaW50Q291bnRl
cigpOworfQorCitib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZygpCit7CisgICAgLy8gQ2Fubm90IGVuYWJsZSB0aGlzIExheWVyVHJlZUhvc3RRdCBpbXBs
ZW1lbnRhdGlvbgorICAgIC8vIHVudGlsIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02MDYyMSBpcyBjb21taXR0ZWQuCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKyNlbHNlCiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgogCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGJvb2wgTGF5
ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKQEAgLTM1LDMgKzMw
Niw0IEBAIGJvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
KCkKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWVkZWRkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oCkBA
IC0wLDAgKzEsOTcgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTGF5ZXJUcmVlSG9z
dFF0X2gKKyNkZWZpbmUgTGF5ZXJUcmVlSG9zdFF0X2gKKworI2luY2x1ZGUgIkxheWVyVHJlZUNv
bnRleHQuaCIKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiVGltZXIuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBVcGRhdGVJbmZvOworY2xh
c3MgV2ViUGFnZTsKKworY2xhc3MgTGF5ZXJUcmVlSG9zdFF0IDogcHVibGljIExheWVyVHJlZUhv
c3QsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPExheWVyVHJlZUhvc3RRdD4gY3JlYXRlKFdlYlBhZ2UqKTsKKyAgICB2aXJ0dWFs
IH5MYXllclRyZWVIb3N0UXQoKTsKKworICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZygpOworCisgICAgdmlydHVhbCBjb25zdCBMYXllclRyZWVDb250ZXh0JiBs
YXllclRyZWVDb250ZXh0KCkgeyByZXR1cm4gbV9sYXllclRyZWVDb250ZXh0OyB9CisgICAgdmly
dHVhbCB2b2lkIHNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgdmlydHVhbCB2b2lkIHNldFNob3Vs
ZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCk7CisgICAgdmlydHVhbCB2
b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgdmlydHVhbCB2b2lkIHNldE5vbkNv
bXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNl
dCk7CisgICAgdmlydHVhbCB2b2lkIGZvcmNlUmVwYWludCgpOworICAgIHZpcnR1YWwgdm9pZCBz
aXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpOworCisgICAgdmly
dHVhbCB2b2lkIGRpZEluc3RhbGxQYWdlT3ZlcmxheSgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRV
bmluc3RhbGxQYWdlT3ZlcmxheSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3ZlcmxheU5l
ZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQg
cGF1c2VSZW5kZXJpbmcoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkg
eyB9CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBMYXllclRyZWVIb3N0UXQoV2ViUGFnZSop
OworCitwcml2YXRlOgorICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIHZv
aWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwg
ZG91YmxlIHRpbWUpOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciopOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRz
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQm
LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgY2xpcFJlY3QpOworICAgIHZpcnR1YWwgYm9vbCBzaG93RGVidWdCb3JkZXJzKCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcigpIGNvbnN0OworCisgICAg
Ly8gTGF5ZXJUcmVlSG9zdFF0CisgICAgdm9pZCBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7Cisg
ICAgdm9pZCBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpOworICAgIGJvb2wgZmx1c2hQZW5kaW5n
TGF5ZXJDaGFuZ2VzKCk7CisgICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworICAg
IHZvaWQgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKKyAgICB2b2lkIHNlbmRMYXllcnNU
b1VJKCk7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7
CisKKyAgICAvLyBUaGUgbGF5ZXIgd2hpY2ggY29udGFpbnMgYWxsIG5vbi1jb21wb3NpdGVkIGNv
bnRlbnQuCisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllcjsKKworICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUg
bnVsbCBpZiB0aGVyZSdzIG5vIHBhZ2Ugb3ZlcmxheS4KKyAgICBPd25QdHI8V2ViQ29yZTo6R3Jh
cGhpY3NMYXllcj4gbV9wYWdlT3ZlcmxheUxheWVyOworCisgICAgYm9vbCBtX25vdGlmeUFmdGVy
U2NoZWR1bGVkTGF5ZXJGbHVzaDsKKyAgICBib29sIG1faXNWYWxpZDsKKyAgICBMYXllclRyZWVD
b250ZXh0IG1fbGF5ZXJUcmVlQ29udGV4dDsKKyAgICB2b2lkIGxheWVyRmx1c2hUaW1lckZpcmVk
KFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUhvc3RRdD4qKTsKKyAgICBXZWJDb3JlOjpUaW1lcjxM
YXllclRyZWVIb3N0UXQ+IG1fbGF5ZXJGbHVzaFRpbWVyOworICAgIGJvb2wgbV9sYXllckZsdXNo
U2NoZWR1bGluZ0VuYWJsZWQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBMYXllclRyZWVIb3N0UXRf
aAo=
</data>
<flag name="review"
          id="91236"
          type_id="1"
          status="-"
          setter="noam"
    />
    <flag name="commit-queue"
          id="91237"
          type_id="3"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103834</attachid>
            <date>2011-08-12 15:55:14 -0700</date>
            <delta_ts>2011-08-12 15:56:52 -0700</delta_ts>
            <desc>Patch: Enable accelerated compositing for QDesktopWebView </desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>44021</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjZDE3MWJkLi5kZmQwNzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTEtMDgtMTIgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbUXRdIEltcGxlbWVudCBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBvbiBX
SzIgUXQgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTY5MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRlZCBhbiBpZCBwcm9wZXJ0eSB0byBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciwgc28g
d2UgY2FuIG9wdGltaXplIG1hcCBsb29rdXAgZm9yIGl0IGluIFdlYktpdDIuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLiBUaGlzIGlzIGEgc3RlcCB0b3dhcmRzIGhhdmluZyB0ZXN0cyBpbiBMYXlv
dXRUZXN0cy9jb21wb3NpdGluZyBydW4gb24gV2ViS2l0Mi4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldElEKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjppZCk6CisKIDIwMTEtMDgtMTIgIFNh
bSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNb3ZlIGNvbXBpbGVyIHNwZWNp
ZmljIG1hY3JvcyB0byB0aGVpciBvd24gaGVhZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlci5oCmluZGV4IDk0NDdmMTEuLjI5NjI4ZDAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIuaApAQCAtODksMTEgKzg5LDE0IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYpOwogCiAgICAgVGV4dHVy
ZU1hcHBlck5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGUuZ2V0KCk7IH0KKyAgICB2
b2lkIHNldElEKHVuc2lnbmVkIGxvbmcgbmV3SUQpIHsgbV9pZCA9IG5ld0lEOyB9CisgICAgdW5z
aWduZWQgbG9uZyBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KIAogcHJpdmF0ZToKICAgICBP
d25QdHI8VGV4dHVyZU1hcHBlck5vZGU+IG1fbm9kZTsKICAgICBib29sIG1fc3luY1F1ZXVlZDsK
ICAgICBpbnQgbV9jaGFuZ2VNYXNrOworICAgIHVuc2lnbmVkIGxvbmcgbV9pZDsKICAgICBUZXh0
dXJlTWFwcGVyTm9kZTo6Q29udGVudERhdGEgbV9wZW5kaW5nQ29udGVudDsKICAgICBWZWN0b3I8
UmVmUHRyPFRleHR1cmVNYXBwZXJBbmltYXRpb24+ID4gbV9hbmltYXRpb25zOwogICAgIHZvaWQg
YW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQoVGltZXI8R3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI+Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzE1NDczNS4uZDFhOGM5NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDg2IEBACisyMDExLTA4LTEyICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBu
b2tpYS5jb20+IGFuZCBWaWF0Y2hlc2xhdiBPc3RhcGVua28gIDxvc3RhcGVua28udmlhdGNoZXNs
YXZAbm9raWEuY29tPgorCisgICAgICAgIFtRdF0gSW1wbGVtZW50IGFjY2VsZXJhdGVkIGNvbXBv
c2l0aW5nIG9uIFdLMiBRdCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01NjkzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEVuYWJsZSBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBmb3IgUURlc2t0b3BX
ZWJWaWV3LiBUaGlzIHVzZXMgdGhlIExheWVyVHJlZUhvc3QgYWJzdHJhY3Rpb24sCisgICAgICAg
IGFzIHdlbGwgYXMgdGhlIGNyb3NzLXByb2Nlc3MgR3JhcGhpY3NMYXllciBzZXJpYWxpemF0aW9u
LiBJdCBkb2VzIG5vdCB3b3JrIHdpdGggUVRvdWNoV2ViVmlldyB5ZXQsCisgICAgICAgIGFzIGl0
IHJlbGllcyBvbiBpbXBlcmF0aXZlIHBhaW50aW5nIGFuZCBzb21lIG9mIHRoZSBpc3N1ZXMgd2l0
aCBRVG91Y2hXZWJWaWV3IGFyZSBub3QgeWV0IG1hdGVyaWFsaXplZCwKKyAgICAgICAgbGlrZSB0
aGUgdXNlIG9mIFF0IFNjZW5lR3JhcGguCisKKyAgICAgICAgQWZ0ZXIgdGhpcyBwYXRjaCwgd2hl
biBpbiBRRGVza3RvcFdlYlZpZXcgYW5kIGNvbXBvc2l0ZWQgY29udGVudCBpcyByZW5kZXJlZCwg
dGhlIHZpZXcgd2lsbCBzd2l0Y2ggdG8gY29tcG9zaXRpbmcKKyAgICAgICAgbW9kZSBmb3IgdGhl
IGVudGlyZSBjb250ZW50LCBpbmNsdWRpbmcgdGhlICJub24gY29tcG9zaXRlZCIgY29udGVudC4g
VGhpcyBpcyBpbiBsaW5lIHdpdGggdGhlIFNhZmFyaSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBv
ZiBXZWJLaXQyLCB3aGljaCBhbHNvIHVzZXMgTGF5ZXJUcmVlSG9zdCBpbiB0aGUgc2FtZSB3YXku
CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHk6CisgICAgICAgICogU2hh
cmVkL0xheWVyVHJlZUNvbnRleHQuaDoKKyAgICAgICAgKiBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5m
by5jcHA6CisgICAgICAgICogU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaDoKKyAgICAgICAgKiBT
aGFyZWQvcXQvTGF5ZXJUcmVlQ29udGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlQ29udGV4dDo6TGF5ZXJUcmVlQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUNvbnRleHQ6On5MYXllclRyZWVDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
Q29udGV4dDo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dDo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dDo6aXNFbXB0eSk6CisgICAg
ICAgIChXZWJLaXQ6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJl
YVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6dXBkYXRlV2Vi
Vmlldyk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OmNvbnRlbnRzUmVjdCk6
CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OnN5bmNDb21wb3NpdGluZ0xheWVy
cyk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZUNvbXBvc2l0aW5n
TGF5ZXJDb250ZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oOgor
ICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5Ojp2aWV3cG9ydFZpc2libGVSZWN0KToK
KyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6Y29udGVudHNTY2FsZSk6CisgICAg
ICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OmlzQmFja2luZ1N0b3JlUmVhZHkpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAq
IFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRy
YXdpbmdBcmVhUHJveHlJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVh
UHJveHlJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvVGls
ZWREcmF3aW5nQXJlYVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGlsZWREcmF3aW5nQXJl
YVByb3h5Ojpjb250ZW50c1NjYWxlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvVGlsZWREcmF3aW5n
QXJlYVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0
LmNwcDogQWRkZWQuCisgICAgICAgICogV2ViS2l0Mi5wcm86CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbGxlY3RDb21wb3NpdGluZ0luZm9Gb3JUaGlzTGF5ZXIpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlSG9zdDo6Y3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJU
cmVlSG9zdFF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpjcmVhdGUp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6On5MYXllclRyZWVIb3N0UXQpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OkxheWVyVHJlZUhvc3RRdCk6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFi
bGVkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzY2hlZHVsZUxheWVyRmx1
c2gpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmNhbmNlbFBlbmRpbmdMYXll
ckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXRTaG91bGROb3Rp
ZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlSG9zdFF0OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RRdDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3RRdDo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVIb3N0UXQ6OnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyk6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6Zm9yY2VSZXBhaW50KToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzaXplRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlSG9zdFF0OjpkaWRJbnN0YWxsUGFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0UXQ6OmRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheSk6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJG
bHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6bGF5ZXJGbHVzaFRpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZVBhZ2VPdmVy
bGF5TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRlc3Ryb3lQYWdl
T3ZlcmxheUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojpub3RpZnlB
bmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0Ojpub3Rp
ZnlTeW5jUmVxdWlyZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnBhaW50
Q29udGVudHMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNob3dEZWJ1Z0Jv
cmRlcnMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNob3dSZXBhaW50Q291
bnRlcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc01haW5RdCk6CisKIDIwMTEtMDgtMTEg
IFZpYXRjaGVzbGF2IE9zdGFwZW5rbyAgPG9zdGFwZW5rby52aWF0Y2hlc2xhdkBub2tpYS5jb20+
CiAKICAgICAgICAgVmVjdG9yQXJndW1lbnRDb2RlciBkb2Vzbid0IGVuY29kZS9kZWNvZGUgZW5v
dWdoIGRhdGEgZm9yIG1vcmUgdGhhbiBvbmUgYnl0ZSB2ZWN0b3IgZWxlbWVudHMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weSBiL1NvdXJjZS9X
ZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQppbmRleCBiZWJmOGExLi4xMzFiOGQx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkK
KysrIGIvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5CkBAIC00NjUs
NiArNDY1LDcgQEAgZGVmIGhlYWRlcnNfZm9yX3R5cGUodHlwZSk6CiAgICAgICAgICdXZWJLaXQ6
OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyJzogW10sCiAgICAgICAgICdXZWJLaXQ6
OldlYkNvbnRleHRVc2VyTWVzc2FnZUVuY29kZXInOiBbXSwKICAgICAgICAgJ1dlYktpdDo6V2Vi
R2VzdHVyZUV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKKyAgICAgICAgJ1dlYktpdDo6V2ViTGF5
ZXJVcGRhdGVJbmZvJzogWyciV2ViTGF5ZXJUcmVlSW5mby5oIiddLAogICAgICAgICAnV2ViS2l0
OjpXZWJLZXlib2FyZEV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKICAgICAgICAgJ1dlYktpdDo6
V2ViTW91c2VFdmVudCc6IFsnIldlYkV2ZW50LmgiJ10sCiAgICAgICAgICdXZWJLaXQ6OldlYlRv
dWNoRXZlbnQnOiBbJyJXZWJFdmVudC5oIiddLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL0xheWVyVHJlZUNvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9MYXllclRy
ZWVDb250ZXh0LmgKaW5kZXggODY2N2M5OC4uMmRiNTg0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL0xheWVyVHJlZUNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvTGF5ZXJUcmVlQ29udGV4dC5oCkBAIC00Nyw2ICs0Nyw4IEBAIHB1YmxpYzoKICAgICB1aW50
MzJfdCBjb250ZXh0SUQ7CiAjZWxpZiBQTEFURk9STShXSU4pCiAgICAgSFdORCB3aW5kb3c7Cisj
ZWxpZiBQTEFURk9STShRVCkKKyAgICB1aW50MzJfdCB3ZWJMYXllcklEOwogI2VuZGlmCiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAKaW5kZXggYTAxMjg1
NS4uNjUwOGIzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJl
ZUluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNw
cApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgogCisj
aW5jbHVkZSAiQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAjaW5jbHVk
ZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5
ZXJUcmVlSW5mby5oCmluZGV4IGEwZTY4ZDMuLjFjOGViZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkxheWVyVHJlZUluZm8uaApAQCAtMzMsNyArMzMsOCBAQCB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXR5cGVkZWYgdWludDMyX3QgV2ViTGF5
ZXJJRDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBXZWJMYXllcklEOworZW51bSB7IEludmFsaWRX
ZWJMYXllcklEID0gMCB9OwogCiBzdHJ1Y3QgV2ViTGF5ZXJVcGRhdGVJbmZvIHsKICAgICBXZWJM
YXllclVwZGF0ZUluZm8oKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9x
dC9MYXllclRyZWVDb250ZXh0UXQuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0xheWVy
VHJlZUNvbnRleHRRdC5jcHAKaW5kZXggZjFiZjFiNC4uZDM3ZDc5YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL3F0L0xheWVyVHJlZUNvbnRleHRRdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL3F0L0xheWVyVHJlZUNvbnRleHRRdC5jcHAKQEAgLTI2LDQxICsyNiwz
OCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIK
IAotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVy
LmgiCisjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBMYXllclRyZWVDb250ZXh0OjpMYXllclRyZWVDb250ZXh0KCkKKyAgICA6IHdlYkxheWVySUQo
MCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiBMYXllclRyZWVDb250ZXh0Ojp+TGF5
ZXJUcmVlQ29udGV4dCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBMYXll
clRyZWVDb250ZXh0OjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKikgY29uc3QKK3Zv
aWQgTGF5ZXJUcmVlQ29udGV4dDo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5j
b2RlcikgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGVuY29kZXItPmVuY29k
ZSh3ZWJMYXllcklEKTsKIH0KIAotYm9vbCBMYXllclRyZWVDb250ZXh0OjpkZWNvZGUoQ29yZUlQ
Qzo6QXJndW1lbnREZWNvZGVyKiwgTGF5ZXJUcmVlQ29udGV4dCYpCitib29sIExheWVyVHJlZUNv
bnRleHQ6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIExheWVyVHJl
ZUNvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4gZGVjb2Rlci0+ZGVjb2RlKGNvbnRleHQud2ViTGF5ZXJJRCk7CiB9
CiAKIGJvb2wgTGF5ZXJUcmVlQ29udGV4dDo6aXNFbXB0eSgpIGNvbnN0CiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gIXdlYkxheWVySUQ7CiB9
CiAKLWJvb2wgb3BlcmF0b3I9PShjb25zdCBMYXllclRyZWVDb250ZXh0JiwgY29uc3QgTGF5ZXJU
cmVlQ29udGV4dCYpCitib29sIG9wZXJhdG9yPT0oY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgYSwg
Y29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgYikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiBhLndlYkxheWVySUQgPT0gYi53ZWJMYXllcklEOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5LmNwcAppbmRleCBmODUyZTJmLi5mZjNkZWRiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgogCisj
aW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5Lmgi
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNTMsNCArNTQsMjcgQEAgdm9pZCBEcmF3
aW5nQXJlYVByb3h5OjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUm
IHNjcm9sbE9mZnNldCkKICAgICBzaXplRGlkQ2hhbmdlKCk7CiB9CiAKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKK3ZvaWQgRHJhd2luZ0Fy
ZWFQcm94eTo6dXBkYXRlV2ViVmlldygpCit7CisgICAgbV93ZWJQYWdlUHJveHktPnNldFZpZXdO
ZWVkc0Rpc3BsYXkodmlld3BvcnRWaXNpYmxlUmVjdCgpKTsKK30KKworV2ViQ29yZTo6SW50UmVj
dCBEcmF3aW5nQXJlYVByb3h5Ojpjb250ZW50c1JlY3QoKSBjb25zdAoreworICAgIHJldHVybiBJ
bnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fd2ViUGFnZVByb3h5LT52aWV3U2l6ZSgpKTsKK30K
Kwordm9pZCBEcmF3aW5nQXJlYVByb3h5OjpzeW5jQ29tcG9zaXRpbmdMYXllcnMoY29uc3QgV2Vi
TGF5ZXJUcmVlSW5mbyYgaW5mbykKK3sKKyAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+c3luY0Nv
bXBvc2l0aW5nTGF5ZXJzKGluZm8pOworfQorCit2b2lkIERyYXdpbmdBcmVhUHJveHk6OnVwZGF0
ZUNvbXBvc2l0aW5nTGF5ZXJDb250ZW50KGNvbnN0IFdlYkxheWVyVXBkYXRlSW5mbyYgaW5mbykK
K3sKKyAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+dXBkYXRlQ29tcG9zaXRpbmdMYXllckNvbnRl
bnQoaW5mbyk7Cit9CisKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IDJhMWVhNWQuLmFlYTlk
OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaApAQCAt
MjgsOCArMjgsOSBAQAogI2RlZmluZSBEcmF3aW5nQXJlYVByb3h5X2gKIAogI2luY2x1ZGUgIkRy
YXdpbmdBcmVhSW5mby5oIgotI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
SW50UmVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgorI2luY2x1ZGUgPHN0ZGlu
dC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiAjaWYgUExBVEZPUk0oUVQpCkBA
IC00NCwxNCArNDUsMTMgQEAgbmFtZXNwYWNlIENvcmVJUEMgewogICAgIGNsYXNzIE1lc3NhZ2VJ
RDsKIH0KIAotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIEludFJlY3Q7Ci19Ci0KIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBMYXllclRyZWVDb250ZXh0OworY2xhc3MgTGF5ZXJU
cmVlSG9zdFByb3h5OwogY2xhc3MgVXBkYXRlSW5mbzsKK2NsYXNzIFdlYkxheWVyVHJlZUluZm87
CitjbGFzcyBXZWJMYXllclVwZGF0ZUluZm87CiBjbGFzcyBXZWJQYWdlUHJveHk7CiAKICNpZiBQ
TEFURk9STShNQUMpCkBAIC05MCw2ICs5MCwxNSBAQCBwdWJsaWM6CiAgICAgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogICAgIHZvaWQgc2V0
U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Ny
b2xsT2Zmc2V0KTsKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRF
WFRVUkVfTUFQUEVSKQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVXZWJWaWV3KCk7CisgICAgdmly
dHVhbCBXZWJDb3JlOjpJbnRSZWN0IHZpZXdwb3J0VmlzaWJsZVJlY3QoKSBjb25zdCB7IHJldHVy
biBjb250ZW50c1JlY3QoKTsgfQorICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBjb250ZW50
c1JlY3QoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0IGNvbnRlbnRzU2NhbGUoKSBjb25zdCB7
IHJldHVybiAxLjA7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNCYWNraW5nU3RvcmVSZWFkeSgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nTGF5
ZXJzKGNvbnN0IFdlYkxheWVyVHJlZUluZm8mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29t
cG9zaXRpbmdMYXllckNvbnRlbnQoY29uc3QgV2ViTGF5ZXJVcGRhdGVJbmZvJik7CisjZW5kaWYK
IHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBEcmF3aW5nQXJlYVByb3h5KERyYXdpbmdBcmVhVHlw
ZSwgV2ViUGFnZVByb3h5Kik7CiAKQEAgLTk5LDYgKzEwOCwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAg
V2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3Njcm9sbE9m
ZnNldDsKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVf
TUFQUEVSKQorICAgIE93blB0cjxMYXllclRyZWVIb3N0UHJveHk+IG1fbGF5ZXJUcmVlSG9zdFBy
b3h5OworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgLy8gQ29yZUlQQyBtZXNzYWdlIGhhbmRsZXJz
LgogICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgcHVyZSB2aXJ0dWFsLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4g
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbgpp
bmRleCBlMTEyYWQ2Li4yZTc2MTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbgpAQCAtMjcsNiArMjcsMTAgQEAgbWVz
c2FnZXMgLT4gRHJhd2luZ0FyZWFQcm94eSB7CiAgICAgRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBXZWJLaXQ6OkxheWVyVHJlZUNv
bnRleHQgY29udGV4dCkKICAgICBFeGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0
X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgV2ViS2l0OjpVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCiAj
ZW5kaWYKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01B
UFBFUikKKyAgICBTeW5jQ29tcG9zaXRpbmdMYXllcnMoV2ViS2l0OjpXZWJMYXllclRyZWVJbmZv
IGxheWVyVHJlZUluZm8pCisgICAgVXBkYXRlQ29tcG9zaXRpbmdMYXllckNvbnRlbnQoV2ViS2l0
OjpXZWJMYXllclVwZGF0ZUluZm8gbGF5ZXJVcGRhdGVJbmZvKQorI2VuZGlmCiAjaWYgRU5BQkxF
KFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAgICAgSW52YWxpZGF0ZShXZWJDb3JlOjpJbnRSZWN0IGRp
cnR5UmVjdCkKICAgICBEaWRTZXRTaXplKFdlYkNvcmU6OkludFNpemUgdmlld1NpemUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcAppbmRl
eCAzNTJmYjFkLi5iZThkMmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
RHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKQEAgLTM0LDYgKzM0LDEwIEBACiAjaW5jbHVkZSAiV2Vi
UHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9SZWdpb24uaD4KIAorI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2luY2x1ZGUg
IkxheWVyVHJlZUhvc3RQcm94eS5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTY3LDggKzcxLDEzIEBAIHZvaWQgRHJhd2luZ0Fy
ZWFQcm94eUltcGw6OnBhaW50KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQg
Y29udGV4dCwKIHsKICAgICB1bnBhaW50ZWRSZWdpb24gPSByZWN0OwogCi0gICAgaWYgKGlzSW5B
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpKQorICAgIGlmIChpc0luQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ01vZGUoKSkgeworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNF
KFRFWFRVUkVfTUFQUEVSKQorICAgICAgICBpZiAobV9sYXllclRyZWVIb3N0UHJveHkpCisgICAg
ICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+cGFpbnQoY29udGV4dCwgcmVjdCwgdW5wYWlu
dGVkUmVnaW9uKTsKKyNlbmRpZgogICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgQVNTRVJU
KG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQgPD0gbV9uZXh0QmFja2luZ1N0b3JlU3RhdGVJ
RCk7CiAgICAgaWYgKG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQgPCBtX25leHRCYWNraW5n
U3RvcmVTdGF0ZUlEKSB7CkBAIC0zMjksNiArMzM4LDEwIEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94
eUltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29u
dGV4CiAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwogICAgIG1fbGF5ZXJUcmVlQ29udGV4
dCA9IGxheWVyVHJlZUNvbnRleHQ7CiAgICAgbV93ZWJQYWdlUHJveHktPmVudGVyQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7CisjaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQorICAgIGlmICghbV9sYXllclRyZWVIb3N0UHJveHkpCisgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdFByb3h5ID0gYWRvcHRQdHIobmV3IExheWVyVHJlZUhvc3RQcm94eSh0aGlzKSk7CisjZW5k
aWYKIH0KIAogdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5SW1wbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHlJbXBsLmgKaW5kZXggM2NmNWY5MS4uNDlhY2NiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmgKQEAgLTM5LDYgKzM5LDggQEAgY2xhc3Mg
UmVnaW9uOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgTGF5ZXJUcmVlSG9zdFByb3h5
OworCiBjbGFzcyBEcmF3aW5nQXJlYVByb3h5SW1wbCA6IHB1YmxpYyBEcmF3aW5nQXJlYVByb3h5
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxEcmF3aW5nQXJlYVByb3h5SW1wbD4g
Y3JlYXRlKFdlYlBhZ2VQcm94eSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVy
VHJlZUhvc3RQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmM2Qz
YTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVl
SG9zdFByb3h5LmgKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRl
ZiBMYXllclRyZWVIb3N0UHJveHlfaAorI2RlZmluZSBMYXllclRyZWVIb3N0UHJveHlfaAorCisj
aW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgor
I2luY2x1ZGUgIlJlZ2lvbi5oIgorI2luY2x1ZGUgIlJ1bkxvb3AuaCIKKyNpbmNsdWRlICJXZWJM
YXllclRyZWVJbmZvLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJl
Y3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgorCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIu
aCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViTGF5ZXJUcmVlSW5m
bzsKK2NsYXNzIFdlYkxheWVyVXBkYXRlSW5mbzsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK2NsYXNzIExheWVyVHJlZUhvc3RQcm94eSA6IHB1YmxpYyBHcmFwaGljc0xheWVyQ2xpZW50
IHsKK3B1YmxpYzoKKyAgICBMYXllclRyZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQcm94eSopOwor
ICAgIHZpcnR1YWwgfkxheWVyVHJlZUhvc3RQcm94eSgpIHsgfQorICAgIHZvaWQgc3luY0NvbXBv
c2l0aW5nTGF5ZXJzKGNvbnN0IFdlYkxheWVyVHJlZUluZm8mKTsKKyAgICB2b2lkIHVwZGF0ZUNv
bXBvc2l0aW5nTGF5ZXJDb250ZW50KGNvbnN0IFdlYkxheWVyVXBkYXRlSW5mbyYpOworICAgIHZv
aWQgZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3Nh
Z2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisgICAgdm9pZCBwYWludChCYWNraW5n
U3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jiwg
UmVnaW9uJik7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHVwZGF0ZVdlYlZpZXcoKTsKKworICAg
IFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gY3JlYXRlTGF5ZXIoV2ViTGF5ZXJJRCk7CisKKyAg
ICBHcmFwaGljc0xheWVyKiBsYXllckJ5SUQoV2ViTGF5ZXJJRCBpZCkgeyByZXR1cm4gKGlkID09
IEludmFsaWRXZWJMYXllcklEKSA/IDAgOiBtX2xheWVycy5nZXQoaWQpLmxheWVyOyB9CisgICAg
R3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0K
KworICAgIHZvaWQgc3luY0RlbGV0ZWRMYXllcnMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRD
b250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NM
YXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSB7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVycygpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcigpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisKKyAgICBSdW5Mb29wOjpUaW1lcjxMYXllclRyZWVIb3N0UHJveHk+IG1f
YW5pbWF0aW9uVGltZXI7CisgICAgRHJhd2luZ0FyZWFQcm94eSogbV9kcmF3aW5nQXJlYVByb3h5
OworCisgICAgc3RydWN0IExheWVyRGF0YSB7CisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqIGxheWVyOworICAgICAgICBRSW1hZ2UgaW1hZ2U7CisgICAgICAgIExheWVyRGF0YSgpIDog
bGF5ZXIoMCkgeyB9CisgICAgfTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJMYXllcklELCBM
YXllckRhdGE+IExheWVyTWFwOworICAgIGZsb2F0IG1fY29udGVudFNjYWxlOworCisjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSKQorICAgIE93blB0cjxUZXh0dXJlTWFwcGVyPiBtX3RleHR1cmVNYXBw
ZXI7CisjZW5kaWYKKworICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKKyAg
ICBWZWN0b3I8V2ViTGF5ZXJJRD4gbV9sYXllcnNUb0RlbGV0ZTsKKworICAgIExheWVyTWFwIG1f
bGF5ZXJzOworICAgIFdlYkxheWVySUQgbV9yb290TGF5ZXJJRDsKK307CisKK30KKworI2VuZGlm
IC8vIExheWVyVHJlZUhvc3RQcm94eV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwCmluZGV4IDFmYTgwNmIuLjM0NjJkMGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3Bw
CkBAIC02NTksNiArNjU5LDExIEBAIGJvb2wgVGlsZWREcmF3aW5nQXJlYVByb3h5OjpoYXNQZW5k
aW5nVXBkYXRlcygpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitmbG9hdCBUaWxlZERy
YXdpbmdBcmVhUHJveHk6OmNvbnRlbnRzU2NhbGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2N1
cnJlbnRUaWxlU2V0LT5jb250ZW50c1NjYWxlKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERy
YXdpbmdBcmVhUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdB
cmVhUHJveHkuaAppbmRleCBmOWU4ZDk0Li4wMGE3MzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5oCkBAIC03NCw2ICs3NCw3IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0KGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKTsKICAgICB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQpOworICAgIGZsb2F0IGNv
bnRlbnRzU2NhbGUoKSBjb25zdDsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
ICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoQ29tcG9zaXRpbmdDb250ZXh0KHVpbnQzMl90IC8qIGNv
bnRleHRJRCAqLykgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
TGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xh
eWVyVHJlZUhvc3RQcm94eVF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4xZDNkZGU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcApAQCAtMCwwICsxLDI3MSBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgorCisjaW5jbHVkZSAiRHJh
d2luZ0FyZWFNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5o
IgorI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgor
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJRdC5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENv
ZGVycy5oIgorI2luY2x1ZGUgInRleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgor
I2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAidGV4bWFwL1RleHR1
cmVNYXBwZXJOb2RlLmgiCisjaW5jbHVkZSA8UURhdGVUaW1lPgorI2luY2x1ZGUgPFF0RGVidWc+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IExheWVy
VHJlZUhvc3RQcm94eTo6Y3JlYXRlTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklEKQoreworICAgIEdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBuZXdMYXllciA9IG5ldyBHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcih0aGlzKTsKKyAgICBuZXdMYXllci0+c2V0SUQobGF5ZXJJRCk7CisgICAgcmV0
dXJuIGFkb3B0UHRyKG5ld0xheWVyKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnN5
bmNEZWxldGVkTGF5ZXJzKCkKK3sKKyAgICBMYXllck1hcDo6aXRlcmF0b3IgZW5kSXRlcmF0b3Ig
PSBtX2xheWVycy5lbmQoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbGF5ZXJzVG9E
ZWxldGUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViTGF5ZXJJRCBpZCA9IG1fbGF5ZXJzVG9E
ZWxldGVbaV07CisgICAgICAgIExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZpbmQo
aWQpOworCisgICAgICAgIC8vIFRoaXMgbWlnaHQgaGFwcGVuIGlmIHRoZSB3ZWIgcHJvY2VzcyBk
ZWxldGVzIHRoZSBsYXllciBhZnRlciB0aGUgVUkgcHJvY2VzcyBhbHJlYWR5IGNsZWFyZWQgdGhl
IGxheWVycyBoZXJlLgorICAgICAgICBpZiAoaXQgPT0gZW5kSXRlcmF0b3IpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQubGF5ZXI7CisgICAgICAgIG1f
bGF5ZXJzLnJlbW92ZShpdCk7CisgICAgfQorfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6
cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYgaW5D
bGlwKQoreworICAgIFdlYkxheWVySUQgaWQgPSBXZWJMYXllcklEKHN0YXRpY19jYXN0PGNvbnN0
IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKj4obGF5ZXIpLT5pZCgpKTsKKyAgICBMYXllck1h
cDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5maW5kKGlkKTsKKyAgICBpZiAoaXQgPT0gbV9sYXll
cnMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKyAgICBMYXllckRhdGEmIGRhdGEgPSBpdC0+c2Vj
b25kOworICAgIEludFJlY3QgY2xpcChpbkNsaXApOworICAgIGNsaXAuaW50ZXJzZWN0KEludFJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgZGF0YS5pbWFnZS5zaXplKCkpKTsKKyAgICBRUGFpbnRlciog
cGFpbnRlciA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAgcGFpbnRlci0+c2V0Q29t
cG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKKyAgICBwYWlu
dGVyLT5kcmF3SW1hZ2UoY2xpcCwgZGF0YS5pbWFnZSwgY2xpcCk7Cit9CisKK0xheWVyVHJlZUhv
c3RQcm94eTo6TGF5ZXJUcmVlSG9zdFByb3h5KERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVh
UHJveHkpCisgICAgOiBtX2FuaW1hdGlvblRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJkxh
eWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlV2ViVmlldykKKyAgICAsIG1fZHJhd2luZ0FyZWFQcm94
eShkcmF3aW5nQXJlYVByb3h5KQoreworICAgIG1fcm9vdExheWVyID0gY3JlYXRlTGF5ZXIoSW52
YWxpZFdlYkxheWVySUQpOworICAgIG1fcm9vdExheWVyLT5zZXRNYXNrc1RvQm91bmRzKGZhbHNl
KTsKKyAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKKyAgICBtX3Jvb3RM
YXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKDAsIDAsIDApKTsKKworICAgIC8vIFRo
ZSByb290IGxheWVyIHNob3VsZCBub3QgaGF2ZSB6ZXJvIHNpemUsIG9yIGl0IHdvdWxkIGJlIG9w
dGltaXplZCBvdXQuCisgICAgbV9yb290TGF5ZXItPnNldFNpemUoRmxvYXRTaXplKDEuMCwgMS4w
KSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jQ29tcG9zaXRpbmdMYXllcnMo
Y29uc3QgV2ViTGF5ZXJUcmVlSW5mbyYgaW5mbykKK3sKKyAgICBtX2NvbnRlbnRTY2FsZSA9IGlu
Zm8uY29udGVudFNjYWxlOworICAgIG1fbGF5ZXJzVG9EZWxldGUuYXBwZW5kKGluZm8uZGVsZXRl
ZExheWVySURzKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5mby5sYXllcnMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgV2ViTGF5ZXJJRCBpZCA9IGluZm8ubGF5ZXJzW2ld
LmlkOworCisgICAgICAgIGlmIChtX2xheWVycy5jb250YWlucyhpZCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBMYXllckRhdGEgZGF0YTsKKworICAgICAgICAvLyBXZSBoYXZl
IHRvIGxlYWsgdGhlIGxheWVyIGFuZCBtYW5hZ2UgaXQgb3Vyc2VsdmVzLCBzaW5jZSB0aGlzIGlz
IGEgSGFzaE1hcCBhbmQgT3duUHRyIGlzIG5vdCBjb3B5YWJsZS4KKyAgICAgICAgZGF0YS5sYXll
ciA9IGNyZWF0ZUxheWVyKGlkKS5sZWFrUHRyKCk7CisgICAgICAgIG1fbGF5ZXJzLmFkZChpZCwg
ZGF0YSk7CisKKyAgICAgICAgaWYgKGlkICE9IGluZm8ucm9vdExheWVySUQpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBtX3Jvb3RMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsK
KyAgICAgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKGRhdGEubGF5ZXIpOworICAgIH0KKworICAg
IGlmIChpbmZvLnJvb3RMYXllcklEICE9IG1fcm9vdExheWVySUQpIHsKKyAgICAgICAgbV9yb290
TGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CisgICAgICAgIG1fcm9vdExheWVySUQgPSBpbmZv
LnJvb3RMYXllcklEOworICAgICAgICBpZiAobV9yb290TGF5ZXJJRCkgeworICAgICAgICAgICAg
TGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmluZChpbmZvLnJvb3RMYXllcklEKTsK
KyAgICAgICAgICAgIGlmIChpdCAhPSBtX2xheWVycy5lbmQoKSkKKyAgICAgICAgICAgICAgICBt
X3Jvb3RMYXllci0+YWRkQ2hpbGQoaXQtPnNlY29uZC5sYXllcik7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmb3IgKHNpemVfdCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGluZm8ubGF5
ZXJzLnNpemUoKTsgKytsYXllckluZGV4KSB7CisgICAgICAgIGNvbnN0IFdlYkxheWVySW5mbyYg
bGF5ZXJJbmZvID0gaW5mby5sYXllcnNbbGF5ZXJJbmRleF07CisgICAgICAgIFdlYkxheWVySUQg
aWQgPSBsYXllckluZm8uaWQ7CisKKyAgICAgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9s
YXllcnMuZmluZChpZCk7CisgICAgICAgIGlmIChpdCA9PSBtX2xheWVycy5lbmQoKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIExheWVyRGF0YSYgZGF0YSA9IGl0LT5zZWNvbmQ7
CisgICAgICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gZGF0YS5sYXllcjsKKworICAgICAgICBs
YXllci0+c2V0TmFtZShsYXllckluZm8ubmFtZSk7CisKKyAgICAgICAgLy8gV2UgaGF2ZSBhIGNv
bnRhaW5lciBsYXllciBhcyBhIHBhcmVudCB0byB0aGUgcm9vdCBsYXllciwgc28gd2Ugc2hvdWxk
bid0IHBhcmVudCBpdCB0byB0aGUgd2ViIHByb2Nlc3MgdmFsdWUuCisgICAgICAgIGlmIChpZCAh
PSBpbmZvLnJvb3RMYXllcklEKQorICAgICAgICAgICAgbGF5ZXItPnNldFBhcmVudChsYXllckJ5
SUQobGF5ZXJJbmZvLnBhcmVudCkpOworICAgICAgICBsYXllci0+c2V0UmVwbGljYXRlZEJ5TGF5
ZXIobGF5ZXJCeUlEKGxheWVySW5mby5yZXBsaWNhKSk7CisgICAgICAgIGxheWVyLT5zZXRNYXNr
TGF5ZXIobGF5ZXJCeUlEKGxheWVySW5mby5tYXNrKSk7CisKKyAgICAgICAgbGF5ZXItPnNldFBv
c2l0aW9uKGxheWVySW5mby5wb3MpOworICAgICAgICBsYXllci0+c2V0U2l6ZShsYXllckluZm8u
c2l6ZSk7CisgICAgICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0obGF5ZXJJbmZvLnRyYW5zZm9ybSk7
CisgICAgICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChsYXllckluZm8uYW5jaG9yUG9pbnQpOwor
ICAgICAgICBsYXllci0+c2V0Q2hpbGRyZW5UcmFuc2Zvcm0obGF5ZXJJbmZvLmNoaWxkcmVuVHJh
bnNmb3JtKTsKKyAgICAgICAgbGF5ZXItPnNldEJhY2tmYWNlVmlzaWJpbGl0eShsYXllckluZm8u
YmFja2ZhY2VWaXNpYmxlKTsKKyAgICAgICAgbGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKGxheWVy
SW5mby5jb250ZW50c09wYXF1ZSk7CisgICAgICAgIGxheWVyLT5zZXRDb250ZW50c1JlY3QobGF5
ZXJJbmZvLmNvbnRlbnRzUmVjdCk7CisgICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobGF5
ZXJJbmZvLmRyYXdzQ29udGVudCk7CisKKyAgICAgICAgLy8gTmV2ZXIgbWFrZSB0aGUgcm9vdCBs
YXllciBjbGlwLgorICAgICAgICBsYXllci0+c2V0TWFza3NUb0JvdW5kcyhpZCA9PSBpbmZvLnJv
b3RMYXllcklEID8gZmFsc2UgOiBsYXllckluZm8ubWFza3NUb0JvdW5kcyk7CisgICAgICAgIGxh
eWVyLT5zZXRPcGFjaXR5KGxheWVySW5mby5vcGFjaXR5KTsKKyAgICAgICAgbGF5ZXItPnNldFBy
ZXNlcnZlczNEKGxheWVySW5mby5wcmVzZXJ2ZXMzRCk7CisgICAgICAgIFZlY3RvcjxHcmFwaGlj
c0xheWVyKj4gY2hpbGRyZW47CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXll
ckluZm8uY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChHcmFwaGljc0xh
eWVyKiBjaGlsZCA9IGxheWVyQnlJRChsYXllckluZm8uY2hpbGRyZW5baV0pKQorICAgICAgICAg
ICAgICAgIGNoaWxkcmVuLmFwcGVuZChjaGlsZCk7CisgICAgICAgIH0KKyAgICAgICAgbGF5ZXIt
PnNldENoaWxkcmVuKGNoaWxkcmVuKTsKKworICAgICAgICBpZiAobGF5ZXJJbmZvLmltYWdlQmFj
a2luZ1N0b3JlKSB7CisgICAgICAgICAgICBsYXllci0+c2V0Q29udGVudHNUb0ltYWdlKGxheWVy
SW5mby5pbWFnZUJhY2tpbmdTdG9yZS0+Y3JlYXRlSW1hZ2UoKS5nZXQoKSk7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGxheWVyLT5zZXRDb250ZW50c1RvSW1h
Z2UoMCk7CisKKyAgICAgICAgaWYgKCFsYXllckluZm8uZHJhd3NDb250ZW50KSB7CisgICAgICAg
ICAgICBkYXRhLmltYWdlID0gUUltYWdlKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorICAgICAgICBJbnRTaXplIHdhbnRlZFNpemUobGF5ZXJJbmZvLnNpemUud2lkdGgoKSwg
bGF5ZXJJbmZvLnNpemUuaGVpZ2h0KCkpOworCisgICAgICAgIGlmIChJbnRTaXplKGRhdGEuaW1h
Z2Uuc2l6ZSgpKSAhPSBsYXllckluZm8uc2l6ZSkgeworICAgICAgICAgICAgUUltYWdlIGltYWdl
KHdhbnRlZFNpemUud2lkdGgoKSwgd2FudGVkU2l6ZS5oZWlnaHQoKSwgbGF5ZXItPmNvbnRlbnRz
T3BhcXVlKCkgPyBRSW1hZ2U6OkZvcm1hdF9SR0IxNiA6IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9Q
cmVtdWx0aXBsaWVkKTsKKyAgICAgICAgICAgIGltYWdlLmZpbGwoMCk7CisgICAgICAgICAgICBk
YXRhLmltYWdlID0gaW1hZ2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1cGRhdGVXZWJWaWV3
KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVDb21wb3NpdGluZ0xheWVy
Q29udGVudChjb25zdCBXZWJMYXllclVwZGF0ZUluZm8mIGNodW5rKQoreworICAgIGlmIChjaHVu
ay5iaXRtYXBIYW5kbGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIExheWVyTWFw
OjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZpbmQoY2h1bmsubGF5ZXJJRCk7CisgICAgaWYgKGl0
ID09IG1fbGF5ZXJzLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBRUGFpbnRlciBwYWlu
dGVyKCZpdC0+c2Vjb25kLmltYWdlKTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRt
YXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShjaHVuay5iaXRtYXBIYW5kbGUpOworICAgIGlm
ICghYml0bWFwKQorICAgICAgICByZXR1cm47CisgICAgUUltYWdlIGltYWdlRnJvbVVwZGF0ZUNo
dW5rID0gYml0bWFwLT5jcmVhdGVRSW1hZ2UoKTsKKyAgICBpZiAoaW1hZ2VGcm9tVXBkYXRlQ2h1
bmsuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEZsb2F0UmVjdCBzY2FsZWRSZWN0
KGNodW5rLnJlY3QpOworICAgIHNjYWxlZFJlY3Quc2NhbGUoMS4wIC8gbV9jb250ZW50U2NhbGUp
OworICAgIGl0LT5zZWNvbmQubGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChzY2FsZWRSZWN0
KTsKKyAgICBwYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25N
b2RlX1NvdXJjZSk7CisgICAgcGFpbnRlci5kcmF3SW1hZ2UoY2h1bmsucmVjdCwgaW1hZ2VGcm9t
VXBkYXRlQ2h1bmspOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cGFpbnQoQmFja2lu
Z1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCB0YXJnZXRQYWludGVyLCBjb25zdCBJbnRS
ZWN0JiwgUmVnaW9uJikKK3sKKyAgICBGbG9hdFJlY3QgY2xpcFJlY3QoUVJlY3RGKHRhcmdldFBh
aW50ZXItPmNsaXBSZWdpb24oKS5ib3VuZGluZ1JlY3QoKSkpOworICAgIGlmIChjbGlwUmVjdC5p
c0VtcHR5KCkpCisgICAgICAgIGNsaXBSZWN0ID0gbV9kcmF3aW5nQXJlYVByb3h5LT52aWV3cG9y
dFZpc2libGVSZWN0KCk7CisgICAgRmxvYXRSZWN0IHNjYWxlZENvbnRlbnRzUmVjdCA9IG1fZHJh
d2luZ0FyZWFQcm94eS0+Y29udGVudHNSZWN0KCk7CisgICAgc2NhbGVkQ29udGVudHNSZWN0LnNj
YWxlKDEuMCAvIG1fZHJhd2luZ0FyZWFQcm94eS0+Y29udGVudHNTY2FsZSgpKTsKKyAgICBjbGlw
UmVjdC5pbnRlcnNlY3Qoc2NhbGVkQ29udGVudHNSZWN0KTsKKworICAgIEdyYXBoaWNzTGF5ZXIq
IGN1cnJlbnRSb290TGF5ZXIgPSByb290TGF5ZXIoKTsKKyAgICBpZiAoIWN1cnJlbnRSb290TGF5
ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4
dHVyZU1hcHBlck5vZGUoY3VycmVudFJvb3RMYXllcik7CisKKyAgICBpZiAoIW5vZGUpCisgICAg
ICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHRhcmdldFBhaW50ZXIp
OworICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQorICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBU
ZXh0dXJlTWFwcGVyOjpjcmVhdGUoJmNvbnRleHQpOworCisgICAgbV90ZXh0dXJlTWFwcGVyLT5z
ZXRHcmFwaGljc0NvbnRleHQoJmNvbnRleHQpOworICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0SW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHko
KSk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dC50ZXh0
RHJhd2luZ01vZGUoKSk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRWaWV3cG9ydFNpemUobV9k
cmF3aW5nQXJlYVByb3h5LT52aWV3cG9ydFZpc2libGVSZWN0KCkuc2l6ZSgpKTsKKworICAgIG5v
ZGUtPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKKyAgICBjb25zdCBR
VHJhbnNmb3JtIHQgPSB0YXJnZXRQYWludGVyLT50cmFuc2Zvcm0oKTsKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBtYXRyaXgodC5tMTEoKSwgdC5tMTIoKSwgMCwgdC5tMTMoKSwgdC5tMjEoKSwg
dC5tMjIoKSwgMCwgdC5tMjMoKSwgMCwgMCwgMSwgMCwgdC5tMzEoKSwgdC5tMzIoKSwgMCwgdC5t
MzMoKSk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsKKyAgICBjdXJyZW50
Um9vdExheWVyLT5zZXRPcGFjaXR5KHRhcmdldFBhaW50ZXItPm9wYWNpdHkoKSk7CisgICAgYm9v
bCBmb3JjZVN5bmMgPSAobWF0cml4ICE9IGN1cnJlbnRSb290TGF5ZXItPnRyYW5zZm9ybSgpKTsK
KyAgICBjdXJyZW50Um9vdExheWVyLT5zZXRUcmFuc2Zvcm0obWF0cml4KTsKKworICAgIGJvb2wg
YWxsb3dTeW5jID0gdHJ1ZTsKKyAgICBpZiAoIWZvcmNlU3luYykKKyAgICAgICAgYWxsb3dTeW5j
ID0gbV9kcmF3aW5nQXJlYVByb3h5LT5pc0JhY2tpbmdTdG9yZVJlYWR5KCk7CisKKyAgICBpZiAo
YWxsb3dTeW5jKSB7CisgICAgICAgIHN5bmNEZWxldGVkTGF5ZXJzKCk7CisgICAgICAgIGN1cnJl
bnRSb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKGNsaXBSZWN0KTsKKyAgICB9CisKKyAg
ICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKKyAgICBtX3RleHR1cmVNYXBwZXIt
PmJlZ2luQ2xpcChtYXRyaXgsIGNsaXBSZWN0KTsKKworICAgIG5vZGUtPnBhaW50KCk7CisKKyAg
ICBtX3RleHR1cmVNYXBwZXItPmVuZENsaXAoKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmVuZFBh
aW50aW5nKCk7CisKKyAgICBpZiAobm9kZS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0Fu
aW1hdGlvbnMoKSkKKyAgICAgICAgdXBkYXRlV2ViVmlldygpOworfQorCit2b2lkIExheWVyVHJl
ZUhvc3RQcm94eTo6dXBkYXRlV2ViVmlldygpCit7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT51
cGRhdGVXZWJWaWV3KCk7Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViS2l0Mi5wcm8gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwppbmRleCA0NGViYjY5
Li5mNWYzMjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybworKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwpAQCAtMTUxLDYgKzE1MSw3IEBAIEhFQURFUlMgKz0g
XAogICAgIFNoYXJlZC9XZWJHZW9sb2NhdGlvblBvc2l0aW9uLmggXAogICAgIFNoYXJlZC9XZWJH
cmFwaGljc0NvbnRleHQuaCBcCiAgICAgU2hhcmVkL1dlYkltYWdlLmggXAorICAgIFNoYXJlZC9X
ZWJMYXllclRyZWVJbmZvLmggXAogICAgIFNoYXJlZC9XZWJOYXZpZ2F0aW9uRGF0YVN0b3JlLmgg
XAogICAgIFNoYXJlZC9XZWJOdW1iZXIuaCBcCiAgICAgU2hhcmVkL1dlYk9wZW5QYW5lbFBhcmFt
ZXRlcnMuaCBcCkBAIC0zMDEsNiArMzAyLDcgQEAgSEVBREVSUyArPSBcCiAgICAgV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJFcnJvcnMuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkdlb2xvY2F0aW9uQ2xpZW50LmggXAorICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViR3JhcGhpY3NMYXllci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
Ykluc3BlY3RvckNsaWVudC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYklu
c3BlY3RvckZyb250ZW5kQ2xpZW50LmggXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViUGxhdGZvcm1TdHJhdGVnaWVzLmggXApAQCAtMzgxLDYgKzM4Myw3IEBAIFNPVVJDRVMgKz0g
XAogICAgIFNoYXJlZC9XZWJHcmFwaGljc0NvbnRleHQuY3BwIFwKICAgICBTaGFyZWQvV2ViS2V5
Ym9hcmRFdmVudC5jcHAgXAogICAgIFNoYXJlZC9XZWJJbWFnZS5jcHAgXAorICAgIFNoYXJlZC9X
ZWJMYXllclRyZWVJbmZvLmNwcCBcCiAgICAgU2hhcmVkL1dlYk1vdXNlRXZlbnQuY3BwIFwKICAg
ICBTaGFyZWQvV2ViT3BlblBhbmVsUGFyYW1ldGVycy5jcHAgXAogICAgIFNoYXJlZC9XZWJQYWdl
Q3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBcCkBAIC00NjgsNiArNDcxLDcgQEAgU09VUkNFUyArPSBc
CiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZENsaWVudC5jcHAgXAogICAgIFVJUHJvY2Vz
cy9XZWJVSUNsaWVudC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmNwcCBcCisg
ICAgVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcCBcCiAgICAgVUlQcm9jZXNz
L3F0L1RvdWNoVmlld0ludGVyZmFjZS5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdEdlc3R1cmVS
ZWNvZ25pemVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIu
Y3BwIFwKQEAgLTU0Myw2ICs1NDcsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uQ2xpZW50LmNwcCBcCisgICAgV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkluc3BlY3RvckZyb250ZW5kQ2xpZW50LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNz
TGF5ZXIuY3BwCmluZGV4IDIxOGYyZmYuLjllYTM1ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVy
LmNwcApAQCAtMzM2LDE1ICszMzYsMTUgQEAgY29uc3QgV2ViTGF5ZXJJbmZvJiBXZWJHcmFwaGlj
c0xheWVyOjpsYXllckluZm8oKSBjb25zdAogICAgIHJldHVybiBtX2xheWVySW5mbzsKIH0KIAot
dm9pZCBXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSgpCit2b2lkIFdlYkdy
YXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
IHsKICAgICBzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNoaWxk
cmVuKClbaV0tPnN5bmNDb21wb3NpdGluZ1N0YXRlKCk7CisgICAgICAgIGNoaWxkcmVuKClbaV0t
PnN5bmNDb21wb3NpdGluZ1N0YXRlKHJlY3QpOwogICAgIGlmIChyZXBsaWNhTGF5ZXIoKSkKLSAg
ICAgICAgcmVwbGljYUxheWVyKCktPnN5bmNDb21wb3NpdGluZ1N0YXRlKCk7CisgICAgICAgIHJl
cGxpY2FMYXllcigpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShyZWN0KTsKICAgICBpZiAobWFza0xh
eWVyKCkpCi0gICAgICAgIG1hc2tMYXllcigpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOworICAg
ICAgICBtYXNrTGF5ZXIoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGUocmVjdCk7CiB9CiAKIFdlYkdy
YXBoaWNzTGF5ZXIqIHRvV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKQEAg
LTQwNSw5ICs0MDUsOSBAQCBzdGF0aWMgVmVjdG9yPEZsb2F0UmVjdD4gZGl2aWRlSW50b1RpbGVz
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICByZXR1cm4gdGlsZXM7CiB9CiAKLXN0YXRpYyB2
b2lkIGNvbGxlY3RDb21wb3NpdGluZ0luZm9Gb3JUaGlzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5
ZXIsIFdlYkxheWVyVHJlZUluZm8mIG91dEluZm8sIFZlY3RvcjxXZWJHcmFwaGljc0xheWVyKj4m
IG91dExheWVycykKK3N0YXRpYyB2b2lkIGNvbGxlY3RDb21wb3NpdGluZ0luZm9Gb3JUaGlzTGF5
ZXIoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgV2ViTGF5ZXJUcmVlSW5mbyYgb3V0SW5m
bywgVmVjdG9yPFdlYkdyYXBoaWNzTGF5ZXIqPiYgb3V0TGF5ZXJzKQogewotICAgIFdlYkdyYXBo
aWNzTGF5ZXIqIGxheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKTsKKyAgICBXZWJHcmFw
aGljc0xheWVyKiBsYXllciA9IHRvV2ViR3JhcGhpY3NMYXllcihncmFwaGljc0xheWVyKTsKICAg
ICBpZiAoIWxheWVyKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFsYXllci0+aXNNb2RpZmll
ZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJHcmFwaGljc0xheWVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaAppbmRleCBhZDYwMjFlLi4xMjk0MDFmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNz
TGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkdyYXBoaWNzTGF5ZXIuaApAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXkoKTsKICAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9h
dFJlY3QmKTsKICAgICB2b2lkIHNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCk7Ci0gICAgdmlydHVh
bCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlKCk7CisgICAgdmlydHVhbCB2b2lkIHN5bmNDb21w
b3NpdGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29t
cG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKIAogICAgIFdlYktpdDo6V2ViTGF5ZXJJ
RCBpZCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IGRhNDJhZTYuLjAzMWMzZmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTM0
LDYgKzM0LDEwIEBACiAjZW5kaWYKICNlbmRpZgogCisjaWYgUExBVEZPUk0oUVQpICYmIFVTRShU
RVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJxdC9MYXllclRyZWVIb3N0UXQuaCIKKyNlbmRpZgor
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00NCw2
ICs0OCw4IEBAIFBhc3NSZWZQdHI8TGF5ZXJUcmVlSG9zdD4gTGF5ZXJUcmVlSG9zdDo6Y3JlYXRl
KFdlYlBhZ2UqIHdlYlBhZ2UpCiAgICAgcmV0dXJuIExheWVyVHJlZUhvc3RDQU1hYzo6Y3JlYXRl
KHdlYlBhZ2UpOwogI2VsaWYgUExBVEZPUk0oV0lOKSAmJiBIQVZFKFdLUUNBKQogICAgIHJldHVy
biBMYXllclRyZWVIb3N0Q0FXaW46OmNyZWF0ZSh3ZWJQYWdlKTsKKyNlbGlmIFBMQVRGT1JNKFFU
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgcmV0dXJuIExheWVyVHJlZUhvc3RRdDo6Y3Jl
YXRlKHdlYlBhZ2UpOwogI2Vsc2UKICAgICByZXR1cm4gMDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNw
cAppbmRleCA1NzhhZTA4Li4yZmNmMmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcApAQCAtMjUsOCArMjUs
Mjc5IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFF0LmgiCisKKyNpbmNsdWRl
ICJEcmF3aW5nQXJlYUltcGwuaCIKKyNpbmNsdWRlICJEcmF3aW5nQXJlYU1lc3NhZ2VzLmgiCisj
aW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiTWVzc2FnZUlELmgiCisjaW5jbHVkZSAiV2ViR3JhcGhpY3NM
YXllci5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2Uu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0UXQ+
IExheWVyVHJlZUhvc3RRdDo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBMYXllclRyZWVIb3N0UXQod2ViUGFnZSkpOworfQorCitMYXllclRyZWVI
b3N0UXQ6On5MYXllclRyZWVIb3N0UXQoKQoreworfQorCitMYXllclRyZWVIb3N0UXQ6OkxheWVy
VHJlZUhvc3RRdChXZWJQYWdlKiB3ZWJQYWdlKQorICAgIDogTGF5ZXJUcmVlSG9zdCh3ZWJQYWdl
KQorICAgICwgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2goZmFsc2UpCisgICAgLCBt
X2lzVmFsaWQodHJ1ZSkKKyAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZMYXllclRyZWVI
b3N0UXQ6OmxheWVyRmx1c2hUaW1lckZpcmVkKQorICAgICwgbV9sYXllckZsdXNoU2NoZWR1bGlu
Z0VuYWJsZWQodHJ1ZSkKK3sKKyAgICAvLyBDcmVhdGUgYSByb290IGxheWVyLgorICAgIG1fcm9v
dExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOworI2lmbmRlZiBOREVCVUcKKyAg
ICBtX3Jvb3RMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVlSG9zdFF0IHJvb3QgbGF5ZXIiKTsKKyNl
bmRpZgorICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgIG1fcm9v
dExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKyAgICBtX2xheWVyVHJlZUNvbnRl
eHQud2ViTGF5ZXJJRCA9IHRvV2ViR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmlk
KCk7CisKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpj
cmVhdGUodGhpcyk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllci0+c2V0TmFtZSgiTGF5ZXJUcmVlSG9zdFF0IG5vbi1jb21wb3NpdGVkIGNvbnRlbnQiKTsK
KyNlbmRpZgorICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0RHJhd3NDb250ZW50
KHRydWUpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0Q29udGVudHNPcGFx
dWUobV93ZWJQYWdlLT5kcmF3c0JhY2tncm91bmQoKSAmJiAhbV93ZWJQYWdlLT5kcmF3c1RyYW5z
cGFyZW50QmFja2dyb3VuZCgpKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNl
dFNpemUobV93ZWJQYWdlLT5zaXplKCkpOworCisgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSk7CisKKyAgICBpZiAobV93ZWJQYWdlLT5o
YXNQYWdlT3ZlcmxheSgpKQorICAgICAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CisKKyAg
ICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldExh
eWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sIGxheWVyRmx1c2hpbmdFbmFibGVkKQorewor
ICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9PSBsYXllckZsdXNoaW5nRW5h
YmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJs
ZWQgPSBsYXllckZsdXNoaW5nRW5hYmxlZDsKKworICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVs
aW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1
c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNjaGVkdWxlTGF5ZXJGbHVzaCgpCit7
CisgICAgaWYgKCFtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFtX2xheWVyRmx1c2hUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2xh
eWVyRmx1c2hUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0
OjpjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpCit7CisgICAgbV9sYXllckZsdXNoVGltZXIuc3Rv
cCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0
U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sIG5vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCkK
K3sKKyAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IG5vdGlmeUFmdGVyU2No
ZWR1bGVkTGF5ZXJGbHVzaDsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFJvb3RDb21w
b3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCit7Cisg
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOworCisg
ICAgLy8gQWRkIHRoZSBhY2NlbGVyYXRlZCBsYXllciB0cmVlIGhpZXJhcmNoeS4KKyAgICBpZiAo
Z3JhcGhpY3NMYXllcikKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5hZGRD
aGlsZChncmFwaGljc0xheWVyKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmludmFsaWRh
dGUoKQoreworICAgIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7CisKKyAgICBBU1NFUlQobV9p
c1ZhbGlkKTsKKyAgICBtX3Jvb3RMYXllciA9IG51bGxwdHI7CisgICAgbV9pc1ZhbGlkID0gZmFs
c2U7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzZXROb25Db21wb3NpdGVkQ29udGVudHNO
ZWVkRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgIGlm
IChtX3BhZ2VPdmVybGF5TGF5ZXIpCisgICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisK
K3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Ny
b2xsT2Zmc2V0KQoreworICAgIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KHNj
cm9sbFJlY3QpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6Zm9yY2VSZXBhaW50KCkKK3sK
KyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNp
emVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkKK3sKKyAgICBtX3Jv
b3RMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKKworICAgIC8vIElmIHRoZSBuZXdTaXplIGV4cG9z
ZXMgbmV3IGFyZWFzIG9mIHRoZSBub24tY29tcG9zaXRlZCBjb250ZW50IGEgc2V0TmVlZHNEaXNw
bGF5IGlzIG5lZWRlZAorICAgIC8vIGZvciB0aG9zZSBuZXdseSBleHBvc2VkIGFyZWFzLgorICAg
IEZsb2F0U2l6ZSBvbGRTaXplID0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCk7
CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisg
ICAgaWYgKG5ld1NpemUud2lkdGgoKSA+IG9sZFNpemUud2lkdGgoKSkgeworICAgICAgICBmbG9h
dCBoZWlnaHQgPSBzdGQ6Om1pbihzdGF0aWNfY2FzdDxmbG9hdD4obmV3U2l6ZS5oZWlnaHQoKSks
IG9sZFNpemUuaGVpZ2h0KCkpOworICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIt
PnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3Qob2xkU2l6ZS53aWR0aCgpLCAwLCBuZXdT
aXplLndpZHRoKCkgLSBvbGRTaXplLndpZHRoKCksIGhlaWdodCkpOworICAgIH0KKworICAgIGlm
IChuZXdTaXplLmhlaWdodCgpID4gb2xkU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgbV9ub25Db21w
b3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KDAsIG9s
ZFNpemUuaGVpZ2h0KCksIG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSAtIG9sZFNp
emUuaGVpZ2h0KCkpKTsKKworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCisgICAgICAgIG1f
cGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKKworICAgIHNjaGVkdWxlTGF5ZXJG
bHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6ZGlkSW5zdGFsbFBhZ2VPdmVybGF5
KCkKK3sKKyAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgc2NoZWR1bGVMYXllckZs
dXNoKCk7CisKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmRpZFVuaW5zdGFsbFBhZ2VPdmVy
bGF5KCkKK3sKKyAgICBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpOworICAgIHNjaGVkdWxlTGF5
ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0UGFnZU92ZXJsYXlOZWVk
c0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBBU1NFUlQobV9w
YWdlT3ZlcmxheUxheWVyKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5lZWRzRGlzcGxh
eUluUmVjdChyZWN0KTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKworYm9vbCBMYXll
clRyZWVIb3N0UXQ6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpCit7CisgICAgbV9yb290TGF5
ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5
KCk7CisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxh
eWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIHJldHVy
biBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPnN5bmNDb21wb3Np
dGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7Cit9CisKKwordm9pZCBMYXllclRyZWVIb3N0
UXQ6OnBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCkKK3sKKyAgICBtX3dlYlBhZ2UtPmxheW91
dElmTmVlZGVkKCk7CisKKyAgICBpZiAoIW1faXNWYWxpZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKSB7CisgICAgICAgIC8vIExl
dCB0aGUgZHJhd2luZyBhcmVhIGtub3cgdGhhdCB3ZSd2ZSBkb25lIGEgZmx1c2ggb2YgdGhlIGxh
eWVyIGNoYW5nZXMuCisgICAgICAgIHN0YXRpY19jYXN0PERyYXdpbmdBcmVhSW1wbCo+KG1fd2Vi
UGFnZS0+ZHJhd2luZ0FyZWEoKSktPmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7CisgICAgICAg
IG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gZmFsc2U7CisgICAgfQorCisgICAg
V2ViR3JhcGhpY3NMYXllcjo6c2VuZExheWVyc1RvVUlQcm9jZXNzKG1fcm9vdExheWVyLmdldCgp
LCBtX3dlYlBhZ2UpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6bGF5ZXJGbHVzaFRpbWVy
RmlyZWQoVGltZXI8TGF5ZXJUcmVlSG9zdFF0PiopCit7CisgICAgcGVyZm9ybVNjaGVkdWxlZExh
eWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZVBhZ2VPdmVybGF5
TGF5ZXIoKQoreworICAgIEFTU0VSVCghbV9wYWdlT3ZlcmxheUxheWVyKTsKKworICAgIG1fcGFn
ZU92ZXJsYXlMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyNpZm5kZWYgTkRF
QlVHCisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROYW1lKCJMYXllclRyZWVIb3N0UXQgcGFn
ZSBvdmVybGF5IGNvbnRlbnQiKTsKKyNlbmRpZgorCisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5z
ZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRTaXplKG1f
d2ViUGFnZS0+c2l6ZSgpKTsKKworICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX3BhZ2VPdmVy
bGF5TGF5ZXIuZ2V0KCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6ZGVzdHJveVBhZ2VP
dmVybGF5TGF5ZXIoKQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOworICAgIG1f
cGFnZU92ZXJsYXlMYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIG1fcGFnZU92ZXJsYXlM
YXllciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpub3RpZnlBbmltYXRp
b25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkKK3sK
K30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6Om5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKikKK3sKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnBhaW50
Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCkKK3sK
KyAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIpIHsK
KyAgICAgICAgbV93ZWJQYWdlLT5kcmF3UmVjdChncmFwaGljc0NvbnRleHQsIGNsaXBSZWN0KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChncmFwaGljc0xheWVyID09IG1fcGFn
ZU92ZXJsYXlMYXllcikgeworICAgICAgICBtX3dlYlBhZ2UtPmRyYXdQYWdlT3ZlcmxheShncmFw
aGljc0NvbnRleHQsIGNsaXBSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworYm9v
bCBMYXllclRyZWVIb3N0UXQ6OnNob3dEZWJ1Z0JvcmRlcnMoKSBjb25zdAoreworICAgIHJldHVy
biBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCktPnNob3dEZWJ1Z0JvcmRlcnMoKTsK
K30KKworYm9vbCBMYXllclRyZWVIb3N0UXQ6OnNob3dSZXBhaW50Q291bnRlcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hvd1JlcGFp
bnRDb3VudGVyKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisjZWxzZQogI2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKIAordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBib29sIExheWVyVHJlZUhvc3Q6
OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCkBAIC0zNSwzICszMDYsNCBAQCBib29s
IExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdAorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcAppbmRleCBkZWUyY2E3Li4wNTMzYTI2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAK
QEAgLTQyLDYgKzQyLDEwIEBACiAjaW5jbHVkZSA8TUNvbXBvbmVudERhdGE+CiAjZW5kaWYKIAor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpbmNsdWRlICJXZWJHcmFwaGljc0xh
eWVyLmgiCisjZW5kaWYKKwogI2lmbmRlZiBOREVCVUcKICNpZiAhT1MoV0lORE9XUykKICNpbmNs
dWRlIDx1bmlzdGQuaD4KQEAgLTE2Niw2ICsxNzAsMTAgQEAgUV9ERUNMX0VYUE9SVCBpbnQgV2Vi
UHJvY2Vzc01haW5RdChpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgIHJldHVybiAxOwog
ICAgIH0KIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBXZWJHcmFwaGlj
c0xheWVyOjppbml0RmFjdG9yeSgpOworI2VuZGlmCisKICAgICBXZWJLaXQ6OldlYlByb2Nlc3M6
OnNoYXJlZCgpLmluaXRpYWxpemUoaWRlbnRpZmllciwgUnVuTG9vcDo6bWFpbigpKTsKIAogICAg
IFJ1bkxvb3A6OnJ1bigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103835</attachid>
            <date>2011-08-12 15:56:52 -0700</date>
            <delta_ts>2011-08-12 16:18:35 -0700</delta_ts>
            <desc>Patch: Enable accelerated compositing for QDesktopWebView </desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>44677</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjZDE3MWJkLi5kZmQwNzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTEtMDgtMTIgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbUXRdIEltcGxlbWVudCBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBvbiBX
SzIgUXQgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTY5MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRlZCBhbiBpZCBwcm9wZXJ0eSB0byBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciwgc28g
d2UgY2FuIG9wdGltaXplIG1hcCBsb29rdXAgZm9yIGl0IGluIFdlYktpdDIuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLiBUaGlzIGlzIGEgc3RlcCB0b3dhcmRzIGhhdmluZyB0ZXN0cyBpbiBMYXlv
dXRUZXN0cy9jb21wb3NpdGluZyBydW4gb24gV2ViS2l0Mi4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldElEKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjppZCk6CisKIDIwMTEtMDgtMTIgIFNh
bSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNb3ZlIGNvbXBpbGVyIHNwZWNp
ZmljIG1hY3JvcyB0byB0aGVpciBvd24gaGVhZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyLmNwcAppbmRleCAzMjBlMzE0Li42NjBlOTFkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKQEAgLTI4LDYgKzI4LDcgQEAgR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXI6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKEdyYXBoaWNzTGF5
ZXJDbGllbnQqIGNsaWUKICAgICA6IEdyYXBoaWNzTGF5ZXIoY2xpZW50KQogICAgICwgbV9ub2Rl
KGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyTm9kZSgpKSkKICAgICAsIG1fY2hhbmdlTWFzaygw
KQorICAgICwgbV9pZCgwKQogICAgICwgbV9hbmltYXRpb25TdGFydGVkVGltZXIodGhpcywgJkdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphbmltYXRpb25TdGFydGVkVGltZXJGaXJlZCkKIHsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKaW5kZXggOTQ0N2YxMS4u
Mjk2MjhkMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCkBAIC04
OSwxMSArODksMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbmltYXRpb24o
Y29uc3QgU3RyaW5nJik7CiAKICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbm9kZS5nZXQoKTsgfQorICAgIHZvaWQgc2V0SUQodW5zaWduZWQgbG9uZyBuZXdJ
RCkgeyBtX2lkID0gbmV3SUQ7IH0KKyAgICB1bnNpZ25lZCBsb25nIGlkKCkgY29uc3QgeyByZXR1
cm4gbV9pZDsgfQogCiBwcml2YXRlOgogICAgIE93blB0cjxUZXh0dXJlTWFwcGVyTm9kZT4gbV9u
b2RlOwogICAgIGJvb2wgbV9zeW5jUXVldWVkOwogICAgIGludCBtX2NoYW5nZU1hc2s7CisgICAg
dW5zaWduZWQgbG9uZyBtX2lkOwogICAgIFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50RGF0YSBt
X3BlbmRpbmdDb250ZW50OwogICAgIFZlY3RvcjxSZWZQdHI8VGV4dHVyZU1hcHBlckFuaW1hdGlv
bj4gPiBtX2FuaW1hdGlvbnM7CiAgICAgdm9pZCBhbmltYXRpb25TdGFydGVkVGltZXJGaXJlZChU
aW1lcjxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcj4qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAzMTU0NzM1
Li5kMWE4Yzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYgQEAKKzIwMTEtMDgtMTIgIE5vJ2Ft
IFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4gYW5kIFZpYXRjaGVzbGF2IE9z
dGFwZW5rbyAgPG9zdGFwZW5rby52aWF0Y2hlc2xhdkBub2tpYS5jb20+CisKKyAgICAgICAgW1F0
XSBJbXBsZW1lbnQgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgb24gV0syIFF0IHBvcnQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2OTM1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIGFjY2VsZXJh
dGVkIGNvbXBvc2l0aW5nIGZvciBRRGVza3RvcFdlYlZpZXcuIFRoaXMgdXNlcyB0aGUgTGF5ZXJU
cmVlSG9zdCBhYnN0cmFjdGlvbiwKKyAgICAgICAgYXMgd2VsbCBhcyB0aGUgY3Jvc3MtcHJvY2Vz
cyBHcmFwaGljc0xheWVyIHNlcmlhbGl6YXRpb24uIEl0IGRvZXMgbm90IHdvcmsgd2l0aCBRVG91
Y2hXZWJWaWV3IHlldCwKKyAgICAgICAgYXMgaXQgcmVsaWVzIG9uIGltcGVyYXRpdmUgcGFpbnRp
bmcgYW5kIHNvbWUgb2YgdGhlIGlzc3VlcyB3aXRoIFFUb3VjaFdlYlZpZXcgYXJlIG5vdCB5ZXQg
bWF0ZXJpYWxpemVkLAorICAgICAgICBsaWtlIHRoZSB1c2Ugb2YgUXQgU2NlbmVHcmFwaC4KKwor
ICAgICAgICBBZnRlciB0aGlzIHBhdGNoLCB3aGVuIGluIFFEZXNrdG9wV2ViVmlldyBhbmQgY29t
cG9zaXRlZCBjb250ZW50IGlzIHJlbmRlcmVkLCB0aGUgdmlldyB3aWxsIHN3aXRjaCB0byBjb21w
b3NpdGluZworICAgICAgICBtb2RlIGZvciB0aGUgZW50aXJlIGNvbnRlbnQsIGluY2x1ZGluZyB0
aGUgIm5vbiBjb21wb3NpdGVkIiBjb250ZW50LiBUaGlzIGlzIGluIGxpbmUgd2l0aCB0aGUgU2Fm
YXJpIGltcGxlbWVudGF0aW9uCisgICAgICAgIG9mIFdlYktpdDIsIHdoaWNoIGFsc28gdXNlcyBM
YXllclRyZWVIb3N0IGluIHRoZSBzYW1lIHdheS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0
Mi9tZXNzYWdlcy5weToKKyAgICAgICAgKiBTaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oOgorICAg
ICAgICAqIFNoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcDoKKyAgICAgICAgKiBTaGFyZWQvV2Vi
TGF5ZXJUcmVlSW5mby5oOgorICAgICAgICAqIFNoYXJlZC9xdC9MYXllclRyZWVDb250ZXh0UXQu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0OjpMYXllclRyZWVDb250ZXh0
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dDo6fkxheWVyVHJlZUNvbnRleHQp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0OjplbmNvZGUpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVDb250ZXh0OjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVDb250ZXh0Ojppc0VtcHR5KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0
OjpEcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6RHJh
d2luZ0FyZWFQcm94eTo6Y29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0Fy
ZWFQcm94eTo6c3luY0NvbXBvc2l0aW5nTGF5ZXJzKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2lu
Z0FyZWFQcm94eTo6dXBkYXRlQ29tcG9zaXRpbmdMYXllckNvbnRlbnQpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVh
UHJveHk6OnZpZXdwb3J0VmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJl
YVByb3h5Ojpjb250ZW50c1NjYWxlKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94
eTo6aXNCYWNraW5nU3RvcmVSZWFkeSk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVh
UHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OnBhaW50KToK
KyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVyQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1w
bC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNvbnRlbnRzU2NhbGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBXZWJL
aXQyLnBybzoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNz
TGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBv
c2l0aW5nU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdENvbXBvc2l0aW5nSW5mb0Zv
clRoaXNMYXllcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFw
aGljc0xheWVyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3Qu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpjcmVhdGUpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3RRdDo6fkxheWVyVHJlZUhvc3RRdCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3RRdDo6TGF5ZXJUcmVlSG9zdFF0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0
OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UXQ6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3RRdDo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UXQ6OnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1
c2gpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFJvb3RDb21wb3NpdGlu
Z0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjppbnZhbGlkYXRlKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXROb25Db21wb3NpdGVkQ29udGVu
dHNOZWVkRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2Nyb2xs
Tm9uQ29tcG9zaXRlZENvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0
Ojpmb3JjZVJlcGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNpemVE
aWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRpZEluc3RhbGxQ
YWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6ZGlkVW5pbnN0
YWxsUGFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFBh
Z2VPdmVybGF5TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0
OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0UXQ6OnBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlSG9zdFF0OjpsYXllckZsdXNoVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RRdDo6Y3JlYXRlUGFnZU92ZXJsYXlMYXllcik6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUhvc3RRdDo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVIb3N0UXQ6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUhvc3RRdDo6c2hvd0RlYnVnQm9yZGVycyk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RRdDo6c2hvd1JlcGFpbnRDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzTWFpblF0KToKKwogMjAxMS0wOC0xMSAgVmlhdGNoZXNsYXYgT3N0YXBlbmtvICA8b3N0
YXBlbmtvLnZpYXRjaGVzbGF2QG5va2lhLmNvbT4KIAogICAgICAgICBWZWN0b3JBcmd1bWVudENv
ZGVyIGRvZXNuJ3QgZW5jb2RlL2RlY29kZSBlbm91Z2ggZGF0YSBmb3IgbW9yZSB0aGFuIG9uZSBi
eXRlIHZlY3RvciBlbGVtZW50cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2NyaXB0cy93
ZWJraXQyL21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3Nh
Z2VzLnB5CmluZGV4IGJlYmY4YTEuLjEzMWI4ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRz
L3dlYmtpdDIvbWVzc2FnZXMucHkKQEAgLTQ2NSw2ICs0NjUsNyBAQCBkZWYgaGVhZGVyc19mb3Jf
dHlwZSh0eXBlKToKICAgICAgICAgJ1dlYktpdDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVu
Y29kZXInOiBbXSwKICAgICAgICAgJ1dlYktpdDo6V2ViQ29udGV4dFVzZXJNZXNzYWdlRW5jb2Rl
cic6IFtdLAogICAgICAgICAnV2ViS2l0OjpXZWJHZXN0dXJlRXZlbnQnOiBbJyJXZWJFdmVudC5o
IiddLAorICAgICAgICAnV2ViS2l0OjpXZWJMYXllclVwZGF0ZUluZm8nOiBbJyJXZWJMYXllclRy
ZWVJbmZvLmgiJ10sCiAgICAgICAgICdXZWJLaXQ6OldlYktleWJvYXJkRXZlbnQnOiBbJyJXZWJF
dmVudC5oIiddLAogICAgICAgICAnV2ViS2l0OjpXZWJNb3VzZUV2ZW50JzogWyciV2ViRXZlbnQu
aCInXSwKICAgICAgICAgJ1dlYktpdDo6V2ViVG91Y2hFdmVudCc6IFsnIldlYkV2ZW50LmgiJ10s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL0xheWVyVHJlZUNvbnRleHQuaAppbmRleCA4NjY3Yzk4Li4y
ZGI1ODRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9MYXllclRyZWVDb250ZXh0LmgKQEAgLTQ3
LDYgKzQ3LDggQEAgcHVibGljOgogICAgIHVpbnQzMl90IGNvbnRleHRJRDsKICNlbGlmIFBMQVRG
T1JNKFdJTikKICAgICBIV05EIHdpbmRvdzsKKyNlbGlmIFBMQVRGT1JNKFFUKQorICAgIHVpbnQz
Ml90IHdlYkxheWVySUQ7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJM
YXllclRyZWVJbmZvLmNwcAppbmRleCBhMDEyODU1Li42NTA4YjM1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNs
dWRlICJXZWJMYXllclRyZWVJbmZvLmgiCiAKKyNpbmNsdWRlICJBcmd1bWVudHMuaCIKICNpbmNs
dWRlICJTaGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaCBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKaW5kZXggYTBlNjhkMy4u
MWM4ZWJlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUlu
Zm8uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCkBAIC0z
Myw3ICszMyw4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotdHlwZWRlZiB1aW50MzJfdCBXZWJMYXllcklEOwordHlwZWRlZiB1bnNpZ25lZCBsb25n
IFdlYkxheWVySUQ7CitlbnVtIHsgSW52YWxpZFdlYkxheWVySUQgPSAwIH07CiAKIHN0cnVjdCBX
ZWJMYXllclVwZGF0ZUluZm8gewogICAgIFdlYkxheWVyVXBkYXRlSW5mbygpIHsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0xheWVyVHJlZUNvbnRleHRRdC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvTGF5ZXJUcmVlQ29udGV4dFF0LmNwcAppbmRleCBmMWJm
MWI0Li5kMzdkNzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvTGF5ZXJU
cmVlQ29udGV4dFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvTGF5ZXJUcmVl
Q29udGV4dFF0LmNwcApAQCAtMjYsNDEgKzI2LDM4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgogCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKKyNpbmNsdWRlICJBcmd1bWVudEVuY29k
ZXIuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIExheWVyVHJlZUNvbnRleHQ6OkxheWVyVHJl
ZUNvbnRleHQoKQorICAgIDogd2ViTGF5ZXJJRCgwKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CiAKIExheWVyVHJlZUNvbnRleHQ6On5MYXllclRyZWVDb250ZXh0KCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheWVyVHJlZUNvbnRleHQ6OmVuY29kZShDb3JlSVBD
OjpBcmd1bWVudEVuY29kZXIqKSBjb25zdAordm9pZCBMYXllclRyZWVDb250ZXh0OjplbmNvZGUo
Q29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAogewotICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKHdlYkxheWVySUQpOwogfQogCi1ib29sIExh
eWVyVHJlZUNvbnRleHQ6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqLCBMYXllclRy
ZWVDb250ZXh0JikKK2Jvb2wgTGF5ZXJUcmVlQ29udGV4dDo6ZGVjb2RlKENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciogZGVjb2RlciwgTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBkZWNvZGVyLT5k
ZWNvZGUoY29udGV4dC53ZWJMYXllcklEKTsKIH0KIAogYm9vbCBMYXllclRyZWVDb250ZXh0Ojpp
c0VtcHR5KCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiAhd2ViTGF5ZXJJRDsKIH0KIAotYm9vbCBvcGVyYXRvcj09KGNvbnN0IExh
eWVyVHJlZUNvbnRleHQmLCBjb25zdCBMYXllclRyZWVDb250ZXh0JikKK2Jvb2wgb3BlcmF0b3I9
PShjb25zdCBMYXllclRyZWVDb250ZXh0JiBhLCBjb25zdCBMYXllclRyZWVDb250ZXh0JiBiKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGEu
d2ViTGF5ZXJJRCA9PSBiLndlYkxheWVySUQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCmluZGV4IGY4
NTJlMmYuLmZmM2RlZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3
aW5nQXJlYVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0Fy
ZWFQcm94eS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJEcmF3aW5nQXJlYVByb3h5LmgiCiAKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHku
aCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CkBAIC01Myw0ICs1NCwyNyBAQCB2b2lkIERyYXdpbmdBcmVhUHJveHk6OnNldFNpemUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQogICAgIHNpemVEaWRD
aGFuZ2UoKTsKIH0KIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRF
WFRVUkVfTUFQUEVSKQordm9pZCBEcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVXZWJWaWV3KCkKK3sK
KyAgICBtX3dlYlBhZ2VQcm94eS0+c2V0Vmlld05lZWRzRGlzcGxheSh2aWV3cG9ydFZpc2libGVS
ZWN0KCkpOworfQorCitXZWJDb3JlOjpJbnRSZWN0IERyYXdpbmdBcmVhUHJveHk6OmNvbnRlbnRz
UmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV93
ZWJQYWdlUHJveHktPnZpZXdTaXplKCkpOworfQorCit2b2lkIERyYXdpbmdBcmVhUHJveHk6OnN5
bmNDb21wb3NpdGluZ0xheWVycyhjb25zdCBXZWJMYXllclRyZWVJbmZvJiBpbmZvKQoreworICAg
IG1fbGF5ZXJUcmVlSG9zdFByb3h5LT5zeW5jQ29tcG9zaXRpbmdMYXllcnMoaW5mbyk7Cit9CisK
K3ZvaWQgRHJhd2luZ0FyZWFQcm94eTo6dXBkYXRlQ29tcG9zaXRpbmdMYXllckNvbnRlbnQoY29u
c3QgV2ViTGF5ZXJVcGRhdGVJbmZvJiBpbmZvKQoreworICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5
LT51cGRhdGVDb21wb3NpdGluZ0xheWVyQ29udGVudChpbmZvKTsKK30KKworI2VuZGlmCisKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0RyYXdpbmdBcmVhUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJl
YVByb3h5LmgKaW5kZXggMmExZWE1ZC4uYWVhOWQ4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCkBAIC0yOCw4ICsyOCw5IEBACiAjZGVmaW5lIERyYXdp
bmdBcmVhUHJveHlfaAogCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFJbmZvLmgiCi0jaW5jbHVkZSA8
c3RkaW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CiAKICNpZiBQTEFURk9STShRVCkKQEAgLTQ0LDE0ICs0NSwxMyBAQCBuYW1lc3BhY2Ug
Q29yZUlQQyB7CiAgICAgY2xhc3MgTWVzc2FnZUlEOwogfQogCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0gICAgY2xhc3MgSW50UmVjdDsKLX0KLQogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIExh
eWVyVHJlZUNvbnRleHQ7CitjbGFzcyBMYXllclRyZWVIb3N0UHJveHk7CiBjbGFzcyBVcGRhdGVJ
bmZvOworY2xhc3MgV2ViTGF5ZXJUcmVlSW5mbzsKK2NsYXNzIFdlYkxheWVyVXBkYXRlSW5mbzsK
IGNsYXNzIFdlYlBhZ2VQcm94eTsKIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTkwLDYgKzkwLDE1
IEBAIHB1YmxpYzoKICAgICBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaXplOyB9CiAgICAgdm9pZCBzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUm
LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOwogCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVdlYlZpZXcoKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgdmlld3Bv
cnRWaXNpYmxlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRzUmVjdCgpOyB9CisgICAgdmly
dHVhbCBXZWJDb3JlOjpJbnRSZWN0IGNvbnRlbnRzUmVjdCgpIGNvbnN0OworICAgIHZpcnR1YWwg
ZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIDEuMDsgfQorICAgIHZpcnR1YWwg
Ym9vbCBpc0JhY2tpbmdTdG9yZVJlYWR5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZp
cnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdMYXllcnMoY29uc3QgV2ViTGF5ZXJUcmVlSW5mbyYp
OworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdGluZ0xheWVyQ29udGVudChjb25zdCBX
ZWJMYXllclVwZGF0ZUluZm8mKTsKKyNlbmRpZgogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IERy
YXdpbmdBcmVhUHJveHkoRHJhd2luZ0FyZWFUeXBlLCBXZWJQYWdlUHJveHkqKTsKIApAQCAtOTks
NiArMTA4LDEwIEBAIHByb3RlY3RlZDoKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsKICAg
ICBXZWJDb3JlOjpJbnRTaXplIG1fc2Nyb2xsT2Zmc2V0OwogCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgT3duUHRyPExheWVyVHJl
ZUhvc3RQcm94eT4gbV9sYXllclRyZWVIb3N0UHJveHk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAg
ICAvLyBDb3JlSVBDIG1lc3NhZ2UgaGFuZGxlcnMuCiAgICAgLy8gRklYTUU6IFRoZXNlIHNob3Vs
ZCBiZSBwdXJlIHZpcnR1YWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
RHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IGUxMTJhZDYuLjJlNzYxNmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2Vz
LmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lm1lc3Nh
Z2VzLmluCkBAIC0yNyw2ICsyNywxMCBAQCBtZXNzYWdlcyAtPiBEcmF3aW5nQXJlYVByb3h5IHsK
ICAgICBFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdTdG9y
ZVN0YXRlSUQsIFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dCBjb250ZXh0KQogICAgIEV4aXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBXZWJL
aXQ6OlVwZGF0ZUluZm8gdXBkYXRlSW5mbykKICNlbmRpZgorI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIFN5bmNDb21wb3NpdGluZ0xh
eWVycyhXZWJLaXQ6OldlYkxheWVyVHJlZUluZm8gbGF5ZXJUcmVlSW5mbykKKyAgICBVcGRhdGVD
b21wb3NpdGluZ0xheWVyQ29udGVudChXZWJLaXQ6OldlYkxheWVyVXBkYXRlSW5mbyBsYXllclVw
ZGF0ZUluZm8pCisjZW5kaWYKICNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKICAgICBJ
bnZhbGlkYXRlKFdlYkNvcmU6OkludFJlY3QgZGlydHlSZWN0KQogICAgIERpZFNldFNpemUoV2Vi
Q29yZTo6SW50U2l6ZSB2aWV3U2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
RHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCmluZGV4IDM1MmZiMWQuLmJlOGQyYzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcApAQCAt
MzQsNiArMzQsMTAgQEAKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlIDxX
ZWJDb3JlL1JlZ2lvbi5oPgogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBV
U0UoVEVYVFVSRV9NQVBQRVIpCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5LmgiCisjZW5k
aWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAt
NjcsOCArNzEsMTMgQEAgdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6cGFpbnQoQmFja2luZ1N0
b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCBjb250ZXh0LAogewogICAgIHVucGFpbnRlZFJl
Z2lvbiA9IHJlY3Q7CiAKLSAgICBpZiAoaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkp
CisgICAgaWYgKGlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpKSB7CisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgICAgIGlm
IChtX2xheWVyVHJlZUhvc3RQcm94eSkKKyAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5
LT5wYWludChjb250ZXh0LCByZWN0LCB1bnBhaW50ZWRSZWdpb24pOworI2VuZGlmCiAgICAgICAg
IHJldHVybjsKKyAgICB9CiAKICAgICBBU1NFUlQobV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJ
RCA8PSBtX25leHRCYWNraW5nU3RvcmVTdGF0ZUlEKTsKICAgICBpZiAobV9jdXJyZW50QmFja2lu
Z1N0b3JlU3RhdGVJRCA8IG1fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQpIHsKQEAgLTMyOSw2ICsz
MzgsMTAgQEAgdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZW50ZXJBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXgKICAgICBtX2JhY2tpbmdTdG9yZSA9IG51
bGxwdHI7CiAgICAgbV9sYXllclRyZWVDb250ZXh0ID0gbGF5ZXJUcmVlQ29udGV4dDsKICAgICBt
X3dlYlBhZ2VQcm94eS0+ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVD
b250ZXh0KTsKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgaWYgKCFtX2xheWVyVHJlZUhv
c3RQcm94eSkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHkgPSBhZG9wdFB0cihuZXcgTGF5
ZXJUcmVlSG9zdFByb3h5KHRoaXMpKTsKKyNlbmRpZgogfQogCiB2b2lkIERyYXdpbmdBcmVhUHJv
eHlJbXBsOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaAppbmRleCAzY2Y1ZjkxLi40OWFj
Y2I2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94
eUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUlt
cGwuaApAQCAtMzksNiArMzksOCBAQCBjbGFzcyBSZWdpb247CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCitjbGFzcyBMYXllclRyZWVIb3N0UHJveHk7CisKIGNsYXNzIERyYXdpbmdBcmVhUHJveHlJ
bXBsIDogcHVibGljIERyYXdpbmdBcmVhUHJveHkgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNz
T3duUHRyPERyYXdpbmdBcmVhUHJveHlJbXBsPiBjcmVhdGUoV2ViUGFnZVByb3h5Kik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYzZDNhNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaApAQCAtMCwwICsxLDk0IEBA
CisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIExheWVyVHJlZUhvc3RQcm94eV9oCisjZGVm
aW5lIExheWVyVHJlZUhvc3RQcm94eV9oCisKKyNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKKyNp
bmNsdWRlICJEcmF3aW5nQXJlYVByb3h5LmgiCisjaW5jbHVkZSAiUmVnaW9uLmgiCisjaW5jbHVk
ZSAiUnVuTG9vcC5oIgorI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXll
ci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50
U2l6ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQ
RVIpCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBXZWJMYXllclRyZWVJbmZvOworY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZv
OworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworY2xhc3MgTGF5ZXJUcmVlSG9zdFByb3h5
IDogcHVibGljIEdyYXBoaWNzTGF5ZXJDbGllbnQgeworcHVibGljOgorICAgIExheWVyVHJlZUhv
c3RQcm94eShEcmF3aW5nQXJlYVByb3h5Kik7CisgICAgdmlydHVhbCB+TGF5ZXJUcmVlSG9zdFBy
b3h5KCkgeyB9CisgICAgdm9pZCBzeW5jQ29tcG9zaXRpbmdMYXllcnMoY29uc3QgV2ViTGF5ZXJU
cmVlSW5mbyYpOworICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllckNvbnRlbnQoY29uc3Qg
V2ViTGF5ZXJVcGRhdGVJbmZvJik7CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBD
OjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29k
ZXIqKTsKKyAgICB2b2lkIHBhaW50KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBSZWdpb24mKTsKKworcHJvdGVjdGVkOgorICAg
IHZvaWQgdXBkYXRlV2ViVmlldygpOworCisgICAgUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBj
cmVhdGVMYXllcihXZWJMYXllcklEKTsKKworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyQnlJRChX
ZWJMYXllcklEIGlkKSB7IHJldHVybiAoaWQgPT0gSW52YWxpZFdlYkxheWVySUQpID8gMCA6IG1f
bGF5ZXJzLmdldChpZCkubGF5ZXI7IH0KKyAgICBHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSB7
IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQorCisgICAgdm9pZCBzeW5jRGVsZXRlZExheWVy
cygpOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIq
LCBHcmFwaGljc0NvbnRleHQmLCBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdy
YXBoaWNzTGF5ZXIqLCBkb3VibGUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVx
dWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopIHsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG93RGVi
dWdCb3JkZXJzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hv
d1JlcGFpbnRDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIFJ1bkxvb3A6
OlRpbWVyPExheWVyVHJlZUhvc3RQcm94eT4gbV9hbmltYXRpb25UaW1lcjsKKyAgICBEcmF3aW5n
QXJlYVByb3h5KiBtX2RyYXdpbmdBcmVhUHJveHk7CisKKyAgICBzdHJ1Y3QgTGF5ZXJEYXRhIHsK
KyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbGF5ZXI7CisgICAgICAgIFFJbWFnZSBp
bWFnZTsKKyAgICAgICAgTGF5ZXJEYXRhKCkgOiBsYXllcigwKSB7IH0KKyAgICB9OworCisgICAg
dHlwZWRlZiBIYXNoTWFwPFdlYkxheWVySUQsIExheWVyRGF0YT4gTGF5ZXJNYXA7CisgICAgZmxv
YXQgbV9jb250ZW50U2NhbGU7CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgT3duUHRy
PFRleHR1cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsKKyNlbmRpZgorCisgICAgT3duUHRyPEdy
YXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworICAgIFZlY3RvcjxXZWJMYXllcklEPiBtX2xheWVy
c1RvRGVsZXRlOworCisgICAgTGF5ZXJNYXAgbV9sYXllcnM7CisgICAgV2ViTGF5ZXJJRCBtX3Jv
b3RMYXllcklEOworfTsKKworfQorCisjZW5kaWYgLy8gTGF5ZXJUcmVlSG9zdFByb3h5X2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHku
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5jcHAK
aW5kZXggMWZhODA2Yi4uMzQ2MmQwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5jcHAKQEAgLTY1OSw2ICs2NTksMTEgQEAgYm9vbCBU
aWxlZERyYXdpbmdBcmVhUHJveHk6Omhhc1BlbmRpbmdVcGRhdGVzKCkgY29uc3QKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKK2Zsb2F0IFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6Y29udGVudHNTY2Fs
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY3VycmVudFRpbGVTZXQtPmNvbnRlbnRzU2NhbGUo
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IGY5ZThkOTQuLjAw
YTczNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdB
cmVhUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJl
YVByb3h5LmgKQEAgLTc0LDYgKzc0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRWaXNpYmxl
Q29udGVudFJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogICAgIHZvaWQgc2V0Q29udGVu
dHNTY2FsZShmbG9hdCk7CisgICAgZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0OwogCiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hDb21w
b3NpdGluZ0NvbnRleHQodWludDMyX3QgLyogY29udGV4dElEICovKSB7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkM2RkZTYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwCkBA
IC0wLDAgKzEsMjcxIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaW5jbHVkZSAiTGF5ZXJUcmVl
SG9zdFByb3h5LmgiCisKKyNpbmNsdWRlICJEcmF3aW5nQXJlYU1lc3NhZ2VzLmgiCisjaW5jbHVk
ZSAiRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTWVzc2FnZUlELmgiCisj
aW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclF0Lmgi
CisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAidGV4bWFwL0dy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBw
ZXIuaCIKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCIKKyNpbmNsdWRlIDxR
RGF0ZVRpbWU+CisjaW5jbHVkZSA8UXREZWJ1Zz4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bh
c3NPd25QdHI8R3JhcGhpY3NMYXllcj4gTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVMYXllcihX
ZWJMYXllcklEIGxheWVySUQpCit7CisgICAgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIG5l
d0xheWVyID0gbmV3IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKHRoaXMpOworICAgIG5ld0xh
eWVyLT5zZXRJRChsYXllcklEKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3TGF5ZXIpOworfQor
Cit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c3luY0RlbGV0ZWRMYXllcnMoKQoreworICAgIExh
eWVyTWFwOjppdGVyYXRvciBlbmRJdGVyYXRvciA9IG1fbGF5ZXJzLmVuZCgpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9sYXllcnNUb0RlbGV0ZS5zaXplKCk7ICsraSkgeworICAgICAg
ICBXZWJMYXllcklEIGlkID0gbV9sYXllcnNUb0RlbGV0ZVtpXTsKKyAgICAgICAgTGF5ZXJNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmluZChpZCk7CisKKyAgICAgICAgLy8gVGhpcyBtaWdo
dCBoYXBwZW4gaWYgdGhlIHdlYiBwcm9jZXNzIGRlbGV0ZXMgdGhlIGxheWVyIGFmdGVyIHRoZSBV
SSBwcm9jZXNzIGFscmVhZHkgY2xlYXJlZCB0aGUgbGF5ZXJzIGhlcmUuCisgICAgICAgIGlmIChp
dCA9PSBlbmRJdGVyYXRvcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBkZWxldGUg
aXQtPnNlY29uZC5sYXllcjsKKyAgICAgICAgbV9sYXllcnMucmVtb3ZlKGl0KTsKKyAgICB9Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNz
TGF5ZXIqIGxheWVyLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEdyYXBoaWNzTGF5ZXJQYWlu
dGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApCit7CisgICAgV2ViTGF5ZXJJRCBpZCA9
IFdlYkxheWVySUQoc3RhdGljX2Nhc3Q8Y29uc3QgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIq
PihsYXllciktPmlkKCkpOworICAgIExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZp
bmQoaWQpOworICAgIGlmIChpdCA9PSBtX2xheWVycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIExheWVyRGF0YSYgZGF0YSA9IGl0LT5zZWNvbmQ7CisgICAgSW50UmVjdCBjbGlwKGluQ2xp
cCk7CisgICAgY2xpcC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBkYXRhLmlt
YWdlLnNpemUoKSkpOworICAgIFFQYWludGVyKiBwYWludGVyID0gY29udGV4dC5wbGF0Zm9ybUNv
bnRleHQoKTsKKyAgICBwYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBv
c2l0aW9uTW9kZV9Tb3VyY2UpOworICAgIHBhaW50ZXItPmRyYXdJbWFnZShjbGlwLCBkYXRhLmlt
YWdlLCBjbGlwKTsKK30KKworTGF5ZXJUcmVlSG9zdFByb3h5OjpMYXllclRyZWVIb3N0UHJveHko
RHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWFQcm94eSkKKyAgICA6IG1fYW5pbWF0aW9uVGlt
ZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVXZWJW
aWV3KQorICAgICwgbV9kcmF3aW5nQXJlYVByb3h5KGRyYXdpbmdBcmVhUHJveHkpCit7CisgICAg
bV9yb290TGF5ZXIgPSBjcmVhdGVMYXllcihJbnZhbGlkV2ViTGF5ZXJJRCk7CisgICAgbV9yb290
TGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXREcmF3
c0NvbnRlbnQoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBv
aW50M0QoMCwgMCwgMCkpOworCisgICAgLy8gVGhlIHJvb3QgbGF5ZXIgc2hvdWxkIG5vdCBoYXZl
IHplcm8gc2l6ZSwgb3IgaXQgd291bGQgYmUgb3B0aW1pemVkIG91dC4KKyAgICBtX3Jvb3RMYXll
ci0+c2V0U2l6ZShGbG9hdFNpemUoMS4wLCAxLjApKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0
UHJveHk6OnN5bmNDb21wb3NpdGluZ0xheWVycyhjb25zdCBXZWJMYXllclRyZWVJbmZvJiBpbmZv
KQoreworICAgIG1fY29udGVudFNjYWxlID0gaW5mby5jb250ZW50U2NhbGU7CisgICAgbV9sYXll
cnNUb0RlbGV0ZS5hcHBlbmQoaW5mby5kZWxldGVkTGF5ZXJJRHMpOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBpbmZvLmxheWVycy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBX
ZWJMYXllcklEIGlkID0gaW5mby5sYXllcnNbaV0uaWQ7CisKKyAgICAgICAgaWYgKG1fbGF5ZXJz
LmNvbnRhaW5zKGlkKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIExheWVyRGF0
YSBkYXRhOworCisgICAgICAgIC8vIFdlIGhhdmUgdG8gbGVhayB0aGUgbGF5ZXIgYW5kIG1hbmFn
ZSBpdCBvdXJzZWx2ZXMsIHNpbmNlIHRoaXMgaXMgYSBIYXNoTWFwIGFuZCBPd25QdHIgaXMgbm90
IGNvcHlhYmxlLgorICAgICAgICBkYXRhLmxheWVyID0gY3JlYXRlTGF5ZXIoaWQpLmxlYWtQdHIo
KTsKKyAgICAgICAgbV9sYXllcnMuYWRkKGlkLCBkYXRhKTsKKworICAgICAgICBpZiAoaWQgIT0g
aW5mby5yb290TGF5ZXJJRCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIG1fcm9v
dExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOworICAgICAgICBtX3Jvb3RMYXllci0+YWRkQ2hp
bGQoZGF0YS5sYXllcik7CisgICAgfQorCisgICAgaWYgKGluZm8ucm9vdExheWVySUQgIT0gbV9y
b290TGF5ZXJJRCkgeworICAgICAgICBtX3Jvb3RMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsK
KyAgICAgICAgbV9yb290TGF5ZXJJRCA9IGluZm8ucm9vdExheWVySUQ7CisgICAgICAgIGlmICht
X3Jvb3RMYXllcklEKSB7CisgICAgICAgICAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xh
eWVycy5maW5kKGluZm8ucm9vdExheWVySUQpOworICAgICAgICAgICAgaWYgKGl0ICE9IG1fbGF5
ZXJzLmVuZCgpKQorICAgICAgICAgICAgICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChpdC0+c2Vj
b25kLmxheWVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoc2l6ZV90IGxheWVySW5k
ZXggPSAwOyBsYXllckluZGV4IDwgaW5mby5sYXllcnMuc2l6ZSgpOyArK2xheWVySW5kZXgpIHsK
KyAgICAgICAgY29uc3QgV2ViTGF5ZXJJbmZvJiBsYXllckluZm8gPSBpbmZvLmxheWVyc1tsYXll
ckluZGV4XTsKKyAgICAgICAgV2ViTGF5ZXJJRCBpZCA9IGxheWVySW5mby5pZDsKKworICAgICAg
ICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5maW5kKGlkKTsKKyAgICAgICAgaWYg
KGl0ID09IG1fbGF5ZXJzLmVuZCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
TGF5ZXJEYXRhJiBkYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgR3JhcGhpY3NMYXllciogbGF5
ZXIgPSBkYXRhLmxheWVyOworCisgICAgICAgIGxheWVyLT5zZXROYW1lKGxheWVySW5mby5uYW1l
KTsKKworICAgICAgICAvLyBXZSBoYXZlIGEgY29udGFpbmVyIGxheWVyIGFzIGEgcGFyZW50IHRv
IHRoZSByb290IGxheWVyLCBzbyB3ZSBzaG91bGRuJ3QgcGFyZW50IGl0IHRvIHRoZSB3ZWIgcHJv
Y2VzcyB2YWx1ZS4KKyAgICAgICAgaWYgKGlkICE9IGluZm8ucm9vdExheWVySUQpCisgICAgICAg
ICAgICBsYXllci0+c2V0UGFyZW50KGxheWVyQnlJRChsYXllckluZm8ucGFyZW50KSk7CisgICAg
ICAgIGxheWVyLT5zZXRSZXBsaWNhdGVkQnlMYXllcihsYXllckJ5SUQobGF5ZXJJbmZvLnJlcGxp
Y2EpKTsKKyAgICAgICAgbGF5ZXItPnNldE1hc2tMYXllcihsYXllckJ5SUQobGF5ZXJJbmZvLm1h
c2spKTsKKworICAgICAgICBsYXllci0+c2V0UG9zaXRpb24obGF5ZXJJbmZvLnBvcyk7CisgICAg
ICAgIGxheWVyLT5zZXRTaXplKGxheWVySW5mby5zaXplKTsKKyAgICAgICAgbGF5ZXItPnNldFRy
YW5zZm9ybShsYXllckluZm8udHJhbnNmb3JtKTsKKyAgICAgICAgbGF5ZXItPnNldEFuY2hvclBv
aW50KGxheWVySW5mby5hbmNob3JQb2ludCk7CisgICAgICAgIGxheWVyLT5zZXRDaGlsZHJlblRy
YW5zZm9ybShsYXllckluZm8uY2hpbGRyZW5UcmFuc2Zvcm0pOworICAgICAgICBsYXllci0+c2V0
QmFja2ZhY2VWaXNpYmlsaXR5KGxheWVySW5mby5iYWNrZmFjZVZpc2libGUpOworICAgICAgICBs
YXllci0+c2V0Q29udGVudHNPcGFxdWUobGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlKTsKKyAgICAg
ICAgbGF5ZXItPnNldENvbnRlbnRzUmVjdChsYXllckluZm8uY29udGVudHNSZWN0KTsKKyAgICAg
ICAgbGF5ZXItPnNldERyYXdzQ29udGVudChsYXllckluZm8uZHJhd3NDb250ZW50KTsKKworICAg
ICAgICAvLyBOZXZlciBtYWtlIHRoZSByb290IGxheWVyIGNsaXAuCisgICAgICAgIGxheWVyLT5z
ZXRNYXNrc1RvQm91bmRzKGlkID09IGluZm8ucm9vdExheWVySUQgPyBmYWxzZSA6IGxheWVySW5m
by5tYXNrc1RvQm91bmRzKTsKKyAgICAgICAgbGF5ZXItPnNldE9wYWNpdHkobGF5ZXJJbmZvLm9w
YWNpdHkpOworICAgICAgICBsYXllci0+c2V0UHJlc2VydmVzM0QobGF5ZXJJbmZvLnByZXNlcnZl
czNEKTsKKyAgICAgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiBjaGlsZHJlbjsKKworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW5mby5jaGlsZHJlbi5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGNoaWxkID0gbGF5ZXJCeUlEKGxheWVy
SW5mby5jaGlsZHJlbltpXSkpCisgICAgICAgICAgICAgICAgY2hpbGRyZW4uYXBwZW5kKGNoaWxk
KTsKKyAgICAgICAgfQorICAgICAgICBsYXllci0+c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOworCisg
ICAgICAgIGlmIChsYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmUpIHsKKyAgICAgICAgICAgIGxh
eWVyLT5zZXRDb250ZW50c1RvSW1hZ2UobGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlLT5jcmVh
dGVJbWFnZSgpLmdldCgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAg
ICAgICAgbGF5ZXItPnNldENvbnRlbnRzVG9JbWFnZSgwKTsKKworICAgICAgICBpZiAoIWxheWVy
SW5mby5kcmF3c0NvbnRlbnQpIHsKKyAgICAgICAgICAgIGRhdGEuaW1hZ2UgPSBRSW1hZ2UoKTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIEludFNpemUgd2FudGVk
U2l6ZShsYXllckluZm8uc2l6ZS53aWR0aCgpLCBsYXllckluZm8uc2l6ZS5oZWlnaHQoKSk7CisK
KyAgICAgICAgaWYgKEludFNpemUoZGF0YS5pbWFnZS5zaXplKCkpICE9IGxheWVySW5mby5zaXpl
KSB7CisgICAgICAgICAgICBRSW1hZ2UgaW1hZ2Uod2FudGVkU2l6ZS53aWR0aCgpLCB3YW50ZWRT
aXplLmhlaWdodCgpLCBsYXllci0+Y29udGVudHNPcGFxdWUoKSA/IFFJbWFnZTo6Rm9ybWF0X1JH
QjE2IDogUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQpOworICAgICAgICAgICAg
aW1hZ2UuZmlsbCgwKTsKKyAgICAgICAgICAgIGRhdGEuaW1hZ2UgPSBpbWFnZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHVwZGF0ZVdlYlZpZXcoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0
UHJveHk6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJDb250ZW50KGNvbnN0IFdlYkxheWVyVXBkYXRl
SW5mbyYgY2h1bmspCit7CisgICAgaWYgKGNodW5rLmJpdG1hcEhhbmRsZS5pc051bGwoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmlu
ZChjaHVuay5sYXllcklEKTsKKyAgICBpZiAoaXQgPT0gbV9sYXllcnMuZW5kKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFFQYWludGVyIHBhaW50ZXIoJml0LT5zZWNvbmQuaW1hZ2UpOworICAg
IFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRl
KGNodW5rLmJpdG1hcEhhbmRsZSk7CisgICAgaWYgKCFiaXRtYXApCisgICAgICAgIHJldHVybjsK
KyAgICBRSW1hZ2UgaW1hZ2VGcm9tVXBkYXRlQ2h1bmsgPSBiaXRtYXAtPmNyZWF0ZVFJbWFnZSgp
OworICAgIGlmIChpbWFnZUZyb21VcGRhdGVDaHVuay5pc051bGwoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgRmxvYXRSZWN0IHNjYWxlZFJlY3QoY2h1bmsucmVjdCk7CisgICAgc2NhbGVkUmVj
dC5zY2FsZSgxLjAgLyBtX2NvbnRlbnRTY2FsZSk7CisgICAgaXQtPnNlY29uZC5sYXllci0+c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KHNjYWxlZFJlY3QpOworICAgIHBhaW50ZXIuc2V0Q29tcG9zaXRp
b25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKKyAgICBwYWludGVyLmRy
YXdJbWFnZShjaHVuay5yZWN0LCBpbWFnZUZyb21VcGRhdGVDaHVuayk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdFByb3h5OjpwYWludChCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0IHRhcmdldFBhaW50ZXIsIGNvbnN0IEludFJlY3QmLCBSZWdpb24mKQoreworICAgIEZsb2F0
UmVjdCBjbGlwUmVjdChRUmVjdEYodGFyZ2V0UGFpbnRlci0+Y2xpcFJlZ2lvbigpLmJvdW5kaW5n
UmVjdCgpKSk7CisgICAgaWYgKGNsaXBSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgY2xpcFJlY3Qg
PSBtX2RyYXdpbmdBcmVhUHJveHktPnZpZXdwb3J0VmlzaWJsZVJlY3QoKTsKKyAgICBGbG9hdFJl
Y3Qgc2NhbGVkQ29udGVudHNSZWN0ID0gbV9kcmF3aW5nQXJlYVByb3h5LT5jb250ZW50c1JlY3Qo
KTsKKyAgICBzY2FsZWRDb250ZW50c1JlY3Quc2NhbGUoMS4wIC8gbV9kcmF3aW5nQXJlYVByb3h5
LT5jb250ZW50c1NjYWxlKCkpOworICAgIGNsaXBSZWN0LmludGVyc2VjdChzY2FsZWRDb250ZW50
c1JlY3QpOworCisgICAgR3JhcGhpY3NMYXllciogY3VycmVudFJvb3RMYXllciA9IHJvb3RMYXll
cigpOworICAgIGlmICghY3VycmVudFJvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOworICAgIFRl
eHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShjdXJyZW50Um9vdExh
eWVyKTsKKworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3ND
b250ZXh0IGNvbnRleHQodGFyZ2V0UGFpbnRlcik7CisgICAgaWYgKCFtX3RleHR1cmVNYXBwZXIp
CisgICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXI6OmNyZWF0ZSgmY29udGV4
dCk7CisKKyAgICBtX3RleHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dCgmY29udGV4dCk7
CisgICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGNvbnRl
eHQuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPnNl
dFRleHREcmF3aW5nTW9kZShjb250ZXh0LnRleHREcmF3aW5nTW9kZSgpKTsKKyAgICBtX3RleHR1
cmVNYXBwZXItPnNldFZpZXdwb3J0U2l6ZShtX2RyYXdpbmdBcmVhUHJveHktPnZpZXdwb3J0Vmlz
aWJsZVJlY3QoKS5zaXplKCkpOworCisgICAgbm9kZS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1
cmVNYXBwZXIuZ2V0KCkpOworICAgIGNvbnN0IFFUcmFuc2Zvcm0gdCA9IHRhcmdldFBhaW50ZXIt
PnRyYW5zZm9ybSgpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCh0Lm0xMSgpLCB0
Lm0xMigpLCAwLCB0Lm0xMygpLCB0Lm0yMSgpLCB0Lm0yMigpLCAwLCB0Lm0yMygpLCAwLCAwLCAx
LCAwLCB0Lm0zMSgpLCB0Lm0zMigpLCAwLCB0Lm0zMygpKTsKKyAgICBtX3RleHR1cmVNYXBwZXIt
PmJpbmRTdXJmYWNlKDApOworICAgIGN1cnJlbnRSb290TGF5ZXItPnNldE9wYWNpdHkodGFyZ2V0
UGFpbnRlci0+b3BhY2l0eSgpKTsKKyAgICBib29sIGZvcmNlU3luYyA9IChtYXRyaXggIT0gY3Vy
cmVudFJvb3RMYXllci0+dHJhbnNmb3JtKCkpOworICAgIGN1cnJlbnRSb290TGF5ZXItPnNldFRy
YW5zZm9ybShtYXRyaXgpOworCisgICAgYm9vbCBhbGxvd1N5bmMgPSB0cnVlOworICAgIGlmICgh
Zm9yY2VTeW5jKQorICAgICAgICBhbGxvd1N5bmMgPSBtX2RyYXdpbmdBcmVhUHJveHktPmlzQmFj
a2luZ1N0b3JlUmVhZHkoKTsKKworICAgIGlmIChhbGxvd1N5bmMpIHsKKyAgICAgICAgc3luY0Rl
bGV0ZWRMYXllcnMoKTsKKyAgICAgICAgY3VycmVudFJvb3RMYXllci0+c3luY0NvbXBvc2l0aW5n
U3RhdGUoY2xpcFJlY3QpOworICAgIH0KKworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWlu
dGluZygpOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5DbGlwKG1hdHJpeCwgY2xpcFJlY3Qp
OworCisgICAgbm9kZS0+cGFpbnQoKTsKKworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kQ2xpcCgp
OworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKKworICAgIGlmIChub2RlLT5k
ZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKQorICAgICAgICB1cGRhdGVX
ZWJWaWV3KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVXZWJWaWV3KCkK
K3sKKyAgICBtX2RyYXdpbmdBcmVhUHJveHktPnVwZGF0ZVdlYlZpZXcoKTsKK30KKworfQorI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybyBiL1NvdXJjZS9XZWJL
aXQyL1dlYktpdDIucHJvCmluZGV4IDQ0ZWJiNjkuLmY1ZjMyMzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYktpdDIucHJvCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCkBA
IC0xNTEsNiArMTUxLDcgQEAgSEVBREVSUyArPSBcCiAgICAgU2hhcmVkL1dlYkdlb2xvY2F0aW9u
UG9zaXRpb24uaCBcCiAgICAgU2hhcmVkL1dlYkdyYXBoaWNzQ29udGV4dC5oIFwKICAgICBTaGFy
ZWQvV2ViSW1hZ2UuaCBcCisgICAgU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaCBcCiAgICAgU2hh
cmVkL1dlYk5hdmlnYXRpb25EYXRhU3RvcmUuaCBcCiAgICAgU2hhcmVkL1dlYk51bWJlci5oIFwK
ICAgICBTaGFyZWQvV2ViT3BlblBhbmVsUGFyYW1ldGVycy5oIFwKQEAgLTMwMSw2ICszMDIsNyBA
QCBIRUFERVJTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVycm9ycy5o
IFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lmgg
XAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25DbGllbnQuaCBc
CisgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmggXAogICAg
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmggXAogICAgIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCBcCiAg
ICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCBcCkBA
IC0zODEsNiArMzgzLDcgQEAgU09VUkNFUyArPSBcCiAgICAgU2hhcmVkL1dlYkdyYXBoaWNzQ29u
dGV4dC5jcHAgXAogICAgIFNoYXJlZC9XZWJLZXlib2FyZEV2ZW50LmNwcCBcCiAgICAgU2hhcmVk
L1dlYkltYWdlLmNwcCBcCisgICAgU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwIFwKICAgICBT
aGFyZWQvV2ViTW91c2VFdmVudC5jcHAgXAogICAgIFNoYXJlZC9XZWJPcGVuUGFuZWxQYXJhbWV0
ZXJzLmNwcCBcCiAgICAgU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuY3BwIFwKQEAg
LTQ2OCw2ICs0NzEsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VM
b2FkQ2xpZW50LmNwcCBcCiAgICAgVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmNwcCBcCiAgICAgVUlQ
cm9jZXNzL3F0L0NsaWVudEltcGwuY3BwIFwKKyAgICBVSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9z
dFByb3h5UXQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvVG91Y2hWaWV3SW50ZXJmYWNlLmNwcCBc
CiAgICAgVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuY3BwIFwKICAgICBVSVByb2Nl
c3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHAgXApAQCAtNTQzLDYgKzU0Nyw3IEBAIFNP
VVJDRVMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVu
dC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25DbGll
bnQuY3BwIFwKKyAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIu
Y3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkluc3BlY3RvckNsaWVudC5j
cHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3Ry
YXRlZ2llcy5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAKaW5kZXggMjE4ZjJmZi4uOWVh
MzVkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCkBAIC0zMzYsMTUgKzMzNiwxNSBAQCBj
b25zdCBXZWJMYXllckluZm8mIFdlYkdyYXBoaWNzTGF5ZXI6OmxheWVySW5mbygpIGNvbnN0CiAg
ICAgcmV0dXJuIG1fbGF5ZXJJbmZvOwogfQogCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmND
b21wb3NpdGluZ1N0YXRlKCkKK3ZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5n
U3RhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIHN5bmNDb21wb3NpdGluZ1N0YXRl
Rm9yVGhpc0xheWVyT25seSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4o
KS5zaXplKCk7ICsraSkKLSAgICAgICAgY2hpbGRyZW4oKVtpXS0+c3luY0NvbXBvc2l0aW5nU3Rh
dGUoKTsKKyAgICAgICAgY2hpbGRyZW4oKVtpXS0+c3luY0NvbXBvc2l0aW5nU3RhdGUocmVjdCk7
CiAgICAgaWYgKHJlcGxpY2FMYXllcigpKQotICAgICAgICByZXBsaWNhTGF5ZXIoKS0+c3luY0Nv
bXBvc2l0aW5nU3RhdGUoKTsKKyAgICAgICAgcmVwbGljYUxheWVyKCktPnN5bmNDb21wb3NpdGlu
Z1N0YXRlKHJlY3QpOwogICAgIGlmIChtYXNrTGF5ZXIoKSkKLSAgICAgICAgbWFza0xheWVyKCkt
PnN5bmNDb21wb3NpdGluZ1N0YXRlKCk7CisgICAgICAgIG1hc2tMYXllcigpLT5zeW5jQ29tcG9z
aXRpbmdTdGF0ZShyZWN0KTsKIH0KIAogV2ViR3JhcGhpY3NMYXllciogdG9XZWJHcmFwaGljc0xh
eWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQpAQCAtNDA1LDkgKzQwNSw5IEBAIHN0YXRpYyBWZWN0
b3I8RmxvYXRSZWN0PiBkaXZpZGVJbnRvVGlsZXMoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAg
IHJldHVybiB0aWxlczsKIH0KIAotc3RhdGljIHZvaWQgY29sbGVjdENvbXBvc2l0aW5nSW5mb0Zv
clRoaXNMYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgV2ViTGF5ZXJUcmVlSW5mbyYgb3V0SW5m
bywgVmVjdG9yPFdlYkdyYXBoaWNzTGF5ZXIqPiYgb3V0TGF5ZXJzKQorc3RhdGljIHZvaWQgY29s
bGVjdENvbXBvc2l0aW5nSW5mb0ZvclRoaXNMYXllcihHcmFwaGljc0xheWVyKiBncmFwaGljc0xh
eWVyLCBXZWJMYXllclRyZWVJbmZvJiBvdXRJbmZvLCBWZWN0b3I8V2ViR3JhcGhpY3NMYXllcio+
JiBvdXRMYXllcnMpCiB7Ci0gICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSB0b1dlYkdyYXBo
aWNzTGF5ZXIobGF5ZXIpOworICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyID0gdG9XZWJHcmFw
aGljc0xheWVyKGdyYXBoaWNzTGF5ZXIpOwogICAgIGlmICghbGF5ZXIpCiAgICAgICAgIHJldHVy
bjsKICAgICBpZiAoIWxheWVyLT5pc01vZGlmaWVkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCmlu
ZGV4IGFkNjAyMWUuLjEyOTQwMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oCkBAIC03Myw3ICs3
Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwogICAgIHZvaWQgc2V0
TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZvaWQgc2V0Q29udGVu
dHNOZWVkc0Rpc3BsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0
Jik7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25s
eSgpOwogCiAgICAgV2ViS2l0OjpXZWJMYXllcklEIGlkKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggZGE0
MmFlNi4uMDMxYzNmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9MYXllclRyZWVIb3N0LmNwcApAQCAtMzQsNiArMzQsMTAgQEAKICNlbmRpZgogI2VuZGlm
CiAKKyNpZiBQTEFURk9STShRVCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2luY2x1ZGUgInF0
L0xheWVyVHJlZUhvc3RRdC5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQ0LDYgKzQ4LDggQEAgUGFzc1JlZlB0cjxMYXllclRy
ZWVIb3N0PiBMYXllclRyZWVIb3N0OjpjcmVhdGUoV2ViUGFnZSogd2ViUGFnZSkKICAgICByZXR1
cm4gTGF5ZXJUcmVlSG9zdENBTWFjOjpjcmVhdGUod2ViUGFnZSk7CiAjZWxpZiBQTEFURk9STShX
SU4pICYmIEhBVkUoV0tRQ0EpCiAgICAgcmV0dXJuIExheWVyVHJlZUhvc3RDQVdpbjo6Y3JlYXRl
KHdlYlBhZ2UpOworI2VsaWYgUExBVEZPUk0oUVQpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyAg
ICByZXR1cm4gTGF5ZXJUcmVlSG9zdFF0OjpjcmVhdGUod2ViUGFnZSk7CiAjZWxzZQogICAgIHJl
dHVybiAwOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwCmluZGV4IDU3OGFlMDguLjJmY2YyY2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVI
b3N0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXll
clRyZWVIb3N0UXQuY3BwCkBAIC0yNSw4ICsyNSwyNzkgQEAKICAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJM
YXllclRyZWVIb3N0UXQuaCIKKworI2luY2x1ZGUgIkRyYXdpbmdBcmVhSW1wbC5oIgorI2luY2x1
ZGUgIkRyYXdpbmdBcmVhTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5TWVz
c2FnZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJNZXNzYWdl
SUQuaCIKKyNpbmNsdWRlICJXZWJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmll
dy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGlu
Z3MuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitQYXNzUmVmUHRyPExheWVyVHJlZUhvc3RRdD4gTGF5ZXJUcmVlSG9zdFF0OjpjcmVhdGUoV2Vi
UGFnZSogd2ViUGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVyVHJlZUhvc3RR
dCh3ZWJQYWdlKSk7Cit9CisKK0xheWVyVHJlZUhvc3RRdDo6fkxheWVyVHJlZUhvc3RRdCgpCit7
Cit9CisKK0xheWVyVHJlZUhvc3RRdDo6TGF5ZXJUcmVlSG9zdFF0KFdlYlBhZ2UqIHdlYlBhZ2Up
CisgICAgOiBMYXllclRyZWVIb3N0KHdlYlBhZ2UpCisgICAgLCBtX25vdGlmeUFmdGVyU2NoZWR1
bGVkTGF5ZXJGbHVzaChmYWxzZSkKKyAgICAsIG1faXNWYWxpZCh0cnVlKQorICAgICwgbV9sYXll
ckZsdXNoVGltZXIodGhpcywgJkxheWVyVHJlZUhvc3RRdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQp
CisgICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCh0cnVlKQoreworICAgIC8vIENy
ZWF0ZSBhIHJvb3QgbGF5ZXIuCisgICAgbV9yb290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVh
dGUodGhpcyk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJMYXll
clRyZWVIb3N0UXQgcm9vdCBsYXllciIpOworI2VuZGlmCisgICAgbV9yb290TGF5ZXItPnNldERy
YXdzQ29udGVudChmYWxzZSk7CisgICAgbV9yb290TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5z
aXplKCkpOworICAgIG1fbGF5ZXJUcmVlQ29udGV4dC53ZWJMYXllcklEID0gdG9XZWJHcmFwaGlj
c0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+aWQoKTsKKworICAgIG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyNpZm5kZWYgTkRFQlVH
CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROYW1lKCJMYXllclRyZWVIb3N0
UXQgbm9uLWNvbXBvc2l0ZWQgY29udGVudCIpOworI2VuZGlmCisgICAgbV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLT5zZXRDb250ZW50c09wYXF1ZShtX3dlYlBhZ2UtPmRyYXdzQmFja2dyb3Vu
ZCgpICYmICFtX3dlYlBhZ2UtPmRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkpOworICAgIG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisK
KyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdl
dCgpKTsKKworICAgIGlmIChtX3dlYlBhZ2UtPmhhc1BhZ2VPdmVybGF5KCkpCisgICAgICAgIGNy
ZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQor
Cit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJv
b2wgbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCit7CisgICAgaWYgKG1fbGF5ZXJGbHVzaFNjaGVkdWxp
bmdFbmFibGVkID09IGxheWVyRmx1c2hpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9IGxheWVyRmx1c2hpbmdFbmFibGVkOwor
CisgICAgaWYgKG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47
CisKKyAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhv
c3RRdDo6c2NoZWR1bGVMYXllckZsdXNoKCkKK3sKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFNjaGVk
dWxpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFRp
bWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgw
KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCkK
K3sKKyAgICBtX2xheWVyRmx1c2hUaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dFF0OjpzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wgbm90
aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKQoreworICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVs
ZWRMYXllckZsdXNoID0gbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOworfQorCit2b2lk
IExheWVyVHJlZUhvc3RRdDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciogZ3JhcGhpY3NMYXllcikKK3sKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5
ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CisKKyAgICAvLyBBZGQgdGhlIGFjY2VsZXJhdGVkIGxh
eWVyIHRyZWUgaGllcmFyY2h5LgorICAgIGlmIChncmFwaGljc0xheWVyKQorICAgICAgICBtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPmFkZENoaWxkKGdyYXBoaWNzTGF5ZXIpOworfQorCit2
b2lkIExheWVyVHJlZUhvc3RRdDo6aW52YWxpZGF0ZSgpCit7CisgICAgY2FuY2VsUGVuZGluZ0xh
eWVyRmx1c2goKTsKKworICAgIEFTU0VSVChtX2lzVmFsaWQpOworICAgIG1fcm9vdExheWVyID0g
bnVsbHB0cjsKKyAgICBtX2lzVmFsaWQgPSBmYWxzZTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0
UXQ6OnNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHJlY3QpCit7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVk
c0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAg
ICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisKKyAg
ICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNjcm9s
bE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0
LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpCit7CisgICAgc2V0Tm9uQ29t
cG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoc2Nyb2xsUmVjdCk7Cit9CisKK3ZvaWQgTGF5ZXJU
cmVlSG9zdFF0Ojpmb3JjZVJlcGFpbnQoKQoreworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwor
fQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBuZXdTaXplKQoreworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG5ld1NpemUpOwor
CisgICAgLy8gSWYgdGhlIG5ld1NpemUgZXhwb3NlcyBuZXcgYXJlYXMgb2YgdGhlIG5vbi1jb21w
b3NpdGVkIGNvbnRlbnQgYSBzZXROZWVkc0Rpc3BsYXkgaXMgbmVlZGVkCisgICAgLy8gZm9yIHRo
b3NlIG5ld2x5IGV4cG9zZWQgYXJlYXMuCisgICAgRmxvYXRTaXplIG9sZFNpemUgPSBtX25vbkNv
bXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICBpZiAobmV3U2l6ZS53aWR0aCgpID4gb2xk
U2l6ZS53aWR0aCgpKSB7CisgICAgICAgIGZsb2F0IGhlaWdodCA9IHN0ZDo6bWluKHN0YXRpY19j
YXN0PGZsb2F0PihuZXdTaXplLmhlaWdodCgpKSwgb2xkU2l6ZS5oZWlnaHQoKSk7CisgICAgICAg
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0
UmVjdChvbGRTaXplLndpZHRoKCksIDAsIG5ld1NpemUud2lkdGgoKSAtIG9sZFNpemUud2lkdGgo
KSwgaGVpZ2h0KSk7CisgICAgfQorCisgICAgaWYgKG5ld1NpemUuaGVpZ2h0KCkgPiBvbGRTaXpl
LmhlaWdodCgpKQorICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRz
RGlzcGxheUluUmVjdChGbG9hdFJlY3QoMCwgb2xkU2l6ZS5oZWlnaHQoKSwgbmV3U2l6ZS53aWR0
aCgpLCBuZXdTaXplLmhlaWdodCgpIC0gb2xkU2l6ZS5oZWlnaHQoKSkpOworCisgICAgaWYgKG1f
cGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRTaXplKG5l
d1NpemUpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
SG9zdFF0OjpkaWRJbnN0YWxsUGFnZU92ZXJsYXkoKQoreworICAgIGNyZWF0ZVBhZ2VPdmVybGF5
TGF5ZXIoKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKworfQorCit2b2lkIExheWVyVHJl
ZUhvc3RRdDo6ZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkoKQoreworICAgIGRlc3Ryb3lQYWdlT3Zl
cmxheUxheWVyKCk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJU
cmVlSG9zdFF0OjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiByZWN0KQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOworICAgIG1fcGFn
ZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgIHNjaGVkdWxl
TGF5ZXJGbHVzaCgpOworfQorCitib29sIExheWVyVHJlZUhvc3RRdDo6Zmx1c2hQZW5kaW5nTGF5
ZXJDaGFuZ2VzKCkKK3sKKyAgICBtX3Jvb3RMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zeW5jQ29t
cG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxh
eWVyKQorICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9y
VGhpc0xheWVyT25seSgpOworCisgICAgcmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFp
bkZyYW1lKCktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMo
KTsKK30KKworCit2b2lkIExheWVyVHJlZUhvc3RRdDo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1
c2goKQoreworICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKKworICAgIGlmICghbV9p
c1ZhbGlkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWZsdXNoUGVuZGluZ0xheWVyQ2hh
bmdlcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9ub3RpZnlBZnRlclNjaGVkdWxl
ZExheWVyRmx1c2gpIHsKKyAgICAgICAgLy8gTGV0IHRoZSBkcmF3aW5nIGFyZWEga25vdyB0aGF0
IHdlJ3ZlIGRvbmUgYSBmbHVzaCBvZiB0aGUgbGF5ZXIgY2hhbmdlcy4KKyAgICAgICAgc3RhdGlj
X2Nhc3Q8RHJhd2luZ0FyZWFJbXBsKj4obV93ZWJQYWdlLT5kcmF3aW5nQXJlYSgpKS0+bGF5ZXJI
b3N0RGlkRmx1c2hMYXllcnMoKTsKKyAgICAgICAgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVy
Rmx1c2ggPSBmYWxzZTsKKyAgICB9CisKKyAgICBXZWJHcmFwaGljc0xheWVyOjpzZW5kTGF5ZXJz
VG9VSVByb2Nlc3MobV9yb290TGF5ZXIuZ2V0KCksIG1fd2ViUGFnZSk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdFF0OjpsYXllckZsdXNoVGltZXJGaXJlZChUaW1lcjxMYXllclRyZWVIb3N0UXQ+
KikKK3sKKyAgICBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVy
VHJlZUhvc3RRdDo6Y3JlYXRlUGFnZU92ZXJsYXlMYXllcigpCit7CisgICAgQVNTRVJUKCFtX3Bh
Z2VPdmVybGF5TGF5ZXIpOworCisgICAgbV9wYWdlT3ZlcmxheUxheWVyID0gR3JhcGhpY3NMYXll
cjo6Y3JlYXRlKHRoaXMpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIt
PnNldE5hbWUoIkxheWVyVHJlZUhvc3RRdCBwYWdlIG92ZXJsYXkgY29udGVudCIpOworI2VuZGlm
CisKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBt
X3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOworCisgICAgbV9y
b290TGF5ZXItPmFkZENoaWxkKG1fcGFnZU92ZXJsYXlMYXllci5nZXQoKSk7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlSG9zdFF0OjpkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpCit7CisgICAgQVNTRVJU
KG1fcGFnZU92ZXJsYXlMYXllcik7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5yZW1vdmVGcm9t
UGFyZW50KCk7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyID0gbnVsbHB0cjsKK30KKwordm9pZCBM
YXllclRyZWVIb3N0UXQ6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciosIGRvdWJsZSB0aW1lKQoreworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6
bm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQoreworfQor
Cit2b2lkIExheWVyVHJlZUhvc3RRdDo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyKiBncmFwaGljc0xheWVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBo
aWNzQ29udGV4dCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KQoreworICAgIGlmIChncmFwaGljc0xheWVyID09IG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcikgeworICAgICAgICBtX3dlYlBhZ2UtPmRyYXdSZWN0
KGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbV9wYWdlT3ZlcmxheUxheWVyKSB7CisgICAgICAgIG1f
d2ViUGFnZS0+ZHJhd1BhZ2VPdmVybGF5KGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOworICAg
ICAgICByZXR1cm47CisgICAgfQorfQorCitib29sIExheWVyVHJlZUhvc3RRdDo6c2hvd0RlYnVn
Qm9yZGVycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0
dGluZ3MoKS0+c2hvd0RlYnVnQm9yZGVycygpOworfQorCitib29sIExheWVyVHJlZUhvc3RRdDo6
c2hvd1JlcGFpbnRDb3VudGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3Jl
UGFnZSgpLT5zZXR0aW5ncygpLT5zaG93UmVwYWludENvdW50ZXIoKTsKK30KKworYm9vbCBMYXll
clRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKQoreworICAgIHJldHVy
biB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKyNlbHNlCiAjaW5jbHVkZSAiTGF5
ZXJUcmVlSG9zdC5oIgogCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIGJvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nKCkKQEAgLTM1LDMgKzMwNiw0IEBAIGJvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nKCkKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5R
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3Bw
CmluZGV4IGRlZTJjYTcuLjA1MzNhMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcApAQCAtNDIsNiArNDIsMTAgQEAKICNpbmNsdWRl
IDxNQ29tcG9uZW50RGF0YT4KICNlbmRpZgogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorI2luY2x1ZGUgIldlYkdyYXBoaWNzTGF5ZXIuaCIKKyNlbmRpZgorCiAjaWZuZGVmIE5E
RUJVRwogI2lmICFPUyhXSU5ET1dTKQogI2luY2x1ZGUgPHVuaXN0ZC5oPgpAQCAtMTY2LDYgKzE3
MCwxMCBAQCBRX0RFQ0xfRVhQT1JUIGludCBXZWJQcm9jZXNzTWFpblF0KGludCBhcmdjLCBjaGFy
KiogYXJndikKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorICAgIFdlYkdyYXBoaWNzTGF5ZXI6OmluaXRGYWN0b3J5KCk7CisjZW5k
aWYKKwogICAgIFdlYktpdDo6V2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5pdGlhbGl6ZShpZGVudGlm
aWVyLCBSdW5Mb29wOjptYWluKCkpOwogCiAgICAgUnVuTG9vcDo6cnVuKCk7Cg==
</data>
<flag name="commit-queue"
          id="99553"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103839</attachid>
            <date>2011-08-12 16:18:35 -0700</date>
            <delta_ts>2011-08-12 20:27:13 -0700</delta_ts>
            <desc>Patch: Enable accelerated compositing for QDesktopWebView</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>44715</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjZDE3MWJkLi5kZmQwNzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTEtMDgtMTIgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbUXRdIEltcGxlbWVudCBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBvbiBX
SzIgUXQgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTY5MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRlZCBhbiBpZCBwcm9wZXJ0eSB0byBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciwgc28g
d2UgY2FuIG9wdGltaXplIG1hcCBsb29rdXAgZm9yIGl0IGluIFdlYktpdDIuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLiBUaGlzIGlzIGEgc3RlcCB0b3dhcmRzIGhhdmluZyB0ZXN0cyBpbiBMYXlv
dXRUZXN0cy9jb21wb3NpdGluZyBydW4gb24gV2ViS2l0Mi4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldElEKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjppZCk6CisKIDIwMTEtMDgtMTIgIFNh
bSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNb3ZlIGNvbXBpbGVyIHNwZWNp
ZmljIG1hY3JvcyB0byB0aGVpciBvd24gaGVhZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyLmNwcAppbmRleCAzMjBlMzE0Li42NjBlOTFkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKQEAgLTI4LDYgKzI4LDcgQEAgR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXI6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKEdyYXBoaWNzTGF5
ZXJDbGllbnQqIGNsaWUKICAgICA6IEdyYXBoaWNzTGF5ZXIoY2xpZW50KQogICAgICwgbV9ub2Rl
KGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyTm9kZSgpKSkKICAgICAsIG1fY2hhbmdlTWFzaygw
KQorICAgICwgbV9pZCgwKQogICAgICwgbV9hbmltYXRpb25TdGFydGVkVGltZXIodGhpcywgJkdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphbmltYXRpb25TdGFydGVkVGltZXJGaXJlZCkKIHsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKaW5kZXggOTQ0N2YxMS4u
Mjk2MjhkMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCkBAIC04
OSwxMSArODksMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbmltYXRpb24o
Y29uc3QgU3RyaW5nJik7CiAKICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbm9kZS5nZXQoKTsgfQorICAgIHZvaWQgc2V0SUQodW5zaWduZWQgbG9uZyBuZXdJ
RCkgeyBtX2lkID0gbmV3SUQ7IH0KKyAgICB1bnNpZ25lZCBsb25nIGlkKCkgY29uc3QgeyByZXR1
cm4gbV9pZDsgfQogCiBwcml2YXRlOgogICAgIE93blB0cjxUZXh0dXJlTWFwcGVyTm9kZT4gbV9u
b2RlOwogICAgIGJvb2wgbV9zeW5jUXVldWVkOwogICAgIGludCBtX2NoYW5nZU1hc2s7CisgICAg
dW5zaWduZWQgbG9uZyBtX2lkOwogICAgIFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50RGF0YSBt
X3BlbmRpbmdDb250ZW50OwogICAgIFZlY3RvcjxSZWZQdHI8VGV4dHVyZU1hcHBlckFuaW1hdGlv
bj4gPiBtX2FuaW1hdGlvbnM7CiAgICAgdm9pZCBhbmltYXRpb25TdGFydGVkVGltZXJGaXJlZChU
aW1lcjxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcj4qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAzMTU0NzM1
Li5kMWE4Yzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYgQEAKKzIwMTEtMDgtMTIgIE5vJ2Ft
IFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4gYW5kIFZpYXRjaGVzbGF2IE9z
dGFwZW5rbyAgPG9zdGFwZW5rby52aWF0Y2hlc2xhdkBub2tpYS5jb20+CisKKyAgICAgICAgW1F0
XSBJbXBsZW1lbnQgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgb24gV0syIFF0IHBvcnQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2OTM1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIGFjY2VsZXJh
dGVkIGNvbXBvc2l0aW5nIGZvciBRRGVza3RvcFdlYlZpZXcuIFRoaXMgdXNlcyB0aGUgTGF5ZXJU
cmVlSG9zdCBhYnN0cmFjdGlvbiwKKyAgICAgICAgYXMgd2VsbCBhcyB0aGUgY3Jvc3MtcHJvY2Vz
cyBHcmFwaGljc0xheWVyIHNlcmlhbGl6YXRpb24uIEl0IGRvZXMgbm90IHdvcmsgd2l0aCBRVG91
Y2hXZWJWaWV3IHlldCwKKyAgICAgICAgYXMgaXQgcmVsaWVzIG9uIGltcGVyYXRpdmUgcGFpbnRp
bmcgYW5kIHNvbWUgb2YgdGhlIGlzc3VlcyB3aXRoIFFUb3VjaFdlYlZpZXcgYXJlIG5vdCB5ZXQg
bWF0ZXJpYWxpemVkLAorICAgICAgICBsaWtlIHRoZSB1c2Ugb2YgUXQgU2NlbmVHcmFwaC4KKwor
ICAgICAgICBBZnRlciB0aGlzIHBhdGNoLCB3aGVuIGluIFFEZXNrdG9wV2ViVmlldyBhbmQgY29t
cG9zaXRlZCBjb250ZW50IGlzIHJlbmRlcmVkLCB0aGUgdmlldyB3aWxsIHN3aXRjaCB0byBjb21w
b3NpdGluZworICAgICAgICBtb2RlIGZvciB0aGUgZW50aXJlIGNvbnRlbnQsIGluY2x1ZGluZyB0
aGUgIm5vbiBjb21wb3NpdGVkIiBjb250ZW50LiBUaGlzIGlzIGluIGxpbmUgd2l0aCB0aGUgU2Fm
YXJpIGltcGxlbWVudGF0aW9uCisgICAgICAgIG9mIFdlYktpdDIsIHdoaWNoIGFsc28gdXNlcyBM
YXllclRyZWVIb3N0IGluIHRoZSBzYW1lIHdheS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0
Mi9tZXNzYWdlcy5weToKKyAgICAgICAgKiBTaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oOgorICAg
ICAgICAqIFNoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcDoKKyAgICAgICAgKiBTaGFyZWQvV2Vi
TGF5ZXJUcmVlSW5mby5oOgorICAgICAgICAqIFNoYXJlZC9xdC9MYXllclRyZWVDb250ZXh0UXQu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0OjpMYXllclRyZWVDb250ZXh0
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dDo6fkxheWVyVHJlZUNvbnRleHQp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0OjplbmNvZGUpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVDb250ZXh0OjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVDb250ZXh0Ojppc0VtcHR5KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0
OjpEcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6RHJh
d2luZ0FyZWFQcm94eTo6Y29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0Fy
ZWFQcm94eTo6c3luY0NvbXBvc2l0aW5nTGF5ZXJzKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2lu
Z0FyZWFQcm94eTo6dXBkYXRlQ29tcG9zaXRpbmdMYXllckNvbnRlbnQpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVh
UHJveHk6OnZpZXdwb3J0VmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJl
YVByb3h5Ojpjb250ZW50c1NjYWxlKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94
eTo6aXNCYWNraW5nU3RvcmVSZWFkeSk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVh
UHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OnBhaW50KToK
KyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVyQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1w
bC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNvbnRlbnRzU2NhbGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBXZWJL
aXQyLnBybzoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNz
TGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBv
c2l0aW5nU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdENvbXBvc2l0aW5nSW5mb0Zv
clRoaXNMYXllcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFw
aGljc0xheWVyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3Qu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpjcmVhdGUpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3RRdDo6fkxheWVyVHJlZUhvc3RRdCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3RRdDo6TGF5ZXJUcmVlSG9zdFF0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0
OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UXQ6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3RRdDo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UXQ6OnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1
c2gpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFJvb3RDb21wb3NpdGlu
Z0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjppbnZhbGlkYXRlKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXROb25Db21wb3NpdGVkQ29udGVu
dHNOZWVkRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2Nyb2xs
Tm9uQ29tcG9zaXRlZENvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0
Ojpmb3JjZVJlcGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNpemVE
aWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRpZEluc3RhbGxQ
YWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6ZGlkVW5pbnN0
YWxsUGFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFBh
Z2VPdmVybGF5TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0
OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0UXQ6OnBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlSG9zdFF0OjpsYXllckZsdXNoVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RRdDo6Y3JlYXRlUGFnZU92ZXJsYXlMYXllcik6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUhvc3RRdDo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVIb3N0UXQ6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUhvc3RRdDo6c2hvd0RlYnVnQm9yZGVycyk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RRdDo6c2hvd1JlcGFpbnRDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzTWFpblF0KToKKwogMjAxMS0wOC0xMSAgVmlhdGNoZXNsYXYgT3N0YXBlbmtvICA8b3N0
YXBlbmtvLnZpYXRjaGVzbGF2QG5va2lhLmNvbT4KIAogICAgICAgICBWZWN0b3JBcmd1bWVudENv
ZGVyIGRvZXNuJ3QgZW5jb2RlL2RlY29kZSBlbm91Z2ggZGF0YSBmb3IgbW9yZSB0aGFuIG9uZSBi
eXRlIHZlY3RvciBlbGVtZW50cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2NyaXB0cy93
ZWJraXQyL21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3Nh
Z2VzLnB5CmluZGV4IGJlYmY4YTEuLjEzMWI4ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRz
L3dlYmtpdDIvbWVzc2FnZXMucHkKQEAgLTQ2NSw2ICs0NjUsNyBAQCBkZWYgaGVhZGVyc19mb3Jf
dHlwZSh0eXBlKToKICAgICAgICAgJ1dlYktpdDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVu
Y29kZXInOiBbXSwKICAgICAgICAgJ1dlYktpdDo6V2ViQ29udGV4dFVzZXJNZXNzYWdlRW5jb2Rl
cic6IFtdLAogICAgICAgICAnV2ViS2l0OjpXZWJHZXN0dXJlRXZlbnQnOiBbJyJXZWJFdmVudC5o
IiddLAorICAgICAgICAnV2ViS2l0OjpXZWJMYXllclVwZGF0ZUluZm8nOiBbJyJXZWJMYXllclRy
ZWVJbmZvLmgiJ10sCiAgICAgICAgICdXZWJLaXQ6OldlYktleWJvYXJkRXZlbnQnOiBbJyJXZWJF
dmVudC5oIiddLAogICAgICAgICAnV2ViS2l0OjpXZWJNb3VzZUV2ZW50JzogWyciV2ViRXZlbnQu
aCInXSwKICAgICAgICAgJ1dlYktpdDo6V2ViVG91Y2hFdmVudCc6IFsnIldlYkV2ZW50LmgiJ10s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL0xheWVyVHJlZUNvbnRleHQuaAppbmRleCA4NjY3Yzk4Li4y
ZGI1ODRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9MYXllclRyZWVDb250ZXh0LmgKQEAgLTQ3
LDYgKzQ3LDggQEAgcHVibGljOgogICAgIHVpbnQzMl90IGNvbnRleHRJRDsKICNlbGlmIFBMQVRG
T1JNKFdJTikKICAgICBIV05EIHdpbmRvdzsKKyNlbGlmIFBMQVRGT1JNKFFUKQorICAgIHVpbnQz
Ml90IHdlYkxheWVySUQ7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJM
YXllclRyZWVJbmZvLmNwcAppbmRleCBhMDEyODU1Li42NTA4YjM1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNs
dWRlICJXZWJMYXllclRyZWVJbmZvLmgiCiAKKyNpbmNsdWRlICJBcmd1bWVudHMuaCIKICNpbmNs
dWRlICJTaGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaCBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKaW5kZXggYTBlNjhkMy4u
MWM4ZWJlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUlu
Zm8uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCkBAIC0z
Myw3ICszMyw4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotdHlwZWRlZiB1aW50MzJfdCBXZWJMYXllcklEOwordHlwZWRlZiB1bnNpZ25lZCBsb25n
IFdlYkxheWVySUQ7CitlbnVtIHsgSW52YWxpZFdlYkxheWVySUQgPSAwIH07CiAKIHN0cnVjdCBX
ZWJMYXllclVwZGF0ZUluZm8gewogICAgIFdlYkxheWVyVXBkYXRlSW5mbygpIHsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0xheWVyVHJlZUNvbnRleHRRdC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvTGF5ZXJUcmVlQ29udGV4dFF0LmNwcAppbmRleCBmMWJm
MWI0Li5kMzdkNzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvTGF5ZXJU
cmVlQ29udGV4dFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvTGF5ZXJUcmVl
Q29udGV4dFF0LmNwcApAQCAtMjYsNDEgKzI2LDM4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgogCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKKyNpbmNsdWRlICJBcmd1bWVudEVuY29k
ZXIuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIExheWVyVHJlZUNvbnRleHQ6OkxheWVyVHJl
ZUNvbnRleHQoKQorICAgIDogd2ViTGF5ZXJJRCgwKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CiAKIExheWVyVHJlZUNvbnRleHQ6On5MYXllclRyZWVDb250ZXh0KCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheWVyVHJlZUNvbnRleHQ6OmVuY29kZShDb3JlSVBD
OjpBcmd1bWVudEVuY29kZXIqKSBjb25zdAordm9pZCBMYXllclRyZWVDb250ZXh0OjplbmNvZGUo
Q29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAogewotICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKHdlYkxheWVySUQpOwogfQogCi1ib29sIExh
eWVyVHJlZUNvbnRleHQ6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqLCBMYXllclRy
ZWVDb250ZXh0JikKK2Jvb2wgTGF5ZXJUcmVlQ29udGV4dDo6ZGVjb2RlKENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciogZGVjb2RlciwgTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBkZWNvZGVyLT5k
ZWNvZGUoY29udGV4dC53ZWJMYXllcklEKTsKIH0KIAogYm9vbCBMYXllclRyZWVDb250ZXh0Ojpp
c0VtcHR5KCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiAhd2ViTGF5ZXJJRDsKIH0KIAotYm9vbCBvcGVyYXRvcj09KGNvbnN0IExh
eWVyVHJlZUNvbnRleHQmLCBjb25zdCBMYXllclRyZWVDb250ZXh0JikKK2Jvb2wgb3BlcmF0b3I9
PShjb25zdCBMYXllclRyZWVDb250ZXh0JiBhLCBjb25zdCBMYXllclRyZWVDb250ZXh0JiBiKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGEu
d2ViTGF5ZXJJRCA9PSBiLndlYkxheWVySUQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCmluZGV4IGY4
NTJlMmYuLmIyMmRiYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3
aW5nQXJlYVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0Fy
ZWFQcm94eS5jcHAKQEAgLTI4LDYgKzI4LDEwIEBACiAKICNpbmNsdWRlICJXZWJQYWdlUHJveHku
aCIKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQorI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgorI2VuZGlmCisKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTUzLDQgKzU3LDI3IEBA
IHZvaWQgRHJhd2luZ0FyZWFQcm94eTo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplLCBjb25z
dCBJbnRTaXplJiBzY3JvbGxPZmZzZXQpCiAgICAgc2l6ZURpZENoYW5nZSgpOwogfQogCisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCit2b2lk
IERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZVdlYlZpZXcoKQoreworICAgIG1fd2ViUGFnZVByb3h5
LT5zZXRWaWV3TmVlZHNEaXNwbGF5KHZpZXdwb3J0VmlzaWJsZVJlY3QoKSk7Cit9CisKK1dlYkNv
cmU6OkludFJlY3QgRHJhd2luZ0FyZWFQcm94eTo6Y29udGVudHNSZWN0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gSW50UmVjdChJbnRQb2ludDo6emVybygpLCBtX3dlYlBhZ2VQcm94eS0+dmlld1Np
emUoKSk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFQcm94eTo6c3luY0NvbXBvc2l0aW5nTGF5ZXJz
KGNvbnN0IFdlYkxheWVyVHJlZUluZm8mIGluZm8pCit7CisgICAgbV9sYXllclRyZWVIb3N0UHJv
eHktPnN5bmNDb21wb3NpdGluZ0xheWVycyhpbmZvKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVBy
b3h5Ojp1cGRhdGVDb21wb3NpdGluZ0xheWVyQ29udGVudChjb25zdCBXZWJMYXllclVwZGF0ZUlu
Zm8mIGluZm8pCit7CisgICAgbV9sYXllclRyZWVIb3N0UHJveHktPnVwZGF0ZUNvbXBvc2l0aW5n
TGF5ZXJDb250ZW50KGluZm8pOworfQorCisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaAppbmRleCAyYTFl
YTVkLi5hZWE5ZDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2lu
Z0FyZWFQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVBy
b3h5LmgKQEAgLTI4LDggKzI4LDkgQEAKICNkZWZpbmUgRHJhd2luZ0FyZWFQcm94eV9oCiAKICNp
bmNsdWRlICJEcmF3aW5nQXJlYUluZm8uaCIKLSNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNpbmNs
dWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogI2lmIFBMQVRG
T1JNKFFUKQpAQCAtNDQsMTQgKzQ1LDEzIEBAIG5hbWVzcGFjZSBDb3JlSVBDIHsKICAgICBjbGFz
cyBNZXNzYWdlSUQ7CiB9CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBJbnRSZWN0
OwotfQotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTGF5ZXJUcmVlQ29udGV4dDsKK2Ns
YXNzIExheWVyVHJlZUhvc3RQcm94eTsKIGNsYXNzIFVwZGF0ZUluZm87CitjbGFzcyBXZWJMYXll
clRyZWVJbmZvOworY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOwogY2xhc3MgV2ViUGFnZVByb3h5
OwogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtOTAsNiArOTAsMTUgQEAgcHVibGljOgogICAgIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KICAg
ICB2b2lkIHNldFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNjcm9sbE9mZnNldCk7CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
ICYmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlV2ViVmlldygp
OworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB2aWV3cG9ydFZpc2libGVSZWN0KCkgY29u
c3QgeyByZXR1cm4gY29udGVudHNSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJl
Y3QgY29udGVudHNSZWN0KCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBjb250ZW50c1NjYWxl
KCkgY29uc3QgeyByZXR1cm4gMS4wOyB9CisgICAgdmlydHVhbCBib29sIGlzQmFja2luZ1N0b3Jl
UmVhZHkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHN5bmNDb21w
b3NpdGluZ0xheWVycyhjb25zdCBXZWJMYXllclRyZWVJbmZvJik7CisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJDb250ZW50KGNvbnN0IFdlYkxheWVyVXBkYXRlSW5mbyYp
OworI2VuZGlmCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgRHJhd2luZ0FyZWFQcm94eShEcmF3
aW5nQXJlYVR5cGUsIFdlYlBhZ2VQcm94eSopOwogCkBAIC05OSw2ICsxMDgsMTAgQEAgcHJvdGVj
dGVkOgogICAgIFdlYkNvcmU6OkludFNpemUgbV9zaXplOwogICAgIFdlYkNvcmU6OkludFNpemUg
bV9zY3JvbGxPZmZzZXQ7CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVT
RShURVhUVVJFX01BUFBFUikKKyAgICBPd25QdHI8TGF5ZXJUcmVlSG9zdFByb3h5PiBtX2xheWVy
VHJlZUhvc3RQcm94eTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIC8vIENvcmVJUEMgbWVzc2Fn
ZSBoYW5kbGVycy4KICAgICAvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIHB1cmUgdmlydHVhbC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkubWVz
c2FnZXMuaW4KaW5kZXggZTExMmFkNi4uMmU3NjE2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4KQEAgLTI3LDYgKzI3
LDEwIEBAIG1lc3NhZ2VzIC0+IERyYXdpbmdBcmVhUHJveHkgewogICAgIEVudGVyQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgV2ViS2l0OjpM
YXllclRyZWVDb250ZXh0IGNvbnRleHQpCiAgICAgRXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIFdlYktpdDo6VXBkYXRlSW5mbyB1cGRh
dGVJbmZvKQogI2VuZGlmCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0Uo
VEVYVFVSRV9NQVBQRVIpCisgICAgU3luY0NvbXBvc2l0aW5nTGF5ZXJzKFdlYktpdDo6V2ViTGF5
ZXJUcmVlSW5mbyBsYXllclRyZWVJbmZvKQorICAgIFVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJDb250
ZW50KFdlYktpdDo6V2ViTGF5ZXJVcGRhdGVJbmZvIGxheWVyVXBkYXRlSW5mbykKKyNlbmRpZgog
I2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogICAgIEludmFsaWRhdGUoV2ViQ29yZTo6
SW50UmVjdCBkaXJ0eVJlY3QpCiAgICAgRGlkU2V0U2l6ZShXZWJDb3JlOjpJbnRTaXplIHZpZXdT
aXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHlJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1w
bC5jcHAKaW5kZXggMzUyZmIxZC4uYmU4ZDJjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCkBAIC0zNCw2ICszNCwxMCBAQAogI2lu
Y2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaW9uLmg+CiAK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikK
KyNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHkuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC02Nyw4ICs3MSwxMyBAQCB2b2lk
IERyYXdpbmdBcmVhUHJveHlJbXBsOjpwYWludChCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQsCiB7CiAgICAgdW5wYWludGVkUmVnaW9uID0gcmVjdDsKIAotICAg
IGlmIChpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSkKKyAgICBpZiAoaXNJbkFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpIHsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdFBy
b3h5KQorICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHktPnBhaW50KGNvbnRleHQsIHJl
Y3QsIHVucGFpbnRlZFJlZ2lvbik7CisjZW5kaWYKICAgICAgICAgcmV0dXJuOworICAgIH0KIAog
ICAgIEFTU0VSVChtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEIDw9IG1fbmV4dEJhY2tpbmdT
dG9yZVN0YXRlSUQpOwogICAgIGlmIChtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEIDwgbV9u
ZXh0QmFja2luZ1N0b3JlU3RhdGVJRCkgewpAQCAtMzI5LDYgKzMzOCwxMCBAQCB2b2lkIERyYXdp
bmdBcmVhUHJveHlJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExh
eWVyVHJlZUNvbnRleAogICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAgICBtX2xheWVy
VHJlZUNvbnRleHQgPSBsYXllclRyZWVDb250ZXh0OwogICAgIG1fd2ViUGFnZVByb3h5LT5lbnRl
ckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGxheWVyVHJlZUNvbnRleHQpOworI2lmIFVTRShU
RVhUVVJFX01BUFBFUikKKyAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdFByb3h5KQorICAgICAgICBt
X2xheWVyVHJlZUhvc3RQcm94eSA9IGFkb3B0UHRyKG5ldyBMYXllclRyZWVIb3N0UHJveHkodGhp
cykpOworI2VuZGlmCiB9CiAKIHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmV4aXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3
aW5nQXJlYVByb3h5SW1wbC5oCmluZGV4IDNjZjVmOTEuLjQ5YWNjYjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCkBAIC0zOSw2ICszOSw4
IEBAIGNsYXNzIFJlZ2lvbjsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIExheWVyVHJl
ZUhvc3RQcm94eTsKKwogY2xhc3MgRHJhd2luZ0FyZWFQcm94eUltcGwgOiBwdWJsaWMgRHJhd2lu
Z0FyZWFQcm94eSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8RHJhd2luZ0FyZWFQ
cm94eUltcGw+IGNyZWF0ZShXZWJQYWdlUHJveHkqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5hZjNkM2E0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0xheWVyVHJlZUhvc3RQcm94eS5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyov
CisKKyNpZm5kZWYgTGF5ZXJUcmVlSG9zdFByb3h5X2gKKyNkZWZpbmUgTGF5ZXJUcmVlSG9zdFBy
b3h5X2gKKworI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVh
UHJveHkuaCIKKyNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJSdW5Mb29wLmgiCisjaW5j
bHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250
ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KKworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkxh
eWVyVHJlZUluZm87CitjbGFzcyBXZWJMYXllclVwZGF0ZUluZm87CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCitjbGFzcyBMYXllclRyZWVIb3N0UHJveHkgOiBwdWJsaWMgR3JhcGhpY3NM
YXllckNsaWVudCB7CitwdWJsaWM6CisgICAgTGF5ZXJUcmVlSG9zdFByb3h5KERyYXdpbmdBcmVh
UHJveHkqKTsKKyAgICB2aXJ0dWFsIH5MYXllclRyZWVIb3N0UHJveHkoKSB7IH0KKyAgICB2b2lk
IHN5bmNDb21wb3NpdGluZ0xheWVycyhjb25zdCBXZWJMYXllclRyZWVJbmZvJik7CisgICAgdm9p
ZCB1cGRhdGVDb21wb3NpdGluZ0xheWVyQ29udGVudChjb25zdCBXZWJMYXllclVwZGF0ZUluZm8m
KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3Jl
SVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworICAgIHZvaWQgcGFp
bnQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYsIFJlZ2lvbiYpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCB1cGRhdGVXZWJWaWV3
KCk7CisKKyAgICBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUxheWVyKFdlYkxheWVy
SUQpOworCisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJCeUlEKFdlYkxheWVySUQgaWQpIHsgcmV0
dXJuIChpZCA9PSBJbnZhbGlkV2ViTGF5ZXJJRCkgPyAwIDogbV9sYXllcnMuZ2V0KGlkKS5sYXll
cjsgfQorICAgIEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVy
LmdldCgpOyB9CisKKyAgICB2b2lkIHN5bmNEZWxldGVkTGF5ZXJzKCk7CisgICAgdmlydHVhbCB2
b2lkIHBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYs
IEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVh
bCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJs
ZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBHcmFwaGlj
c0xheWVyKikgeyB9CisgICAgdmlydHVhbCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgUnVuTG9vcDo6VGltZXI8TGF5ZXJUcmVlSG9z
dFByb3h5PiBtX2FuaW1hdGlvblRpbWVyOworICAgIERyYXdpbmdBcmVhUHJveHkqIG1fZHJhd2lu
Z0FyZWFQcm94eTsKKworICAgIHN0cnVjdCBMYXllckRhdGEgeworICAgICAgICBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKiBsYXllcjsKKyAgICAgICAgUUltYWdlIGltYWdlOworICAgICAgICBMYXll
ckRhdGEoKSA6IGxheWVyKDApIHsgfQorICAgIH07CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8V2Vi
TGF5ZXJJRCwgTGF5ZXJEYXRhPiBMYXllck1hcDsKKyAgICBmbG9hdCBtX2NvbnRlbnRTY2FsZTsK
KworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBPd25QdHI8VGV4dHVyZU1hcHBlcj4gbV90
ZXh0dXJlTWFwcGVyOworI2VuZGlmCisKKyAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9yb290
TGF5ZXI7CisgICAgVmVjdG9yPFdlYkxheWVySUQ+IG1fbGF5ZXJzVG9EZWxldGU7CisKKyAgICBM
YXllck1hcCBtX2xheWVyczsKKyAgICBXZWJMYXllcklEIG1fcm9vdExheWVySUQ7Cit9OworCit9
CisKKyNlbmRpZiAvLyBMYXllclRyZWVIb3N0UHJveHlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcAppbmRleCAxZmE4MDZiLi4zNDYy
ZDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJl
YVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJl
YVByb3h5LmNwcApAQCAtNjU5LDYgKzY1OSwxMSBAQCBib29sIFRpbGVkRHJhd2luZ0FyZWFQcm94
eTo6aGFzUGVuZGluZ1VwZGF0ZXMoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorZmxv
YXQgVGlsZWREcmF3aW5nQXJlYVByb3h5Ojpjb250ZW50c1NjYWxlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9jdXJyZW50VGlsZVNldC0+Y29udGVudHNTY2FsZSgpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGls
ZWREcmF3aW5nQXJlYVByb3h5LmgKaW5kZXggZjllOGQ5NC4uMDBhNzM0ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuaApAQCAtNzQsNiAr
NzQsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdChjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgdm9pZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0KTsKKyAg
ICBmbG9hdCBjb250ZW50c1NjYWxlKCkgY29uc3Q7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaENvbXBvc2l0aW5nQ29udGV4dCh1aW50
MzJfdCAvKiBjb250ZXh0SUQgKi8pIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMWQzZGRlNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKQEAgLTAsMCArMSwyNzEgQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHkuaCIKKworI2lu
Y2x1ZGUgIkRyYXdpbmdBcmVhTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5
TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJNZXNzYWdlSUQuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVC
aXRtYXAuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUXQuaCIKKyNpbmNsdWRlICJXZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJ0ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuaCIKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgInRl
eG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIgorI2luY2x1ZGUgPFFEYXRlVGltZT4KKyNpbmNsdWRl
IDxRdERlYnVnPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFzc093blB0cjxHcmFwaGljc0xh
eWVyPiBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkK
K3sKKyAgICBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogbmV3TGF5ZXIgPSBuZXcgR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIodGhpcyk7CisgICAgbmV3TGF5ZXItPnNldElEKGxheWVySUQp
OworICAgIHJldHVybiBhZG9wdFB0cihuZXdMYXllcik7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dFByb3h5OjpzeW5jRGVsZXRlZExheWVycygpCit7CisgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGVu
ZEl0ZXJhdG9yID0gbV9sYXllcnMuZW5kKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2xheWVyc1RvRGVsZXRlLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYkxheWVySUQgaWQgPSBt
X2xheWVyc1RvRGVsZXRlW2ldOworICAgICAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xh
eWVycy5maW5kKGlkKTsKKworICAgICAgICAvLyBUaGlzIG1pZ2h0IGhhcHBlbiBpZiB0aGUgd2Vi
IHByb2Nlc3MgZGVsZXRlcyB0aGUgbGF5ZXIgYWZ0ZXIgdGhlIFVJIHByb2Nlc3MgYWxyZWFkeSBj
bGVhcmVkIHRoZSBsYXllcnMgaGVyZS4KKyAgICAgICAgaWYgKGl0ID09IGVuZEl0ZXJhdG9yKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGRlbGV0ZSBpdC0+c2Vjb25kLmxheWVyOwor
ICAgICAgICBtX2xheWVycy5yZW1vdmUoaXQpOworICAgIH0KK30KKwordm9pZCBMYXllclRyZWVI
b3N0UHJveHk6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciogbGF5ZXIsIEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IElu
dFJlY3QmIGluQ2xpcCkKK3sKKyAgICBXZWJMYXllcklEIGlkID0gV2ViTGF5ZXJJRChzdGF0aWNf
Y2FzdDxjb25zdCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcio+KGxheWVyKS0+aWQoKSk7Cisg
ICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmluZChpZCk7CisgICAgaWYgKGl0
ID09IG1fbGF5ZXJzLmVuZCgpKQorICAgICAgICByZXR1cm47CisgICAgTGF5ZXJEYXRhJiBkYXRh
ID0gaXQtPnNlY29uZDsKKyAgICBJbnRSZWN0IGNsaXAoaW5DbGlwKTsKKyAgICBjbGlwLmludGVy
c2VjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIGRhdGEuaW1hZ2Uuc2l6ZSgpKSk7CisgICAg
UVBhaW50ZXIqIHBhaW50ZXIgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworICAgIHBhaW50
ZXItPnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7
CisgICAgcGFpbnRlci0+ZHJhd0ltYWdlKGNsaXAsIGRhdGEuaW1hZ2UsIGNsaXApOworfQorCitM
YXllclRyZWVIb3N0UHJveHk6OkxheWVyVHJlZUhvc3RQcm94eShEcmF3aW5nQXJlYVByb3h5KiBk
cmF3aW5nQXJlYVByb3h5KQorICAgIDogbV9hbmltYXRpb25UaW1lcihSdW5Mb29wOjptYWluKCks
IHRoaXMsICZMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVdlYlZpZXcpCisgICAgLCBtX2RyYXdp
bmdBcmVhUHJveHkoZHJhd2luZ0FyZWFQcm94eSkKK3sKKyAgICBtX3Jvb3RMYXllciA9IGNyZWF0
ZUxheWVyKEludmFsaWRXZWJMYXllcklEKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0TWFza3NUb0Jv
dW5kcyhmYWxzZSk7CisgICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7Cisg
ICAgbV9yb290TGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgwLCAwLCAwKSk7CisK
KyAgICAvLyBUaGUgcm9vdCBsYXllciBzaG91bGQgbm90IGhhdmUgemVybyBzaXplLCBvciBpdCB3
b3VsZCBiZSBvcHRpbWl6ZWQgb3V0LgorICAgIG1fcm9vdExheWVyLT5zZXRTaXplKEZsb2F0U2l6
ZSgxLjAsIDEuMCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c3luY0NvbXBvc2l0
aW5nTGF5ZXJzKGNvbnN0IFdlYkxheWVyVHJlZUluZm8mIGluZm8pCit7CisgICAgbV9jb250ZW50
U2NhbGUgPSBpbmZvLmNvbnRlbnRTY2FsZTsKKyAgICBtX2xheWVyc1RvRGVsZXRlLmFwcGVuZChp
bmZvLmRlbGV0ZWRMYXllcklEcyk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZm8u
bGF5ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFdlYkxheWVySUQgaWQgPSBpbmZv
LmxheWVyc1tpXS5pZDsKKworICAgICAgICBpZiAobV9sYXllcnMuY29udGFpbnMoaWQpKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgTGF5ZXJEYXRhIGRhdGE7CisKKyAgICAgICAg
Ly8gV2UgaGF2ZSB0byBsZWFrIHRoZSBsYXllciBhbmQgbWFuYWdlIGl0IG91cnNlbHZlcywgc2lu
Y2UgdGhpcyBpcyBhIEhhc2hNYXAgYW5kIE93blB0ciBpcyBub3QgY29weWFibGUuCisgICAgICAg
IGRhdGEubGF5ZXIgPSBjcmVhdGVMYXllcihpZCkubGVha1B0cigpOworICAgICAgICBtX2xheWVy
cy5hZGQoaWQsIGRhdGEpOworCisgICAgICAgIGlmIChpZCAhPSBpbmZvLnJvb3RMYXllcklEKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgbV9yb290TGF5ZXItPnJlbW92ZUFsbENo
aWxkcmVuKCk7CisgICAgICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChkYXRhLmxheWVyKTsKKyAg
ICB9CisKKyAgICBpZiAoaW5mby5yb290TGF5ZXJJRCAhPSBtX3Jvb3RMYXllcklEKSB7CisgICAg
ICAgIG1fcm9vdExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOworICAgICAgICBtX3Jvb3RMYXll
cklEID0gaW5mby5yb290TGF5ZXJJRDsKKyAgICAgICAgaWYgKG1fcm9vdExheWVySUQpIHsKKyAg
ICAgICAgICAgIExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZpbmQoaW5mby5yb290
TGF5ZXJJRCk7CisgICAgICAgICAgICBpZiAoaXQgIT0gbV9sYXllcnMuZW5kKCkpCisgICAgICAg
ICAgICAgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKGl0LT5zZWNvbmQubGF5ZXIpOworICAgICAg
ICB9CisgICAgfQorCisgICAgZm9yIChzaXplX3QgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXgg
PCBpbmZvLmxheWVycy5zaXplKCk7ICsrbGF5ZXJJbmRleCkgeworICAgICAgICBjb25zdCBXZWJM
YXllckluZm8mIGxheWVySW5mbyA9IGluZm8ubGF5ZXJzW2xheWVySW5kZXhdOworICAgICAgICBX
ZWJMYXllcklEIGlkID0gbGF5ZXJJbmZvLmlkOworCisgICAgICAgIExheWVyTWFwOjppdGVyYXRv
ciBpdCA9IG1fbGF5ZXJzLmZpbmQoaWQpOworICAgICAgICBpZiAoaXQgPT0gbV9sYXllcnMuZW5k
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBMYXllckRhdGEmIGRhdGEgPSBp
dC0+c2Vjb25kOworICAgICAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGRhdGEubGF5ZXI7CisK
KyAgICAgICAgbGF5ZXItPnNldE5hbWUobGF5ZXJJbmZvLm5hbWUpOworCisgICAgICAgIC8vIFdl
IGhhdmUgYSBjb250YWluZXIgbGF5ZXIgYXMgYSBwYXJlbnQgdG8gdGhlIHJvb3QgbGF5ZXIsIHNv
IHdlIHNob3VsZG4ndCBwYXJlbnQgaXQgdG8gdGhlIHdlYiBwcm9jZXNzIHZhbHVlLgorICAgICAg
ICBpZiAoaWQgIT0gaW5mby5yb290TGF5ZXJJRCkKKyAgICAgICAgICAgIGxheWVyLT5zZXRQYXJl
bnQobGF5ZXJCeUlEKGxheWVySW5mby5wYXJlbnQpKTsKKyAgICAgICAgbGF5ZXItPnNldFJlcGxp
Y2F0ZWRCeUxheWVyKGxheWVyQnlJRChsYXllckluZm8ucmVwbGljYSkpOworICAgICAgICBsYXll
ci0+c2V0TWFza0xheWVyKGxheWVyQnlJRChsYXllckluZm8ubWFzaykpOworCisgICAgICAgIGxh
eWVyLT5zZXRQb3NpdGlvbihsYXllckluZm8ucG9zKTsKKyAgICAgICAgbGF5ZXItPnNldFNpemUo
bGF5ZXJJbmZvLnNpemUpOworICAgICAgICBsYXllci0+c2V0VHJhbnNmb3JtKGxheWVySW5mby50
cmFuc2Zvcm0pOworICAgICAgICBsYXllci0+c2V0QW5jaG9yUG9pbnQobGF5ZXJJbmZvLmFuY2hv
clBvaW50KTsKKyAgICAgICAgbGF5ZXItPnNldENoaWxkcmVuVHJhbnNmb3JtKGxheWVySW5mby5j
aGlsZHJlblRyYW5zZm9ybSk7CisgICAgICAgIGxheWVyLT5zZXRCYWNrZmFjZVZpc2liaWxpdHko
bGF5ZXJJbmZvLmJhY2tmYWNlVmlzaWJsZSk7CisgICAgICAgIGxheWVyLT5zZXRDb250ZW50c09w
YXF1ZShsYXllckluZm8uY29udGVudHNPcGFxdWUpOworICAgICAgICBsYXllci0+c2V0Q29udGVu
dHNSZWN0KGxheWVySW5mby5jb250ZW50c1JlY3QpOworICAgICAgICBsYXllci0+c2V0RHJhd3ND
b250ZW50KGxheWVySW5mby5kcmF3c0NvbnRlbnQpOworCisgICAgICAgIC8vIE5ldmVyIG1ha2Ug
dGhlIHJvb3QgbGF5ZXIgY2xpcC4KKyAgICAgICAgbGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMoaWQg
PT0gaW5mby5yb290TGF5ZXJJRCA/IGZhbHNlIDogbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMpOwor
ICAgICAgICBsYXllci0+c2V0T3BhY2l0eShsYXllckluZm8ub3BhY2l0eSk7CisgICAgICAgIGxh
eWVyLT5zZXRQcmVzZXJ2ZXMzRChsYXllckluZm8ucHJlc2VydmVzM0QpOworICAgICAgICBWZWN0
b3I8R3JhcGhpY3NMYXllcio+IGNoaWxkcmVuOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGF5ZXJJbmZvLmNoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAo
R3JhcGhpY3NMYXllciogY2hpbGQgPSBsYXllckJ5SUQobGF5ZXJJbmZvLmNoaWxkcmVuW2ldKSkK
KyAgICAgICAgICAgICAgICBjaGlsZHJlbi5hcHBlbmQoY2hpbGQpOworICAgICAgICB9CisgICAg
ICAgIGxheWVyLT5zZXRDaGlsZHJlbihjaGlsZHJlbik7CisKKyAgICAgICAgaWYgKGxheWVySW5m
by5pbWFnZUJhY2tpbmdTdG9yZSkgeworICAgICAgICAgICAgbGF5ZXItPnNldENvbnRlbnRzVG9J
bWFnZShsYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmUtPmNyZWF0ZUltYWdlKCkuZ2V0KCkpOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBsYXllci0+c2V0Q29u
dGVudHNUb0ltYWdlKDApOworCisgICAgICAgIGlmICghbGF5ZXJJbmZvLmRyYXdzQ29udGVudCkg
eworICAgICAgICAgICAgZGF0YS5pbWFnZSA9IFFJbWFnZSgpOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKyAgICAgICAgSW50U2l6ZSB3YW50ZWRTaXplKGxheWVySW5mby5zaXpl
LndpZHRoKCksIGxheWVySW5mby5zaXplLmhlaWdodCgpKTsKKworICAgICAgICBpZiAoSW50U2l6
ZShkYXRhLmltYWdlLnNpemUoKSkgIT0gbGF5ZXJJbmZvLnNpemUpIHsKKyAgICAgICAgICAgIFFJ
bWFnZSBpbWFnZSh3YW50ZWRTaXplLndpZHRoKCksIHdhbnRlZFNpemUuaGVpZ2h0KCksIGxheWVy
LT5jb250ZW50c09wYXF1ZSgpID8gUUltYWdlOjpGb3JtYXRfUkdCMTYgOiBRSW1hZ2U6OkZvcm1h
dF9BUkdCMzJfUHJlbXVsdGlwbGllZCk7CisgICAgICAgICAgICBpbWFnZS5maWxsKDApOworICAg
ICAgICAgICAgZGF0YS5pbWFnZSA9IGltYWdlOworICAgICAgICB9CisgICAgfQorCisgICAgdXBk
YXRlV2ViVmlldygpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlQ29tcG9z
aXRpbmdMYXllckNvbnRlbnQoY29uc3QgV2ViTGF5ZXJVcGRhdGVJbmZvJiBjaHVuaykKK3sKKyAg
ICBpZiAoY2h1bmsuYml0bWFwSGFuZGxlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5maW5kKGNodW5rLmxheWVySUQpOwor
ICAgIGlmIChpdCA9PSBtX2xheWVycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUVBh
aW50ZXIgcGFpbnRlcigmaXQtPnNlY29uZC5pbWFnZSk7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoY2h1bmsuYml0bWFwSGFuZGxl
KTsKKyAgICBpZiAoIWJpdG1hcCkKKyAgICAgICAgcmV0dXJuOworICAgIFFJbWFnZSBpbWFnZUZy
b21VcGRhdGVDaHVuayA9IGJpdG1hcC0+Y3JlYXRlUUltYWdlKCk7CisgICAgaWYgKGltYWdlRnJv
bVVwZGF0ZUNodW5rLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBGbG9hdFJlY3Qg
c2NhbGVkUmVjdChjaHVuay5yZWN0KTsKKyAgICBzY2FsZWRSZWN0LnNjYWxlKDEuMCAvIG1fY29u
dGVudFNjYWxlKTsKKyAgICBpdC0+c2Vjb25kLmxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3Qo
c2NhbGVkUmVjdCk7CisgICAgcGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNv
bXBvc2l0aW9uTW9kZV9Tb3VyY2UpOworICAgIHBhaW50ZXIuZHJhd0ltYWdlKGNodW5rLnJlY3Qs
IGltYWdlRnJvbVVwZGF0ZUNodW5rKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnBh
aW50KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQgdGFyZ2V0UGFpbnRlciwg
Y29uc3QgSW50UmVjdCYsIFJlZ2lvbiYpCit7CisgICAgRmxvYXRSZWN0IGNsaXBSZWN0KFFSZWN0
Rih0YXJnZXRQYWludGVyLT5jbGlwUmVnaW9uKCkuYm91bmRpbmdSZWN0KCkpKTsKKyAgICBpZiAo
Y2xpcFJlY3QuaXNFbXB0eSgpKQorICAgICAgICBjbGlwUmVjdCA9IG1fZHJhd2luZ0FyZWFQcm94
eS0+dmlld3BvcnRWaXNpYmxlUmVjdCgpOworICAgIEZsb2F0UmVjdCBzY2FsZWRDb250ZW50c1Jl
Y3QgPSBtX2RyYXdpbmdBcmVhUHJveHktPmNvbnRlbnRzUmVjdCgpOworICAgIHNjYWxlZENvbnRl
bnRzUmVjdC5zY2FsZSgxLjAgLyBtX2RyYXdpbmdBcmVhUHJveHktPmNvbnRlbnRzU2NhbGUoKSk7
CisgICAgY2xpcFJlY3QuaW50ZXJzZWN0KHNjYWxlZENvbnRlbnRzUmVjdCk7CisKKyAgICBHcmFw
aGljc0xheWVyKiBjdXJyZW50Um9vdExheWVyID0gcm9vdExheWVyKCk7CisgICAgaWYgKCFjdXJy
ZW50Um9vdExheWVyKQorICAgICAgICByZXR1cm47CisgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5v
ZGUgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGN1cnJlbnRSb290TGF5ZXIpOworCisgICAgaWYgKCFu
b2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCh0YXJn
ZXRQYWludGVyKTsKKyAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKKyAgICAgICAgbV90ZXh0dXJl
TWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKCZjb250ZXh0KTsKKworICAgIG1fdGV4dHVy
ZU1hcHBlci0+c2V0R3JhcGhpY3NDb250ZXh0KCZjb250ZXh0KTsKKyAgICBtX3RleHR1cmVNYXBw
ZXItPnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dC5pbWFnZUludGVycG9sYXRp
b25RdWFsaXR5KCkpOworICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0VGV4dERyYXdpbmdNb2RlKGNv
bnRleHQudGV4dERyYXdpbmdNb2RlKCkpOworICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0Vmlld3Bv
cnRTaXplKG1fZHJhd2luZ0FyZWFQcm94eS0+dmlld3BvcnRWaXNpYmxlUmVjdCgpLnNpemUoKSk7
CisKKyAgICBub2RlLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Cisg
ICAgY29uc3QgUVRyYW5zZm9ybSB0ID0gdGFyZ2V0UGFpbnRlci0+dHJhbnNmb3JtKCk7CisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4KHQubTExKCksIHQubTEyKCksIDAsIHQubTEzKCks
IHQubTIxKCksIHQubTIyKCksIDAsIHQubTIzKCksIDAsIDAsIDEsIDAsIHQubTMxKCksIHQubTMy
KCksIDAsIHQubTMzKCkpOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UoMCk7Cisg
ICAgY3VycmVudFJvb3RMYXllci0+c2V0T3BhY2l0eSh0YXJnZXRQYWludGVyLT5vcGFjaXR5KCkp
OworICAgIGJvb2wgZm9yY2VTeW5jID0gKG1hdHJpeCAhPSBjdXJyZW50Um9vdExheWVyLT50cmFu
c2Zvcm0oKSk7CisgICAgY3VycmVudFJvb3RMYXllci0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7CisK
KyAgICBib29sIGFsbG93U3luYyA9IHRydWU7CisgICAgaWYgKCFmb3JjZVN5bmMpCisgICAgICAg
IGFsbG93U3luYyA9IG1fZHJhd2luZ0FyZWFQcm94eS0+aXNCYWNraW5nU3RvcmVSZWFkeSgpOwor
CisgICAgaWYgKGFsbG93U3luYykgeworICAgICAgICBzeW5jRGVsZXRlZExheWVycygpOworICAg
ICAgICBjdXJyZW50Um9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShjbGlwUmVjdCk7Cisg
ICAgfQorCisgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKCk7CisgICAgbV90ZXh0
dXJlTWFwcGVyLT5iZWdpbkNsaXAobWF0cml4LCBjbGlwUmVjdCk7CisKKyAgICBub2RlLT5wYWlu
dCgpOworCisgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRDbGlwKCk7CisgICAgbV90ZXh0dXJlTWFw
cGVyLT5lbmRQYWludGluZygpOworCisgICAgaWYgKG5vZGUtPmRlc2NlbmRhbnRzT3JTZWxmSGF2
ZVJ1bm5pbmdBbmltYXRpb25zKCkpCisgICAgICAgIHVwZGF0ZVdlYlZpZXcoKTsKK30KKwordm9p
ZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVdlYlZpZXcoKQoreworICAgIG1fZHJhd2luZ0Fy
ZWFQcm94eS0+dXBkYXRlV2ViVmlldygpOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYktpdDIucHJvIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KaW5k
ZXggNDRlYmI2OS4uZjVmMzIzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5w
cm8KKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KQEAgLTE1MSw2ICsxNTEsNyBAQCBI
RUFERVJTICs9IFwKICAgICBTaGFyZWQvV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5oIFwKICAgICBT
aGFyZWQvV2ViR3JhcGhpY3NDb250ZXh0LmggXAogICAgIFNoYXJlZC9XZWJJbWFnZS5oIFwKKyAg
ICBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oIFwKICAgICBTaGFyZWQvV2ViTmF2aWdhdGlvbkRh
dGFTdG9yZS5oIFwKICAgICBTaGFyZWQvV2ViTnVtYmVyLmggXAogICAgIFNoYXJlZC9XZWJPcGVu
UGFuZWxQYXJhbWV0ZXJzLmggXApAQCAtMzAxLDYgKzMwMiw3IEBAIEhFQURFUlMgKz0gXAogICAg
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRXJyb3JzLmggXAogICAgIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaCBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNsaWVudC5oIFwKKyAgICBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oIFwKQEAgLTM4MSw2ICszODMsNyBAQCBT
T1VSQ0VTICs9IFwKICAgICBTaGFyZWQvV2ViR3JhcGhpY3NDb250ZXh0LmNwcCBcCiAgICAgU2hh
cmVkL1dlYktleWJvYXJkRXZlbnQuY3BwIFwKICAgICBTaGFyZWQvV2ViSW1hZ2UuY3BwIFwKKyAg
ICBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAgXAogICAgIFNoYXJlZC9XZWJNb3VzZUV2ZW50
LmNwcCBcCiAgICAgU2hhcmVkL1dlYk9wZW5QYW5lbFBhcmFtZXRlcnMuY3BwIFwKICAgICBTaGFy
ZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAgXApAQCAtNDY4LDYgKzQ3MSw3IEBAIFNP
VVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRDbGllbnQuY3BwIFwKICAg
ICBVSVByb2Nlc3MvV2ViVUlDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvQ2xpZW50SW1w
bC5jcHAgXAorICAgIFVJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAgXAogICAg
IFVJUHJvY2Vzcy9xdC9Ub3VjaFZpZXdJbnRlcmZhY2UuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQv
UXRHZXN0dXJlUmVjb2duaXplci5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVS
ZWNvZ25pemVyLmNwcCBcCkBAIC01NDMsNiArNTQ3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwIFwKICAgICBXZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcCBcCiAgICAgV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNsaWVudC5jcHAgXAorICAgIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAgXAogICAgIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcCBcCiAgICAgV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5jcHAgXAogICAgIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBo
aWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJHcmFwaGljc0xheWVyLmNwcAppbmRleCAyMThmMmZmLi45ZWEzNWRkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3Jh
cGhpY3NMYXllci5jcHAKQEAgLTMzNiwxNSArMzM2LDE1IEBAIGNvbnN0IFdlYkxheWVySW5mbyYg
V2ViR3JhcGhpY3NMYXllcjo6bGF5ZXJJbmZvKCkgY29uc3QKICAgICByZXR1cm4gbV9sYXllcklu
Zm87CiB9CiAKLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGUoKQor
dm9pZCBXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiB7CiAgICAgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQotICAg
ICAgICBjaGlsZHJlbigpW2ldLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOworICAgICAgICBjaGls
ZHJlbigpW2ldLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShyZWN0KTsKICAgICBpZiAocmVwbGljYUxh
eWVyKCkpCi0gICAgICAgIHJlcGxpY2FMYXllcigpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOwor
ICAgICAgICByZXBsaWNhTGF5ZXIoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGUocmVjdCk7CiAgICAg
aWYgKG1hc2tMYXllcigpKQotICAgICAgICBtYXNrTGF5ZXIoKS0+c3luY0NvbXBvc2l0aW5nU3Rh
dGUoKTsKKyAgICAgICAgbWFza0xheWVyKCktPnN5bmNDb21wb3NpdGluZ1N0YXRlKHJlY3QpOwog
fQogCiBXZWJHcmFwaGljc0xheWVyKiB0b1dlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciog
bGF5ZXIpCkBAIC00MDUsOSArNDA1LDkgQEAgc3RhdGljIFZlY3RvcjxGbG9hdFJlY3Q+IGRpdmlk
ZUludG9UaWxlcyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgcmV0dXJuIHRpbGVzOwogfQog
Ci1zdGF0aWMgdm9pZCBjb2xsZWN0Q29tcG9zaXRpbmdJbmZvRm9yVGhpc0xheWVyKEdyYXBoaWNz
TGF5ZXIqIGxheWVyLCBXZWJMYXllclRyZWVJbmZvJiBvdXRJbmZvLCBWZWN0b3I8V2ViR3JhcGhp
Y3NMYXllcio+JiBvdXRMYXllcnMpCitzdGF0aWMgdm9pZCBjb2xsZWN0Q29tcG9zaXRpbmdJbmZv
Rm9yVGhpc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIFdlYkxheWVyVHJlZUlu
Zm8mIG91dEluZm8sIFZlY3RvcjxXZWJHcmFwaGljc0xheWVyKj4mIG91dExheWVycykKIHsKLSAg
ICBXZWJHcmFwaGljc0xheWVyKiBsYXllciA9IHRvV2ViR3JhcGhpY3NMYXllcihsYXllcik7Cisg
ICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIoZ3JhcGhpY3NM
YXllcik7CiAgICAgaWYgKCFsYXllcikKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghbGF5ZXIt
PmlzTW9kaWZpZWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmgKaW5kZXggYWQ2MDIxZS4uMTI5NDAx
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJHcmFwaGljc0xheWVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmgKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3Qo
Y29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBzZXRDb250ZW50c05lZWRzRGlzcGxheSgpOwot
ICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOworICAgIHZpcnR1YWwgdm9p
ZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2aXJ0dWFsIHZv
aWQgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiAKICAgICBXZWJLaXQ6
OldlYkxheWVySUQgaWQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAppbmRleCBkYTQyYWU2Li4wMzFjM2ZhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3Qu
Y3BwCkBAIC0zNCw2ICszNCwxMCBAQAogI2VuZGlmCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFFU
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaW5jbHVkZSAicXQvTGF5ZXJUcmVlSG9zdFF0Lmgi
CisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewpAQCAtNDQsNiArNDgsOCBAQCBQYXNzUmVmUHRyPExheWVyVHJlZUhvc3Q+IExheWVyVHJlZUhv
c3Q6OmNyZWF0ZShXZWJQYWdlKiB3ZWJQYWdlKQogICAgIHJldHVybiBMYXllclRyZWVIb3N0Q0FN
YWM6OmNyZWF0ZSh3ZWJQYWdlKTsKICNlbGlmIFBMQVRGT1JNKFdJTikgJiYgSEFWRShXS1FDQSkK
ICAgICByZXR1cm4gTGF5ZXJUcmVlSG9zdENBV2luOjpjcmVhdGUod2ViUGFnZSk7CisjZWxpZiBQ
TEFURk9STShRVCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIHJldHVybiBMYXllclRyZWVI
b3N0UXQ6OmNyZWF0ZSh3ZWJQYWdlKTsKICNlbHNlCiAgICAgcmV0dXJuIDA7CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVI
b3N0UXQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJl
ZUhvc3RRdC5jcHAKaW5kZXggNTc4YWUwOC4uMmZjZjJjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAKQEAg
LTI1LDggKzI1LDI3OSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RRdC5oIgor
CisjaW5jbHVkZSAiRHJhd2luZ0FyZWFJbXBsLmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFNZXNz
YWdlcy5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgorI2luY2x1ZGUgIldl
YkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NSZWZQdHI8TGF5ZXJU
cmVlSG9zdFF0PiBMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZShXZWJQYWdlKiB3ZWJQYWdlKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJUcmVlSG9zdFF0KHdlYlBhZ2UpKTsKK30KKwor
TGF5ZXJUcmVlSG9zdFF0Ojp+TGF5ZXJUcmVlSG9zdFF0KCkKK3sKK30KKworTGF5ZXJUcmVlSG9z
dFF0OjpMYXllclRyZWVIb3N0UXQoV2ViUGFnZSogd2ViUGFnZSkKKyAgICA6IExheWVyVHJlZUhv
c3Qod2ViUGFnZSkKKyAgICAsIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKGZhbHNl
KQorICAgICwgbV9pc1ZhbGlkKHRydWUpCisgICAgLCBtX2xheWVyRmx1c2hUaW1lcih0aGlzLCAm
TGF5ZXJUcmVlSG9zdFF0OjpsYXllckZsdXNoVGltZXJGaXJlZCkKKyAgICAsIG1fbGF5ZXJGbHVz
aFNjaGVkdWxpbmdFbmFibGVkKHRydWUpCit7CisgICAgLy8gQ3JlYXRlIGEgcm9vdCBsYXllci4K
KyAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyNpZm5kZWYg
TkRFQlVHCisgICAgbV9yb290TGF5ZXItPnNldE5hbWUoIkxheWVyVHJlZUhvc3RRdCByb290IGxh
eWVyIik7CisjZW5kaWYKKyAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsK
KyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisgICAgbV9sYXll
clRyZWVDb250ZXh0LndlYkxheWVySUQgPSB0b1dlYkdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIu
Z2V0KCkpLT5pZCgpOworCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyID0gR3JhcGhp
Y3NMYXllcjo6Y3JlYXRlKHRoaXMpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX25vbkNvbXBvc2l0
ZWRDb250ZW50TGF5ZXItPnNldE5hbWUoIkxheWVyVHJlZUhvc3RRdCBub24tY29tcG9zaXRlZCBj
b250ZW50Iik7CisjZW5kaWYKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldERy
YXdzQ29udGVudCh0cnVlKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldENv
bnRlbnRzT3BhcXVlKG1fd2ViUGFnZS0+ZHJhd3NCYWNrZ3JvdW5kKCkgJiYgIW1fd2ViUGFnZS0+
ZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoKSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKworICAgIG1fcm9vdExheWVyLT5h
ZGRDaGlsZChtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpOworCisgICAgaWYgKG1f
d2ViUGFnZS0+aGFzUGFnZU92ZXJsYXkoKSkKKyAgICAgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXll
cigpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dFF0OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCBsYXllckZsdXNoaW5nRW5h
YmxlZCkKK3sKKyAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPT0gbGF5ZXJG
bHVzaGluZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGF5ZXJGbHVzaFNjaGVk
dWxpbmdFbmFibGVkID0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQ7CisKKyAgICBpZiAobV9sYXllckZs
dXNoU2NoZWR1bGluZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGNhbmNlbFBlbmRp
bmdMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzY2hlZHVsZUxheWVy
Rmx1c2goKQoreworICAgIGlmICghbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghbV9sYXllckZsdXNoVGltZXIuaXNBY3RpdmUoKSkKKyAg
ICAgICAgbV9sYXllckZsdXNoVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIExheWVy
VHJlZUhvc3RRdDo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKQoreworICAgIG1fbGF5ZXJGbHVz
aFRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFNob3VsZE5vdGlm
eUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCBub3RpZnlBZnRlclNjaGVkdWxlZExh
eWVyRmx1c2gpCit7CisgICAgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2ggPSBub3Rp
ZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpz
ZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xh
eWVyKQoreworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+cmVtb3ZlQWxsQ2hpbGRy
ZW4oKTsKKworICAgIC8vIEFkZCB0aGUgYWNjZWxlcmF0ZWQgbGF5ZXIgdHJlZSBoaWVyYXJjaHku
CisgICAgaWYgKGdyYXBoaWNzTGF5ZXIpCisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllci0+YWRkQ2hpbGQoZ3JhcGhpY3NMYXllcik7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0
OjppbnZhbGlkYXRlKCkKK3sKKyAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworCisgICAg
QVNTRVJUKG1faXNWYWxpZCk7CisgICAgbV9yb290TGF5ZXIgPSBudWxscHRyOworICAgIG1faXNW
YWxpZCA9IGZhbHNlOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0Tm9uQ29tcG9zaXRl
ZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAg
ICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0
KTsKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQorICAgICAgICBtX3BhZ2VPdmVybGF5TGF5
ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVz
aCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRl
bnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNjcm9sbE9mZnNldCkKK3sKKyAgICBzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVk
RGlzcGxheShzY3JvbGxSZWN0KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmZvcmNlUmVw
YWludCgpCit7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
SG9zdFF0OjpzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpCit7
CisgICAgbV9yb290TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICAvLyBJZiB0aGUgbmV3
U2l6ZSBleHBvc2VzIG5ldyBhcmVhcyBvZiB0aGUgbm9uLWNvbXBvc2l0ZWQgY29udGVudCBhIHNl
dE5lZWRzRGlzcGxheSBpcyBuZWVkZWQKKyAgICAvLyBmb3IgdGhvc2UgbmV3bHkgZXhwb3NlZCBh
cmVhcy4KKyAgICBGbG9hdFNpemUgb2xkU2l6ZSA9IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXll
ci0+c2l6ZSgpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShuZXdT
aXplKTsKKworICAgIGlmIChuZXdTaXplLndpZHRoKCkgPiBvbGRTaXplLndpZHRoKCkpIHsKKyAg
ICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5ld1NpemUu
aGVpZ2h0KCkpLCBvbGRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29u
dGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KG9sZFNpemUud2lkdGgo
KSwgMCwgbmV3U2l6ZS53aWR0aCgpIC0gb2xkU2l6ZS53aWR0aCgpLCBoZWlnaHQpKTsKKyAgICB9
CisKKyAgICBpZiAobmV3U2l6ZS5oZWlnaHQoKSA+IG9sZFNpemUuaGVpZ2h0KCkpCisgICAgICAg
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0
UmVjdCgwLCBvbGRTaXplLmhlaWdodCgpLCBuZXdTaXplLndpZHRoKCksIG5ld1NpemUuaGVpZ2h0
KCkgLSBvbGRTaXplLmhlaWdodCgpKSk7CisKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQor
ICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICBzY2hl
ZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmRpZEluc3RhbGxQ
YWdlT3ZlcmxheSgpCit7CisgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOworICAgIHNjaGVk
dWxlTGF5ZXJGbHVzaCgpOworCit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpkaWRVbmluc3Rh
bGxQYWdlT3ZlcmxheSgpCit7CisgICAgZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICBz
Y2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFBhZ2VP
dmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAg
QVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRO
ZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisK
K2Jvb2wgTGF5ZXJUcmVlSG9zdFF0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKQoreworICAg
IG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAg
ICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhp
c0xheWVyT25seSgpOworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCisgICAgICAgIG1fcGFn
ZU92ZXJsYXlMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisK
KyAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5z
eW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworfQorCisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdFF0OjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpCit7CisgICAgbV93ZWJQ
YWdlLT5sYXlvdXRJZk5lZWRlZCgpOworCisgICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCkgeworICAg
ICAgICAvLyBMZXQgdGhlIGRyYXdpbmcgYXJlYSBrbm93IHRoYXQgd2UndmUgZG9uZSBhIGZsdXNo
IG9mIHRoZSBsYXllciBjaGFuZ2VzLgorICAgICAgICBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYUlt
cGwqPihtX3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCkpLT5sYXllckhvc3REaWRGbHVzaExheWVycygp
OworICAgICAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOworICAg
IH0KKworICAgIFdlYkdyYXBoaWNzTGF5ZXI6OnNlbmRMYXllcnNUb1VJUHJvY2VzcyhtX3Jvb3RM
YXllci5nZXQoKSwgbV93ZWJQYWdlKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmxheWVy
Rmx1c2hUaW1lckZpcmVkKFRpbWVyPExheWVyVHJlZUhvc3RRdD4qKQoreworICAgIHBlcmZvcm1T
Y2hlZHVsZWRMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpjcmVhdGVQ
YWdlT3ZlcmxheUxheWVyKCkKK3sKKyAgICBBU1NFUlQoIW1fcGFnZU92ZXJsYXlMYXllcik7CisK
KyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7Cisj
aWZuZGVmIE5ERUJVRworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVl
SG9zdFF0IHBhZ2Ugb3ZlcmxheSBjb250ZW50Iik7CisjZW5kaWYKKworICAgIG1fcGFnZU92ZXJs
YXlMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+
c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisKKyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQo
bV9wYWdlT3ZlcmxheUxheWVyLmdldCgpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmRl
c3Ryb3lQYWdlT3ZlcmxheUxheWVyKCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVy
KTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBtX3Bh
Z2VPdmVybGF5TGF5ZXIgPSBudWxscHRyOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6bm90
aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91Ymxl
IHRpbWUpCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpub3RpZnlTeW5jUmVxdWlyZWQo
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dFF0OjpwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNz
TGF5ZXIsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xp
cFJlY3QpCit7CisgICAgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyKSB7CisgICAgICAgIG1fd2ViUGFnZS0+ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0LCBj
bGlwUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ3JhcGhpY3NMYXll
ciA9PSBtX3BhZ2VPdmVybGF5TGF5ZXIpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5kcmF3UGFnZU92
ZXJsYXkoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdFF0OjpzaG93RGVidWdCb3JkZXJzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5zaG93RGVidWdC
b3JkZXJzKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdFF0OjpzaG93UmVwYWludENvdW50ZXIo
KSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkt
PnNob3dSZXBhaW50Q291bnRlcigpOworfQorCitib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorI2Vsc2UKICNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCiAKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogYm9vbCBMYXll
clRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKQpAQCAtMzUsMyArMzA2
LDQgQEAgYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmco
KQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAKaW5kZXggZGVlMmNhNy4uMDUz
M2EyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNz
TWFpblF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NN
YWluUXQuY3BwCkBAIC00Miw2ICs0MiwxMCBAQAogI2luY2x1ZGUgPE1Db21wb25lbnREYXRhPgog
I2VuZGlmCiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaW5jbHVkZSAiV2Vi
R3JhcGhpY3NMYXllci5oIgorI2VuZGlmCisKICNpZm5kZWYgTkRFQlVHCiAjaWYgIU9TKFdJTkRP
V1MpCiAjaW5jbHVkZSA8dW5pc3RkLmg+CkBAIC0xNjYsNiArMTcwLDEwIEBAIFFfREVDTF9FWFBP
UlQgaW50IFdlYlByb2Nlc3NNYWluUXQoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgICAgICBy
ZXR1cm4gMTsKICAgICB9CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAg
V2ViR3JhcGhpY3NMYXllcjo6aW5pdEZhY3RvcnkoKTsKKyNlbmRpZgorCiAgICAgV2ViS2l0OjpX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5pbml0aWFsaXplKGlkZW50aWZpZXIsIFJ1bkxvb3A6Om1haW4o
KSk7CiAKICAgICBSdW5Mb29wOjpydW4oKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103853</attachid>
            <date>2011-08-12 20:27:13 -0700</date>
            <delta_ts>2011-09-27 06:08:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>48611</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjZDE3MWJkLi5kZmQwNzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTEtMDgtMTIgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbUXRdIEltcGxlbWVudCBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBvbiBX
SzIgUXQgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTY5MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRlZCBhbiBpZCBwcm9wZXJ0eSB0byBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciwgc28g
d2UgY2FuIG9wdGltaXplIG1hcCBsb29rdXAgZm9yIGl0IGluIFdlYktpdDIuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLiBUaGlzIGlzIGEgc3RlcCB0b3dhcmRzIGhhdmluZyB0ZXN0cyBpbiBMYXlv
dXRUZXN0cy9jb21wb3NpdGluZyBydW4gb24gV2ViS2l0Mi4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldElEKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjppZCk6CisKIDIwMTEtMDgtMTIgIFNh
bSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNb3ZlIGNvbXBpbGVyIHNwZWNp
ZmljIG1hY3JvcyB0byB0aGVpciBvd24gaGVhZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyLmNwcAppbmRleCAzMjBlMzE0Li42NjBlOTFkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKQEAgLTI4LDYgKzI4LDcgQEAgR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXI6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKEdyYXBoaWNzTGF5
ZXJDbGllbnQqIGNsaWUKICAgICA6IEdyYXBoaWNzTGF5ZXIoY2xpZW50KQogICAgICwgbV9ub2Rl
KGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyTm9kZSgpKSkKICAgICAsIG1fY2hhbmdlTWFzaygw
KQorICAgICwgbV9pZCgwKQogICAgICwgbV9hbmltYXRpb25TdGFydGVkVGltZXIodGhpcywgJkdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphbmltYXRpb25TdGFydGVkVGltZXJGaXJlZCkKIHsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKaW5kZXggOTQ0N2YxMS4u
Mjk2MjhkMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCkBAIC04
OSwxMSArODksMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbmltYXRpb24o
Y29uc3QgU3RyaW5nJik7CiAKICAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbm9kZS5nZXQoKTsgfQorICAgIHZvaWQgc2V0SUQodW5zaWduZWQgbG9uZyBuZXdJ
RCkgeyBtX2lkID0gbmV3SUQ7IH0KKyAgICB1bnNpZ25lZCBsb25nIGlkKCkgY29uc3QgeyByZXR1
cm4gbV9pZDsgfQogCiBwcml2YXRlOgogICAgIE93blB0cjxUZXh0dXJlTWFwcGVyTm9kZT4gbV9u
b2RlOwogICAgIGJvb2wgbV9zeW5jUXVldWVkOwogICAgIGludCBtX2NoYW5nZU1hc2s7CisgICAg
dW5zaWduZWQgbG9uZyBtX2lkOwogICAgIFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50RGF0YSBt
X3BlbmRpbmdDb250ZW50OwogICAgIFZlY3RvcjxSZWZQdHI8VGV4dHVyZU1hcHBlckFuaW1hdGlv
bj4gPiBtX2FuaW1hdGlvbnM7CiAgICAgdm9pZCBhbmltYXRpb25TdGFydGVkVGltZXJGaXJlZChU
aW1lcjxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcj4qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAzMTU0NzM1
Li5kMWE4Yzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYgQEAKKzIwMTEtMDgtMTIgIE5vJ2Ft
IFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4gYW5kIFZpYXRjaGVzbGF2IE9z
dGFwZW5rbyAgPG9zdGFwZW5rby52aWF0Y2hlc2xhdkBub2tpYS5jb20+CisKKyAgICAgICAgW1F0
XSBJbXBsZW1lbnQgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgb24gV0syIFF0IHBvcnQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2OTM1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIGFjY2VsZXJh
dGVkIGNvbXBvc2l0aW5nIGZvciBRRGVza3RvcFdlYlZpZXcuIFRoaXMgdXNlcyB0aGUgTGF5ZXJU
cmVlSG9zdCBhYnN0cmFjdGlvbiwKKyAgICAgICAgYXMgd2VsbCBhcyB0aGUgY3Jvc3MtcHJvY2Vz
cyBHcmFwaGljc0xheWVyIHNlcmlhbGl6YXRpb24uIEl0IGRvZXMgbm90IHdvcmsgd2l0aCBRVG91
Y2hXZWJWaWV3IHlldCwKKyAgICAgICAgYXMgaXQgcmVsaWVzIG9uIGltcGVyYXRpdmUgcGFpbnRp
bmcgYW5kIHNvbWUgb2YgdGhlIGlzc3VlcyB3aXRoIFFUb3VjaFdlYlZpZXcgYXJlIG5vdCB5ZXQg
bWF0ZXJpYWxpemVkLAorICAgICAgICBsaWtlIHRoZSB1c2Ugb2YgUXQgU2NlbmVHcmFwaC4KKwor
ICAgICAgICBBZnRlciB0aGlzIHBhdGNoLCB3aGVuIGluIFFEZXNrdG9wV2ViVmlldyBhbmQgY29t
cG9zaXRlZCBjb250ZW50IGlzIHJlbmRlcmVkLCB0aGUgdmlldyB3aWxsIHN3aXRjaCB0byBjb21w
b3NpdGluZworICAgICAgICBtb2RlIGZvciB0aGUgZW50aXJlIGNvbnRlbnQsIGluY2x1ZGluZyB0
aGUgIm5vbiBjb21wb3NpdGVkIiBjb250ZW50LiBUaGlzIGlzIGluIGxpbmUgd2l0aCB0aGUgU2Fm
YXJpIGltcGxlbWVudGF0aW9uCisgICAgICAgIG9mIFdlYktpdDIsIHdoaWNoIGFsc28gdXNlcyBM
YXllclRyZWVIb3N0IGluIHRoZSBzYW1lIHdheS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0
Mi9tZXNzYWdlcy5weToKKyAgICAgICAgKiBTaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oOgorICAg
ICAgICAqIFNoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcDoKKyAgICAgICAgKiBTaGFyZWQvV2Vi
TGF5ZXJUcmVlSW5mby5oOgorICAgICAgICAqIFNoYXJlZC9xdC9MYXllclRyZWVDb250ZXh0UXQu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0OjpMYXllclRyZWVDb250ZXh0
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29udGV4dDo6fkxheWVyVHJlZUNvbnRleHQp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb250ZXh0OjplbmNvZGUpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVDb250ZXh0OjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVDb250ZXh0Ojppc0VtcHR5KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0
OjpEcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6RHJh
d2luZ0FyZWFQcm94eTo6Y29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0Fy
ZWFQcm94eTo6c3luY0NvbXBvc2l0aW5nTGF5ZXJzKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2lu
Z0FyZWFQcm94eTo6dXBkYXRlQ29tcG9zaXRpbmdMYXllckNvbnRlbnQpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVh
UHJveHk6OnZpZXdwb3J0VmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJl
YVByb3h5Ojpjb250ZW50c1NjYWxlKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94
eTo6aXNCYWNraW5nU3RvcmVSZWFkeSk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVh
UHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OnBhaW50KToK
KyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVyQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1w
bC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpUaWxlZERyYXdpbmdBcmVhUHJveHk6OmNvbnRlbnRzU2NhbGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBXZWJL
aXQyLnBybzoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNz
TGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBv
c2l0aW5nU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdENvbXBvc2l0aW5nSW5mb0Zv
clRoaXNMYXllcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFw
aGljc0xheWVyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3Qu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpjcmVhdGUpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVIb3N0UXQuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3RRdDo6fkxheWVyVHJlZUhvc3RRdCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3RRdDo6TGF5ZXJUcmVlSG9zdFF0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0
OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UXQ6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3RRdDo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UXQ6OnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1
c2gpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFJvb3RDb21wb3NpdGlu
Z0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjppbnZhbGlkYXRlKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0OjpzZXROb25Db21wb3NpdGVkQ29udGVu
dHNOZWVkRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6c2Nyb2xs
Tm9uQ29tcG9zaXRlZENvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0
Ojpmb3JjZVJlcGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNpemVE
aWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OmRpZEluc3RhbGxQ
YWdlT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6ZGlkVW5pbnN0
YWxsUGFnZU92ZXJsYXkpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6OnNldFBh
Z2VPdmVybGF5TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFF0
OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0UXQ6OnBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlSG9zdFF0OjpsYXllckZsdXNoVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RRdDo6Y3JlYXRlUGFnZU92ZXJsYXlMYXllcik6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUhvc3RRdDo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVIb3N0UXQ6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVIb3N0UXQ6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUhvc3RRdDo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUhvc3RRdDo6c2hvd0RlYnVnQm9yZGVycyk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RRdDo6c2hvd1JlcGFpbnRDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzTWFpblF0KToKKwogMjAxMS0wOC0xMSAgVmlhdGNoZXNsYXYgT3N0YXBlbmtvICA8b3N0
YXBlbmtvLnZpYXRjaGVzbGF2QG5va2lhLmNvbT4KIAogICAgICAgICBWZWN0b3JBcmd1bWVudENv
ZGVyIGRvZXNuJ3QgZW5jb2RlL2RlY29kZSBlbm91Z2ggZGF0YSBmb3IgbW9yZSB0aGFuIG9uZSBi
eXRlIHZlY3RvciBlbGVtZW50cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2NyaXB0cy93
ZWJraXQyL21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3Nh
Z2VzLnB5CmluZGV4IGJlYmY4YTEuLjEzMWI4ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRz
L3dlYmtpdDIvbWVzc2FnZXMucHkKQEAgLTQ2NSw2ICs0NjUsNyBAQCBkZWYgaGVhZGVyc19mb3Jf
dHlwZSh0eXBlKToKICAgICAgICAgJ1dlYktpdDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVu
Y29kZXInOiBbXSwKICAgICAgICAgJ1dlYktpdDo6V2ViQ29udGV4dFVzZXJNZXNzYWdlRW5jb2Rl
cic6IFtdLAogICAgICAgICAnV2ViS2l0OjpXZWJHZXN0dXJlRXZlbnQnOiBbJyJXZWJFdmVudC5o
IiddLAorICAgICAgICAnV2ViS2l0OjpXZWJMYXllclVwZGF0ZUluZm8nOiBbJyJXZWJMYXllclRy
ZWVJbmZvLmgiJ10sCiAgICAgICAgICdXZWJLaXQ6OldlYktleWJvYXJkRXZlbnQnOiBbJyJXZWJF
dmVudC5oIiddLAogICAgICAgICAnV2ViS2l0OjpXZWJNb3VzZUV2ZW50JzogWyciV2ViRXZlbnQu
aCInXSwKICAgICAgICAgJ1dlYktpdDo6V2ViVG91Y2hFdmVudCc6IFsnIldlYkV2ZW50LmgiJ10s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4dC5oIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL0xheWVyVHJlZUNvbnRleHQuaAppbmRleCA4NjY3Yzk4Li4y
ZGI1ODRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTGF5ZXJUcmVlQ29udGV4
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9MYXllclRyZWVDb250ZXh0LmgKQEAgLTQ3
LDYgKzQ3LDggQEAgcHVibGljOgogICAgIHVpbnQzMl90IGNvbnRleHRJRDsKICNlbGlmIFBMQVRG
T1JNKFdJTikKICAgICBIV05EIHdpbmRvdzsKKyNlbGlmIFBMQVRGT1JNKFFUKQorICAgIHVpbnQz
Ml90IHdlYkxheWVySUQ7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJM
YXllclRyZWVJbmZvLmNwcAppbmRleCBhMDEyODU1Li42NTA4YjM1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNs
dWRlICJXZWJMYXllclRyZWVJbmZvLmgiCiAKKyNpbmNsdWRlICJBcmd1bWVudHMuaCIKICNpbmNs
dWRlICJTaGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaCBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKaW5kZXggYTBlNjhkMy4u
MWM4ZWJlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUlu
Zm8uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCkBAIC0z
Myw3ICszMyw4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotdHlwZWRlZiB1aW50MzJfdCBXZWJMYXllcklEOwordHlwZWRlZiB1bnNpZ25lZCBsb25n
IFdlYkxheWVySUQ7CitlbnVtIHsgSW52YWxpZFdlYkxheWVySUQgPSAwIH07CiAKIHN0cnVjdCBX
ZWJMYXllclVwZGF0ZUluZm8gewogICAgIFdlYkxheWVyVXBkYXRlSW5mbygpIHsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L0xheWVyVHJlZUNvbnRleHRRdC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvTGF5ZXJUcmVlQ29udGV4dFF0LmNwcAppbmRleCBmMWJm
MWI0Li5kMzdkNzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvTGF5ZXJU
cmVlQ29udGV4dFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvTGF5ZXJUcmVl
Q29udGV4dFF0LmNwcApAQCAtMjYsNDEgKzI2LDM4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgogCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKKyNpbmNsdWRlICJBcmd1bWVudEVuY29k
ZXIuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIExheWVyVHJlZUNvbnRleHQ6OkxheWVyVHJl
ZUNvbnRleHQoKQorICAgIDogd2ViTGF5ZXJJRCgwKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CiAKIExheWVyVHJlZUNvbnRleHQ6On5MYXllclRyZWVDb250ZXh0KCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwogfQogCi12b2lkIExheWVyVHJlZUNvbnRleHQ6OmVuY29kZShDb3JlSVBD
OjpBcmd1bWVudEVuY29kZXIqKSBjb25zdAordm9pZCBMYXllclRyZWVDb250ZXh0OjplbmNvZGUo
Q29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAogewotICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKHdlYkxheWVySUQpOwogfQogCi1ib29sIExh
eWVyVHJlZUNvbnRleHQ6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqLCBMYXllclRy
ZWVDb250ZXh0JikKK2Jvb2wgTGF5ZXJUcmVlQ29udGV4dDo6ZGVjb2RlKENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciogZGVjb2RlciwgTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBkZWNvZGVyLT5k
ZWNvZGUoY29udGV4dC53ZWJMYXllcklEKTsKIH0KIAogYm9vbCBMYXllclRyZWVDb250ZXh0Ojpp
c0VtcHR5KCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiAhd2ViTGF5ZXJJRDsKIH0KIAotYm9vbCBvcGVyYXRvcj09KGNvbnN0IExh
eWVyVHJlZUNvbnRleHQmLCBjb25zdCBMYXllclRyZWVDb250ZXh0JikKK2Jvb2wgb3BlcmF0b3I9
PShjb25zdCBMYXllclRyZWVDb250ZXh0JiBhLCBjb25zdCBMYXllclRyZWVDb250ZXh0JiBiKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGEu
d2ViTGF5ZXJJRCA9PSBiLndlYkxheWVySUQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCmluZGV4IGY4
NTJlMmYuLmIyMmRiYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3
aW5nQXJlYVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0Fy
ZWFQcm94eS5jcHAKQEAgLTI4LDYgKzI4LDEwIEBACiAKICNpbmNsdWRlICJXZWJQYWdlUHJveHku
aCIKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQorI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgorI2VuZGlmCisKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTUzLDQgKzU3LDI3IEBA
IHZvaWQgRHJhd2luZ0FyZWFQcm94eTo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplLCBjb25z
dCBJbnRTaXplJiBzY3JvbGxPZmZzZXQpCiAgICAgc2l6ZURpZENoYW5nZSgpOwogfQogCisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCit2b2lk
IERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZVdlYlZpZXcoKQoreworICAgIG1fd2ViUGFnZVByb3h5
LT5zZXRWaWV3TmVlZHNEaXNwbGF5KHZpZXdwb3J0VmlzaWJsZVJlY3QoKSk7Cit9CisKK1dlYkNv
cmU6OkludFJlY3QgRHJhd2luZ0FyZWFQcm94eTo6Y29udGVudHNSZWN0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gSW50UmVjdChJbnRQb2ludDo6emVybygpLCBtX3dlYlBhZ2VQcm94eS0+dmlld1Np
emUoKSk7Cit9CisKK3ZvaWQgRHJhd2luZ0FyZWFQcm94eTo6c3luY0NvbXBvc2l0aW5nTGF5ZXJz
KGNvbnN0IFdlYkxheWVyVHJlZUluZm8mIGluZm8pCit7CisgICAgbV9sYXllclRyZWVIb3N0UHJv
eHktPnN5bmNDb21wb3NpdGluZ0xheWVycyhpbmZvKTsKK30KKwordm9pZCBEcmF3aW5nQXJlYVBy
b3h5Ojp1cGRhdGVDb21wb3NpdGluZ0xheWVyQ29udGVudChjb25zdCBXZWJMYXllclVwZGF0ZUlu
Zm8mIGluZm8pCit7CisgICAgbV9sYXllclRyZWVIb3N0UHJveHktPnVwZGF0ZUNvbXBvc2l0aW5n
TGF5ZXJDb250ZW50KGluZm8pOworfQorCisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaAppbmRleCAyYTFl
YTVkLi5hZWE5ZDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2lu
Z0FyZWFQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVBy
b3h5LmgKQEAgLTI4LDggKzI4LDkgQEAKICNkZWZpbmUgRHJhd2luZ0FyZWFQcm94eV9oCiAKICNp
bmNsdWRlICJEcmF3aW5nQXJlYUluZm8uaCIKLSNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNpbmNs
dWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogI2lmIFBMQVRG
T1JNKFFUKQpAQCAtNDQsMTQgKzQ1LDEzIEBAIG5hbWVzcGFjZSBDb3JlSVBDIHsKICAgICBjbGFz
cyBNZXNzYWdlSUQ7CiB9CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBJbnRSZWN0
OwotfQotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTGF5ZXJUcmVlQ29udGV4dDsKK2Ns
YXNzIExheWVyVHJlZUhvc3RQcm94eTsKIGNsYXNzIFVwZGF0ZUluZm87CitjbGFzcyBXZWJMYXll
clRyZWVJbmZvOworY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOwogY2xhc3MgV2ViUGFnZVByb3h5
OwogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtOTAsNiArOTAsMTUgQEAgcHVibGljOgogICAgIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KICAg
ICB2b2lkIHNldFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNjcm9sbE9mZnNldCk7CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
ICYmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlV2ViVmlldygp
OworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB2aWV3cG9ydFZpc2libGVSZWN0KCkgY29u
c3QgeyByZXR1cm4gY29udGVudHNSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJl
Y3QgY29udGVudHNSZWN0KCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBjb250ZW50c1NjYWxl
KCkgY29uc3QgeyByZXR1cm4gMS4wOyB9CisgICAgdmlydHVhbCBib29sIGlzQmFja2luZ1N0b3Jl
UmVhZHkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHN5bmNDb21w
b3NpdGluZ0xheWVycyhjb25zdCBXZWJMYXllclRyZWVJbmZvJik7CisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJDb250ZW50KGNvbnN0IFdlYkxheWVyVXBkYXRlSW5mbyYp
OworI2VuZGlmCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgRHJhd2luZ0FyZWFQcm94eShEcmF3
aW5nQXJlYVR5cGUsIFdlYlBhZ2VQcm94eSopOwogCkBAIC05OSw2ICsxMDgsMTAgQEAgcHJvdGVj
dGVkOgogICAgIFdlYkNvcmU6OkludFNpemUgbV9zaXplOwogICAgIFdlYkNvcmU6OkludFNpemUg
bV9zY3JvbGxPZmZzZXQ7CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVT
RShURVhUVVJFX01BUFBFUikKKyAgICBPd25QdHI8TGF5ZXJUcmVlSG9zdFByb3h5PiBtX2xheWVy
VHJlZUhvc3RQcm94eTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIC8vIENvcmVJUEMgbWVzc2Fn
ZSBoYW5kbGVycy4KICAgICAvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIHB1cmUgdmlydHVhbC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkubWVz
c2FnZXMuaW4KaW5kZXggZTExMmFkNi4uMmU3NjE2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4KQEAgLTI3LDYgKzI3
LDEwIEBAIG1lc3NhZ2VzIC0+IERyYXdpbmdBcmVhUHJveHkgewogICAgIEVudGVyQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgV2ViS2l0OjpM
YXllclRyZWVDb250ZXh0IGNvbnRleHQpCiAgICAgRXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIFdlYktpdDo6VXBkYXRlSW5mbyB1cGRh
dGVJbmZvKQogI2VuZGlmCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0Uo
VEVYVFVSRV9NQVBQRVIpCisgICAgU3luY0NvbXBvc2l0aW5nTGF5ZXJzKFdlYktpdDo6V2ViTGF5
ZXJUcmVlSW5mbyBsYXllclRyZWVJbmZvKQorICAgIFVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJDb250
ZW50KFdlYktpdDo6V2ViTGF5ZXJVcGRhdGVJbmZvIGxheWVyVXBkYXRlSW5mbykKKyNlbmRpZgog
I2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogICAgIEludmFsaWRhdGUoV2ViQ29yZTo6
SW50UmVjdCBkaXJ0eVJlY3QpCiAgICAgRGlkU2V0U2l6ZShXZWJDb3JlOjpJbnRTaXplIHZpZXdT
aXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHlJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1w
bC5jcHAKaW5kZXggMzUyZmIxZC4uYmU4ZDJjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCkBAIC0zNCw2ICszNCwxMCBAQAogI2lu
Y2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaW9uLmg+CiAK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikK
KyNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHkuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC02Nyw4ICs3MSwxMyBAQCB2b2lk
IERyYXdpbmdBcmVhUHJveHlJbXBsOjpwYWludChCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQsCiB7CiAgICAgdW5wYWludGVkUmVnaW9uID0gcmVjdDsKIAotICAg
IGlmIChpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSkKKyAgICBpZiAoaXNJbkFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpIHsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdFBy
b3h5KQorICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHktPnBhaW50KGNvbnRleHQsIHJl
Y3QsIHVucGFpbnRlZFJlZ2lvbik7CisjZW5kaWYKICAgICAgICAgcmV0dXJuOworICAgIH0KIAog
ICAgIEFTU0VSVChtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEIDw9IG1fbmV4dEJhY2tpbmdT
dG9yZVN0YXRlSUQpOwogICAgIGlmIChtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEIDwgbV9u
ZXh0QmFja2luZ1N0b3JlU3RhdGVJRCkgewpAQCAtMzI5LDYgKzMzOCwxMCBAQCB2b2lkIERyYXdp
bmdBcmVhUHJveHlJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExh
eWVyVHJlZUNvbnRleAogICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAgICBtX2xheWVy
VHJlZUNvbnRleHQgPSBsYXllclRyZWVDb250ZXh0OwogICAgIG1fd2ViUGFnZVByb3h5LT5lbnRl
ckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGxheWVyVHJlZUNvbnRleHQpOworI2lmIFVTRShU
RVhUVVJFX01BUFBFUikKKyAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdFByb3h5KQorICAgICAgICBt
X2xheWVyVHJlZUhvc3RQcm94eSA9IGFkb3B0UHRyKG5ldyBMYXllclRyZWVIb3N0UHJveHkodGhp
cykpOworI2VuZGlmCiB9CiAKIHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmV4aXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3
aW5nQXJlYVByb3h5SW1wbC5oCmluZGV4IDNjZjVmOTEuLjQ5YWNjYjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCkBAIC0zOSw2ICszOSw4
IEBAIGNsYXNzIFJlZ2lvbjsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIExheWVyVHJl
ZUhvc3RQcm94eTsKKwogY2xhc3MgRHJhd2luZ0FyZWFQcm94eUltcGwgOiBwdWJsaWMgRHJhd2lu
Z0FyZWFQcm94eSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8RHJhd2luZ0FyZWFQ
cm94eUltcGw+IGNyZWF0ZShXZWJQYWdlUHJveHkqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5hZjNkM2E0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0xheWVyVHJlZUhvc3RQcm94eS5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyov
CisKKyNpZm5kZWYgTGF5ZXJUcmVlSG9zdFByb3h5X2gKKyNkZWZpbmUgTGF5ZXJUcmVlSG9zdFBy
b3h5X2gKKworI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVh
UHJveHkuaCIKKyNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJSdW5Mb29wLmgiCisjaW5j
bHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250
ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KKworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkxh
eWVyVHJlZUluZm87CitjbGFzcyBXZWJMYXllclVwZGF0ZUluZm87CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCitjbGFzcyBMYXllclRyZWVIb3N0UHJveHkgOiBwdWJsaWMgR3JhcGhpY3NM
YXllckNsaWVudCB7CitwdWJsaWM6CisgICAgTGF5ZXJUcmVlSG9zdFByb3h5KERyYXdpbmdBcmVh
UHJveHkqKTsKKyAgICB2aXJ0dWFsIH5MYXllclRyZWVIb3N0UHJveHkoKSB7IH0KKyAgICB2b2lk
IHN5bmNDb21wb3NpdGluZ0xheWVycyhjb25zdCBXZWJMYXllclRyZWVJbmZvJik7CisgICAgdm9p
ZCB1cGRhdGVDb21wb3NpdGluZ0xheWVyQ29udGVudChjb25zdCBXZWJMYXllclVwZGF0ZUluZm8m
KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3Jl
SVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworICAgIHZvaWQgcGFp
bnQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYsIFJlZ2lvbiYpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCB1cGRhdGVXZWJWaWV3
KCk7CisKKyAgICBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUxheWVyKFdlYkxheWVy
SUQpOworCisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJCeUlEKFdlYkxheWVySUQgaWQpIHsgcmV0
dXJuIChpZCA9PSBJbnZhbGlkV2ViTGF5ZXJJRCkgPyAwIDogbV9sYXllcnMuZ2V0KGlkKS5sYXll
cjsgfQorICAgIEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVy
LmdldCgpOyB9CisKKyAgICB2b2lkIHN5bmNEZWxldGVkTGF5ZXJzKCk7CisgICAgdmlydHVhbCB2
b2lkIHBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYs
IEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVh
bCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGRvdWJs
ZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBHcmFwaGlj
c0xheWVyKikgeyB9CisgICAgdmlydHVhbCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgUnVuTG9vcDo6VGltZXI8TGF5ZXJUcmVlSG9z
dFByb3h5PiBtX2FuaW1hdGlvblRpbWVyOworICAgIERyYXdpbmdBcmVhUHJveHkqIG1fZHJhd2lu
Z0FyZWFQcm94eTsKKworICAgIHN0cnVjdCBMYXllckRhdGEgeworICAgICAgICBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKiBsYXllcjsKKyAgICAgICAgUUltYWdlIGltYWdlOworICAgICAgICBMYXll
ckRhdGEoKSA6IGxheWVyKDApIHsgfQorICAgIH07CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8V2Vi
TGF5ZXJJRCwgTGF5ZXJEYXRhPiBMYXllck1hcDsKKyAgICBmbG9hdCBtX2NvbnRlbnRTY2FsZTsK
KworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBPd25QdHI8VGV4dHVyZU1hcHBlcj4gbV90
ZXh0dXJlTWFwcGVyOworI2VuZGlmCisKKyAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9yb290
TGF5ZXI7CisgICAgVmVjdG9yPFdlYkxheWVySUQ+IG1fbGF5ZXJzVG9EZWxldGU7CisKKyAgICBM
YXllck1hcCBtX2xheWVyczsKKyAgICBXZWJMYXllcklEIG1fcm9vdExheWVySUQ7Cit9OworCit9
CisKKyNlbmRpZiAvLyBMYXllclRyZWVIb3N0UHJveHlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcAppbmRleCAxZmE4MDZiLi4zNDYy
ZDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJl
YVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJl
YVByb3h5LmNwcApAQCAtNjU5LDYgKzY1OSwxMSBAQCBib29sIFRpbGVkRHJhd2luZ0FyZWFQcm94
eTo6aGFzUGVuZGluZ1VwZGF0ZXMoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorZmxv
YXQgVGlsZWREcmF3aW5nQXJlYVByb3h5Ojpjb250ZW50c1NjYWxlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9jdXJyZW50VGlsZVNldC0+Y29udGVudHNTY2FsZSgpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGls
ZWREcmF3aW5nQXJlYVByb3h5LmgKaW5kZXggZjllOGQ5NC4uMDBhNzM0ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RpbGVkRHJhd2luZ0FyZWFQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UaWxlZERyYXdpbmdBcmVhUHJveHkuaApAQCAtNzQsNiAr
NzQsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdChjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgdm9pZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0KTsKKyAg
ICBmbG9hdCBjb250ZW50c1NjYWxlKCkgY29uc3Q7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaENvbXBvc2l0aW5nQ29udGV4dCh1aW50
MzJfdCAvKiBjb250ZXh0SUQgKi8pIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMWQzZGRlNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKQEAgLTAsMCArMSwyNzEgQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHkuaCIKKworI2lu
Y2x1ZGUgIkRyYXdpbmdBcmVhTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5
TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJNZXNzYWdlSUQuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVC
aXRtYXAuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUXQuaCIKKyNpbmNsdWRlICJXZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJ0ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuaCIKKyNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgInRl
eG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIgorI2luY2x1ZGUgPFFEYXRlVGltZT4KKyNpbmNsdWRl
IDxRdERlYnVnPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFzc093blB0cjxHcmFwaGljc0xh
eWVyPiBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkK
K3sKKyAgICBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogbmV3TGF5ZXIgPSBuZXcgR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIodGhpcyk7CisgICAgbmV3TGF5ZXItPnNldElEKGxheWVySUQp
OworICAgIHJldHVybiBhZG9wdFB0cihuZXdMYXllcik7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dFByb3h5OjpzeW5jRGVsZXRlZExheWVycygpCit7CisgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGVu
ZEl0ZXJhdG9yID0gbV9sYXllcnMuZW5kKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2xheWVyc1RvRGVsZXRlLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYkxheWVySUQgaWQgPSBt
X2xheWVyc1RvRGVsZXRlW2ldOworICAgICAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xh
eWVycy5maW5kKGlkKTsKKworICAgICAgICAvLyBUaGlzIG1pZ2h0IGhhcHBlbiBpZiB0aGUgd2Vi
IHByb2Nlc3MgZGVsZXRlcyB0aGUgbGF5ZXIgYWZ0ZXIgdGhlIFVJIHByb2Nlc3MgYWxyZWFkeSBj
bGVhcmVkIHRoZSBsYXllcnMgaGVyZS4KKyAgICAgICAgaWYgKGl0ID09IGVuZEl0ZXJhdG9yKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGRlbGV0ZSBpdC0+c2Vjb25kLmxheWVyOwor
ICAgICAgICBtX2xheWVycy5yZW1vdmUoaXQpOworICAgIH0KK30KKwordm9pZCBMYXllclRyZWVI
b3N0UHJveHk6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciogbGF5ZXIsIEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IElu
dFJlY3QmIGluQ2xpcCkKK3sKKyAgICBXZWJMYXllcklEIGlkID0gV2ViTGF5ZXJJRChzdGF0aWNf
Y2FzdDxjb25zdCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcio+KGxheWVyKS0+aWQoKSk7Cisg
ICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmluZChpZCk7CisgICAgaWYgKGl0
ID09IG1fbGF5ZXJzLmVuZCgpKQorICAgICAgICByZXR1cm47CisgICAgTGF5ZXJEYXRhJiBkYXRh
ID0gaXQtPnNlY29uZDsKKyAgICBJbnRSZWN0IGNsaXAoaW5DbGlwKTsKKyAgICBjbGlwLmludGVy
c2VjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIGRhdGEuaW1hZ2Uuc2l6ZSgpKSk7CisgICAg
UVBhaW50ZXIqIHBhaW50ZXIgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworICAgIHBhaW50
ZXItPnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7
CisgICAgcGFpbnRlci0+ZHJhd0ltYWdlKGNsaXAsIGRhdGEuaW1hZ2UsIGNsaXApOworfQorCitM
YXllclRyZWVIb3N0UHJveHk6OkxheWVyVHJlZUhvc3RQcm94eShEcmF3aW5nQXJlYVByb3h5KiBk
cmF3aW5nQXJlYVByb3h5KQorICAgIDogbV9hbmltYXRpb25UaW1lcihSdW5Mb29wOjptYWluKCks
IHRoaXMsICZMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVdlYlZpZXcpCisgICAgLCBtX2RyYXdp
bmdBcmVhUHJveHkoZHJhd2luZ0FyZWFQcm94eSkKK3sKKyAgICBtX3Jvb3RMYXllciA9IGNyZWF0
ZUxheWVyKEludmFsaWRXZWJMYXllcklEKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0TWFza3NUb0Jv
dW5kcyhmYWxzZSk7CisgICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7Cisg
ICAgbV9yb290TGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgwLCAwLCAwKSk7CisK
KyAgICAvLyBUaGUgcm9vdCBsYXllciBzaG91bGQgbm90IGhhdmUgemVybyBzaXplLCBvciBpdCB3
b3VsZCBiZSBvcHRpbWl6ZWQgb3V0LgorICAgIG1fcm9vdExheWVyLT5zZXRTaXplKEZsb2F0U2l6
ZSgxLjAsIDEuMCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c3luY0NvbXBvc2l0
aW5nTGF5ZXJzKGNvbnN0IFdlYkxheWVyVHJlZUluZm8mIGluZm8pCit7CisgICAgbV9jb250ZW50
U2NhbGUgPSBpbmZvLmNvbnRlbnRTY2FsZTsKKyAgICBtX2xheWVyc1RvRGVsZXRlLmFwcGVuZChp
bmZvLmRlbGV0ZWRMYXllcklEcyk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZm8u
bGF5ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFdlYkxheWVySUQgaWQgPSBpbmZv
LmxheWVyc1tpXS5pZDsKKworICAgICAgICBpZiAobV9sYXllcnMuY29udGFpbnMoaWQpKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgTGF5ZXJEYXRhIGRhdGE7CisKKyAgICAgICAg
Ly8gV2UgaGF2ZSB0byBsZWFrIHRoZSBsYXllciBhbmQgbWFuYWdlIGl0IG91cnNlbHZlcywgc2lu
Y2UgdGhpcyBpcyBhIEhhc2hNYXAgYW5kIE93blB0ciBpcyBub3QgY29weWFibGUuCisgICAgICAg
IGRhdGEubGF5ZXIgPSBjcmVhdGVMYXllcihpZCkubGVha1B0cigpOworICAgICAgICBtX2xheWVy
cy5hZGQoaWQsIGRhdGEpOworCisgICAgICAgIGlmIChpZCAhPSBpbmZvLnJvb3RMYXllcklEKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgbV9yb290TGF5ZXItPnJlbW92ZUFsbENo
aWxkcmVuKCk7CisgICAgICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChkYXRhLmxheWVyKTsKKyAg
ICB9CisKKyAgICBpZiAoaW5mby5yb290TGF5ZXJJRCAhPSBtX3Jvb3RMYXllcklEKSB7CisgICAg
ICAgIG1fcm9vdExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOworICAgICAgICBtX3Jvb3RMYXll
cklEID0gaW5mby5yb290TGF5ZXJJRDsKKyAgICAgICAgaWYgKG1fcm9vdExheWVySUQpIHsKKyAg
ICAgICAgICAgIExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZpbmQoaW5mby5yb290
TGF5ZXJJRCk7CisgICAgICAgICAgICBpZiAoaXQgIT0gbV9sYXllcnMuZW5kKCkpCisgICAgICAg
ICAgICAgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKGl0LT5zZWNvbmQubGF5ZXIpOworICAgICAg
ICB9CisgICAgfQorCisgICAgZm9yIChzaXplX3QgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXgg
PCBpbmZvLmxheWVycy5zaXplKCk7ICsrbGF5ZXJJbmRleCkgeworICAgICAgICBjb25zdCBXZWJM
YXllckluZm8mIGxheWVySW5mbyA9IGluZm8ubGF5ZXJzW2xheWVySW5kZXhdOworICAgICAgICBX
ZWJMYXllcklEIGlkID0gbGF5ZXJJbmZvLmlkOworCisgICAgICAgIExheWVyTWFwOjppdGVyYXRv
ciBpdCA9IG1fbGF5ZXJzLmZpbmQoaWQpOworICAgICAgICBpZiAoaXQgPT0gbV9sYXllcnMuZW5k
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBMYXllckRhdGEmIGRhdGEgPSBp
dC0+c2Vjb25kOworICAgICAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGRhdGEubGF5ZXI7CisK
KyAgICAgICAgbGF5ZXItPnNldE5hbWUobGF5ZXJJbmZvLm5hbWUpOworCisgICAgICAgIC8vIFdl
IGhhdmUgYSBjb250YWluZXIgbGF5ZXIgYXMgYSBwYXJlbnQgdG8gdGhlIHJvb3QgbGF5ZXIsIHNv
IHdlIHNob3VsZG4ndCBwYXJlbnQgaXQgdG8gdGhlIHdlYiBwcm9jZXNzIHZhbHVlLgorICAgICAg
ICBpZiAoaWQgIT0gaW5mby5yb290TGF5ZXJJRCkKKyAgICAgICAgICAgIGxheWVyLT5zZXRQYXJl
bnQobGF5ZXJCeUlEKGxheWVySW5mby5wYXJlbnQpKTsKKyAgICAgICAgbGF5ZXItPnNldFJlcGxp
Y2F0ZWRCeUxheWVyKGxheWVyQnlJRChsYXllckluZm8ucmVwbGljYSkpOworICAgICAgICBsYXll
ci0+c2V0TWFza0xheWVyKGxheWVyQnlJRChsYXllckluZm8ubWFzaykpOworCisgICAgICAgIGxh
eWVyLT5zZXRQb3NpdGlvbihsYXllckluZm8ucG9zKTsKKyAgICAgICAgbGF5ZXItPnNldFNpemUo
bGF5ZXJJbmZvLnNpemUpOworICAgICAgICBsYXllci0+c2V0VHJhbnNmb3JtKGxheWVySW5mby50
cmFuc2Zvcm0pOworICAgICAgICBsYXllci0+c2V0QW5jaG9yUG9pbnQobGF5ZXJJbmZvLmFuY2hv
clBvaW50KTsKKyAgICAgICAgbGF5ZXItPnNldENoaWxkcmVuVHJhbnNmb3JtKGxheWVySW5mby5j
aGlsZHJlblRyYW5zZm9ybSk7CisgICAgICAgIGxheWVyLT5zZXRCYWNrZmFjZVZpc2liaWxpdHko
bGF5ZXJJbmZvLmJhY2tmYWNlVmlzaWJsZSk7CisgICAgICAgIGxheWVyLT5zZXRDb250ZW50c09w
YXF1ZShsYXllckluZm8uY29udGVudHNPcGFxdWUpOworICAgICAgICBsYXllci0+c2V0Q29udGVu
dHNSZWN0KGxheWVySW5mby5jb250ZW50c1JlY3QpOworICAgICAgICBsYXllci0+c2V0RHJhd3ND
b250ZW50KGxheWVySW5mby5kcmF3c0NvbnRlbnQpOworCisgICAgICAgIC8vIE5ldmVyIG1ha2Ug
dGhlIHJvb3QgbGF5ZXIgY2xpcC4KKyAgICAgICAgbGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMoaWQg
PT0gaW5mby5yb290TGF5ZXJJRCA/IGZhbHNlIDogbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMpOwor
ICAgICAgICBsYXllci0+c2V0T3BhY2l0eShsYXllckluZm8ub3BhY2l0eSk7CisgICAgICAgIGxh
eWVyLT5zZXRQcmVzZXJ2ZXMzRChsYXllckluZm8ucHJlc2VydmVzM0QpOworICAgICAgICBWZWN0
b3I8R3JhcGhpY3NMYXllcio+IGNoaWxkcmVuOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGF5ZXJJbmZvLmNoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAo
R3JhcGhpY3NMYXllciogY2hpbGQgPSBsYXllckJ5SUQobGF5ZXJJbmZvLmNoaWxkcmVuW2ldKSkK
KyAgICAgICAgICAgICAgICBjaGlsZHJlbi5hcHBlbmQoY2hpbGQpOworICAgICAgICB9CisgICAg
ICAgIGxheWVyLT5zZXRDaGlsZHJlbihjaGlsZHJlbik7CisKKyAgICAgICAgaWYgKGxheWVySW5m
by5pbWFnZUJhY2tpbmdTdG9yZSkgeworICAgICAgICAgICAgbGF5ZXItPnNldENvbnRlbnRzVG9J
bWFnZShsYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmUtPmNyZWF0ZUltYWdlKCkuZ2V0KCkpOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBsYXllci0+c2V0Q29u
dGVudHNUb0ltYWdlKDApOworCisgICAgICAgIGlmICghbGF5ZXJJbmZvLmRyYXdzQ29udGVudCkg
eworICAgICAgICAgICAgZGF0YS5pbWFnZSA9IFFJbWFnZSgpOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKyAgICAgICAgSW50U2l6ZSB3YW50ZWRTaXplKGxheWVySW5mby5zaXpl
LndpZHRoKCksIGxheWVySW5mby5zaXplLmhlaWdodCgpKTsKKworICAgICAgICBpZiAoSW50U2l6
ZShkYXRhLmltYWdlLnNpemUoKSkgIT0gbGF5ZXJJbmZvLnNpemUpIHsKKyAgICAgICAgICAgIFFJ
bWFnZSBpbWFnZSh3YW50ZWRTaXplLndpZHRoKCksIHdhbnRlZFNpemUuaGVpZ2h0KCksIGxheWVy
LT5jb250ZW50c09wYXF1ZSgpID8gUUltYWdlOjpGb3JtYXRfUkdCMTYgOiBRSW1hZ2U6OkZvcm1h
dF9BUkdCMzJfUHJlbXVsdGlwbGllZCk7CisgICAgICAgICAgICBpbWFnZS5maWxsKDApOworICAg
ICAgICAgICAgZGF0YS5pbWFnZSA9IGltYWdlOworICAgICAgICB9CisgICAgfQorCisgICAgdXBk
YXRlV2ViVmlldygpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlQ29tcG9z
aXRpbmdMYXllckNvbnRlbnQoY29uc3QgV2ViTGF5ZXJVcGRhdGVJbmZvJiBjaHVuaykKK3sKKyAg
ICBpZiAoY2h1bmsuYml0bWFwSGFuZGxlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5maW5kKGNodW5rLmxheWVySUQpOwor
ICAgIGlmIChpdCA9PSBtX2xheWVycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUVBh
aW50ZXIgcGFpbnRlcigmaXQtPnNlY29uZC5pbWFnZSk7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoY2h1bmsuYml0bWFwSGFuZGxl
KTsKKyAgICBpZiAoIWJpdG1hcCkKKyAgICAgICAgcmV0dXJuOworICAgIFFJbWFnZSBpbWFnZUZy
b21VcGRhdGVDaHVuayA9IGJpdG1hcC0+Y3JlYXRlUUltYWdlKCk7CisgICAgaWYgKGltYWdlRnJv
bVVwZGF0ZUNodW5rLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBGbG9hdFJlY3Qg
c2NhbGVkUmVjdChjaHVuay5yZWN0KTsKKyAgICBzY2FsZWRSZWN0LnNjYWxlKDEuMCAvIG1fY29u
dGVudFNjYWxlKTsKKyAgICBpdC0+c2Vjb25kLmxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3Qo
c2NhbGVkUmVjdCk7CisgICAgcGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNv
bXBvc2l0aW9uTW9kZV9Tb3VyY2UpOworICAgIHBhaW50ZXIuZHJhd0ltYWdlKGNodW5rLnJlY3Qs
IGltYWdlRnJvbVVwZGF0ZUNodW5rKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnBh
aW50KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQgdGFyZ2V0UGFpbnRlciwg
Y29uc3QgSW50UmVjdCYsIFJlZ2lvbiYpCit7CisgICAgRmxvYXRSZWN0IGNsaXBSZWN0KFFSZWN0
Rih0YXJnZXRQYWludGVyLT5jbGlwUmVnaW9uKCkuYm91bmRpbmdSZWN0KCkpKTsKKyAgICBpZiAo
Y2xpcFJlY3QuaXNFbXB0eSgpKQorICAgICAgICBjbGlwUmVjdCA9IG1fZHJhd2luZ0FyZWFQcm94
eS0+dmlld3BvcnRWaXNpYmxlUmVjdCgpOworICAgIEZsb2F0UmVjdCBzY2FsZWRDb250ZW50c1Jl
Y3QgPSBtX2RyYXdpbmdBcmVhUHJveHktPmNvbnRlbnRzUmVjdCgpOworICAgIHNjYWxlZENvbnRl
bnRzUmVjdC5zY2FsZSgxLjAgLyBtX2RyYXdpbmdBcmVhUHJveHktPmNvbnRlbnRzU2NhbGUoKSk7
CisgICAgY2xpcFJlY3QuaW50ZXJzZWN0KHNjYWxlZENvbnRlbnRzUmVjdCk7CisKKyAgICBHcmFw
aGljc0xheWVyKiBjdXJyZW50Um9vdExheWVyID0gcm9vdExheWVyKCk7CisgICAgaWYgKCFjdXJy
ZW50Um9vdExheWVyKQorICAgICAgICByZXR1cm47CisgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5v
ZGUgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGN1cnJlbnRSb290TGF5ZXIpOworCisgICAgaWYgKCFu
b2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCh0YXJn
ZXRQYWludGVyKTsKKyAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKKyAgICAgICAgbV90ZXh0dXJl
TWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKCZjb250ZXh0KTsKKworICAgIG1fdGV4dHVy
ZU1hcHBlci0+c2V0R3JhcGhpY3NDb250ZXh0KCZjb250ZXh0KTsKKyAgICBtX3RleHR1cmVNYXBw
ZXItPnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dC5pbWFnZUludGVycG9sYXRp
b25RdWFsaXR5KCkpOworICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0VGV4dERyYXdpbmdNb2RlKGNv
bnRleHQudGV4dERyYXdpbmdNb2RlKCkpOworICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0Vmlld3Bv
cnRTaXplKG1fZHJhd2luZ0FyZWFQcm94eS0+dmlld3BvcnRWaXNpYmxlUmVjdCgpLnNpemUoKSk7
CisKKyAgICBub2RlLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Cisg
ICAgY29uc3QgUVRyYW5zZm9ybSB0ID0gdGFyZ2V0UGFpbnRlci0+dHJhbnNmb3JtKCk7CisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4KHQubTExKCksIHQubTEyKCksIDAsIHQubTEzKCks
IHQubTIxKCksIHQubTIyKCksIDAsIHQubTIzKCksIDAsIDAsIDEsIDAsIHQubTMxKCksIHQubTMy
KCksIDAsIHQubTMzKCkpOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UoMCk7Cisg
ICAgY3VycmVudFJvb3RMYXllci0+c2V0T3BhY2l0eSh0YXJnZXRQYWludGVyLT5vcGFjaXR5KCkp
OworICAgIGJvb2wgZm9yY2VTeW5jID0gKG1hdHJpeCAhPSBjdXJyZW50Um9vdExheWVyLT50cmFu
c2Zvcm0oKSk7CisgICAgY3VycmVudFJvb3RMYXllci0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7CisK
KyAgICBib29sIGFsbG93U3luYyA9IHRydWU7CisgICAgaWYgKCFmb3JjZVN5bmMpCisgICAgICAg
IGFsbG93U3luYyA9IG1fZHJhd2luZ0FyZWFQcm94eS0+aXNCYWNraW5nU3RvcmVSZWFkeSgpOwor
CisgICAgaWYgKGFsbG93U3luYykgeworICAgICAgICBzeW5jRGVsZXRlZExheWVycygpOworICAg
ICAgICBjdXJyZW50Um9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShjbGlwUmVjdCk7Cisg
ICAgfQorCisgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKCk7CisgICAgbV90ZXh0
dXJlTWFwcGVyLT5iZWdpbkNsaXAobWF0cml4LCBjbGlwUmVjdCk7CisKKyAgICBub2RlLT5wYWlu
dCgpOworCisgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRDbGlwKCk7CisgICAgbV90ZXh0dXJlTWFw
cGVyLT5lbmRQYWludGluZygpOworCisgICAgaWYgKG5vZGUtPmRlc2NlbmRhbnRzT3JTZWxmSGF2
ZVJ1bm5pbmdBbmltYXRpb25zKCkpCisgICAgICAgIHVwZGF0ZVdlYlZpZXcoKTsKK30KKwordm9p
ZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVdlYlZpZXcoKQoreworICAgIG1fZHJhd2luZ0Fy
ZWFQcm94eS0+dXBkYXRlV2ViVmlldygpOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYktpdDIucHJvIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KaW5k
ZXggNDRlYmI2OS4uZjVmMzIzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5w
cm8KKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KQEAgLTE1MSw2ICsxNTEsNyBAQCBI
RUFERVJTICs9IFwKICAgICBTaGFyZWQvV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5oIFwKICAgICBT
aGFyZWQvV2ViR3JhcGhpY3NDb250ZXh0LmggXAogICAgIFNoYXJlZC9XZWJJbWFnZS5oIFwKKyAg
ICBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oIFwKICAgICBTaGFyZWQvV2ViTmF2aWdhdGlvbkRh
dGFTdG9yZS5oIFwKICAgICBTaGFyZWQvV2ViTnVtYmVyLmggXAogICAgIFNoYXJlZC9XZWJPcGVu
UGFuZWxQYXJhbWV0ZXJzLmggXApAQCAtMzAxLDYgKzMwMiw3IEBAIEhFQURFUlMgKz0gXAogICAg
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRXJyb3JzLmggXAogICAgIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaCBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNsaWVudC5oIFwKKyAgICBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJJbnNwZWN0b3JDbGllbnQuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oIFwKQEAgLTM4MSw2ICszODMsNyBAQCBT
T1VSQ0VTICs9IFwKICAgICBTaGFyZWQvV2ViR3JhcGhpY3NDb250ZXh0LmNwcCBcCiAgICAgU2hh
cmVkL1dlYktleWJvYXJkRXZlbnQuY3BwIFwKICAgICBTaGFyZWQvV2ViSW1hZ2UuY3BwIFwKKyAg
ICBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAgXAogICAgIFNoYXJlZC9XZWJNb3VzZUV2ZW50
LmNwcCBcCiAgICAgU2hhcmVkL1dlYk9wZW5QYW5lbFBhcmFtZXRlcnMuY3BwIFwKICAgICBTaGFy
ZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAgXApAQCAtNDY4LDYgKzQ3MSw3IEBAIFNP
VVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRDbGllbnQuY3BwIFwKICAg
ICBVSVByb2Nlc3MvV2ViVUlDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvQ2xpZW50SW1w
bC5jcHAgXAorICAgIFVJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAgXAogICAg
IFVJUHJvY2Vzcy9xdC9Ub3VjaFZpZXdJbnRlcmZhY2UuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQv
UXRHZXN0dXJlUmVjb2duaXplci5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVS
ZWNvZ25pemVyLmNwcCBcCkBAIC01NDMsNiArNTQ3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwIFwKICAgICBXZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcCBcCiAgICAgV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNsaWVudC5jcHAgXAorICAgIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAgXAogICAgIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcCBcCiAgICAgV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5jcHAgXAogICAgIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBo
aWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJHcmFwaGljc0xheWVyLmNwcAppbmRleCAyMThmMmZmLi45ZWEzNWRkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdyYXBoaWNzTGF5ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3Jh
cGhpY3NMYXllci5jcHAKQEAgLTMzNiwxNSArMzM2LDE1IEBAIGNvbnN0IFdlYkxheWVySW5mbyYg
V2ViR3JhcGhpY3NMYXllcjo6bGF5ZXJJbmZvKCkgY29uc3QKICAgICByZXR1cm4gbV9sYXllcklu
Zm87CiB9CiAKLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGUoKQor
dm9pZCBXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiB7CiAgICAgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQotICAg
ICAgICBjaGlsZHJlbigpW2ldLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOworICAgICAgICBjaGls
ZHJlbigpW2ldLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShyZWN0KTsKICAgICBpZiAocmVwbGljYUxh
eWVyKCkpCi0gICAgICAgIHJlcGxpY2FMYXllcigpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOwor
ICAgICAgICByZXBsaWNhTGF5ZXIoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGUocmVjdCk7CiAgICAg
aWYgKG1hc2tMYXllcigpKQotICAgICAgICBtYXNrTGF5ZXIoKS0+c3luY0NvbXBvc2l0aW5nU3Rh
dGUoKTsKKyAgICAgICAgbWFza0xheWVyKCktPnN5bmNDb21wb3NpdGluZ1N0YXRlKHJlY3QpOwog
fQogCiBXZWJHcmFwaGljc0xheWVyKiB0b1dlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciog
bGF5ZXIpCkBAIC00MDUsOSArNDA1LDkgQEAgc3RhdGljIFZlY3RvcjxGbG9hdFJlY3Q+IGRpdmlk
ZUludG9UaWxlcyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgcmV0dXJuIHRpbGVzOwogfQog
Ci1zdGF0aWMgdm9pZCBjb2xsZWN0Q29tcG9zaXRpbmdJbmZvRm9yVGhpc0xheWVyKEdyYXBoaWNz
TGF5ZXIqIGxheWVyLCBXZWJMYXllclRyZWVJbmZvJiBvdXRJbmZvLCBWZWN0b3I8V2ViR3JhcGhp
Y3NMYXllcio+JiBvdXRMYXllcnMpCitzdGF0aWMgdm9pZCBjb2xsZWN0Q29tcG9zaXRpbmdJbmZv
Rm9yVGhpc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIFdlYkxheWVyVHJlZUlu
Zm8mIG91dEluZm8sIFZlY3RvcjxXZWJHcmFwaGljc0xheWVyKj4mIG91dExheWVycykKIHsKLSAg
ICBXZWJHcmFwaGljc0xheWVyKiBsYXllciA9IHRvV2ViR3JhcGhpY3NMYXllcihsYXllcik7Cisg
ICAgV2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIoZ3JhcGhpY3NM
YXllcik7CiAgICAgaWYgKCFsYXllcikKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghbGF5ZXIt
PmlzTW9kaWZpZWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmgKaW5kZXggYWQ2MDIxZS4uMTI5NDAx
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJHcmFwaGljc0xheWVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmgKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3Qo
Y29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBzZXRDb250ZW50c05lZWRzRGlzcGxheSgpOwot
ICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOworICAgIHZpcnR1YWwgdm9p
ZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2aXJ0dWFsIHZv
aWQgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiAKICAgICBXZWJLaXQ6
OldlYkxheWVySUQgaWQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAppbmRleCBkYTQyYWU2Li4wMzFjM2ZhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3Qu
Y3BwCkBAIC0zNCw2ICszNCwxMCBAQAogI2VuZGlmCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFFU
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaW5jbHVkZSAicXQvTGF5ZXJUcmVlSG9zdFF0Lmgi
CisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewpAQCAtNDQsNiArNDgsOCBAQCBQYXNzUmVmUHRyPExheWVyVHJlZUhvc3Q+IExheWVyVHJlZUhv
c3Q6OmNyZWF0ZShXZWJQYWdlKiB3ZWJQYWdlKQogICAgIHJldHVybiBMYXllclRyZWVIb3N0Q0FN
YWM6OmNyZWF0ZSh3ZWJQYWdlKTsKICNlbGlmIFBMQVRGT1JNKFdJTikgJiYgSEFWRShXS1FDQSkK
ICAgICByZXR1cm4gTGF5ZXJUcmVlSG9zdENBV2luOjpjcmVhdGUod2ViUGFnZSk7CisjZWxpZiBQ
TEFURk9STShRVCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIHJldHVybiBMYXllclRyZWVI
b3N0UXQ6OmNyZWF0ZSh3ZWJQYWdlKTsKICNlbHNlCiAgICAgcmV0dXJuIDA7CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9MYXllclRyZWVI
b3N0UXQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJl
ZUhvc3RRdC5jcHAKaW5kZXggNTc4YWUwOC4uMmZjZjJjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5jcHAKQEAg
LTI1LDggKzI1LDI3OSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RRdC5oIgor
CisjaW5jbHVkZSAiRHJhd2luZ0FyZWFJbXBsLmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFNZXNz
YWdlcy5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgorI2luY2x1ZGUgIldl
YkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NSZWZQdHI8TGF5ZXJU
cmVlSG9zdFF0PiBMYXllclRyZWVIb3N0UXQ6OmNyZWF0ZShXZWJQYWdlKiB3ZWJQYWdlKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJUcmVlSG9zdFF0KHdlYlBhZ2UpKTsKK30KKwor
TGF5ZXJUcmVlSG9zdFF0Ojp+TGF5ZXJUcmVlSG9zdFF0KCkKK3sKK30KKworTGF5ZXJUcmVlSG9z
dFF0OjpMYXllclRyZWVIb3N0UXQoV2ViUGFnZSogd2ViUGFnZSkKKyAgICA6IExheWVyVHJlZUhv
c3Qod2ViUGFnZSkKKyAgICAsIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKGZhbHNl
KQorICAgICwgbV9pc1ZhbGlkKHRydWUpCisgICAgLCBtX2xheWVyRmx1c2hUaW1lcih0aGlzLCAm
TGF5ZXJUcmVlSG9zdFF0OjpsYXllckZsdXNoVGltZXJGaXJlZCkKKyAgICAsIG1fbGF5ZXJGbHVz
aFNjaGVkdWxpbmdFbmFibGVkKHRydWUpCit7CisgICAgLy8gQ3JlYXRlIGEgcm9vdCBsYXllci4K
KyAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyNpZm5kZWYg
TkRFQlVHCisgICAgbV9yb290TGF5ZXItPnNldE5hbWUoIkxheWVyVHJlZUhvc3RRdCByb290IGxh
eWVyIik7CisjZW5kaWYKKyAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsK
KyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisgICAgbV9sYXll
clRyZWVDb250ZXh0LndlYkxheWVySUQgPSB0b1dlYkdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIu
Z2V0KCkpLT5pZCgpOworCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyID0gR3JhcGhp
Y3NMYXllcjo6Y3JlYXRlKHRoaXMpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX25vbkNvbXBvc2l0
ZWRDb250ZW50TGF5ZXItPnNldE5hbWUoIkxheWVyVHJlZUhvc3RRdCBub24tY29tcG9zaXRlZCBj
b250ZW50Iik7CisjZW5kaWYKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldERy
YXdzQ29udGVudCh0cnVlKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldENv
bnRlbnRzT3BhcXVlKG1fd2ViUGFnZS0+ZHJhd3NCYWNrZ3JvdW5kKCkgJiYgIW1fd2ViUGFnZS0+
ZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoKSk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKworICAgIG1fcm9vdExheWVyLT5h
ZGRDaGlsZChtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpOworCisgICAgaWYgKG1f
d2ViUGFnZS0+aGFzUGFnZU92ZXJsYXkoKSkKKyAgICAgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXll
cigpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dFF0OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCBsYXllckZsdXNoaW5nRW5h
YmxlZCkKK3sKKyAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPT0gbGF5ZXJG
bHVzaGluZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGF5ZXJGbHVzaFNjaGVk
dWxpbmdFbmFibGVkID0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQ7CisKKyAgICBpZiAobV9sYXllckZs
dXNoU2NoZWR1bGluZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGNhbmNlbFBlbmRp
bmdMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpzY2hlZHVsZUxheWVy
Rmx1c2goKQoreworICAgIGlmICghbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghbV9sYXllckZsdXNoVGltZXIuaXNBY3RpdmUoKSkKKyAg
ICAgICAgbV9sYXllckZsdXNoVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIExheWVy
VHJlZUhvc3RRdDo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKQoreworICAgIG1fbGF5ZXJGbHVz
aFRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFNob3VsZE5vdGlm
eUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCBub3RpZnlBZnRlclNjaGVkdWxlZExh
eWVyRmx1c2gpCit7CisgICAgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2ggPSBub3Rp
ZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpz
ZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xh
eWVyKQoreworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+cmVtb3ZlQWxsQ2hpbGRy
ZW4oKTsKKworICAgIC8vIEFkZCB0aGUgYWNjZWxlcmF0ZWQgbGF5ZXIgdHJlZSBoaWVyYXJjaHku
CisgICAgaWYgKGdyYXBoaWNzTGF5ZXIpCisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllci0+YWRkQ2hpbGQoZ3JhcGhpY3NMYXllcik7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0
OjppbnZhbGlkYXRlKCkKK3sKKyAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworCisgICAg
QVNTRVJUKG1faXNWYWxpZCk7CisgICAgbV9yb290TGF5ZXIgPSBudWxscHRyOworICAgIG1faXNW
YWxpZCA9IGZhbHNlOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2V0Tm9uQ29tcG9zaXRl
ZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAg
ICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0
KTsKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQorICAgICAgICBtX3BhZ2VPdmVybGF5TGF5
ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVz
aCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRl
bnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNjcm9sbE9mZnNldCkKK3sKKyAgICBzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVk
RGlzcGxheShzY3JvbGxSZWN0KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmZvcmNlUmVw
YWludCgpCit7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
SG9zdFF0OjpzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpCit7
CisgICAgbV9yb290TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICAvLyBJZiB0aGUgbmV3
U2l6ZSBleHBvc2VzIG5ldyBhcmVhcyBvZiB0aGUgbm9uLWNvbXBvc2l0ZWQgY29udGVudCBhIHNl
dE5lZWRzRGlzcGxheSBpcyBuZWVkZWQKKyAgICAvLyBmb3IgdGhvc2UgbmV3bHkgZXhwb3NlZCBh
cmVhcy4KKyAgICBGbG9hdFNpemUgb2xkU2l6ZSA9IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXll
ci0+c2l6ZSgpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShuZXdT
aXplKTsKKworICAgIGlmIChuZXdTaXplLndpZHRoKCkgPiBvbGRTaXplLndpZHRoKCkpIHsKKyAg
ICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5ld1NpemUu
aGVpZ2h0KCkpLCBvbGRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29u
dGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KG9sZFNpemUud2lkdGgo
KSwgMCwgbmV3U2l6ZS53aWR0aCgpIC0gb2xkU2l6ZS53aWR0aCgpLCBoZWlnaHQpKTsKKyAgICB9
CisKKyAgICBpZiAobmV3U2l6ZS5oZWlnaHQoKSA+IG9sZFNpemUuaGVpZ2h0KCkpCisgICAgICAg
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0
UmVjdCgwLCBvbGRTaXplLmhlaWdodCgpLCBuZXdTaXplLndpZHRoKCksIG5ld1NpemUuaGVpZ2h0
KCkgLSBvbGRTaXplLmhlaWdodCgpKSk7CisKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQor
ICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICBzY2hl
ZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmRpZEluc3RhbGxQ
YWdlT3ZlcmxheSgpCit7CisgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOworICAgIHNjaGVk
dWxlTGF5ZXJGbHVzaCgpOworCit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpkaWRVbmluc3Rh
bGxQYWdlT3ZlcmxheSgpCit7CisgICAgZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICBz
Y2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OnNldFBhZ2VP
dmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAg
QVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRO
ZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisK
K2Jvb2wgTGF5ZXJUcmVlSG9zdFF0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKQoreworICAg
IG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAg
ICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhp
c0xheWVyT25seSgpOworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCisgICAgICAgIG1fcGFn
ZU92ZXJsYXlMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisK
KyAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5z
eW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworfQorCisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdFF0OjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpCit7CisgICAgbV93ZWJQ
YWdlLT5sYXlvdXRJZk5lZWRlZCgpOworCisgICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCkgeworICAg
ICAgICAvLyBMZXQgdGhlIGRyYXdpbmcgYXJlYSBrbm93IHRoYXQgd2UndmUgZG9uZSBhIGZsdXNo
IG9mIHRoZSBsYXllciBjaGFuZ2VzLgorICAgICAgICBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYUlt
cGwqPihtX3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCkpLT5sYXllckhvc3REaWRGbHVzaExheWVycygp
OworICAgICAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOworICAg
IH0KKworICAgIFdlYkdyYXBoaWNzTGF5ZXI6OnNlbmRMYXllcnNUb1VJUHJvY2VzcyhtX3Jvb3RM
YXllci5nZXQoKSwgbV93ZWJQYWdlKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmxheWVy
Rmx1c2hUaW1lckZpcmVkKFRpbWVyPExheWVyVHJlZUhvc3RRdD4qKQoreworICAgIHBlcmZvcm1T
Y2hlZHVsZWRMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0OjpjcmVhdGVQ
YWdlT3ZlcmxheUxheWVyKCkKK3sKKyAgICBBU1NFUlQoIW1fcGFnZU92ZXJsYXlMYXllcik7CisK
KyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7Cisj
aWZuZGVmIE5ERUJVRworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVl
SG9zdFF0IHBhZ2Ugb3ZlcmxheSBjb250ZW50Iik7CisjZW5kaWYKKworICAgIG1fcGFnZU92ZXJs
YXlMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+
c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisKKyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQo
bV9wYWdlT3ZlcmxheUxheWVyLmdldCgpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UXQ6OmRl
c3Ryb3lQYWdlT3ZlcmxheUxheWVyKCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVy
KTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBtX3Bh
Z2VPdmVybGF5TGF5ZXIgPSBudWxscHRyOworfQorCit2b2lkIExheWVyVHJlZUhvc3RRdDo6bm90
aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91Ymxl
IHRpbWUpCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFF0Ojpub3RpZnlTeW5jUmVxdWlyZWQo
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dFF0OjpwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNz
TGF5ZXIsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xp
cFJlY3QpCit7CisgICAgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyKSB7CisgICAgICAgIG1fd2ViUGFnZS0+ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0LCBj
bGlwUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ3JhcGhpY3NMYXll
ciA9PSBtX3BhZ2VPdmVybGF5TGF5ZXIpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5kcmF3UGFnZU92
ZXJsYXkoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdFF0OjpzaG93RGVidWdCb3JkZXJzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5zaG93RGVidWdC
b3JkZXJzKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdFF0OjpzaG93UmVwYWludENvdW50ZXIo
KSBjb25zdAoreworICAgIHJldHVybiBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkt
PnNob3dSZXBhaW50Q291bnRlcigpOworfQorCitib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorI2Vsc2UKICNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCiAKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogYm9vbCBMYXll
clRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKQpAQCAtMzUsMyArMzA2
LDQgQEAgYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmco
KQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L0xheWVyVHJlZUhvc3RRdC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZWRlZGQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvTGF5ZXJUcmVlSG9zdFF0LmgKQEAg
LTAsMCArMSw5NyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBMYXllclRyZWVIb3N0
UXRfaAorI2RlZmluZSBMYXllclRyZWVIb3N0UXRfaAorCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJUaW1lci5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgorI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFVwZGF0ZUluZm87CitjbGFz
cyBXZWJQYWdlOworCitjbGFzcyBMYXllclRyZWVIb3N0UXQgOiBwdWJsaWMgTGF5ZXJUcmVlSG9z
dCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8TGF5ZXJUcmVlSG9zdFF0PiBjcmVhdGUoV2ViUGFnZSopOworICAgIHZpcnR1YWwg
fkxheWVyVHJlZUhvc3RRdCgpOworCisgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nKCk7CisKKyAgICB2aXJ0dWFsIGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxh
eWVyVHJlZUNvbnRleHQoKSB7IHJldHVybiBtX2xheWVyVHJlZUNvbnRleHQ7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wpOworICAgIHZpcnR1
YWwgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxk
Tm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOworICAg
IHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Tm9uQ29t
cG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAg
IHZpcnR1YWwgdm9pZCBzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9yY2VSZXBhaW50KCk7CisgICAgdmlydHVhbCB2b2lkIHNp
emVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkSW5zdGFsbFBhZ2VPdmVybGF5KCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFVu
aW5zdGFsbFBhZ2VPdmVybGF5KCk7CisgICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5TmVl
ZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBw
YXVzZVJlbmRlcmluZygpIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSB7
IH0KKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IExheWVyVHJlZUhvc3RRdChXZWJQYWdlKik7
CisKK3ByaXZhdGU6CisgICAgLy8gR3JhcGhpY3NMYXllckNsaWVudAorICAgIHZpcnR1YWwgdm9p
ZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBk
b3VibGUgdGltZSk7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMo
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYs
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBjbGlwUmVjdCk7CisgICAgdmlydHVhbCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKCkgY29uc3Q7CisKKyAgICAv
LyBMYXllclRyZWVIb3N0UXQKKyAgICB2b2lkIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAg
ICB2b2lkIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgYm9vbCBmbHVzaFBlbmRpbmdM
YXllckNoYW5nZXMoKTsKKyAgICB2b2lkIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7CisgICAg
dm9pZCBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOworICAgIHZvaWQgc2VuZExheWVyc1Rv
VUkoKTsKKworICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsK
KworICAgIC8vIFRoZSBsYXllciB3aGljaCBjb250YWlucyBhbGwgbm9uLWNvbXBvc2l0ZWQgY29u
dGVudC4KKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyOworCisgICAgLy8gVGhlIHBhZ2Ugb3ZlcmxheSBsYXllci4gV2lsbCBiZSBu
dWxsIGlmIHRoZXJlJ3Mgbm8gcGFnZSBvdmVybGF5LgorICAgIE93blB0cjxXZWJDb3JlOjpHcmFw
aGljc0xheWVyPiBtX3BhZ2VPdmVybGF5TGF5ZXI7CisKKyAgICBib29sIG1fbm90aWZ5QWZ0ZXJT
Y2hlZHVsZWRMYXllckZsdXNoOworICAgIGJvb2wgbV9pc1ZhbGlkOworICAgIExheWVyVHJlZUNv
bnRleHQgbV9sYXllclRyZWVDb250ZXh0OworICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQo
V2ViQ29yZTo6VGltZXI8TGF5ZXJUcmVlSG9zdFF0PiopOworICAgIFdlYkNvcmU6OlRpbWVyPExh
eWVyVHJlZUhvc3RRdD4gbV9sYXllckZsdXNoVGltZXI7CisgICAgYm9vbCBtX2xheWVyRmx1c2hT
Y2hlZHVsaW5nRW5hYmxlZDsKK307CisKK30KKworI2VuZGlmIC8vIExheWVyVHJlZUhvc3RRdF9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWlu
UXQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNw
cAppbmRleCBkZWUyY2E3Li4wNTMzYTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAKQEAgLTQyLDYgKzQyLDEwIEBACiAjaW5jbHVk
ZSA8TUNvbXBvbmVudERhdGE+CiAjZW5kaWYKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKyNpbmNsdWRlICJXZWJHcmFwaGljc0xheWVyLmgiCisjZW5kaWYKKwogI2lmbmRlZiBO
REVCVUcKICNpZiAhT1MoV0lORE9XUykKICNpbmNsdWRlIDx1bmlzdGQuaD4KQEAgLTE2Niw2ICsx
NzAsMTAgQEAgUV9ERUNMX0VYUE9SVCBpbnQgV2ViUHJvY2Vzc01haW5RdChpbnQgYXJnYywgY2hh
cioqIGFyZ3YpCiAgICAgICAgIHJldHVybiAxOwogICAgIH0KIAorI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyAgICBXZWJHcmFwaGljc0xheWVyOjppbml0RmFjdG9yeSgpOworI2Vu
ZGlmCisKICAgICBXZWJLaXQ6OldlYlByb2Nlc3M6OnNoYXJlZCgpLmluaXRpYWxpemUoaWRlbnRp
ZmllciwgUnVuTG9vcDo6bWFpbigpKTsKIAogICAgIFJ1bkxvb3A6OnJ1bigpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>