<?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>101023</bug_id>
          
          <creation_ts>2012-11-02 00:09:39 -0700</creation_ts>
          <short_desc>Coordinated Graphics: Refactor code related to directly composited images.</short_desc>
          <delta_ts>2012-11-16 03:39:20 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>101424</dependson>
    
    <dependson>101705</dependson>
    
    <dependson>102043</dependson>
    
    <dependson>102475</dependson>
          <blocked>100341</blocked>
    
    <blocked>102449</blocked>
    
    <blocked>102465</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dongseong Hwang">dongseong.hwang</reporter>
          <assigned_to name="Dongseong Hwang">dongseong.hwang</assigned_to>
          <cc>abecsi</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>d.nomiyama</cc>
    
    <cc>d-r</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hausmann</cc>
    
    <cc>joone</cc>
    
    <cc>ktf.kim</cc>
    
    <cc>menard</cc>
    
    <cc>noam</cc>
    
    <cc>ossy</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>756930</commentid>
    <comment_count>0</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-02 00:09:39 -0700</bug_when>
    <thetext>Currently, Coordinated Graphics has several problems in terms of handling a composited image.
1. We can not send an image to UI Process using GraphicsSurface, because GraphicsSurface has the size limitation.(GL_MAX_TEXTURE_SIZE)
2. CoordinatedGraphicsLayer, LayerTreeCoordinator, LayerTreeCoordinatorProxy and LayerTreeRenderer are tightly coupled to share an image using ShareableBitmap.
3. LayerTreeCoordinator needs platform dependent code to copy an image to ShareableBitmap.
4. We must allocate big continuous memory when an image is big.
5. Even if a composited image is off the viewport, TextureMapperLayer can not remove an image texture.

If we use TiledBackingStore to handle a composited image, we can get following benefits.
1. We can use GraphicsSurface to send an image to UI Process.
2. We can remove huge complex code to handle IPC for an image and just reuse existing TiledBackingStore.
3. LayerTreeCoordinator does not need platform dependent code.
4. We can send a big image to UI Process using many small tiles.
5. When a composited image is off the viewport, TextureMapperLayer can remove an image texture to save texture memory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756939</commentid>
    <comment_count>1</comment_count>
      <attachid>171995</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-02 00:26:40 -0700</bug_when>
    <thetext>Created attachment 171995
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756942</commentid>
    <comment_count>2</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-02 00:31:49 -0700</bug_when>
    <thetext>I wanted to remove the usage of ShareableBitmap in LayerTreeCoordinator to implement Threaded Coordinated Graphics.
Fortunately, TBS can replace to ShareableBitmap and TBS is better in all aspects.

This patch does not logically dependent on Bug 100819, but physically dependent on Bug 100819, because Bug 100819 is a huge change of Coordinated Graphics.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757841</commentid>
    <comment_count>3</comment_count>
      <attachid>171995</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-11-02 18:46:06 -0700</bug_when>
    <thetext>Comment on attachment 171995
Patch

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

This will break a really important feature for directly composited images, which is that they create only one texture per image (e.g. in the leaves demo we have only 3 leave textures).

I think a better solution would be if we had an actual additional CoordinatedGraphicsLayer for every composited image, and then the visible rect for that image would be the union of the visible rects of all contents rects of the layers that contain that image. 
I can prototype that if you&apos;re busy, you seem to be doing a lot lately :)

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:419
&gt; +    else if (m_compositedImageBackingStore)
&gt; +        m_compositedImageBackingStore-&gt;invalidate(IntRect(rect));

This needs to be adjusted to the layer&apos;s contentsRect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757842</commentid>
    <comment_count>4</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-11-02 18:48:15 -0700</bug_when>
    <thetext>Also there is no point in having a contentScale for the image, since it doesn&apos;t have antialiasing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757850</commentid>
    <comment_count>5</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-11-02 19:15:34 -0700</bug_when>
    <thetext>Actually, looking at this again, it can be much simpler:
1. if the image is small, we use the current mechanism.
2. if the image is big, we make the layer appear as if it draws content, and paint the composited image during tiledBackingStorePaint. We assume that huge images don&apos;t normally appear on many layers. 

What say you?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757865</commentid>
    <comment_count>6</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-02 19:55:00 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 171995 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=171995&amp;action=review
&gt; 
&gt; This will break a really important feature for directly composited images, which is that they create only one texture per image (e.g. in the leaves demo we have only 3 leave textures).
OMG, you are right!

&gt; I think a better solution would be if we had an actual additional CoordinatedGraphicsLayer for every composited image, and then the visible rect for that image would be the union of the visible rects of all contents rects of the layers that contain that image. 
&gt; I can prototype that if you&apos;re busy, you seem to be doing a lot lately :)
I think you have a good idea. You can do it :)

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:419
&gt; &gt; +    else if (m_compositedImageBackingStore)
&gt; &gt; +        m_compositedImageBackingStore-&gt;invalidate(IntRect(rect));
&gt; 
&gt; This needs to be adjusted to the layer&apos;s contentsRect.

I want to remove tiles off the viewport and when entering on viewport, I want to adjust visible rect.
After we have the union of the visible rects of all contents rects of the layers, we need more elaborate adjusting visible rect.

(In reply to comment #4)
&gt; Also there is no point in having a contentScale for the image, since it doesn&apos;t have antialiasing.

m_compositedImageBackingStore always have 1.f scales image, and TextureMapperLayer will scale the texture. So CoordinatedGraphicsLayer::adjustContentsScale() does not do anything to m_compositedImageBackingStore.

(In reply to comment #5)
&gt; Actually, looking at this again, it can be much simpler:
&gt; 1. if the image is small, we use the current mechanism.
&gt; 2. if the image is big, we make the layer appear as if it draws content, and paint the composited image during tiledBackingStorePaint. We assume that huge images don&apos;t normally appear on many layers. 
&gt; 
&gt; What say you?

That&apos;s good idea.

How about caching TBS, not ShareableBitmap. TBS always have 1.f scaled image. We can remove and create tiles using the union of the visible rects of all contents rects of the layers.
If we manage TBS like ShareableBitmap, we only have 3 leaves TBS in webkit leaves.

How do you think about it? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758044</commentid>
    <comment_count>7</comment_count>
      <attachid>172236</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-11-03 18:36:21 -0700</bug_when>
    <thetext>Created attachment 172236
WIP patch (not for review)

This patch should show the direction; It&apos;s not fully tested yet so not for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758045</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-03 18:39:57 -0700</bug_when>
    <thetext>Attachment 172236 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/Target.pri&apos;, u&apos;Source/WebCo...&quot; exit_code: 1
Source/WebCore/platform/graphics/AtomicImage.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/graphics/AtomicImage.h:43:  The parameter name &quot;image&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/AtomicImage.h:77:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 3 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758188</commentid>
    <comment_count>9</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-04 19:39:26 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=172236) [details]
&gt; WIP patch (not for review)
&gt; 
&gt; This patch should show the direction; It&apos;s not fully tested yet so not for review.

Great! Your patch will make Coordinated Graphics pretty better than current implementation.

However, my gut tells me that we use TBS in all cases. I think we can create only 3 TBS of leaves in webkit leaves demo.

If we use TBS, we can get great benefits for saving memory.
If there are many small directly composited images, we want to release the textures when those image are not visible on viewport.
For example, if there is a html5 game using css3 animation (maybe made using Sencha animation) and the game needs many enemies, weapons, objects and etc., current Coordinated Graphics keeps many small image textures until the RenderLayers are destroyed.

If we use TBS, we can easily release invisible textures.

I can implement it. I&apos;ll show you few hours later here. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758200</commentid>
    <comment_count>10</comment_count>
      <attachid>172260</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-04 20:23:01 -0800</bug_when>
    <thetext>Created attachment 172260
WIP TBS patch (not for review) 

This patch should show the direction too.

This patch can not draw webkit leaves demo yet. I&apos;ll fix ASAP but it will be tomorrow due to personal errands.

I need your feedback too :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758229</commentid>
    <comment_count>11</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-11-04 21:50:02 -0800</bug_when>
    <thetext>(In reply to comment #9)
patch will make Coordinated Graphics pretty better than current implementation.
&gt; 
&gt; However, my gut tells me that we use TBS in all cases. I think we can create only 3 TBS of leaves in webkit leaves demo.

I understand why your got tells you this, but let me explain an alternative :)
TBS is great for huge images, but for small/medium images I&apos;d rather we decode the image directly into a GraphicsSurface, and then display the surface as a texture in the UI process. If we go the TBS route we can&apos;t do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759053</commentid>
    <comment_count>12</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-05 16:58:56 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #9)
&gt; I understand why your got tells you this, but let me explain an alternative :)
&gt; TBS is great for huge images, but for small/medium images I&apos;d rather we decode the image directly into a GraphicsSurface, and then display the surface as a texture in the UI process. If we go the TBS route we can&apos;t do that.

Wow, you think everything in advance! It is great to decode the image directly into a GraphicsSurface. I agree we can not do this with the TBS.

I think CoordinatedGraphicsLayer should not know this low level abstraction. I want CoordinatedGraphicsLayer to just use CoordinatedCompositedImage (the name is subject to change) as the previous patch did and then CoordinatedCompositedImage decides to use TBS or decode the image to GraphicsSurface. We can get the implementation as merging your previous patch, especially 1024 check in CoordinatedGraphicsLayer into my previous patch. When we add the direct decoding feature, we need to change only CoordinatedCompositedImage. In addition, CoordinatedCompositedImage can remove unused small images off the viewport in the way how CoordinatedCoompositedImage removes the TBS.

I&apos;ll update WIP patch to demonstrate my suggestion. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759208</commentid>
    <comment_count>13</comment_count>
      <attachid>172477</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-05 20:19:09 -0800</bug_when>
    <thetext>Created attachment 172477
1. WIP TBS patch (not for review)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759210</commentid>
    <comment_count>14</comment_count>
      <attachid>172478</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-05 20:21:35 -0800</bug_when>
    <thetext>Created attachment 172478
2. WIP directly decoding into GraphicsSurface (not for review) 

This patch is not yet completed. The purpose of this patch shows the direction.

In the future, CoordinatedCompositedImage uses GraphicsSurface when Image is small.
We can implement like this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760381</commentid>
    <comment_count>15</comment_count>
      <attachid>172716</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-06 21:43:00 -0800</bug_when>
    <thetext>Created attachment 172716
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760382</commentid>
    <comment_count>16</comment_count>
      <attachid>172717</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-06 21:48:15 -0800</bug_when>
    <thetext>Created attachment 172717
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760383</commentid>
    <comment_count>17</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-06 21:49:21 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Created an attachment (id=172717) [details]
&gt; Patch

I forgot CMakelist for efl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760388</commentid>
    <comment_count>18</comment_count>
      <attachid>172717</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-06 22:01:14 -0800</bug_when>
    <thetext>Comment on attachment 172717
Patch

I complete the patch. I have thoroughly tested this implementation, especially in css3/filters/filter-animation-multi-hw.html, http://www.dorothybrowser.com/test/webkitTest/css3/leaves/ and http://www.satine.org/research/webkit/snowleopard/snowstack.html.

I think we can implement directly image decoding into a GraphicsSurface after this patch. We will change CoordinatedCompositedImage to add direct decoding. If you don&apos;t land this patch, we will change LayerTreeCoordinator to add direct decoding. Both cases are the same in that we implement direct decoding.
I rather prefer landing this patch because code related to the composited image gets together into CoordinatedCompositedImage class.

I need your feedback :)


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

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedCompositedImage.cpp:43
&gt; +    return reinterpret_cast&lt;CoordinatedCompositedImageID&gt;(image);

I don&apos;t fully understand why the current implementation uses a unique key like QPixmap::cacheKey().
Image commonly belongs to CachedImage and WebCore manages single CachedImage per unique URI.
So I don&apos;t use AtomicImage that noamr introduced. Could you explain if I&apos;m wrong?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760482</commentid>
    <comment_count>19</comment_count>
      <attachid>172743</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-07 02:19:58 -0800</bug_when>
    <thetext>Created attachment 172743
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760945</commentid>
    <comment_count>20</comment_count>
      <attachid>172717</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-11-07 11:51:20 -0800</bug_when>
    <thetext>Comment on attachment 172717
Patch

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

Good progress, see comments

&gt; Source/WebCore/ChangeLog:12
&gt; +
&gt; +        Fix a potential bug in GraphicsLayerTextureMapper.
&gt; +        m_compositedNativeImagePtr must be initialied. Otherwise the member&apos;s
&gt; +        undefined value can cause undefined behaviour.
&gt; +
&gt; +        In addition, fix some nits in TiledBackingStore and TextureMapperLayer.

Can you do this in a different patch/bug?

&gt; Source/WebKit2/ChangeLog:26
&gt; +

Tests?

&gt; Source/WebKit2/ChangeLog:28
&gt; +        In addition, this patch fixes the bug that Coordinated Graphics only renders the
&gt; +        first frame of a gif animation image.

Is this an isolated fix that can be done in a different patch?

&gt; Source/WebKit2/ChangeLog:30
&gt; +        * Shared/CoordinatedGraphics/CoordinatedCompositedImageID.h: Added.

I think we can define those types in WebLayerTreeInfo.h

&gt; Source/WebKit2/ChangeLog:107
&gt; +        (CoordinatedCompositedImageClient):
&gt; +        (CoordinatedCompositedImageGraphicsLayerClient):
&gt; +        (CoordinatedCompositedImage):

How about CoordinatedImageBacking instead of CoordinatedCompositedImage?

&gt; Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:223
&gt; +    // See LayerTreeRenderer::purgeGLResources()
&gt; +    m_surfaces.clear();

Is this related?

&gt; Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in:36
&gt; +    CreateTiledCompositedImage(uintptr_t imageID)
&gt; +    DestroyTiledCompositedImage(uintptr_t imageID)
&gt; +    CreateTileForCompositedImage(uintptr_t imageID, int tileID, WebCore::IntRect targetRect, WebKit::SurfaceUpdateInfo updateInfo)
&gt; +    UpdateTileForCompositedImage(uintptr_t imageID, int tileID, WebCore::IntRect targetRect, WebKit::SurfaceUpdateInfo updateInfo)
&gt; +    RemoveTileForCompositedImage(uintptr_t imageID, int tileID)

CreateTiledImageBacking
DestroyTiledImageBacking
CreateTileForImageBacking
UpdateTileForImageBacking
RemoveTileForImageBacking

&gt; Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:358
&gt; +    removeReleasedImagesIfNeeded();

Doesn&apos;t sound right to call that here. Shouldn&apos;t we call it at the end of syncRemoteContent ?

&gt; Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:360
&gt; +    if (InvalidCoordinatedCompositedImageID == imageID) {

if (imageID == InvalidCoordinatedCompositedImageID) you write, more comprehensive the code will be :)

&gt; Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:369
&gt; +CoordinatedBackingStore* LayerTreeRenderer::getBackingStore(WebLayerID id)

Shouldn&apos;t this be a PassRefPtr?

&gt;&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedCompositedImage.cpp:43
&gt;&gt; +    return reinterpret_cast&lt;CoordinatedCompositedImageID&gt;(image);
&gt; 
&gt; I don&apos;t fully understand why the current implementation uses a unique key like QPixmap::cacheKey().
&gt; Image commonly belongs to CachedImage and WebCore manages single CachedImage per unique URI.
&gt; So I don&apos;t use AtomicImage that noamr introduced. Could you explain if I&apos;m wrong?

Is there absolutely no code that can change an Image* after it&apos;s created? if so your solution would work but it feels a bit risky.

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedCompositedImage.cpp:51
&gt; +class CompositedTiledBackingStore : public TiledBackingStoreClient, public CoordinatedTileClient {

Should be TiledImageBacking

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedCompositedImage.h:46
&gt; +class CoordinatedCompositedImageClient {

Make it a nested class, CoordinatedImageBacking::Coordinator

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedCompositedImage.h:59
&gt; +class CoordinatedCompositedImageGraphicsLayerClient {

I think it&apos;s ok for CoordinatedImageBacking to access CoordinatedGraphicsLayer directly.

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:479
&gt; +        bool imageInstanceReplaced = m_coordinatedCompositedImage &amp;&amp; m_coordinatedCompositedImage-&gt;id() != CoordinatedCompositedImage::getCoordinatedCompositedImageID(m_compositedImage.get());

Add (): m_coordinatedCompositedImage &amp;&amp; (...)

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:491
&gt; +    } else
&gt; +        releaseCompositedImageIfNeeded();

Put this first, and use early return

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:560
&gt; +IntRect CoordinatedGraphicsLayer::compositedImageVisibleRect()

Do you ever call adjustVisibleRect()?

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:564
&gt; +    FloatSize ratioOfimageOverLayerSize(m_compositedImage-&gt;width() / size().width(), m_compositedImage-&gt;height() / size().height());

This is wrong - it should work with contentsRect(), not with the layer size.

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:54
&gt; +    // This method is the antithesis of CoordinatedCompositedImageClient::releaseCompositedImage(). See CoordinatedCompositedImageClient.
&gt; +    virtual PassRefPtr&lt;CoordinatedCompositedImage&gt; adoptCompositedImage(WebCore::Image*) = 0;

adopt is not right here - should be createImageBacking(Image*), and no need for the comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761022</commentid>
    <comment_count>21</comment_count>
      <attachid>172743</attachid>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2012-11-07 13:37:03 -0800</bug_when>
    <thetext>Comment on attachment 172743
Patch

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

Just a few comments.

&gt; Source/WebCore/ChangeLog:8
&gt; +        Fix a potential bug in GraphicsLayerTextureMapper.

Is this potential bug testable somehow?

&gt; Source/WebCore/ChangeLog:12
&gt; +        In addition, fix some nits in TiledBackingStore and TextureMapperLayer.

You could remove this line from ChangeLog and explain them inline.

&gt; Source/WebCore/ChangeLog:16
&gt; +        * platform/graphics/TiledBackingStore.cpp:

For example, you could do explain a little what nit fix you did here for TiledBackingStore.

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:53
&gt; +    // This method is the antithesis of CoordinatedCompositedImageClient::releaseCompositedImage(). See CoordinatedCompositedImageClient.

I think &quot;See CoordinatedCompositedImageClient.&quot; could be removed from this sentence.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761107</commentid>
    <comment_count>22</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-07 15:30:55 -0800</bug_when>
    <thetext>Thanks for reviews!

I&apos;ll fix it tomorrow because of other tasks in my job.
please wait :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761765</commentid>
    <comment_count>23</comment_count>
      <attachid>172743</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-11-08 07:20:54 -0800</bug_when>
    <thetext>Comment on attachment 172743
Patch

See comments for previous patches...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763969</commentid>
    <comment_count>24</comment_count>
      <attachid>173536</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-11 18:55:03 -0800</bug_when>
    <thetext>Created attachment 173536
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763976</commentid>
    <comment_count>25</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-11 19:04:50 -0800</bug_when>
    <thetext>I agree on TBS is overkill because Coordinated Graphics does not draw big images anymore after Bug 101827, which is awesome!

I believe adding CoordinatedImageBacking is still right architecturally.
Adding CoordinatedImageBacking lightens LayerTreeCoordinator&apos;s various roles.

And we can get benefits as Changelog said.

When we implement direct image decoding into a GraphicsSurface, we need to change only the CoordinatedImageBacking.

Although this patch changes and adds code hugely for a side feature, a directly composited image, I think changed code is more readable :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763989</commentid>
    <comment_count>26</comment_count>
      <attachid>173542</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-11 19:58:59 -0800</bug_when>
    <thetext>Created attachment 173542
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764079</commentid>
    <comment_count>27</comment_count>
      <attachid>173542</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-11-11 23:06:23 -0800</bug_when>
    <thetext>Comment on attachment 173542
Patch

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

I don&apos;t think this patch is fully baked, and it has a lot of implications that are not addressed.
Let&apos;s try this at smaller steps.

&gt; Source/WebKit2/ChangeLog:13
&gt; +        1. We can remove a texture if an image is off the viewport.

This is a tricky optimization that requires a lot more thinking.

&gt; Source/WebKit2/ChangeLog:14
&gt; +        2. We can update a texture if an image is updated. (i.e. gif animations)

Can we maybe start with a small patch that does only this? Maybe with a test for directly composited animated GIFs?

&gt; Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:233
&gt; +    static const IntSize tileSize(512, 512);
&gt; +    IntRect rect(IntPoint::zero(), size);
&gt; +
&gt; +    for (float y = 0; y &lt; size.height(); y += tileSize.height()) {

What&apos;s the point in tiling this?

&gt; Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:423
&gt; +void LayerTreeRenderer::notifyInvisibleImageBacking(CoordinatedImageBackingID imageID)
&gt;  {
&gt; -    if (!imageID) {
&gt; +    ASSERT(m_imageBackings.contains(imageID));
&gt; +    ImageBackingMap::iterator it = m_imageBackings.find(imageID);
&gt; +    RefPtr&lt;CoordinatedImageBackingStore&gt; backingStore = it-&gt;value;
&gt; +    backingStore-&gt;removeAllTiles();
&gt; +    m_imageBackingStoresWithPendingBuffers.add(backingStore);
&gt; +}

So for the leaves demo, every leave will regenerate the backing texture when it enters the viewport, and destroy it when it exits?

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:363
&gt; +        if (!newNativeImagePtr)
&gt; +            return;

Shouldn&apos;t this be an ASSERT?

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:581
&gt; +    return tiledBackingStoreVisibleRect().intersects(tiledBackingStoreContentsRect());

This is incorrect, it should use contentsRect() and not tiledBackingStoreContentsRect().
Also, this means that if the user scrolls close to the border of an image, we will release and recreate the texture over and over again...

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.cpp:42
&gt; +    return reinterpret_cast&lt;CoordinatedImageBackingID&gt;(image);

Add a comment about why this is safe.

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.cpp:116
&gt; +    releaseSurfaceIfNeeded();
&gt; +
&gt; +    bool previousIsVisible = m_isVisible;
&gt; +    notifyInvisibleImageBackingInNeeded();
&gt; +    bool chagedToVisible = !previousIsVisible &amp;&amp; m_isVisible;
&gt; +
&gt; +    bool needToUpdate = chagedToVisible || (m_isVisible &amp;&amp; m_didInvalidate);
&gt; +    if (!needToUpdate) {
&gt; +        m_didInvalidate = false;
&gt; +        return;
&gt; +    }
&gt; +
&gt; +    m_surface = ShareableSurface::create(m_image-&gt;size(), m_image-&gt;currentFrameHasAlpha() ? ShareableBitmap::SupportsAlpha : ShareableBitmap::NoFlags, ShareableSurface::SupportsGraphicsSurface);
&gt; +    m_handle = adoptPtr(new ShareableSurface::Handle());
&gt; +
&gt; +    if (!m_surface-&gt;createHandle(*m_handle)) {
&gt; +        releaseSurfaceIfNeeded();
&gt; +        m_didInvalidate = false;
&gt; +        return;
&gt; +    }
&gt; +
&gt; +    IntRect rect(IntPoint::zero(), m_image-&gt;size());
&gt; +    OwnPtr&lt;GraphicsContext&gt; context = m_surface-&gt;createGraphicsContext(rect);
&gt; +    context-&gt;drawImage(m_image.get(), ColorSpaceDeviceRGB, rect, rect);
&gt; +
&gt; +    m_client-&gt;updateImageBacking(id(), *m_handle);
&gt; +    m_didInvalidate = false;

This is essentially TBS for images, except it&apos;s binary.
Either way, this looks like an optimization that can be added at a later patch. One thing at a time please :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764082</commentid>
    <comment_count>28</comment_count>
      <attachid>173542</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-11-11 23:10:03 -0800</bug_when>
    <thetext>Comment on attachment 173542
Patch

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

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.cpp:58
&gt; +    // FIXME: We would need to decode a small image directly into a GraphicsSurface.
&gt; +    // http://webkit.org/b/101426

Hmm... point is that once we use GraphicsSurfaces, we don&apos;t need to create/destroy the backing texture, which would make this patch unnecessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764159</commentid>
    <comment_count>29</comment_count>
      <attachid>173542</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-12 01:58:14 -0800</bug_when>
    <thetext>Comment on attachment 173542
Patch

Thanks for your review :)

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

&gt;&gt; Source/WebKit2/ChangeLog:13
&gt;&gt; +        1. We can remove a texture if an image is off the viewport.
&gt; 
&gt; This is a tricky optimization that requires a lot more thinking.

Yes, I agree.

In this patch, when all clients of one image is not visible, CoordinatedImageBacking send a message to UI Process to remove textures.
I think we will find better policy.

&gt;&gt; Source/WebKit2/ChangeLog:14
&gt;&gt; +        2. We can update a texture if an image is updated. (i.e. gif animations)
&gt; 
&gt; Can we maybe start with a small patch that does only this? Maybe with a test for directly composited animated GIFs?

I can. I&apos;ll separate out. However, as I mentioned in Bug 93458, creating a layout test is hard, but I can make a manual test like ManualTests/drag-image.html. Do you think a good idea for testing?

&gt;&gt; Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:233
&gt;&gt; +    for (float y = 0; y &lt; size.height(); y += tileSize.height()) {
&gt; 
&gt; What&apos;s the point in tiling this?

We do not make tiling as expecting to always receive small image enough to store it in single texture.
I&apos;ll change to make one tile always.

BTW, do you think it is ok to add CoordinatedImageBackingStore reusing CoordinatedBackingStore?

&gt;&gt; Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:423
&gt;&gt; +}
&gt; 
&gt; So for the leaves demo, every leave will regenerate the backing texture when it enters the viewport, and destroy it when it exits?

No, when ten layers share an image, the first leave generates the baking texture when it enters the viewport. and the last leave destroys the texture when it exits lastly. If there is at least one leave in the viewport, the texture never be destroyed.

&gt;&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:363
&gt;&gt; +            return;
&gt; 
&gt; Shouldn&apos;t this be an ASSERT?

You are right!

&gt;&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:581
&gt;&gt; +    return tiledBackingStoreVisibleRect().intersects(tiledBackingStoreContentsRect());
&gt; 
&gt; This is incorrect, it should use contentsRect() and not tiledBackingStoreContentsRect().
&gt; Also, this means that if the user scrolls close to the border of an image, we will release and recreate the texture over and over again...

Yes, right. However, if the user scrolls close to the border of the coverRect of TBS, we release and recreate the texture of a tile over and over again too.
I think we need more elaborate caching mechanism like MemoryCache. MemoryCache has live capacity. MemoryCache does not remove any resource until the live capacity is full. If the capacity is full, MemoryCache removes resource by the LRU order.
We can add the caching mechanism in the future.

&gt;&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.cpp:42
&gt;&gt; +    return reinterpret_cast&lt;CoordinatedImageBackingID&gt;(image);
&gt; 
&gt; Add a comment about why this is safe.

// CoordinatedImageBacking keeps a RefPtr&lt;Image&gt; member, so the same Image pointer can not refer two different instances until CoordinatedImageBacking releases the member.
// When CoordinatedImageBacking releases the member, Coordinated Graphics destroys all data structures related to this image, so even if a different image is allocated to the same pointer, it is safe.

How about the above comment?

&gt;&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.cpp:58
&gt;&gt; +    // http://webkit.org/b/101426
&gt; 
&gt; Hmm... point is that once we use GraphicsSurfaces, we don&apos;t need to create/destroy the backing texture, which would make this patch unnecessary.

I think even if we use GraphicsSurfaces, we should destroy the backing texture. Otherwise, If web app receives images using AJAX continuously, we keep textures until WebKit crashes due to out of video memory.
We need memory management mechanism like MemoryCache as I mentioned above. When we introduce something like MemoryCache, this class is still useful.

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.cpp:96
&gt; +    bool needToUpdate = chagedToVisible || (m_isVisible &amp;&amp; m_didInvalidate);

We upload a texture again when invalidate() is called or the image becomes visible at this frame.
&quot;the image becomes visible&quot; means all clients were invisible in the previous frame and then at least one client is visible in this frame.

&gt;&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.cpp:116
&gt;&gt; +    m_didInvalidate = false;
&gt; 
&gt; This is essentially TBS for images, except it&apos;s binary.
&gt; Either way, this looks like an optimization that can be added at a later patch. One thing at a time please :)

m_didInvalidate does not exist for optimization. m_didInvalidate is needed for gif animation.
When gif animation is progressed, clients (a.k.a CoordinatedGraphicsLayer) calls invalidate().
If you want, I can add supporting gif animation in another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764434</commentid>
    <comment_count>30</comment_count>
      <attachid>173542</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-11-12 08:06:30 -0800</bug_when>
    <thetext>Comment on attachment 173542
Patch

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

&gt;&gt;&gt; Source/WebKit2/ChangeLog:14
&gt;&gt;&gt; +        2. We can update a texture if an image is updated. (i.e. gif animations)
&gt;&gt; 
&gt;&gt; Can we maybe start with a small patch that does only this? Maybe with a test for directly composited animated GIFs?
&gt; 
&gt; I can. I&apos;ll separate out. However, as I mentioned in Bug 93458, creating a layout test is hard, but I can make a manual test like ManualTests/drag-image.html. Do you think a good idea for testing?

That would work.

&gt;&gt;&gt; Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:233
&gt;&gt;&gt; +    for (float y = 0; y &lt; size.height(); y += tileSize.height()) {
&gt;&gt; 
&gt;&gt; What&apos;s the point in tiling this?
&gt; 
&gt; We do not make tiling as expecting to always receive small image enough to store it in single texture.
&gt; I&apos;ll change to make one tile always.
&gt; 
&gt; BTW, do you think it is ok to add CoordinatedImageBackingStore reusing CoordinatedBackingStore?

Yes, we should assert if this image is too large.
I don&apos;t see why we couldn&apos;t reuse CoordinatedBackingStore.

&gt;&gt;&gt; Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:423
&gt;&gt;&gt; +}
&gt;&gt; 
&gt;&gt; So for the leaves demo, every leave will regenerate the backing texture when it enters the viewport, and destroy it when it exits?
&gt; 
&gt; No, when ten layers share an image, the first leave generates the baking texture when it enters the viewport. and the last leave destroys the texture when it exits lastly. If there is at least one leave in the viewport, the texture never be destroyed.

So, if we had an animation where all the instances of the same image come in and out of the viewport, the backing texture for that image would be destroyed/recreated continuously.

&gt;&gt;&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:581
&gt;&gt;&gt; +    return tiledBackingStoreVisibleRect().intersects(tiledBackingStoreContentsRect());
&gt;&gt; 
&gt;&gt; This is incorrect, it should use contentsRect() and not tiledBackingStoreContentsRect().
&gt;&gt; Also, this means that if the user scrolls close to the border of an image, we will release and recreate the texture over and over again...
&gt; 
&gt; Yes, right. However, if the user scrolls close to the border of the coverRect of TBS, we release and recreate the texture of a tile over and over again too.
&gt; I think we need more elaborate caching mechanism like MemoryCache. MemoryCache has live capacity. MemoryCache does not remove any resource until the live capacity is full. If the capacity is full, MemoryCache removes resource by the LRU order.
&gt; We can add the caching mechanism in the future.

coverRect at least gives us some buffer, so images stay in memory for a bit longer.
I agree that something like a MemoryCache would be a better policy here.

&gt;&gt;&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.cpp:42
&gt;&gt;&gt; +    return reinterpret_cast&lt;CoordinatedImageBackingID&gt;(image);
&gt;&gt; 
&gt;&gt; Add a comment about why this is safe.
&gt; 
&gt; // CoordinatedImageBacking keeps a RefPtr&lt;Image&gt; member, so the same Image pointer can not refer two different instances until CoordinatedImageBacking releases the member.
&gt; // When CoordinatedImageBacking releases the member, Coordinated Graphics destroys all data structures related to this image, so even if a different image is allocated to the same pointer, it is safe.
&gt; 
&gt; How about the above comment?

The first part is sufficient.

&gt;&gt;&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.cpp:58
&gt;&gt;&gt; +    // http://webkit.org/b/101426
&gt;&gt; 
&gt;&gt; Hmm... point is that once we use GraphicsSurfaces, we don&apos;t need to create/destroy the backing texture, which would make this patch unnecessary.
&gt; 
&gt; I think even if we use GraphicsSurfaces, we should destroy the backing texture. Otherwise, If web app receives images using AJAX continuously, we keep textures until WebKit crashes due to out of video memory.
&gt; We need memory management mechanism like MemoryCache as I mentioned above. When we introduce something like MemoryCache, this class is still useful.

Doesn&apos;t webkit already cache images using a memory cache? In the end the Image is owned by CachedImage. We should find a way to release the texture when the CachedImage is destroyed.

&gt;&gt;&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.cpp:116
&gt;&gt;&gt; +    m_didInvalidate = false;
&gt;&gt; 
&gt;&gt; This is essentially TBS for images, except it&apos;s binary.
&gt;&gt; Either way, this looks like an optimization that can be added at a later patch. One thing at a time please :)
&gt; 
&gt; m_didInvalidate does not exist for optimization. m_didInvalidate is needed for gif animation.
&gt; When gif animation is progressed, clients (a.k.a CoordinatedGraphicsLayer) calls invalidate().
&gt; If you want, I can add supporting gif animation in another patch.

Sorry, comment was supposed to be on the whole function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764962</commentid>
    <comment_count>31</comment_count>
      <attachid>173542</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-12 16:39:15 -0800</bug_when>
    <thetext>Comment on attachment 173542
Patch

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

&gt;&gt;&gt;&gt; Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:233
&gt;&gt;&gt;&gt; +    for (float y = 0; y &lt; size.height(); y += tileSize.height()) {
&gt;&gt;&gt; 
&gt;&gt;&gt; What&apos;s the point in tiling this?
&gt;&gt; 
&gt;&gt; We do not make tiling as expecting to always receive small image enough to store it in single texture.
&gt;&gt; I&apos;ll change to make one tile always.
&gt;&gt; 
&gt;&gt; BTW, do you think it is ok to add CoordinatedImageBackingStore reusing CoordinatedBackingStore?
&gt; 
&gt; Yes, we should assert if this image is too large.
&gt; I don&apos;t see why we couldn&apos;t reuse CoordinatedBackingStore.

Assert is proper I think.

Without CoordinatedImageBackingStore, we have two solutions to reuse CoordinatedBackingStore.
1. LayerTreeRenderer generates tile id and calls CoordinatedBackingStore::createTile and CoordinatedBackingStore::removeTile at the proper time.
2. Add CoordinatedBackingStore::updateContents and updateContents() creates and removes a tile at the proper time.

In #1, I don&apos;t want LayerTreeRenderer to concern something like Vector&lt;int /* tileID */&gt;. LayerTreeRenderer has many roles already.
In #2, CoordinatedBackingStore::updateContents is not essential for CoordinatedBackingStore&apos;s role. If I add CoordinatedBackingStore::updateContents, I&apos;m afraid other developers are confused which they can call CoordinatedBackingStore::updateContents and CoordinatedBackingStore::createTile to the same instance.
So, I made the easy-to-use class: CoordinatedImageBackingStore.

&gt;&gt;&gt;&gt; Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:423
&gt;&gt;&gt;&gt; +}
&gt;&gt;&gt; 
&gt;&gt;&gt; So for the leaves demo, every leave will regenerate the backing texture when it enters the viewport, and destroy it when it exits?
&gt;&gt; 
&gt;&gt; No, when ten layers share an image, the first leave generates the baking texture when it enters the viewport. and the last leave destroys the texture when it exits lastly. If there is at least one leave in the viewport, the texture never be destroyed.
&gt; 
&gt; So, if we had an animation where all the instances of the same image come in and out of the viewport, the backing texture for that image would be destroyed/recreated continuously.

Please see the below comment.

&gt;&gt;&gt;&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:581
&gt;&gt;&gt;&gt; +    return tiledBackingStoreVisibleRect().intersects(tiledBackingStoreContentsRect());
&gt;&gt;&gt; 
&gt;&gt;&gt; This is incorrect, it should use contentsRect() and not tiledBackingStoreContentsRect().
&gt;&gt;&gt; Also, this means that if the user scrolls close to the border of an image, we will release and recreate the texture over and over again...
&gt;&gt; 
&gt;&gt; Yes, right. However, if the user scrolls close to the border of the coverRect of TBS, we release and recreate the texture of a tile over and over again too.
&gt;&gt; I think we need more elaborate caching mechanism like MemoryCache. MemoryCache has live capacity. MemoryCache does not remove any resource until the live capacity is full. If the capacity is full, MemoryCache removes resource by the LRU order.
&gt;&gt; We can add the caching mechanism in the future.
&gt; 
&gt; coverRect at least gives us some buffer, so images stay in memory for a bit longer.
&gt; I agree that something like a MemoryCache would be a better policy here.

There is a solution!

Timer can absorb shock of deletion like UpdateAtlas. I suggest we will remove an image 3 seconds (subject to change) after an image is invisible. If the image is visible again, we stop the timer.
It can solve this problem as well as the above problem (an animation where all the instances of the same image come in and out of the viewport)

&gt;&gt;&gt;&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.cpp:58
&gt;&gt;&gt;&gt; +    // http://webkit.org/b/101426
&gt;&gt;&gt; 
&gt;&gt;&gt; Hmm... point is that once we use GraphicsSurfaces, we don&apos;t need to create/destroy the backing texture, which would make this patch unnecessary.
&gt;&gt; 
&gt;&gt; I think even if we use GraphicsSurfaces, we should destroy the backing texture. Otherwise, If web app receives images using AJAX continuously, we keep textures until WebKit crashes due to out of video memory.
&gt;&gt; We need memory management mechanism like MemoryCache as I mentioned above. When we introduce something like MemoryCache, this class is still useful.
&gt; 
&gt; Doesn&apos;t webkit already cache images using a memory cache? In the end the Image is owned by CachedImage. We should find a way to release the texture when the CachedImage is destroyed.

Yes, you are right. We don&apos;t need something like memory cache anymore.
When CachedImage removes decoded data, this class will be notified to by CachedImage or BitmapImage in the future.

&gt;&gt;&gt;&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.cpp:116
&gt;&gt;&gt;&gt; +    m_didInvalidate = false;
&gt;&gt;&gt; 
&gt;&gt;&gt; This is essentially TBS for images, except it&apos;s binary.
&gt;&gt;&gt; Either way, this looks like an optimization that can be added at a later patch. One thing at a time please :)
&gt;&gt; 
&gt;&gt; m_didInvalidate does not exist for optimization. m_didInvalidate is needed for gif animation.
&gt;&gt; When gif animation is progressed, clients (a.k.a CoordinatedGraphicsLayer) calls invalidate().
&gt;&gt; If you want, I can add supporting gif animation in another patch.
&gt; 
&gt; Sorry, comment was supposed to be on the whole function.

Ok. I&apos;ll!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767848</commentid>
    <comment_count>32</comment_count>
      <attachid>174380</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-15 02:26:58 -0800</bug_when>
    <thetext>Created attachment 174380
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767889</commentid>
    <comment_count>33</comment_count>
      <attachid>174389</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-15 03:07:38 -0800</bug_when>
    <thetext>Created attachment 174389
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768080</commentid>
    <comment_count>34</comment_count>
      <attachid>174389</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-11-15 08:04:38 -0800</bug_when>
    <thetext>Comment on attachment 174389
Patch

I&apos;d prefer it if we did the class refactoring first, and then add the &quot;invisible&quot; optimization as a second step.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768531</commentid>
    <comment_count>35</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-15 14:52:31 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; (From update of attachment 174389 [details])
&gt; I&apos;d prefer it if we did the class refactoring first, and then add the &quot;invisible&quot; optimization as a second step.

Ok, sounds reasonable. I&apos;ll do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768699</commentid>
    <comment_count>36</comment_count>
      <attachid>174561</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-15 17:03:30 -0800</bug_when>
    <thetext>Created attachment 174561
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768702</commentid>
    <comment_count>37</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-15 17:05:01 -0800</bug_when>
    <thetext>(In reply to comment #36)
&gt; Created an attachment (id=174561) [details]
&gt; Patch

Removed invisible optimization as you mentioned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768715</commentid>
    <comment_count>38</comment_count>
      <attachid>174561</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-11-15 17:10:35 -0800</bug_when>
    <thetext>Comment on attachment 174561
Patch

LGTM!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768727</commentid>
    <comment_count>39</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-15 17:22:10 -0800</bug_when>
    <thetext>(In reply to comment #38)
&gt; (From update of attachment 174561 [details])
&gt; LGTM!

Thanks!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768731</commentid>
    <comment_count>40</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-15 17:23:01 -0800</bug_when>
    <thetext>(In reply to comment #39)
&gt; (In reply to comment #38)
&gt; &gt; (From update of attachment 174561 [details] [details])
&gt; &gt; LGTM!
&gt; 
&gt; Thanks!!

This bug depend on Bug 102313. Could you take a look at Bug 102313?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768737</commentid>
    <comment_count>41</comment_count>
      <attachid>174561</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-11-15 17:29:15 -0800</bug_when>
    <thetext>Comment on attachment 174561
Patch

Clearing cq flag until dependent patch is r+ed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768784</commentid>
    <comment_count>42</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-15 18:01:37 -0800</bug_when>
    <thetext>(In reply to comment #41)
&gt; (From update of attachment 174561 [details])
&gt; Clearing cq flag until dependent patch is r+ed.

Could you cq+ again?

I was confused. This patch does not depend on any bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768801</commentid>
    <comment_count>43</comment_count>
      <attachid>174561</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-15 18:25:06 -0800</bug_when>
    <thetext>Comment on attachment 174561
Patch

Clearing flags on attachment: 174561

Committed r134873: &lt;http://trac.webkit.org/changeset/134873&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768802</commentid>
    <comment_count>44</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-15 18:25:14 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768903</commentid>
    <comment_count>45</comment_count>
      <attachid>174561</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-11-15 21:24:41 -0800</bug_when>
    <thetext>Comment on attachment 174561
Patch

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

&gt; Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:52
&gt; +    ASSERT(textureMapper-&gt;maxTextureSize() &gt;= std::max(m_tileRect.size().width(), m_tileRect.size().height()));

It broke the debug build:

/home/webkitbuildbot/slaves/debug64bit/buildslave/qt-linux-64-debug/build/Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp: In member function &apos;void WebKit::CoordinatedBackingStoreTile::swapBuffers(WebCore::TextureMapper*)&apos;:
[1;31m/home/webkitbuildbot/slaves/debug64bit/buildslave/qt-linux-64-debug/build/Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:52: error: no match for &apos;operator&gt;=&apos; in &apos;textureMapper-&gt;WebCore::TextureMapper::maxTextureSize() &gt;= std::max [with _Tp = int](((const int&amp;)((const int*)(&amp;((WebKit::CoordinatedBackingStoreTile*)this)-&gt;WebKit::CoordinatedBackingStoreTile::m_tileRect.WebCore::IntRect::size().WebCore::IntSize::width()))), ((const int&amp;)((const int*)(&amp;((WebKit::CoordinatedBackingStoreTile*)this)-&gt;WebKit::CoordinatedBackingStoreTile::m_tileRect.WebCore::IntRect::size().WebCore::IntSize::height()))))&apos;[0m
/home/webkitbuildbot/slaves/debug64bit/buildslave/qt-linux-64-debug/build/Source/WebCore/platform/LayoutUnit.h:345: note: candidates are: bool WebCore::operator&gt;=(const WebCore::LayoutUnit&amp;, const WebCore::LayoutUnit&amp;)
/home/webkitbuildbot/slaves/debug64bit/buildslave/qt-linux-64-debug/build/Source/WebCore/platform/LayoutUnit.h:350: note:                 bool WebCore::operator&gt;=(const WebCore::LayoutUnit&amp;, int)
/home/webkitbuildbot/slaves/debug64bit/buildslave/qt-linux-64-debug/build/Source/WebCore/platform/LayoutUnit.h:355: note:                 bool WebCore::operator&gt;=(float, const WebCore::LayoutUnit&amp;)
/home/webkitbuildbot/slaves/debug64bit/buildslave/qt-linux-64-debug/build/Source/WebCore/platform/LayoutUnit.h:360: note:                 bool WebCore::operator&gt;=(const WebCore::LayoutUnit&amp;, float)
/home/webkitbuildbot/slaves/debug64bit/buildslave/qt-linux-64-debug/build/Source/WebCore/platform/LayoutUnit.h:365: note:                 bool WebCore::operator&gt;=(int, const WebCore::LayoutUnit&amp;)
/usr/local/Trolltech/Qt5/Qt-5.0.0-r39/include/QtCore/qstring.h:1309: note:                 bool operator&gt;=(const QStringRef&amp;, const QStringRef&amp;)
/usr/local/Trolltech/Qt5/Qt-5.0.0-r39/include/QtCore/qstring.h:1038: note:                 bool operator&gt;=(const char*, QLatin1String)
/usr/local/Trolltech/Qt5/Qt-5.0.0-r39/include/QtCore/qstring.h:984: note:                 bool operator&gt;=(QLatin1String, QLatin1String)
/usr/local/Trolltech/Qt5/Qt-5.0.0-r39/include/QtCore/qstring.h:1336: note:                 bool operator&gt;=(const char*, const QStringRef&amp;)
/usr/local/Trolltech/Qt5/Qt-5.0.0-r39/include/QtCore/qstring.h:1025: note:                 bool operator&gt;=(const char*, const QString&amp;)
/usr/local/Trolltech/Qt5/Qt-5.0.0-r39/include/QtCore/qbytearray.h:560: note:                 bool operator&gt;=(const char*, const QByteArray&amp;)
/usr/local/Trolltech/Qt5/Qt-5.0.0-r39/include/QtCore/qbytearray.h:558: note:                 bool operator&gt;=(const QByteArray&amp;, const char*)
/usr/local/Trolltech/Qt5/Qt-5.0.0-r39/include/QtCore/qbytearray.h:556: note:                 bool operator&gt;=(const QByteArray&amp;, const QByteArray&amp;)
/usr/local/Trolltech/Qt5/Qt-5.0.0-r39/include/QtCore/qchar.h:390: note:                 bool operator&gt;=(QChar, QChar)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768920</commentid>
    <comment_count>46</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-11-15 21:46:52 -0800</bug_when>
    <thetext>And it broke the Qt Mac build too: 

In file included from /Users/indt/Development/build-slaves/indt-mountainlion/qt-mountainlion-release/build/Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:30:
In file included from /Users/indt/Development/build-slaves/indt-mountainlion/qt-mountainlion-release/build/Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:25:
In file included from /Users/indt/Development/build-slaves/indt-mountainlion/qt-mountainlion-release/build/Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:24:
In file included from /Users/indt/Development/build-slaves/indt-mountainlion/qt-mountainlion-release/build/Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.h:33:
In file included from /Users/indt/Development/build-slaves/indt-mountainlion/qt-mountainlion-release/build/Source/WebKit2/Shared/WebLayerTreeInfo.h:25:
In file included from /Users/indt/Development/build-slaves/indt-mountainlion/qt-mountainlion-release/build/Source/WebKit2/Platform/CoreIPC/ArgumentDecoder.h:29:
/Users/indt/Development/build-slaves/indt-mountainlion/qt-mountainlion-release/build/Source/WebKit2/Platform/CoreIPC/ArgumentCoder.h:39:11: error: member reference base type &apos;const unsigned long&apos; is not a structure or union
        t.encode(encoder);
        ~ ^
/Users/indt/Development/build-slaves/indt-mountainlion/qt-mountainlion-release/build/Source/WebKit2/Platform/CoreIPC/ArgumentEncoder.h:92:27: note: in instantiation of member function &apos;CoreIPC::ArgumentCoder&lt;unsigned long&gt;::encode&apos; requested here
        ArgumentCoder&lt;T&gt;::encode(*this, t);
                          ^
/Users/indt/Development/build-slaves/indt-mountainlion/qt-mountainlion-release/build/Source/WebKit2/Platform/CoreIPC/Arguments.h:62:17: note: in instantiation of function template specialization &apos;CoreIPC::ArgumentEncoder::encode&lt;unsigned long&gt;&apos; requested here
        encoder.encode(argument1);
                ^
/Users/indt/Development/build-slaves/indt-mountainlion/qt-mountainlion-release/build/Source/WebKit2/Platform/CoreIPC/ArgumentCoder.h:39:11: note: in instantiation of member function &apos;CoreIPC::Arguments1&lt;const unsigned long &amp;&gt;::encode&apos; requested here
        t.encode(encoder);
          ^
/Users/indt/Development/build-slaves/indt-mountainlion/qt-mountainlion-release/build/Source/WebKit2/Platform/CoreIPC/ArgumentEncoder.h:92:27: note: in instantiation of member function &apos;CoreIPC::ArgumentCoder&lt;Messages::LayerTreeCoordinatorProxy::CreateImageBacking&gt;::encode&apos; requested here
        ArgumentCoder&lt;T&gt;::encode(*this, t);
                          ^
/Users/indt/Development/build-slaves/indt-mountainlion/qt-mountainlion-release/build/Source/WebKit2/Platform/CoreIPC/MessageSender.h:45:18: note: in instantiation of function template specialization &apos;CoreIPC::ArgumentEncoder::encode&lt;Messages::LayerTreeCoordinatorProxy::CreateImageBacking&gt;&apos; requested here
        encoder-&gt;encode(message);
                 ^
/Users/indt/Development/build-slaves/indt-mountainlion/qt-mountainlion-release/build/Source/WebKit2/Platform/CoreIPC/MessageSender.h:38:16: note: in instantiation of function template specialization &apos;CoreIPC::MessageSender&lt;WebKit::WebPage&gt;::send&lt;Messages::LayerTreeCoordinatorProxy::CreateImageBacking&gt;&apos; requested here
        return send(message, static_cast&lt;T*&gt;(this)-&gt;destinationID());
               ^
/Users/indt/Development/build-slaves/indt-mountainlion/qt-mountainlion-release/build/Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:486:16: note: in instantiation of function template specialization &apos;CoreIPC::MessageSender&lt;WebKit::WebPage&gt;::send&lt;Messages::LayerTreeCoordinatorProxy::CreateImageBacking&gt;&apos; requested here
    m_webPage-&gt;send(Messages::LayerTreeCoordinatorProxy::CreateImageBacking(imageID));
               ^
1 error generated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768971</commentid>
    <comment_count>47</comment_count>
    <who name="KyungTae Kim">ktf.kim</who>
    <bug_when>2012-11-15 23:55:09 -0800</bug_when>
    <thetext>I fixed the Debug mode build error with https://bugs.webkit.org/show_bug.cgi?id=102465.
Please take a look at it and fix it if it&apos;s not a correct fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769031</commentid>
    <comment_count>48</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-16 01:23:21 -0800</bug_when>
    <thetext>(In reply to comment #47)
&gt; I fixed the Debug mode build error with https://bugs.webkit.org/show_bug.cgi?id=102465.
&gt; Please take a look at it and fix it if it&apos;s not a correct fix.

You are right! Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769032</commentid>
    <comment_count>49</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-16 01:23:50 -0800</bug_when>
    <thetext>(In reply to comment #46)
&gt; And it broke the Qt Mac build too: 


Thanks for reporting!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769040</commentid>
    <comment_count>50</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-16 01:48:28 -0800</bug_when>
    <thetext>(In reply to comment #46)
&gt; And it broke the Qt Mac build too: 
&gt; /Users/indt/Development/build-slaves/indt-mountainlion/qt-mountainlion-release/build/Source/WebKit2/Platform/CoreIPC/ArgumentCoder.h:39:11: error: member reference base type &apos;const unsigned long&apos; is not a structure or union
&gt;         t.encode(encoder);
&gt;         ~ ^
&gt; /Users/indt/Development/build-slaves/indt-mountainlion/qt-mountainlion-release/build/Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:486:16: note: in instantiation of function template specialization &apos;CoreIPC::MessageSender&lt;WebKit::WebPage&gt;::send&lt;Messages::LayerTreeCoordinatorProxy::CreateImageBacking&gt;&apos; requested here
&gt;     m_webPage-&gt;send(Messages::LayerTreeCoordinatorProxy::CreateImageBacking(imageID));
&gt;                ^
&gt; 1 error generated.

I can not fix it, because I can not understand what is problem.

CreateImageBacking(uintptr_t imageID) message is pretty similar to SetRootCompositingLayer(uint32_t id) message. We define CoordinatedImageBackingID as uintptr_t, while WebLayerID is defined as uint32_t.
What is different is that CreateImageBacking uses uintptr_t instead of uint32_t.

I want to dig into more, but I don&apos;t have mac. I feel very sorry that I can not fix my mistake. Thank someone who fix it in advance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769082</commentid>
    <comment_count>51</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-11-16 03:39:20 -0800</bug_when>
    <thetext>I filed a new bug report to fix the Mac build - https://bugs.webkit.org/show_bug.cgi?id=102475</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171995</attachid>
            <date>2012-11-02 00:26:40 -0700</date>
            <delta_ts>2012-11-03 18:36:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101023-20121102162453.patch</filename>
            <type>text/plain</type>
            <size>32192</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzMjQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTAwZjRlNDIzZjgzMGRk
YTkwYWU4OTAyMWQwYzVlNzBiMjExNDM1Yi4uMGI4M2JhZWEwNzM3Mzg4N2IzYmMyODA4NzQzYTBj
MWY2M2MxZmI1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEyLTExLTAyICBIdWFu
ZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIENvb3JkaW5h
dGVkIEdyYXBoaWNzOiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgaGFuZGxlcyBhIGNvbXBvc2l0
ZWQgaW1hZ2Ugd2l0aCBUaWxlZEJhY2tpbmdTdG9yZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTAyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBhIHBvdGVudGlhbCBidWcgaW4gR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIuCisgICAgICAgIG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyIG11
c3QgYmUgaW5pdGlhbGllZC4gT3RoZXJ3aXNlIHRoZSBtZW1iZXIncworICAgICAgICB1bmRlZmlu
ZWQgdmFsdWUgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvdXIuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OkdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyOjpzZXRDb250ZW50c1RvSW1hZ2UpOgorCiAyMDEyLTExLTAxICBBbGV4YW5kcnUgQ2hpY3Vs
aXRhICA8YWNoaWN1QGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTIFNoYWRlcnNdIEN1c3RvbUZp
bHRlck9wZXJhdGlvbiBzaG91bGQgYmUgY29udmVydGVkIHRvIFZhbGlkYXRlZEN1c3RvbUZpbHRl
ck9wZXJhdGlvbiBiZWZvcmUgdXNpbmcgaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA1ZmRiYzlmNzEzZWYxYzVm
MTc0YjNhY2Q1YWU0OTJhMGE1ZDlhYTI0Li42ZTZiZTk0NzdjZjVmYzRjN2MzNmYwNTk0MTViZDU1
YjZiYzNiZThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzYgQEAKKzIwMTItMTEtMDIgIEh1YW5n
IERvbmdzdW5nICA8bHV4dGVsbGFAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgQ29vcmRpbmF0
ZWQgR3JhcGhpY3M6IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciBoYW5kbGVzIGEgY29tcG9zaXRl
ZCBpbWFnZSB3aXRoIFRpbGVkQmFja2luZ1N0b3JlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxMDIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5LCBDb29yZGluYXRlZCBHcmFwaGljcyBo
YXMgc2V2ZXJhbCBwcm9ibGVtcyBpbiB0ZXJtcyBvZiBoYW5kbGluZyBhCisgICAgICAgIGNvbXBv
c2l0ZWQgaW1hZ2UuCisgICAgICAgIDEuIFdlIGNhbiBub3Qgc2VuZCBhbiBpbWFnZSB0byBVSSBQ
cm9jZXNzIHVzaW5nIEdyYXBoaWNzU3VyZmFjZSwgYmVjYXVzZQorICAgICAgICBHcmFwaGljc1N1
cmZhY2UgaGFzIHRoZSBzaXplIGxpbWl0YXRpb24uKEdMX01BWF9URVhUVVJFX1NJWkUpCisgICAg
ICAgIDIuIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciwgTGF5ZXJUcmVlQ29vcmRpbmF0b3IsIExh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkKKyAgICAgICAgYW5kIExheWVyVHJlZVJlbmRlcmVyIGFy
ZSB0aWdodGx5IGNvdXBsZWQgdG8gc2hhcmUgYW4gaW1hZ2UgdXNpbmcKKyAgICAgICAgU2hhcmVh
YmxlQml0bWFwLgorICAgICAgICAzLiBMYXllclRyZWVDb29yZGluYXRvciBuZWVkcyBwbGF0Zm9y
bSBkZXBlbmRlbnQgY29kZSB0byBjb3B5IGFuIGltYWdlIHRvCisgICAgICAgIFNoYXJlYWJsZUJp
dG1hcC4KKyAgICAgICAgNC4gV2UgbXVzdCBhbGxvY2F0ZSBiaWcgY29udGludW91cyBtZW1vcnkg
d2hlbiBhbiBpbWFnZSBpcyBiaWcuCisgICAgICAgIDUuIEV2ZW4gaWYgYSBjb21wb3NpdGVkIGlt
YWdlIGlzIG9mZiB0aGUgdmlld3BvcnQsIFRleHR1cmVNYXBwZXJMYXllciBjYW4gbm90CisgICAg
ICAgIHJlbW92ZSBhbiBpbWFnZSB0ZXh0dXJlLgorCisgICAgICAgIElmIHdlIHVzZSBUaWxlZEJh
Y2tpbmdTdG9yZSB0byBoYW5kbGUgYSBjb21wb3NpdGVkIGltYWdlLCB3ZSBjYW4gZ2V0IGZvbGxv
d2luZworICAgICAgICBiZW5lZml0cy4KKyAgICAgICAgMS4gV2UgY2FuIHVzZSBHcmFwaGljc1N1
cmZhY2UgdG8gc2VuZCBhbiBpbWFnZSB0byBVSSBQcm9jZXNzLgorICAgICAgICAyLiBXZSBjYW4g
cmVtb3ZlIGh1Z2UgY29tcGxleCBjb2RlIHRvIGhhbmRsZSBJUEMgZm9yIGFuIGltYWdlIGFuZCBq
dXN0IHJldXNlCisgICAgICAgIGV4aXN0aW5nIFRpbGVkQmFja2luZ1N0b3JlLgorICAgICAgICAz
LiBMYXllclRyZWVDb29yZGluYXRvciBkb2VzIG5vdCBuZWVkIHBsYXRmb3JtIGRlcGVuZGVudCBj
b2RlLgorICAgICAgICA0LiBXZSBjYW4gc2VuZCBhIGJpZyBpbWFnZSB0byBVSSBQcm9jZXNzIHVz
aW5nIG1hbnkgc21hbGwgdGlsZXMuCisgICAgICAgIDUuIFdoZW4gYSBjb21wb3NpdGVkIGltYWdl
IGlzIG9mZiB0aGUgdmlld3BvcnQsIFRleHR1cmVNYXBwZXJMYXllciBjYW4gcmVtb3ZlCisgICAg
ICAgIGFuIGltYWdlIHRleHR1cmUgdG8gc2F2ZSB0ZXh0dXJlIG1lbW9yeS4KKworICAgICAgICBB
ZnRlciB0aGlzIHBhdGNoLCBVSSBQcm9jZXNzIGRlYWxzIHdpdGggYSBkaXJlY3RseSBjb21wb3Np
dGVkIGltYWdlIGxheWVyIGFzIGEKKyAgICAgICAgY29udGVudCBsYXllci4KKworICAgICAgICBJ
biBhZGRpdGlvbiwgdGhpcyBwYXRjaCBmaXhlcyB0aGUgYnVnIHRoYXQgQ29vcmRpbmF0ZWQgR3Jh
cGhpY3Mgb25seSByZW5kZXJzIHRoZQorICAgICAgICBmaXJzdCBmcmFtZSBvZiBhIGdpZiBhbmlt
YXRpb24gaW1hZ2UuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oOgorICAg
ICAgICAoV2ViS2l0OjpXZWJMYXllckluZm86OldlYkxheWVySW5mbyk6CisgICAgICAgIChXZWJM
YXllckluZm8pOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaDoKKyAgICAgICAgKExheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJTdGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUdMUmVzb3VyY2VzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oOgorICAgICAg
ICAoTGF5ZXJUcmVlUmVuZGVyZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUNvbXBvc2l0ZWRJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXROZWVk
c0Rpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpzeW5jQ29tcG9zaXRlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6c3luY0xheWVyU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0VmlzaWJs
ZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpwYWludENvbXBvc2l0ZWRJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnB1cmdlQmFja2luZ1N0
b3Jlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkanVz
dFZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6aGFzUGVuZGluZ1Zpc2libGVDaGFuZ2VzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaDoKKyAgICAg
ICAgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk6CisgICAgICAgIChDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcyk6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpwdXJnZUJhY2tpbmdTdG9yZXMpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3Jk
aW5hdG9yLmg6CisgICAgICAgIChMYXllclRyZWVDb29yZGluYXRvcik6CisKIDIwMTItMTAtMzAg
IEh1YW5nIERvbmdzdW5nICA8bHV4dGVsbGFAY29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgQ29v
cmRpbmF0ZWQgR3JhcGhpY3M6IFJlbW92ZSB0aGUgZGVwZW5kZW5jeSBvZiBTaGFyZWFibGVTdXJm
YWNlIGZyb20gQ29vcmRpbmF0ZWQgR3JhcGhpY3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyLmNwcAppbmRleCBmMDRjZjQ5ZGVkNzc4OTM5MmVjYWRjMDE1Zjg1YThkM2Q2
MTJiOTYzLi5kNzJmMTNiNDUzYWEzYjVmNzY0OTEyZTUyOGU1Yzk4ZTYwYTAwYjM5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKQEAgLTQ0LDYgKzQ0LDcgQEAg
UGFzc093blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVyOjpjcmVhdGUoR3JhcGhpY3NM
YXllckNsaWVudCogY2xpZW50KQogR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OkdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKICAgICA6IEdy
YXBoaWNzTGF5ZXIoY2xpZW50KQogICAgICwgbV9sYXllcihhZG9wdFB0cihuZXcgVGV4dHVyZU1h
cHBlckxheWVyKCkpKQorICAgICwgbV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIoMCkKICAgICAs
IG1fY2hhbmdlTWFzaygwKQogICAgICwgbV9uZWVkc0Rpc3BsYXkoZmFsc2UpCiAgICAgLCBtX2Zp
eGVkVG9WaWV3cG9ydChmYWxzZSkKQEAgLTM0OCw4ICszNDksMTAgQEAgdm9pZCBHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKICAgICAg
ICAgaWYgKCFtX2NvbXBvc2l0ZWRJbWFnZSkKICAgICAgICAgICAgIG1fY29tcG9zaXRlZEltYWdl
ID0gVGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKICAgICAgICAgbV9j
b21wb3NpdGVkSW1hZ2UtPnNldENvbnRlbnRzVG9JbWFnZShpbWFnZSk7Ci0gICAgfSBlbHNlCisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIgPSAwOwogICAg
ICAgICBtX2NvbXBvc2l0ZWRJbWFnZSA9IDA7CisgICAgfQogCiAgICAgc2V0Q29udGVudHNUb01l
ZGlhKG1fY29tcG9zaXRlZEltYWdlLmdldCgpKTsKICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1h
cHBlckxheWVyOjpDb250ZW50Q2hhbmdlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJMYXllclRyZWVJbmZvLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJU
cmVlSW5mby5oCmluZGV4IGM5YmRhYzVmZGJhMTEyYmQ0ZTA3NDI1ZThkNzY1MzM3YzFhY2Y0MGUu
Ljk4ZDIxYWMwYjdkMTk5OGZjNDRiNThkMzg2ZWJlMmY3YjkzYzY0ZjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
TGF5ZXIuaCIKLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKQEAgLTQwLDE0ICszOSwxMiBAQCBzdHJ1Y3QgV2ViTGF5ZXJJbmZvIHsKICAgICAgICAg
OiBwYXJlbnQoSW52YWxpZFdlYkxheWVySUQpCiAgICAgICAgICwgcmVwbGljYShJbnZhbGlkV2Vi
TGF5ZXJJRCkKICAgICAgICAgLCBtYXNrKEludmFsaWRXZWJMYXllcklEKQotICAgICAgICAsIGlt
YWdlQmFja2luZ1N0b3JlSUQoMCkKICAgICAgICAgLCBvcGFjaXR5KDApCiAgICAgICAgICwgZmxh
Z3MoMCkgeyB9CiAKICAgICBXZWJMYXllcklEIHBhcmVudDsKICAgICBXZWJMYXllcklEIHJlcGxp
Y2E7CiAgICAgV2ViTGF5ZXJJRCBtYXNrOwotICAgIGludDY0X3QgaW1hZ2VCYWNraW5nU3RvcmVJ
RDsKIAogICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9zOwogICAgIFdlYkNvcmU6OkZsb2F0UG9p
bnQzRCBhbmNob3JQb2ludDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eS5jcHAKaW5kZXggOTQxZDMzNDRkZGNhNjY5ODY1ZGE1OGU4ODhlNTNiMDFjZjU1YmY3
ZS4uMThiMDNhNTE3ZTE1NzhkMGE3MjUwYWQ4ZTQ4ODllZDcyYWFjNjhjZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTEyNywxNyArMTI3
LDYgQEAgdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkaWRSZW5kZXJGcmFtZShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1MKICNlbmRpZgogfQogCi12b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHk6OmNyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qg
a2V5LCBjb25zdCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUpCi17Ci0g
ICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVh
dGUoaGFuZGxlKTsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6
Y3JlYXRlSW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGtleSwgYml0bWFwKSk7Ci19Ci0KLXZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6ZGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdl
KGludDY0X3Qga2V5KQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRl
cmVyOjpkZXN0cm95SW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGtleSkpOwotfQotCiB2b2lkIExh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldENvbnRlbnRzU2l6ZShjb25zdCBGbG9hdFNpemUm
IGNvbnRlbnRzU2l6ZSkKIHsKICAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5k
ZXJlcjo6c2V0Q29udGVudHNTaXplLCBtX3JlbmRlcmVyLmdldCgpLCBjb250ZW50c1NpemUpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNz
L0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaAppbmRleCA0ZDNj
MDllMTc2ZmUzNzEwNzAyNDdhNTBkM2U3OWMxYmUwZmZmN2NkLi4zODdkZDBiZGQ2NDhkYWIwYjEz
MTg2YmRhZGM0OWE0NDRlNWNlZjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eS5oCkBAIC02Nyw4ICs2Nyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92
ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCk7CiAgICAgdm9pZCBjcmVhdGVD
b29yZGluYXRlZFN1cmZhY2UoY29uc3QgV2ViS2l0OjpDb29yZGluYXRlZFN1cmZhY2VJbmZvJik7
CiAgICAgdm9pZCByZW1vdmVDb29yZGluYXRlZFN1cmZhY2UoV2ViS2l0OjpDb29yZGluYXRlZFN1
cmZhY2VJRCk7Ci0gICAgdm9pZCBjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90
LCBjb25zdCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJik7Ci0gICAgdm9pZCBkZXN0
cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCk7CiAgICAgdm9pZCBkaWRSZWNlaXZl
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENv
cmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsKICAgICB2b2lkIHVw
ZGF0ZVZpZXdwb3J0KCk7CiAgICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluCmlu
ZGV4IDBjMjQ3Mjk4YmQ2MTkzZmQ0OGI0MjUzNWI3NjI0ZGIxNmJmMWI3NGQuLmY0OTkwODA2NDQ0
M2NmNGFjMjE2MDE5OGMzZDlkYjBhMTcyNWI5ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHku
bWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgpAQCAtMzEsOCArMzEs
NiBAQCBtZXNzYWdlcyAtPiBMYXllclRyZWVDb29yZGluYXRvclByb3h5IHsKICAgICBSZW1vdmVU
aWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgaW50IHRpbGVJRCkKICAgICBDcmVhdGVDb29y
ZGluYXRlZFN1cmZhY2UoV2ViS2l0OjpDb29yZGluYXRlZFN1cmZhY2VJbmZvIHN1cmZhY2VJbmZv
KQogICAgIFJlbW92ZUNvb3JkaW5hdGVkU3VyZmFjZSh1aW50MzJfdCBjb29yZGluYXRlZFN1cmZh
Y2VJZCkKLSAgICBDcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSwgV2Vi
S2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpCi0gICAgRGVzdHJveURpcmVjdGx5
Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5KQogICAgIERpZFJlbmRlckZyYW1lKFdlYkNvcmU6
OkludFNpemUgY29udGVudHNTaXplLCBXZWJDb3JlOjpJbnRSZWN0IGNvdmVyZWRSZWN0KQogICAg
IERpZENoYW5nZVNjcm9sbFBvc2l0aW9uKFdlYkNvcmU6OkludFBvaW50IHBvc2l0aW9uKQogICAg
IFNldExheWVyQW5pbWF0aW9ucyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFu
aW1hdGlvbnMgYW5pbWF0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcApp
bmRleCAxY2UyMmI4MzFlYmFhYzRlMjdkYjEzMDBhYzk2MWRkYTY4YmM5ZDEwLi41ZjU2ZGU5NTc2
NmRhY2Y0ZjVmOWIyZGVmYjIxYmQ1NWRjZmY0NDljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
UmVuZGVyZXIuY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5LmgiCiAj
aW5jbHVkZSAiTWVzc2FnZUlELmgiCi0jaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5j
bHVkZSAiVGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3Rv
cmUuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKQEAgLTMwMSw4ICszMDAsNiBAQCB2
b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0YXRlKFdlYkxheWVySUQgaWQsIGNvbnN0
IFdlYkxheWVySW5mbyYgbGF5ZXJJbgogICAgIGVsc2UKICAgICAgICAgbV9maXhlZExheWVycy5y
ZW1vdmUoaWQpOwogCi0gICAgYXNzaWduSW1hZ2VUb0xheWVyKGxheWVyLCBsYXllckluZm8uaW1h
Z2VCYWNraW5nU3RvcmVJRCk7Ci0KICAgICAvLyBOZXZlciBtYWtlIHRoZSByb290IGxheWVyIGNs
aXAuCiAgICAgbGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMobGF5ZXJJbmZvLmlzUm9vdExheWVyID8g
ZmFsc2UgOiBsYXllckluZm8ubWFza3NUb0JvdW5kcyk7CiAgICAgbGF5ZXItPnNldE9wYWNpdHko
bGF5ZXJJbmZvLm9wYWNpdHkpOwpAQCAtMzg0LDMxICszODEsNiBAQCB2b2lkIExheWVyVHJlZVJl
bmRlcmVyOjp1cGRhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3Qg
VGlsZVVwZAogICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2lu
Z1N0b3JlKTsKIH0KIAotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlSW1hZ2UoaW50NjRf
dCBpbWFnZUlELCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gd2Vha0JpdG1hcCkKLXsKLSAg
ICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSB3ZWFrQml0bWFwOwotICAgIFJlZlB0
cjxUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IFRleHR1cmVN
YXBwZXJUaWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7Ci0gICAgbV9kaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZXMuc2V0KGltYWdlSUQsIGJhY2tpbmdTdG9yZSk7Ci0gICAgYmFja2luZ1N0b3JlLT51
cGRhdGVDb250ZW50cyhtX3RleHR1cmVNYXBwZXIuZ2V0KCksIGJpdG1hcC0+Y3JlYXRlSW1hZ2Uo
KS5nZXQoKSwgQml0bWFwVGV4dHVyZTo6VXBkYXRlQ2Fubm90TW9kaWZ5T3JpZ2luYWxJbWFnZURh
dGEpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95SW1hZ2UoaW50NjRfdCBp
bWFnZUlEKQotewotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnJlbW92ZShpbWFnZUlE
KTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6YXNzaWduSW1hZ2VUb0xheWVyKEdyYXBo
aWNzTGF5ZXIqIGxheWVyLCBpbnQ2NF90IGltYWdlSUQpCi17Ci0gICAgaWYgKCFpbWFnZUlEKSB7
Ci0gICAgICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoMCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxUZXh0dXJlTWFwcGVyQmFja2lu
Z1N0b3JlPiA+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmQo
aW1hZ2VJRCk7Ci0gICAgQVNTRVJUKGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmVu
ZCgpKTsKLSAgICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKGl0LT52YWx1ZS5nZXQoKSk7Ci19
Ci0KIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNvbW1pdFRpbGVPcGVyYXRpb25zKCkKIHsKICAg
ICBIYXNoU2V0PFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgZW5k
ID0gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmVuZCgpOwpAQCAtNDc1LDcgKzQ0
Nyw2IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnB1cmdlR0xSZXNvdXJjZXMoKQogICAgIGlm
IChsYXllcikKICAgICAgICAgbGF5ZXItPmNsZWFyQmFja2luZ1N0b3Jlc1JlY3Vyc2l2ZSgpOwog
Ci0gICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuY2xlYXIoKTsKICNpZiBVU0UoR1JBUEhJ
Q1NfU1VSRkFDRSkKICAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNsZWFyKCk7CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNz
L0xheWVyVHJlZVJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oCmluZGV4IDkwNzMyMjNiOTY5MTAwNDBhOWU2
NTgxMmVjOTQ5ZGQxNzRmYzQxNDcuLjUzYmM4MGUyODhjOGU2YjM2MDMzZTM1NGM3MmU2ZjllZDZj
NWQ0ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuaApAQCAtODksOCArODksNiBA
QCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCk7CiAgICAgdm9p
ZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCwgY29uc3QgVGlsZVVwZGF0ZSYpOwogICAgIHZv
aWQgZmx1c2hMYXllckNoYW5nZXMoKTsKLSAgICB2b2lkIGNyZWF0ZUltYWdlKGludDY0X3QsIFBh
c3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPik7Ci0gICAgdm9pZCBkZXN0cm95SW1hZ2UoaW50NjRf
dCk7CiAgICAgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKICAgICB2b2lkIHNldEFuaW1hdGlvbnNMb2Nr
ZWQoYm9vbCk7CiAKQEAgLTEzMiw3ICsxMzAsNiBAQCBwcml2YXRlOgogI2lmIFVTRShURVhUVVJF
X01BUFBFUikKICAgICBPd25QdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFw
cGVyOwogICAgIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGdldEJhY2tpbmdT
dG9yZShXZWJMYXllcklEKTsKLSAgICBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiA+IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzOwog
ICAgIEhhc2hTZXQ8UmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiA+IG1fYmFja2luZ1N0
b3Jlc1dpdGhQZW5kaW5nQnVmZmVyczsKICNlbmRpZgogI2lmIFVTRShHUkFQSElDU19TVVJGQUNF
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllci5jcHAKaW5kZXggNzdkMDg3YTM4MWI1NmUzOWYyMTdhZTk0YTNlNjBlZDk1ZjAwZmY4
MS4uMjFkMGMyYzlhMDZkMGU3ZTUwMzg1NTgyY2E1MmQ1ZDdkNWEwNTM3MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3Bw
CkBAIC04Miw2ICs4MiwxMyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hh
bmdlRmlsdGVycygpCiB9CiAjZW5kaWYKIAordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OmRpZENoYW5nZUNvbXBvc2l0ZWRJbWFnZSgpCit7CisgICAgbV9zaG91bGRTeW5jQ29tcG9zaXRl
ZEltYWdlID0gdHJ1ZTsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5ub3Rp
ZnlGbHVzaFJlcXVpcmVkKHRoaXMpOworfQorCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6c2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKQogewogICAgIG1fc2hvdWxkVXBkYXRlVmlz
aWJsZVJlY3QgPSB0cnVlOwpAQCAtMTA1LDExICsxMTIsMTMgQEAgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xp
ZW50KQogICAgICwgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSh0cnVlKQogICAgICwgbV9zaG91bGRT
eW5jQ2hpbGRyZW4odHJ1ZSkKICAgICAsIG1fc2hvdWxkU3luY0ZpbHRlcnModHJ1ZSkKKyAgICAs
IG1fc2hvdWxkU3luY0NvbXBvc2l0ZWRJbWFnZSh0cnVlKQogICAgICwgbV9zaG91bGRTeW5jQW5p
bWF0aW9ucyh0cnVlKQogICAgICwgbV9maXhlZFRvVmlld3BvcnQoZmFsc2UpCiAgICAgLCBtX2Nh
bnZhc05lZWRzRGlzcGxheShmYWxzZSkKICAgICAsIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Q2xpZW50KDApCiAgICAgLCBtX2NvbnRlbnRzU2NhbGUoMSkKKyAgICAsIG1fY29tcG9zaXRlZE5h
dGl2ZUltYWdlUHRyKDApCiAgICAgLCBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIoMCkKICAgICAsIG1f
YW5pbWF0aW9uU3RhcnRlZFRpbWVyKHRoaXMsICZDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFu
aW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKQogewpAQCAtMzE4LDkgKzMyNyw2IEBAIHZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgcikK
IAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5
KCkKIHsKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gbV9pbWFnZTsKLSAgICBzZXRDb250ZW50
c1RvSW1hZ2UoMCk7Ci0gICAgc2V0Q29udGVudHNUb0ltYWdlKGltYWdlLmdldCgpKTsKICAgICBt
X2NhbnZhc05lZWRzRGlzcGxheSA9IHRydWU7CiAgICAgaWYgKGNsaWVudCgpKQogICAgICAgICBj
bGllbnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKQEAgLTM0NywyNSArMzUzLDI2IEBA
IGJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9w
ZXJhdGlvbnMmIG5ld0ZpbHRlcnMpCiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpz
ZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQogewotICAgIGlmIChpbWFnZSA9PSBtX2lt
YWdlKQotICAgICAgICByZXR1cm47Ci0gICAgaW50NjRfdCBuZXdJRCA9IDA7Ci0gICAgaWYgKG1f
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KSB7Ci0gICAgICAgIC8vIFdlIGFkb3B0IGZp
cnN0LCBpbiBjYXNlIHRoaXMgaXMgdGhlIHNhbWUgZnJhbWUgLSB0aGF0IHdheSB3ZSBhdm9pZCBk
ZXN0cm95aW5nIGFuZCByZWNyZWF0aW5nIHRoZSBpbWFnZS4KLSAgICAgICAgbmV3SUQgPSBtX0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShpbWFn
ZSk7Ci0gICAgICAgIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5yZWxlYXNlSW1h
Z2VCYWNraW5nU3RvcmUobV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCk7Ci0gICAgICAg
IGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLSAgICAgICAgaWYgKG1fbGF5ZXJJbmZvLmltYWdlQmFj
a2luZ1N0b3JlSUQgJiYgbmV3SUQgPT0gbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCkK
KyAgICBpZiAoaW1hZ2UpIHsKKyAgICAgICAgLy8gTWFrZSB0aGUgZGVjaXNpb24gYWJvdXQgd2hl
dGhlciB0aGUgaW1hZ2UgaGFzIGNoYW5nZWQuCisgICAgICAgIC8vIFRoaXMgY29kZSBtYWtlcyB0
aGUgYXNzdW1wdGlvbiB0aGF0IHBvaW50ZXIgZXF1YWxpdHkgb24gYSBOYXRpdmVJbWFnZVB0ciBp
cyBhIHZhbGlkIHdheSB0byB0ZWxsIGlmIHRoZSBpbWFnZSBpcyBjaGFuZ2VkLgorICAgICAgICAv
LyBUaGlzIGFzc3VtcHRpb24gaXMgdHJ1ZSBpbiBRdCwgR1RLIGFuZCBFRkwuCisgICAgICAgIE5h
dGl2ZUltYWdlUHRyIG5ld05hdGl2ZUltYWdlUHRyID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCk7CisgICAgICAgIGlmICghbmV3TmF0aXZlSW1hZ2VQdHIpCiAgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgaWYgKG5ld05hdGl2ZUltYWdlUHRyID09IG1fY29tcG9zaXRl
ZE5hdGl2ZUltYWdlUHRyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fY29tcG9z
aXRlZEltYWdlID0gaW1hZ2U7CisgICAgICAgIG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyID0g
bmV3TmF0aXZlSW1hZ2VQdHI7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgbV9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQgaXMgbm90IHNldCB5ZXQgdGhlcmUgc2hvdWxkIGJlIG5v
IGJhY2tpbmcgc3RvcmUgSUQuCi0gICAgICAgIEFTU0VSVCghbV9sYXllckluZm8uaW1hZ2VCYWNr
aW5nU3RvcmVJRCk7Ci0gICAgICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKKyAgICAgICAgbV9j
b21wb3NpdGVkSW1hZ2UgPSAwOworICAgICAgICBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0ciA9
IDA7CiAgICAgfQogCi0gICAgbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCA9IG5ld0lE
OwotICAgIG1faW1hZ2UgPSBpbWFnZTsKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Rv
SW1hZ2UoaW1hZ2UpOworICAgIGRpZENoYW5nZUNvbXBvc2l0ZWRJbWFnZSgpOwogfQogCiB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxh
eWVyKQpAQCAtNDA4LDYgKzQxNSw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpz
ZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIGlmICht
X21haW5CYWNraW5nU3RvcmUpCiAgICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+aW52YWxpZGF0
ZShJbnRSZWN0KHJlY3QpKTsKKyAgICBlbHNlIGlmIChtX2NvbXBvc2l0ZWRJbWFnZUJhY2tpbmdT
dG9yZSkKKyAgICAgICAgbV9jb21wb3NpdGVkSW1hZ2VCYWNraW5nU3RvcmUtPmludmFsaWRhdGUo
SW50UmVjdChyZWN0KSk7CiAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwogfQogCkBAIC00NTks
NiArNDY4LDI1IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jRmlsdGVycygp
CiB9CiAjZW5kaWYKIAordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3Np
dGVkSW1hZ2UoKQoreworICAgIGlmICghbV9zaG91bGRTeW5jQ29tcG9zaXRlZEltYWdlKQorICAg
ICAgICByZXR1cm47CisgICAgbV9zaG91bGRTeW5jQ29tcG9zaXRlZEltYWdlID0gZmFsc2U7CisK
KyAgICBpZiAobV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIpIHsKKyAgICAgICAgQVNTRVJUKCFt
X21haW5CYWNraW5nU3RvcmUpOworICAgICAgICBpZiAoIW1fY29tcG9zaXRlZEltYWdlQmFja2lu
Z1N0b3JlKQorICAgICAgICAgICAgbV9jb21wb3NpdGVkSW1hZ2VCYWNraW5nU3RvcmUgPSBhZG9w
dFB0cihuZXcgVGlsZWRCYWNraW5nU3RvcmUodGhpcywgQ29vcmRpbmF0ZWRUaWxlQmFja2VuZDo6
Y3JlYXRlKHRoaXMpKSk7CisgICAgICAgIG1fY29tcG9zaXRlZEltYWdlQmFja2luZ1N0b3JlLT5j
b3ZlcldpdGhUaWxlc0lmTmVlZGVkKCk7CisgICAgICAgIG1fY29tcG9zaXRlZEltYWdlQmFja2lu
Z1N0b3JlLT5pbnZhbGlkYXRlKHRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCkpOworICAg
ICAgICBtX2luVXBkYXRlTW9kZSA9IHRydWU7CisgICAgICAgIG1fY29tcG9zaXRlZEltYWdlQmFj
a2luZ1N0b3JlLT51cGRhdGVUaWxlQnVmZmVycygpOworICAgICAgICBtX2luVXBkYXRlTW9kZSA9
IGZhbHNlOworICAgIH0gZWxzZQorICAgICAgICBtX2NvbXBvc2l0ZWRJbWFnZUJhY2tpbmdTdG9y
ZS5jbGVhcigpOworfQorCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0xheWVy
U3RhdGUoKQogewogICAgIGlmICghbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSkKQEAgLTQ3MSw3ICs0
OTksOCBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0xheWVyU3RhdGUoKQog
ICAgIG1fbGF5ZXJJbmZvLmNoaWxkcmVuVHJhbnNmb3JtID0gY2hpbGRyZW5UcmFuc2Zvcm0oKTsK
ICAgICBtX2xheWVySW5mby5jb250ZW50c09wYXF1ZSA9IGNvbnRlbnRzT3BhcXVlKCk7CiAgICAg
bV9sYXllckluZm8uY29udGVudHNSZWN0ID0gY29udGVudHNSZWN0KCk7Ci0gICAgbV9sYXllcklu
Zm8uZHJhd3NDb250ZW50ID0gZHJhd3NDb250ZW50KCk7CisgICAgLy8gVUkgUHJvY2VzcyBkZWFs
cyB3aXRoIGEgY29tcG9zaXRlZCBpbWFnZSBhcyBhIGNvbnRlbnQuCisgICAgbV9sYXllckluZm8u
ZHJhd3NDb250ZW50ID0gZHJhd3NDb250ZW50KCkgfHwgbV9jb21wb3NpdGVkSW1hZ2VCYWNraW5n
U3RvcmU7CiAgICAgbV9sYXllckluZm8uY29udGVudHNWaXNpYmxlID0gY29udGVudHNBcmVWaXNp
YmxlKCk7CiAgICAgbV9sYXllckluZm8ubWFzayA9IHRvV2ViTGF5ZXJJRChtYXNrTGF5ZXIoKSk7
CiAgICAgbV9sYXllckluZm8ubWFza3NUb0JvdW5kcyA9IG1hc2tzVG9Cb3VuZHMoKTsKQEAgLTUx
MiwxOCArNTQxLDggQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMo
KQogICAgIG1fY2FudmFzTmVlZHNEaXNwbGF5ID0gZmFsc2U7CiB9CiAKLXZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjplbnN1cmVJbWFnZUJhY2tpbmdTdG9yZSgpCi17Ci0gICAgaWYgKCFt
X2ltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX2xheWVySW5mby5pbWFnZUJhY2tp
bmdTdG9yZUlEKQotICAgICAgICBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEID0gbV9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUobV9p
bWFnZS5nZXQoKSk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpmbHVzaENv
bXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKIHsKLSAgICAvLyBUaGUgcmVtb3RlIGlt
YWdlIG1pZ2h0IGhhdmUgYmVlbiByZWxlYXNlZCBieSBwdXJnZUJhY2tpbmdTdG9yZXMuCi0gICAg
ZW5zdXJlSW1hZ2VCYWNraW5nU3RvcmUoKTsKICAgICBzeW5jTGF5ZXJTdGF0ZSgpOwogICAgIHN5
bmNBbmltYXRpb25zKCk7CiAgICAgY29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKTsKQEAg
LTUzMiw2ICs1NTEsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Zmx1c2hDb21w
b3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCiAgICAgc3luY0ZpbHRlcnMoKTsKICNlbmRp
ZgogICAgIHVwZGF0ZUNvbnRlbnRCdWZmZXJzKCk7CisgICAgc3luY0NvbXBvc2l0ZWRJbWFnZSgp
OwogICAgIHN5bmNDYW52YXMoKTsKIH0KIApAQCAtNTQ5LDYgKzU2OSw3IEBAIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9y
KGNvbnN0IEZsb2F0CiB7CiAgICAgaWYgKG1fbWFpbkJhY2tpbmdTdG9yZSkKICAgICAgICAgbV9t
YWluQmFja2luZ1N0b3JlLT5jb3ZlcldpdGhUaWxlc0lmTmVlZGVkKHRyYWplY3RvcnlWZWN0b3Ip
OworICAgIEFTU0VSVCghbV9jb21wb3NpdGVkSW1hZ2VCYWNraW5nU3RvcmUpOwogfQogCiB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNTY2FsZShmbG9hdCBzY2FsZSkK
QEAgLTU5Myw2ICs2MTQsMTMgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVk
QmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAogewogICAgIGlmIChy
ZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fY29tcG9zaXRlZElt
YWdlQmFja2luZ1N0b3JlKSB7CisgICAgICAgIEFTU0VSVCghbV9tYWluQmFja2luZ1N0b3JlKTsK
KyAgICAgICAgcGFpbnRDb21wb3NpdGVkSW1hZ2UoY29udGV4dCwgcmVjdCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cygqY29udGV4dCwg
cmVjdCk7CiB9CiAKQEAgLTYzNyw2ICs2NjUsMTMgQEAgQ29sb3IgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcigpIGNvbnN0CiAgICAgcmV0
dXJuIGNvbnRlbnRzT3BhcXVlKCkgPyBDb2xvcjo6d2hpdGUgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7
CiB9CiAKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpwYWludENvbXBvc2l0ZWRJbWFn
ZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAg
QVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fY29tcG9zaXRlZEltYWdlQmFj
a2luZ1N0b3JlKTsKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2UobV9jb21wb3NpdGVkSW1hZ2UuZ2V0
KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIHJlY3QpOworfQorCiBQYXNzT3duUHRyPEdyYXBoaWNz
Q29udGV4dD4gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpiZWdpbkNvbnRlbnRVcGRhdGUoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgQ29vcmRpbmF0ZWRTdXJmYWNlSUQmIGlkLCBJbnRQb2ludCYgb2Zm
c2V0KQogewogICAgIHJldHVybiBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+YmVn
aW5Db250ZW50VXBkYXRlKHNpemUsICFjb250ZW50c09wYXF1ZSgpLCBpZCwgb2Zmc2V0KTsKQEAg
LTY4NCwxMSArNzE5LDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnB1cmdlQmFj
a2luZ1N0b3JlcygpCiB7CiAgICAgbV9tYWluQmFja2luZ1N0b3JlLmNsZWFyKCk7CiAgICAgbV9w
cmV2aW91c0JhY2tpbmdTdG9yZS5jbGVhcigpOwotCi0gICAgaWYgKG1fbGF5ZXJJbmZvLmltYWdl
QmFja2luZ1N0b3JlSUQpIHsKLSAgICAgICAgbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGll
bnQtPnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9y
ZUlEKTsKLSAgICAgICAgbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCA9IDA7Ci0gICAg
fQorICAgIG1fY29tcG9zaXRlZEltYWdlQmFja2luZ1N0b3JlLmNsZWFyKCk7CiAKICAgICBkaWRD
aGFuZ2VMYXllclN0YXRlKCk7CiAgICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKQEAgLTcyMiw2ICs3
NTMsOSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YWRqdXN0VmlzaWJsZVJlY3Qo
KQogewogICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUpCiAgICAgICAgIG1fbWFpbkJhY2tpbmdT
dG9yZS0+Y292ZXJXaXRoVGlsZXNJZk5lZWRlZCgpOworICAgIGlmIChtX2NvbXBvc2l0ZWRJbWFn
ZUJhY2tpbmdTdG9yZSkKKyAgICAgICAgbV9jb21wb3NpdGVkSW1hZ2VCYWNraW5nU3RvcmUtPmNv
dmVyV2l0aFRpbGVzSWZOZWVkZWQoKTsKKyAgICBBU1NFUlQoIShtX21haW5CYWNraW5nU3RvcmUg
JiYgbV9jb21wb3NpdGVkSW1hZ2VCYWNraW5nU3RvcmUpKTsKIH0KIAogYm9vbCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6Omhhc1BlbmRpbmdWaXNpYmxlQ2hhbmdlcygpCkBAIC03MzQsNyArNzY4
LDcgQEAgYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6Omhhc1BlbmRpbmdWaXNpYmxlQ2hh
bmdlcygpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoIW1fc2hv
dWxkU3luY0xheWVyU3RhdGUgJiYgIW1fc2hvdWxkU3luY0NoaWxkcmVuICYmICFtX3Nob3VsZFN5
bmNGaWx0ZXJzICYmICFtX3Nob3VsZFN5bmNBbmltYXRpb25zICYmICFtX2NhbnZhc05lZWRzRGlz
cGxheSkKKyAgICBpZiAoIW1fc2hvdWxkU3luY0xheWVyU3RhdGUgJiYgIW1fc2hvdWxkU3luY0No
aWxkcmVuICYmICFtX3Nob3VsZFN5bmNGaWx0ZXJzICYmICFtX3Nob3VsZFN5bmNDb21wb3NpdGVk
SW1hZ2UgJiYgIW1fc2hvdWxkU3luY0FuaW1hdGlvbnMgJiYgIW1fY2FudmFzTmVlZHNEaXNwbGF5
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gc2VsZk9yQW5jZXN0b3JIYXZl
Tm9uQWZmaW5lVHJhbnNmb3JtcygpIHx8ICF0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KCku
aXNFbXB0eSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIuaAppbmRleCA4ODdjNjczNzI4N2MxMGE1MmJjMTA3NDJkNjc4ZDQ0ZDU5
ZmE1ZWMxLi5hZjk4YzNmYjZlYTI4M2I1MDcyNmYyZTg2NDUyZTMwMzFkN2JkMjI5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
aApAQCAtNTYsOCArNTYsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJl
Y3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgbGF5
ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgaW50NjRf
dCBhZG9wdEltYWdlQmFja2luZ1N0b3JlKFdlYkNvcmU6OkltYWdlKikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShXZWJMYXllcklELCBjb25zdCBXZWJMYXllckluZm8mKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKFdlYkxheWVySUQsIGNvbnN0
IFZlY3RvcjxXZWJMYXllcklEPiYpID0gMDsKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCkBAIC0x
NjcsNiArMTY1LDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAgdm9p
ZCBkaWRDaGFuZ2VGaWx0ZXJzKCk7CiAjZW5kaWYKKyAgICB2b2lkIGRpZENoYW5nZUNvbXBvc2l0
ZWRJbWFnZSgpOwogCiAgICAgdm9pZCBzeW5jTGF5ZXJTdGF0ZSgpOwogICAgIHZvaWQgc3luY0Fu
aW1hdGlvbnMoKTsKQEAgLTE3NCw2ICsxNzMsNyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykKICAgICB2b2lkIHN5bmNGaWx0ZXJzKCk7CiAjZW5kaWYKKyAgICB2b2lkIHN5bmND
b21wb3NpdGVkSW1hZ2UoKTsKICAgICB2b2lkIHN5bmNDYW52YXMoKTsKICAgICB2b2lkIGVuc3Vy
ZUltYWdlQmFja2luZ1N0b3JlKCk7CiAgICAgdm9pZCBjb21wdXRlVHJhbnNmb3JtZWRWaXNpYmxl
UmVjdCgpOwpAQCAtMTg4LDExICsxODgsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFNob3Vs
ZFVwZGF0ZVZpc2libGVSZWN0KCk7CiAgICAgZmxvYXQgZWZmZWN0aXZlQ29udGVudHNTY2FsZSgp
OwogCisgICAgdm9pZCBwYWludENvbXBvc2l0ZWRJbWFnZShHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBJbnRSZWN0Jik7CisKICAgICB2b2lkIGFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRpbWVy
PENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcj4qKTsKIAogICAgIFdlYktpdDo6V2ViTGF5ZXJJRCBt
X2lkOwogICAgIFdlYktpdDo6V2ViTGF5ZXJJbmZvIG1fbGF5ZXJJbmZvOwotICAgIFJlZlB0cjxJ
bWFnZT4gbV9pbWFnZTsKICAgICBHcmFwaGljc0xheWVyKiBtX21hc2tUYXJnZXQ7CiAgICAgRmxv
YXRSZWN0IG1fbmVlZHNEaXNwbGF5UmVjdDsKICAgICBHcmFwaGljc0xheWVyVHJhbnNmb3JtIG1f
bGF5ZXJUcmFuc2Zvcm07CkBAIC0yMDEsNiArMjAyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
c2hvdWxkU3luY0xheWVyU3RhdGU6IDE7CiAgICAgYm9vbCBtX3Nob3VsZFN5bmNDaGlsZHJlbjog
MTsKICAgICBib29sIG1fc2hvdWxkU3luY0ZpbHRlcnM6IDE7CisgICAgYm9vbCBtX3Nob3VsZFN5
bmNDb21wb3NpdGVkSW1hZ2U6IDE7CiAgICAgYm9vbCBtX3Nob3VsZFN5bmNBbmltYXRpb25zOiAx
OwogICAgIGJvb2wgbV9maXhlZFRvVmlld3BvcnQgOiAxOwogICAgIGJvb2wgbV9jYW52YXNOZWVk
c0Rpc3BsYXkgOiAxOwpAQCAtMjEyLDYgKzIxNCwxMiBAQCBwcml2YXRlOgogICAgIE93blB0cjxU
aWxlZEJhY2tpbmdTdG9yZT4gbV9tYWluQmFja2luZ1N0b3JlOwogICAgIE93blB0cjxUaWxlZEJh
Y2tpbmdTdG9yZT4gbV9wcmV2aW91c0JhY2tpbmdTdG9yZTsKICAgICBmbG9hdCBtX2NvbnRlbnRz
U2NhbGU7CisKKyAgICAvLyBXaGVuIG1fY29tcG9zaXRlZEltYWdlIGV4aXN0cywgdGhpcyBsYXll
ciBjYW5ub3QgYmUgYSBjb250ZW50IGxheWVyLCBiZWNhdXNlIHNldERyYXdzQ29udGVudCBhbmQg
c2V0Q29udGVudHNUb0ltYWdlIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCisgICAgUmVmUHRyPElt
YWdlPiBtX2NvbXBvc2l0ZWRJbWFnZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBtX2NvbXBvc2l0ZWRO
YXRpdmVJbWFnZVB0cjsKKyAgICBPd25QdHI8VGlsZWRCYWNraW5nU3RvcmU+IG1fY29tcG9zaXRl
ZEltYWdlQmFja2luZ1N0b3JlOworCiAgICAgUGxhdGZvcm1MYXllciogbV9jYW52YXNQbGF0Zm9y
bUxheWVyOwogICAgIFRpbWVyPENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcj4gbV9hbmltYXRpb25T
dGFydGVkVGltZXI7CiAgICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMgbV9hbmltYXRpb25zOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3Bw
CmluZGV4IDYxMjcyOTA2MzExOWM5YzExOTFlNzBlYTcyMzQ2YTU3NmRkYzE5Y2EuLjNiODJlN2Y3
MTBhMGJmNzAyMzNiZDhlNWJiNWFiMmY5YzdkYjY1ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3Jk
aW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAKQEAgLTI2OCw4ICsyNjgsNiBA
QCBib29sIExheWVyVHJlZUNvb3JkaW5hdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKQog
CiAgICAgbV9yb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHko
KTsKIAotICAgIHB1cmdlUmVsZWFzZWRJbWFnZXMoKTsKLQogICAgIGlmIChtX3Nob3VsZFN5bmNS
b290TGF5ZXIpIHsKICAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVD
b29yZGluYXRvclByb3h5OjpTZXRSb290Q29tcG9zaXRpbmdMYXllcih0b0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmlkKCkpKTsKICAgICAgICAgbV9zaG91bGRT
eW5jUm9vdExheWVyID0gZmFsc2U7CkBAIC00NDgsMTMgKzQ0Niw2IEBAIHZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OmRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCkKICAgICB9CiB9CiAK
LXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnB1cmdlUmVsZWFzZWRJbWFnZXMoKQotewotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9yZWxlYXNlZERpcmVjdGx5Q29tcG9zaXRlZEltYWdl
cy5zaXplKCk7ICsraSkKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRy
ZWVDb29yZGluYXRvclByb3h5OjpEZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UobV9yZWxl
YXNlZERpcmVjdGx5Q29tcG9zaXRlZEltYWdlc1tpXSkpOwotICAgIG1fcmVsZWFzZWREaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZXMuY2xlYXIoKTsKLX0KLQogdm9pZCBMYXllclRyZWVDb29yZGluYXRv
cjo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoVGltZXI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+KikKIHsK
ICAgICBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOwpAQCAtNDgyLDgwICs0NzMsNiBAQCB2
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpCiAgICAg
bV9wYWdlT3ZlcmxheUxheWVyID0gbnVsbHB0cjsKIH0KIAotaW50NjRfdCBMYXllclRyZWVDb29y
ZGluYXRvcjo6YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShJbWFnZSogaW1hZ2UpCi17Ci0gICAgaWYg
KCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIEludmFsaWRXZWJMYXllcklEOwotCi0gICAgaW50NjRf
dCBrZXkgPSAwOwotCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgUVBpeG1hcCogbmF0aXZlSW1hZ2Ug
PSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLQotICAgIGlmICghbmF0aXZl
SW1hZ2UpCi0gICAgICAgIHJldHVybiBJbnZhbGlkV2ViTGF5ZXJJRDsKLQotICAgIGtleSA9IG5h
dGl2ZUltYWdlLT5jYWNoZUtleSgpOwotI2VsaWYgVVNFKENBSVJPKQotICAgIE5hdGl2ZUltYWdl
Q2Fpcm8qIG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7
Ci0gICAgaWYgKCFuYXRpdmVJbWFnZSkKLSAgICAgICAgcmV0dXJuIEludmFsaWRXZWJMYXllcklE
OwotICAgIC8vIFRoaXMgY2FuIGJlIHNhZmVseSBkb25lIHNpbmNlIHdlIG93biB0aGUgcmVmZXJl
bmNlLgotICAgIC8vIEEgY29ycmVzcG9uZGluZyBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koKSBpcyBl
bnN1cmVkIGluIHJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZSgpLgotICAgIGNhaXJvX3N1cmZhY2Vf
dCogY2Fpcm9TdXJmYWNlID0gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UobmF0aXZlSW1hZ2UtPnN1
cmZhY2UoKSk7Ci0gICAga2V5ID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90PihjYWlyb1N1cmZh
Y2UpOwotI2VuZGlmCi0KLSAgICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJhdG9yIGl0ID0g
bV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7Ci0KLSAgICBpZiAo
aXQgIT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQoKSkgewotICAgICAg
ICArKyhpdC0+dmFsdWUpOwotICAgICAgICByZXR1cm4ga2V5OwotICAgIH0KLQotICAgIC8vIENo
ZWNrIGlmIHdlIHdlcmUgZ29pbmcgdG8gcmVsZWFzZSB0aGlzIGltYWdlIGR1cmluZyB0aGUgbmV4
dCBmbHVzaC4KLSAgICBzaXplX3QgcmVsZWFzZWRJbmRleCA9IG1fcmVsZWFzZWREaXJlY3RseUNv
bXBvc2l0ZWRJbWFnZXMuZmluZChrZXkpOwotICAgIGlmIChyZWxlYXNlZEluZGV4ID09IG5vdEZv
dW5kKSB7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGltYWdlLT5zaXplKCksIChpbWFnZS0+Y3VycmVudEZy
YW1lSGFzQWxwaGEoKSA/IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSA6IDApKTsKLSAg
ICAgICAgewotICAgICAgICAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gZ3Jh
cGhpY3NDb250ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKLSAgICAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdC
LCBJbnRQb2ludDo6emVybygpKTsKLSAgICAgICAgfQotICAgICAgICBTaGFyZWFibGVCaXRtYXA6
OkhhbmRsZSBoYW5kbGU7Ci0gICAgICAgIGJpdG1hcC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSk7Ci0g
ICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eTo6Q3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Uoa2V5LCBoYW5kbGUpKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgbV9yZWxlYXNlZERpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5yZW1vdmUocmVs
ZWFzZWRJbmRleCk7Ci0KLSAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmFk
ZChrZXksIDEpOwotICAgIHJldHVybiBrZXk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90IGtleSkKLXsKLSAgICBpZiAoIWtl
eSkKLSAgICAgICAgcmV0dXJuOwotICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3Ig
aXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5KTsKLSAgICBp
ZiAoaXQgPT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaXQtPnZhbHVlLS07Ci0KLSAgICBpZiAoaXQtPnZhbHVlKQotICAg
ICAgICByZXR1cm47Ci0KLSNpZiBVU0UoQ0FJUk8pCi0gICAgLy8gQ29tcGxlbWVudCB0aGUgcmVm
ZXJlbmNpbmcgaW4gYWRvcHRJbWFnZUJhY2tpbmdTdG9yZSgpLgotICAgIGNhaXJvX3N1cmZhY2Vf
dCogY2Fpcm9TdXJmYWNlID0gcmVpbnRlcnByZXRfY2FzdDxjYWlyb19zdXJmYWNlX3QqPihrZXkp
OwotICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShjYWlyb1N1cmZhY2UpOwotI2VuZGlmCi0KLSAg
ICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnJlbW92ZShpdCk7Ci0gICAgbV9y
ZWxlYXNlZERpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5hcHBlbmQoa2V5KTsKLSAgICBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKLX0KLQotCiB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpub3RpZnlB
bmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgLyog
dGltZSAqLykKIHsKIH0KQEAgLTcwNiwxMCArNjIzLDYgQEAgdm9pZCBMYXllclRyZWVDb29yZGlu
YXRvcjo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKICAgICBmb3IgKEhhc2hTZXQ8V2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgKCppdCktPnB1cmdlQmFja2luZ1N0
b3JlcygpOwogCi0gICAgcHVyZ2VSZWxlYXNlZEltYWdlcygpOwotCi0gICAgQVNTRVJUKCFtX2Rp
cmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnNpemUoKSk7Ci0gICAgQVNTRVJUKCFtX3Jl
bGVhc2VkRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnNpemUoKSk7CiAgICAgbV91cGRhdGVBdGxh
c2VzLmNsZWFyKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVDb29yZGluYXRvci5oCmluZGV4IGU3M2E4ZDZhMDhmZjdiYzk1NzkwNmJiNDQwYTI1MTNmN2Uz
NjNhMWMuLjkwYjI4MzNlNTE4NTgyYWJjZjc2MzQwNTliMDgyY2Q2ODJiYjA4NDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0xheWVyVHJlZUNvb3JkaW5hdG9yLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaApAQCAtNjcs
OCArNjcsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCkgeyBt
X2lzU3VzcGVuZGVkID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmco
KSB7IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsgc2NoZWR1bGVMYXllckZsdXNoKCk7IH0KICAgICB2
aXJ0dWFsIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKSB7IH0KLSAgICB2aXJ0dWFs
IGludDY0X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9yZShXZWJDb3JlOjpJbWFnZSopOwotICAgIHZp
cnR1YWwgdm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCk7CiAKICAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNl
VXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5m
byYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKQEAgLTEyOCw3ICsxMjYsNiBAQCBwcml2YXRl
OgogICAgIHZvaWQgc3luY0Rpc3BsYXlTdGF0ZSgpOwogICAgIHZvaWQgbG9ja0FuaW1hdGlvbnMo
KTsKICAgICB2b2lkIHVubG9ja0FuaW1hdGlvbnMoKTsKLSAgICB2b2lkIHB1cmdlUmVsZWFzZWRJ
bWFnZXMoKTsKIAogICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8
TGF5ZXJUcmVlQ29vcmRpbmF0b3I+Kik7CiAKQEAgLTE0OSw4ICsxNDYsNiBAQCBwcml2YXRlOgog
CiAgICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiBtX3JlZ2lz
dGVyZWRMYXllcnM7CiAgICAgVmVjdG9yPFdlYkxheWVySUQ+IG1fZGV0YWNoZWRMYXllcnM7Ci0g
ICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3Vu
dHM7Ci0gICAgVmVjdG9yPGludDY0X3Q+IG1fcmVsZWFzZWREaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZXM7CiAgICAgVmVjdG9yPE93blB0cjxVcGRhdGVBdGxhcz4gPiBtX3VwZGF0ZUF0bGFzZXM7CiAK
ICAgICBib29sIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOwo=
</data>
<flag name="review"
          id="186146"
          type_id="1"
          status="-"
          setter="noam"
    />
    <flag name="commit-queue"
          id="186147"
          type_id="3"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172236</attachid>
            <date>2012-11-03 18:36:21 -0700</date>
            <delta_ts>2012-11-07 02:19:47 -0800</delta_ts>
            <desc>WIP patch (not for review)</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>26397</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">Y29tbWl0IDIzZGE3ZjAxNWQyMWE1M2U3YjQ3MTExMmE0MTkzMDRlNTkxMWY4M2UKQXV0aG9yOiBO
b2FtIFJvc2VudGhhbCA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgpEYXRlOiAgIFNhdCBOb3Yg
MyAxODozMzowNyAyMDEyIC0wNzAwCgogICAgVGlsZWQgSW1hZ2UKCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCBh
NzZhZTc1Li5mNzI0MzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTk1Niw2ICs5NTYsNyBAQCBTT1VSQ0VT
ICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJhY2tMaXN0LmNwcCBcCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbWlseS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRGZWF0dXJlU2V0dGluZ3MuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9BdG9taWNJ
bWFnZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcCBcCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Dcm9z
c2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAgXApAQCAtMjA2OSw2ICsyMDcwLDcgQEAgSEVBREVSUyAr
PSBcCiAgICAgcGxhdGZvcm0vbW9jay9EZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2suaCBcCiAg
ICAgcGxhdGZvcm0vbW9jay9HZW9sb2NhdGlvbkNsaWVudE1vY2suY3BwIFwKICAgICBwbGF0Zm9y
bS9tb2NrL1Njcm9sbGJhclRoZW1lTW9jay5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9BdG9t
aWNJbWFnZS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oIFwKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Dcm9zc2Zh
ZGVHZW5lcmF0ZWRJbWFnZS5oIFwKQEAgLTI3ODksNiArMjc5MSw3IEBAIFNPVVJDRVMgKz0gXAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ljb25RdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFn
ZURlY29kZXJRdC5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0F0b21pY0ltYWdlUXQu
Y3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcCBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvSW50UG9pbnRRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L0ludFJlY3RRdC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQXRvbWljSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
QXRvbWljSW1hZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYzk2
MjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9B
dG9taWNJbWFnZS5jcHAKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkF0b21pY0ltYWdlLmgiCisKKyNpbmNs
dWRlICJCaXRtYXBJbWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0F0b21pY0ltYWdl
OjpBdG9taWNJbWFnZShJbWFnZSogaW1hZ2UpCisjaWYgVVNFKENBSVJPKQorICAgIDogbV9wbGF0
Zm9ybUF0b21pY0ltYWdlKDApCisjZW5kaWYKK3sKKyAgICBpZiAoIWltYWdlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBleHRyYWN0KGltYWdlKTsKKworICAgIHJlZigpOworfQorQXRvbWljSW1h
Z2U6OkF0b21pY0ltYWdlKGNvbnN0IEF0b21pY0ltYWdlJiBvdGhlcikKKyAgICA6IG1fcGxhdGZv
cm1BdG9taWNJbWFnZShvdGhlci5tX3BsYXRmb3JtQXRvbWljSW1hZ2UpCit7CisgICAgcmVmKCk7
Cit9CisKK0F0b21pY0ltYWdlOjp+QXRvbWljSW1hZ2UoKQoreworICAgIGNsZWFyKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0F0b21pY0ltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9BdG9taWNJbWFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhm
OWVhMzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9BdG9taWNJbWFnZS5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQXRvbWljSW1hZ2VfaAorI2RlZmluZSBBdG9taWNJbWFnZV9oCisKKyNpbmNs
dWRlIDx3dGYvSGFzaFRyYWl0cy5oPgorI2luY2x1ZGUgIkltYWdlLmgiCisKKyNpZiBQTEFURk9S
TShRVCkKKyNpbmNsdWRlIDxRUGl4bWFwPgordHlwZWRlZiBRUGl4bWFwIFBsYXRmb3JtQXRvbWlj
SW1hZ2U7CisjZWxpZiBVU0UoQ0FJUk8pCit0eXBlZGVmIHN0cnVjdCBjYWlyb19zdXJmYWNlX3Qq
IFBsYXRmb3JtQXRvbWljSW1hZ2U7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBBdG9taWNJbWFnZSB7CitwdWJsaWM6CisgICAgQXRvbWljSW1hZ2UoSW1hZ2UqIGltYWdl
ID0gMCk7CisgICAgQXRvbWljSW1hZ2UoY29uc3QgQXRvbWljSW1hZ2UmKTsKKyAgICBpbmxpbmUg
QXRvbWljSW1hZ2UmIG9wZXJhdG9yPShjb25zdCBBdG9taWNJbWFnZSYgb3RoZXIpCisgICAgewor
ICAgICAgICBBdG9taWNJbWFnZSBjb3B5KG90aGVyKTsKKyAgICAgICAgc3RkOjpzd2FwKGNvcHku
bV9wbGF0Zm9ybUF0b21pY0ltYWdlLCBtX3BsYXRmb3JtQXRvbWljSW1hZ2UpOworICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgYm9vbCBpc051bGwoKSBjb25zdDsKKyAgICB2b2lk
IGNsZWFyKCk7CisgICAgaW5saW5lIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhaXNO
dWxsKCk7IH0KKworICAgIH5BdG9taWNJbWFnZSgpOworICAgIFBhc3NSZWZQdHI8SW1hZ2U+IHRv
SW1hZ2UoKSBjb25zdDsKKyAgICBpbnQ2NF90IGNhY2hlS2V5KCkgY29uc3Q7CisgICAgSW50U2l6
ZSBzaXplKCkgY29uc3Q7CisgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0OworCisgICAgc3RydWN0
IEhhc2ggeworICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBXZWJDb3JlOjpBdG9t
aWNJbWFnZSYga2V5KSAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtleS5jYWNoZUtl
eSgpKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBXZWJDb3JlOjpBdG9taWNJ
bWFnZSYgYSwgY29uc3QgV2ViQ29yZTo6QXRvbWljSW1hZ2UmIGIpIHsgcmV0dXJuIGEuY2FjaGVL
ZXkoKSA9PSBiLmNhY2hlS2V5KCk7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworICAgIH07CisKK3ByaXZhdGU6CisgICAg
dm9pZCByZWYoKTsKKyAgICB2b2lkIGV4dHJhY3QoSW1hZ2UqKTsKKyAgICBQbGF0Zm9ybUF0b21p
Y0ltYWdlIG1fcGxhdGZvcm1BdG9taWNJbWFnZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworbmFtZXNwYWNlIFdURiB7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxXZWJD
b3JlOjpBdG9taWNJbWFnZT4geyB0eXBlZGVmIFdlYkNvcmU6OkF0b21pY0ltYWdlOjpIYXNoIEhh
c2g7IH07Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPFdlYkNvcmU6OkF0b21pY0ltYWdl
PiA6IEdlbmVyaWNIYXNoVHJhaXRzPFdlYkNvcmU6OkF0b21pY0ltYWdlPiB7CisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRydWU7CisgICAgc3RhdGljIHZvaWQgY29u
c3RydWN0RGVsZXRlZFZhbHVlKFdlYkNvcmU6OkF0b21pY0ltYWdlJiBpbWFnZSkgeyBpbWFnZSA9
IFdlYkNvcmU6OkF0b21pY0ltYWdlKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1
ZShjb25zdCBXZWJDb3JlOjpBdG9taWNJbWFnZSYgaW1hZ2UpIHsgcmV0dXJuIGltYWdlLmlzTnVs
bCgpOyB9Cit9OworfQorCisjZW5kaWYgLy8gUGxhdGZvcm1JbWFnZVJlZl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9BdG9taWNJbWFnZUNhaXJv
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0F0b21pY0ltYWdl
Q2Fpcm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOWZmMGMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9B
dG9taWNJbWFnZUNhaXJvLmNwcApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQXRvbWljSW1hZ2UuaCIKKwor
I2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBB
dG9taWNJbWFnZTo6ZXh0cmFjdChJbWFnZSogaW1hZ2UpCit7CisgICAgbV9wbGF0Zm9ybUF0b21p
Y0ltYWdlID0gaW1hZ2UgPyBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKS0+c3Vy
ZmFjZSgpIDogMDsKK30KKwordm9pZCBBdG9taWNJbWFnZTo6cmVmKCkKK3sKKyAgICBtX3BsYXRm
b3JtQXRvbWljSW1hZ2UgPSBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZShtX3BsYXRmb3JtQXRvbWlj
SW1hZ2UpOworfQorCitib29sIEF0b21pY0ltYWdlOjppc051bGwoKSBjb25zdAoreworICAgIHJl
dHVybiAhbV9wbGF0Zm9ybUF0b21pY0ltYWdlOworfQorCit2b2lkIEF0b21pY0ltYWdlOjpjbGVh
cigpCit7CisgICAgaWYgKG1fcGxhdGZvcm1BdG9taWNJbWFnZSkKKyAgICAgICAgY2Fpcm9fc3Vy
ZmFjZV9kZXN0cm95KG1fcGxhdGZvcm1BdG9taWNJbWFnZSk7CisgICAgbV9wbGF0Zm9ybUF0b21p
Y0ltYWdlID0gMDsKK30KKworYm9vbCBBdG9taWNJbWFnZTo6aGFzQWxwaGEoKSBjb25zdAorewor
ICAgIHJldHVybiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9mb3JtYXQobV9wbGF0Zm9ybUF0b21p
Y0ltYWdlKSA9PSBDQUlST19GT1JNQVRfQVJHQjMyOworfQorCitpbnQ2NF90IEF0b21pY0ltYWdl
OjpjYWNoZUtleSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8aW50NjRf
dD4obV9wbGF0Zm9ybUF0b21pY0ltYWdlKTsKK30KKworSW50U2l6ZSBBdG9taWNJbWFnZTo6c2l6
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFNpemUoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
d2lkdGgobV9wbGF0Zm9ybUF0b21pY0ltYWdlKSwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVp
Z2h0KG1fcGxhdGZvcm1BdG9taWNJbWFnZSkpOworfQorCitQYXNzUmVmUHRyPEltYWdlPiBBdG9t
aWNJbWFnZTo6dG9JbWFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVh
dGUobmV3IE5hdGl2ZUltYWdlQ2Fpcm8obV9wbGF0Zm9ybUF0b21pY0ltYWdlKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0F0b21pY0ltYWdlUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvQXRvbWljSW1hZ2VRdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNDNiM2YxNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0F0b21pY0ltYWdlUXQuY3BwCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBdG9t
aWNJbWFnZS5oIgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit2b2lkIEF0b21pY0ltYWdlOjpleHRyYWN0KEltYWdlKiBpbWFnZSkKK3sKKyAgICBt
X3BsYXRmb3JtQXRvbWljSW1hZ2UgPSBpbWFnZSA/ICppbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKSA6IFFQaXhtYXAoKTsKK30KKwordm9pZCBBdG9taWNJbWFnZTo6cmVmKCkKK3sK
K30KKworYm9vbCBBdG9taWNJbWFnZTo6aXNOdWxsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
bGF0Zm9ybUF0b21pY0ltYWdlLmlzTnVsbCgpOworfQorCit2b2lkIEF0b21pY0ltYWdlOjpjbGVh
cigpCit7CisgICAgbV9wbGF0Zm9ybUF0b21pY0ltYWdlID0gUVBpeG1hcCgpOworfQorCitib29s
IEF0b21pY0ltYWdlOjpoYXNBbHBoYSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1B
dG9taWNJbWFnZS5oYXNBbHBoYSgpOworfQorCitpbnQ2NF90IEF0b21pY0ltYWdlOjpjYWNoZUtl
eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1BdG9taWNJbWFnZS5jYWNoZUtleSgp
OworfQorCitJbnRTaXplIEF0b21pY0ltYWdlOjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wbGF0Zm9ybUF0b21pY0ltYWdlLnNpemUoKTsKK30KKworUGFzc1JlZlB0cjxJbWFnZT4gQXRv
bWljSW1hZ2U6OnRvSW1hZ2UoKSBjb25zdAoreworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3Jl
YXRlKG5ldyBRUGl4bWFwKG1fcGxhdGZvcm1BdG9taWNJbWFnZSkpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmNwcAppbmRleCBhMGY0ZjY1Li4wMzkxMTlkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5j
cHAKQEAgLTMxNCwxMyArMzE0LDE5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpz
ZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgcikKIAogICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dENvbnRlbnRzUmVjdChyKTsKICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisKKyAgICBpZiAo
bV9oYXNUaWxlZEltYWdlKQorICAgICAgICBzZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpOwog
fQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rpc3Bs
YXkoKQogewotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBtX2ltYWdlOwotICAgIHNldENvbnRl
bnRzVG9JbWFnZSgwKTsKLSAgICBzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UuZ2V0KCkpOworICAg
IGlmIChtX2hhc1RpbGVkSW1hZ2UpIHsKKyAgICAgICAgbV9tYWluQmFja2luZ1N0b3JlLT5pbnZh
bGlkYXRlKGNvbnRlbnRzUmVjdCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNl
dENvbnRlbnRzVG9JbWFnZShtX29yaWdpbmFsSW1hZ2UuZ2V0KCkpOwogICAgIG1fY2FudmFzTmVl
ZHNEaXNwbGF5ID0gdHJ1ZTsKICAgICBpZiAoY2xpZW50KCkpCiAgICAgICAgIGNsaWVudCgpLT5u
b3RpZnlGbHVzaFJlcXVpcmVkKHRoaXMpOwpAQCAtMzQ0LDI4ICszNTAsMzYgQEAgYm9vbCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYg
bmV3RmlsdGVycykKIH0KICNlbmRpZgogCitzdGF0aWMgYm9vbCBzaG91bGRUaWxlKEltYWdlKiBp
bWFnZSkKK3sKKyAgICBlbnVtIHsga1RpbGVUaHJlc2hvbGQgPSAxMDI0IH07CisgICAgcmV0dXJu
IGltYWdlLT53aWR0aCgpID4ga1RpbGVUaHJlc2hvbGQgfHwgaW1hZ2UtPmhlaWdodCgpID4ga1Rp
bGVUaHJlc2hvbGQ7Cit9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250
ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQogewotICAgIGlmIChpbWFnZSA9PSBtX2ltYWdlKQor
ICAgIEF0b21pY0ltYWdlIG5ld0ltYWdlKGltYWdlKTsKKyAgICBpZiAobmV3SW1hZ2UgPT0gbV9p
bWFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9vcmlnaW5hbEltYWdlID0gaW1hZ2U7CisK
KyAgICBpZiAobV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQgJiYgbV9pbWFnZSkKKyAg
ICAgICAgbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPnJlbGVhc2VJbWFnZUJhY2tp
bmdTdG9yZShtX2ltYWdlKTsKKworICAgIG1faW1hZ2UgPSBuZXdJbWFnZTsKKyAgICBkaWRDaGFu
Z2VMYXllclN0YXRlKCk7CisKKyAgICBpZiAoc2hvdWxkVGlsZShpbWFnZSkpIHsKKyAgICAgICAg
bV9oYXNUaWxlZEltYWdlID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwotICAgIGludDY0X3QgbmV3
SUQgPSAwOwotICAgIGlmIChtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCkgewotICAg
ICAgICAvLyBXZSBhZG9wdCBmaXJzdCwgaW4gY2FzZSB0aGlzIGlzIHRoZSBzYW1lIGZyYW1lIC0g
dGhhdCB3YXkgd2UgYXZvaWQgZGVzdHJveWluZyBhbmQgcmVjcmVhdGluZyB0aGUgaW1hZ2UuCi0g
ICAgICAgIG5ld0lEID0gbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPmFkb3B0SW1h
Z2VCYWNraW5nU3RvcmUoaW1hZ2UpOwotICAgICAgICBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ckNsaWVudC0+cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKG1fbGF5ZXJJbmZvLmltYWdlQmFja2lu
Z1N0b3JlSUQpOwotICAgICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgICAgIGlmICht
X2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEICYmIG5ld0lEID09IG1fbGF5ZXJJbmZvLmlt
YWdlQmFja2luZ1N0b3JlSUQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgLy8gSWYgbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQgaXMgbm90IHNldCB5
ZXQgdGhlcmUgc2hvdWxkIGJlIG5vIGJhY2tpbmcgc3RvcmUgSUQuCi0gICAgICAgIEFTU0VSVCgh
bV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCk7Ci0gICAgICAgIGRpZENoYW5nZUxheWVy
U3RhdGUoKTsKICAgICB9CiAKLSAgICBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEID0g
bmV3SUQ7Ci0gICAgbV9pbWFnZSA9IGltYWdlOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRl
bnRzVG9JbWFnZShpbWFnZSk7CisgICAgbV9oYXNUaWxlZEltYWdlID0gZmFsc2U7CisKKyAgICBB
U1NFUlQobV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQgfHwgbV9pbWFnZS5pc051bGwo
KSk7CisgICAgaWYgKG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KQorICAgICAgICBt
X0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+YWRvcHRJbWFnZUJhY2tpbmdTdG9yZSht
X2ltYWdlKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXll
cihHcmFwaGljc0xheWVyKiBsYXllcikKQEAgLTQwNiw2ICs0MjAsOSBAQCB2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5KCkKIAogdm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CiB7CisgICAgaWYgKG1faGFzVGlsZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYg
KG1fbWFpbkJhY2tpbmdTdG9yZSkKICAgICAgICAgbV9tYWluQmFja2luZ1N0b3JlLT5pbnZhbGlk
YXRlKEludFJlY3QocmVjdCkpOwogICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKQEAgLTQ0MSw2
ICs0NTgsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0NoaWxkcmVuKCkK
IHsKICAgICBpZiAoIW1fc2hvdWxkU3luY0NoaWxkcmVuKQogICAgICAgICByZXR1cm47CisKICAg
ICBtX3Nob3VsZFN5bmNDaGlsZHJlbiA9IGZhbHNlOwogICAgIFZlY3RvcjxXZWJMYXllcklEPiBj
aGlsZElEczsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyAr
K2kpCkBAIC00NzEsNyArNDg5LDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5
bmNMYXllclN0YXRlKCkKICAgICBtX2xheWVySW5mby5jaGlsZHJlblRyYW5zZm9ybSA9IGNoaWxk
cmVuVHJhbnNmb3JtKCk7CiAgICAgbV9sYXllckluZm8uY29udGVudHNPcGFxdWUgPSBjb250ZW50
c09wYXF1ZSgpOwogICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzUmVjdCA9IGNvbnRlbnRzUmVjdCgp
OwotICAgIG1fbGF5ZXJJbmZvLmRyYXdzQ29udGVudCA9IGRyYXdzQ29udGVudCgpOworICAgIG1f
bGF5ZXJJbmZvLmRyYXdzQ29udGVudCA9IGRyYXdzQ29udGVudCgpIHx8IG1faGFzVGlsZWRJbWFn
ZTsKICAgICBtX2xheWVySW5mby5jb250ZW50c1Zpc2libGUgPSBjb250ZW50c0FyZVZpc2libGUo
KTsKICAgICBtX2xheWVySW5mby5tYXNrID0gdG9XZWJMYXllcklEKG1hc2tMYXllcigpKTsKICAg
ICBtX2xheWVySW5mby5tYXNrc1RvQm91bmRzID0gbWFza3NUb0JvdW5kcygpOwpAQCAtNDgyLDYg
KzUwMCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jTGF5ZXJTdGF0ZSgp
CiAgICAgbV9sYXllckluZm8ucmVwbGljYSA9IHRvV2ViTGF5ZXJJRChyZXBsaWNhTGF5ZXIoKSk7
CiAgICAgbV9sYXllckluZm8uc2l6ZSA9IHNpemUoKTsKICAgICBtX2xheWVySW5mby50cmFuc2Zv
cm0gPSB0cmFuc2Zvcm0oKTsKKyAgICBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEID0g
bV9oYXNUaWxlZEltYWdlID8gMCA6IG1faW1hZ2UuY2FjaGVLZXkoKTsKICAgICBtX0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0xheWVyU3RhdGUobV9pZCwgbV9sYXllckluZm8p
OwogfQogCkBAIC01MTIsMTggKzUzMSw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpzeW5jQ2FudmFzKCkKICAgICBtX2NhbnZhc05lZWRzRGlzcGxheSA9IGZhbHNlOwogfQogCi12
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZW5zdXJlSW1hZ2VCYWNraW5nU3RvcmUoKQot
ewotICAgIGlmICghbV9pbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghbV9sYXllcklu
Zm8uaW1hZ2VCYWNraW5nU3RvcmVJRCkKLSAgICAgICAgbV9sYXllckluZm8uaW1hZ2VCYWNraW5n
U3RvcmVJRCA9IG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5hZG9wdEltYWdlQmFj
a2luZ1N0b3JlKG1faW1hZ2UuZ2V0KCkpOwotfQotCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCiB7CiAgICAgLy8g
VGhlIHJlbW90ZSBpbWFnZSBtaWdodCBoYXZlIGJlZW4gcmVsZWFzZWQgYnkgcHVyZ2VCYWNraW5n
U3RvcmVzLgotICAgIGVuc3VyZUltYWdlQmFja2luZ1N0b3JlKCk7CiAgICAgc3luY0xheWVyU3Rh
dGUoKTsKICAgICBzeW5jQW5pbWF0aW9ucygpOwogICAgIGNvbXB1dGVUcmFuc2Zvcm1lZFZpc2li
bGVSZWN0KCk7CkBAIC01NTksNiArNTY5LDkgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnNldENvbnRlbnRzU2NhbGUoZmxvYXQgc2NhbGUpCiAKIGZsb2F0IENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6ZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpCiB7CisgICAgaWYgKG1faGFzVGls
ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuIDE7CisKICAgICByZXR1cm4gc2hvdWxkVXNlVGlsZWRC
YWNraW5nU3RvcmUoKSA/IG1fY29udGVudHNTY2FsZSA6IDE7CiB9CiAKQEAgLTU5Myw2ICs2MDYs
MTUgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFp
bnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAogewogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faGFzVGlsZWRJbWFnZSkgeworICAgICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBmdWxsSW1hZ2VJbnZlcnNlVHJhbnNmb3JtID0gVHJhbnNmb3Jt
YXRpb25NYXRyaXg6OnJlY3RUb1JlY3QoY29udGVudHNSZWN0KCksIEludFJlY3QoSW50UG9pbnQ6
Onplcm8oKSwgbV9pbWFnZS5zaXplKCkpKTsKKyAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KHJl
Y3QpOworICAgICAgICBGbG9hdFJlY3Qgc291cmNlUmVjdCA9IGZ1bGxJbWFnZUludmVyc2VUcmFu
c2Zvcm0ubWFwUmVjdChkZXN0UmVjdCk7CisgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShtX2lt
YWdlLnRvSW1hZ2UoKS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZGVzdFJlY3QsIHNvdXJj
ZVJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgcGFpbnRHcmFwaGljc0xheWVy
Q29udGVudHMoKmNvbnRleHQsIHJlY3QpOwogfQogCkBAIC02MDksNiArNjMxLDkgQEAgYm9vbCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQo
KSBjb25zdAogCiBJbnRSZWN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5n
U3RvcmVDb250ZW50c1JlY3QoKQogeworICAgIGlmIChtX2hhc1RpbGVkSW1hZ2UpCisgICAgICAg
IHJldHVybiBjb250ZW50c1JlY3QoKTsKKwogICAgIHJldHVybiBJbnRSZWN0KDAsIDAsIHNpemUo
KS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpOwogfQogCkBAIC02ODUsOSArNzEwLDkgQEAgdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnB1cmdlQmFja2luZ1N0b3JlcygpCiAgICAgbV9t
YWluQmFja2luZ1N0b3JlLmNsZWFyKCk7CiAgICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZS5jbGVh
cigpOwogCi0gICAgaWYgKG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpIHsKLSAgICAg
ICAgbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPnJlbGVhc2VJbWFnZUJhY2tpbmdT
dG9yZShtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKLSAgICAgICAgbV9sYXllcklu
Zm8uaW1hZ2VCYWNraW5nU3RvcmVJRCA9IDA7CisgICAgaWYgKG1faW1hZ2UgJiYgIW1faGFzVGls
ZWRJbWFnZSkgeworICAgICAgICBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+cmVs
ZWFzZUltYWdlQmFja2luZ1N0b3JlKG1faW1hZ2UpOworICAgICAgICBtX2ltYWdlLmNsZWFyKCk7
CiAgICAgfQogCiAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwpAQCAtNzE2LDYgKzc0MSw5IEBA
IHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJDbGllbnQoV2ViS2l0OjpDb29yZGluCiAgICAgbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJD
bGllbnQgPSBjbGllbnQ7CiAgICAgaWYgKGNsaWVudCkKICAgICAgICAgY2xpZW50LT5hdHRhY2hM
YXllcih0aGlzKTsKKworICAgIGlmIChtX2ltYWdlICYmICFtX2hhc1RpbGVkSW1hZ2UpCisgICAg
ICAgIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5hZG9wdEltYWdlQmFja2luZ1N0
b3JlKG1faW1hZ2UpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YWRqdXN0
VmlzaWJsZVJlY3QoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIuaAppbmRleCBmYjg3ODc0Li45ZDEzNzY5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaApAQCAt
MjEsNiArMjEsNyBAQAogI2lmbmRlZiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJfaAogI2RlZmlu
ZSBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJfaAogCisjaW5jbHVkZSAiQXRvbWljSW1hZ2UuaCIK
ICNpbmNsdWRlICJDb29yZGluYXRlZFRpbGUuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCkBAIC01Niw4ICs1Nyw4IEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgYm9vbCBsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCBpbnQ2NF90IGFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoV2ViQ29y
ZTo6SW1hZ2UqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VJbWFnZUJhY2tpbmdTdG9y
ZShpbnQ2NF90KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFkb3B0SW1hZ2VCYWNraW5nU3RvcmUo
Y29uc3QgV2ViQ29yZTo6QXRvbWljSW1hZ2UmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbGVh
c2VJbWFnZUJhY2tpbmdTdG9yZShjb25zdCBXZWJDb3JlOjpBdG9taWNJbWFnZSYpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoV2ViTGF5ZXJJRCwgY29uc3QgV2ViTGF5ZXJJ
bmZvJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJlbihXZWJMYXllcklE
LCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mKSA9IDA7CiAjaWYgRU5BQkxFKENTU19GSUxURVJT
KQpAQCAtMTkzLDcgKzE5NCw5IEBAIHByaXZhdGU6CiAKICAgICBXZWJLaXQ6OldlYkxheWVySUQg
bV9pZDsKICAgICBXZWJLaXQ6OldlYkxheWVySW5mbyBtX2xheWVySW5mbzsKLSAgICBSZWZQdHI8
SW1hZ2U+IG1faW1hZ2U7CisgICAgQXRvbWljSW1hZ2UgbV9pbWFnZTsKKyAgICBSZWZQdHI8SW1h
Z2U+IG1fb3JpZ2luYWxJbWFnZTsKKyAgICBib29sIG1faGFzVGlsZWRJbWFnZTsKICAgICBHcmFw
aGljc0xheWVyKiBtX21hc2tUYXJnZXQ7CiAgICAgRmxvYXRSZWN0IG1fbmVlZHNEaXNwbGF5UmVj
dDsKICAgICBHcmFwaGljc0xheWVyVHJhbnNmb3JtIG1fbGF5ZXJUcmFuc2Zvcm07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAKaW5kZXgg
OWViMzc4ZS4uMmE0ODIxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yLmNwcApAQCAtNDgxLDYwICs0ODEsNDEgQEAgdm9pZCBMYXllclRy
ZWVDb29yZGluYXRvcjo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKQogICAgIG1fcGFnZU92ZXJs
YXlMYXllciA9IG51bGxwdHI7CiB9CiAKLWludDY0X3QgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmFk
b3B0SW1hZ2VCYWNraW5nU3RvcmUoSW1hZ2UqIGltYWdlKQordm9pZCBMYXllclRyZWVDb29yZGlu
YXRvcjo6YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShjb25zdCBBdG9taWNJbWFnZSYgaW1hZ2UpCiB7
Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIEludmFsaWRXZWJMYXllcklEOwotCi0g
ICAgaW50NjRfdCBrZXkgPSAwOwotCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgUVBpeG1hcCogbmF0
aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLQotICAgIGlm
ICghbmF0aXZlSW1hZ2UpCi0gICAgICAgIHJldHVybiBJbnZhbGlkV2ViTGF5ZXJJRDsKLQotICAg
IGtleSA9IG5hdGl2ZUltYWdlLT5jYWNoZUtleSgpOwotI2VsaWYgVVNFKENBSVJPKQotICAgIE5h
dGl2ZUltYWdlQ2Fpcm8qIG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCk7Ci0gICAgaWYgKCFuYXRpdmVJbWFnZSkKLSAgICAgICAgcmV0dXJuIEludmFsaWRX
ZWJMYXllcklEOwotICAgIC8vIFRoaXMgY2FuIGJlIHNhZmVseSBkb25lIHNpbmNlIHdlIG93biB0
aGUgcmVmZXJlbmNlLgotICAgIC8vIEEgY29ycmVzcG9uZGluZyBjYWlyb19zdXJmYWNlX2Rlc3Ry
b3koKSBpcyBlbnN1cmVkIGluIHJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZSgpLgotICAgIGNhaXJv
X3N1cmZhY2VfdCogY2Fpcm9TdXJmYWNlID0gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UobmF0aXZl
SW1hZ2UtPnN1cmZhY2UoKSk7Ci0gICAga2V5ID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90Pihj
YWlyb1N1cmZhY2UpOwotI2VuZGlmCisgICAgaWYgKGltYWdlLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm47CiAKLSAgICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9kaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7CisgICAgSGFzaE1hcDxBdG9t
aWNJbWFnZSwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVm
Q291bnRzLmZpbmQoaW1hZ2UpOwogCiAgICAgaWYgKGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVk
SW1hZ2VSZWZDb3VudHMuZW5kKCkpIHsKICAgICAgICAgKysoaXQtPnZhbHVlKTsKLSAgICAgICAg
cmV0dXJuIGtleTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIENoZWNrIGlmIHdl
IHdlcmUgZ29pbmcgdG8gcmVsZWFzZSB0aGlzIGltYWdlIGR1cmluZyB0aGUgbmV4dCBmbHVzaC4K
LSAgICBzaXplX3QgcmVsZWFzZWRJbmRleCA9IG1fcmVsZWFzZWREaXJlY3RseUNvbXBvc2l0ZWRJ
bWFnZXMuZmluZChrZXkpOworICAgIHNpemVfdCByZWxlYXNlZEluZGV4ID0gbV9yZWxlYXNlZERp
cmVjdGx5Q29tcG9zaXRlZEltYWdlcy5maW5kKGltYWdlKTsKICAgICBpZiAocmVsZWFzZWRJbmRl
eCA9PSBub3RGb3VuZCkgewotICAgICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAg
PSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShpbWFnZS0+c2l6ZSgpLCAoaW1hZ2Ut
PmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgPyBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEg
OiAwKSk7CisgICAgICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGltYWdlLnNpemUoKSwgKGltYWdlLmhhc0FscGhhKCkg
PyBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEgOiAwKSk7CiAgICAgICAgIHsKICAgICAg
ICAgICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9
IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQtPmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQ6Onpl
cm8oKSk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZShpbWFnZS50b0lt
YWdlKCkuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50Ojp6ZXJvKCkpOwogICAg
ICAgICB9CiAgICAgICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKICAgICAgICAg
Yml0bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpDcmVhdGVEaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZShrZXksIGhhbmRsZSkpOworICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdl
KGltYWdlLmNhY2hlS2V5KCksIGhhbmRsZSkpOwogICAgIH0gZWxzZQogICAgICAgICBtX3JlbGVh
c2VkRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnJlbW92ZShyZWxlYXNlZEluZGV4KTsKIAotICAg
IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuYWRkKGtleSwgMSk7Ci0gICAgcmV0
dXJuIGtleTsKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmFkZChpbWFn
ZSwgMSk7CisgICAgcmV0dXJuOwogfQogCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZWxl
YXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCBrZXkpCit2b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yOjpyZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoY29uc3QgQXRvbWljSW1hZ2UmIGltYWdlKQog
ewotICAgIGlmICgha2V5KQorICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICBI
YXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJ
bWFnZVJlZkNvdW50cy5maW5kKGtleSk7CisgICAgSGFzaE1hcDxBdG9taWNJbWFnZSwgaW50Pjo6
aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoaW1h
Z2UpOwogICAgIGlmIChpdCA9PSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmVu
ZCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTU0MywxNCArNTI0LDggQEAgdm9pZCBMYXllclRy
ZWVDb29yZGluYXRvcjo6cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKGludDY0X3Qga2V5KQogICAg
IGlmIChpdC0+dmFsdWUpCiAgICAgICAgIHJldHVybjsKIAotI2lmIFVTRShDQUlSTykKLSAgICAv
LyBDb21wbGVtZW50IHRoZSByZWZlcmVuY2luZyBpbiBhZG9wdEltYWdlQmFja2luZ1N0b3JlKCku
Ci0gICAgY2Fpcm9fc3VyZmFjZV90KiBjYWlyb1N1cmZhY2UgPSByZWludGVycHJldF9jYXN0PGNh
aXJvX3N1cmZhY2VfdCo+KGtleSk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGNhaXJvU3Vy
ZmFjZSk7Ci0jZW5kaWYKLQogICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMu
cmVtb3ZlKGl0KTsKLSAgICBtX3JlbGVhc2VkRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmFwcGVu
ZChrZXkpOworICAgIG1fcmVsZWFzZWREaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuYXBwZW5kKGlt
YWdlKTsKICAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmgKaW5kZXggZDcyNWFmNi4uMDY1MGI4
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRv
ci5oCkBAIC02Nyw4ICs2Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGF1c2VSZW5k
ZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHJlc3Vt
ZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOyBzY2hlZHVsZUxheWVyRmx1c2go
KTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSgpIHsgfQot
ICAgIHZpcnR1YWwgaW50NjRfdCBhZG9wdEltYWdlQmFja2luZ1N0b3JlKFdlYkNvcmU6OkltYWdl
Kik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90KTsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRvcHRJbWFnZUJhY2tpbmdTdG9yZShjb25zdCBXZWJDb3JlOjpB
dG9taWNJbWFnZSYpOworICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUo
Y29uc3QgV2ViQ29yZTo6QXRvbWljSW1hZ2UmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVU
aWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKFdlYkxh
eWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYpOwpAQCAtMTQ5LDggKzE0OSw4IEBAIHByaXZhdGU6CiAKICAgICBIYXNoU2V0
PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+IG1fcmVnaXN0ZXJlZExheWVyczsK
ICAgICBWZWN0b3I8V2ViTGF5ZXJJRD4gbV9kZXRhY2hlZExheWVyczsKLSAgICBIYXNoTWFwPGlu
dDY0X3QsIGludD4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50czsKLSAgICBWZWN0
b3I8aW50NjRfdD4gbV9yZWxlYXNlZERpcmVjdGx5Q29tcG9zaXRlZEltYWdlczsKKyAgICBIYXNo
TWFwPFdlYkNvcmU6OkF0b21pY0ltYWdlLCBpbnQ+IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VS
ZWZDb3VudHM7CisgICAgVmVjdG9yPFdlYkNvcmU6OkF0b21pY0ltYWdlPiBtX3JlbGVhc2VkRGly
ZWN0bHlDb21wb3NpdGVkSW1hZ2VzOwogICAgIFZlY3RvcjxPd25QdHI8VXBkYXRlQXRsYXM+ID4g
bV91cGRhdGVBdGxhc2VzOwogCiAgICAgYm9vbCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJG
bHVzaDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>172260</attachid>
            <date>2012-11-04 20:23:01 -0800</date>
            <delta_ts>2012-11-05 20:18:17 -0800</delta_ts>
            <desc>WIP TBS patch (not for review) </desc>
            <filename>0001-Coordinated-Graphics-CoordinatedGraphicsLayer-handle.patch</filename>
            <type>text/plain</type>
            <size>69603</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">RnJvbSAzMzBmYTdhNWVjMjc1M2FkZGM1MzIzZGRlMjNiZmU0ODcwMjBiZjc3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBIdWFuZyBEb25nc3VuZyA8bHV4dGVsbGFAY29tcGFueTEwMC5u
ZXQ+CkRhdGU6IFRodSwgMSBOb3YgMjAxMiAwNzoyMzoyNSArMDkwMApTdWJqZWN0OiBbUEFUQ0hd
IENvb3JkaW5hdGVkIEdyYXBoaWNzOiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgaGFuZGxlcyBh
CiBjb21wb3NpdGVkIGltYWdlIHdpdGggVGlsZWRCYWNraW5nU3RvcmUuCgpDdXJyZW50bHksIENv
b3JkaW5hdGVkIEdyYXBoaWNzIGhhcyBzZXZlcmFsIHByb2JsZW1zIGluIHRlcm1zIG9mIGhhbmRs
aW5nIGEKY29tcG9zaXRlZCBpbWFnZS4KMS4gV2UgY2FuIG5vdCBzZW5kIGFuIGltYWdlIHRvIFVJ
IFByb2Nlc3MgdXNpbmcgR3JhcGhpY3NTdXJmYWNlLCBiZWNhdXNlCkdyYXBoaWNzU3VyZmFjZSBo
YXMgdGhlIHNpemUgbGltaXRhdGlvbi4oR0xfTUFYX1RFWFRVUkVfU0laRSkKMi4gQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLCBMYXllclRyZWVDb29yZGluYXRvciwgTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eQphbmQgTGF5ZXJUcmVlUmVuZGVyZXIgYXJlIHRpZ2h0bHkgY291cGxlZCB0byBzaGFy
ZSBhbiBpbWFnZSB1c2luZwpTaGFyZWFibGVCaXRtYXAuCjMuIExheWVyVHJlZUNvb3JkaW5hdG9y
IG5lZWRzIHBsYXRmb3JtIGRlcGVuZGVudCBjb2RlIHRvIGNvcHkgYW4gaW1hZ2UgdG8KU2hhcmVh
YmxlQml0bWFwLgo0LiBXZSBtdXN0IGFsbG9jYXRlIGJpZyBjb250aW51b3VzIG1lbW9yeSB3aGVu
IGFuIGltYWdlIGlzIGJpZy4KNS4gRXZlbiBpZiBhIGNvbXBvc2l0ZWQgaW1hZ2UgaXMgb2ZmIHRo
ZSB2aWV3cG9ydCwgVGV4dHVyZU1hcHBlckxheWVyIGNhbiBub3QKcmVtb3ZlIGFuIGltYWdlIHRl
eHR1cmUuCgpJZiB3ZSB1c2UgVGlsZWRCYWNraW5nU3RvcmUgdG8gaGFuZGxlIGEgY29tcG9zaXRl
ZCBpbWFnZSwgd2UgY2FuIGdldCBmb2xsb3dpbmcKYmVuZWZpdHMuCjEuIFdlIGNhbiB1c2UgR3Jh
cGhpY3NTdXJmYWNlIHRvIHNlbmQgYW4gaW1hZ2UgdG8gVUkgUHJvY2Vzcy4KMi4gV2UgY2FuIHJl
bW92ZSBodWdlIGNvbXBsZXggY29kZSB0byBoYW5kbGUgSVBDIGZvciBhbiBpbWFnZSBhbmQganVz
dCByZXVzZQpleGlzdGluZyBUaWxlZEJhY2tpbmdTdG9yZS4KMy4gTGF5ZXJUcmVlQ29vcmRpbmF0
b3IgZG9lcyBub3QgbmVlZCBwbGF0Zm9ybSBkZXBlbmRlbnQgY29kZS4KNC4gV2UgY2FuIHNlbmQg
YSBiaWcgaW1hZ2UgdG8gVUkgUHJvY2VzcyB1c2luZyBtYW55IHNtYWxsIHRpbGVzLgo1LiBXaGVu
IGEgY29tcG9zaXRlZCBpbWFnZSBpcyBvZmYgdGhlIHZpZXdwb3J0LCBUZXh0dXJlTWFwcGVyTGF5
ZXIgY2FuIHJlbW92ZQphbiBpbWFnZSB0ZXh0dXJlIHRvIHNhdmUgdGV4dHVyZSBtZW1vcnkuCgpJ
biBhZGRpdGlvbiwgdGhpcyBwYXRjaCBmaXhlcyB0aGUgYnVnIHRoYXQgQ29vcmRpbmF0ZWQgR3Jh
cGhpY3Mgb25seSByZW5kZXJzIHRoZQpmaXJzdCBmcmFtZSBvZiBhIGdpZiBhbmltYXRpb24gaW1h
Z2UuCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgIDE1ICsrCiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCAgICAgICAgICAgICAg
ICAgICAgICB8ICAgIDIgKy0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9y
ZS5jcHAgICAgICAgIHwgICAgNSArCiAuLi4vV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxl
ZEJhY2tpbmdTdG9yZS5oICB8ICAgIDUgKy0KIC4uLi9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIuY3BwIHwgICAgNSArLQogLi4uL2dyYXBoaWNzL3RleG1hcC9HcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlci5oICAgfCAgICAyICstCiAuLi4vcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA3MyArKysrKysrKysKIC4u
Li9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELmggICAgICAgICAgICAgICAgIHwgICAzNSAr
KysrKwogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaCAgICAgICAgICAg
fCAgICAzIC0KIFNvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAgMyArCiAuLi4vTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAgICAgICAgICAg
ICAgICAgICB8ICAgNDUgKysrKy0tCiAuLi4vTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oICAg
ICAgICAgICAgICAgICAgICB8ICAgIDggKy0KIC4uLi9MYXllclRyZWVDb29yZGluYXRvclByb3h5
Lm1lc3NhZ2VzLmluICAgICAgICAgIHwgICAgNyArLQogLi4uL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlUmVuZGVyZXIuY3BwICAgICAgfCAgIDk1ICsrKysrKysrLS0tLQogLi4uL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuaCAgICAgICAgfCAgIDMwICsrLS0KIC4u
Li9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS5jcHAgICAgICAgICAgICAgICAgIHwgIDE1OSAr
KysrKysrKysrKysrKysrKysrKwogLi4uL0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLmggICAg
ICAgICAgICAgICAgICAgfCAgMTEwICsrKysrKysrKysrKysrCiAuLi4vQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyLmNwcCAgICAgICAgICAgICAgICAgICB8ICAxMDIgKysrKysrKystLS0tLQogLi4u
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmggfCAgIDI0ICsr
LQogLi4uL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwICAgfCAg
MTQ2ICsrKysrKysrLS0tLS0tLS0tLQogLi4uL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IuaCAgICAgfCAgIDIwICsrLQogMjIgZmlsZXMgY2hhbmdlZCwgNzAzIGluc2Vy
dGlvbnMoKyksIDE5MyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFn
ZUlELmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS5oCgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDg3YmNkNzcuLjZlOTE2YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0xMS0w
MiAgSHVhbmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBD
b29yZGluYXRlZCBHcmFwaGljczogQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIGhhbmRsZXMgYSBj
b21wb3NpdGVkIGltYWdlIHdpdGggVGlsZWRCYWNraW5nU3RvcmUuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDEwMjMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggYSBwb3RlbnRpYWwgYnVnIGluIEdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLgorICAgICAgICBtX2NvbXBvc2l0ZWROYXRpdmVJbWFn
ZVB0ciBtdXN0IGJlIGluaXRpYWxpZWQuIE90aGVyd2lzZSB0aGUgbWVtYmVyJ3MKKyAgICAgICAg
dW5kZWZpbmVkIHZhbHVlIGNhbiBjYXVzZSB1bmRlZmluZWQgYmVoYXZpb3VyLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcjo6c2V0Q29udGVudHNUb0ltYWdlKToKKwogMjAxMi0xMS0wMyAgRGFuIEJlYW0g
IDxkYmVhbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW1wbGVtZW50IEhUTUxGb3JtRWxlbWVu
dCNyZXF1ZXN0QXV0b2NvbXBsZXRlIGFuZCBhc3NvY2lhdGVkIGV2ZW50cwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
LmNwcAppbmRleCBhZThmMzk3Li44NjIyYjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtODI2
LDcgKzgyNiw3IEBAIHZvaWQgRnJhbWU6OnNldFRpbGVkQmFja2luZ1N0b3JlRW5hYmxlZChib29s
IGVuYWJsZWQpCiAgICAgfQogICAgIGlmIChtX3RpbGVkQmFja2luZ1N0b3JlKQogICAgICAgICBy
ZXR1cm47Ci0gICAgbV90aWxlZEJhY2tpbmdTdG9yZSA9IGFkb3B0UHRyKG5ldyBUaWxlZEJhY2tp
bmdTdG9yZSh0aGlzKSk7CisgICAgbV90aWxlZEJhY2tpbmdTdG9yZSA9IFRpbGVkQmFja2luZ1N0
b3JlOjpjcmVhdGUodGhpcyk7CiAgICAgaWYgKG1fdmlldykKICAgICAgICAgbV92aWV3LT5zZXRQ
YWludHNFbnRpcmVDb250ZW50cyh0cnVlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcAppbmRleCBjNTY0ZGJlLi45
N2M0YTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxl
ZEJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
VGlsZWRCYWNraW5nU3RvcmUuY3BwCkBAIC0zNSw2ICszNSwxMSBAQCBzdGF0aWMgSW50UG9pbnQg
aW5uZXJCb3R0b21SaWdodChjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIHJldHVybiBJbnRQb2lu
dChyZWN0Lm1heFgoKSAtIDEsIHJlY3QubWF4WSgpIC0gMSk7CiB9CiAKK1Bhc3NPd25QdHI8VGls
ZWRCYWNraW5nU3RvcmU+IFRpbGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoVGlsZWRCYWNraW5nU3Rv
cmVDbGllbnQqIGNsaWVudCwgUGFzc093blB0cjxUaWxlZEJhY2tpbmdTdG9yZUJhY2tlbmQ+IGJh
Y2tlbmQpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUaWxlZEJhY2tpbmdTdG9yZShjbGll
bnQsIGJhY2tlbmQpKTsKK30KKwogVGlsZWRCYWNraW5nU3RvcmU6OlRpbGVkQmFja2luZ1N0b3Jl
KFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50KiBjbGllbnQsIFBhc3NPd25QdHI8VGlsZWRCYWNraW5n
U3RvcmVCYWNrZW5kPiBiYWNrZW5kKQogICAgIDogbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9i
YWNrZW5kKGJhY2tlbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9UaWxlZEJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvVGlsZWRCYWNraW5nU3RvcmUuaAppbmRleCBiM2MzNjVjLi5kNjRhZTBjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmgK
QEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNDEsNyArNDIsNyBAQCBjbGFzcyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudDsKIGNsYXNzIFRp
bGVkQmFja2luZ1N0b3JlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaWxlZEJhY2tpbmdT
dG9yZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFRpbGVkQmFja2lu
Z1N0b3JlKFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50KiwgUGFzc093blB0cjxUaWxlZEJhY2tpbmdT
dG9yZUJhY2tlbmQ+ID0gVGlsZWRCYWNraW5nU3RvcmVCYWNrZW5kOjpjcmVhdGUoKSk7CisgICAg
c3RhdGljIFBhc3NPd25QdHI8VGlsZWRCYWNraW5nU3RvcmU+IGNyZWF0ZShUaWxlZEJhY2tpbmdT
dG9yZUNsaWVudCosIFBhc3NPd25QdHI8VGlsZWRCYWNraW5nU3RvcmVCYWNrZW5kPiA9IFRpbGVk
QmFja2luZ1N0b3JlQmFja2VuZDo6Y3JlYXRlKCkpOwogICAgIH5UaWxlZEJhY2tpbmdTdG9yZSgp
OwogCiAgICAgVGlsZWRCYWNraW5nU3RvcmVDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xp
ZW50OyB9CkBAIC04MCw2ICs4MSw4IEBAIHB1YmxpYzoKICAgICBib29sIHN1cHBvcnRzQWxwaGEo
KSBjb25zdCB7IHJldHVybiBtX3N1cHBvcnRzQWxwaGE7IH0KIAogcHJpdmF0ZToKKyAgICBUaWxl
ZEJhY2tpbmdTdG9yZShUaWxlZEJhY2tpbmdTdG9yZUNsaWVudCosIFBhc3NPd25QdHI8VGlsZWRC
YWNraW5nU3RvcmVCYWNrZW5kPik7CisKICAgICB2b2lkIHN0YXJ0VGlsZUJ1ZmZlclVwZGF0ZVRp
bWVyKCk7CiAgICAgdm9pZCBzdGFydEJhY2tpbmdTdG9yZVVwZGF0ZVRpbWVyKCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCmluZGV4IDQxODk3YzYuLmZkZGI3
ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApAQCAtNDQs
NiArNDQsNyBAQCBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IEdyYXBoaWNzTGF5ZXI6OmNyZWF0
ZShHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCiBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cjo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50
KQogICAgIDogR3JhcGhpY3NMYXllcihjbGllbnQpCiAgICAgLCBtX2xheWVyKGFkb3B0UHRyKG5l
dyBUZXh0dXJlTWFwcGVyTGF5ZXIoKSkpCisgICAgLCBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0
cigwKQogICAgICwgbV9jaGFuZ2VNYXNrKDApCiAgICAgLCBtX25lZWRzRGlzcGxheShmYWxzZSkK
ICAgICAsIG1fZml4ZWRUb1ZpZXdwb3J0KGZhbHNlKQpAQCAtMzUxLDggKzM1MiwxMCBAQCB2b2lk
IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGlt
YWdlKQogICAgICAgICBpZiAoIW1fY29tcG9zaXRlZEltYWdlKQogICAgICAgICAgICAgbV9jb21w
b3NpdGVkSW1hZ2UgPSBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOwog
ICAgICAgICBtX2NvbXBvc2l0ZWRJbWFnZS0+c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKLSAg
ICB9IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0
ciA9IDA7CiAgICAgICAgIG1fY29tcG9zaXRlZEltYWdlID0gMDsKKyAgICB9CiAKICAgICBzZXRD
b250ZW50c1RvTWVkaWEobV9jb21wb3NpdGVkSW1hZ2UuZ2V0KCkpOwogICAgIG5vdGlmeUNoYW5n
ZShUZXh0dXJlTWFwcGVyTGF5ZXI6OkNvbnRlbnRDaGFuZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIuaAppbmRleCA1MTBiMjNmLi5lN2VkZDYyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaApAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgp
OwogICAgIHZpcnR1YWwgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdmly
dHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gMDsgfQor
ICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGVudHNMYXllcjsgfQogCiAgICAgdm9pZCBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBl
ckxheWVyOjpDaGFuZ2VNYXNrKTsKICAgICBpbmxpbmUgaW50IGNoYW5nZU1hc2soKSBjb25zdCB7
IHJldHVybiBtX2NoYW5nZU1hc2s7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaAppbmRleCA1Y2Q5
NTlkLi5kNWE5MjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCkBAIC0xMjgsNyArMTI4LDcg
QEAgcHVibGljOgogICAgIHZvaWQgcGFpbnQoKTsKIAogICAgIHZvaWQgc2V0U2hvdWxkVXBkYXRl
QmFja2luZ1N0b3JlRnJvbUxheWVyKGJvb2wgYikgeyBtX3Nob3VsZFVwZGF0ZUJhY2tpbmdTdG9y
ZUZyb21MYXllciA9IGI7IH0KLSAgICB2b2lkIHNldEJhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVy
QmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUpIHsgbV9iYWNraW5nU3RvcmUgPSBiYWNraW5nU3Rv
cmU7IH0KKyAgICB2b2lkIHNldEJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJC
YWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSkgeyBtX2JhY2tpbmdTdG9yZSA9IGJhY2tpbmdTdG9y
ZTsgfQogICAgIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4gYmFja2luZ1N0
b3JlKCkgeyByZXR1cm4gbV9iYWNraW5nU3RvcmU7IH0KICAgICB2b2lkIGNsZWFyQmFja2luZ1N0
b3Jlc1JlY3Vyc2l2ZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNzI3YjJhNS4uOGE5ZDQ3OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEyLTExLTAyICBIdWFuZyBEb25nc3VuZyAgPGx1eHRl
bGxhQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIENvb3JkaW5hdGVkIEdyYXBoaWNzOiBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIgaGFuZGxlcyBhIGNvbXBvc2l0ZWQgaW1hZ2Ugd2l0aCBUaWxl
ZEJhY2tpbmdTdG9yZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwMTAyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEN1cnJlbnRseSwgQ29vcmRpbmF0ZWQgR3JhcGhpY3MgaGFzIHNldmVyYWwgcHJvYmxl
bXMgaW4gdGVybXMgb2YgaGFuZGxpbmcgYQorICAgICAgICBjb21wb3NpdGVkIGltYWdlLgorICAg
ICAgICAxLiBXZSBjYW4gbm90IHNlbmQgYW4gaW1hZ2UgdG8gVUkgUHJvY2VzcyB1c2luZyBHcmFw
aGljc1N1cmZhY2UsIGJlY2F1c2UKKyAgICAgICAgR3JhcGhpY3NTdXJmYWNlIGhhcyB0aGUgc2l6
ZSBsaW1pdGF0aW9uLihHTF9NQVhfVEVYVFVSRV9TSVpFKQorICAgICAgICAyLiBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIsIExheWVyVHJlZUNvb3JkaW5hdG9yLCBMYXllclRyZWVDb29yZGluYXRv
clByb3h5CisgICAgICAgIGFuZCBMYXllclRyZWVSZW5kZXJlciBhcmUgdGlnaHRseSBjb3VwbGVk
IHRvIHNoYXJlIGFuIGltYWdlIHVzaW5nCisgICAgICAgIFNoYXJlYWJsZUJpdG1hcC4KKyAgICAg
ICAgMy4gTGF5ZXJUcmVlQ29vcmRpbmF0b3IgbmVlZHMgcGxhdGZvcm0gZGVwZW5kZW50IGNvZGUg
dG8gY29weSBhbiBpbWFnZSB0bworICAgICAgICBTaGFyZWFibGVCaXRtYXAuCisgICAgICAgIDQu
IFdlIG11c3QgYWxsb2NhdGUgYmlnIGNvbnRpbnVvdXMgbWVtb3J5IHdoZW4gYW4gaW1hZ2UgaXMg
YmlnLgorICAgICAgICA1LiBFdmVuIGlmIGEgY29tcG9zaXRlZCBpbWFnZSBpcyBvZmYgdGhlIHZp
ZXdwb3J0LCBUZXh0dXJlTWFwcGVyTGF5ZXIgY2FuIG5vdAorICAgICAgICByZW1vdmUgYW4gaW1h
Z2UgdGV4dHVyZS4KKworICAgICAgICBJZiB3ZSB1c2UgVGlsZWRCYWNraW5nU3RvcmUgdG8gaGFu
ZGxlIGEgY29tcG9zaXRlZCBpbWFnZSwgd2UgY2FuIGdldCBmb2xsb3dpbmcKKyAgICAgICAgYmVu
ZWZpdHMuCisgICAgICAgIDEuIFdlIGNhbiB1c2UgR3JhcGhpY3NTdXJmYWNlIHRvIHNlbmQgYW4g
aW1hZ2UgdG8gVUkgUHJvY2Vzcy4KKyAgICAgICAgMi4gV2UgY2FuIHJlbW92ZSBodWdlIGNvbXBs
ZXggY29kZSB0byBoYW5kbGUgSVBDIGZvciBhbiBpbWFnZSBhbmQganVzdCByZXVzZQorICAgICAg
ICBleGlzdGluZyBUaWxlZEJhY2tpbmdTdG9yZS4KKyAgICAgICAgMy4gTGF5ZXJUcmVlQ29vcmRp
bmF0b3IgZG9lcyBub3QgbmVlZCBwbGF0Zm9ybSBkZXBlbmRlbnQgY29kZS4KKyAgICAgICAgNC4g
V2UgY2FuIHNlbmQgYSBiaWcgaW1hZ2UgdG8gVUkgUHJvY2VzcyB1c2luZyBtYW55IHNtYWxsIHRp
bGVzLgorICAgICAgICA1LiBXaGVuIGEgY29tcG9zaXRlZCBpbWFnZSBpcyBvZmYgdGhlIHZpZXdw
b3J0LCBUZXh0dXJlTWFwcGVyTGF5ZXIgY2FuIHJlbW92ZQorICAgICAgICBhbiBpbWFnZSB0ZXh0
dXJlIHRvIHNhdmUgdGV4dHVyZSBtZW1vcnkuCisKKyAgICAgICAgQWZ0ZXIgdGhpcyBwYXRjaCwg
VUkgUHJvY2VzcyBkZWFscyB3aXRoIGEgZGlyZWN0bHkgY29tcG9zaXRlZCBpbWFnZSBsYXllciBh
cyBhCisgICAgICAgIGNvbnRlbnQgbGF5ZXIuCisKKyAgICAgICAgSW4gYWRkaXRpb24sIHRoaXMg
cGF0Y2ggZml4ZXMgdGhlIGJ1ZyB0aGF0IENvb3JkaW5hdGVkIEdyYXBoaWNzIG9ubHkgcmVuZGVy
cyB0aGUKKyAgICAgICAgZmlyc3QgZnJhbWUgb2YgYSBnaWYgYW5pbWF0aW9uIGltYWdlLgorCisg
ICAgICAgICogU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
TGF5ZXJJbmZvOjpXZWJMYXllckluZm8pOgorICAgICAgICAoV2ViTGF5ZXJJbmZvKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclBy
b3h5LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVDb29yZGluYXRvclByb3h5Lmg6CisgICAgICAgIChMYXllclRyZWVDb29yZGluYXRvclByb3h5
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29y
ZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlUmVuZGVyZXI6OnNldExheWVyU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVS
ZW5kZXJlcjo6cHVyZ2VHTFJlc291cmNlcyk6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuaDoKKyAgICAgICAgKExheWVyVHJlZVJlbmRl
cmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VDb21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0
ZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5
bmNMYXllclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSk6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFZpc2libGVDb250ZW50UmVjdFRyYWpl
Y3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Ojp0aWxlZEJhY2tpbmdTdG9yZVBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6cGFpbnRDb21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpwdXJnZUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGp1c3RWaXNpYmxlUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6Omhhc1BlbmRpbmdWaXNp
YmxlQ2hhbmdlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmg6CisgICAgICAgIChDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXJDbGllbnQpOgorICAgICAgICAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9y
OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVD
b29yZGluYXRvcjo6cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5oOgorICAgICAg
ICAoTGF5ZXJUcmVlQ29vcmRpbmF0b3IpOgorCiAyMDEyLTExLTAzICBQYXZlbCBGZWxkbWFuICA8
cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxMzIwMTQtcjEz
MjA0Nyk6IFdlYmtpdCBJbnNwZWN0b3IgV2luZG93IGRvY2tpbmcgYnJva2VuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENv
bXBvc2l0ZWRJbWFnZUlELmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNTIzZTcyOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQu
aApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAw
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBDb29yZGlu
YXRlZENvbXBvc2l0ZWRJbWFnZUlEX2gKKyNkZWZpbmUgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1h
Z2VJRF9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCituYW1lc3BhY2UgV2ViS2l0
IHsKK3R5cGVkZWYgdWludHB0cl90IENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQ7Cit9Cisj
ZW5kaWYKKyNlbmRpZiAvLyBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEX0gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCmluZGV4IGM5YmRhYzUuLjk4ZDIxYWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaApAQCAtMjcsNyArMjcsNiBA
QAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKQEAgLTQwLDE0ICszOSwxMiBAQCBzdHJ1Y3QgV2ViTGF5ZXJJbmZv
IHsKICAgICAgICAgOiBwYXJlbnQoSW52YWxpZFdlYkxheWVySUQpCiAgICAgICAgICwgcmVwbGlj
YShJbnZhbGlkV2ViTGF5ZXJJRCkKICAgICAgICAgLCBtYXNrKEludmFsaWRXZWJMYXllcklEKQot
ICAgICAgICAsIGltYWdlQmFja2luZ1N0b3JlSUQoMCkKICAgICAgICAgLCBvcGFjaXR5KDApCiAg
ICAgICAgICwgZmxhZ3MoMCkgeyB9CiAKICAgICBXZWJMYXllcklEIHBhcmVudDsKICAgICBXZWJM
YXllcklEIHJlcGxpY2E7CiAgICAgV2ViTGF5ZXJJRCBtYXNrOwotICAgIGludDY0X3QgaW1hZ2VC
YWNraW5nU3RvcmVJRDsKIAogICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9zOwogICAgIFdlYkNv
cmU6OkZsb2F0UG9pbnQzRCBhbmNob3JQb2ludDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IGFhMjM3NDguLmE1
YjkyNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNl
L1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtMTM0LDYgKzEzNCw3IEBAIEhFQURFUlMgKz0gXAogICAg
IFNoYXJlZC9XZWJVUkxSZXF1ZXN0LmggXAogICAgIFNoYXJlZC9XZWJVUkxSZXNwb25zZS5oIFwK
ICAgICBTaGFyZWQvV2ViVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmggXAorICAgIFNoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQuaCBcCiAgICAgU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJz
LmggXAogICAgIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkN1c3RvbUZpbHRlclByb2dy
YW0uaCBcCiAgICAgU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5Nb2R1bGUu
aCBcCkBAIC0zNjMsNiArMzY0LDcgQEAgSEVBREVSUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQ
YWdlL0RyYXdpbmdBcmVhSW1wbC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNw
YXRjaGVyLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oIFwKKyAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENvbXBv
c2l0ZWRJbWFnZS5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmggXAogICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmggXApAQCAtNzM5
LDYgKzc0MSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FbmNvZGVy
QWRhcHRlci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3Bw
IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIFwKKyAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENvbXBvc2l0ZWRJ
bWFnZS5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVDb29yZGluYXRvclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCmluZGV4IDRkNDNm
ZWIuLmRkNDQwZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHkuY3BwCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eTo6ZGlzcGF0Y2hVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCiAKIHZv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlVGlsZUZvckxheWVyKGludCBsYXll
cklELCBpbnQgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBXZWJLaXQ6
OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJp
bmQoJkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXll
cklELCB0aWxlSUQsIHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IpKTsKKyAgICBkaXNwYXRjaFVwZGF0
ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlVGlsZUZvckxheWVyLCBtX3JlbmRlcmVy
LmdldCgpLCBsYXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IpKTsKICAgICB1
cGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0YXJnZXRSZWN0LCB1cGRhdGVJbmZv
KTsKIH0KIApAQCAtNjYsMTIgKzY2LDQwIEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eTo6dXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zCiB7CiAg
ICAgU3VyZmFjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N1cmZhY2VzLmZpbmQodXBkYXRlSW5mby5h
dGxhc0lEKTsKICAgICBBU1NFUlQoaXQgIT0gbV9zdXJmYWNlcy5lbmQoKSk7Ci0gICAgZGlzcGF0
Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGUsIG1fcmVuZGVyZXIu
Z2V0KCksIGxheWVySUQsIHRpbGVJRCwgTGF5ZXJUcmVlUmVuZGVyZXI6OlRpbGVVcGRhdGUodXBk
YXRlSW5mby51cGRhdGVSZWN0LCB0YXJnZXRSZWN0LCBpdC0+dmFsdWUsIHVwZGF0ZUluZm8uc3Vy
ZmFjZU9mZnNldCkpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJl
cjo6dXBkYXRlVGlsZUZvckxheWVyLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQs
IExheWVyVHJlZVJlbmRlcmVyOjpUaWxlVXBkYXRlKHVwZGF0ZUluZm8udXBkYXRlUmVjdCwgdGFy
Z2V0UmVjdCwgaXQtPnZhbHVlLCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpKSk7CiB9CiAKIHZv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXll
cklELCBpbnQgdGlsZUlEKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJl
bmRlcmVyOjpyZW1vdmVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQpKTsK
KyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlVGlsZUZv
ckxheWVyLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQpKTsKK30KKwordm9pZCBM
YXllclRyZWVDb29yZGluYXRvclByb3h5OjpjcmVhdGVDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0
ZWRDb21wb3NpdGVkSW1hZ2VJRCBpbWFnZUlELCB1aW50MzJfdCBsYXllcklEKQoreworICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVDb21wb3NpdGVkSW1h
Z2UsIG1fcmVuZGVyZXIuZ2V0KCksIGltYWdlSUQsIGxheWVySUQpKTsKK30KKwordm9pZCBMYXll
clRyZWVDb29yZGluYXRvclByb3h5OjpkZXN0cm95Q29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVk
Q29tcG9zaXRlZEltYWdlSUQgaW1hZ2VJRCwgdWludDMyX3QgbGF5ZXJJRCkKK3sKKyAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6ZGVzdHJveUNvbXBvc2l0ZWRJbWFn
ZSwgbV9yZW5kZXJlci5nZXQoKSwgaW1hZ2VJRCwgbGF5ZXJJRCkpOworfQorCit2b2lkIExheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OmNyZWF0ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UoQ29vcmRp
bmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCBpbWFnZUlELCBpbnQgdGlsZUlELCBjb25zdCBJbnRSZWN0
JiB0YXJnZXRSZWN0LCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZv
KQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVU
aWxlRm9yQ29tcG9zaXRlZEltYWdlLCBtX3JlbmRlcmVyLmdldCgpLCBpbWFnZUlELCB0aWxlSUQs
IHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IpKTsKKyAgICB1cGRhdGVUaWxlRm9yQ29tcG9zaXRlZElt
YWdlKGltYWdlSUQsIHRpbGVJRCwgdGFyZ2V0UmVjdCwgdXBkYXRlSW5mbyk7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShD
b29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEIGltYWdlSUQsIGludCB0aWxlSUQsIGNvbnN0IElu
dFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0
ZUluZm8pCit7CisgICAgU3VyZmFjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N1cmZhY2VzLmZpbmQo
dXBkYXRlSW5mby5hdGxhc0lEKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9zdXJmYWNlcy5lbmQoKSk7
CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGVG
b3JDb21wb3NpdGVkSW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGltYWdlSUQsIHRpbGVJRCwgTGF5
ZXJUcmVlUmVuZGVyZXI6OlRpbGVVcGRhdGUodXBkYXRlSW5mby51cGRhdGVSZWN0LCB0YXJnZXRS
ZWN0LCBpdC0+dmFsdWUsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCkpKTsKK30KKwordm9pZCBM
YXllclRyZWVDb29yZGluYXRvclByb3h5OjpyZW1vdmVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKENv
b3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgaW1hZ2VJRCwgaW50IHRpbGVJRCkKK3sKKyAgICBk
aXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlVGlsZUZvckNvbXBv
c2l0ZWRJbWFnZSwgbV9yZW5kZXJlci5nZXQoKSwgaW1hZ2VJRCwgdGlsZUlEKSk7CiB9CiAKIHZv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlVXBkYXRlQXRsYXMoaW50IGF0bGFz
SUQsIGNvbnN0IFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlKQpAQCAtMTI3LDE3ICsx
NTUsNiBAQCB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmRpZFJlbmRlckZyYW1lKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRzUwogI2VuZGlmCiB9CiAKLXZvaWQgTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRf
dCBrZXksIGNvbnN0IFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSkKLXsK
LSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNy
ZWF0ZShoYW5kbGUpOwotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVy
OjpjcmVhdGVJbWFnZSwgbV9yZW5kZXJlci5nZXQoKSwga2V5LCBiaXRtYXApKTsKLX0KLQotdm9p
ZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1h
Z2UoaW50NjRfdCBrZXkpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVu
ZGVyZXI6OmRlc3Ryb3lJbWFnZSwgbV9yZW5kZXJlci5nZXQoKSwga2V5KSk7Ci19Ci0KIHZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c2V0Q29udGVudHNTaXplKGNvbnN0IEZsb2F0U2l6
ZSYgY29udGVudHNTaXplKQogewogICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJl
bmRlcmVyOjpzZXRDb250ZW50c1NpemUsIG1fcmVuZGVyZXIuZ2V0KCksIGNvbnRlbnRzU2l6ZSkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oCmluZGV4IDY0
NjgwMTEuLjE1NzNhZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRv
clByb3h5LmgKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgog
I2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUg
IkNvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVBy
b3h5LmgiCiAjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlU3VyZmFjZS5o
IgpAQCAtNjUsMTAgKzY2LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIGNyZWF0ZVRpbGVGb3JMYXll
cihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0
IFN1cmZhY2VVcGRhdGVJbmZvJik7CiAgICAgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxh
eWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJmYWNl
VXBkYXRlSW5mbyYpOwogICAgIHZvaWQgcmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBp
bnQgdGlsZUlEKTsKKyAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENv
bXBvc2l0ZWRJbWFnZUlELCB1aW50MzJfdCBsYXllcklEKTsKKyAgICB2b2lkIGRlc3Ryb3lDb21w
b3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCwgdWludDMyX3QgbGF5ZXJJ
RCk7CisgICAgdm9pZCBjcmVhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29t
cG9zaXRlZEltYWdlSUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25z
dCBTdXJmYWNlVXBkYXRlSW5mbyYpOworICAgIHZvaWQgdXBkYXRlVGlsZUZvckNvbXBvc2l0ZWRJ
bWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELCBpbnQgdGlsZUlELCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mKTsKKyAgICB2b2lkIHJlbW92
ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCwgaW50
IHRpbGVJRCk7CiAgICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCwgY29uc3Qg
U2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJik7CiAgICAgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyhp
bnQgYXRsYXNJRCk7Ci0gICAgdm9pZCBjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2
NF90LCBjb25zdCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJik7Ci0gICAgdm9pZCBk
ZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCk7CiAgICAgdm9pZCBkaWRSZWNl
aXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbios
IENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsKICAgICB2b2lk
IHVwZGF0ZVZpZXdwb3J0KCk7CiAgICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Q29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmlu
CmluZGV4IGJhODhkZTUuLmIwOGYxYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2Fn
ZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgpAQCAtMjksMTAgKzI5LDEzIEBA
IG1lc3NhZ2VzIC0+IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkgewogICAgIENyZWF0ZVRpbGVG
b3JMYXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRh
cmdldFJlY3QsIFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKICAgICBVcGRh
dGVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgaW50IHRpbGVJRCwgV2ViQ29yZTo6SW50
UmVjdCB0YXJnZXRSZWN0LCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCiAg
ICAgUmVtb3ZlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0aWxlSUQpCisgICAg
Q3JlYXRlQ29tcG9zaXRlZEltYWdlKHVpbnRwdHJfdCBpbWFnZUlELCB1aW50MzJfdCBsYXllcklE
KQorICAgIERlc3Ryb3lDb21wb3NpdGVkSW1hZ2UodWludHB0cl90IGltYWdlSUQsIHVpbnQzMl90
IGxheWVySUQpCisgICAgQ3JlYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZSh1aW50cHRyX3QgaW1h
Z2VJRCwgaW50IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0YXJnZXRSZWN0LCBXZWJLaXQ6OlN1
cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCisgICAgVXBkYXRlVGlsZUZvckNvbXBvc2l0ZWRJ
bWFnZSh1aW50cHRyX3QgaW1hZ2VJRCwgaW50IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0YXJn
ZXRSZWN0LCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCisgICAgUmVtb3Zl
VGlsZUZvckNvbXBvc2l0ZWRJbWFnZSh1aW50cHRyX3QgaW1hZ2VJRCwgaW50IHRpbGVJRCkKICAg
ICBDcmVhdGVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCwgV2ViS2l0OjpTaGFyZWFibGVTdXJmYWNl
OjpIYW5kbGUgaGFuZGxlKQogICAgIFJlbW92ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lEKQotICAg
IENyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5LCBXZWJLaXQ6OlNoYXJl
YWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkKLSAgICBEZXN0cm95RGlyZWN0bHlDb21wb3NpdGVk
SW1hZ2UoaW50NjRfdCBrZXkpCiAgICAgRGlkUmVuZGVyRnJhbWUoV2ViQ29yZTo6SW50U2l6ZSBj
b250ZW50c1NpemUsIFdlYkNvcmU6OkludFJlY3QgY292ZXJlZFJlY3QpCiAgICAgRGlkQ2hhbmdl
U2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6SW50UG9pbnQgcG9zaXRpb24pCiAgICAgU2V0TGF5ZXJB
bmltYXRpb25zKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBh
bmltYXRpb25zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCmluZGV4IDFjZTIy
YjguLmUwYTBiZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAKQEAgLTI3
LDcgKzI3LDYgQEAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgogI2lu
Y2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCIKICNpbmNsdWRlICJNZXNzYWdlSUQu
aCIKLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
LmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJHTC5oIgpAQCAtMzAxLDggKzMwMCw2IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVy
ZXI6OnNldExheWVyU3RhdGUoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2ViTGF5ZXJJbmZvJiBsYXll
ckluCiAgICAgZWxzZQogICAgICAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShpZCk7CiAKLSAgICBh
c3NpZ25JbWFnZVRvTGF5ZXIobGF5ZXIsIGxheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsK
LQogICAgIC8vIE5ldmVyIG1ha2UgdGhlIHJvb3QgbGF5ZXIgY2xpcC4KICAgICBsYXllci0+c2V0
TWFza3NUb0JvdW5kcyhsYXllckluZm8uaXNSb290TGF5ZXIgPyBmYWxzZSA6IGxheWVySW5mby5t
YXNrc1RvQm91bmRzKTsKICAgICBsYXllci0+c2V0T3BhY2l0eShsYXllckluZm8ub3BhY2l0eSk7
CkBAIC0zNTQsNTkgKzM1MSwxMDEgQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0Um9vdExh
eWVySUQoV2ViTGF5ZXJJRCBsYXllcklEKQogICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChsYXll
cik7CiB9CiAKLVBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IExheWVyVHJlZVJl
bmRlcmVyOjpnZXRCYWNraW5nU3RvcmUoV2ViTGF5ZXJJRCBpZCkKK0Nvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlKiBMYXllclRyZWVSZW5kZXJlcjo6Z2V0QmFja2luZ1N0b3JlKFdlYkxheWVySUQgaWQp
CiB7CiAgICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVy
KGxheWVyQnlJRChpZCkpOwogICAgIEFTU0VSVChsYXllcik7CiAgICAgUmVmUHRyPENvb3JkaW5h
dGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBzdGF0aWNfY2FzdDxDb29yZGluYXRlZEJh
Y2tpbmdTdG9yZSo+KGxheWVyLT5iYWNraW5nU3RvcmUoKS5nZXQoKSk7CiAgICAgaWYgKCFiYWNr
aW5nU3RvcmUpIHsKICAgICAgICAgYmFja2luZ1N0b3JlID0gQ29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmU6OmNyZWF0ZSgpOwotICAgICAgICBsYXllci0+c2V0QmFja2luZ1N0b3JlKGJhY2tpbmdTdG9y
ZS5nZXQoKSk7CisgICAgICAgIGxheWVyLT5zZXRCYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKTsK
ICAgICB9CiAgICAgQVNTRVJUKGJhY2tpbmdTdG9yZSk7Ci0gICAgcmV0dXJuIGJhY2tpbmdTdG9y
ZTsKKyAgICByZXR1cm4gYmFja2luZ1N0b3JlLmdldCgpOworfQorCit2b2lkIExheWVyVHJlZVJl
bmRlcmVyOjpjcmVhdGVUaWxlRm9yTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlE
LCBmbG9hdCBzY2FsZSkKK3sKKyAgICBjcmVhdGVUaWxlKGdldEJhY2tpbmdTdG9yZShsYXllcklE
KSwgdGlsZUlELCBzY2FsZSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRp
bGVGb3JMYXllcihXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQpCit7CisgICAgcmVtb3Zl
VGlsZShnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCksIHRpbGVJRCk7CiB9CiAKLXZvaWQgTGF5ZXJU
cmVlUmVuZGVyZXI6OmNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBm
bG9hdCBzY2FsZSkKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGVGb3JMYXllcihX
ZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFRpbGVVcGRhdGUmIHVwZGF0ZSkK
IHsKLSAgICBnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCktPmNyZWF0ZVRpbGUodGlsZUlELCBzY2Fs
ZSk7CisgICAgdXBkYXRlVGlsZShnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCksIHRpbGVJRCwgdXBk
YXRlKTsKIH0KIAotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlVGlsZShXZWJMYXllcklE
IGxheWVySUQsIGludCB0aWxlSUQpCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxl
KENvb3JkaW5hdGVkQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludCB0aWxlSUQsIGZsb2F0
IHNjYWxlKQogewotICAgIGdldEJhY2tpbmdTdG9yZShsYXllcklEKS0+cmVtb3ZlVGlsZSh0aWxl
SUQpOworICAgIGJhY2tpbmdTdG9yZS0+Y3JlYXRlVGlsZSh0aWxlSUQsIHNjYWxlKTsKIH0KIAot
dm9pZCBMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGlu
dCB0aWxlSUQsIGNvbnN0IFRpbGVVcGRhdGUmIHVwZGF0ZSkKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVy
ZXI6OnJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50
IHRpbGVJRCkKIHsKLSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdT
dG9yZSA9IGdldEJhY2tpbmdTdG9yZShsYXllcklEKTsKKyAgICBiYWNraW5nU3RvcmUtPnJlbW92
ZVRpbGUodGlsZUlEKTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZShD
b29yZGluYXRlZEJhY2tpbmdTdG9yZSogcmF3QmFja2luZ1N0b3JlLCBpbnQgdGlsZUlELCBjb25z
dCBUaWxlVXBkYXRlJiB1cGRhdGUpCit7CisgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlPiBiYWNraW5nU3RvcmUgPSByYXdCYWNraW5nU3RvcmU7CiAgICAgYmFja2luZ1N0b3JlLT51
cGRhdGVUaWxlKHRpbGVJRCwgdXBkYXRlLnNvdXJjZVJlY3QsIHVwZGF0ZS50YXJnZXRSZWN0LCB1
cGRhdGUuc3VyZmFjZSwgdXBkYXRlLm9mZnNldCk7CiAgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBl
bmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOwogfQogCi12b2lkIExheWVyVHJlZVJlbmRl
cmVyOjpjcmVhdGVJbWFnZShpbnQ2NF90IGltYWdlSUQsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiB3ZWFrQml0bWFwKQordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlQ29tcG9zaXRl
ZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgaW1hZ2VJRCwgV2ViTGF5ZXJJRCBs
YXllcklEKQoreworICAgIENvbXBvc2l0ZWRJbWFnZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2NvbXBv
c2l0ZWRJbWFnZXMuZmluZChpbWFnZUlEKTsKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5n
U3RvcmU+IGJhY2tpbmdTdG9yZTsKKyAgICBpZiAoaXQgPT0gbV9jb21wb3NpdGVkSW1hZ2VzLmVu
ZCgpKSB7CisgICAgICAgIGJhY2tpbmdTdG9yZSA9IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpj
cmVhdGUoKTsKKyAgICAgICAgbV9jb21wb3NpdGVkSW1hZ2VzLmFkZChpbWFnZUlELCBiYWNraW5n
U3RvcmUpOworICAgIH0gZWxzZQorICAgICAgICBiYWNraW5nU3RvcmUgPSBpdC0+dmFsdWU7CisK
KyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsKKyAgICBBU1NF
UlQobGF5ZXIpOworICAgIEFTU0VSVCghbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSk7CisgICAgbGF5
ZXItPnNldENvbnRlbnRzVG9NZWRpYShiYWNraW5nU3RvcmUuZ2V0KCkpOworfQorCit2b2lkIExh
eWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95Q29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9z
aXRlZEltYWdlSUQgaW1hZ2VJRCwgV2ViTGF5ZXJJRCBsYXllcklEKQoreworICAgIEdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVySUQpOworICAgIEFTU0VSVChsYXllcik7Cisg
ICAgQVNTRVJUKGxheWVyLT5wbGF0Zm9ybUxheWVyKCkpOworICAgIGxheWVyLT5zZXRDb250ZW50
c1RvTWVkaWEoMCk7CisKKyAgICBDb21wb3NpdGVkSW1hZ2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9j
b21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1hZ2VJRCk7CisgICAgLy8gRklYTUUgOiBjaGVjayBpdGVy
YXRvciB0byByZWYgMS4KKyAgICBpZiAoaXQtPnZhbHVlLT5yZWZDb3VudCgpID09IDEpCisgICAg
ICAgIG1fY29tcG9zaXRlZEltYWdlcy5yZW1vdmUoaW1hZ2VJRCk7Cit9CisKK3ZvaWQgTGF5ZXJU
cmVlUmVuZGVyZXI6OmNyZWF0ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21w
b3NpdGVkSW1hZ2VJRCBpbWFnZUlELCBpbnQgdGlsZUlELCBmbG9hdCBzY2FsZSkKIHsKLSAgICBS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSB3ZWFrQml0bWFwOwotICAgIFJlZlB0cjxU
ZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IFRleHR1cmVNYXBw
ZXJUaWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7Ci0gICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJ
bWFnZXMuc2V0KGltYWdlSUQsIGJhY2tpbmdTdG9yZSk7Ci0gICAgYmFja2luZ1N0b3JlLT51cGRh
dGVDb250ZW50cyhtX3RleHR1cmVNYXBwZXIuZ2V0KCksIGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKS5n
ZXQoKSwgQml0bWFwVGV4dHVyZTo6VXBkYXRlQ2Fubm90TW9kaWZ5T3JpZ2luYWxJbWFnZURhdGEp
OworICAgIGNyZWF0ZVRpbGUoZ2V0QmFja2luZ1N0b3JlRm9yQ29tcG9zaXRlZEltYWdlKGltYWdl
SUQpLCB0aWxlSUQsIHNjYWxlKTsKIH0KIAotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6ZGVzdHJv
eUltYWdlKGludDY0X3QgaW1hZ2VJRCkKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRp
bGVGb3JDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCBpbWFnZUlE
LCBpbnQgdGlsZUlEKQogewotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnJlbW92ZShp
bWFnZUlEKTsKKyAgICByZW1vdmVUaWxlKGdldEJhY2tpbmdTdG9yZUZvckNvbXBvc2l0ZWRJbWFn
ZShpbWFnZUlEKSwgdGlsZUlEKTsKIH0KIAotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6YXNzaWdu
SW1hZ2VUb0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBpbnQ2NF90IGltYWdlSUQpCit2b2lk
IExheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKENvb3JkaW5h
dGVkQ29tcG9zaXRlZEltYWdlSUQgaW1hZ2VJRCwgaW50IHRpbGVJRCwgY29uc3QgVGlsZVVwZGF0
ZSYgdXBkYXRlKQogewotICAgIGlmICghaW1hZ2VJRCkgewotICAgICAgICBsYXllci0+c2V0Q29u
dGVudHNUb01lZGlhKDApOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIHVwZGF0ZVRpbGUo
Z2V0QmFja2luZ1N0b3JlRm9yQ29tcG9zaXRlZEltYWdlKGltYWdlSUQpLCB0aWxlSUQsIHVwZGF0
ZSk7Cit9CiAKLSAgICBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxUZXh0dXJlTWFwcGVyQmFja2lu
Z1N0b3JlPiA+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmQo
aW1hZ2VJRCk7Ci0gICAgQVNTRVJUKGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmVu
ZCgpKTsKLSAgICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKGl0LT52YWx1ZS5nZXQoKSk7CitD
b29yZGluYXRlZEJhY2tpbmdTdG9yZSogTGF5ZXJUcmVlUmVuZGVyZXI6OmdldEJhY2tpbmdTdG9y
ZUZvckNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEIGltYWdlSUQp
Cit7CisgICAgQVNTRVJUKG1fY29tcG9zaXRlZEltYWdlcy5jb250YWlucyhpbWFnZUlEKSk7Cisg
ICAgQ29tcG9zaXRlZEltYWdlTWFwOjppdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlZEltYWdlcy5m
aW5kKGltYWdlSUQpOworICAgIEFTU0VSVChpdC0+dmFsdWUuZ2V0KCkpOworICAgIHJldHVybiBp
dC0+dmFsdWUuZ2V0KCk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNvbW1pdFRpbGVP
cGVyYXRpb25zKCkKQEAgLTQ3NSw3ICs1MTQsNyBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpw
dXJnZUdMUmVzb3VyY2VzKCkKICAgICBpZiAobGF5ZXIpCiAgICAgICAgIGxheWVyLT5jbGVhckJh
Y2tpbmdTdG9yZXNSZWN1cnNpdmUoKTsKIAotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Vz
LmNsZWFyKCk7CisgICAgbV9jb21wb3NpdGVkSW1hZ2VzLmNsZWFyKCk7CiAjaWYgVVNFKEdSQVBI
SUNTX1NVUkZBQ0UpCiAgICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5jbGVhcigpOwogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVSZW5kZXJlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuaAppbmRleCBkZGVhMzFkLi5kYmM3Y2Q5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVSZW5kZXJlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmgKQEAgLTIyLDYgKzIyLDcgQEAKIAogI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKKyNp
bmNsdWRlICJDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELmgiCiAjaW5jbHVkZSAiU2hhcmVh
YmxlU3VyZmFjZS5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCkBAIC04NSwxMiArODYsMTUgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0TGF5ZXJGaWx0ZXJzKFdlYkxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9w
ZXJhdGlvbnMmKTsKICNlbmRpZgogCi0gICAgdm9pZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGlu
dCwgZmxvYXQgc2NhbGUpOwotICAgIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQpOwot
ICAgIHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQsIGNvbnN0IFRpbGVVcGRhdGUmKTsK
KyAgICB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihXZWJMYXllcklELCBpbnQsIGZsb2F0IHNjYWxl
KTsKKyAgICB2b2lkIHJlbW92ZVRpbGVGb3JMYXllcihXZWJMYXllcklELCBpbnQpOworICAgIHZv
aWQgdXBkYXRlVGlsZUZvckxheWVyKFdlYkxheWVySUQsIGludCwgY29uc3QgVGlsZVVwZGF0ZSYp
OworICAgIHZvaWQgY3JlYXRlQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZElt
YWdlSUQsIFdlYkxheWVySUQgbGF5ZXJJRCk7CisgICAgdm9pZCBkZXN0cm95Q29tcG9zaXRlZElt
YWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQsIFdlYkxheWVySUQgbGF5ZXJJRCk7Cisg
ICAgdm9pZCBjcmVhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRl
ZEltYWdlSUQsIGludCwgZmxvYXQgc2NhbGUpOworICAgIHZvaWQgcmVtb3ZlVGlsZUZvckNvbXBv
c2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELCBpbnQpOworICAgIHZvaWQg
dXBkYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlE
LCBpbnQsIGNvbnN0IFRpbGVVcGRhdGUmKTsKICAgICB2b2lkIGZsdXNoTGF5ZXJDaGFuZ2VzKCk7
Ci0gICAgdm9pZCBjcmVhdGVJbWFnZShpbnQ2NF90LCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1h
cD4pOwotICAgIHZvaWQgZGVzdHJveUltYWdlKGludDY0X3QpOwogICAgIHZvaWQgc2V0TGF5ZXJB
bmltYXRpb25zKFdlYkxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRp
b25zJik7CiAgICAgdm9pZCBzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wpOwogCkBAIC0xMjIsNiAr
MTI2LDEzIEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKICAgICB2b2lk
IHB1cmdlQmFja2luZ1N0b3JlcygpOwogCisgICAgdm9pZCBjcmVhdGVUaWxlKENvb3JkaW5hdGVk
QmFja2luZ1N0b3JlKiwgaW50LCBmbG9hdCBzY2FsZSk7CisgICAgdm9pZCByZW1vdmVUaWxlKENv
b3JkaW5hdGVkQmFja2luZ1N0b3JlKiwgaW50KTsKKyAgICB2b2lkIHVwZGF0ZVRpbGUoQ29vcmRp
bmF0ZWRCYWNraW5nU3RvcmUqLCBpbnQsIGNvbnN0IFRpbGVVcGRhdGUmKTsKKworICAgIENvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlKiBnZXRCYWNraW5nU3RvcmUoV2ViTGF5ZXJJRCk7CisgICAgQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmUqIGdldEJhY2tpbmdTdG9yZUZvckNvbXBvc2l0ZWRJbWFnZShD
b29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEKTsKKwogICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJM
YXllcklELCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKj4gTGF5ZXJNYXA7CiAgICAgV2ViQ29yZTo6
RmxvYXRTaXplIG1fY29udGVudHNTaXplOwogICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX3Zpc2li
bGVDb250ZW50c1JlY3Q7CkBAIC0xMjksMTIgKzE0MCwxMyBAQCBwcml2YXRlOgogICAgIC8vIFJl
bmRlciBxdWV1ZSBjYW4gYmUgYWNjZXNzZWQgb255IGZyb20gbWFpbiB0aHJlYWQgb3IgdXBkYXRl
UGFpbnROb2RlIGNhbGwgc3RhY2shCiAgICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQoKT4gPiBtX3Jl
bmRlclF1ZXVlOwogCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQogICAgIE93blB0cjxXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyPiBtX3RleHR1cmVNYXBwZXI7Ci0gICAgUGFzc1JlZlB0cjxDb29yZGlu
YXRlZEJhY2tpbmdTdG9yZT4gZ2V0QmFja2luZ1N0b3JlKFdlYkxheWVySUQpOwotICAgIEhhc2hN
YXA8aW50NjRfdCwgUmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+ID4g
bV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXM7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8Q29vcmRp
bmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCwgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiA+
IENvbXBvc2l0ZWRJbWFnZU1hcDsKKyAgICBDb21wb3NpdGVkSW1hZ2VNYXAgbV9jb21wb3NpdGVk
SW1hZ2VzOworCiAgICAgSGFzaFNldDxSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID4g
bV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzOwotI2VuZGlmCisKICNpZiBVU0UoR1JB
UEhJQ1NfU1VSRkFDRSkKICAgICB0eXBlZGVmIEhhc2hNYXA8V2ViTGF5ZXJJRCwgUmVmUHRyPFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlPiA+IFN1cmZhY2VCYWNraW5n
U3RvcmVNYXA7CiAgICAgU3VyZmFjZUJhY2tpbmdTdG9yZU1hcCBtX3N1cmZhY2VCYWNraW5nU3Rv
cmVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRD
b21wb3NpdGVkSW1hZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3
N2MzNmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS5jcHAKQEAg
LTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIkNvb3JkaW5hdGVkQ29t
cG9zaXRlZEltYWdlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJSZWdpb24uaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEIENvb3JkaW5hdGVkQ29tcG9zaXRl
ZEltYWdlOjpnZXRDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEKEltYWdlKiBpbWFnZSkKK3sK
KyAgICAvLyBGSVhNRTogVXNlIEF0b21pY0ltYWdlIHRoYXQgbm9hbXIgbWFkZS4KKyAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEPihpbWFnZSk7
Cit9CisKK1Bhc3NSZWZQdHI8Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U+IENvb3JkaW5hdGVk
Q29tcG9zaXRlZEltYWdlOjpjcmVhdGUoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VDbGllbnQq
IGNsaWVudCwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZShjbGllbnQsIGltYWdlKSk7Cit9CisKK0Nv
b3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlOjpDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZShDb29y
ZGluYXRlZENvbXBvc2l0ZWRJbWFnZUNsaWVudCogY2xpZW50LCBQYXNzUmVmUHRyPEltYWdlPiBp
bWFnZSkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1faW1hZ2UoaW1hZ2UpCisgICAg
LCBtX2lkKGdldENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQobV9pbWFnZS5nZXQoKSkpCisg
ICAgLCBtX2RpZEludmFsaWRhdGUoZmFsc2UpCisgICAgLCBtX2luVXBkYXRlTW9kZShmYWxzZSkK
K3sKKyAgICBtX2JhY2tpbmdTdG9yZSA9IFRpbGVkQmFja2luZ1N0b3JlOjpjcmVhdGUodGhpcywg
Q29vcmRpbmF0ZWRUaWxlQmFja2VuZDo6Y3JlYXRlKHRoaXMpKTsKK30KKworQ29vcmRpbmF0ZWRD
b21wb3NpdGVkSW1hZ2U6On5Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZSgpCit7Cit9CisKK3Zv
aWQgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U6OmFkZExheWVyQ2xpZW50KENvb3JkaW5hdGVk
Q29tcG9zaXRlZEltYWdlR3JhcGhpY3NMYXllckNsaWVudCogbGF5ZXJDbGllbnQpCit7CisgICAg
QVNTRVJUKCFtX2xheWVyQ2xpZW50cy5maW5kKGxheWVyQ2xpZW50KSk7CisgICAgbV9sYXllckNs
aWVudHMuYXBwZW5kKGxheWVyQ2xpZW50KTsKK30KKwordm9pZCBDb29yZGluYXRlZENvbXBvc2l0
ZWRJbWFnZTo6cmVtb3ZlTGF5ZXJDbGllbnQoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VHcmFw
aGljc0xheWVyQ2xpZW50KiBsYXllckNsaWVudCkKK3sKKyAgICBzaXplX3QgcG9zaXRpb24gPSBt
X2xheWVyQ2xpZW50cy5maW5kKGxheWVyQ2xpZW50KTsKKyAgICBBU1NFUlQocG9zaXRpb24gIT0g
bm90Rm91bmQpOworICAgIG1fbGF5ZXJDbGllbnRzLnJlbW92ZShwb3NpdGlvbik7Cit9CisKK3Zv
aWQgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U6OmludmFsaWRhdGUoKQoreworICAgIG1fYmFj
a2luZ1N0b3JlLT5zZXRTdXBwb3J0c0FscGhhKG1faW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhh
KCkpOworICAgIG1fZGlkSW52YWxpZGF0ZSA9IHRydWU7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRD
b21wb3NpdGVkSW1hZ2U6OnVwZGF0ZSgpCit7CisgICAgbV9pblVwZGF0ZU1vZGUgPSB0cnVlOwor
ICAgIG1fYmFja2luZ1N0b3JlLT5jb3ZlcldpdGhUaWxlc0lmTmVlZGVkKCk7CisgICAgaWYgKG1f
ZGlkSW52YWxpZGF0ZSkgeworICAgICAgICBtX2JhY2tpbmdTdG9yZS0+aW52YWxpZGF0ZSh0aWxl
ZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpKTsKKyAgICAgICAgbV9kaWRJbnZhbGlkYXRlID0g
ZmFsc2U7CisgICAgfQorICAgIG1fYmFja2luZ1N0b3JlLT51cGRhdGVUaWxlQnVmZmVycygpOwor
ICAgIG1faW5VcGRhdGVNb2RlID0gZmFsc2U7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRDb21wb3Np
dGVkSW1hZ2U6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpCit7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChyZWN0Lmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29udGV4dC0+ZHJhd0ltYWdlKG1faW1h
Z2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIHJlY3QpOworfQorCit2b2lkIENvb3JkaW5h
dGVkQ29tcG9zaXRlZEltYWdlOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNvbnN0IFZlY3Rv
cjxJbnRSZWN0PiYgLyogdXBkYXRlZFJlY3RzICovKQoreworfQorCitib29sIENvb3JkaW5hdGVk
Q29tcG9zaXRlZEltYWdlOjp0aWxlZEJhY2tpbmdTdG9yZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1faW5VcGRhdGVNb2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIG1fY2xpZW50LT5sYXllclRyZWVDb21wb3NpdGVkSW1hZ2VUaWxlVXBkYXRlc0FsbG93
ZWQoKTsKK30KKworSW50UmVjdCBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6dGlsZWRCYWNr
aW5nU3RvcmVDb250ZW50c1JlY3QoKQoreworICAgIHJldHVybiBJbnRSZWN0KDAsIDAsIG1faW1h
Z2UtPndpZHRoKCksIG1faW1hZ2UtPmhlaWdodCgpKTsKK30KKworSW50UmVjdCBDb29yZGluYXRl
ZENvbXBvc2l0ZWRJbWFnZTo6dGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpCit7CisgICAg
UmVnaW9uIHVuaXRlZERpcnR5UmVnaW9uOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9s
YXllckNsaWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgIHVuaXRlZERpcnR5UmVnaW9uLnVuaXRl
KG1fbGF5ZXJDbGllbnRzW2ldLT5jb21wb3NpdGVkSW1hZ2VWaXNpYmxlUmVjdCgpKTsKKworICAg
IEludFJlY3QgdW5pdGVkRGlydHlSZWN0ID0gdW5pdGVkRGlydHlSZWdpb24uYm91bmRzKCk7Cisg
ICAgdW5pdGVkRGlydHlSZWN0LmludGVyc2VjdCh0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVj
dCgpKTsKKyAgICByZXR1cm4gdW5pdGVkRGlydHlSZWN0OworfQorCitDb2xvciBDb29yZGluYXRl
ZENvbXBvc2l0ZWRJbWFnZTo6dGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25z
dAoreworICAgIHJldHVybiBDb2xvcjo6dHJhbnNwYXJlbnQ7Cit9CisKK1Bhc3NPd25QdHI8R3Jh
cGhpY3NDb250ZXh0PiBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6YmVnaW5Db250ZW50VXBk
YXRlKGNvbnN0IEludFNpemUmIHNpemUsIGludCYgYXRsYXMsIEludFBvaW50JiBvZmZzZXQpCit7
CisgICAgcmV0dXJuIG1fY2xpZW50LT5iZWdpbkNvbXBvc2l0ZWRJbWFnZVVwZGF0ZShzaXplLCBt
X2ltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpID8gU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0
c0FscGhhIDogU2hhcmVhYmxlQml0bWFwOjpOb0ZsYWdzLCBhdGxhcywgb2Zmc2V0KTsKK30KKwor
dm9pZCBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6Y3JlYXRlVGlsZShpbnQgdGlsZUlELCBj
b25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgSW50UmVjdCYgdGFyZ2V0
UmVjdCkKK3sKKyAgICBtX2NsaWVudC0+Y3JlYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShpZCgp
LCB0aWxlSUQsIHVwZGF0ZUluZm8sIHRhcmdldFJlY3QpOworfQorCit2b2lkIENvb3JkaW5hdGVk
Q29tcG9zaXRlZEltYWdlOjp1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRh
dGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQoreworICAgIG1f
Y2xpZW50LT51cGRhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKGlkKCksIHRpbGVJRCwgdXBkYXRl
SW5mbywgdGFyZ2V0UmVjdCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U6
OnJlbW92ZVRpbGUoaW50IHRpbGVJRCkKK3sKKyAgICBtX2NsaWVudC0+cmVtb3ZlVGlsZUZvckNv
bXBvc2l0ZWRJbWFnZShpZCgpLCB0aWxlSUQpOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMzM2ZDQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS5oCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKworI2lmbmRlZiBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZV9oCisjZGVm
aW5lIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlX2gKKworI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKKyNpbmNsdWRlICJDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELmgiCisjaW5j
bHVkZSAiQ29vcmRpbmF0ZWRUaWxlLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJ
bnRTaXplLmgiCisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSAiU3VyZmFj
ZVVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUg
IlRpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdy
YXBoaWNzQ29udGV4dDsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIENvb3JkaW5h
dGVkQ29tcG9zaXRlZEltYWdlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICAvLyBDb29yZGluYXRlZFRp
bGVDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShD
b29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBk
YXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJ
RCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlRm9yQ29tcG9zaXRlZElt
YWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQsIGludCB0aWxlSUQpID0gMDsKKyAgICB2
aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbXBvc2l0
ZWRJbWFnZVVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpG
bGFncywgaW50JiBhdGxhc0lELCBXZWJDb3JlOjpJbnRQb2ludCYpID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgbGF5ZXJUcmVlQ29tcG9zaXRlZEltYWdlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3Qg
PSAwOworfTsKKworY2xhc3MgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VHcmFwaGljc0xheWVy
Q2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgY29tcG9zaXRl
ZEltYWdlVmlzaWJsZVJlY3QoKSA9IDA7Cit9OworCitjbGFzcyBDb29yZGluYXRlZENvbXBvc2l0
ZWRJbWFnZSA6IHB1YmxpYyBSZWZDb3VudGVkPENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlPgor
ICAgICwgcHVibGljIFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlQ2xpZW50CisgICAgLCBwdWJs
aWMgQ29vcmRpbmF0ZWRUaWxlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZT4gY3JlYXRlKENvb3JkaW5hdGVkQ29tcG9zaXRl
ZEltYWdlQ2xpZW50KiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJbWFnZT4pOworICAgIHZpcnR1YWwg
fkNvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlKCk7CisKKyAgICBzdGF0aWMgQ29vcmRpbmF0ZWRD
b21wb3NpdGVkSW1hZ2VJRCBnZXRDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEKFdlYkNvcmU6
OkltYWdlKik7CisgICAgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCBpZCgpIGNvbnN0IHsg
cmV0dXJuIG1faWQ7IH0KKworICAgIHZvaWQgYWRkTGF5ZXJDbGllbnQoQ29vcmRpbmF0ZWRDb21w
b3NpdGVkSW1hZ2VHcmFwaGljc0xheWVyQ2xpZW50Kik7CisgICAgdm9pZCByZW1vdmVMYXllckNs
aWVudChDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUdyYXBoaWNzTGF5ZXJDbGllbnQqKTsKKwor
ICAgIHZvaWQgaW52YWxpZGF0ZSgpOworICAgIHZvaWQgdXBkYXRlKCk7CisKK3ByaXZhdGU6Cisg
ICAgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VD
bGllbnQqLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkltYWdlPik7CisKKyAgICAvLyBUaWxlZEJhY2tp
bmdTdG9yZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVn
aW4oKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkludFJlY3Q+JiBwYWludGVkQXJlYSkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBib29sIHRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQoKSBjb25zdCBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1Jl
Y3QoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgdGlsZWRCYWNraW5n
U3RvcmVWaXNpYmxlUmVjdCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6Q29sb3Ig
dGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCBPVkVSUklERTsKKworICAg
IC8vIENvb3JkaW5hdGVkVGlsZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKGlu
dCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNv
bnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKGludCB0aWxlSUQpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVu
dFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgaW50JiBhdGxhc0lELCBXZWJDb3JlOjpJ
bnRQb2ludCYpIE9WRVJSSURFOworCisgICAgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VDbGll
bnQqIG1fY2xpZW50OworICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4gbV9pbWFnZTsKKyAgICBD
b29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEIG1faWQ7CisgICAgT3duUHRyPFdlYkNvcmU6OlRp
bGVkQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBWZWN0b3I8Q29vcmRpbmF0ZWRD
b21wb3NpdGVkSW1hZ2VHcmFwaGljc0xheWVyQ2xpZW50Kj4gbV9sYXllckNsaWVudHM7CisKKyAg
ICBib29sIG1fZGlkSW52YWxpZGF0ZSA6IDE7CisgICAgYm9vbCBtX2luVXBkYXRlTW9kZSA6IDE7
Cit9OworCit9CisjZW5kaWYKKworI2VuZGlmIC8vIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdl
X0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuY3BwCmluZGV4IGEwZjRmNjUuLjNiYTE4ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcApAQCAtODIs
NiArODIsMTMgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUZpbHRl
cnMoKQogfQogI2VuZGlmCiAKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFu
Z2VDb21wb3NpdGVkSW1hZ2UoKQoreworICAgIG1fc2hvdWxkU3luY0NvbXBvc2l0ZWRJbWFnZSA9
IHRydWU7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hS
ZXF1aXJlZCh0aGlzKTsKK30KKwogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNo
b3VsZFVwZGF0ZVZpc2libGVSZWN0KCkKIHsKICAgICBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0
ID0gdHJ1ZTsKQEAgLTEwNSwxMSArMTEyLDEzIEBAIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKICAg
ICAsIG1fc2hvdWxkU3luY0xheWVyU3RhdGUodHJ1ZSkKICAgICAsIG1fc2hvdWxkU3luY0NoaWxk
cmVuKHRydWUpCiAgICAgLCBtX3Nob3VsZFN5bmNGaWx0ZXJzKHRydWUpCisgICAgLCBtX3Nob3Vs
ZFN5bmNDb21wb3NpdGVkSW1hZ2UodHJ1ZSkKICAgICAsIG1fc2hvdWxkU3luY0FuaW1hdGlvbnMo
dHJ1ZSkKICAgICAsIG1fZml4ZWRUb1ZpZXdwb3J0KGZhbHNlKQogICAgICwgbV9jYW52YXNOZWVk
c0Rpc3BsYXkoZmFsc2UpCiAgICAgLCBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCgw
KQogICAgICwgbV9jb250ZW50c1NjYWxlKDEpCisgICAgLCBtX2NvbXBvc2l0ZWROYXRpdmVJbWFn
ZVB0cigwKQogICAgICwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKDApCiAgICAgLCBtX2FuaW1hdGlv
blN0YXJ0ZWRUaW1lcih0aGlzLCAmQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphbmltYXRpb25T
dGFydGVkVGltZXJGaXJlZCkKIHsKQEAgLTMxOCw5ICszMjcsNiBAQCB2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHIpCiAKIHZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgpCiB7Ci0g
ICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IG1faW1hZ2U7Ci0gICAgc2V0Q29udGVudHNUb0ltYWdl
KDApOwotICAgIHNldENvbnRlbnRzVG9JbWFnZShpbWFnZS5nZXQoKSk7CiAgICAgbV9jYW52YXNO
ZWVkc0Rpc3BsYXkgPSB0cnVlOwogICAgIGlmIChjbGllbnQoKSkKICAgICAgICAgY2xpZW50KCkt
Pm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7CkBAIC0zNDcsMjUgKzM1MywyNiBAQCBib29sIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25z
JiBuZXdGaWx0ZXJzKQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVu
dHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKIHsKLSAgICBpZiAoaW1hZ2UgPT0gbV9pbWFnZSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGludDY0X3QgbmV3SUQgPSAwOwotICAgIGlmIChtX0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllckNsaWVudCkgewotICAgICAgICAvLyBXZSBhZG9wdCBmaXJzdCwgaW4g
Y2FzZSB0aGlzIGlzIHRoZSBzYW1lIGZyYW1lIC0gdGhhdCB3YXkgd2UgYXZvaWQgZGVzdHJveWlu
ZyBhbmQgcmVjcmVhdGluZyB0aGUgaW1hZ2UuCi0gICAgICAgIG5ld0lEID0gbV9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXJDbGllbnQtPmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoaW1hZ2UpOwotICAg
ICAgICBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+cmVsZWFzZUltYWdlQmFja2lu
Z1N0b3JlKG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOwotICAgICAgICBkaWRDaGFu
Z2VMYXllclN0YXRlKCk7Ci0gICAgICAgIGlmIChtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9y
ZUlEICYmIG5ld0lEID09IG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpCisgICAgaWYg
KGltYWdlKSB7CisgICAgICAgIC8vIE1ha2UgdGhlIGRlY2lzaW9uIGFib3V0IHdoZXRoZXIgdGhl
IGltYWdlIGhhcyBjaGFuZ2VkLgorICAgICAgICAvLyBUaGlzIGNvZGUgbWFrZXMgdGhlIGFzc3Vt
cHRpb24gdGhhdCBwb2ludGVyIGVxdWFsaXR5IG9uIGEgTmF0aXZlSW1hZ2VQdHIgaXMgYSB2YWxp
ZCB3YXkgdG8gdGVsbCBpZiB0aGUgaW1hZ2UgaXMgY2hhbmdlZC4KKyAgICAgICAgLy8gVGhpcyBh
c3N1bXB0aW9uIGlzIHRydWUgaW4gUXQsIEdUSyBhbmQgRUZMLgorICAgICAgICBOYXRpdmVJbWFn
ZVB0ciBuZXdOYXRpdmVJbWFnZVB0ciA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpOworICAgICAgICBpZiAoIW5ld05hdGl2ZUltYWdlUHRyKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGlmIChuZXdOYXRpdmVJbWFnZVB0ciA9PSBtX2NvbXBvc2l0ZWROYXRpdmVJ
bWFnZVB0cikKICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX2NvbXBvc2l0ZWRJbWFn
ZSA9IGltYWdlOworICAgICAgICBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0ciA9IG5ld05hdGl2
ZUltYWdlUHRyOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIG1fQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyQ2xpZW50IGlzIG5vdCBzZXQgeWV0IHRoZXJlIHNob3VsZCBiZSBubyBiYWNraW5n
IHN0b3JlIElELgotICAgICAgICBBU1NFUlQoIW1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3Jl
SUQpOwotICAgICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgICAgIG1fY29tcG9zaXRl
ZEltYWdlID0gMDsKKyAgICAgICAgbV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIgPSAwOwogICAg
IH0KIAotICAgIG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQgPSBuZXdJRDsKLSAgICBt
X2ltYWdlID0gaW1hZ2U7CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKGlt
YWdlKTsKKyAgICBkaWRDaGFuZ2VDb21wb3NpdGVkSW1hZ2UoKTsKIH0KIAogdm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKQEAg
LTQ1OSw2ICs0NjYsMjMgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNGaWx0
ZXJzKCkKIH0KICNlbmRpZgogCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0Nv
bXBvc2l0ZWRJbWFnZSgpCit7CisgICAgaWYgKCFtX3Nob3VsZFN5bmNDb21wb3NpdGVkSW1hZ2Up
CisgICAgICAgIHJldHVybjsKKyAgICBtX3Nob3VsZFN5bmNDb21wb3NpdGVkSW1hZ2UgPSBmYWxz
ZTsKKworICAgIHJlbGVhc2VDb21wb3NpdGVkSW1hZ2VJZk5lZWRlZCgpOworCisgICAgaWYgKG1f
Y29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyKSB7CisgICAgICAgIEFTU0VSVCghbV9tYWluQmFja2lu
Z1N0b3JlKTsKKyAgICAgICAgaWYgKCFtX2Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlKQorICAg
ICAgICAgICAgbV9jb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZSA9IG1fQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyQ2xpZW50LT5hZG9wdENvbXBvc2l0ZWRJbWFnZShtX2NvbXBvc2l0ZWRJbWFnZS5n
ZXQoKSwgbV9pZCk7CisgICAgICAgIG1fY29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UtPmFkZExh
eWVyQ2xpZW50KHRoaXMpOworICAgICAgICBtX2Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLT5p
bnZhbGlkYXRlKCk7CisgICAgfQorfQorCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c3luY0xheWVyU3RhdGUoKQogewogICAgIGlmICghbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSkKQEAg
LTUxMiwxOCArNTM2LDggQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52
YXMoKQogICAgIG1fY2FudmFzTmVlZHNEaXNwbGF5ID0gZmFsc2U7CiB9CiAKLXZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjplbnN1cmVJbWFnZUJhY2tpbmdTdG9yZSgpCi17Ci0gICAgaWYg
KCFtX2ltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX2xheWVySW5mby5pbWFnZUJh
Y2tpbmdTdG9yZUlEKQotICAgICAgICBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEID0g
bV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUo
bV9pbWFnZS5nZXQoKSk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpmbHVz
aENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKIHsKLSAgICAvLyBUaGUgcmVtb3Rl
IGltYWdlIG1pZ2h0IGhhdmUgYmVlbiByZWxlYXNlZCBieSBwdXJnZUJhY2tpbmdTdG9yZXMuCi0g
ICAgZW5zdXJlSW1hZ2VCYWNraW5nU3RvcmUoKTsKICAgICBzeW5jTGF5ZXJTdGF0ZSgpOwogICAg
IHN5bmNBbmltYXRpb25zKCk7CiAgICAgY29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKTsK
QEAgLTUzMiw5ICs1NDYsMzEgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmZsdXNo
Q29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKQogICAgIHN5bmNGaWx0ZXJzKCk7CiAj
ZW5kaWYKICAgICB1cGRhdGVDb250ZW50QnVmZmVycygpOworICAgIHN5bmNDb21wb3NpdGVkSW1h
Z2UoKTsKICAgICBzeW5jQ2FudmFzKCk7CiB9CiAKK0ludFJlY3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpjb21wb3NpdGVkSW1hZ2VWaXNpYmxlUmVjdCgpCit7CisgICAgQVNTRVJUKG1fY29v
cmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UpOworICAgIEZsb2F0UmVjdCB2aXNpYmxlSW1hZ2VSZWN0
ID0gdGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpOworICAgIEZsb2F0U2l6ZSByYXRpb09m
aW1hZ2VPdmVyTGF5ZXJTaXplKG1fY29tcG9zaXRlZEltYWdlLT53aWR0aCgpIC8gc2l6ZSgpLndp
ZHRoKCksIG1fY29tcG9zaXRlZEltYWdlLT5oZWlnaHQoKSAvIHNpemUoKS5oZWlnaHQoKSk7Cisg
ICAgdmlzaWJsZUltYWdlUmVjdC5zY2FsZShyYXRpb09maW1hZ2VPdmVyTGF5ZXJTaXplLndpZHRo
KCksIHJhdGlvT2ZpbWFnZU92ZXJMYXllclNpemUuaGVpZ2h0KCkpOworICAgIHJldHVybiBlbmNs
b3NlZEludFJlY3QodmlzaWJsZUltYWdlUmVjdCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpyZWxlYXNlQ29tcG9zaXRlZEltYWdlSWZOZWVkZWQoYm9vbCBkaWRQdXJnZSkK
K3sKKyAgICBpZiAoIW1fY29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fY29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UtPnJlbW92ZUxheWVyQ2xpZW50
KHRoaXMpOworICAgIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgaW1hZ2VJRCA9IG1fY29v
cmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UtPmlkKCk7CisgICAgbV9jb29yZGluYXRlZENvbXBvc2l0
ZWRJbWFnZS5jbGVhcigpOworICAgIGlmICghZGlkUHVyZ2UpCisgICAgICAgIG1fQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5yZWxlYXNlQ29tcG9zaXRlZEltYWdlKGltYWdlSUQsIG1f
aWQpOworfQorCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3Rv
cmVQYWludEJlZ2luKCkKIHsKIH0KQEAgLTU4NCw3ICs2MjAsNyBAQCB2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6YWRqdXN0Q29udGVudHNTY2FsZSgpCiAKIHZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpjcmVhdGVCYWNraW5nU3RvcmUoKQogewotICAgIG1fbWFpbkJhY2tpbmdT
dG9yZSA9IGFkb3B0UHRyKG5ldyBUaWxlZEJhY2tpbmdTdG9yZSh0aGlzLCBDb29yZGluYXRlZFRp
bGVCYWNrZW5kOjpjcmVhdGUodGhpcykpKTsKKyAgICBtX21haW5CYWNraW5nU3RvcmUgPSBUaWxl
ZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKHRoaXMsIENvb3JkaW5hdGVkVGlsZUJhY2tlbmQ6OmNyZWF0
ZSh0aGlzKSk7CiAgICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRTdXBwb3J0c0FscGhhKCFjb250
ZW50c09wYXF1ZSgpKTsKICAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldENvbnRlbnRzU2NhbGUo
ZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKTsKIH0KQEAgLTYzNyw3ICs2NzMsNyBAQCBDb2xvciBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9y
KCkgY29uc3QKICAgICByZXR1cm4gY29udGVudHNPcGFxdWUoKSA/IENvbG9yOjp3aGl0ZSA6IENv
bG9yOjp0cmFuc3BhcmVudDsKIH0KIAotUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ+IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIHNpemUsIGludCYgYXRsYXMsIFdlYkNvcmU6OkludFBvaW50JiBvZmZz
ZXQpCitQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgaW50JiBhdGxhcywgSW50
UG9pbnQmIG9mZnNldCkKIHsKICAgICByZXR1cm4gbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJD
bGllbnQtPmJlZ2luQ29udGVudFVwZGF0ZShzaXplLCBjb250ZW50c09wYXF1ZSgpID8gMCA6IFNo
YXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSwgYXRsYXMsIG9mZnNldCk7CiB9CkBAIC02ODQs
MTEgKzcyMCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpwdXJnZUJhY2tpbmdT
dG9yZXMoKQogewogICAgIG1fbWFpbkJhY2tpbmdTdG9yZS5jbGVhcigpOwogICAgIG1fcHJldmlv
dXNCYWNraW5nU3RvcmUuY2xlYXIoKTsKLQotICAgIGlmIChtX2xheWVySW5mby5pbWFnZUJhY2tp
bmdTdG9yZUlEKSB7Ci0gICAgICAgIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5y
ZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUobV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCk7
Ci0gICAgICAgIG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQgPSAwOwotICAgIH0KKyAg
ICByZWxlYXNlQ29tcG9zaXRlZEltYWdlSWZOZWVkZWQodHJ1ZSk7CiAKICAgICBkaWRDaGFuZ2VM
YXllclN0YXRlKCk7CiAgICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKQEAgLTczNCw3ICs3NjYsNyBA
QCBib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6aGFzUGVuZGluZ1Zpc2libGVDaGFuZ2Vz
KCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmICghbV9zaG91bGRT
eW5jTGF5ZXJTdGF0ZSAmJiAhbV9zaG91bGRTeW5jQ2hpbGRyZW4gJiYgIW1fc2hvdWxkU3luY0Zp
bHRlcnMgJiYgIW1fc2hvdWxkU3luY0FuaW1hdGlvbnMgJiYgIW1fY2FudmFzTmVlZHNEaXNwbGF5
KQorICAgIGlmICghbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSAmJiAhbV9zaG91bGRTeW5jQ2hpbGRy
ZW4gJiYgIW1fc2hvdWxkU3luY0ZpbHRlcnMgJiYgIW1fc2hvdWxkU3luY0NvbXBvc2l0ZWRJbWFn
ZSAmJiAhbV9zaG91bGRTeW5jQW5pbWF0aW9ucyAmJiAhbV9jYW52YXNOZWVkc0Rpc3BsYXkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBzZWxmT3JBbmNlc3RvckhhdmVOb25B
ZmZpbmVUcmFuc2Zvcm1zKCkgfHwgIXRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKS5pc0Vt
cHR5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllci5oCmluZGV4IGZiODc4NzQuLmJlOGJlODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCkBAIC0yMSw2ICsy
MSw3IEBACiAjaWZuZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcl9oCiAjZGVmaW5lIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcl9oCiAKKyNpbmNsdWRlICJDb29yZGluYXRlZENvbXBvc2l0ZWRJ
bWFnZS5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkVGlsZS5oIgogI2luY2x1ZGUgIkZsb2F0UG9p
bnQzRC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKQEAgLTU0LDEwICs1NSwxMSBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJ
RCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQpID0g
MDsKIAorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZT4g
YWRvcHRDb21wb3NpdGVkSW1hZ2UoV2ViQ29yZTo6SW1hZ2UqLCBXZWJMYXllcklEKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbGVhc2VDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3Np
dGVkSW1hZ2VJRCwgV2ViTGF5ZXJJRCkgPSAwOworCiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRS
ZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGxh
eWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGludDY0
X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9yZShXZWJDb3JlOjpJbWFnZSopID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKGludDY0X3QpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoV2ViTGF5ZXJJRCwgY29uc3QgV2ViTGF5ZXJJbmZvJikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJlbihXZWJMYXllcklELCBjb25z
dCBWZWN0b3I8V2ViTGF5ZXJJRD4mKSA9IDA7CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQpAQCAt
ODAsNyArODIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllciA6IHB1YmxpYyBHcmFwaGljc0xheWVyCiAgICAgLCBwdWJsaWMgVGlsZWRCYWNr
aW5nU3RvcmVDbGllbnQKLSAgICAsIHB1YmxpYyBXZWJLaXQ6OkNvb3JkaW5hdGVkVGlsZUNsaWVu
dCB7CisgICAgLCBwdWJsaWMgV2ViS2l0OjpDb29yZGluYXRlZFRpbGVDbGllbnQKKyAgICAsIHB1
YmxpYyBXZWJLaXQ6OkNvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlR3JhcGhpY3NMYXllckNsaWVu
dCB7CiBwdWJsaWM6CiAgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJD
bGllbnQqKTsKICAgICB2aXJ0dWFsIH5Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoKTsKQEAgLTE2
OCw2ICsxNzEsNyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICB2b2lk
IGRpZENoYW5nZUZpbHRlcnMoKTsKICNlbmRpZgorICAgIHZvaWQgZGlkQ2hhbmdlQ29tcG9zaXRl
ZEltYWdlKCk7CiAKICAgICB2b2lkIHN5bmNMYXllclN0YXRlKCk7CiAgICAgdm9pZCBzeW5jQW5p
bWF0aW9ucygpOwpAQCAtMTc1LDYgKzE3OSw3IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKENTU19G
SUxURVJTKQogICAgIHZvaWQgc3luY0ZpbHRlcnMoKTsKICNlbmRpZgorICAgIHZvaWQgc3luY0Nv
bXBvc2l0ZWRJbWFnZSgpOwogICAgIHZvaWQgc3luY0NhbnZhcygpOwogICAgIHZvaWQgZW5zdXJl
SW1hZ2VCYWNraW5nU3RvcmUoKTsKICAgICB2b2lkIGNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVS
ZWN0KCk7CkBAIC0xODIsNiArMTg3LDExIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNyZWF0ZUJh
Y2tpbmdTdG9yZSgpOwogCisgICAgLy8gQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VHcmFwaGlj
c0xheWVyQ2xpZW50CisgICAgdmlydHVhbCBJbnRSZWN0IGNvbXBvc2l0ZWRJbWFnZVZpc2libGVS
ZWN0KCkgT1ZFUlJJREU7CisKKyAgICB2b2lkIHJlbGVhc2VDb21wb3NpdGVkSW1hZ2VJZk5lZWRl
ZChib29sIGRpZFB1cmdlID0gZmFsc2UpOworCiAgICAgYm9vbCBzZWxmT3JBbmNlc3RvckhhdmVO
b25BZmZpbmVUcmFuc2Zvcm1zKCk7CiAgICAgYm9vbCBzaG91bGRVc2VUaWxlZEJhY2tpbmdTdG9y
ZSgpOwogICAgIHZvaWQgYWRqdXN0Q29udGVudHNTY2FsZSgpOwpAQCAtMTkzLDcgKzIwMyw2IEBA
IHByaXZhdGU6CiAKICAgICBXZWJLaXQ6OldlYkxheWVySUQgbV9pZDsKICAgICBXZWJLaXQ6Oldl
YkxheWVySW5mbyBtX2xheWVySW5mbzsKLSAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CiAgICAg
R3JhcGhpY3NMYXllciogbV9tYXNrVGFyZ2V0OwogICAgIEZsb2F0UmVjdCBtX25lZWRzRGlzcGxh
eVJlY3Q7CiAgICAgR3JhcGhpY3NMYXllclRyYW5zZm9ybSBtX2xheWVyVHJhbnNmb3JtOwpAQCAt
MjAyLDYgKzIxMSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZFN5bmNMYXllclN0YXRl
OiAxOwogICAgIGJvb2wgbV9zaG91bGRTeW5jQ2hpbGRyZW46IDE7CiAgICAgYm9vbCBtX3Nob3Vs
ZFN5bmNGaWx0ZXJzOiAxOworICAgIGJvb2wgbV9zaG91bGRTeW5jQ29tcG9zaXRlZEltYWdlOiAx
OwogICAgIGJvb2wgbV9zaG91bGRTeW5jQW5pbWF0aW9uczogMTsKICAgICBib29sIG1fZml4ZWRU
b1ZpZXdwb3J0IDogMTsKICAgICBib29sIG1fY2FudmFzTmVlZHNEaXNwbGF5IDogMTsKQEAgLTIx
Myw2ICsyMjMsMTIgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8VGlsZWRCYWNraW5nU3RvcmU+IG1f
bWFpbkJhY2tpbmdTdG9yZTsKICAgICBPd25QdHI8VGlsZWRCYWNraW5nU3RvcmU+IG1fcHJldmlv
dXNCYWNraW5nU3RvcmU7CiAgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOworCisgICAgLy8gV2hl
biBtX2NvbXBvc2l0ZWRJbWFnZSBleGlzdHMsIHRoaXMgbGF5ZXIgY2Fubm90IGJlIGEgY29udGVu
dCBsYXllciwgYmVjYXVzZSBzZXREcmF3c0NvbnRlbnQgYW5kIHNldENvbnRlbnRzVG9JbWFnZSBh
cmUgbXV0dWFsbHkgZXhjbHVzaXZlLgorICAgIFJlZlB0cjxJbWFnZT4gbV9jb21wb3NpdGVkSW1h
Z2U7CisgICAgTmF0aXZlSW1hZ2VQdHIgbV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHI7CisgICAg
UmVmUHRyPFdlYktpdDo6Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U+IG1fY29vcmRpbmF0ZWRD
b21wb3NpdGVkSW1hZ2U7CisKICAgICBQbGF0Zm9ybUxheWVyKiBtX2NhbnZhc1BsYXRmb3JtTGF5
ZXI7CiAgICAgVGltZXI8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyPiBtX2FuaW1hdGlvblN0YXJ0
ZWRUaW1lcjsKICAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBtX2FuaW1hdGlvbnM7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAKaW5k
ZXggOWViMzc4ZS4uNmI1MTg3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcApAQCAtMjY3LDcgKzI2Nyw3IEBAIGJvb2wgTGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpCiAKICAgICBtX3Jvb3RM
YXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwogCi0gICAgcHVy
Z2VSZWxlYXNlZEltYWdlcygpOworICAgIHVwZGF0ZUNvbXBvc2l0ZWRJbWFnZXMoKTsKIAogICAg
IGlmIChtX3Nob3VsZFN5bmNSb290TGF5ZXIpIHsKICAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRSb290Q29tcG9zaXRpbmdMYXll
cih0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmlkKCkpKTsK
QEAgLTQ0NywxMyArNDQ3LDYgQEAgdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGlkUGVyZm9y
bVNjaGVkdWxlZExheWVyRmx1c2goKQogICAgIH0KIH0KIAotdm9pZCBMYXllclRyZWVDb29yZGlu
YXRvcjo6cHVyZ2VSZWxlYXNlZEltYWdlcygpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX3JlbGVhc2VkRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnNpemUoKTsgKytpKQotICAgICAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkRl
c3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShtX3JlbGVhc2VkRGlyZWN0bHlDb21wb3NpdGVk
SW1hZ2VzW2ldKSk7Ci0gICAgbV9yZWxlYXNlZERpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5jbGVh
cigpOwotfQotCiB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllckZsdXNoVGltZXJGaXJl
ZChUaW1lcjxMYXllclRyZWVDb29yZGluYXRvcj4qKQogewogICAgIHBlcmZvcm1TY2hlZHVsZWRM
YXllckZsdXNoKCk7CkBAIC00ODEsODAgKzQ3NCw2IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCkKICAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBu
dWxscHRyOwogfQogCi1pbnQ2NF90IExheWVyVHJlZUNvb3JkaW5hdG9yOjphZG9wdEltYWdlQmFj
a2luZ1N0b3JlKEltYWdlKiBpbWFnZSkKLXsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1
cm4gSW52YWxpZFdlYkxheWVySUQ7Ci0KLSAgICBpbnQ2NF90IGtleSA9IDA7Ci0KLSNpZiBQTEFU
Rk9STShRVCkKLSAgICBRUGl4bWFwKiBuYXRpdmVJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpOwotCi0gICAgaWYgKCFuYXRpdmVJbWFnZSkKLSAgICAgICAgcmV0dXJu
IEludmFsaWRXZWJMYXllcklEOwotCi0gICAga2V5ID0gbmF0aXZlSW1hZ2UtPmNhY2hlS2V5KCk7
Ci0jZWxpZiBVU0UoQ0FJUk8pCi0gICAgTmF0aXZlSW1hZ2VDYWlybyogbmF0aXZlSW1hZ2UgPSBp
bWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIW5hdGl2ZUltYWdl
KQotICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7Ci0gICAgLy8gVGhpcyBjYW4gYmUg
c2FmZWx5IGRvbmUgc2luY2Ugd2Ugb3duIHRoZSByZWZlcmVuY2UuCi0gICAgLy8gQSBjb3JyZXNw
b25kaW5nIGNhaXJvX3N1cmZhY2VfZGVzdHJveSgpIGlzIGVuc3VyZWQgaW4gcmVsZWFzZUltYWdl
QmFja2luZ1N0b3JlKCkuCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBjYWlyb1N1cmZhY2UgPSBjYWly
b19zdXJmYWNlX3JlZmVyZW5jZShuYXRpdmVJbWFnZS0+c3VyZmFjZSgpKTsKLSAgICBrZXkgPSBy
ZWludGVycHJldF9jYXN0PGludDY0X3Q+KGNhaXJvU3VyZmFjZSk7Ci0jZW5kaWYKLQotICAgIEhh
c2hNYXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZElt
YWdlUmVmQ291bnRzLmZpbmQoa2V5KTsKLQotICAgIGlmIChpdCAhPSBtX2RpcmVjdGx5Q29tcG9z
aXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKSB7Ci0gICAgICAgICsrKGl0LT52YWx1ZSk7Ci0gICAg
ICAgIHJldHVybiBrZXk7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgaWYgd2Ugd2VyZSBnb2luZyB0
byByZWxlYXNlIHRoaXMgaW1hZ2UgZHVyaW5nIHRoZSBuZXh0IGZsdXNoLgotICAgIHNpemVfdCBy
ZWxlYXNlZEluZGV4ID0gbV9yZWxlYXNlZERpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5maW5kKGtl
eSk7Ci0gICAgaWYgKHJlbGVhc2VkSW5kZXggPT0gbm90Rm91bmQpIHsKLSAgICAgICAgUmVmUHRy
PFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFi
bGUoaW1hZ2UtPnNpemUoKSwgKGltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpID8gU2hhcmVh
YmxlQml0bWFwOjpTdXBwb3J0c0FscGhhIDogMCkpOwotICAgICAgICB7Ci0gICAgICAgICAgICBP
d25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBiaXRtYXAt
PmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5k
cmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50Ojp6ZXJvKCkpOwot
ICAgICAgICB9Ci0gICAgICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKLSAgICAg
ICAgYml0bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpDcmVhdGVEaXJlY3RseUNvbXBv
c2l0ZWRJbWFnZShrZXksIGhhbmRsZSkpOwotICAgIH0gZWxzZQotICAgICAgICBtX3JlbGVhc2Vk
RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnJlbW92ZShyZWxlYXNlZEluZGV4KTsKLQotICAgIG1f
ZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuYWRkKGtleSwgMSk7Ci0gICAgcmV0dXJu
IGtleTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVsZWFzZUltYWdlQmFja2lu
Z1N0b3JlKGludDY0X3Qga2V5KQotewotICAgIGlmICgha2V5KQotICAgICAgICByZXR1cm47Ci0g
ICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VSZWZDb3VudHMuZmluZChrZXkpOwotICAgIGlmIChpdCA9PSBtX2RpcmVjdGx5Q29t
cG9zaXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpdC0+
dmFsdWUtLTsKLQotICAgIGlmIChpdC0+dmFsdWUpCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVT
RShDQUlSTykKLSAgICAvLyBDb21wbGVtZW50IHRoZSByZWZlcmVuY2luZyBpbiBhZG9wdEltYWdl
QmFja2luZ1N0b3JlKCkuCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBjYWlyb1N1cmZhY2UgPSByZWlu
dGVycHJldF9jYXN0PGNhaXJvX3N1cmZhY2VfdCo+KGtleSk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9k
ZXN0cm95KGNhaXJvU3VyZmFjZSk7Ci0jZW5kaWYKLQotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVk
SW1hZ2VSZWZDb3VudHMucmVtb3ZlKGl0KTsKLSAgICBtX3JlbGVhc2VkRGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VzLmFwcGVuZChrZXkpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi0K
IHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSAvKiB0aW1lICovKQogewogfQpAQCAtNjE2
LDYgKzUzNSw2NCBAQCB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW1vdmVUaWxlKFdlYkxh
eWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlJlbW92ZVRpbGVGb3JMYXllcihsYXllcklELCB0
aWxlSUQpKTsKIH0KIAorUGFzc1JlZlB0cjxDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZT4gTGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OmFkb3B0Q29tcG9zaXRlZEltYWdlKEltYWdlKiBpbWFnZSwgV2Vi
TGF5ZXJJRCBsYXllcklEKQoreworICAgIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgaW1h
Z2VJRCA9IENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlOjpnZXRDb29yZGluYXRlZENvbXBvc2l0
ZWRJbWFnZUlEKGltYWdlKTsKKyAgICBDb21wb3NpdGVkSW1hZ2VNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9jb21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1hZ2VJRCk7CisgICAgUmVmUHRyPENvb3JkaW5hdGVk
Q29tcG9zaXRlZEltYWdlPiBjb21wb3NpdGVkSW1hZ2U7CisgICAgaWYgKGl0ID09IG1fY29tcG9z
aXRlZEltYWdlcy5lbmQoKSkgeworICAgICAgICBjb21wb3NpdGVkSW1hZ2UgPSBDb29yZGluYXRl
ZENvbXBvc2l0ZWRJbWFnZTo6Y3JlYXRlKHRoaXMsIGltYWdlKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgY29tcG9zaXRlZEltYWdlID0gaXQtPnZhbHVlOworCisgICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpDcmVhdGVDb21wb3NpdGVkSW1hZ2Uo
aW1hZ2VJRCwgbGF5ZXJJRCkpOworICAgIHJldHVybiBjb21wb3NpdGVkSW1hZ2U7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbGVhc2VDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0
ZWRDb21wb3NpdGVkSW1hZ2VJRCBpbWFnZUlELCBXZWJMYXllcklEIGxheWVySUQpCit7CisgICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpEZXN0
cm95Q29tcG9zaXRlZEltYWdlKGltYWdlSUQsIGxheWVySUQpKTsKKworICAgIEFTU0VSVChtX2Nv
bXBvc2l0ZWRJbWFnZXMuY29udGFpbnMoaW1hZ2VJRCkpOworICAgIENvbXBvc2l0ZWRJbWFnZU1h
cDo6aXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZWRJbWFnZXMuZmluZChpbWFnZUlEKTsKKyAgICBp
ZiAoaXQtPnZhbHVlLT5yZWZDb3VudCgpID09IDEpCisgICAgICAgIG1fY29tcG9zaXRlZEltYWdl
cy5yZW1vdmUoaW1hZ2VJRCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnVwZGF0
ZUNvbXBvc2l0ZWRJbWFnZXMoKQoreworICAgIENvbXBvc2l0ZWRJbWFnZU1hcDo6aXRlcmF0b3Ig
ZW5kID0gbV9jb21wb3NpdGVkSW1hZ2VzLmVuZCgpOworICAgIGZvciAoQ29tcG9zaXRlZEltYWdl
TWFwOjppdGVyYXRvciBpdGVyID0gbV9jb21wb3NpdGVkSW1hZ2VzLmJlZ2luKCk7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIpCisgICAgICAgIGl0ZXItPnZhbHVlLT51cGRhdGUoKTsKK30KK3ZvaWQgTGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0
ZWRDb21wb3NpdGVkSW1hZ2VJRCBpbWFnZUlELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBk
YXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGFyZ2V0UmVjdCkK
K3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpDcmVhdGVUaWxlRm9yQ29tcG9zaXRl
ZEltYWdlKGltYWdlSUQsIHRpbGVJRCwgdGFyZ2V0UmVjdCwgdXBkYXRlSW5mbykpOworfQorCit2
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjp1cGRhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKENv
b3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgaW1hZ2VJRCwgaW50IHRpbGVJRCwgY29uc3QgU3Vy
ZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHRhcmdl
dFJlY3QpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6VXBkYXRlVGlsZUZvckNv
bXBvc2l0ZWRJbWFnZShpbWFnZUlELCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pKTsK
K30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVtb3ZlVGlsZUZvckNvbXBvc2l0ZWRJ
bWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEIGltYWdlSUQsIGludCB0aWxlSUQpCit7
CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6UmVtb3ZlVGlsZUZvckNvbXBvc2l0ZWRJ
bWFnZShpbWFnZUlELCB0aWxlSUQpKTsKK30KKworUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+
IExheWVyVHJlZUNvb3JkaW5hdG9yOjpiZWdpbkNvbXBvc2l0ZWRJbWFnZVVwZGF0ZShjb25zdCBJ
bnRTaXplJiBzaXplLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzLCBpbnQmIGF0bGFzSUQs
IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgcmV0dXJuIGJlZ2luQ29udGVudFVwZGF0ZShzaXpl
LCBmbGFncywgYXRsYXNJRCwgb2Zmc2V0KTsKK30KKworYm9vbCBMYXllclRyZWVDb29yZGluYXRv
cjo6bGF5ZXJUcmVlQ29tcG9zaXRlZEltYWdlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCk7Cit9CisKIHZvaWQgTGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lELCBjb25zdCBT
aGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKIHsKICAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0ZVVwZGF0ZUF0bGFzKGF0
bGFzSUQsIGhhbmRsZSkpOwpAQCAtNzAyLDEwICs2NzksNyBAQCB2b2lkIExheWVyVHJlZUNvb3Jk
aW5hdG9yOjpwdXJnZUJhY2tpbmdTdG9yZXMoKQogICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXll
cnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAoKml0KS0+cHVyZ2VCYWNraW5n
U3RvcmVzKCk7CiAKLSAgICBwdXJnZVJlbGVhc2VkSW1hZ2VzKCk7Ci0KLSAgICBBU1NFUlQoIW1f
ZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuc2l6ZSgpKTsKLSAgICBBU1NFUlQoIW1f
cmVsZWFzZWREaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuc2l6ZSgpKTsKKyAgICBtX2NvbXBvc2l0
ZWRJbWFnZXMuY2xlYXIoKTsKICAgICBtX3VwZGF0ZUF0bGFzZXMuY2xlYXIoKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmgKaW5kZXgg
ZDcyNWFmNi4uYzBjZWQyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVDb29yZGluYXRvci5oCkBAIC0yMiw2ICsyMiw3IEBACiAKICNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCiAKKyNpbmNsdWRlICJDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS5oIgog
I2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkxheWVyVHJl
ZUNvbnRleHQuaCIKICNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCkBAIC00MCw2ICs0MSw3IEBA
IGNsYXNzIFdlYlBhZ2U7CiBjbGFzcyBMYXllclRyZWVDb29yZGluYXRvciA6IHB1YmxpYyBMYXll
clRyZWVIb3N0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50CiAgICAgLCBwdWJsaWMgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50CiAgICAgLCBwdWJsaWMgVXBkYXRlQXRsYXNDbGll
bnQKKyAgICAsIHB1YmxpYyBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUNsaWVudAogICAgICwg
cHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5IHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxMYXllclRyZWVDb29yZGluYXRvcj4gY3JlYXRlKFdlYlBhZ2UqKTsKQEAg
LTY3LDEyICs2OSwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5n
KCkgeyBtX2lzU3VzcGVuZGVkID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5k
ZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsgc2NoZWR1bGVMYXllckZsdXNoKCk7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKSB7IH0KLSAgICB2
aXJ0dWFsIGludDY0X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9yZShXZWJDb3JlOjpJbWFnZSopOwot
ICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCk7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBT
dXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBk
YXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlEKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U+IGFkb3B0Q29tcG9zaXRlZEltYWdlKFdlYkNvcmU6
OkltYWdlKiwgV2ViTGF5ZXJJRCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VD
b21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCwgV2ViTGF5ZXJJRCkg
T1ZFUlJJREU7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHZpc2libGVDb250ZW50c1Jl
Y3QoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7CiAgICAgdmly
dHVhbCB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOwpAQCAtMTE1LDYgKzExNywxNSBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgYm9vbCBzaG93RGVidWdCb3JkZXJzKGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVy
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdDsKIAorICAgIC8vIENvb3JkaW5h
dGVkQ29tcG9zaXRlZEltYWdlQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGVGb3JD
b21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCwgaW50IHRpbGVJRCwg
Y29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UoQ29vcmRp
bmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUlu
Zm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHJlbW92ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJ
RCwgaW50IHRpbGVJRCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db21wb3NpdGVkSW1hZ2VVcGRhdGUoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MsIGludCYgYXRsYXNJRCwgV2ViQ29y
ZTo6SW50UG9pbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgbGF5ZXJUcmVlQ29tcG9z
aXRlZEltYWdlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2b2lk
IHVwZGF0ZUNvbXBvc2l0ZWRJbWFnZXMoKTsKKwogICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5
CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdy
YXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCopIE9WRVJSSURFOwogCkBA
IC0xMjgsNyArMTM5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN5bmNEaXNwbGF5U3RhdGUoKTsK
ICAgICB2b2lkIGxvY2tBbmltYXRpb25zKCk7CiAgICAgdm9pZCB1bmxvY2tBbmltYXRpb25zKCk7
Ci0gICAgdm9pZCBwdXJnZVJlbGVhc2VkSW1hZ2VzKCk7CiAKICAgICB2b2lkIGxheWVyRmx1c2hU
aW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUNvb3JkaW5hdG9yPiopOwogCkBAIC0x
NDksOCArMTU5LDggQEAgcHJpdmF0ZToKIAogICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyKj4gbV9yZWdpc3RlcmVkTGF5ZXJzOwogICAgIFZlY3RvcjxXZWJMYXll
cklEPiBtX2RldGFjaGVkTGF5ZXJzOwotICAgIEhhc2hNYXA8aW50NjRfdCwgaW50PiBtX2RpcmVj
dGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzOwotICAgIFZlY3RvcjxpbnQ2NF90PiBtX3JlbGVh
c2VkRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzOworICAgIHR5cGVkZWYgSGFzaE1hcDxDb29yZGlu
YXRlZENvbXBvc2l0ZWRJbWFnZUlELCBSZWZQdHI8Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U+
ID4gQ29tcG9zaXRlZEltYWdlTWFwOworICAgIENvbXBvc2l0ZWRJbWFnZU1hcCBtX2NvbXBvc2l0
ZWRJbWFnZXM7CiAgICAgVmVjdG9yPE93blB0cjxVcGRhdGVBdGxhcz4gPiBtX3VwZGF0ZUF0bGFz
ZXM7CiAKICAgICBib29sIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOwotLSAKMS43
LjkuNQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172477</attachid>
            <date>2012-11-05 20:19:09 -0800</date>
            <delta_ts>2012-11-06 21:42:51 -0800</delta_ts>
            <desc>1. WIP TBS patch (not for review) </desc>
            <filename>0001-Coordinated-Graphics-CoordinatedGraphicsLayer-handle.patch</filename>
            <type>text/plain</type>
            <size>71486</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">RnJvbSBlMmM2YWVjMGEwMmJmN2FkOGM2MDc2M2FmODllZjJhYWU1ZjM0MDJiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBIdWFuZyBEb25nc3VuZyA8bHV4dGVsbGFAY29tcGFueTEwMC5u
ZXQ+CkRhdGU6IFRodSwgMSBOb3YgMjAxMiAwNzoyMzoyNSArMDkwMApTdWJqZWN0OiBbUEFUQ0gg
MS8zXSBDb29yZGluYXRlZCBHcmFwaGljczogQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIGhhbmRs
ZXMgYQogY29tcG9zaXRlZCBpbWFnZSB3aXRoIFRpbGVkQmFja2luZ1N0b3JlLgoKQ3VycmVudGx5
LCBDb29yZGluYXRlZCBHcmFwaGljcyBoYXMgc2V2ZXJhbCBwcm9ibGVtcyBpbiB0ZXJtcyBvZiBo
YW5kbGluZyBhCmNvbXBvc2l0ZWQgaW1hZ2UuCjEuIFdlIGNhbiBub3Qgc2VuZCBhbiBpbWFnZSB0
byBVSSBQcm9jZXNzIHVzaW5nIEdyYXBoaWNzU3VyZmFjZSwgYmVjYXVzZQpHcmFwaGljc1N1cmZh
Y2UgaGFzIHRoZSBzaXplIGxpbWl0YXRpb24uKEdMX01BWF9URVhUVVJFX1NJWkUpCjIuIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllciwgTGF5ZXJUcmVlQ29vcmRpbmF0b3IsIExheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkKYW5kIExheWVyVHJlZVJlbmRlcmVyIGFyZSB0aWdodGx5IGNvdXBsZWQgdG8g
c2hhcmUgYW4gaW1hZ2UgdXNpbmcKU2hhcmVhYmxlQml0bWFwLgozLiBMYXllclRyZWVDb29yZGlu
YXRvciBuZWVkcyBwbGF0Zm9ybSBkZXBlbmRlbnQgY29kZSB0byBjb3B5IGFuIGltYWdlIHRvClNo
YXJlYWJsZUJpdG1hcC4KNC4gV2UgbXVzdCBhbGxvY2F0ZSBiaWcgY29udGludW91cyBtZW1vcnkg
d2hlbiBhbiBpbWFnZSBpcyBiaWcuCjUuIEV2ZW4gaWYgYSBjb21wb3NpdGVkIGltYWdlIGlzIG9m
ZiB0aGUgdmlld3BvcnQsIFRleHR1cmVNYXBwZXJMYXllciBjYW4gbm90CnJlbW92ZSBhbiBpbWFn
ZSB0ZXh0dXJlLgoKSWYgd2UgdXNlIFRpbGVkQmFja2luZ1N0b3JlIHRvIGhhbmRsZSBhIGNvbXBv
c2l0ZWQgaW1hZ2UsIHdlIGNhbiBnZXQgZm9sbG93aW5nCmJlbmVmaXRzLgoxLiBXZSBjYW4gdXNl
IEdyYXBoaWNzU3VyZmFjZSB0byBzZW5kIGFuIGltYWdlIHRvIFVJIFByb2Nlc3MuCjIuIFdlIGNh
biByZW1vdmUgaHVnZSBjb21wbGV4IGNvZGUgdG8gaGFuZGxlIElQQyBmb3IgYW4gaW1hZ2UgYW5k
IGp1c3QgcmV1c2UKZXhpc3RpbmcgVGlsZWRCYWNraW5nU3RvcmUuCjMuIExheWVyVHJlZUNvb3Jk
aW5hdG9yIGRvZXMgbm90IG5lZWQgcGxhdGZvcm0gZGVwZW5kZW50IGNvZGUuCjQuIFdlIGNhbiBz
ZW5kIGEgYmlnIGltYWdlIHRvIFVJIFByb2Nlc3MgdXNpbmcgbWFueSBzbWFsbCB0aWxlcy4KNS4g
V2hlbiBhIGNvbXBvc2l0ZWQgaW1hZ2UgaXMgb2ZmIHRoZSB2aWV3cG9ydCwgVGV4dHVyZU1hcHBl
ckxheWVyIGNhbiByZW1vdmUKYW4gaW1hZ2UgdGV4dHVyZSB0byBzYXZlIHRleHR1cmUgbWVtb3J5
LgoKSW4gYWRkaXRpb24sIHRoaXMgcGF0Y2ggZml4ZXMgdGhlIGJ1ZyB0aGF0IENvb3JkaW5hdGVk
IEdyYXBoaWNzIG9ubHkgcmVuZGVycyB0aGUKZmlyc3QgZnJhbWUgb2YgYSBnaWYgYW5pbWF0aW9u
IGltYWdlLgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAxNSArKwogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgICAgICAgICAg
ICAgICAgICAgICAgfCAgICAyICstCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5n
U3RvcmUuY3BwICAgICAgICB8ICAgIDUgKwogLi4uL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
VGlsZWRCYWNraW5nU3RvcmUuaCAgfCAgICA1ICstCiAuLi4vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcCB8ICAgIDUgKy0KIC4uLi9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCAgIHwgICAgMiArLQogLi4uL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaCAgfCAgICAyICstCiBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNzMgKysrKysrKysr
CiAuLi4vQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRC5oICAgICAgICAgICAgICAgICB8ICAg
MzUgKysrKysKIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmggICAgICAg
ICAgIHwgICAgMyAtCiBTb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgIDMgKwogLi4uL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwICAgICAg
ICAgICAgICAgICAgfCAgIDQ1ICsrKystLQogLi4uL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHku
aCAgICAgICAgICAgICAgICAgICAgfCAgICA4ICstCiAuLi4vTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eS5tZXNzYWdlcy5pbiAgICAgICAgICB8ICAgIDcgKy0KIC4uLi9Db29yZGluYXRlZEdyYXBo
aWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcCAgICAgIHwgICA5NSArKysrKysrKy0tLS0KIC4uLi9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmggICAgICAgIHwgICAzMCArKy0t
CiAuLi4vQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UuY3BwICAgICAgICAgICAgICAgICB8ICAx
NjMgKysrKysrKysrKysrKysrKysrKysKIC4uLi9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS5o
ICAgICAgICAgICAgICAgICAgIHwgIDExMyArKysrKysrKysrKysrKwogLi4uL0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllci5jcHAgICAgICAgICAgICAgICAgICAgfCAgMTA2ICsrKysrKysrLS0tLS0K
IC4uLi9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIHwgICAy
NSArKy0KIC4uLi9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcCAg
IHwgIDE1OCArKysrKysrKystLS0tLS0tLS0tCiAuLi4vQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVDb29yZGluYXRvci5oICAgICB8ICAgMjIgKystCiAyMiBmaWxlcyBjaGFuZ2VkLCA3Mjkg
aW5zZXJ0aW9ucygrKSwgMTkzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQ29tcG9zaXRl
ZEltYWdlSUQuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLmNw
cAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLmgKCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggODExYjNjZi4uMzVlMDU1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEy
LTExLTAyICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgorCisgICAg
ICAgIENvb3JkaW5hdGVkIEdyYXBoaWNzOiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgaGFuZGxl
cyBhIGNvbXBvc2l0ZWQgaW1hZ2Ugd2l0aCBUaWxlZEJhY2tpbmdTdG9yZS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTAyMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBhIHBvdGVudGlhbCBidWcg
aW4gR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuCisgICAgICAgIG1fY29tcG9zaXRlZE5hdGl2
ZUltYWdlUHRyIG11c3QgYmUgaW5pdGlhbGllZC4gT3RoZXJ3aXNlIHRoZSBtZW1iZXIncworICAg
ICAgICB1bmRlZmluZWQgdmFsdWUgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvdXIuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6Okdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1RvSW1hZ2UpOgorCiAyMDEyLTExLTA1ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgRG9jdW1l
bnQ6OnVwZGF0ZVN0eWxlSWZOZWVkZWQoKSBub24tdmlydHVhbApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApp
bmRleCBhZThmMzk3Li44NjIyYjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtODI2LDcgKzgy
Niw3IEBAIHZvaWQgRnJhbWU6OnNldFRpbGVkQmFja2luZ1N0b3JlRW5hYmxlZChib29sIGVuYWJs
ZWQpCiAgICAgfQogICAgIGlmIChtX3RpbGVkQmFja2luZ1N0b3JlKQogICAgICAgICByZXR1cm47
Ci0gICAgbV90aWxlZEJhY2tpbmdTdG9yZSA9IGFkb3B0UHRyKG5ldyBUaWxlZEJhY2tpbmdTdG9y
ZSh0aGlzKSk7CisgICAgbV90aWxlZEJhY2tpbmdTdG9yZSA9IFRpbGVkQmFja2luZ1N0b3JlOjpj
cmVhdGUodGhpcyk7CiAgICAgaWYgKG1fdmlldykKICAgICAgICAgbV92aWV3LT5zZXRQYWludHNF
bnRpcmVDb250ZW50cyh0cnVlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcAppbmRleCBjNTY0ZGJlLi45N2M0YTNl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tp
bmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRC
YWNraW5nU3RvcmUuY3BwCkBAIC0zNSw2ICszNSwxMSBAQCBzdGF0aWMgSW50UG9pbnQgaW5uZXJC
b3R0b21SaWdodChjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIHJldHVybiBJbnRQb2ludChyZWN0
Lm1heFgoKSAtIDEsIHJlY3QubWF4WSgpIC0gMSk7CiB9CiAKK1Bhc3NPd25QdHI8VGlsZWRCYWNr
aW5nU3RvcmU+IFRpbGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoVGlsZWRCYWNraW5nU3RvcmVDbGll
bnQqIGNsaWVudCwgUGFzc093blB0cjxUaWxlZEJhY2tpbmdTdG9yZUJhY2tlbmQ+IGJhY2tlbmQp
Cit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUaWxlZEJhY2tpbmdTdG9yZShjbGllbnQsIGJh
Y2tlbmQpKTsKK30KKwogVGlsZWRCYWNraW5nU3RvcmU6OlRpbGVkQmFja2luZ1N0b3JlKFRpbGVk
QmFja2luZ1N0b3JlQ2xpZW50KiBjbGllbnQsIFBhc3NPd25QdHI8VGlsZWRCYWNraW5nU3RvcmVC
YWNrZW5kPiBiYWNrZW5kKQogICAgIDogbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9iYWNrZW5k
KGJhY2tlbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9U
aWxlZEJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGls
ZWRCYWNraW5nU3RvcmUuaAppbmRleCBiM2MzNjVjLi5kNjRhZTBjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmgKQEAgLTMw
LDYgKzMwLDcgQEAKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDEs
NyArNDIsNyBAQCBjbGFzcyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudDsKIGNsYXNzIFRpbGVkQmFj
a2luZ1N0b3JlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaWxlZEJhY2tpbmdTdG9yZSk7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFRpbGVkQmFja2luZ1N0b3Jl
KFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50KiwgUGFzc093blB0cjxUaWxlZEJhY2tpbmdTdG9yZUJh
Y2tlbmQ+ID0gVGlsZWRCYWNraW5nU3RvcmVCYWNrZW5kOjpjcmVhdGUoKSk7CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8VGlsZWRCYWNraW5nU3RvcmU+IGNyZWF0ZShUaWxlZEJhY2tpbmdTdG9yZUNs
aWVudCosIFBhc3NPd25QdHI8VGlsZWRCYWNraW5nU3RvcmVCYWNrZW5kPiA9IFRpbGVkQmFja2lu
Z1N0b3JlQmFja2VuZDo6Y3JlYXRlKCkpOwogICAgIH5UaWxlZEJhY2tpbmdTdG9yZSgpOwogCiAg
ICAgVGlsZWRCYWNraW5nU3RvcmVDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9
CkBAIC04MCw2ICs4MSw4IEBAIHB1YmxpYzoKICAgICBib29sIHN1cHBvcnRzQWxwaGEoKSBjb25z
dCB7IHJldHVybiBtX3N1cHBvcnRzQWxwaGE7IH0KIAogcHJpdmF0ZToKKyAgICBUaWxlZEJhY2tp
bmdTdG9yZShUaWxlZEJhY2tpbmdTdG9yZUNsaWVudCosIFBhc3NPd25QdHI8VGlsZWRCYWNraW5n
U3RvcmVCYWNrZW5kPik7CisKICAgICB2b2lkIHN0YXJ0VGlsZUJ1ZmZlclVwZGF0ZVRpbWVyKCk7
CiAgICAgdm9pZCBzdGFydEJhY2tpbmdTdG9yZVVwZGF0ZVRpbWVyKCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCmluZGV4IDQxODk3YzYuLmZkZGI3ODkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApAQCAtNDQsNiArNDQs
NyBAQCBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShHcmFw
aGljc0xheWVyQ2xpZW50KiBjbGllbnQpCiBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6R3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQogICAg
IDogR3JhcGhpY3NMYXllcihjbGllbnQpCiAgICAgLCBtX2xheWVyKGFkb3B0UHRyKG5ldyBUZXh0
dXJlTWFwcGVyTGF5ZXIoKSkpCisgICAgLCBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0cigwKQog
ICAgICwgbV9jaGFuZ2VNYXNrKDApCiAgICAgLCBtX25lZWRzRGlzcGxheShmYWxzZSkKICAgICAs
IG1fZml4ZWRUb1ZpZXdwb3J0KGZhbHNlKQpAQCAtMzUxLDggKzM1MiwxMCBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQog
ICAgICAgICBpZiAoIW1fY29tcG9zaXRlZEltYWdlKQogICAgICAgICAgICAgbV9jb21wb3NpdGVk
SW1hZ2UgPSBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOwogICAgICAg
ICBtX2NvbXBvc2l0ZWRJbWFnZS0+c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKLSAgICB9IGVs
c2UKKyAgICB9IGVsc2UgeworICAgICAgICBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0ciA9IDA7
CiAgICAgICAgIG1fY29tcG9zaXRlZEltYWdlID0gMDsKKyAgICB9CiAKICAgICBzZXRDb250ZW50
c1RvTWVkaWEobV9jb21wb3NpdGVkSW1hZ2UuZ2V0KCkpOwogICAgIG5vdGlmeUNoYW5nZShUZXh0
dXJlTWFwcGVyTGF5ZXI6OkNvbnRlbnRDaGFuZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIuaAppbmRleCA1MTBiMjNmLi5lN2VkZDYyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIuaApAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2
aXJ0dWFsIHZvaWQgZmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwogICAg
IHZpcnR1YWwgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdmlydHVhbCBQ
bGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZp
cnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGVudHNMYXllcjsgfQogCiAgICAgdm9pZCBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVy
OjpDaGFuZ2VNYXNrKTsKICAgICBpbmxpbmUgaW50IGNoYW5nZU1hc2soKSBjb25zdCB7IHJldHVy
biBtX2NoYW5nZU1hc2s7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaAppbmRleCA1Y2Q5NTlkLi5k
NWE5MjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCkBAIC0xMjgsNyArMTI4LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgcGFpbnQoKTsKIAogICAgIHZvaWQgc2V0U2hvdWxkVXBkYXRlQmFja2lu
Z1N0b3JlRnJvbUxheWVyKGJvb2wgYikgeyBtX3Nob3VsZFVwZGF0ZUJhY2tpbmdTdG9yZUZyb21M
YXllciA9IGI7IH0KLSAgICB2b2lkIHNldEJhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVyQmFja2lu
Z1N0b3JlKiBiYWNraW5nU3RvcmUpIHsgbV9iYWNraW5nU3RvcmUgPSBiYWNraW5nU3RvcmU7IH0K
KyAgICB2b2lkIHNldEJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5n
U3RvcmU+IGJhY2tpbmdTdG9yZSkgeyBtX2JhY2tpbmdTdG9yZSA9IGJhY2tpbmdTdG9yZTsgfQog
ICAgIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKCkg
eyByZXR1cm4gbV9iYWNraW5nU3RvcmU7IH0KICAgICB2b2lkIGNsZWFyQmFja2luZ1N0b3Jlc1Jl
Y3Vyc2l2ZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYzFkYjVmNy4uYTA3ZmY2ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDc2IEBACisyMDEyLTExLTAyICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNv
bXBhbnkxMDAubmV0PgorCisgICAgICAgIENvb3JkaW5hdGVkIEdyYXBoaWNzOiBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIgaGFuZGxlcyBhIGNvbXBvc2l0ZWQgaW1hZ2Ugd2l0aCBUaWxlZEJhY2tp
bmdTdG9yZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwMTAyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEN1cnJlbnRseSwgQ29vcmRpbmF0ZWQgR3JhcGhpY3MgaGFzIHNldmVyYWwgcHJvYmxlbXMgaW4g
dGVybXMgb2YgaGFuZGxpbmcgYQorICAgICAgICBjb21wb3NpdGVkIGltYWdlLgorICAgICAgICAx
LiBXZSBjYW4gbm90IHNlbmQgYW4gaW1hZ2UgdG8gVUkgUHJvY2VzcyB1c2luZyBHcmFwaGljc1N1
cmZhY2UsIGJlY2F1c2UKKyAgICAgICAgR3JhcGhpY3NTdXJmYWNlIGhhcyB0aGUgc2l6ZSBsaW1p
dGF0aW9uLihHTF9NQVhfVEVYVFVSRV9TSVpFKQorICAgICAgICAyLiBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIsIExheWVyVHJlZUNvb3JkaW5hdG9yLCBMYXllclRyZWVDb29yZGluYXRvclByb3h5
CisgICAgICAgIGFuZCBMYXllclRyZWVSZW5kZXJlciBhcmUgdGlnaHRseSBjb3VwbGVkIHRvIHNo
YXJlIGFuIGltYWdlIHVzaW5nCisgICAgICAgIFNoYXJlYWJsZUJpdG1hcC4KKyAgICAgICAgMy4g
TGF5ZXJUcmVlQ29vcmRpbmF0b3IgbmVlZHMgcGxhdGZvcm0gZGVwZW5kZW50IGNvZGUgdG8gY29w
eSBhbiBpbWFnZSB0bworICAgICAgICBTaGFyZWFibGVCaXRtYXAuCisgICAgICAgIDQuIFdlIG11
c3QgYWxsb2NhdGUgYmlnIGNvbnRpbnVvdXMgbWVtb3J5IHdoZW4gYW4gaW1hZ2UgaXMgYmlnLgor
ICAgICAgICA1LiBFdmVuIGlmIGEgY29tcG9zaXRlZCBpbWFnZSBpcyBvZmYgdGhlIHZpZXdwb3J0
LCBUZXh0dXJlTWFwcGVyTGF5ZXIgY2FuIG5vdAorICAgICAgICByZW1vdmUgYW4gaW1hZ2UgdGV4
dHVyZS4KKworICAgICAgICBJZiB3ZSB1c2UgVGlsZWRCYWNraW5nU3RvcmUgdG8gaGFuZGxlIGEg
Y29tcG9zaXRlZCBpbWFnZSwgd2UgY2FuIGdldCBmb2xsb3dpbmcKKyAgICAgICAgYmVuZWZpdHMu
CisgICAgICAgIDEuIFdlIGNhbiB1c2UgR3JhcGhpY3NTdXJmYWNlIHRvIHNlbmQgYW4gaW1hZ2Ug
dG8gVUkgUHJvY2Vzcy4KKyAgICAgICAgMi4gV2UgY2FuIHJlbW92ZSBodWdlIGNvbXBsZXggY29k
ZSB0byBoYW5kbGUgSVBDIGZvciBhbiBpbWFnZSBhbmQganVzdCByZXVzZQorICAgICAgICBleGlz
dGluZyBUaWxlZEJhY2tpbmdTdG9yZS4KKyAgICAgICAgMy4gTGF5ZXJUcmVlQ29vcmRpbmF0b3Ig
ZG9lcyBub3QgbmVlZCBwbGF0Zm9ybSBkZXBlbmRlbnQgY29kZS4KKyAgICAgICAgNC4gV2UgY2Fu
IHNlbmQgYSBiaWcgaW1hZ2UgdG8gVUkgUHJvY2VzcyB1c2luZyBtYW55IHNtYWxsIHRpbGVzLgor
ICAgICAgICA1LiBXaGVuIGEgY29tcG9zaXRlZCBpbWFnZSBpcyBvZmYgdGhlIHZpZXdwb3J0LCBU
ZXh0dXJlTWFwcGVyTGF5ZXIgY2FuIHJlbW92ZQorICAgICAgICBhbiBpbWFnZSB0ZXh0dXJlIHRv
IHNhdmUgdGV4dHVyZSBtZW1vcnkuCisKKyAgICAgICAgQWZ0ZXIgdGhpcyBwYXRjaCwgVUkgUHJv
Y2VzcyBkZWFscyB3aXRoIGEgZGlyZWN0bHkgY29tcG9zaXRlZCBpbWFnZSBsYXllciBhcyBhCisg
ICAgICAgIGNvbnRlbnQgbGF5ZXIuCisKKyAgICAgICAgSW4gYWRkaXRpb24sIHRoaXMgcGF0Y2gg
Zml4ZXMgdGhlIGJ1ZyB0aGF0IENvb3JkaW5hdGVkIEdyYXBoaWNzIG9ubHkgcmVuZGVycyB0aGUK
KyAgICAgICAgZmlyc3QgZnJhbWUgb2YgYSBnaWYgYW5pbWF0aW9uIGltYWdlLgorCisgICAgICAg
ICogU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJJ
bmZvOjpXZWJMYXllckluZm8pOgorICAgICAgICAoV2ViTGF5ZXJJbmZvKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNw
cDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29y
ZGluYXRvclByb3h5Lmg6CisgICAgICAgIChMYXllclRyZWVDb29yZGluYXRvclByb3h5KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRv
clByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVu
ZGVyZXI6OnNldExheWVyU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJl
cjo6cHVyZ2VHTFJlc291cmNlcyk6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuaDoKKyAgICAgICAgKExheWVyVHJlZVJlbmRlcmVyKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpkaWRDaGFuZ2VDb21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OkNvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0ZWRJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNMYXll
clN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Zmx1
c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSk6CisgICAgICAgIChXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlW
ZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxl
ZEJhY2tpbmdTdG9yZVBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6cGFpbnRDb21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpwdXJnZUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGp1c3RWaXNpYmxlUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6Omhhc1BlbmRpbmdWaXNpYmxlQ2hh
bmdlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmg6CisgICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXJDbGllbnQpOgorICAgICAgICAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29y
ZGluYXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpmbHVz
aFBlbmRpbmdMYXllckNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGlu
YXRvcjo6cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5oOgorICAgICAgICAoTGF5
ZXJUcmVlQ29vcmRpbmF0b3IpOgorCiAyMDEyLTExLTA1ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRl
cnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgQmVnaW4gc3R1YmJpbmcgb3V0IHRoZSBuZXcgcmVt
b3RlIGxheWVyIHRyZWUgZHJhd2luZyBhcmVhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENv
bXBvc2l0ZWRJbWFnZUlELmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIz
ZTcyOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQuaApAQCAtMCwwICsxLDM1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFn
ZUlEX2gKKyNkZWZpbmUgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRF9oCisKKyNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCituYW1lc3BhY2UgV2ViS2l0IHsKK3R5cGVkZWYgdWludHB0
cl90IENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQ7Cit9CisjZW5kaWYKKyNlbmRpZiAvLyBD
b29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5
ZXJUcmVlSW5mby5oCmluZGV4IGM5YmRhYzUuLjk4ZDIxYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkxheWVyVHJlZUluZm8uaApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIu
aCIKLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAK
QEAgLTQwLDE0ICszOSwxMiBAQCBzdHJ1Y3QgV2ViTGF5ZXJJbmZvIHsKICAgICAgICAgOiBwYXJl
bnQoSW52YWxpZFdlYkxheWVySUQpCiAgICAgICAgICwgcmVwbGljYShJbnZhbGlkV2ViTGF5ZXJJ
RCkKICAgICAgICAgLCBtYXNrKEludmFsaWRXZWJMYXllcklEKQotICAgICAgICAsIGltYWdlQmFj
a2luZ1N0b3JlSUQoMCkKICAgICAgICAgLCBvcGFjaXR5KDApCiAgICAgICAgICwgZmxhZ3MoMCkg
eyB9CiAKICAgICBXZWJMYXllcklEIHBhcmVudDsKICAgICBXZWJMYXllcklEIHJlcGxpY2E7CiAg
ICAgV2ViTGF5ZXJJRCBtYXNrOwotICAgIGludDY0X3QgaW1hZ2VCYWNraW5nU3RvcmVJRDsKIAog
ICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9zOwogICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQzRCBh
bmNob3JQb2ludDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3Vy
Y2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IGFhMjM3NDguLmE1YjkyNjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnBy
aQpAQCAtMTM0LDYgKzEzNCw3IEBAIEhFQURFUlMgKz0gXAogICAgIFNoYXJlZC9XZWJVUkxSZXF1
ZXN0LmggXAogICAgIFNoYXJlZC9XZWJVUkxSZXNwb25zZS5oIFwKICAgICBTaGFyZWQvV2ViVXNl
ckNvbnRlbnRVUkxQYXR0ZXJuLmggXAorICAgIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQuaCBcCiAgICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmggXAogICAgIFNoYXJlZC9D
b29yZGluYXRlZEdyYXBoaWNzL1dlYkN1c3RvbUZpbHRlclByb2dyYW0uaCBcCiAgICAgU2hhcmVk
L1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5Nb2R1bGUuaCBcCkBAIC0zNjMsNiArMzY0
LDcgQEAgSEVBREVSUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1w
bC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmggXAogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oIFwKKyAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS5oIFwKICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRUaWxlLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmggXApAQCAtNzM5LDYgKzc0MSw3IEBAIFNPVVJD
RVMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FbmNvZGVyQWRhcHRlci5jcHAgXAogICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwIFwKICAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIFwKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS5jcHAgXAogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkVGlsZS5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCmluZGV4IDRkNDNmZWIuLjQzZjQ0NzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCkBAIC01OCw3
ICs1OCw3IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6ZGlzcGF0Y2hVcGRhdGUo
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCiAKIHZvaWQgTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eTo6Y3JlYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBj
b25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZv
JiB1cGRhdGVJbmZvKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRl
cmVyOjpjcmVhdGVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQsIHVwZGF0
ZUluZm8uc2NhbGVGYWN0b3IpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVS
ZW5kZXJlcjo6Y3JlYXRlVGlsZUZvckxheWVyLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0
aWxlSUQsIHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IpKTsKICAgICB1cGRhdGVUaWxlRm9yTGF5ZXIo
bGF5ZXJJRCwgdGlsZUlELCB0YXJnZXRSZWN0LCB1cGRhdGVJbmZvKTsKIH0KIApAQCAtNjYsMTIg
KzY2LDQwIEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRlVGlsZUZvckxh
eWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zCiB7CiAgICAgU3VyZmFjZU1hcDo6aXRl
cmF0b3IgaXQgPSBtX3N1cmZhY2VzLmZpbmQodXBkYXRlSW5mby5hdGxhc0lEKTsKICAgICBBU1NF
UlQoaXQgIT0gbV9zdXJmYWNlcy5lbmQoKSk7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5
ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRp
bGVJRCwgTGF5ZXJUcmVlUmVuZGVyZXI6OlRpbGVVcGRhdGUodXBkYXRlSW5mby51cGRhdGVSZWN0
LCB0YXJnZXRSZWN0LCBpdC0+dmFsdWUsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCkpKTsKKyAg
ICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZUZvckxh
eWVyLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQsIExheWVyVHJlZVJlbmRlcmVy
OjpUaWxlVXBkYXRlKHVwZGF0ZUluZm8udXBkYXRlUmVjdCwgdGFyZ2V0UmVjdCwgaXQtPnZhbHVl
LCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpKSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKQog
ewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxl
LCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQpKTsKKyAgICBkaXNwYXRjaFVwZGF0
ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlVGlsZUZvckxheWVyLCBtX3JlbmRlcmVy
LmdldCgpLCBsYXllcklELCB0aWxlSUQpKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpjcmVhdGVUaWxlZENvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJ
bWFnZUlEIGltYWdlSUQsIHVpbnQzMl90IGxheWVySUQpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUo
YmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZVRpbGVkQ29tcG9zaXRlZEltYWdlLCBtX3Jl
bmRlcmVyLmdldCgpLCBpbWFnZUlELCBsYXllcklEKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eTo6ZGVzdHJveVRpbGVkQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29t
cG9zaXRlZEltYWdlSUQgaW1hZ2VJRCwgdWludDMyX3QgbGF5ZXJJRCkKK3sKKyAgICBkaXNwYXRj
aFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6ZGVzdHJveVRpbGVkQ29tcG9zaXRlZElt
YWdlLCBtX3JlbmRlcmVyLmdldCgpLCBpbWFnZUlELCBsYXllcklEKSk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShDb29y
ZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEIGltYWdlSUQsIGludCB0aWxlSUQsIGNvbnN0IEludFJl
Y3QmIHRhcmdldFJlY3QsIGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUlu
Zm8pCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0
ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGltYWdlSUQsIHRpbGVJ
RCwgdXBkYXRlSW5mby5zY2FsZUZhY3RvcikpOworICAgIHVwZGF0ZVRpbGVGb3JDb21wb3NpdGVk
SW1hZ2UoaW1hZ2VJRCwgdGlsZUlELCB0YXJnZXRSZWN0LCB1cGRhdGVJbmZvKTsKK30KKwordm9p
ZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojp1cGRhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdl
KENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgaW1hZ2VJRCwgaW50IHRpbGVJRCwgY29uc3Qg
SW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYgdXBk
YXRlSW5mbykKK3sKKyAgICBTdXJmYWNlTWFwOjppdGVyYXRvciBpdCA9IG1fc3VyZmFjZXMuZmlu
ZCh1cGRhdGVJbmZvLmF0bGFzSUQpOworICAgIEFTU0VSVChpdCAhPSBtX3N1cmZhY2VzLmVuZCgp
KTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGls
ZUZvckNvbXBvc2l0ZWRJbWFnZSwgbV9yZW5kZXJlci5nZXQoKSwgaW1hZ2VJRCwgdGlsZUlELCBM
YXllclRyZWVSZW5kZXJlcjo6VGlsZVVwZGF0ZSh1cGRhdGVJbmZvLnVwZGF0ZVJlY3QsIHRhcmdl
dFJlY3QsIGl0LT52YWx1ZSwgdXBkYXRlSW5mby5zdXJmYWNlT2Zmc2V0KSkpOworfQorCit2b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnJlbW92ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2Uo
Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCBpbWFnZUlELCBpbnQgdGlsZUlEKQoreworICAg
IGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxlRm9yQ29t
cG9zaXRlZEltYWdlLCBtX3JlbmRlcmVyLmdldCgpLCBpbWFnZUlELCB0aWxlSUQpKTsKIH0KIAog
dm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpjcmVhdGVVcGRhdGVBdGxhcyhpbnQgYXRs
YXNJRCwgY29uc3QgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCkBAIC0xMjcsMTcg
KzE1NSw2IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6ZGlkUmVuZGVyRnJhbWUo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGVudHNTCiAjZW5kaWYKIH0KIAotdm9pZCBMYXll
clRyZWVDb29yZGluYXRvclByb3h5OjpjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2
NF90IGtleSwgY29uc3QgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlKQot
ewotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6
Y3JlYXRlKGhhbmRsZSk7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVy
ZXI6OmNyZWF0ZUltYWdlLCBtX3JlbmRlcmVyLmdldCgpLCBrZXksIGJpdG1hcCkpOwotfQotCi12
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJ
bWFnZShpbnQ2NF90IGtleSkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVS
ZW5kZXJlcjo6ZGVzdHJveUltYWdlLCBtX3JlbmRlcmVyLmdldCgpLCBrZXkpKTsKLX0KLQogdm9p
ZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRDb250ZW50c1NpemUoY29uc3QgRmxvYXRT
aXplJiBjb250ZW50c1NpemUpCiB7CiAgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVl
UmVuZGVyZXI6OnNldENvbnRlbnRzU2l6ZSwgbV9yZW5kZXJlci5nZXQoKSwgY29udGVudHNTaXpl
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmgKaW5kZXgg
NjQ2ODAxMS4uNzU1NDI5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkuaApAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgi
CiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVk
ZSAiQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRC5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVh
UHJveHkuaCIKICNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJTaGFyZWFibGVTdXJmYWNl
LmgiCkBAIC02NSwxMCArNjYsMTMgQEAgcHVibGljOgogICAgIHZvaWQgY3JlYXRlVGlsZUZvckxh
eWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29u
c3QgU3VyZmFjZVVwZGF0ZUluZm8mKTsKICAgICB2b2lkIHVwZGF0ZVRpbGVGb3JMYXllcihpbnQg
bGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFN1cmZh
Y2VVcGRhdGVJbmZvJik7CiAgICAgdm9pZCByZW1vdmVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQs
IGludCB0aWxlSUQpOworICAgIHZvaWQgY3JlYXRlVGlsZWRDb21wb3NpdGVkSW1hZ2UoQ29vcmRp
bmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCwgdWludDMyX3QgbGF5ZXJJRCk7CisgICAgdm9pZCBkZXN0
cm95VGlsZWRDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCwgdWlu
dDMyX3QgbGF5ZXJJRCk7CisgICAgdm9pZCBjcmVhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKENv
b3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpOworICAgIHZvaWQgdXBkYXRlVGlsZUZv
ckNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELCBpbnQgdGlsZUlE
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mKTsKKyAg
ICB2b2lkIHJlbW92ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVk
SW1hZ2VJRCwgaW50IHRpbGVJRCk7CiAgICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyhpbnQgYXRs
YXNJRCwgY29uc3QgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJik7CiAgICAgdm9pZCByZW1vdmVV
cGRhdGVBdGxhcyhpbnQgYXRsYXNJRCk7Ci0gICAgdm9pZCBjcmVhdGVEaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZShpbnQ2NF90LCBjb25zdCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJik7
Ci0gICAgdm9pZCBkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCk7CiAgICAg
dm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2UoQ29yZUlQQzo6
Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXIm
KTsKICAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7CiAgICAgdm9pZCByZW5kZXJOZXh0RnJhbWUo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5
Lm1lc3NhZ2VzLmluCmluZGV4IGJhODhkZTUuLmEwZDgwYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgpAQCAtMjks
MTAgKzI5LDEzIEBAIG1lc3NhZ2VzIC0+IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkgewogICAg
IENyZWF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlELCBXZWJDb3Jl
OjpJbnRSZWN0IHRhcmdldFJlY3QsIFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5m
bykKICAgICBVcGRhdGVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgaW50IHRpbGVJRCwg
V2ViQ29yZTo6SW50UmVjdCB0YXJnZXRSZWN0LCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvIHVw
ZGF0ZUluZm8pCiAgICAgUmVtb3ZlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0
aWxlSUQpCisgICAgQ3JlYXRlVGlsZWRDb21wb3NpdGVkSW1hZ2UodWludHB0cl90IGltYWdlSUQs
IHVpbnQzMl90IGxheWVySUQpCisgICAgRGVzdHJveVRpbGVkQ29tcG9zaXRlZEltYWdlKHVpbnRw
dHJfdCBpbWFnZUlELCB1aW50MzJfdCBsYXllcklEKQorICAgIENyZWF0ZVRpbGVGb3JDb21wb3Np
dGVkSW1hZ2UodWludHB0cl90IGltYWdlSUQsIGludCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3Qg
dGFyZ2V0UmVjdCwgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvKQorICAgIFVw
ZGF0ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UodWludHB0cl90IGltYWdlSUQsIGludCB0aWxlSUQs
IFdlYkNvcmU6OkludFJlY3QgdGFyZ2V0UmVjdCwgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyB1
cGRhdGVJbmZvKQorICAgIFJlbW92ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UodWludHB0cl90IGlt
YWdlSUQsIGludCB0aWxlSUQpCiAgICAgQ3JlYXRlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQsIFdl
YktpdDo6U2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlIGhhbmRsZSkKICAgICBSZW1vdmVVcGRhdGVB
dGxhcyhpbnQgYXRsYXNJRCkKLSAgICBDcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2
NF90IGtleSwgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpCi0gICAgRGVz
dHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5KQogICAgIERpZFJlbmRlckZy
YW1lKFdlYkNvcmU6OkludFNpemUgY29udGVudHNTaXplLCBXZWJDb3JlOjpJbnRSZWN0IGNvdmVy
ZWRSZWN0KQogICAgIERpZENoYW5nZVNjcm9sbFBvc2l0aW9uKFdlYkNvcmU6OkludFBvaW50IHBv
c2l0aW9uKQogICAgIFNldExheWVyQW5pbWF0aW9ucyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckFuaW1hdGlvbnMgYW5pbWF0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJl
bmRlcmVyLmNwcAppbmRleCAxY2UyMmI4Li4wNmE0OTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJU
cmVlUmVuZGVyZXIuY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5Lmgi
CiAjaW5jbHVkZSAiTWVzc2FnZUlELmgiCi0jaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAj
aW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5n
U3RvcmUuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKQEAgLTMwMSw4ICszMDAsNiBA
QCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0YXRlKFdlYkxheWVySUQgaWQsIGNv
bnN0IFdlYkxheWVySW5mbyYgbGF5ZXJJbgogICAgIGVsc2UKICAgICAgICAgbV9maXhlZExheWVy
cy5yZW1vdmUoaWQpOwogCi0gICAgYXNzaWduSW1hZ2VUb0xheWVyKGxheWVyLCBsYXllckluZm8u
aW1hZ2VCYWNraW5nU3RvcmVJRCk7Ci0KICAgICAvLyBOZXZlciBtYWtlIHRoZSByb290IGxheWVy
IGNsaXAuCiAgICAgbGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMobGF5ZXJJbmZvLmlzUm9vdExheWVy
ID8gZmFsc2UgOiBsYXllckluZm8ubWFza3NUb0JvdW5kcyk7CiAgICAgbGF5ZXItPnNldE9wYWNp
dHkobGF5ZXJJbmZvLm9wYWNpdHkpOwpAQCAtMzU0LDU5ICszNTEsMTAxIEBAIHZvaWQgTGF5ZXJU
cmVlUmVuZGVyZXI6OnNldFJvb3RMYXllcklEKFdlYkxheWVySUQgbGF5ZXJJRCkKICAgICBtX3Jv
b3RMYXllci0+YWRkQ2hpbGQobGF5ZXIpOwogfQogCi1QYXNzUmVmUHRyPENvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlPiBMYXllclRyZWVSZW5kZXJlcjo6Z2V0QmFja2luZ1N0b3JlKFdlYkxheWVySUQg
aWQpCitDb29yZGluYXRlZEJhY2tpbmdTdG9yZSogTGF5ZXJUcmVlUmVuZGVyZXI6OmdldEJhY2tp
bmdTdG9yZShXZWJMYXllcklEIGlkKQogewogICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIg
PSB0b1RleHR1cmVNYXBwZXJMYXllcihsYXllckJ5SUQoaWQpKTsKICAgICBBU1NFUlQobGF5ZXIp
OwogICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gc3Rh
dGljX2Nhc3Q8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmUqPihsYXllci0+YmFja2luZ1N0b3JlKCku
Z2V0KCkpOwogICAgIGlmICghYmFja2luZ1N0b3JlKSB7CiAgICAgICAgIGJhY2tpbmdTdG9yZSA9
IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKLSAgICAgICAgbGF5ZXItPnNldEJh
Y2tpbmdTdG9yZShiYWNraW5nU3RvcmUuZ2V0KCkpOworICAgICAgICBsYXllci0+c2V0QmFja2lu
Z1N0b3JlKGJhY2tpbmdTdG9yZSk7CiAgICAgfQogICAgIEFTU0VSVChiYWNraW5nU3RvcmUpOwot
ICAgIHJldHVybiBiYWNraW5nU3RvcmU7CisgICAgcmV0dXJuIGJhY2tpbmdTdG9yZS5nZXQoKTsK
K30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlVGlsZUZvckxheWVyKFdlYkxheWVy
SUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgZmxvYXQgc2NhbGUpCit7CisgICAgY3JlYXRlVGlsZShn
ZXRCYWNraW5nU3RvcmUobGF5ZXJJRCksIHRpbGVJRCwgc2NhbGUpOworfQorCit2b2lkIExheWVy
VHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxlRm9yTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQg
dGlsZUlEKQoreworICAgIHJlbW92ZVRpbGUoZ2V0QmFja2luZ1N0b3JlKGxheWVySUQpLCB0aWxl
SUQpOwogfQogCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxlKFdlYkxheWVySUQg
bGF5ZXJJRCwgaW50IHRpbGVJRCwgZmxvYXQgc2NhbGUpCit2b2lkIExheWVyVHJlZVJlbmRlcmVy
Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBjb25z
dCBUaWxlVXBkYXRlJiB1cGRhdGUpCiB7Ci0gICAgZ2V0QmFja2luZ1N0b3JlKGxheWVySUQpLT5j
cmVhdGVUaWxlKHRpbGVJRCwgc2NhbGUpOworICAgIHVwZGF0ZVRpbGUoZ2V0QmFja2luZ1N0b3Jl
KGxheWVySUQpLCB0aWxlSUQsIHVwZGF0ZSk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6
OnJlbW92ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlEKQordm9pZCBMYXllclRy
ZWVSZW5kZXJlcjo6Y3JlYXRlVGlsZShDb29yZGluYXRlZEJhY2tpbmdTdG9yZSogYmFja2luZ1N0
b3JlLCBpbnQgdGlsZUlELCBmbG9hdCBzY2FsZSkKIHsKLSAgICBnZXRCYWNraW5nU3RvcmUobGF5
ZXJJRCktPnJlbW92ZVRpbGUodGlsZUlEKTsKKyAgICBiYWNraW5nU3RvcmUtPmNyZWF0ZVRpbGUo
dGlsZUlELCBzY2FsZSk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGUo
V2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBUaWxlVXBkYXRlJiB1cGRhdGUp
Cit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxlKENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlKiBiYWNraW5nU3RvcmUsIGludCB0aWxlSUQpCiB7Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVk
QmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCk7Cisg
ICAgYmFja2luZ1N0b3JlLT5yZW1vdmVUaWxlKHRpbGVJRCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
UmVuZGVyZXI6OnVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUqIHJhd0JhY2tpbmdT
dG9yZSwgaW50IHRpbGVJRCwgY29uc3QgVGlsZVVwZGF0ZSYgdXBkYXRlKQoreworICAgIFJlZlB0
cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gcmF3QmFja2luZ1N0b3Jl
OwogICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZSh0aWxlSUQsIHVwZGF0ZS5zb3VyY2VSZWN0
LCB1cGRhdGUudGFyZ2V0UmVjdCwgdXBkYXRlLnN1cmZhY2UsIHVwZGF0ZS5vZmZzZXQpOwogICAg
IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKIH0K
IAotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlSW1hZ2UoaW50NjRfdCBpbWFnZUlELCBQ
YXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gd2Vha0JpdG1hcCkKK3ZvaWQgTGF5ZXJUcmVlUmVu
ZGVyZXI6OmNyZWF0ZVRpbGVkQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZElt
YWdlSUQgaW1hZ2VJRCwgV2ViTGF5ZXJJRCBsYXllcklEKQoreworICAgIFRpbGVkQ29tcG9zaXRl
ZEltYWdlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZWRDb21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1h
Z2VJRCk7CisgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7
CisgICAgaWYgKGl0ID09IG1fdGlsZWRDb21wb3NpdGVkSW1hZ2VzLmVuZCgpKSB7CisgICAgICAg
IGJhY2tpbmdTdG9yZSA9IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKKyAgICAg
ICAgbV90aWxlZENvbXBvc2l0ZWRJbWFnZXMuYWRkKGltYWdlSUQsIGJhY2tpbmdTdG9yZSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIGJhY2tpbmdTdG9yZSA9IGl0LT52YWx1ZTsKKworICAgIEdyYXBo
aWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVySUQpOworICAgIEFTU0VSVChsYXllcik7
CisgICAgQVNTRVJUKCFsYXllci0+cGxhdGZvcm1MYXllcigpKTsKKyAgICBsYXllci0+c2V0Q29u
dGVudHNUb01lZGlhKGJhY2tpbmdTdG9yZS5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVu
ZGVyZXI6OmRlc3Ryb3lUaWxlZENvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJ
bWFnZUlEIGltYWdlSUQsIFdlYkxheWVySUQgbGF5ZXJJRCkKK3sKKyAgICBHcmFwaGljc0xheWVy
KiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsKKyAgICBBU1NFUlQobGF5ZXIpOworICAgIEFT
U0VSVChsYXllci0+cGxhdGZvcm1MYXllcigpKTsKKyAgICBsYXllci0+c2V0Q29udGVudHNUb01l
ZGlhKDApOworCisgICAgVGlsZWRDb21wb3NpdGVkSW1hZ2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV90
aWxlZENvbXBvc2l0ZWRJbWFnZXMuZmluZChpbWFnZUlEKTsKKyAgICAvLyBGSVhNRSA6IGNoZWNr
IGl0ZXJhdG9yIHRvIHJlZiAxLgorICAgIGlmIChpdC0+dmFsdWUtPnJlZkNvdW50KCkgPT0gMSkK
KyAgICAgICAgbV90aWxlZENvbXBvc2l0ZWRJbWFnZXMucmVtb3ZlKGltYWdlSUQpOworfQorCit2
b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKENvb3Jk
aW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgaW1hZ2VJRCwgaW50IHRpbGVJRCwgZmxvYXQgc2NhbGUp
CiB7Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gd2Vha0JpdG1hcDsKLSAg
ICBSZWZQdHI8VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBU
ZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOwotICAgIG1fZGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2VzLnNldChpbWFnZUlELCBiYWNraW5nU3RvcmUpOwotICAgIGJhY2tpbmdT
dG9yZS0+dXBkYXRlQ29udGVudHMobV90ZXh0dXJlTWFwcGVyLmdldCgpLCBiaXRtYXAtPmNyZWF0
ZUltYWdlKCkuZ2V0KCksIEJpdG1hcFRleHR1cmU6OlVwZGF0ZUNhbm5vdE1vZGlmeU9yaWdpbmFs
SW1hZ2VEYXRhKTsKKyAgICBjcmVhdGVUaWxlKGdldEJhY2tpbmdTdG9yZUZvckNvbXBvc2l0ZWRJ
bWFnZShpbWFnZUlEKSwgdGlsZUlELCBzY2FsZSk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlUmVuZGVy
ZXI6OmRlc3Ryb3lJbWFnZShpbnQ2NF90IGltYWdlSUQpCit2b2lkIExheWVyVHJlZVJlbmRlcmVy
OjpyZW1vdmVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdl
SUQgaW1hZ2VJRCwgaW50IHRpbGVJRCkKIHsKLSAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdl
cy5yZW1vdmUoaW1hZ2VJRCk7CisgICAgcmVtb3ZlVGlsZShnZXRCYWNraW5nU3RvcmVGb3JDb21w
b3NpdGVkSW1hZ2UoaW1hZ2VJRCksIHRpbGVJRCk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlUmVuZGVy
ZXI6OmFzc2lnbkltYWdlVG9MYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgaW50NjRfdCBpbWFn
ZUlEKQordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFn
ZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEIGltYWdlSUQsIGludCB0aWxlSUQsIGNvbnN0
IFRpbGVVcGRhdGUmIHVwZGF0ZSkKIHsKLSAgICBpZiAoIWltYWdlSUQpIHsKLSAgICAgICAgbGF5
ZXItPnNldENvbnRlbnRzVG9NZWRpYSgwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICB1
cGRhdGVUaWxlKGdldEJhY2tpbmdTdG9yZUZvckNvbXBvc2l0ZWRJbWFnZShpbWFnZUlEKSwgdGls
ZUlELCB1cGRhdGUpOworfQogCi0gICAgSGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8VGV4dHVyZU1h
cHBlckJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZElt
YWdlcy5maW5kKGltYWdlSUQpOwotICAgIEFTU0VSVChpdCAhPSBtX2RpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlcy5lbmQoKSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShpdC0+dmFsdWUu
Z2V0KCkpOworQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUqIExheWVyVHJlZVJlbmRlcmVyOjpnZXRC
YWNraW5nU3RvcmVGb3JDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJ
RCBpbWFnZUlEKQoreworICAgIEFTU0VSVChtX3RpbGVkQ29tcG9zaXRlZEltYWdlcy5jb250YWlu
cyhpbWFnZUlEKSk7CisgICAgVGlsZWRDb21wb3NpdGVkSW1hZ2VNYXA6Oml0ZXJhdG9yIGl0ID0g
bV90aWxlZENvbXBvc2l0ZWRJbWFnZXMuZmluZChpbWFnZUlEKTsKKyAgICBBU1NFUlQoaXQtPnZh
bHVlLmdldCgpKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCiB2b2lkIExheWVy
VHJlZVJlbmRlcmVyOjpjb21taXRUaWxlT3BlcmF0aW9ucygpCkBAIC00NzUsNyArNTE0LDcgQEAg
dm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cHVyZ2VHTFJlc291cmNlcygpCiAgICAgaWYgKGxheWVy
KQogICAgICAgICBsYXllci0+Y2xlYXJCYWNraW5nU3RvcmVzUmVjdXJzaXZlKCk7CiAKLSAgICBt
X2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5jbGVhcigpOworICAgIG1fdGlsZWRDb21wb3NpdGVk
SW1hZ2VzLmNsZWFyKCk7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCiAgICAgbV9zdXJmYWNl
QmFja2luZ1N0b3Jlcy5jbGVhcigpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVy
ZXIuaAppbmRleCA4NTk2MDIyLi45MWIzMTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRl
cmVyLmgKQEAgLTIyLDYgKzIyLDcgQEAKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
ICNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZENvbXBvc2l0
ZWRJbWFnZUlELmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlU3VyZmFjZS5oIgogI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCkBA
IC04NSwxMiArODYsMTUgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TGF5ZXJGaWx0ZXJzKFdlYkxh
eWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKICNlbmRpZgogCi0gICAg
dm9pZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGludCwgZmxvYXQgc2NhbGUpOwotICAgIHZvaWQg
cmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQpOwotICAgIHZvaWQgdXBkYXRlVGlsZShXZWJMYXll
cklELCBpbnQsIGNvbnN0IFRpbGVVcGRhdGUmKTsKKyAgICB2b2lkIGNyZWF0ZVRpbGVGb3JMYXll
cihXZWJMYXllcklELCBpbnQsIGZsb2F0IHNjYWxlKTsKKyAgICB2b2lkIHJlbW92ZVRpbGVGb3JM
YXllcihXZWJMYXllcklELCBpbnQpOworICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKFdlYkxh
eWVySUQsIGludCwgY29uc3QgVGlsZVVwZGF0ZSYpOworICAgIHZvaWQgY3JlYXRlVGlsZWRDb21w
b3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCwgV2ViTGF5ZXJJRCBsYXll
cklEKTsKKyAgICB2b2lkIGRlc3Ryb3lUaWxlZENvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENv
bXBvc2l0ZWRJbWFnZUlELCBXZWJMYXllcklEIGxheWVySUQpOworICAgIHZvaWQgY3JlYXRlVGls
ZUZvckNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELCBpbnQsIGZs
b2F0IHNjYWxlKTsKKyAgICB2b2lkIHJlbW92ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UoQ29vcmRp
bmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCwgaW50KTsKKyAgICB2b2lkIHVwZGF0ZVRpbGVGb3JDb21w
b3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCwgaW50LCBjb25zdCBUaWxl
VXBkYXRlJik7CiAgICAgdm9pZCBmbHVzaExheWVyQ2hhbmdlcygpOwotICAgIHZvaWQgY3JlYXRl
SW1hZ2UoaW50NjRfdCwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+KTsKLSAgICB2b2lkIGRl
c3Ryb3lJbWFnZShpbnQ2NF90KTsKICAgICB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhXZWJMYXll
cklELCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOwogICAgIHZvaWQg
c2V0QW5pbWF0aW9uc0xvY2tlZChib29sKTsKIApAQCAtMTIwLDYgKzEyNCwxMyBAQCBwcml2YXRl
OgogICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7CiAgICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9y
ZXMoKTsKIAorICAgIHZvaWQgY3JlYXRlVGlsZShDb29yZGluYXRlZEJhY2tpbmdTdG9yZSosIGlu
dCwgZmxvYXQgc2NhbGUpOworICAgIHZvaWQgcmVtb3ZlVGlsZShDb29yZGluYXRlZEJhY2tpbmdT
dG9yZSosIGludCk7CisgICAgdm9pZCB1cGRhdGVUaWxlKENvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
KiwgaW50LCBjb25zdCBUaWxlVXBkYXRlJik7CisKKyAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZSogZ2V0QmFja2luZ1N0b3JlKFdlYkxheWVySUQpOworICAgIENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlKiBnZXRCYWNraW5nU3RvcmVGb3JDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3Np
dGVkSW1hZ2VJRCk7CisKICAgICB0eXBlZGVmIEhhc2hNYXA8V2ViTGF5ZXJJRCwgV2ViQ29yZTo6
R3JhcGhpY3NMYXllcio+IExheWVyTWFwOwogICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX2NvbnRl
bnRzU2l6ZTsKICAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV92aXNpYmxlQ29udGVudHNSZWN0OwpA
QCAtMTI3LDEyICsxMzgsMTMgQEAgcHJpdmF0ZToKICAgICAvLyBSZW5kZXIgcXVldWUgY2FuIGJl
IGFjY2Vzc2VkIG9ueSBmcm9tIG1haW4gdGhyZWFkIG9yIHVwZGF0ZVBhaW50Tm9kZSBjYWxsIHN0
YWNrIQogICAgIFZlY3RvcjxGdW5jdGlvbjx2b2lkKCk+ID4gbV9yZW5kZXJRdWV1ZTsKIAotI2lm
IFVTRShURVhUVVJFX01BUFBFUikKICAgICBPd25QdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlcj4g
bV90ZXh0dXJlTWFwcGVyOwotICAgIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+
IGdldEJhY2tpbmdTdG9yZShXZWJMYXllcklEKTsKLSAgICBIYXNoTWFwPGludDY0X3QsIFJlZlB0
cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiA+IG1fZGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VzOworCisgICAgdHlwZWRlZiBIYXNoTWFwPENvb3JkaW5hdGVkQ29tcG9zaXRlZElt
YWdlSUQsIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPiBUaWxlZENvbXBvc2l0ZWRJ
bWFnZU1hcDsKKyAgICBUaWxlZENvbXBvc2l0ZWRJbWFnZU1hcCBtX3RpbGVkQ29tcG9zaXRlZElt
YWdlczsKKwogICAgIEhhc2hTZXQ8UmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiA+IG1f
YmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVyczsKLSNlbmRpZgorCiAjaWYgVVNFKEdSQVBI
SUNTX1NVUkZBQ0UpCiAgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkxheWVySUQsIFJlZlB0cjxXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZT4gPiBTdXJmYWNlQmFja2luZ1N0
b3JlTWFwOwogICAgIFN1cmZhY2VCYWNraW5nU3RvcmVNYXAgbV9zdXJmYWNlQmFja2luZ1N0b3Jl
czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQ29t
cG9zaXRlZEltYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmY1
NDk1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UuY3BwCkBAIC0w
LDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJDb29yZGluYXRlZENvbXBv
c2l0ZWRJbWFnZS5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
UmVnaW9uLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKworQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCBDb29yZGluYXRlZENvbXBvc2l0ZWRJ
bWFnZTo6Z2V0Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRChJbWFnZSogaW1hZ2UpCit7Cisg
ICAgLy8gRklYTUU6IFVzZSBBdG9taWNJbWFnZSB0aGF0IG5vYW1yIG1hZGUuCisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRD4oaW1hZ2UpOwor
fQorCitQYXNzUmVmUHRyPENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlPiBDb29yZGluYXRlZENv
bXBvc2l0ZWRJbWFnZTo6Y3JlYXRlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlQ2xpZW50KiBj
bGllbnQsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UoY2xpZW50LCBpbWFnZSkpOworfQorCitDb29y
ZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UoQ29vcmRp
bmF0ZWRDb21wb3NpdGVkSW1hZ2VDbGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxJbWFnZT4gaW1h
Z2UpCisgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX2ltYWdlKGltYWdlKQorICAgICwg
bV9pZChnZXRDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEKG1faW1hZ2UuZ2V0KCkpKQorICAg
ICwgbV9kaWRJbnZhbGlkYXRlKGZhbHNlKQorICAgICwgbV9pblVwZGF0ZU1vZGUoZmFsc2UpCit7
CisgICAgbV9iYWNraW5nU3RvcmUgPSBUaWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKHRoaXMsIENv
b3JkaW5hdGVkVGlsZUJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSk7CisgICAgbV9iYWNraW5nU3RvcmUt
PnNldENvbnRlbnRzU2NhbGUoMSk7Cit9CisKK0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlOjp+
Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UoKQoreworfQorCit2b2lkIENvb3JkaW5hdGVkQ29t
cG9zaXRlZEltYWdlOjphZGRMYXllckNsaWVudChDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUdy
YXBoaWNzTGF5ZXJDbGllbnQqIGxheWVyQ2xpZW50KQoreworICAgIEFTU0VSVCghbV9sYXllckNs
aWVudHMuZmluZChsYXllckNsaWVudCkpOworICAgIG1fbGF5ZXJDbGllbnRzLmFwcGVuZChsYXll
ckNsaWVudCk7CisgICAgbV9jbGllbnQtPmNyZWF0ZVRpbGVkQ29tcG9zaXRlZEltYWdlKGlkKCks
IGxheWVyQ2xpZW50LT5pZEZvckNvbXBvc2l0ZWRJbWFnZSgpKTsKK30KKwordm9pZCBDb29yZGlu
YXRlZENvbXBvc2l0ZWRJbWFnZTo6cmVtb3ZlTGF5ZXJDbGllbnQoQ29vcmRpbmF0ZWRDb21wb3Np
dGVkSW1hZ2VHcmFwaGljc0xheWVyQ2xpZW50KiBsYXllckNsaWVudCkKK3sKKyAgICBzaXplX3Qg
cG9zaXRpb24gPSBtX2xheWVyQ2xpZW50cy5maW5kKGxheWVyQ2xpZW50KTsKKyAgICBBU1NFUlQo
cG9zaXRpb24gIT0gbm90Rm91bmQpOworICAgIG1fbGF5ZXJDbGllbnRzLnJlbW92ZShwb3NpdGlv
bik7CisgICAgbV9jbGllbnQtPmRlc3Ryb3lUaWxlZENvbXBvc2l0ZWRJbWFnZShpZCgpLCBsYXll
ckNsaWVudC0+aWRGb3JDb21wb3NpdGVkSW1hZ2UoKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRD
b21wb3NpdGVkSW1hZ2U6OmludmFsaWRhdGUoKQoreworICAgIC8vIE9uZSBmcmFtZSBvZiB0aGUg
aW1hZ2UgY2FuIGJlIG9wYXF1ZSB3aGlsZSBhbm90aGVyIGlzIG5vdCBvcGFxdWUuCisgICAgbV9i
YWNraW5nU3RvcmUtPnNldFN1cHBvcnRzQWxwaGEobV9pbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxw
aGEoKSk7CisgICAgbV9kaWRJbnZhbGlkYXRlID0gdHJ1ZTsKK30KKwordm9pZCBDb29yZGluYXRl
ZENvbXBvc2l0ZWRJbWFnZTo6dXBkYXRlKCkKK3sKKyAgICBtX2luVXBkYXRlTW9kZSA9IHRydWU7
CisgICAgbV9iYWNraW5nU3RvcmUtPmNvdmVyV2l0aFRpbGVzSWZOZWVkZWQoKTsKKyAgICBpZiAo
bV9kaWRJbnZhbGlkYXRlKSB7CisgICAgICAgIG1fYmFja2luZ1N0b3JlLT5pbnZhbGlkYXRlKHRp
bGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCkpOworICAgICAgICBtX2RpZEludmFsaWRhdGUg
PSBmYWxzZTsKKyAgICB9CisgICAgbV9iYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGVCdWZmZXJzKCk7
CisgICAgbV9pblVwZGF0ZU1vZGUgPSBmYWxzZTsKK30KKwordm9pZCBDb29yZGluYXRlZENvbXBv
c2l0ZWRJbWFnZTo6dGlsZWRCYWNraW5nU3RvcmVQYWludEJlZ2luKCkKK3sKK30KKwordm9pZCBD
b29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6dGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHJlY3Qu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2UobV9p
bWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgcmVjdCk7Cit9CisKK3ZvaWQgQ29vcmRp
bmF0ZWRDb21wb3NpdGVkSW1hZ2U6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVj
dG9yPEludFJlY3Q+JiAvKiB1cGRhdGVkUmVjdHMgKi8pCit7Cit9CisKK2Jvb2wgQ29vcmRpbmF0
ZWRDb21wb3NpdGVkSW1hZ2U6OnRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQoKSBjb25z
dAoreworICAgIGlmICghbV9pblVwZGF0ZU1vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gbV9jbGllbnQtPmxheWVyVHJlZUNvbXBvc2l0ZWRJbWFnZVRpbGVVcGRhdGVzQWxs
b3dlZCgpOworfQorCitJbnRSZWN0IENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlOjp0aWxlZEJh
Y2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpCit7CisgICAgcmV0dXJuIEludFJlY3QoMCwgMCwgbV9p
bWFnZS0+d2lkdGgoKSwgbV9pbWFnZS0+aGVpZ2h0KCkpOworfQorCitJbnRSZWN0IENvb3JkaW5h
dGVkQ29tcG9zaXRlZEltYWdlOjp0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KCkKK3sKKyAg
ICBSZWdpb24gdW5pdGVkRGlydHlSZWdpb247CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2xheWVyQ2xpZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgdW5pdGVkRGlydHlSZWdpb24udW5p
dGUobV9sYXllckNsaWVudHNbaV0tPmNvbXBvc2l0ZWRJbWFnZVZpc2libGVSZWN0KCkpOworCisg
ICAgSW50UmVjdCB1bml0ZWREaXJ0eVJlY3QgPSB1bml0ZWREaXJ0eVJlZ2lvbi5ib3VuZHMoKTsK
KyAgICB1bml0ZWREaXJ0eVJlY3QuaW50ZXJzZWN0KHRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNS
ZWN0KCkpOworICAgIHJldHVybiB1bml0ZWREaXJ0eVJlY3Q7Cit9CisKK0NvbG9yIENvb3JkaW5h
dGVkQ29tcG9zaXRlZEltYWdlOjp0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudDsKK30KKworUGFzc093blB0cjxH
cmFwaGljc0NvbnRleHQ+IENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlOjpiZWdpbkNvbnRlbnRV
cGRhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgaW50JiBhdGxhcywgSW50UG9pbnQmIG9mZnNldCkK
K3sKKyAgICByZXR1cm4gbV9jbGllbnQtPmJlZ2luQ29tcG9zaXRlZEltYWdlVXBkYXRlKHNpemUs
IG1faW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgPyBTaGFyZWFibGVCaXRtYXA6OlN1cHBv
cnRzQWxwaGEgOiBTaGFyZWFibGVCaXRtYXA6Ok5vRmxhZ3MsIGF0bGFzLCBvZmZzZXQpOworfQor
Cit2b2lkIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlOjpjcmVhdGVUaWxlKGludCB0aWxlSUQs
IGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBJbnRSZWN0JiB0YXJn
ZXRSZWN0KQoreworICAgIG1fY2xpZW50LT5jcmVhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKGlk
KCksIHRpbGVJRCwgdXBkYXRlSW5mbywgdGFyZ2V0UmVjdCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRDb21wb3NpdGVkSW1hZ2U6OnVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVw
ZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QpCit7CisgICAg
bV9jbGllbnQtPnVwZGF0ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UoaWQoKSwgdGlsZUlELCB1cGRh
dGVJbmZvLCB0YXJnZXRSZWN0KTsKK30KKwordm9pZCBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFn
ZTo6cmVtb3ZlVGlsZShpbnQgdGlsZUlEKQoreworICAgIG1fY2xpZW50LT5yZW1vdmVUaWxlRm9y
Q29tcG9zaXRlZEltYWdlKGlkKCksIHRpbGVJRCk7Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMwNDI2YQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworCisjaWZuZGVmIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlX2gKKyNk
ZWZpbmUgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VfaAorCisjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQorI2luY2x1ZGUgIkNvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQuaCIKKyNp
bmNsdWRlICJDb29yZGluYXRlZFRpbGUuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUg
IkludFNpemUuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKKyNpbmNsdWRlICJTdXJm
YWNlVXBkYXRlSW5mby5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlLmgiCisjaW5jbHVk
ZSAiVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZv
LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK30KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlQ2xpZW50
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZWRDb21wb3NpdGVkSW1hZ2Uo
Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCwgV2ViTGF5ZXJJRCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBkZXN0cm95VGlsZWRDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVk
SW1hZ2VJRCwgV2ViTGF5ZXJJRCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlRm9y
Q29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQsIGludCB0aWxlSUQs
IGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRl
ZENvbXBvc2l0ZWRJbWFnZUlELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRp
bGVGb3JDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCwgaW50IHRp
bGVJRCkgPSAwOworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ+IGJlZ2luQ29tcG9zaXRlZEltYWdlVXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBT
aGFyZWFibGVCaXRtYXA6OkZsYWdzLCBpbnQmIGF0bGFzSUQsIFdlYkNvcmU6OkludFBvaW50Jikg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBsYXllclRyZWVDb21wb3NpdGVkSW1hZ2VUaWxlVXBkYXRl
c0FsbG93ZWQoKSBjb25zdCA9IDA7Cit9OworCitjbGFzcyBDb29yZGluYXRlZENvbXBvc2l0ZWRJ
bWFnZUdyYXBoaWNzTGF5ZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgV2ViTGF5ZXJJ
RCBpZEZvckNvbXBvc2l0ZWRJbWFnZSgpID0gMDsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJl
Y3QgY29tcG9zaXRlZEltYWdlVmlzaWJsZVJlY3QoKSA9IDA7Cit9OworCitjbGFzcyBDb29yZGlu
YXRlZENvbXBvc2l0ZWRJbWFnZSA6IHB1YmxpYyBSZWZDb3VudGVkPENvb3JkaW5hdGVkQ29tcG9z
aXRlZEltYWdlPgorICAgICwgcHVibGljIFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlQ2xpZW50
CisgICAgLCBwdWJsaWMgQ29vcmRpbmF0ZWRUaWxlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZT4gY3JlYXRlKENvb3JkaW5h
dGVkQ29tcG9zaXRlZEltYWdlQ2xpZW50KiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJbWFnZT4pOwor
ICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlKCk7CisKKyAgICBzdGF0aWMg
Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCBnZXRDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFn
ZUlEKFdlYkNvcmU6OkltYWdlKik7CisgICAgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCBp
ZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKworICAgIHZvaWQgYWRkTGF5ZXJDbGllbnQoQ29v
cmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VHcmFwaGljc0xheWVyQ2xpZW50Kik7CisgICAgdm9pZCBy
ZW1vdmVMYXllckNsaWVudChDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUdyYXBoaWNzTGF5ZXJD
bGllbnQqKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZSgpOworICAgIHZvaWQgdXBkYXRlKCk7CisK
K3ByaXZhdGU6CisgICAgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21w
b3NpdGVkSW1hZ2VDbGllbnQqLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkltYWdlPik7CisKKyAgICAv
LyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdT
dG9yZVBhaW50QmVnaW4oKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5n
U3RvcmVQYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRF
bmQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+JiBwYWludGVkQXJlYSkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBib29sIHRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgdGlsZWRCYWNraW5nU3Rv
cmVDb250ZW50c1JlY3QoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qg
dGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgV2Vi
Q29yZTo6Q29sb3IgdGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCBPVkVS
UklERTsKKworICAgIC8vIENvb3JkaW5hdGVkVGlsZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBj
cmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKGlu
dCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKGludCB0aWxlSUQpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+
IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgaW50JiBhdGxhc0lE
LCBXZWJDb3JlOjpJbnRQb2ludCYpIE9WRVJSSURFOworCisgICAgQ29vcmRpbmF0ZWRDb21wb3Np
dGVkSW1hZ2VDbGllbnQqIG1fY2xpZW50OworICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4gbV9p
bWFnZTsKKyAgICBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEIG1faWQ7CisgICAgT3duUHRy
PFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBWZWN0b3I8
Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VHcmFwaGljc0xheWVyQ2xpZW50Kj4gbV9sYXllckNs
aWVudHM7CisKKyAgICBib29sIG1fZGlkSW52YWxpZGF0ZSA6IDE7CisgICAgYm9vbCBtX2luVXBk
YXRlTW9kZSA6IDE7Cit9OworCit9CisjZW5kaWYKKworI2VuZGlmIC8vIENvb3JkaW5hdGVkQ29t
cG9zaXRlZEltYWdlX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IGEwZjRmNjUuLmJkMzMwNTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
LmNwcApAQCAtODIsNiArODIsMTMgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRp
ZENoYW5nZUZpbHRlcnMoKQogfQogI2VuZGlmCiAKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpkaWRDaGFuZ2VDb21wb3NpdGVkSW1hZ2UoKQoreworICAgIG1fc2hvdWxkU3luY0NvbXBv
c2l0ZWRJbWFnZSA9IHRydWU7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+
bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKK30KKwogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCkKIHsKICAgICBtX3Nob3VsZFVwZGF0
ZVZpc2libGVSZWN0ID0gdHJ1ZTsKQEAgLTEwNSwxMSArMTEyLDEzIEBAIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQq
IGNsaWVudCkKICAgICAsIG1fc2hvdWxkU3luY0xheWVyU3RhdGUodHJ1ZSkKICAgICAsIG1fc2hv
dWxkU3luY0NoaWxkcmVuKHRydWUpCiAgICAgLCBtX3Nob3VsZFN5bmNGaWx0ZXJzKHRydWUpCisg
ICAgLCBtX3Nob3VsZFN5bmNDb21wb3NpdGVkSW1hZ2UodHJ1ZSkKICAgICAsIG1fc2hvdWxkU3lu
Y0FuaW1hdGlvbnModHJ1ZSkKICAgICAsIG1fZml4ZWRUb1ZpZXdwb3J0KGZhbHNlKQogICAgICwg
bV9jYW52YXNOZWVkc0Rpc3BsYXkoZmFsc2UpCiAgICAgLCBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllckNsaWVudCgwKQogICAgICwgbV9jb250ZW50c1NjYWxlKDEpCisgICAgLCBtX2NvbXBvc2l0
ZWROYXRpdmVJbWFnZVB0cigwKQogICAgICwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKDApCiAgICAg
LCBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lcih0aGlzLCAmQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjphbmltYXRpb25TdGFydGVkVGltZXJGaXJlZCkKIHsKQEAgLTMxOCw5ICszMjcsNiBAQCB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3Qm
IHIpCiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05lZWRzRGlz
cGxheSgpCiB7Ci0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IG1faW1hZ2U7Ci0gICAgc2V0Q29u
dGVudHNUb0ltYWdlKDApOwotICAgIHNldENvbnRlbnRzVG9JbWFnZShpbWFnZS5nZXQoKSk7CiAg
ICAgbV9jYW52YXNOZWVkc0Rpc3BsYXkgPSB0cnVlOwogICAgIGlmIChjbGllbnQoKSkKICAgICAg
ICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7CkBAIC0zNDcsMjUgKzM1Mywy
NiBAQCBib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0RmlsdGVycyhjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJiBuZXdGaWx0ZXJzKQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKIHsKLSAgICBpZiAoaW1hZ2UgPT0g
bV9pbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludDY0X3QgbmV3SUQgPSAwOwotICAgIGlm
IChtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCkgewotICAgICAgICAvLyBXZSBhZG9w
dCBmaXJzdCwgaW4gY2FzZSB0aGlzIGlzIHRoZSBzYW1lIGZyYW1lIC0gdGhhdCB3YXkgd2UgYXZv
aWQgZGVzdHJveWluZyBhbmQgcmVjcmVhdGluZyB0aGUgaW1hZ2UuCi0gICAgICAgIG5ld0lEID0g
bV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUo
aW1hZ2UpOwotICAgICAgICBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+cmVsZWFz
ZUltYWdlQmFja2luZ1N0b3JlKG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOwotICAg
ICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgICAgIGlmIChtX2xheWVySW5mby5pbWFn
ZUJhY2tpbmdTdG9yZUlEICYmIG5ld0lEID09IG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3Jl
SUQpCisgICAgaWYgKGltYWdlKSB7CisgICAgICAgIC8vIE1ha2UgdGhlIGRlY2lzaW9uIGFib3V0
IHdoZXRoZXIgdGhlIGltYWdlIGhhcyBjaGFuZ2VkLgorICAgICAgICAvLyBUaGlzIGNvZGUgbWFr
ZXMgdGhlIGFzc3VtcHRpb24gdGhhdCBwb2ludGVyIGVxdWFsaXR5IG9uIGEgTmF0aXZlSW1hZ2VQ
dHIgaXMgYSB2YWxpZCB3YXkgdG8gdGVsbCBpZiB0aGUgaW1hZ2UgaXMgY2hhbmdlZC4KKyAgICAg
ICAgLy8gVGhpcyBhc3N1bXB0aW9uIGlzIHRydWUgaW4gUXQsIEdUSyBhbmQgRUZMLgorICAgICAg
ICBOYXRpdmVJbWFnZVB0ciBuZXdOYXRpdmVJbWFnZVB0ciA9IGltYWdlLT5uYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpOworICAgICAgICBpZiAoIW5ld05hdGl2ZUltYWdlUHRyKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChuZXdOYXRpdmVJbWFnZVB0ciA9PSBtX2NvbXBv
c2l0ZWROYXRpdmVJbWFnZVB0cikKICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX2Nv
bXBvc2l0ZWRJbWFnZSA9IGltYWdlOworICAgICAgICBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0
ciA9IG5ld05hdGl2ZUltYWdlUHRyOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIG1fQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50IGlzIG5vdCBzZXQgeWV0IHRoZXJlIHNob3VsZCBi
ZSBubyBiYWNraW5nIHN0b3JlIElELgotICAgICAgICBBU1NFUlQoIW1fbGF5ZXJJbmZvLmltYWdl
QmFja2luZ1N0b3JlSUQpOwotICAgICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgICAg
IG1fY29tcG9zaXRlZEltYWdlID0gMDsKKyAgICAgICAgbV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQ
dHIgPSAwOwogICAgIH0KIAotICAgIG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQgPSBu
ZXdJRDsKLSAgICBtX2ltYWdlID0gaW1hZ2U7CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVu
dHNUb0ltYWdlKGltYWdlKTsKKyAgICBkaWRDaGFuZ2VDb21wb3NpdGVkSW1hZ2UoKTsKIH0KIAog
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihHcmFwaGljc0xheWVy
KiBsYXllcikKQEAgLTQ1OSw2ICs0NjYsMjggQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnN5bmNGaWx0ZXJzKCkKIH0KICNlbmRpZgogCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c3luY0NvbXBvc2l0ZWRJbWFnZSgpCit7CisgICAgaWYgKCFtX3Nob3VsZFN5bmNDb21w
b3NpdGVkSW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Nob3VsZFN5bmNDb21wb3NpdGVk
SW1hZ2UgPSBmYWxzZTsKKworICAgIGlmIChtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0cikgewor
ICAgICAgICBBU1NFUlQoIW1fbWFpbkJhY2tpbmdTdG9yZSk7CisgICAgICAgIEFTU0VSVChtX2Nv
bXBvc2l0ZWRJbWFnZSk7CisKKyAgICAgICAgYm9vbCBpbWFnZUluc3RhbmNlUmVwbGFjZWQgPSBt
X2Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlICYmIG1fY29vcmRpbmF0ZWRDb21wb3NpdGVkSW1h
Z2UtPmlkKCkgIT0gQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U6OmdldENvb3JkaW5hdGVkQ29t
cG9zaXRlZEltYWdlSUQobV9jb21wb3NpdGVkSW1hZ2UuZ2V0KCkpOworICAgICAgICBpZiAoaW1h
Z2VJbnN0YW5jZVJlcGxhY2VkKQorICAgICAgICAgICAgcmVsZWFzZUNvbXBvc2l0ZWRJbWFnZUlm
TmVlZGVkKCk7CisKKyAgICAgICAgaWYgKCFtX2Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlKQor
ICAgICAgICAgICAgbV9jb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZSA9IG1fQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyQ2xpZW50LT5hZG9wdENvbXBvc2l0ZWRJbWFnZShtX2NvbXBvc2l0ZWRJbWFn
ZS5nZXQoKSwgdGhpcyk7CisKKyAgICAgICAgbV9jb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS0+
aW52YWxpZGF0ZSgpOworICAgIH0gZWxzZQorICAgICAgICByZWxlYXNlQ29tcG9zaXRlZEltYWdl
SWZOZWVkZWQoKTsKK30KKwogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNMYXll
clN0YXRlKCkKIHsKICAgICBpZiAoIW1fc2hvdWxkU3luY0xheWVyU3RhdGUpCkBAIC01MTIsMTgg
KzU0MSw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2FudmFzKCkKICAg
ICBtX2NhbnZhc05lZWRzRGlzcGxheSA9IGZhbHNlOwogfQogCi12b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6ZW5zdXJlSW1hZ2VCYWNraW5nU3RvcmUoKQotewotICAgIGlmICghbV9pbWFn
ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3Rv
cmVJRCkKLSAgICAgICAgbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCA9IG1fQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5hZG9wdEltYWdlQmFja2luZ1N0b3JlKG1faW1hZ2Uu
Z2V0KCkpOwotfQotCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Zmx1c2hDb21wb3Np
dGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCiB7Ci0gICAgLy8gVGhlIHJlbW90ZSBpbWFnZSBt
aWdodCBoYXZlIGJlZW4gcmVsZWFzZWQgYnkgcHVyZ2VCYWNraW5nU3RvcmVzLgotICAgIGVuc3Vy
ZUltYWdlQmFja2luZ1N0b3JlKCk7CiAgICAgc3luY0xheWVyU3RhdGUoKTsKICAgICBzeW5jQW5p
bWF0aW9ucygpOwogICAgIGNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KCk7CkBAIC01MzIs
OSArNTUxLDMwIEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpmbHVzaENvbXBvc2l0
aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKICAgICBzeW5jRmlsdGVycygpOwogI2VuZGlmCiAg
ICAgdXBkYXRlQ29udGVudEJ1ZmZlcnMoKTsKKyAgICBzeW5jQ29tcG9zaXRlZEltYWdlKCk7CiAg
ICAgc3luY0NhbnZhcygpOwogfQogCitJbnRSZWN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
Y29tcG9zaXRlZEltYWdlVmlzaWJsZVJlY3QoKQoreworICAgIEFTU0VSVChtX2Nvb3JkaW5hdGVk
Q29tcG9zaXRlZEltYWdlKTsKKyAgICBGbG9hdFJlY3QgdmlzaWJsZUltYWdlUmVjdCA9IHRpbGVk
QmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKTsKKyAgICBGbG9hdFNpemUgcmF0aW9PZmltYWdlT3Zl
ckxheWVyU2l6ZShtX2NvbXBvc2l0ZWRJbWFnZS0+d2lkdGgoKSAvIHNpemUoKS53aWR0aCgpLCBt
X2NvbXBvc2l0ZWRJbWFnZS0+aGVpZ2h0KCkgLyBzaXplKCkuaGVpZ2h0KCkpOworICAgIHZpc2li
bGVJbWFnZVJlY3Quc2NhbGUocmF0aW9PZmltYWdlT3ZlckxheWVyU2l6ZS53aWR0aCgpLCByYXRp
b09maW1hZ2VPdmVyTGF5ZXJTaXplLmhlaWdodCgpKTsKKyAgICByZXR1cm4gZW5jbG9zZWRJbnRS
ZWN0KHZpc2libGVJbWFnZVJlY3QpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6cmVsZWFzZUNvbXBvc2l0ZWRJbWFnZUlmTmVlZGVkKGJvb2wgaXNQdXJnaW5nKQoreworICAg
IGlmICghbV9jb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCBpbWFnZUlEID0gbV9jb29yZGluYXRlZENv
bXBvc2l0ZWRJbWFnZS0+aWQoKTsKKyAgICBtX2Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLmNs
ZWFyKCk7CisgICAgaWYgKCFpc1B1cmdpbmcpCisgICAgICAgIG1fQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyQ2xpZW50LT5yZWxlYXNlQ29tcG9zaXRlZEltYWdlKGltYWdlSUQsIHRoaXMpOworfQor
CiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEJl
Z2luKCkKIHsKIH0KQEAgLTU4NCw3ICs2MjQsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6YWRqdXN0Q29udGVudHNTY2FsZSgpCiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpjcmVhdGVCYWNraW5nU3RvcmUoKQogewotICAgIG1fbWFpbkJhY2tpbmdTdG9yZSA9IGFk
b3B0UHRyKG5ldyBUaWxlZEJhY2tpbmdTdG9yZSh0aGlzLCBDb29yZGluYXRlZFRpbGVCYWNrZW5k
OjpjcmVhdGUodGhpcykpKTsKKyAgICBtX21haW5CYWNraW5nU3RvcmUgPSBUaWxlZEJhY2tpbmdT
dG9yZTo6Y3JlYXRlKHRoaXMsIENvb3JkaW5hdGVkVGlsZUJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSk7
CiAgICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRTdXBwb3J0c0FscGhhKCFjb250ZW50c09wYXF1
ZSgpKTsKICAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldENvbnRlbnRzU2NhbGUoZWZmZWN0aXZl
Q29udGVudHNTY2FsZSgpKTsKIH0KQEAgLTYzNyw3ICs2NzcsNyBAQCBDb2xvciBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKCkgY29uc3QK
ICAgICByZXR1cm4gY29udGVudHNPcGFxdWUoKSA/IENvbG9yOjp3aGl0ZSA6IENvbG9yOjp0cmFu
c3BhcmVudDsKIH0KIAotUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNpemUsIGludCYgYXRsYXMsIFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpCitQYXNz
T3duUHRyPEdyYXBoaWNzQ29udGV4dD4gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpiZWdpbkNv
bnRlbnRVcGRhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgaW50JiBhdGxhcywgSW50UG9pbnQmIG9m
ZnNldCkKIHsKICAgICByZXR1cm4gbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPmJl
Z2luQ29udGVudFVwZGF0ZShzaXplLCBjb250ZW50c09wYXF1ZSgpID8gMCA6IFNoYXJlYWJsZUJp
dG1hcDo6U3VwcG9ydHNBbHBoYSwgYXRsYXMsIG9mZnNldCk7CiB9CkBAIC02ODQsMTEgKzcyNCw3
IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpwdXJnZUJhY2tpbmdTdG9yZXMoKQog
ewogICAgIG1fbWFpbkJhY2tpbmdTdG9yZS5jbGVhcigpOwogICAgIG1fcHJldmlvdXNCYWNraW5n
U3RvcmUuY2xlYXIoKTsKLQotICAgIGlmIChtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlE
KSB7Ci0gICAgICAgIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5yZWxlYXNlSW1h
Z2VCYWNraW5nU3RvcmUobV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCk7Ci0gICAgICAg
IG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQgPSAwOwotICAgIH0KKyAgICByZWxlYXNl
Q29tcG9zaXRlZEltYWdlSWZOZWVkZWQodHJ1ZSk7CiAKICAgICBkaWRDaGFuZ2VMYXllclN0YXRl
KCk7CiAgICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKQEAgLTczNCw3ICs3NzAsNyBAQCBib29sIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6aGFzUGVuZGluZ1Zpc2libGVDaGFuZ2VzKCkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmICghbV9zaG91bGRTeW5jTGF5ZXJT
dGF0ZSAmJiAhbV9zaG91bGRTeW5jQ2hpbGRyZW4gJiYgIW1fc2hvdWxkU3luY0ZpbHRlcnMgJiYg
IW1fc2hvdWxkU3luY0FuaW1hdGlvbnMgJiYgIW1fY2FudmFzTmVlZHNEaXNwbGF5KQorICAgIGlm
ICghbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSAmJiAhbV9zaG91bGRTeW5jQ2hpbGRyZW4gJiYgIW1f
c2hvdWxkU3luY0ZpbHRlcnMgJiYgIW1fc2hvdWxkU3luY0NvbXBvc2l0ZWRJbWFnZSAmJiAhbV9z
aG91bGRTeW5jQW5pbWF0aW9ucyAmJiAhbV9jYW52YXNOZWVkc0Rpc3BsYXkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIHJldHVybiBzZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFu
c2Zvcm1zKCkgfHwgIXRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKS5pc0VtcHR5KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ci5oCmluZGV4IGZiODc4NzQuLjhlMjBmMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCkBAIC0yMSw2ICsyMSw3IEBACiAj
aWZuZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcl9oCiAjZGVmaW5lIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcl9oCiAKKyNpbmNsdWRlICJDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS5oIgog
I2luY2x1ZGUgIkNvb3JkaW5hdGVkVGlsZS5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKQEAgLTU0LDEwICs1NSwxMSBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3Qg
U3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQpID0gMDsKIAorICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZT4gYWRvcHRDb21w
b3NpdGVkSW1hZ2UoV2ViQ29yZTo6SW1hZ2UqLCBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUdy
YXBoaWNzTGF5ZXJDbGllbnQqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VDb21wb3Np
dGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCwgQ29vcmRpbmF0ZWRDb21wb3Np
dGVkSW1hZ2VHcmFwaGljc0xheWVyQ2xpZW50KikgPSAwOworCiAgICAgdmlydHVhbCBXZWJDb3Jl
OjpJbnRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBi
b29sIGxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IGludDY0X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9yZShXZWJDb3JlOjpJbWFnZSopID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKGludDY0X3QpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoV2ViTGF5ZXJJRCwgY29uc3QgV2ViTGF5ZXJJ
bmZvJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJlbihXZWJMYXllcklE
LCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mKSA9IDA7CiAjaWYgRU5BQkxFKENTU19GSUxURVJT
KQpAQCAtODAsNyArODIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllciA6IHB1YmxpYyBHcmFwaGljc0xheWVyCiAgICAgLCBwdWJsaWMgVGls
ZWRCYWNraW5nU3RvcmVDbGllbnQKLSAgICAsIHB1YmxpYyBXZWJLaXQ6OkNvb3JkaW5hdGVkVGls
ZUNsaWVudCB7CisgICAgLCBwdWJsaWMgV2ViS2l0OjpDb29yZGluYXRlZFRpbGVDbGllbnQKKyAg
ICAsIHB1YmxpYyBXZWJLaXQ6OkNvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlR3JhcGhpY3NMYXll
ckNsaWVudCB7CiBwdWJsaWM6CiAgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKEdyYXBoaWNz
TGF5ZXJDbGllbnQqKTsKICAgICB2aXJ0dWFsIH5Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoKTsK
QEAgLTE2OCw2ICsxNzEsNyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAg
ICB2b2lkIGRpZENoYW5nZUZpbHRlcnMoKTsKICNlbmRpZgorICAgIHZvaWQgZGlkQ2hhbmdlQ29t
cG9zaXRlZEltYWdlKCk7CiAKICAgICB2b2lkIHN5bmNMYXllclN0YXRlKCk7CiAgICAgdm9pZCBz
eW5jQW5pbWF0aW9ucygpOwpAQCAtMTc1LDYgKzE3OSw3IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxF
KENTU19GSUxURVJTKQogICAgIHZvaWQgc3luY0ZpbHRlcnMoKTsKICNlbmRpZgorICAgIHZvaWQg
c3luY0NvbXBvc2l0ZWRJbWFnZSgpOwogICAgIHZvaWQgc3luY0NhbnZhcygpOwogICAgIHZvaWQg
ZW5zdXJlSW1hZ2VCYWNraW5nU3RvcmUoKTsKICAgICB2b2lkIGNvbXB1dGVUcmFuc2Zvcm1lZFZp
c2libGVSZWN0KCk7CkBAIC0xODIsNiArMTg3LDEyIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNy
ZWF0ZUJhY2tpbmdTdG9yZSgpOwogCisgICAgLy8gQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VH
cmFwaGljc0xheWVyQ2xpZW50CisgICAgdmlydHVhbCBXZWJLaXQ6OldlYkxheWVySUQgaWRGb3JD
b21wb3NpdGVkSW1hZ2UoKSBPVkVSUklERSB7IHJldHVybiBpZCgpOyB9CisgICAgdmlydHVhbCBJ
bnRSZWN0IGNvbXBvc2l0ZWRJbWFnZVZpc2libGVSZWN0KCkgT1ZFUlJJREU7CisKKyAgICB2b2lk
IHJlbGVhc2VDb21wb3NpdGVkSW1hZ2VJZk5lZWRlZChib29sIGlzUHVyZ2luZyA9IGZhbHNlKTsK
KwogICAgIGJvb2wgc2VsZk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNmb3JtcygpOwogICAg
IGJvb2wgc2hvdWxkVXNlVGlsZWRCYWNraW5nU3RvcmUoKTsKICAgICB2b2lkIGFkanVzdENvbnRl
bnRzU2NhbGUoKTsKQEAgLTE5Myw3ICsyMDQsNiBAQCBwcml2YXRlOgogCiAgICAgV2ViS2l0OjpX
ZWJMYXllcklEIG1faWQ7CiAgICAgV2ViS2l0OjpXZWJMYXllckluZm8gbV9sYXllckluZm87Ci0g
ICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOwogICAgIEdyYXBoaWNzTGF5ZXIqIG1fbWFza1Rhcmdl
dDsKICAgICBGbG9hdFJlY3QgbV9uZWVkc0Rpc3BsYXlSZWN0OwogICAgIEdyYXBoaWNzTGF5ZXJU
cmFuc2Zvcm0gbV9sYXllclRyYW5zZm9ybTsKQEAgLTIwMiw2ICsyMTIsNyBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZTogMTsKICAgICBib29sIG1fc2hvdWxkU3lu
Y0NoaWxkcmVuOiAxOwogICAgIGJvb2wgbV9zaG91bGRTeW5jRmlsdGVyczogMTsKKyAgICBib29s
IG1fc2hvdWxkU3luY0NvbXBvc2l0ZWRJbWFnZTogMTsKICAgICBib29sIG1fc2hvdWxkU3luY0Fu
aW1hdGlvbnM6IDE7CiAgICAgYm9vbCBtX2ZpeGVkVG9WaWV3cG9ydCA6IDE7CiAgICAgYm9vbCBt
X2NhbnZhc05lZWRzRGlzcGxheSA6IDE7CkBAIC0yMTMsNiArMjI0LDEyIEBAIHByaXZhdGU6CiAg
ICAgT3duUHRyPFRpbGVkQmFja2luZ1N0b3JlPiBtX21haW5CYWNraW5nU3RvcmU7CiAgICAgT3du
UHRyPFRpbGVkQmFja2luZ1N0b3JlPiBtX3ByZXZpb3VzQmFja2luZ1N0b3JlOwogICAgIGZsb2F0
IG1fY29udGVudHNTY2FsZTsKKworICAgIC8vIFdoZW4gbV9jb21wb3NpdGVkSW1hZ2UgZXhpc3Rz
LCB0aGlzIGxheWVyIGNhbm5vdCBiZSBhIGNvbnRlbnQgbGF5ZXIsIGJlY2F1c2Ugc2V0RHJhd3ND
b250ZW50IGFuZCBzZXRDb250ZW50c1RvSW1hZ2UgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KKyAg
ICBSZWZQdHI8SW1hZ2U+IG1fY29tcG9zaXRlZEltYWdlOworICAgIE5hdGl2ZUltYWdlUHRyIG1f
Y29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyOworICAgIFJlZlB0cjxXZWJLaXQ6OkNvb3JkaW5hdGVk
Q29tcG9zaXRlZEltYWdlPiBtX2Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlOworCiAgICAgUGxh
dGZvcm1MYXllciogbV9jYW52YXNQbGF0Zm9ybUxheWVyOwogICAgIFRpbWVyPENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcj4gbV9hbmltYXRpb25TdGFydGVkVGltZXI7CiAgICAgR3JhcGhpY3NMYXll
ckFuaW1hdGlvbnMgbV9hbmltYXRpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3Iu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCmluZGV4IDBkZGZjZWQuLjAyOTcyY2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAK
QEAgLTI2Nyw3ICsyNjcsNyBAQCBib29sIExheWVyVHJlZUNvb3JkaW5hdG9yOjpmbHVzaFBlbmRp
bmdMYXllckNoYW5nZXMoKQogCiAgICAgbV9yb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0
ZUZvclRoaXNMYXllck9ubHkoKTsKIAotICAgIHB1cmdlUmVsZWFzZWRJbWFnZXMoKTsKKyAgICB1
cGRhdGVDb21wb3NpdGVkSW1hZ2VzKCk7CiAKICAgICBpZiAobV9zaG91bGRTeW5jUm9vdExheWVy
KSB7CiAgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6U2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodG9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgpKSk7CkBAIC00NDcsMTMgKzQ0Nyw2IEBAIHZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCkKICAg
ICB9CiB9CiAKLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnB1cmdlUmVsZWFzZWRJbWFnZXMo
KQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9yZWxlYXNlZERpcmVjdGx5Q29tcG9z
aXRlZEltYWdlcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpEZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1h
Z2UobV9yZWxlYXNlZERpcmVjdGx5Q29tcG9zaXRlZEltYWdlc1tpXSkpOwotICAgIG1fcmVsZWFz
ZWREaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuY2xlYXIoKTsKLX0KLQogdm9pZCBMYXllclRyZWVD
b29yZGluYXRvcjo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoVGltZXI8TGF5ZXJUcmVlQ29vcmRpbmF0
b3I+KikKIHsKICAgICBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOwpAQCAtNDgxLDgwICs0
NzQsNiBAQCB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpkZXN0cm95UGFnZU92ZXJsYXlMYXll
cigpCiAgICAgbV9wYWdlT3ZlcmxheUxheWVyID0gbnVsbHB0cjsKIH0KIAotaW50NjRfdCBMYXll
clRyZWVDb29yZGluYXRvcjo6YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShJbWFnZSogaW1hZ2UpCi17
Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIEludmFsaWRXZWJMYXllcklEOwotCi0g
ICAgaW50NjRfdCBrZXkgPSAwOwotCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgUVBpeG1hcCogbmF0
aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLQotICAgIGlm
ICghbmF0aXZlSW1hZ2UpCi0gICAgICAgIHJldHVybiBJbnZhbGlkV2ViTGF5ZXJJRDsKLQotICAg
IGtleSA9IG5hdGl2ZUltYWdlLT5jYWNoZUtleSgpOwotI2VsaWYgVVNFKENBSVJPKQotICAgIE5h
dGl2ZUltYWdlQ2Fpcm8qIG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCk7Ci0gICAgaWYgKCFuYXRpdmVJbWFnZSkKLSAgICAgICAgcmV0dXJuIEludmFsaWRX
ZWJMYXllcklEOwotICAgIC8vIFRoaXMgY2FuIGJlIHNhZmVseSBkb25lIHNpbmNlIHdlIG93biB0
aGUgcmVmZXJlbmNlLgotICAgIC8vIEEgY29ycmVzcG9uZGluZyBjYWlyb19zdXJmYWNlX2Rlc3Ry
b3koKSBpcyBlbnN1cmVkIGluIHJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZSgpLgotICAgIGNhaXJv
X3N1cmZhY2VfdCogY2Fpcm9TdXJmYWNlID0gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UobmF0aXZl
SW1hZ2UtPnN1cmZhY2UoKSk7Ci0gICAga2V5ID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90Pihj
YWlyb1N1cmZhY2UpOwotI2VuZGlmCi0KLSAgICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJh
dG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7Ci0K
LSAgICBpZiAoaXQgIT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQoKSkg
ewotICAgICAgICArKyhpdC0+dmFsdWUpOwotICAgICAgICByZXR1cm4ga2V5OwotICAgIH0KLQot
ICAgIC8vIENoZWNrIGlmIHdlIHdlcmUgZ29pbmcgdG8gcmVsZWFzZSB0aGlzIGltYWdlIGR1cmlu
ZyB0aGUgbmV4dCBmbHVzaC4KLSAgICBzaXplX3QgcmVsZWFzZWRJbmRleCA9IG1fcmVsZWFzZWRE
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZmluZChrZXkpOwotICAgIGlmIChyZWxlYXNlZEluZGV4
ID09IG5vdEZvdW5kKSB7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9
IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGltYWdlLT5zaXplKCksIChpbWFnZS0+
Y3VycmVudEZyYW1lSGFzQWxwaGEoKSA/IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSA6
IDApKTsKLSAgICAgICAgewotICAgICAgICAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsK
LSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBJbnRQb2ludDo6emVybygpKTsKLSAgICAgICAgfQotICAgICAgICBTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7Ci0gICAgICAgIGJpdG1hcC0+Y3JlYXRlSGFuZGxlKGhh
bmRsZSk7Ci0gICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eTo6Q3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Uoa2V5LCBoYW5kbGUpKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgbV9yZWxlYXNlZERpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5y
ZW1vdmUocmVsZWFzZWRJbmRleCk7Ci0KLSAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVm
Q291bnRzLmFkZChrZXksIDEpOwotICAgIHJldHVybiBrZXk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90IGtleSkKLXsKLSAg
ICBpZiAoIWtleSkKLSAgICAgICAgcmV0dXJuOwotICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6
aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5
KTsKLSAgICBpZiAoaXQgPT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaXQtPnZhbHVlLS07Ci0KLSAgICBpZiAoaXQtPnZh
bHVlKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBVU0UoQ0FJUk8pCi0gICAgLy8gQ29tcGxlbWVu
dCB0aGUgcmVmZXJlbmNpbmcgaW4gYWRvcHRJbWFnZUJhY2tpbmdTdG9yZSgpLgotICAgIGNhaXJv
X3N1cmZhY2VfdCogY2Fpcm9TdXJmYWNlID0gcmVpbnRlcnByZXRfY2FzdDxjYWlyb19zdXJmYWNl
X3QqPihrZXkpOwotICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShjYWlyb1N1cmZhY2UpOwotI2Vu
ZGlmCi0KLSAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnJlbW92ZShpdCk7
Ci0gICAgbV9yZWxlYXNlZERpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5hcHBlbmQoa2V5KTsKLSAg
ICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotCiB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9y
Ojpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBk
b3VibGUgLyogdGltZSAqLykKIHsKIH0KQEAgLTYwNiw2ICs1MjUsNzYgQEAgdm9pZCBMYXllclRy
ZWVDb29yZGluYXRvcjo6cmVtb3ZlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQp
CiAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5
OjpSZW1vdmVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlEKSk7CiB9CiAKK1Bhc3NSZWZQdHI8
Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U+IExheWVyVHJlZUNvb3JkaW5hdG9yOjphZG9wdENv
bXBvc2l0ZWRJbWFnZShJbWFnZSogaW1hZ2UsIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlR3Jh
cGhpY3NMYXllckNsaWVudCogbGF5ZXJDbGllbnQpCit7CisgICAgQ29vcmRpbmF0ZWRDb21wb3Np
dGVkSW1hZ2VJRCBpbWFnZUlEID0gQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U6OmdldENvb3Jk
aW5hdGVkQ29tcG9zaXRlZEltYWdlSUQoaW1hZ2UpOworICAgIENvbXBvc2l0ZWRJbWFnZU1hcDo6
aXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZWRJbWFnZXMuZmluZChpbWFnZUlEKTsKKyAgICBSZWZQ
dHI8Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U+IGNvbXBvc2l0ZWRJbWFnZTsKKyAgICBpZiAo
aXQgPT0gbV9jb21wb3NpdGVkSW1hZ2VzLmVuZCgpKSB7CisgICAgICAgIGNvbXBvc2l0ZWRJbWFn
ZSA9IENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlOjpjcmVhdGUodGhpcywgaW1hZ2UpOworICAg
ICAgICBtX2NvbXBvc2l0ZWRJbWFnZXMuYWRkKGltYWdlSUQsIGNvbXBvc2l0ZWRJbWFnZSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIGNvbXBvc2l0ZWRJbWFnZSA9IGl0LT52YWx1ZTsKKworICAgIGNv
bXBvc2l0ZWRJbWFnZS0+YWRkTGF5ZXJDbGllbnQobGF5ZXJDbGllbnQpOworICAgIHJldHVybiBj
b21wb3NpdGVkSW1hZ2U7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbGVhc2VD
b21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCBpbWFnZUlELCBDb29y
ZGluYXRlZENvbXBvc2l0ZWRJbWFnZUdyYXBoaWNzTGF5ZXJDbGllbnQqIGxheWVyQ2xpZW50KQor
eworICAgIEFTU0VSVChtX2NvbXBvc2l0ZWRJbWFnZXMuY29udGFpbnMoaW1hZ2VJRCkpOworICAg
IENvbXBvc2l0ZWRJbWFnZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZWRJbWFnZXMuZmlu
ZChpbWFnZUlEKTsKKyAgICBpdC0+dmFsdWUtPnJlbW92ZUxheWVyQ2xpZW50KGxheWVyQ2xpZW50
KTsKKyAgICAvLyBGSVhNRSA6IGNoZWNrIGl0ZXJhdG9yIHRvIHJlZiAxLgorICAgIGlmIChpdC0+
dmFsdWUtPnJlZkNvdW50KCkgPT0gMSkKKyAgICAgICAgbV9jb21wb3NpdGVkSW1hZ2VzLnJlbW92
ZShpbWFnZUlEKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6dXBkYXRlQ29tcG9z
aXRlZEltYWdlcygpCit7CisgICAgQ29tcG9zaXRlZEltYWdlTWFwOjppdGVyYXRvciBlbmQgPSBt
X2NvbXBvc2l0ZWRJbWFnZXMuZW5kKCk7CisgICAgZm9yIChDb21wb3NpdGVkSW1hZ2VNYXA6Oml0
ZXJhdG9yIGl0ZXIgPSBtX2NvbXBvc2l0ZWRJbWFnZXMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsr
aXRlcikKKyAgICAgICAgaXRlci0+dmFsdWUtPnVwZGF0ZSgpOworfQorCit2b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yOjpjcmVhdGVUaWxlZENvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBv
c2l0ZWRJbWFnZUlEIGltYWdlSUQsIFdlYkxheWVySUQgbGF5ZXJJRCkKK3sKKyAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0ZVRpbGVk
Q29tcG9zaXRlZEltYWdlKGltYWdlSUQsIGxheWVySUQpKTsKK30KKwordm9pZCBMYXllclRyZWVD
b29yZGluYXRvcjo6ZGVzdHJveVRpbGVkQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9z
aXRlZEltYWdlSUQgaW1hZ2VJRCwgV2ViTGF5ZXJJRCBsYXllcklEKQoreworICAgIG1fd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6RGVzdHJveVRpbGVk
Q29tcG9zaXRlZEltYWdlKGltYWdlSUQsIGxheWVySUQpKTsKK30KKwordm9pZCBMYXllclRyZWVD
b29yZGluYXRvcjo6Y3JlYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBv
c2l0ZWRJbWFnZUlEIGltYWdlSUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZv
JiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0YXJnZXRSZWN0KQoreworICAg
IG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2Uo
aW1hZ2VJRCwgdGlsZUlELCB0YXJnZXRSZWN0LCB1cGRhdGVJbmZvKSk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OnVwZGF0ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0
ZWRDb21wb3NpdGVkSW1hZ2VJRCBpbWFnZUlELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBk
YXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGFyZ2V0UmVjdCkK
K3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpVcGRhdGVUaWxlRm9yQ29tcG9zaXRl
ZEltYWdlKGltYWdlSUQsIHRpbGVJRCwgdGFyZ2V0UmVjdCwgdXBkYXRlSW5mbykpOworfQorCit2
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW1vdmVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKENv
b3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgaW1hZ2VJRCwgaW50IHRpbGVJRCkKK3sKKyAgICBt
X3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpM
YXllclRyZWVDb29yZGluYXRvclByb3h5OjpSZW1vdmVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKGlt
YWdlSUQsIHRpbGVJRCkpOworfQorCitQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gTGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OmJlZ2luQ29tcG9zaXRlZEltYWdlVXBkYXRlKGNvbnN0IEludFNpemUm
IHNpemUsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3MsIGludCYgYXRsYXNJRCwgSW50UG9p
bnQmIG9mZnNldCkKK3sKKyAgICByZXR1cm4gYmVnaW5Db250ZW50VXBkYXRlKHNpemUsIGZsYWdz
LCBhdGxhc0lELCBvZmZzZXQpOworfQorCitib29sIExheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXll
clRyZWVDb21wb3NpdGVkSW1hZ2VUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdAoreworICAgIHJl
dHVybiBsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKTsKK30KKwogdm9pZCBMYXllclRyZWVD
b29yZGluYXRvcjo6Y3JlYXRlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQsIGNvbnN0IFNoYXJlYWJs
ZVN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlKQogewogICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Q3JlYXRlVXBkYXRlQXRsYXMoYXRsYXNJRCwg
aGFuZGxlKSk7CkBAIC02OTIsMTAgKzY4MSw3IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OnB1cmdlQmFja2luZ1N0b3JlcygpCiAgICAgZm9yIChIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICgqaXQpLT5wdXJnZUJhY2tpbmdTdG9yZXMo
KTsKIAotICAgIHB1cmdlUmVsZWFzZWRJbWFnZXMoKTsKLQotICAgIEFTU0VSVCghbV9kaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5zaXplKCkpOwotICAgIEFTU0VSVCghbV9yZWxlYXNl
ZERpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5zaXplKCkpOworICAgIG1fY29tcG9zaXRlZEltYWdl
cy5jbGVhcigpOwogICAgIG1fdXBkYXRlQXRsYXNlcy5jbGVhcigpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVDb29yZGluYXRvci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaAppbmRleCBjYWNiNjhl
Li4zYzQ0NjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNv
b3JkaW5hdG9yLmgKQEAgLTIyLDYgKzIyLDcgQEAKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKIAorI2luY2x1ZGUgIkNvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLmgiCiAjaW5jbHVk
ZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4
dC5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKQEAgLTQwLDYgKzQxLDcgQEAgY2xhc3Mg
V2ViUGFnZTsKIGNsYXNzIExheWVyVHJlZUNvb3JkaW5hdG9yIDogcHVibGljIExheWVyVHJlZUhv
c3QsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQKICAgICAsIHB1YmxpYyBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXJDbGllbnQKICAgICAsIHB1YmxpYyBVcGRhdGVBdGxhc0NsaWVudAorICAg
ICwgcHVibGljIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlQ2xpZW50CiAgICAgLCBwdWJsaWMg
V2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPExheWVyVHJlZUNvb3JkaW5hdG9yPiBjcmVhdGUoV2ViUGFnZSopOwpAQCAtNjcsMTIg
KzY5LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGF1c2VSZW5kZXJpbmcoKSB7IG1f
aXNTdXNwZW5kZWQgPSB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHJlc3VtZVJlbmRlcmluZygp
IHsgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOyBzY2hlZHVsZUxheWVyRmx1c2goKTsgfQogICAgIHZp
cnR1YWwgdm9pZCBkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSgpIHsgfQotICAgIHZpcnR1YWwg
aW50NjRfdCBhZG9wdEltYWdlQmFja2luZ1N0b3JlKFdlYkNvcmU6OkltYWdlKik7Ci0gICAgdmly
dHVhbCB2b2lkIHJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90KTsKIAogICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VV
cGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZv
JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxl
KFdlYkxheWVySUQsIGludCB0aWxlSUQpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDb29yZGlu
YXRlZENvbXBvc2l0ZWRJbWFnZT4gYWRvcHRDb21wb3NpdGVkSW1hZ2UoV2ViQ29yZTo6SW1hZ2Uq
LCBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUdyYXBoaWNzTGF5ZXJDbGllbnQqKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENv
bXBvc2l0ZWRJbWFnZUlELCBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUdyYXBoaWNzTGF5ZXJD
bGllbnQqKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgdmlzaWJsZUNv
bnRlbnRzUmVjdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CkBAIC0xMTMsNiArMTE1LDE3
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRz
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQm
LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgY2xpcFJlY3QpOwogCisgICAgLy8gQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VDbGll
bnQKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZWRDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0
ZWRDb21wb3NpdGVkSW1hZ2VJRCwgV2ViTGF5ZXJJRCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIGRlc3Ryb3lUaWxlZENvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFn
ZUlELCBXZWJMYXllcklEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZUZv
ckNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELCBpbnQgdGlsZUlE
LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShDb29y
ZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRl
SW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFn
ZUlELCBpbnQgdGlsZUlEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbXBvc2l0ZWRJbWFnZVVwZGF0ZShjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncywgaW50JiBhdGxhc0lELCBXZWJD
b3JlOjpJbnRQb2ludCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBsYXllclRyZWVDb21w
b3NpdGVkSW1hZ2VUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdCBPVkVSUklERTsKKworICAgIHZv
aWQgdXBkYXRlQ29tcG9zaXRlZEltYWdlcygpOworCiAgICAgLy8gR3JhcGhpY3NMYXllckZhY3Rv
cnkKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gY3JlYXRl
R3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50KikgT1ZFUlJJREU7CiAK
QEAgLTEyNiw3ICsxMzksNiBAQCBwcml2YXRlOgogICAgIHZvaWQgc3luY0Rpc3BsYXlTdGF0ZSgp
OwogICAgIHZvaWQgbG9ja0FuaW1hdGlvbnMoKTsKICAgICB2b2lkIHVubG9ja0FuaW1hdGlvbnMo
KTsKLSAgICB2b2lkIHB1cmdlUmVsZWFzZWRJbWFnZXMoKTsKIAogICAgIHZvaWQgbGF5ZXJGbHVz
aFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+Kik7CiAKQEAg
LTE0Nyw4ICsxNTksOCBAQCBwcml2YXRlOgogCiAgICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIqPiBtX3JlZ2lzdGVyZWRMYXllcnM7CiAgICAgVmVjdG9yPFdlYkxh
eWVySUQ+IG1fZGV0YWNoZWRMYXllcnM7Ci0gICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+IG1fZGly
ZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHM7Ci0gICAgVmVjdG9yPGludDY0X3Q+IG1fcmVs
ZWFzZWREaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXM7CisgICAgdHlwZWRlZiBIYXNoTWFwPENvb3Jk
aW5hdGVkQ29tcG9zaXRlZEltYWdlSUQsIFJlZlB0cjxDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFn
ZT4gPiBDb21wb3NpdGVkSW1hZ2VNYXA7CisgICAgQ29tcG9zaXRlZEltYWdlTWFwIG1fY29tcG9z
aXRlZEltYWdlczsKICAgICBWZWN0b3I8T3duUHRyPFVwZGF0ZUF0bGFzPiA+IG1fdXBkYXRlQXRs
YXNlczsKIAogICAgIGJvb2wgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7Ci0tIAox
LjcuOS41Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172478</attachid>
            <date>2012-11-05 20:21:35 -0800</date>
            <delta_ts>2012-11-06 21:42:55 -0800</delta_ts>
            <desc>2. WIP directly decoding into GraphicsSurface (not for review) </desc>
            <filename>0002-CoordinatedCompositedImage-uses-ShareableSurface-whe.patch</filename>
            <type>text/plain</type>
            <size>14394</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">RnJvbSAwZTY5MDA0ZjU3NDJiMGE2YzE4MTk3MjkyZDdjYmQ1ZjJkM2ZkYjY1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBIdWFuZyBEb25nc3VuZyA8bHV4dGVsbGFAY29tcGFueTEwMC5u
ZXQ+CkRhdGU6IFR1ZSwgNiBOb3YgMjAxMiAxMjoyMDoyMyArMDkwMApTdWJqZWN0OiBbUEFUQ0gg
Mi8zXSBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZSB1c2VzIFNoYXJlYWJsZVN1cmZhY2Ugd2hl
bgogSW1hZ2UgaXMgc21hbGwuCgpJdCBpcyB0aGUgcHJlcGFyYXRpb24gdG8gZGlyZWN0bHkgZGVj
b2RlIHRoZSBnaXZlbiBpbWFnZSBpbnRvIGEgR3JhcGhpY3NTdXJmYWNlLgpUaGlzIHBhdGNoIGlz
IG5vdCB5ZXQgY29tcGxldGVkLiBUaGUgcHVycG9zZSBvZiB0aGlzIHBhdGNoIHNob3dzIHRoZSBk
aXJlY3Rpb24uCi0tLQogLi4uL0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLmNwcCAgICAgICAg
ICAgICAgICAgfCAgMTY1ICsrKysrKysrKysrKysrKy0tLS0tCiAuLi4vQ29vcmRpbmF0ZWRDb21w
b3NpdGVkSW1hZ2UuaCAgICAgICAgICAgICAgICAgICB8ICAgMjkgKy0tLQogMiBmaWxlcyBjaGFu
Z2VkLCAxMzQgaW5zZXJ0aW9ucygrKSwgNjAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRDb21wb3NpdGVkSW1hZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UuY3BwCmlu
ZGV4IDcyZjU0OTUuLmYxYzcwMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS5jcHAKQEAgLTI4LDggKzI4LDExIEBA
CiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogI2luY2x1ZGUgIkNvb3JkaW5hdGVkQ29t
cG9zaXRlZEltYWdlLmgiCiAKKyNpbmNsdWRlICJDb29yZGluYXRlZFRpbGUuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJUaWxl
ZEJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgiCiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC00MSwyMCArNDQsNTYgQEAgQ29vcmRpbmF0
ZWRDb21wb3NpdGVkSW1hZ2VJRCBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6Z2V0Q29vcmRp
bmF0ZWRDb21wb3NpdGUKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDb29yZGluYXRlZENv
bXBvc2l0ZWRJbWFnZUlEPihpbWFnZSk7CiB9CiAKK3N0YXRpYyBib29sIHNob3VsZFRpbGUoSW1h
Z2UqIGltYWdlKQoreworICAgIGVudW0geyBrVGlsZVRocmVzaG9sZCA9IDEgfTsKKyAgICByZXR1
cm4gaW1hZ2UtPndpZHRoKCkgPiBrVGlsZVRocmVzaG9sZCB8fCBpbWFnZS0+aGVpZ2h0KCkgPiBr
VGlsZVRocmVzaG9sZDsKK30KKwogUGFzc1JlZlB0cjxDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFn
ZT4gQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U6OmNyZWF0ZShDb29yZGluYXRlZENvbXBvc2l0
ZWRJbWFnZUNsaWVudCogY2xpZW50LCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSkKIHsKICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlKGNsaWVudCwgaW1h
Z2UpKTsKIH0KIAorY2xhc3MgQ29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3JlIDogcHVibGljIFdl
YkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlQ2xpZW50LCBwdWJsaWMgQ29vcmRpbmF0ZWRUaWxlQ2xp
ZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb21wb3NpdGVkVGlsZWRCYWNraW5nU3Rv
cmUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0
IENvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9yZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZSop
OworICAgIHZpcnR1YWwgfkNvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9yZSgpOworCisgICAgdm9p
ZCB1cGRhdGUoYm9vbCBpbnZhbGlkYXRlZCk7CisKK3ByaXZhdGU6CisgICAgLy8gVGlsZWRCYWNr
aW5nU3RvcmVDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludEJl
Z2luKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnQo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYgcGFpbnRlZEFyZWEpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgYm9vbCB0aWxlZEJhY2tpbmdTdG9yZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNS
ZWN0KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHRpbGVkQmFja2lu
Z1N0b3JlVmlzaWJsZVJlY3QoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkNvbG9y
IHRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKCkgY29uc3QgT1ZFUlJJREU7CisKKyAg
ICAvLyBDb29yZGluYXRlZFRpbGVDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShp
bnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShpbnQgdGlsZUlELCBj
b25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShpbnQgdGlsZUlEKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRl
bnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGludCYgYXRsYXNJRCwgV2ViQ29yZTo6
SW50UG9pbnQmKSBPVkVSUklERTsKKworICAgIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlKiBt
X293bmVyOworICAgIE93blB0cjxXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZT4gbV90aWxlZEJh
Y2tpbmdTdG9yZTsKKworICAgIGJvb2wgbV9pblVwZGF0ZU1vZGU7Cit9OworCiBDb29yZGluYXRl
ZENvbXBvc2l0ZWRJbWFnZTo6Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRD
b21wb3NpdGVkSW1hZ2VDbGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UpCiAg
ICAgOiBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX2ltYWdlKGltYWdlKQogICAgICwgbV9pZChn
ZXRDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEKG1faW1hZ2UuZ2V0KCkpKQogICAgICwgbV9k
aWRJbnZhbGlkYXRlKGZhbHNlKQotICAgICwgbV9pblVwZGF0ZU1vZGUoZmFsc2UpCiB7Ci0gICAg
bV9iYWNraW5nU3RvcmUgPSBUaWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKHRoaXMsIENvb3JkaW5h
dGVkVGlsZUJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSk7Ci0gICAgbV9iYWNraW5nU3RvcmUtPnNldENv
bnRlbnRzU2NhbGUoMSk7CisgICAgaWYgKHNob3VsZFRpbGUobV9pbWFnZS5nZXQoKSkpCisgICAg
ICAgIG1fYmFja2luZ1N0b3JlID0gYWRvcHRQdHIobmV3IENvbXBvc2l0ZWRUaWxlZEJhY2tpbmdT
dG9yZSh0aGlzKSk7CiB9CiAKIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlOjp+Q29vcmRpbmF0
ZWRDb21wb3NpdGVkSW1hZ2UoKQpAQCAtNjUsNyArMTA0LDEzIEBAIHZvaWQgQ29vcmRpbmF0ZWRD
b21wb3NpdGVkSW1hZ2U6OmFkZExheWVyQ2xpZW50KENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdl
R3JhcGhpCiB7CiAgICAgQVNTRVJUKCFtX2xheWVyQ2xpZW50cy5maW5kKGxheWVyQ2xpZW50KSk7
CiAgICAgbV9sYXllckNsaWVudHMuYXBwZW5kKGxheWVyQ2xpZW50KTsKLSAgICBtX2NsaWVudC0+
Y3JlYXRlVGlsZWRDb21wb3NpdGVkSW1hZ2UoaWQoKSwgbGF5ZXJDbGllbnQtPmlkRm9yQ29tcG9z
aXRlZEltYWdlKCkpOworCisgICAgaWYgKG1fYmFja2luZ1N0b3JlKQorICAgICAgICBtX2NsaWVu
dC0+Y3JlYXRlVGlsZWRDb21wb3NpdGVkSW1hZ2UoaWQoKSwgbGF5ZXJDbGllbnQtPmlkRm9yQ29t
cG9zaXRlZEltYWdlKCkpOworICAgIC8qCisgICAgZWxzZQorICAgICAgICBtX2NsaWVudC0+Y3Jl
YXRlRGlyZWN0bHlEZWNvZGVkQ29tcG9zaXRlZEltYWdlKGlkKCksIGxheWVyQ2xpZW50LT5pZEZv
ckNvbXBvc2l0ZWRJbWFnZSgpKTsKKyAgICAgKi8KIH0KIAogdm9pZCBDb29yZGluYXRlZENvbXBv
c2l0ZWRJbWFnZTo6cmVtb3ZlTGF5ZXJDbGllbnQoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VH
cmFwaGljc0xheWVyQ2xpZW50KiBsYXllckNsaWVudCkKQEAgLTczLDkwICsxMTgsMTM2IEBAIHZv
aWQgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U6OnJlbW92ZUxheWVyQ2xpZW50KENvb3JkaW5h
dGVkQ29tcG9zaXRlZEltYWdlR3JhCiAgICAgc2l6ZV90IHBvc2l0aW9uID0gbV9sYXllckNsaWVu
dHMuZmluZChsYXllckNsaWVudCk7CiAgICAgQVNTRVJUKHBvc2l0aW9uICE9IG5vdEZvdW5kKTsK
ICAgICBtX2xheWVyQ2xpZW50cy5yZW1vdmUocG9zaXRpb24pOwotICAgIG1fY2xpZW50LT5kZXN0
cm95VGlsZWRDb21wb3NpdGVkSW1hZ2UoaWQoKSwgbGF5ZXJDbGllbnQtPmlkRm9yQ29tcG9zaXRl
ZEltYWdlKCkpOworCisgICAgaWYgKG1fYmFja2luZ1N0b3JlKQorICAgICAgICBtX2NsaWVudC0+
ZGVzdHJveVRpbGVkQ29tcG9zaXRlZEltYWdlKGlkKCksIGxheWVyQ2xpZW50LT5pZEZvckNvbXBv
c2l0ZWRJbWFnZSgpKTsKKyAgICAvKgorICAgIGVsc2UKKyAgICAgICAgbV9jbGllbnQtPmRlc3Ry
b3lEaXJlY3RseURlY29kZWRDb21wb3NpdGVkSW1hZ2UoaWQoKSwgbGF5ZXJDbGllbnQtPmlkRm9y
Q29tcG9zaXRlZEltYWdlKCkpOworICAgICAqLwogfQogCiB2b2lkIENvb3JkaW5hdGVkQ29tcG9z
aXRlZEltYWdlOjppbnZhbGlkYXRlKCkKIHsKLSAgICAvLyBPbmUgZnJhbWUgb2YgdGhlIGltYWdl
IGNhbiBiZSBvcGFxdWUgd2hpbGUgYW5vdGhlciBpcyBub3Qgb3BhcXVlLgotICAgIG1fYmFja2lu
Z1N0b3JlLT5zZXRTdXBwb3J0c0FscGhhKG1faW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkp
OwogICAgIG1fZGlkSW52YWxpZGF0ZSA9IHRydWU7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRDb21w
b3NpdGVkSW1hZ2U6OnVwZGF0ZSgpCiB7CisgICAgaWYgKG1fYmFja2luZ1N0b3JlKQorICAgICAg
ICBtX2JhY2tpbmdTdG9yZS0+dXBkYXRlKG1fZGlkSW52YWxpZGF0ZSk7CisgICAgLyoKKyAgICBl
bHNlCisgICAgICAgIHVwZGF0ZURpcmVjdGx5RGVjb2RlZENvbXBvc2l0ZWRJbWFnZSgpOworICAg
ICAqLworICAgIG1fZGlkSW52YWxpZGF0ZSA9IGZhbHNlOworfQorCisvKgordm9pZCBDb29yZGlu
YXRlZENvbXBvc2l0ZWRJbWFnZTo6dXBkYXRlRGlyZWN0bHlEZWNvZGVkQ29tcG9zaXRlZEltYWdl
KCkKK3sKKyAgICBib29sIHZpc2libGUgPSAhdmlzaWJsZVJlY3QoKS5pc0VtcHR5KCk7CisgICAg
aWYgKHZpc2libGUgJiYgbV9kaWRJbnZhbGlkYXRlKQorICAgICAgICBtX2NsaWVudC0+dXBkYXRl
RGlyZWN0bHlEZWNvZGVkQ29tcG9zaXRlZEltYWdlKGlkKCkpOworCisgICAgaWYgKCF2aXNpYmxl
KQorICAgICAgICBtX2NsaWVudC0+cmVsZWFzZURpcmVjdGx5RGVjb2RlZENvbXBvc2l0ZWRJbWFn
ZVRleHR1cmUoaWQoKSk7Cit9CisqLworCitJbnRSZWN0IENvb3JkaW5hdGVkQ29tcG9zaXRlZElt
YWdlOjp2aXNpYmxlUmVjdCgpCit7CisgICAgUmVnaW9uIHVuaXRlZFZpc2libGVSZWdpb247Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xheWVyQ2xpZW50cy5zaXplKCk7ICsraSkKKyAg
ICAgICAgdW5pdGVkVmlzaWJsZVJlZ2lvbi51bml0ZShtX2xheWVyQ2xpZW50c1tpXS0+Y29tcG9z
aXRlZEltYWdlVmlzaWJsZVJlY3QoKSk7CisKKyAgICBJbnRSZWN0IHVuaXRlZFZpc2libGVSZWN0
ID0gdW5pdGVkVmlzaWJsZVJlZ2lvbi5ib3VuZHMoKTsKKyAgICB1bml0ZWRWaXNpYmxlUmVjdC5p
bnRlcnNlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBtX2ltYWdlLT5zaXplKCkpKTsKKyAg
ICByZXR1cm4gdW5pdGVkVmlzaWJsZVJlY3Q7Cit9CisKKworQ29tcG9zaXRlZFRpbGVkQmFja2lu
Z1N0b3JlOjpDb21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmUoQ29vcmRpbmF0ZWRDb21wb3NpdGVk
SW1hZ2UqIG93bmVyKQorICAgIDogbV9vd25lcihvd25lcikKKyAgICAsIG1faW5VcGRhdGVNb2Rl
KGZhbHNlKQoreworICAgIG1fdGlsZWRCYWNraW5nU3RvcmUgPSBUaWxlZEJhY2tpbmdTdG9yZTo6
Y3JlYXRlKHRoaXMsIENvb3JkaW5hdGVkVGlsZUJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSk7CisgICAg
bV90aWxlZEJhY2tpbmdTdG9yZS0+c2V0Q29udGVudHNTY2FsZSgxKTsKK30KKworQ29tcG9zaXRl
ZFRpbGVkQmFja2luZ1N0b3JlOjp+Q29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3JlKCkKK3sKK30K
Kwordm9pZCBDb21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmU6OnVwZGF0ZShib29sIGludmFsaWRh
dGVkKQorewogICAgIG1faW5VcGRhdGVNb2RlID0gdHJ1ZTsKLSAgICBtX2JhY2tpbmdTdG9yZS0+
Y292ZXJXaXRoVGlsZXNJZk5lZWRlZCgpOwotICAgIGlmIChtX2RpZEludmFsaWRhdGUpIHsKLSAg
ICAgICAgbV9iYWNraW5nU3RvcmUtPmludmFsaWRhdGUodGlsZWRCYWNraW5nU3RvcmVDb250ZW50
c1JlY3QoKSk7Ci0gICAgICAgIG1fZGlkSW52YWxpZGF0ZSA9IGZhbHNlOworICAgIG1fdGlsZWRC
YWNraW5nU3RvcmUtPmNvdmVyV2l0aFRpbGVzSWZOZWVkZWQoKTsKKyAgICBpZiAoaW52YWxpZGF0
ZWQpIHsKKyAgICAgICAgLy8gT25lIGZyYW1lIG9mIHRoZSBpbWFnZSBjYW4gYmUgb3BhcXVlIHdo
aWxlIGFub3RoZXIgaXMgbm90IG9wYXF1ZS4KKyAgICAgICAgbV90aWxlZEJhY2tpbmdTdG9yZS0+
c2V0U3VwcG9ydHNBbHBoYShtX293bmVyLT5tX2ltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgp
KTsKKyAgICAgICAgbV90aWxlZEJhY2tpbmdTdG9yZS0+aW52YWxpZGF0ZSh0aWxlZEJhY2tpbmdT
dG9yZUNvbnRlbnRzUmVjdCgpKTsKICAgICB9Ci0gICAgbV9iYWNraW5nU3RvcmUtPnVwZGF0ZVRp
bGVCdWZmZXJzKCk7CisgICAgbV90aWxlZEJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZUJ1ZmZlcnMo
KTsKICAgICBtX2luVXBkYXRlTW9kZSA9IGZhbHNlOwogfQogCi12b2lkIENvb3JkaW5hdGVkQ29t
cG9zaXRlZEltYWdlOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKQordm9pZCBDb21wb3Np
dGVkVGlsZWRCYWNraW5nU3RvcmU6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpCiB7CiB9
CiAKLXZvaWQgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U6OnRpbGVkQmFja2luZ1N0b3JlUGFp
bnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBD
b21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmU6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIGlmIChyZWN0
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29udGV4dC0+ZHJhd0ltYWdlKG1f
aW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIHJlY3QpOworICAgIGNvbnRleHQtPmRy
YXdJbWFnZShtX293bmVyLT5tX2ltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCByZWN0
KTsKIH0KIAotdm9pZCBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6dGlsZWRCYWNraW5nU3Rv
cmVQYWludEVuZChjb25zdCBWZWN0b3I8SW50UmVjdD4mIC8qIHVwZGF0ZWRSZWN0cyAqLykKK3Zv
aWQgQ29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3JlOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5k
KGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgLyogdXBkYXRlZFJlY3RzICovKQogewogfQogCi1ib29s
IENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlOjp0aWxlZEJhY2tpbmdTdG9yZVVwZGF0ZXNBbGxv
d2VkKCkgY29uc3QKK2Jvb2wgQ29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3JlOjp0aWxlZEJhY2tp
bmdTdG9yZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QKIHsKICAgICBpZiAoIW1faW5VcGRhdGVNb2Rl
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fY2xpZW50LT5sYXllclRyZWVD
b21wb3NpdGVkSW1hZ2VUaWxlVXBkYXRlc0FsbG93ZWQoKTsKKyAgICByZXR1cm4gbV9vd25lci0+
bV9jbGllbnQtPmxheWVyVHJlZUNvbXBvc2l0ZWRJbWFnZVRpbGVVcGRhdGVzQWxsb3dlZCgpOwog
fQogCi1JbnRSZWN0IENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlOjp0aWxlZEJhY2tpbmdTdG9y
ZUNvbnRlbnRzUmVjdCgpCitJbnRSZWN0IENvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9yZTo6dGls
ZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKQogewotICAgIHJldHVybiBJbnRSZWN0KDAsIDAs
IG1faW1hZ2UtPndpZHRoKCksIG1faW1hZ2UtPmhlaWdodCgpKTsKKyAgICByZXR1cm4gSW50UmVj
dCgwLCAwLCBtX293bmVyLT5tX2ltYWdlLT53aWR0aCgpLCBtX293bmVyLT5tX2ltYWdlLT5oZWln
aHQoKSk7CiB9CiAKLUludFJlY3QgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U6OnRpbGVkQmFj
a2luZ1N0b3JlVmlzaWJsZVJlY3QoKQorSW50UmVjdCBDb21wb3NpdGVkVGlsZWRCYWNraW5nU3Rv
cmU6OnRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKQogewotICAgIFJlZ2lvbiB1bml0ZWRE
aXJ0eVJlZ2lvbjsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbGF5ZXJDbGllbnRzLnNp
emUoKTsgKytpKQotICAgICAgICB1bml0ZWREaXJ0eVJlZ2lvbi51bml0ZShtX2xheWVyQ2xpZW50
c1tpXS0+Y29tcG9zaXRlZEltYWdlVmlzaWJsZVJlY3QoKSk7Ci0KLSAgICBJbnRSZWN0IHVuaXRl
ZERpcnR5UmVjdCA9IHVuaXRlZERpcnR5UmVnaW9uLmJvdW5kcygpOwotICAgIHVuaXRlZERpcnR5
UmVjdC5pbnRlcnNlY3QodGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKSk7Ci0gICAgcmV0
dXJuIHVuaXRlZERpcnR5UmVjdDsKKyAgICByZXR1cm4gbV9vd25lci0+dmlzaWJsZVJlY3QoKTsK
IH0KIAotQ29sb3IgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U6OnRpbGVkQmFja2luZ1N0b3Jl
QmFja2dyb3VuZENvbG9yKCkgY29uc3QKK0NvbG9yIENvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9y
ZTo6dGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAogewogICAgIHJldHVy
biBDb2xvcjo6dHJhbnNwYXJlbnQ7CiB9CiAKLVBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBD
b29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IEludFNp
emUmIHNpemUsIGludCYgYXRsYXMsIEludFBvaW50JiBvZmZzZXQpCitQYXNzT3duUHRyPEdyYXBo
aWNzQ29udGV4dD4gQ29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3JlOjpiZWdpbkNvbnRlbnRVcGRh
dGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgaW50JiBhdGxhcywgSW50UG9pbnQmIG9mZnNldCkKIHsK
LSAgICByZXR1cm4gbV9jbGllbnQtPmJlZ2luQ29tcG9zaXRlZEltYWdlVXBkYXRlKHNpemUsIG1f
aW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgPyBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRz
QWxwaGEgOiBTaGFyZWFibGVCaXRtYXA6Ok5vRmxhZ3MsIGF0bGFzLCBvZmZzZXQpOworICAgIHJl
dHVybiBtX293bmVyLT5tX2NsaWVudC0+YmVnaW5Db21wb3NpdGVkSW1hZ2VVcGRhdGUoc2l6ZSwg
bV9vd25lci0+bV9pbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSA/IFNoYXJlYWJsZUJpdG1h
cDo6U3VwcG9ydHNBbHBoYSA6IFNoYXJlYWJsZUJpdG1hcDo6Tm9GbGFncywgYXRsYXMsIG9mZnNl
dCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U6OmNyZWF0ZVRpbGUoaW50
IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJl
Y3QmIHRhcmdldFJlY3QpCit2b2lkIENvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRl
VGlsZShpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29u
c3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKIHsKLSAgICBtX2NsaWVudC0+Y3JlYXRlVGlsZUZvckNv
bXBvc2l0ZWRJbWFnZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8sIHRhcmdldFJlY3QpOworICAg
IG1fb3duZXItPm1fY2xpZW50LT5jcmVhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKG1fb3duZXIt
PmlkKCksIHRpbGVJRCwgdXBkYXRlSW5mbywgdGFyZ2V0UmVjdCk7CiB9CiAKLXZvaWQgQ29vcmRp
bmF0ZWRDb21wb3NpdGVkSW1hZ2U6OnVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgU3VyZmFj
ZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QpCit2b2lk
IENvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25z
dCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVj
dCkKIHsKLSAgICBtX2NsaWVudC0+dXBkYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShpZCgpLCB0
aWxlSUQsIHVwZGF0ZUluZm8sIHRhcmdldFJlY3QpOworICAgIG1fb3duZXItPm1fY2xpZW50LT51
cGRhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKG1fb3duZXItPmlkKCksIHRpbGVJRCwgdXBkYXRl
SW5mbywgdGFyZ2V0UmVjdCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U6
OnJlbW92ZVRpbGUoaW50IHRpbGVJRCkKK3ZvaWQgQ29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3Jl
OjpyZW1vdmVUaWxlKGludCB0aWxlSUQpCiB7Ci0gICAgbV9jbGllbnQtPnJlbW92ZVRpbGVGb3JD
b21wb3NpdGVkSW1hZ2UoaWQoKSwgdGlsZUlEKTsKKyAgICBtX293bmVyLT5tX2NsaWVudC0+cmVt
b3ZlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShtX293bmVyLT5pZCgpLCB0aWxlSUQpOwogfQogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRDb21wb3Np
dGVkSW1hZ2UuaAppbmRleCA1MzA0MjZhLi5mYzRiZWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENv
bXBvc2l0ZWRJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLmgKQEAgLTI5LDEz
ICsyOSwxMCBAQAogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogI2luY2x1ZGUgIkNv
b3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZFRpbGUu
aCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJT
aGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgotI2luY2x1
ZGUgIlRpbGVkQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVDbGll
bnQuaCIKICNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC00NSw2ICs0Miw3IEBAIGNsYXNz
IEdyYXBoaWNzQ29udGV4dDsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBDb21wb3Np
dGVkVGlsZWRCYWNraW5nU3RvcmU7CiAKIGNsYXNzIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdl
Q2xpZW50IHsKIHB1YmxpYzoKQEAgLTYzLDkgKzYxLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwg
V2ViQ29yZTo6SW50UmVjdCBjb21wb3NpdGVkSW1hZ2VWaXNpYmxlUmVjdCgpID0gMDsKIH07CiAK
LWNsYXNzIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8Q29v
cmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U+Ci0gICAgLCBwdWJsaWMgV2ViQ29yZTo6VGlsZWRCYWNr
aW5nU3RvcmVDbGllbnQKLSAgICAsIHB1YmxpYyBDb29yZGluYXRlZFRpbGVDbGllbnQgeworY2xh
c3MgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxDb29yZGlu
YXRlZENvbXBvc2l0ZWRJbWFnZT4geworICAgIGZyaWVuZCBjbGFzcyBDb21wb3NpdGVkVGlsZWRC
YWNraW5nU3RvcmU7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRD
b21wb3NpdGVkSW1hZ2U+IGNyZWF0ZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUNsaWVudCos
IFBhc3NSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+KTsKICAgICB2aXJ0dWFsIH5Db29yZGluYXRlZENv
bXBvc2l0ZWRJbWFnZSgpOwpAQCAtODIsMjkgKzc5LDE1IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VD
bGllbnQqLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkltYWdlPik7CiAKLSAgICAvLyBUaWxlZEJhY2tp
bmdTdG9yZUNsaWVudAotICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVn
aW4oKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkludFJlY3Q+JiBwYWludGVkQXJlYSkgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCBib29sIHRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQoKSBjb25zdCBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1Jl
Y3QoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgdGlsZWRCYWNraW5n
U3RvcmVWaXNpYmxlUmVjdCgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6Q29sb3Ig
dGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCBPVkVSUklERTsKLQotICAg
IC8vIENvb3JkaW5hdGVkVGlsZUNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKGlu
dCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNv
bnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURF
OwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKGludCB0aWxlSUQpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVu
dFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgaW50JiBhdGxhc0lELCBXZWJDb3JlOjpJ
bnRQb2ludCYpIE9WRVJSSURFOworICAgIFdlYkNvcmU6OkludFJlY3QgdmlzaWJsZVJlY3QoKTsK
IAogICAgIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlQ2xpZW50KiBtX2NsaWVudDsKICAgICBS
ZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IG1faW1hZ2U7CiAgICAgQ29vcmRpbmF0ZWRDb21wb3NpdGVk
SW1hZ2VJRCBtX2lkOwotICAgIE93blB0cjxXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZT4gbV9i
YWNraW5nU3RvcmU7CiAgICAgVmVjdG9yPENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlR3JhcGhp
Y3NMYXllckNsaWVudCo+IG1fbGF5ZXJDbGllbnRzOworICAgIE93blB0cjxDb21wb3NpdGVkVGls
ZWRCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwogCi0gICAgYm9vbCBtX2RpZEludmFsaWRh
dGUgOiAxOwotICAgIGJvb2wgbV9pblVwZGF0ZU1vZGUgOiAxOworICAgIGJvb2wgbV9kaWRJbnZh
bGlkYXRlOwogfTsKIAogfQotLSAKMS43LjkuNQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172716</attachid>
            <date>2012-11-06 21:43:00 -0800</date>
            <delta_ts>2012-11-06 21:48:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101023-20121107144104.patch</filename>
            <type>text/plain</type>
            <size>77959</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzNzIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTMwNDFhYWRkMzM0NWE5
YzM4YzJhODQwNDkzOWMzYWE4NzJiZGQ3Mi4uMDRkMzYyMGZiYTlmYjc0ZTNlZDE5Mjc2OWUwYmMz
OWEwMjg5ODlmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTExLTA2ICBIdWFu
ZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIENvb3JkaW5h
dGVkIEdyYXBoaWNzOiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgaGFuZGxlcyBhIGNvbXBvc2l0
ZWQgaW1hZ2Ugd2l0aCBUaWxlZEJhY2tpbmdTdG9yZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTAyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBhIHBvdGVudGlhbCBidWcgaW4gR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIuCisgICAgICAgIG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyIG11
c3QgYmUgaW5pdGlhbGllZC4gT3RoZXJ3aXNlIHRoZSBtZW1iZXIncworICAgICAgICB1bmRlZmlu
ZWQgdmFsdWUgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvdXIuCisKKyAgICAgICAgSW4gYWRk
aXRpb24sIGZpeCBzb21lIG5pdHMgaW4gVGlsZWRCYWNraW5nU3RvcmUgYW5kIFRleHR1cmVNYXBw
ZXJMYXllci4KKworICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWU6OnNldFRpbGVkQmFja2luZ1N0b3JlRW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRC
YWNraW5nU3RvcmU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoVGlsZWRCYWNraW5n
U3RvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcjo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1M
YXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJM
YXllci5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpzZXRCYWNraW5n
U3RvcmUpOgorCiAyMDEyLTExLTA2ICBEYW4gQmVhbSAgPGRiZWFtQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBFbmFibGUgUkVRVUVTVF9BVVRPQ09NUExFVEUgZm9yIGNocm9taXVtIHBvcnQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwppbmRleCA1YzEwYTRlNzM3ODExY2E3MjE5ZDRjMDllZDg5MDNhYjI0ZmY4NzUwLi5hZjAw
OWM4OWEyMzE3OTA2OWU2MDkxODJiMzJkYjI4ZmY1OGMxZDg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTQ3IEBACisyMDEyLTExLTA2ICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkx
MDAubmV0PgorCisgICAgICAgIENvb3JkaW5hdGVkIEdyYXBoaWNzOiBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIgaGFuZGxlcyBhIGNvbXBvc2l0ZWQgaW1hZ2Ugd2l0aCBUaWxlZEJhY2tpbmdTdG9y
ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTAy
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJl
bnRseSwgQ29vcmRpbmF0ZWQgR3JhcGhpY3MgaGFzIHNldmVyYWwgcHJvYmxlbXMgaW4gdGVybXMg
b2YgaGFuZGxpbmcgYQorICAgICAgICBjb21wb3NpdGVkIGltYWdlLgorICAgICAgICAxLiBFdmVu
IGlmIGEgY29tcG9zaXRlZCBpbWFnZSBpcyBvZmYgdGhlIHZpZXdwb3J0LCBUZXh0dXJlTWFwcGVy
TGF5ZXIgY2FuIG5vdAorICAgICAgICByZW1vdmUgYW4gaW1hZ2UgdGV4dHVyZS4KKyAgICAgICAg
Mi4gV2UgY2FuIG5vdCBzZW5kIGFuIGltYWdlIHRvIFVJIFByb2Nlc3MgdXNpbmcgR3JhcGhpY3NT
dXJmYWNlLCBiZWNhdXNlCisgICAgICAgIEdyYXBoaWNzU3VyZmFjZSBoYXMgdGhlIHNpemUgbGlt
aXRhdGlvbi4oR0xfTUFYX1RFWFRVUkVfU0laRSkKKyAgICAgICAgMy4gV2UgbXVzdCBhbGxvY2F0
ZSBiaWcgY29udGludW91cyBtZW1vcnkgd2hlbiBhbiBpbWFnZSBpcyBiaWcuCisKKyAgICAgICAg
SWYgd2UgdXNlIFRpbGVkQmFja2luZ1N0b3JlIHRvIGhhbmRsZSBhIGNvbXBvc2l0ZWQgaW1hZ2Us
IHdlIGNhbiBnZXQgZm9sbG93aW5nCisgICAgICAgIGJlbmVmaXRzLgorICAgICAgICAxLiBXaGVu
IGEgY29tcG9zaXRlZCBpbWFnZSBpcyBvZmYgdGhlIHZpZXdwb3J0LCBUZXh0dXJlTWFwcGVyTGF5
ZXIgY2FuIHJlbW92ZSBhbgorICAgICAgICBpbWFnZSB0ZXh0dXJlIHRvIHNhdmUgdGV4dHVyZSBt
ZW1vcnkuIE1vcmVvdmVyLCBpZiB0aGUgaW1hZ2UgaXMgYmlnIGFuZCB0aGUgcGFydAorICAgICAg
ICBpcyBvbiB0aGUgdmlld3BvcnQsIHdlIGNhbiByZW1vdmUgb25seSBpbnZpc2libGUgdGlsZXMs
IG5vdCB0aGUgd2hvbGUgaW1hZ2UuCisgICAgICAgIDIuIFdlIGNhbiB1c2UgR3JhcGhpY3NTdXJm
YWNlIHRvIHNlbmQgYW4gaW1hZ2UgdG8gVUkgUHJvY2Vzcy4KKyAgICAgICAgMy4gV2UgY2FuIHNl
bmQgYSBiaWcgaW1hZ2UgdG8gVUkgUHJvY2VzcyB1c2luZyBtYW55IHNtYWxsIHRpbGVzLgorCisg
ICAgICAgIFdlIGNyZWF0ZSBvbmx5IG9uZSBUaWxlZEJhY2tpbmdTdG9yZSBwZXIgaW1hZ2UgKGUu
Zy4gaW4gdGhlIGxlYXZlcyBkZW1vIHdlIGhhdmUKKyAgICAgICAgb25seSAzIGxlYXZlIFRpbGVk
QmFja2luZ1N0b3JlcykuCisKKyAgICAgICAgSW4gYWRkaXRpb24sIHRoaXMgcGF0Y2ggZml4ZXMg
dGhlIGJ1ZyB0aGF0IENvb3JkaW5hdGVkIEdyYXBoaWNzIG9ubHkgcmVuZGVycyB0aGUKKyAgICAg
ICAgZmlyc3QgZnJhbWUgb2YgYSBnaWYgYW5pbWF0aW9uIGltYWdlLgorCisgICAgICAgICogU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRC5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogU2hhcmVkL1dlYkxheWVyVHJlZUlu
Zm8uaDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJJbmZvOjpXZWJMYXllckluZm8pOgorICAg
ICAgICAoV2ViTGF5ZXJJbmZvKToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpjcmVhdGVUaWxl
Rm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojp1
cGRhdGVUaWxlRm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpyZW1vdmVUaWxlRm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlVGlsZWRDb21wb3NpdGVk
SW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkZXN0
cm95VGlsZWRDb21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29y
ZGluYXRvclByb3h5OjpjcmVhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRlVGlsZUZvckNvbXBvc2l0ZWRJ
bWFnZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnJlbW92
ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29y
ZGluYXRvclByb3h5OjpwdXJnZUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaDoKKyAgICAgICAg
KExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW46CisgICAg
ICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJTdGF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjphc3NpZ25JbWFnZVRvTGF5ZXIpOgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6Omdl
dEJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpjcmVh
dGVUaWxlRm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6cmVt
b3ZlVGlsZUZvckxheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OnVw
ZGF0ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpj
cmVhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRp
bGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxlZENvbXBvc2l0ZWRJ
bWFnZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95VGlsZWRD
b21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6cmVt
b3ZlUmVsZWFzZWRJbWFnZXNJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJl
bmRlcmVyOjpjcmVhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFn
ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpnZXRCYWNraW5nU3RvcmVG
b3JDb21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6
cHVyZ2VHTFJlc291cmNlcyk6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlUmVuZGVyZXIuaDoKKyAgICAgICAgKExheWVyVHJlZVJlbmRlcmVyKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZENvbXBvc2l0ZWRJbWFnZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFdlYktpdDo6Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U6OmdldENvb3JkaW5hdGVkQ29tcG9z
aXRlZEltYWdlSUQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFn
ZTo6Y3JlYXRlKToKKyAgICAgICAgKENvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9yZSk6CisgICAg
ICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlOjpDb29yZGluYXRlZENvbXBv
c2l0ZWRJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdl
Ojp+Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZENvbXBvc2l0ZWRJbWFnZTo6YWRkTGF5ZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpD
b29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6cmVtb3ZlTGF5ZXJDbGllbnQpOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6aW52YWxpZGF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlOjp1cGRhdGUpOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6dmlzaWJsZVJlY3QpOgorICAgICAg
ICAoV2ViS2l0OjpDb21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmU6OkNvbXBvc2l0ZWRUaWxlZEJh
Y2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9y
ZTo6fkNvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBv
c2l0ZWRUaWxlZEJhY2tpbmdTdG9yZTo6dXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9z
aXRlZFRpbGVkQmFja2luZ1N0b3JlOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4pOgorICAg
ICAgICAoV2ViS2l0OjpDb21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmU6OnRpbGVkQmFja2luZ1N0
b3JlUGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmU6
OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGVk
VGlsZWRCYWNraW5nU3RvcmU6OnRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQpOgorICAg
ICAgICAoV2ViS2l0OjpDb21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmU6OnRpbGVkQmFja2luZ1N0
b3JlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRlZFRpbGVkQmFja2lu
Z1N0b3JlOjp0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYktpdDo6
Q29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3JlOjp0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRD
b2xvcik6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9yZTo6YmVn
aW5Db250ZW50VXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRlZFRpbGVkQmFja2lu
Z1N0b3JlOjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRlZFRpbGVkQmFj
a2luZ1N0b3JlOjp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRlZFRpbGVk
QmFja2luZ1N0b3JlOjpyZW1vdmVUaWxlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS5oOiBBZGRlZC4K
KyAgICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgdXNlcyBDb29yZGluYXRlZENvbXBv
c2l0ZWRJbWFnZSB0byBoYW5kbGUgYQorICAgICAgICAgIGNvbXBvc2l0ZWQgaW1hZ2UuIENvb3Jk
aW5hdGVkQ29tcG9zaXRlZEltYWdlIHBsYXlzIGEgcm9sZSBpbiBpbWFnZQorICAgICAgICAgIHJl
c291cmNlIG1hbmFnZW1lbnQ6IHNlbmRpbmcgdGhlIGltYWdlIHRvIFVJIFByb2Nlc3MsIHJlbW92
aW5nIGFuCisgICAgICAgICAgaW52aXNpYmxlIHBhcnQgb2YgdGhlIGltYWdlIGFuZCByZXBhaW50
aW5nIHdoaWxlIGEgZ2lmIGFuaW1hdGlvbgorICAgICAgICAgIHByb2dyZXNzZXMuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChDb29yZGluYXRlZENvbXBv
c2l0ZWRJbWFnZUNsaWVudCk6CisgICAgICAgIChDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUdy
YXBoaWNzTGF5ZXJDbGllbnQpOgorICAgICAgICAoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2Up
OgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6aWQpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OmRpZENoYW5nZUNvbXBvc2l0ZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRlZEltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9y
VGhpc0xheWVyT25seSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OmNvbXBvc2l0ZWRJbWFnZVZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6cmVsZWFzZUNvbXBvc2l0ZWRJbWFnZUlmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlQmFja2luZ1N0
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YmVnaW5D
b250ZW50VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6aGFzUGVuZGluZ1Zpc2libGVDaGFuZ2VzKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
aDoKKyAgICAgICAgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk6CisgICAgICAgIChD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OkxheWVyVHJlZUNvb3JkaW5hdG9yKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdl
cyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjphZG9wdENvbXBvc2l0
ZWRJbWFnZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVD
b29yZGluYXRvcjo6cmVsZWFzZUNvbXBvc2l0ZWRJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUNvb3JkaW5hdG9yOjp1cGRhdGVDb21wb3NpdGVkSW1hZ2VzKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZVRpbGVkQ29tcG9zaXRlZEltYWdlKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRlc3Ryb3lUaWxlZENvbXBv
c2l0ZWRJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVh
dGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OnVwZGF0ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVDb29yZGluYXRvcjo6cmVtb3ZlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpiZWdpbkNvbXBvc2l0ZWRJbWFn
ZVVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllclRy
ZWVDb21wb3NpdGVkSW1hZ2VUaWxlVXBkYXRlc0FsbG93ZWQpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVDb29yZGluYXRvcjo6cmVtb3ZlVXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVDb29yZGluYXRvcjo6cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRv
ci5oOgorICAgICAgICAoTGF5ZXJUcmVlQ29vcmRpbmF0b3IpOgorCiAyMDEyLTExLTA2ICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIEphdmEg
cmVsYXRlZCBXS1NJIGZ1bmN0aW9uIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IGFlOGYz
OTcyYTMxZjhhZWY1OTE0MjRmZGNlYzZkY2VmYzllNGEyY2QuLjg2MjJiMWMzYjRlOTZiMzdmYzY2
MzA3N2NhMTRjYTMyNzgxYjk0Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC04MjYsNyArODI2
LDcgQEAgdm9pZCBGcmFtZTo6c2V0VGlsZWRCYWNraW5nU3RvcmVFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKICAgICB9CiAgICAgaWYgKG1fdGlsZWRCYWNraW5nU3RvcmUpCiAgICAgICAgIHJldHVybjsK
LSAgICBtX3RpbGVkQmFja2luZ1N0b3JlID0gYWRvcHRQdHIobmV3IFRpbGVkQmFja2luZ1N0b3Jl
KHRoaXMpKTsKKyAgICBtX3RpbGVkQmFja2luZ1N0b3JlID0gVGlsZWRCYWNraW5nU3RvcmU6OmNy
ZWF0ZSh0aGlzKTsKICAgICBpZiAobV92aWV3KQogICAgICAgICBtX3ZpZXctPnNldFBhaW50c0Vu
dGlyZUNvbnRlbnRzKHRydWUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwCmluZGV4IGM1NjRkYmVkMDZkOGQ5Mjdh
NzE1ZDIzNmQ3NzQ4ZGU3YWRlMDJjNTkuLjk3YzRhM2VmODhhMWM3NGFlNzA2Y2YzNDI0MGIwOWUw
MzdkZGExNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Rp
bGVkQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAKQEAgLTM1LDYgKzM1LDExIEBAIHN0YXRpYyBJbnRQb2lu
dCBpbm5lckJvdHRvbVJpZ2h0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgcmV0dXJuIEludFBv
aW50KHJlY3QubWF4WCgpIC0gMSwgcmVjdC5tYXhZKCkgLSAxKTsKIH0KIAorUGFzc093blB0cjxU
aWxlZEJhY2tpbmdTdG9yZT4gVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZShUaWxlZEJhY2tpbmdT
dG9yZUNsaWVudCogY2xpZW50LCBQYXNzT3duUHRyPFRpbGVkQmFja2luZ1N0b3JlQmFja2VuZD4g
YmFja2VuZCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRpbGVkQmFja2luZ1N0b3JlKGNs
aWVudCwgYmFja2VuZCkpOworfQorCiBUaWxlZEJhY2tpbmdTdG9yZTo6VGlsZWRCYWNraW5nU3Rv
cmUoVGlsZWRCYWNraW5nU3RvcmVDbGllbnQqIGNsaWVudCwgUGFzc093blB0cjxUaWxlZEJhY2tp
bmdTdG9yZUJhY2tlbmQ+IGJhY2tlbmQpCiAgICAgOiBtX2NsaWVudChjbGllbnQpCiAgICAgLCBt
X2JhY2tlbmQoYmFja2VuZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9UaWxlZEJhY2tpbmdTdG9yZS5oCmluZGV4IGIzYzM2NWMzNTljZTI2MWQ5OWFlYTg0YWQ4
Y2U1NjVjMWNhODdlNGQuLmQ2NGFlMGMwYzQ4NTlkMDg0ODQ3ZTg1MjVkMjg3OGZlYTk1Zjg0OTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2lu
Z1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNr
aW5nU3RvcmUuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC00MSw3ICs0Miw3IEBAIGNsYXNzIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50
OwogY2xhc3MgVGlsZWRCYWNraW5nU3RvcmUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRp
bGVkQmFja2luZ1N0b3JlKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAg
VGlsZWRCYWNraW5nU3RvcmUoVGlsZWRCYWNraW5nU3RvcmVDbGllbnQqLCBQYXNzT3duUHRyPFRp
bGVkQmFja2luZ1N0b3JlQmFja2VuZD4gPSBUaWxlZEJhY2tpbmdTdG9yZUJhY2tlbmQ6OmNyZWF0
ZSgpKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxUaWxlZEJhY2tpbmdTdG9yZT4gY3JlYXRlKFRp
bGVkQmFja2luZ1N0b3JlQ2xpZW50KiwgUGFzc093blB0cjxUaWxlZEJhY2tpbmdTdG9yZUJhY2tl
bmQ+ID0gVGlsZWRCYWNraW5nU3RvcmVCYWNrZW5kOjpjcmVhdGUoKSk7CiAgICAgflRpbGVkQmFj
a2luZ1N0b3JlKCk7CiAKICAgICBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudCogY2xpZW50KCkgeyBy
ZXR1cm4gbV9jbGllbnQ7IH0KQEAgLTgwLDYgKzgxLDggQEAgcHVibGljOgogICAgIGJvb2wgc3Vw
cG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VwcG9ydHNBbHBoYTsgfQogCiBwcml2YXRl
OgorICAgIFRpbGVkQmFja2luZ1N0b3JlKFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50KiwgUGFzc093
blB0cjxUaWxlZEJhY2tpbmdTdG9yZUJhY2tlbmQ+KTsKKwogICAgIHZvaWQgc3RhcnRUaWxlQnVm
ZmVyVXBkYXRlVGltZXIoKTsKICAgICB2b2lkIHN0YXJ0QmFja2luZ1N0b3JlVXBkYXRlVGltZXIo
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggNDE4
OTdjNjNlODE4NWQ5NmU4NTBjM2FiNjIyZmYyMDliZTkxNjZhZS4uZmRkYjc4OTc1NmE0NDVkNzk0
ZTg4Mzg4YWFmYWZmNDZhZWNhNjg3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIuY3BwCkBAIC00NCw2ICs0NCw3IEBAIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4g
R3JhcGhpY3NMYXllcjo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKIEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihHcmFwaGlj
c0xheWVyQ2xpZW50KiBjbGllbnQpCiAgICAgOiBHcmFwaGljc0xheWVyKGNsaWVudCkKICAgICAs
IG1fbGF5ZXIoYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJMYXllcigpKSkKKyAgICAsIG1fY29t
cG9zaXRlZE5hdGl2ZUltYWdlUHRyKDApCiAgICAgLCBtX2NoYW5nZU1hc2soMCkKICAgICAsIG1f
bmVlZHNEaXNwbGF5KGZhbHNlKQogICAgICwgbV9maXhlZFRvVmlld3BvcnQoZmFsc2UpCkBAIC0z
NTEsOCArMzUyLDEwIEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRl
bnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiAgICAgICAgIGlmICghbV9jb21wb3NpdGVkSW1hZ2Up
CiAgICAgICAgICAgICBtX2NvbXBvc2l0ZWRJbWFnZSA9IFRleHR1cmVNYXBwZXJUaWxlZEJhY2tp
bmdTdG9yZTo6Y3JlYXRlKCk7CiAgICAgICAgIG1fY29tcG9zaXRlZEltYWdlLT5zZXRDb250ZW50
c1RvSW1hZ2UoaW1hZ2UpOwotICAgIH0gZWxzZQorICAgIH0gZWxzZSB7CisgICAgICAgIG1fY29t
cG9zaXRlZE5hdGl2ZUltYWdlUHRyID0gMDsKICAgICAgICAgbV9jb21wb3NpdGVkSW1hZ2UgPSAw
OworICAgIH0KIAogICAgIHNldENvbnRlbnRzVG9NZWRpYShtX2NvbXBvc2l0ZWRJbWFnZS5nZXQo
KSk7CiAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6Q29udGVudENoYW5nZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCmluZGV4IDUxMGIyM2Y1YzAy
NDVkZTRjZjJiMDNkMDJiNDNiZWFmMzkyOGI4ZDIuLmU3ZWRkNjI5YzFmMTM1OWE3OGM2ODQyOTcy
NjZiYzUxNzA5NTEzYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5o
CkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb21wb3Np
dGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbXBv
c2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5hbWUo
Y29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3Jt
TGF5ZXIoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBw
bGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c0xheWVyOyB9CiAKICAgICB2
b2lkIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6OkNoYW5nZU1hc2spOwogICAgIGlu
bGluZSBpbnQgY2hhbmdlTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbmdlTWFzazsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJMYXllci5oCmluZGV4IDVjZDk1OWQ2MTNkODM0YTQ5Y2E5NjFlMTczMTk4MTAz
YzRjMmIwNjkuLmQ1YTkyOGIzNjY0OTI3YTYzOWVhYzZjZTQwOWNlYzUyMmYwZDAyZDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckxheWVyLmgKQEAgLTEyOCw3ICsxMjgsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBwYWludCgpOwogCiAgICAgdm9pZCBzZXRTaG91bGRVcGRhdGVCYWNraW5nU3RvcmVGcm9tTGF5
ZXIoYm9vbCBiKSB7IG1fc2hvdWxkVXBkYXRlQmFja2luZ1N0b3JlRnJvbUxheWVyID0gYjsgfQot
ICAgIHZvaWQgc2V0QmFja2luZ1N0b3JlKFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUqIGJhY2tp
bmdTdG9yZSkgeyBtX2JhY2tpbmdTdG9yZSA9IGJhY2tpbmdTdG9yZTsgfQorICAgIHZvaWQgc2V0
QmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4gYmFja2lu
Z1N0b3JlKSB7IG1fYmFja2luZ1N0b3JlID0gYmFja2luZ1N0b3JlOyB9CiAgICAgUGFzc1JlZlB0
cjxUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoKSB7IHJldHVybiBtX2Jh
Y2tpbmdTdG9yZTsgfQogICAgIHZvaWQgY2xlYXJCYWNraW5nU3RvcmVzUmVjdXJzaXZlKCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42OGVlYTY5ZTYyNjU4NmVkNDU3M2NhYzdkNDMzNmU0MjMxNWU0YzM5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRDb21wb3NpdGVkSW1hZ2VJRC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworCisjaWZuZGVmIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSURfaAorI2RlZmluZSBDb29y
ZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEX2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKK25hbWVzcGFjZSBXZWJLaXQgewordHlwZWRlZiB1aW50cHRyX3QgQ29vcmRpbmF0ZWRDb21w
b3NpdGVkSW1hZ2VJRDsKK2VudW0geyBJbnZhbGlkQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJ
RCA9IDAgfTsKK30KKyNlbmRpZgorI2VuZGlmIC8vIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdl
SURfSApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8u
aCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKaW5kZXggNThlMDdi
YzAyN2VmZDVjMWE5NTliM2IwYzYxOGU0YWUwNWNlNzhlOC4uYTQzMTY0MTM0NWIxOTdjNDMzNGQ5
YmJmZjNkYWQxZWQxOWVkZjBmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YkxheWVyVHJlZUluZm8uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVl
SW5mby5oCkBAIC0yNCwxMCArMjQsMTAgQEAKIAogI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5o
IgogI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkQ29t
cG9zaXRlZEltYWdlSUQuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGbG9h
dFNpemUuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVkZSAiU2hhcmVhYmxl
Qml0bWFwLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC0zOSwxMyArMzksMTMgQEAgc3Ry
dWN0IFdlYkxheWVySW5mbyB7CiAgICAgV2ViTGF5ZXJJbmZvKCkKICAgICAgICAgOiByZXBsaWNh
KEludmFsaWRXZWJMYXllcklEKQogICAgICAgICAsIG1hc2soSW52YWxpZFdlYkxheWVySUQpCi0g
ICAgICAgICwgaW1hZ2VCYWNraW5nU3RvcmVJRCgwKQorICAgICAgICAsIGltYWdlSUQoSW52YWxp
ZENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQpCiAgICAgICAgICwgb3BhY2l0eSgwKQogICAg
ICAgICAsIGZsYWdzKDApIHsgfQogCiAgICAgV2ViTGF5ZXJJRCByZXBsaWNhOwogICAgIFdlYkxh
eWVySUQgbWFzazsKLSAgICBpbnQ2NF90IGltYWdlQmFja2luZ1N0b3JlSUQ7CisgICAgQ29vcmRp
bmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCBpbWFnZUlEOwogCiAgICAgV2ViQ29yZTo6RmxvYXRQb2lu
dCBwb3M7CiAgICAgV2ViQ29yZTo6RmxvYXRQb2ludDNEIGFuY2hvclBvaW50OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkK
aW5kZXggYWEyMzc0OGQyN2Y0OTc1ZTZmZjg4NzQ0YWVlZTE1MjRjZWEyOTIxZC4uYTViOTI2Nzk0
MjQ2M2QxMzBlYTBiZGYzNTQ4ZmU4ZjA0ZTgwMWY3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCkBAIC0xMzQsNiAr
MTM0LDcgQEAgSEVBREVSUyArPSBcCiAgICAgU2hhcmVkL1dlYlVSTFJlcXVlc3QuaCBcCiAgICAg
U2hhcmVkL1dlYlVSTFJlc3BvbnNlLmggXAogICAgIFNoYXJlZC9XZWJVc2VyQ29udGVudFVSTFBh
dHRlcm4uaCBcCisgICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRDb21w
b3NpdGVkSW1hZ2VJRC5oIFwKICAgICBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCBcCiAgICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIFwKICAgICBTaGFyZWQvUGx1Z2lucy9OZXRz
Y2FwZS9OZXRzY2FwZVBsdWdpbk1vZHVsZS5oIFwKQEAgLTM2Myw2ICszNjQsNyBAQCBIRUFERVJT
ICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmggXAogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQ
YWdlL0ZpbmRDb250cm9sbGVyLmggXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLmggXAogICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIFwK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRp
bGUuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJU
cmVlQ29vcmRpbmF0b3IuaCBcCkBAIC03MzksNiArNzQxLDcgQEAgU09VUkNFUyArPSBcCiAgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL0VuY29kZXJBZGFwdGVyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5k
Q29udHJvbGxlci5jcHAgXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBcCiAg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxl
LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJU
cmVlQ29vcmRpbmF0b3IuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eS5jcHAKaW5kZXggNGQ0M2ZlYjgxNzAwZTk1NzljYzc2NmVlYTczN2ZhOGM3NjUw
M2Q1Ni4uOTEwZTQzMTZiZGYyMjg5NTc5MzE0MTY0NWUzNjQ0NDFiZTNkYjVjYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTU4LDcgKzU4
LDcgQEAgdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkaXNwYXRjaFVwZGF0ZShjb25z
dCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKIAogdm9pZCBMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0
IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8mIHVw
ZGF0ZUluZm8pCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6
OmNyZWF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwgdXBkYXRlSW5m
by5zY2FsZUZhY3RvcikpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRl
cmVyOjpjcmVhdGVUaWxlRm9yTGF5ZXIsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJ
RCwgdXBkYXRlSW5mby5zY2FsZUZhY3RvcikpOwogICAgIHVwZGF0ZVRpbGVGb3JMYXllcihsYXll
cklELCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pOwogfQogCkBAIC02NiwxMiArNjYs
NDAgQEAgdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIo
aW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnMKIHsKICAgICBTdXJmYWNlTWFwOjppdGVyYXRv
ciBpdCA9IG1fc3VyZmFjZXMuZmluZCh1cGRhdGVJbmZvLmF0bGFzSUQpOwogICAgIEFTU0VSVChp
dCAhPSBtX3N1cmZhY2VzLmVuZCgpKTsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRy
ZWVSZW5kZXJlcjo6dXBkYXRlVGlsZSwgbV9yZW5kZXJlci5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlE
LCBMYXllclRyZWVSZW5kZXJlcjo6VGlsZVVwZGF0ZSh1cGRhdGVJbmZvLnVwZGF0ZVJlY3QsIHRh
cmdldFJlY3QsIGl0LT52YWx1ZSwgdXBkYXRlSW5mby5zdXJmYWNlT2Zmc2V0KSkpOworICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxlRm9yTGF5ZXIs
IG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwgTGF5ZXJUcmVlUmVuZGVyZXI6OlRp
bGVVcGRhdGUodXBkYXRlSW5mby51cGRhdGVSZWN0LCB0YXJnZXRSZWN0LCBpdC0+dmFsdWUsIHVw
ZGF0ZUluZm8uc3VyZmFjZU9mZnNldCkpKTsKIH0KIAogdm9pZCBMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpyZW1vdmVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQpCiB7Ci0g
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRpbGUsIG1f
cmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJp
bmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxlRm9yTGF5ZXIsIG1fcmVuZGVyZXIuZ2V0
KCksIGxheWVySUQsIHRpbGVJRCkpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHk6OmNyZWF0ZVRpbGVkQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdl
SUQgaW1hZ2VJRCkKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJl
cjo6Y3JlYXRlVGlsZWRDb21wb3NpdGVkSW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGltYWdlSUQp
KTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkZXN0cm95VGlsZWRDb21w
b3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCBpbWFnZUlEKQoreworICAg
IGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95VGlsZWRDb21w
b3NpdGVkSW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGltYWdlSUQpKTsKK30KKwordm9pZCBMYXll
clRyZWVDb29yZGluYXRvclByb3h5OjpjcmVhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKENvb3Jk
aW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgaW1hZ2VJRCwgaW50IHRpbGVJRCwgY29uc3QgSW50UmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5m
bykKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRl
VGlsZUZvckNvbXBvc2l0ZWRJbWFnZSwgbV9yZW5kZXJlci5nZXQoKSwgaW1hZ2VJRCwgdGlsZUlE
LCB1cGRhdGVJbmZvLnNjYWxlRmFjdG9yKSk7CisgICAgdXBkYXRlVGlsZUZvckNvbXBvc2l0ZWRJ
bWFnZShpbWFnZUlELCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pOworfQorCit2b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnVwZGF0ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2Uo
Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCBpbWFnZUlELCBpbnQgdGlsZUlELCBjb25zdCBJ
bnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRh
dGVJbmZvKQoreworICAgIFN1cmZhY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlcy5maW5k
KHVwZGF0ZUluZm8uYXRsYXNJRCk7CisgICAgQVNTRVJUKGl0ICE9IG1fc3VyZmFjZXMuZW5kKCkp
OworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxl
Rm9yQ29tcG9zaXRlZEltYWdlLCBtX3JlbmRlcmVyLmdldCgpLCBpbWFnZUlELCB0aWxlSUQsIExh
eWVyVHJlZVJlbmRlcmVyOjpUaWxlVXBkYXRlKHVwZGF0ZUluZm8udXBkYXRlUmVjdCwgdGFyZ2V0
UmVjdCwgaXQtPnZhbHVlLCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpKSk7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6cmVtb3ZlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShD
b29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEIGltYWdlSUQsIGludCB0aWxlSUQpCit7CisgICAg
ZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRpbGVGb3JDb21w
b3NpdGVkSW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGltYWdlSUQsIHRpbGVJRCkpOwogfQogCiB2
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmNyZWF0ZVVwZGF0ZUF0bGFzKGludCBhdGxh
c0lELCBjb25zdCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKQEAgLTEyNywxNyAr
MTU1LDYgQEAgdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkaWRSZW5kZXJGcmFtZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1MKICNlbmRpZgogfQogCi12b2lkIExheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OmNyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0
X3Qga2V5LCBjb25zdCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUpCi17
Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpj
cmVhdGUoaGFuZGxlKTsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJl
cjo6Y3JlYXRlSW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGtleSwgYml0bWFwKSk7Ci19Ci0KLXZv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6ZGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZElt
YWdlKGludDY0X3Qga2V5KQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJl
bmRlcmVyOjpkZXN0cm95SW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGtleSkpOwotfQotCiB2b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldENvbnRlbnRzU2l6ZShjb25zdCBGbG9hdFNp
emUmIGNvbnRlbnRzU2l6ZSkKIHsKICAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVS
ZW5kZXJlcjo6c2V0Q29udGVudHNTaXplLCBtX3JlbmRlcmVyLmdldCgpLCBjb250ZW50c1NpemUp
KTsKQEAgLTIwMSw2ICsyMTgsOSBAQCB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnN5
bmNDYW52YXModWludDMyX3QgaWQsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpegogCiB2b2lkIExh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnB1cmdlQmFja2luZ1N0b3JlcygpCiB7CisgICAgLy8g
V2UgZG9uJ3QgZXhwZWN0IHRvIHJlY2VpdmUgdGhlIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gcmVsZWFz
aW5nIHJlc291cmNlcyBmcm9tIFdlYiBQcm9jZXNzIGFmdGVyIHNlbmRpbmcgdGhlIFB1cmdlQmFj
a2luZ1N0b3JlcyBtZXNzYWdlLgorICAgIC8vIFNlZSBMYXllclRyZWVSZW5kZXJlcjo6cHVyZ2VH
TFJlc291cmNlcygpCisgICAgbV9zdXJmYWNlcy5jbGVhcigpOwogICAgIG1fZHJhd2luZ0FyZWFQ
cm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5h
dG9yOjpQdXJnZUJhY2tpbmdTdG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBh
Z2VJRCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eS5oCmluZGV4IDY0NjgwMTE2OGYyNGE3ODliN2ViODA3MWNmNGI2ZjhhNGM0ZmI5N2EuLmE3YzU2
MzlmNTNhMjNkOGY2ZTg3N2FhMDgwOGI1N2IxMGJjZTU0Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmgKQEAgLTIzLDYgKzIzLDcgQEAKICNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCiAKICNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKKyNpbmNs
dWRlICJDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0
ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5o
IgogI2luY2x1ZGUgIlJlZ2lvbi5oIgpAQCAtNjUsMTAgKzY2LDEzIEBAIHB1YmxpYzoKICAgICB2
b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJik7CiAgICAgdm9pZCB1cGRh
dGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpOwogICAgIHZvaWQgcmVtb3ZlVGlsZUZv
ckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKTsKKyAgICB2b2lkIGNyZWF0ZVRpbGVkQ29t
cG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQpOworICAgIHZvaWQgZGVz
dHJveVRpbGVkQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQpOwor
ICAgIHZvaWQgY3JlYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0
ZWRJbWFnZUlELCBpbnQgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgU3Vy
ZmFjZVVwZGF0ZUluZm8mKTsKKyAgICB2b2lkIHVwZGF0ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2Uo
Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJik7CisgICAgdm9pZCByZW1vdmVUaWxl
Rm9yQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQsIGludCB0aWxl
SUQpOwogICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQsIGNvbnN0IFNoYXJl
YWJsZVN1cmZhY2U6OkhhbmRsZSYpOwogICAgIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXMoaW50IGF0
bGFzSUQpOwotICAgIHZvaWQgY3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCwg
Y29uc3QgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYpOwotICAgIHZvaWQgZGVzdHJv
eURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3QpOwogICAgIHZvaWQgZGlkUmVjZWl2ZUxh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3Jl
SVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJik7CiAgICAgdm9pZCB1cGRh
dGVWaWV3cG9ydCgpOwogICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29y
ZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgppbmRl
eCBiYTg4ZGU1M2ZmMzNlNDVmMWQwODhhM2QyMDU1NzBhNDBmZDRiNTY3Li5jZTMzZTU4MzE4YjQx
OTc1NDNiNjVjYzFhMDc3N2ZjMThlMDUzMmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1l
c3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4KQEAgLTI5LDEwICsyOSwx
MyBAQCBtZXNzYWdlcyAtPiBMYXllclRyZWVDb29yZGluYXRvclByb3h5IHsKICAgICBDcmVhdGVU
aWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgaW50IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVj
dCB0YXJnZXRSZWN0LCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCiAgICAg
VXBkYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0aWxlSUQsIFdlYkNvcmU6
OkludFJlY3QgdGFyZ2V0UmVjdCwgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZv
KQogICAgIFJlbW92ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlEKQor
ICAgIENyZWF0ZVRpbGVkQ29tcG9zaXRlZEltYWdlKHVpbnRwdHJfdCBpbWFnZUlEKQorICAgIERl
c3Ryb3lUaWxlZENvbXBvc2l0ZWRJbWFnZSh1aW50cHRyX3QgaW1hZ2VJRCkKKyAgICBDcmVhdGVU
aWxlRm9yQ29tcG9zaXRlZEltYWdlKHVpbnRwdHJfdCBpbWFnZUlELCBpbnQgdGlsZUlELCBXZWJD
b3JlOjpJbnRSZWN0IHRhcmdldFJlY3QsIFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRl
SW5mbykKKyAgICBVcGRhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKHVpbnRwdHJfdCBpbWFnZUlE
LCBpbnQgdGlsZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRhcmdldFJlY3QsIFdlYktpdDo6U3VyZmFj
ZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKKyAgICBSZW1vdmVUaWxlRm9yQ29tcG9zaXRlZEltYWdl
KHVpbnRwdHJfdCBpbWFnZUlELCBpbnQgdGlsZUlEKQogICAgIENyZWF0ZVVwZGF0ZUF0bGFzKGlu
dCBhdGxhc0lELCBXZWJLaXQ6OlNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSBoYW5kbGUpCiAgICAg
UmVtb3ZlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQpCi0gICAgQ3JlYXRlRGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2UoaW50NjRfdCBrZXksIFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFu
ZGxlKQotICAgIERlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSkKICAg
ICBEaWRSZW5kZXJGcmFtZShXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6ZSwgV2ViQ29yZTo6
SW50UmVjdCBjb3ZlcmVkUmVjdCkKICAgICBEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihXZWJDb3Jl
OjpJbnRQb2ludCBwb3NpdGlvbikKICAgICBTZXRMYXllckFuaW1hdGlvbnModWludDMyX3QgaWQs
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGFuaW1hdGlvbnMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVS
ZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVSZW5kZXJlci5jcHAKaW5kZXggYmQ5MmY3MjQ5MzE0ZTdkMmFhNjllZGRkMzY5
Njk4Yjk3MjdlOTQzMy4uODQyZTdlNDk2ZWM4YjdlOTk0ZTQ4NDFmMTY4ZjFjYWUxZTFmM2IxZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlUmVuZGVyZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcApAQCAtMjcsNyArMjcsNiBAQAog
I2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eS5oIgogI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgotI2luY2x1ZGUg
IlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdM
LmgiCkBAIC0zMDEsNyArMzAwLDcgQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJT
dGF0ZShXZWJMYXllcklEIGlkLCBjb25zdCBXZWJMYXllckluZm8mIGxheWVySW4KICAgICBlbHNl
CiAgICAgICAgIG1fZml4ZWRMYXllcnMucmVtb3ZlKGlkKTsKIAotICAgIGFzc2lnbkltYWdlVG9M
YXllcihsYXllciwgbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOworICAgIGFzc2lnbklt
YWdlVG9MYXllcihsYXllciwgbGF5ZXJJbmZvLmltYWdlSUQpOwogCiAgICAgLy8gTmV2ZXIgbWFr
ZSB0aGUgcm9vdCBsYXllciBjbGlwLgogICAgIGxheWVyLT5zZXRNYXNrc1RvQm91bmRzKGxheWVy
SW5mby5pc1Jvb3RMYXllciA/IGZhbHNlIDogbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMpOwpAQCAt
MzU0LDU5ICszNTMsMTA1IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNldFJvb3RMYXllcklE
KFdlYkxheWVySUQgbGF5ZXJJRCkKICAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIpOwog
fQogCi1QYXNzUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBMYXllclRyZWVSZW5kZXJl
cjo6Z2V0QmFja2luZ1N0b3JlKFdlYkxheWVySUQgaWQpCit2b2lkIExheWVyVHJlZVJlbmRlcmVy
Ojphc3NpZ25JbWFnZVRvTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIsIENvb3JkaW5hdGVkQ29t
cG9zaXRlZEltYWdlSUQgaW1hZ2VJRCkKK3sKKyAgICByZW1vdmVSZWxlYXNlZEltYWdlc0lmTmVl
ZGVkKCk7CisKKyAgICBpZiAoSW52YWxpZENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgPT0g
aW1hZ2VJRCkgeworICAgICAgICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKDApOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIFRpbGVkQ29tcG9zaXRlZEltYWdlTWFwOjppdGVyYXRvciBp
dCA9IG1fdGlsZWRDb21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1hZ2VJRCk7CisgICAgQVNTRVJUKGl0
ICE9IG1fdGlsZWRDb21wb3NpdGVkSW1hZ2VzLmVuZCgpKTsKKyAgICBsYXllci0+c2V0Q29udGVu
dHNUb01lZGlhKGl0LT52YWx1ZS5nZXQoKSk7Cit9CisKK0Nvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
KiBMYXllclRyZWVSZW5kZXJlcjo6Z2V0QmFja2luZ1N0b3JlKFdlYkxheWVySUQgaWQpCiB7CiAg
ICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKGxheWVy
QnlJRChpZCkpOwogICAgIEFTU0VSVChsYXllcik7CiAgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBzdGF0aWNfY2FzdDxDb29yZGluYXRlZEJhY2tpbmdT
dG9yZSo+KGxheWVyLT5iYWNraW5nU3RvcmUoKS5nZXQoKSk7CiAgICAgaWYgKCFiYWNraW5nU3Rv
cmUpIHsKICAgICAgICAgYmFja2luZ1N0b3JlID0gQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNy
ZWF0ZSgpOwotICAgICAgICBsYXllci0+c2V0QmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZS5nZXQo
KSk7CisgICAgICAgIGxheWVyLT5zZXRCYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKTsKICAgICB9
CiAgICAgQVNTRVJUKGJhY2tpbmdTdG9yZSk7Ci0gICAgcmV0dXJuIGJhY2tpbmdTdG9yZTsKKyAg
ICByZXR1cm4gYmFja2luZ1N0b3JlLmdldCgpOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVy
OjpjcmVhdGVUaWxlRm9yTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBmbG9h
dCBzY2FsZSkKK3sKKyAgICBjcmVhdGVUaWxlKGdldEJhY2tpbmdTdG9yZShsYXllcklEKSwgdGls
ZUlELCBzY2FsZSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRpbGVGb3JM
YXllcihXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQpCit7CisgICAgcmVtb3ZlVGlsZShn
ZXRCYWNraW5nU3RvcmUobGF5ZXJJRCksIHRpbGVJRCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVu
ZGVyZXI6OnVwZGF0ZVRpbGVGb3JMYXllcihXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQs
IGNvbnN0IFRpbGVVcGRhdGUmIHVwZGF0ZSkKK3sKKyAgICB1cGRhdGVUaWxlKGdldEJhY2tpbmdT
dG9yZShsYXllcklEKSwgdGlsZUlELCB1cGRhdGUpOwogfQogCi12b2lkIExheWVyVHJlZVJlbmRl
cmVyOjpjcmVhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgZmxvYXQgc2Nh
bGUpCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxlKENvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlKiBiYWNraW5nU3RvcmUsIGludCB0aWxlSUQsIGZsb2F0IHNjYWxlKQogewotICAgIGdl
dEJhY2tpbmdTdG9yZShsYXllcklEKS0+Y3JlYXRlVGlsZSh0aWxlSUQsIHNjYWxlKTsKKyAgICBi
YWNraW5nU3RvcmUtPmNyZWF0ZVRpbGUodGlsZUlELCBzY2FsZSk7CiB9CiAKLXZvaWQgTGF5ZXJU
cmVlUmVuZGVyZXI6OnJlbW92ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlEKQor
dm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlVGlsZShDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZSogYmFja2luZ1N0b3JlLCBpbnQgdGlsZUlEKQogewotICAgIGdldEJhY2tpbmdTdG9yZShsYXll
cklEKS0+cmVtb3ZlVGlsZSh0aWxlSUQpOworICAgIGJhY2tpbmdTdG9yZS0+cmVtb3ZlVGlsZSh0
aWxlSUQpOwogfQogCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxlKFdlYkxheWVy
SUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgVGlsZVVwZGF0ZSYgdXBkYXRlKQordm9pZCBM
YXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZShDb29yZGluYXRlZEJhY2tpbmdTdG9yZSogcmF3
QmFja2luZ1N0b3JlLCBpbnQgdGlsZUlELCBjb25zdCBUaWxlVXBkYXRlJiB1cGRhdGUpCiB7Ci0g
ICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBnZXRCYWNr
aW5nU3RvcmUobGF5ZXJJRCk7CisgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBi
YWNraW5nU3RvcmUgPSByYXdCYWNraW5nU3RvcmU7CiAgICAgYmFja2luZ1N0b3JlLT51cGRhdGVU
aWxlKHRpbGVJRCwgdXBkYXRlLnNvdXJjZVJlY3QsIHVwZGF0ZS50YXJnZXRSZWN0LCB1cGRhdGUu
c3VyZmFjZSwgdXBkYXRlLm9mZnNldCk7CiAgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdC
dWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOwogfQogCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpj
cmVhdGVJbWFnZShpbnQ2NF90IGltYWdlSUQsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiB3
ZWFrQml0bWFwKQordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlVGlsZWRDb21wb3NpdGVk
SW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCBpbWFnZUlEKQogewotICAgIFJlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IHdlYWtCaXRtYXA7Ci0gICAgUmVmUHRyPFRleHR1
cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gVGV4dHVyZU1hcHBlclRp
bGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKLSAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdl
cy5zZXQoaW1hZ2VJRCwgYmFja2luZ1N0b3JlKTsKLSAgICBiYWNraW5nU3RvcmUtPnVwZGF0ZUNv
bnRlbnRzKG1fdGV4dHVyZU1hcHBlci5nZXQoKSwgYml0bWFwLT5jcmVhdGVJbWFnZSgpLmdldCgp
LCBCaXRtYXBUZXh0dXJlOjpVcGRhdGVDYW5ub3RNb2RpZnlPcmlnaW5hbEltYWdlRGF0YSk7Cisg
ICAgQVNTRVJUKCFtX3RpbGVkQ29tcG9zaXRlZEltYWdlcy5jb250YWlucyhpbWFnZUlEKSk7Cisg
ICAgbV90aWxlZENvbXBvc2l0ZWRJbWFnZXMuYWRkKGltYWdlSUQsIENvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlOjpjcmVhdGUoKSk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmRlc3Ryb3lJ
bWFnZShpbnQ2NF90IGltYWdlSUQpCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95VGls
ZWRDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCBpbWFnZUlEKQog
ewotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnJlbW92ZShpbWFnZUlEKTsKKyAgICBB
U1NFUlQobV90aWxlZENvbXBvc2l0ZWRJbWFnZXMuY29udGFpbnMoaW1hZ2VJRCkpOworICAgIC8v
IFdlIGRvbid0IHdhbnQgVGV4dHVyZU1hcHBlckxheWVyIHJlZmVycyBhIGRhbmdsaW5nIHBvaW50
ZXIuCisgICAgbV9yZWxlYXNlZEltYWdlSURzLmFwcGVuZChpbWFnZUlEKTsKIH0KIAotdm9pZCBM
YXllclRyZWVSZW5kZXJlcjo6YXNzaWduSW1hZ2VUb0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVy
LCBpbnQ2NF90IGltYWdlSUQpCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVSZWxlYXNl
ZEltYWdlc0lmTmVlZGVkKCkKIHsKLSAgICBpZiAoIWltYWdlSUQpIHsKLSAgICAgICAgbGF5ZXIt
PnNldENvbnRlbnRzVG9NZWRpYSgwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fcmVsZWFzZWRJbWFnZUlEcy5zaXplKCk7ICsraSkKKyAgICAg
ICAgbV90aWxlZENvbXBvc2l0ZWRJbWFnZXMucmVtb3ZlKG1fcmVsZWFzZWRJbWFnZUlEc1tpXSk7
CisgICAgbV9yZWxlYXNlZEltYWdlSURzLmNsZWFyKCk7Cit9CiAKLSAgICBIYXNoTWFwPGludDY0
X3QsIFJlZlB0cjxUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBpdCA9IG1f
ZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1hZ2VJRCk7Ci0gICAgQVNTRVJUKGl0ICE9
IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmVuZCgpKTsKLSAgICBsYXllci0+c2V0Q29udGVu
dHNUb01lZGlhKGl0LT52YWx1ZS5nZXQoKSk7Cit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjcmVh
dGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgaW1h
Z2VJRCwgaW50IHRpbGVJRCwgZmxvYXQgc2NhbGUpCit7CisgICAgY3JlYXRlVGlsZShnZXRCYWNr
aW5nU3RvcmVGb3JDb21wb3NpdGVkSW1hZ2UoaW1hZ2VJRCksIHRpbGVJRCwgc2NhbGUpOworfQor
Cit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKENv
b3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgaW1hZ2VJRCwgaW50IHRpbGVJRCkKK3sKKyAgICBy
ZW1vdmVUaWxlKGdldEJhY2tpbmdTdG9yZUZvckNvbXBvc2l0ZWRJbWFnZShpbWFnZUlEKSwgdGls
ZUlEKTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZUZvckNvbXBvc2l0
ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEIGltYWdlSUQsIGludCB0aWxlSUQs
IGNvbnN0IFRpbGVVcGRhdGUmIHVwZGF0ZSkKK3sKKyAgICB1cGRhdGVUaWxlKGdldEJhY2tpbmdT
dG9yZUZvckNvbXBvc2l0ZWRJbWFnZShpbWFnZUlEKSwgdGlsZUlELCB1cGRhdGUpOworfQorCitD
b29yZGluYXRlZEJhY2tpbmdTdG9yZSogTGF5ZXJUcmVlUmVuZGVyZXI6OmdldEJhY2tpbmdTdG9y
ZUZvckNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEIGltYWdlSUQp
Cit7CisgICAgQVNTRVJUKG1fdGlsZWRDb21wb3NpdGVkSW1hZ2VzLmNvbnRhaW5zKGltYWdlSUQp
KTsKKyAgICBUaWxlZENvbXBvc2l0ZWRJbWFnZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVkQ29t
cG9zaXRlZEltYWdlcy5maW5kKGltYWdlSUQpOworICAgIEFTU0VSVChpdC0+dmFsdWUuZ2V0KCkp
OworICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlUmVuZGVy
ZXI6OmNvbW1pdFRpbGVPcGVyYXRpb25zKCkKQEAgLTQ4Myw3ICs1MjgsNyBAQCB2b2lkIExheWVy
VHJlZVJlbmRlcmVyOjpwdXJnZUdMUmVzb3VyY2VzKCkKICAgICBpZiAobGF5ZXIpCiAgICAgICAg
IGxheWVyLT5jbGVhckJhY2tpbmdTdG9yZXNSZWN1cnNpdmUoKTsKIAotICAgIG1fZGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2VzLmNsZWFyKCk7CisgICAgbV90aWxlZENvbXBvc2l0ZWRJbWFnZXMuY2xl
YXIoKTsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKICAgICBtX3N1cmZhY2VCYWNraW5nU3Rv
cmVzLmNsZWFyKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oCmluZGV4
IGViZTRjYTM5MTUxYzcyMzA1NTQ0YjQwZTZkM2NiNzg5MTJjMTQxMGMuLjA2MTgwZTQzOTMyOGFj
Zjc1OWUzNzZlNzdkMDNjZGNhMDg3OGFmOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVy
ZXIuaApAQCAtMjIsNiArMjIsNyBAQAogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQog
I2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkQ29tcG9zaXRl
ZEltYWdlSUQuaCIKICNpbmNsdWRlICJTaGFyZWFibGVTdXJmYWNlLmgiCiAjaW5jbHVkZSAiVGV4
dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKQEAg
LTg1LDEyICs4NiwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRMYXllckZpbHRlcnMoV2ViTGF5
ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOwogI2VuZGlmCiAKLSAgICB2
b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50LCBmbG9hdCBzY2FsZSk7Ci0gICAgdm9pZCBy
ZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCk7Ci0gICAgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVy
SUQsIGludCwgY29uc3QgVGlsZVVwZGF0ZSYpOworICAgIHZvaWQgY3JlYXRlVGlsZUZvckxheWVy
KFdlYkxheWVySUQsIGludCwgZmxvYXQgc2NhbGUpOworICAgIHZvaWQgcmVtb3ZlVGlsZUZvckxh
eWVyKFdlYkxheWVySUQsIGludCk7CisgICAgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoV2ViTGF5
ZXJJRCwgaW50LCBjb25zdCBUaWxlVXBkYXRlJik7CisgICAgdm9pZCBjcmVhdGVUaWxlZENvbXBv
c2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEKTsKKyAgICB2b2lkIGRlc3Ry
b3lUaWxlZENvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEKTsKKyAg
ICB2b2lkIGNyZWF0ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVk
SW1hZ2VJRCwgaW50LCBmbG9hdCBzY2FsZSk7CisgICAgdm9pZCByZW1vdmVUaWxlRm9yQ29tcG9z
aXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQsIGludCk7CisgICAgdm9pZCB1
cGRhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQs
IGludCwgY29uc3QgVGlsZVVwZGF0ZSYpOwogICAgIHZvaWQgZmx1c2hMYXllckNoYW5nZXMoKTsK
LSAgICB2b2lkIGNyZWF0ZUltYWdlKGludDY0X3QsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFw
Pik7Ci0gICAgdm9pZCBkZXN0cm95SW1hZ2UoaW50NjRfdCk7CiAgICAgdm9pZCBzZXRMYXllckFu
aW1hdGlvbnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlv
bnMmKTsKICAgICB2b2lkIHNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCk7CiAKQEAgLTExMywxMyAr
MTE3LDIxIEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaXNwYXRjaE9uTWFpblRocmVhZChjb25zdCBG
dW5jdGlvbjx2b2lkKCk+Jik7CiAgICAgdm9pZCBhZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJz
KCk7CiAKLSAgICB2b2lkIGFzc2lnbkltYWdlVG9MYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVy
KiwgaW50NjRfdCBpbWFnZUlEKTsKKyAgICB2b2lkIGFzc2lnbkltYWdlVG9MYXllcihXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKiwgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCk7CisgICAgdm9p
ZCByZW1vdmVSZWxlYXNlZEltYWdlc0lmTmVlZGVkKCk7CiAgICAgdm9pZCBlbnN1cmVSb290TGF5
ZXIoKTsKICAgICB2b2lkIGVuc3VyZUxheWVyKFdlYkxheWVySUQpOwogICAgIHZvaWQgY29tbWl0
VGlsZU9wZXJhdGlvbnMoKTsKICAgICB2b2lkIHJlbmRlck5leHRGcmFtZSgpOwogICAgIHZvaWQg
cHVyZ2VCYWNraW5nU3RvcmVzKCk7CiAKKyAgICB2b2lkIGNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRC
YWNraW5nU3RvcmUqLCBpbnQsIGZsb2F0IHNjYWxlKTsKKyAgICB2b2lkIHJlbW92ZVRpbGUoQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmUqLCBpbnQpOworICAgIHZvaWQgdXBkYXRlVGlsZShDb29yZGlu
YXRlZEJhY2tpbmdTdG9yZSosIGludCwgY29uc3QgVGlsZVVwZGF0ZSYpOworCisgICAgQ29vcmRp
bmF0ZWRCYWNraW5nU3RvcmUqIGdldEJhY2tpbmdTdG9yZShXZWJMYXllcklEKTsKKyAgICBDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZSogZ2V0QmFja2luZ1N0b3JlRm9yQ29tcG9zaXRlZEltYWdlKENv
b3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQpOworCiAgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkxh
eWVySUQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqPiBMYXllck1hcDsKICAgICBXZWJDb3JlOjpG
bG9hdFNpemUgbV9jb250ZW50c1NpemU7CiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fdmlzaWJs
ZUNvbnRlbnRzUmVjdDsKQEAgLTEyOCwxMiArMTQwLDE0IEBAIHByaXZhdGU6CiAgICAgVmVjdG9y
PEZ1bmN0aW9uPHZvaWQoKT4gPiBtX3JlbmRlclF1ZXVlOwogICAgIE11dGV4IG1fcmVuZGVyUXVl
dWVNdXRleDsKIAotI2lmIFVTRShURVhUVVJFX01BUFBFUikKICAgICBPd25QdHI8V2ViQ29yZTo6
VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOwotICAgIFBhc3NSZWZQdHI8Q29vcmRpbmF0
ZWRCYWNraW5nU3RvcmU+IGdldEJhY2tpbmdTdG9yZShXZWJMYXllcklEKTsKLSAgICBIYXNoTWFw
PGludDY0X3QsIFJlZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiA+IG1f
ZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzOworCisgICAgdHlwZWRlZiBIYXNoTWFwPENvb3JkaW5h
dGVkQ29tcG9zaXRlZEltYWdlSUQsIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPiBU
aWxlZENvbXBvc2l0ZWRJbWFnZU1hcDsKKyAgICBUaWxlZENvbXBvc2l0ZWRJbWFnZU1hcCBtX3Rp
bGVkQ29tcG9zaXRlZEltYWdlczsKKyAgICBWZWN0b3I8Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1h
Z2VJRD4gbV9yZWxlYXNlZEltYWdlSURzOworCiAgICAgSGFzaFNldDxSZWZQdHI8Q29vcmRpbmF0
ZWRCYWNraW5nU3RvcmU+ID4gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzOwotI2Vu
ZGlmCisKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKICAgICB0eXBlZGVmIEhhc2hNYXA8V2Vi
TGF5ZXJJRCwgUmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3Jl
PiA+IFN1cmZhY2VCYWNraW5nU3RvcmVNYXA7CiAgICAgU3VyZmFjZUJhY2tpbmdTdG9yZU1hcCBt
X3N1cmZhY2VCYWNraW5nU3RvcmVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1h
Z2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0NWM4NjAw
NzIyODlhNDI2MGY4YWY0NTVkZTAwN2UxMzAwOTc2YTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZENvbXBvc2l0ZWRJbWFnZS5jcHAKQEAgLTAsMCArMSwyMjggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorI2luY2x1ZGUgIkNvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLmgiCisKKyNpbmNsdWRlICJD
b29yZGluYXRlZFRpbGUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJSZWdpb24uaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIlRp
bGVkQmFja2luZ1N0b3JlQ2xpZW50LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCBDb29yZGlu
YXRlZENvbXBvc2l0ZWRJbWFnZTo6Z2V0Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRChJbWFn
ZSogaW1hZ2UpCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29vcmRpbmF0ZWRDb21w
b3NpdGVkSW1hZ2VJRD4oaW1hZ2UpOworfQorCitQYXNzUmVmUHRyPENvb3JkaW5hdGVkQ29tcG9z
aXRlZEltYWdlPiBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6Y3JlYXRlKENvb3JkaW5hdGVk
Q29tcG9zaXRlZEltYWdlQ2xpZW50KiBjbGllbnQsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UoY2xp
ZW50LCBpbWFnZSkpOworfQorCitjbGFzcyBDb21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmUgOiBw
dWJsaWMgVGlsZWRCYWNraW5nU3RvcmVDbGllbnQsIHB1YmxpYyBDb29yZGluYXRlZFRpbGVDbGll
bnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9y
ZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
Q29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3JlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlKik7
CisgICAgdmlydHVhbCB+Q29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3JlKCk7CisKKyAgICB2b2lk
IHVwZGF0ZShib29sIGludmFsaWRhdGVkKTsKKworcHJpdmF0ZToKKyAgICAvLyBUaWxlZEJhY2tp
bmdTdG9yZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVn
aW4oKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludChH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWlu
dGVkQXJlYSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHRpbGVkQmFja2luZ1N0b3JlVXBk
YXRlc0FsbG93ZWQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRC
YWNraW5nU3RvcmVDb250ZW50c1JlY3QoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEludFJlY3Qg
dGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgQ29s
b3IgdGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCBPVkVSUklERTsKKwor
ICAgIC8vIENvb3JkaW5hdGVkVGlsZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxl
KGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgSW50UmVjdCYpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFN1
cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVUaWxlKGludCB0aWxlSUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgUGFzc093
blB0cjxHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBJbnRTaXplJiwg
aW50JiBhdGxhc0lELCBJbnRQb2ludCYpIE9WRVJSSURFOworCisgICAgQ29vcmRpbmF0ZWRDb21w
b3NpdGVkSW1hZ2UqIG1fb3duZXI7CisgICAgT3duUHRyPFRpbGVkQmFja2luZ1N0b3JlPiBtX3Rp
bGVkQmFja2luZ1N0b3JlOworCisgICAgYm9vbCBtX2luVXBkYXRlTW9kZTsKK307CisKK0Nvb3Jk
aW5hdGVkQ29tcG9zaXRlZEltYWdlOjpDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZShDb29yZGlu
YXRlZENvbXBvc2l0ZWRJbWFnZUNsaWVudCogY2xpZW50LCBQYXNzUmVmUHRyPEltYWdlPiBpbWFn
ZSkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1faW1hZ2UoaW1hZ2UpCisgICAgLCBt
X2lkKGdldENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQobV9pbWFnZS5nZXQoKSkpCisgICAg
LCBtX2RpZEludmFsaWRhdGUoZmFsc2UpCit7CisgICAgbV9iYWNraW5nU3RvcmUgPSBhZG9wdFB0
cihuZXcgQ29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3JlKHRoaXMpKTsKKworICAgIC8vIEZJWE1F
OiBXZSB3b3VsZCBuZWVkIHRvIGRlY29kZSBhIHNtYWxsIGltYWdlIGRpcmVjdGx5IGludG8gYSBH
cmFwaGljc1N1cmZhY2UuCisgICAgLy8gaHR0cDovL3dlYmtpdC5vcmcvYi8xMDE0MjYKK30KKwor
Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U6On5Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZSgp
Cit7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U6OmFkZExheWVyQ2xpZW50
KENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlR3JhcGhpY3NMYXllckNsaWVudCogbGF5ZXJDbGll
bnQpCit7CisgICAgQVNTRVJUKCFtX2xheWVyQ2xpZW50cy5jb250YWlucyhsYXllckNsaWVudCkp
OworICAgIG1fbGF5ZXJDbGllbnRzLmFwcGVuZChsYXllckNsaWVudCk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U6OnJlbW92ZUxheWVyQ2xpZW50KENvb3JkaW5hdGVkQ29t
cG9zaXRlZEltYWdlR3JhcGhpY3NMYXllckNsaWVudCogbGF5ZXJDbGllbnQpCit7CisgICAgc2l6
ZV90IHBvc2l0aW9uID0gbV9sYXllckNsaWVudHMuZmluZChsYXllckNsaWVudCk7CisgICAgQVNT
RVJUKHBvc2l0aW9uICE9IG5vdEZvdW5kKTsKKyAgICBtX2xheWVyQ2xpZW50cy5yZW1vdmUocG9z
aXRpb24pOworCisgICAgaWYgKG1fbGF5ZXJDbGllbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9j
bGllbnQtPnJlbGVhc2VDb21wb3NpdGVkSW1hZ2UoaWQoKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRDb21wb3NpdGVkSW1hZ2U6OmludmFsaWRhdGUoKQoreworICAgIG1fZGlkSW52YWxpZGF0ZSA9
IHRydWU7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U6OnVwZGF0ZSgpCit7
CisgICAgbV9iYWNraW5nU3RvcmUtPnVwZGF0ZShtX2RpZEludmFsaWRhdGUpOworICAgIG1fZGlk
SW52YWxpZGF0ZSA9IGZhbHNlOworfQorCitJbnRSZWN0IENvb3JkaW5hdGVkQ29tcG9zaXRlZElt
YWdlOjp2aXNpYmxlUmVjdCgpIGNvbnN0Cit7CisgICAgUmVnaW9uIHVuaXRlZFZpc2libGVSZWdp
b247CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xheWVyQ2xpZW50cy5zaXplKCk7ICsr
aSkKKyAgICAgICAgdW5pdGVkVmlzaWJsZVJlZ2lvbi51bml0ZShtX2xheWVyQ2xpZW50c1tpXS0+
Y29tcG9zaXRlZEltYWdlVmlzaWJsZVJlY3QoKSk7CisKKyAgICBJbnRSZWN0IHVuaXRlZFZpc2li
bGVSZWN0ID0gdW5pdGVkVmlzaWJsZVJlZ2lvbi5ib3VuZHMoKTsKKyAgICB1bml0ZWRWaXNpYmxl
UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBtX2ltYWdlLT5zaXplKCkp
KTsKKyAgICByZXR1cm4gdW5pdGVkVmlzaWJsZVJlY3Q7Cit9CisKKy8vID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIENvbXBvc2l0ZWRUaWxlZEJh
Y2tpbmdTdG9yZSBDbGFzcworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQorCitDb21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmU6OkNvbXBvc2l0ZWRU
aWxlZEJhY2tpbmdTdG9yZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZSogb3duZXIpCisgICAg
OiBtX293bmVyKG93bmVyKQorICAgICwgbV9pblVwZGF0ZU1vZGUoZmFsc2UpCit7CisgICAgbV9v
d25lci0+bV9jbGllbnQtPmNyZWF0ZVRpbGVkQ29tcG9zaXRlZEltYWdlKG1fb3duZXItPmlkKCkp
OworICAgIG1fdGlsZWRCYWNraW5nU3RvcmUgPSBUaWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKHRo
aXMsIENvb3JkaW5hdGVkVGlsZUJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSk7CisgICAgbV90aWxlZEJh
Y2tpbmdTdG9yZS0+c2V0Q29udGVudHNTY2FsZSgxKTsKK30KKworQ29tcG9zaXRlZFRpbGVkQmFj
a2luZ1N0b3JlOjp+Q29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3JlKCkKK3sKKyAgICAvLyBSZW1v
dmUgbV90aWxlZEJhY2tpbmdTdG9yZSBleHBsaWNpdGx5IGJlY2F1c2Ugd2Ugd2FudCB0byBzZW5k
IFJlbW92ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UgbWVzc2FnZXMgYmVmb3JlIGEgRGVzdHJveVRp
bGVkQ29tcG9zaXRlZEltYWdlIG1lc3NhZ2UuCisgICAgbV90aWxlZEJhY2tpbmdTdG9yZS5jbGVh
cigpOworICAgIG1fb3duZXItPm1fY2xpZW50LT5kZXN0cm95VGlsZWRDb21wb3NpdGVkSW1hZ2Uo
bV9vd25lci0+aWQoKSk7Cit9CisKK3ZvaWQgQ29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3JlOjp1
cGRhdGUoYm9vbCBpbnZhbGlkYXRlZCkKK3sKKyAgICBtX2luVXBkYXRlTW9kZSA9IHRydWU7Cisg
ICAgbV90aWxlZEJhY2tpbmdTdG9yZS0+Y292ZXJXaXRoVGlsZXNJZk5lZWRlZCgpOworICAgIGlm
IChpbnZhbGlkYXRlZCkgeworICAgICAgICAvLyBPbmUgZnJhbWUgb2YgdGhlIGltYWdlIGNhbiBi
ZSBvcGFxdWUgd2hpbGUgYW5vdGhlciBpcyBub3Qgb3BhcXVlLgorICAgICAgICBtX3RpbGVkQmFj
a2luZ1N0b3JlLT5zZXRTdXBwb3J0c0FscGhhKG1fb3duZXItPm1faW1hZ2UtPmN1cnJlbnRGcmFt
ZUhhc0FscGhhKCkpOworICAgICAgICBtX3RpbGVkQmFja2luZ1N0b3JlLT5pbnZhbGlkYXRlKHRp
bGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCkpOworICAgIH0KKyAgICBtX3RpbGVkQmFja2lu
Z1N0b3JlLT51cGRhdGVUaWxlQnVmZmVycygpOworICAgIG1faW5VcGRhdGVNb2RlID0gZmFsc2U7
Cit9CisKK3ZvaWQgQ29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3JlOjp0aWxlZEJhY2tpbmdTdG9y
ZVBhaW50QmVnaW4oKQoreworfQorCit2b2lkIENvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9yZTo6
dGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2UobV9vd25lci0+bV9pbWFnZS5nZXQoKSwgQ29sb3JT
cGFjZURldmljZVJHQiwgcmVjdCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRlZFRpbGVkQmFja2luZ1N0
b3JlOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgLyog
dXBkYXRlZFJlY3RzICovKQoreworfQorCitib29sIENvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9y
ZTo6dGlsZWRCYWNraW5nU3RvcmVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFt
X2luVXBkYXRlTW9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX293bmVy
LT5tX2NsaWVudC0+bGF5ZXJUcmVlQ29tcG9zaXRlZEltYWdlVGlsZVVwZGF0ZXNBbGxvd2VkKCk7
Cit9CisKK0ludFJlY3QgQ29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3JlOjp0aWxlZEJhY2tpbmdT
dG9yZUNvbnRlbnRzUmVjdCgpCit7CisgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgbV9vd25lci0+bV9pbWFnZS0+c2l6ZSgpKTsKK30KKworSW50UmVjdCBDb21wb3NpdGVkVGls
ZWRCYWNraW5nU3RvcmU6OnRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKQoreworICAgIHJl
dHVybiBtX293bmVyLT52aXNpYmxlUmVjdCgpOworfQorCitDb2xvciBDb21wb3NpdGVkVGlsZWRC
YWNraW5nU3RvcmU6OnRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50OworfQorCitQYXNzT3duUHRyPEdyYXBoaWNz
Q29udGV4dD4gQ29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3JlOjpiZWdpbkNvbnRlbnRVcGRhdGUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgaW50JiBhdGxhcywgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAg
ICByZXR1cm4gbV9vd25lci0+bV9jbGllbnQtPmJlZ2luQ29tcG9zaXRlZEltYWdlVXBkYXRlKHNp
emUsIG1fb3duZXItPm1faW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgPyBTaGFyZWFibGVC
aXRtYXA6OlN1cHBvcnRzQWxwaGEgOiBTaGFyZWFibGVCaXRtYXA6Ok5vRmxhZ3MsIGF0bGFzLCBv
ZmZzZXQpOworfQorCit2b2lkIENvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlVGls
ZShpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3Qg
SW50UmVjdCYgdGFyZ2V0UmVjdCkKK3sKKyAgICBtX293bmVyLT5tX2NsaWVudC0+Y3JlYXRlVGls
ZUZvckNvbXBvc2l0ZWRJbWFnZShtX293bmVyLT5pZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8sIHRh
cmdldFJlY3QpOworfQorCit2b2lkIENvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9yZTo6dXBkYXRl
VGlsZShpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29u
c3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKK3sKKyAgICBtX293bmVyLT5tX2NsaWVudC0+dXBkYXRl
VGlsZUZvckNvbXBvc2l0ZWRJbWFnZShtX293bmVyLT5pZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8s
IHRhcmdldFJlY3QpOworfQorCit2b2lkIENvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9yZTo6cmVt
b3ZlVGlsZShpbnQgdGlsZUlEKQoreworICAgIG1fb3duZXItPm1fY2xpZW50LT5yZW1vdmVUaWxl
Rm9yQ29tcG9zaXRlZEltYWdlKG1fb3duZXItPmlkKCksIHRpbGVJRCk7Cit9CisKK30KKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQ29tcG9z
aXRlZEltYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGRkNzg2OGM3Njk0YTA5MDVjZDBiYjY1MGY4ZTVjMGNl
ZmI2YWE5MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLmgKQEAg
LTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRD
b21wb3NpdGVkSW1hZ2VfaAorI2RlZmluZSBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZV9oCisK
KyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRDb21w
b3NpdGVkSW1hZ2VJRC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5o
IgorI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJ
bmZvLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK30KKwor
bmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBDb21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmU7CisK
K2NsYXNzIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICAv
LyBUaGlzIG1ldGhvZCBpcyB0aGUgYW50aXRoZXNpcyBvZiBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJDbGllbnQ6OmFkb3B0Q29tcG9zaXRlZEltYWdlKCkuIFNlZSBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXJDbGllbnQuCisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VDb21wb3NpdGVkSW1hZ2UoQ29v
cmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVU
aWxlZENvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lUaWxlZENvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENv
bXBvc2l0ZWRJbWFnZUlEKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGVGb3JDb21w
b3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCwgaW50IHRpbGVJRCwgY29u
c3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29t
cG9zaXRlZEltYWdlSUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZUZv
ckNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELCBpbnQgdGlsZUlE
KSA9IDA7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4g
YmVnaW5Db21wb3NpdGVkSW1hZ2VVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNoYXJl
YWJsZUJpdG1hcDo6RmxhZ3MsIGludCYgYXRsYXNJRCwgV2ViQ29yZTo6SW50UG9pbnQmKSA9IDA7
CisgICAgdmlydHVhbCBib29sIGxheWVyVHJlZUNvbXBvc2l0ZWRJbWFnZVRpbGVVcGRhdGVzQWxs
b3dlZCgpIGNvbnN0ID0gMDsKK307CisKK2NsYXNzIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdl
R3JhcGhpY3NMYXllckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRS
ZWN0IGNvbXBvc2l0ZWRJbWFnZVZpc2libGVSZWN0KCkgPSAwOworfTsKKworY2xhc3MgQ29vcmRp
bmF0ZWRDb21wb3NpdGVkSW1hZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxDb29yZGluYXRlZENvbXBv
c2l0ZWRJbWFnZT4geworICAgIGZyaWVuZCBjbGFzcyBDb21wb3NpdGVkVGlsZWRCYWNraW5nU3Rv
cmU7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRDb21wb3NpdGVk
SW1hZ2U+IGNyZWF0ZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUNsaWVudCosIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6SW1hZ2U+KTsKKyAgICB2aXJ0dWFsIH5Db29yZGluYXRlZENvbXBvc2l0ZWRJ
bWFnZSgpOworCisgICAgc3RhdGljIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgZ2V0Q29v
cmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRChXZWJDb3JlOjpJbWFnZSopOworICAgIENvb3JkaW5h
dGVkQ29tcG9zaXRlZEltYWdlSUQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisKKyAgICB2
b2lkIGFkZExheWVyQ2xpZW50KENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlR3JhcGhpY3NMYXll
ckNsaWVudCopOworICAgIHZvaWQgcmVtb3ZlTGF5ZXJDbGllbnQoQ29vcmRpbmF0ZWRDb21wb3Np
dGVkSW1hZ2VHcmFwaGljc0xheWVyQ2xpZW50Kik7CisKKyAgICB2b2lkIGludmFsaWRhdGUoKTsK
KyAgICB2b2lkIHVwZGF0ZSgpOworCitwcml2YXRlOgorICAgIENvb3JkaW5hdGVkQ29tcG9zaXRl
ZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlQ2xpZW50KiwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpJbWFnZT4pOworCisgICAgV2ViQ29yZTo6SW50UmVjdCB2aXNpYmxlUmVjdCgpIGNvbnN0
OworCisgICAgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VDbGllbnQqIG1fY2xpZW50OworICAg
IFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4gbV9pbWFnZTsKKyAgICBDb29yZGluYXRlZENvbXBvc2l0
ZWRJbWFnZUlEIG1faWQ7CisgICAgVmVjdG9yPENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlR3Jh
cGhpY3NMYXllckNsaWVudCo+IG1fbGF5ZXJDbGllbnRzOworICAgIE93blB0cjxDb21wb3NpdGVk
VGlsZWRCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworCisgICAgYm9vbCBtX2RpZEludmFs
aWRhdGU7Cit9OworCit9CisjZW5kaWYKKworI2VuZGlmIC8vIENvb3JkaW5hdGVkQ29tcG9zaXRl
ZEltYWdlX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IDI2ZTQ4ZDYxYzQxODJiMDYyN2EyMWIyOTIxZDRhMmEx
ZGJiZDI2ZTguLjdiZDgxMGRhY2UzZWY3NWU0ODMxMjE0N2UzOWI1YTgzZGE3NWVjZjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyLmNwcApAQCAtODIsNiArODIsMTMgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OmRpZENoYW5nZUZpbHRlcnMoKQogfQogI2VuZGlmCiAKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpkaWRDaGFuZ2VDb21wb3NpdGVkSW1hZ2UoKQoreworICAgIG1fc2hvdWxkU3luY0Nv
bXBvc2l0ZWRJbWFnZSA9IHRydWU7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQo
KS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKK30KKwogdm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCkKIHsKICAgICBtX3Nob3VsZFVw
ZGF0ZVZpc2libGVSZWN0ID0gdHJ1ZTsKQEAgLTEwNSwxMSArMTEyLDEzIEBAIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGll
bnQqIGNsaWVudCkKICAgICAsIG1fc2hvdWxkU3luY0xheWVyU3RhdGUodHJ1ZSkKICAgICAsIG1f
c2hvdWxkU3luY0NoaWxkcmVuKHRydWUpCiAgICAgLCBtX3Nob3VsZFN5bmNGaWx0ZXJzKHRydWUp
CisgICAgLCBtX3Nob3VsZFN5bmNDb21wb3NpdGVkSW1hZ2UodHJ1ZSkKICAgICAsIG1fc2hvdWxk
U3luY0FuaW1hdGlvbnModHJ1ZSkKICAgICAsIG1fZml4ZWRUb1ZpZXdwb3J0KGZhbHNlKQogICAg
ICwgbV9jYW52YXNOZWVkc0Rpc3BsYXkoZmFsc2UpCiAgICAgLCBtX0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllckNsaWVudCgwKQogICAgICwgbV9jb250ZW50c1NjYWxlKDEpCisgICAgLCBtX2NvbXBv
c2l0ZWROYXRpdmVJbWFnZVB0cigwKQogICAgICwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKDApCiAg
ICAgLCBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lcih0aGlzLCAmQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjphbmltYXRpb25TdGFydGVkVGltZXJGaXJlZCkKIHsKQEAgLTMxOCw5ICszMjcsNiBAQCB2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJl
Y3QmIHIpCiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05lZWRz
RGlzcGxheSgpCiB7Ci0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IG1faW1hZ2U7Ci0gICAgc2V0
Q29udGVudHNUb0ltYWdlKDApOwotICAgIHNldENvbnRlbnRzVG9JbWFnZShpbWFnZS5nZXQoKSk7
CiAgICAgbV9jYW52YXNOZWVkc0Rpc3BsYXkgPSB0cnVlOwogICAgIGlmIChjbGllbnQoKSkKICAg
ICAgICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7CkBAIC0zNDcsMjUgKzM1
MywyNiBAQCBib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0RmlsdGVycyhjb25zdCBG
aWx0ZXJPcGVyYXRpb25zJiBuZXdGaWx0ZXJzKQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKIHsKLSAgICBpZiAoaW1hZ2Ug
PT0gbV9pbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludDY0X3QgbmV3SUQgPSAwOwotICAg
IGlmIChtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCkgewotICAgICAgICAvLyBXZSBh
ZG9wdCBmaXJzdCwgaW4gY2FzZSB0aGlzIGlzIHRoZSBzYW1lIGZyYW1lIC0gdGhhdCB3YXkgd2Ug
YXZvaWQgZGVzdHJveWluZyBhbmQgcmVjcmVhdGluZyB0aGUgaW1hZ2UuCi0gICAgICAgIG5ld0lE
ID0gbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPmFkb3B0SW1hZ2VCYWNraW5nU3Rv
cmUoaW1hZ2UpOwotICAgICAgICBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+cmVs
ZWFzZUltYWdlQmFja2luZ1N0b3JlKG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOwot
ICAgICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgICAgIGlmIChtX2xheWVySW5mby5p
bWFnZUJhY2tpbmdTdG9yZUlEICYmIG5ld0lEID09IG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0
b3JlSUQpCisgICAgaWYgKGltYWdlKSB7CisgICAgICAgIC8vIE1ha2UgdGhlIGRlY2lzaW9uIGFi
b3V0IHdoZXRoZXIgdGhlIGltYWdlIGhhcyBjaGFuZ2VkLgorICAgICAgICAvLyBUaGlzIGNvZGUg
bWFrZXMgdGhlIGFzc3VtcHRpb24gdGhhdCBwb2ludGVyIGVxdWFsaXR5IG9uIGEgTmF0aXZlSW1h
Z2VQdHIgaXMgYSB2YWxpZCB3YXkgdG8gdGVsbCBpZiB0aGUgaW1hZ2UgaXMgY2hhbmdlZC4KKyAg
ICAgICAgLy8gVGhpcyBhc3N1bXB0aW9uIGlzIHRydWUgaW4gUXQsIEdUSyBhbmQgRUZMLgorICAg
ICAgICBOYXRpdmVJbWFnZVB0ciBuZXdOYXRpdmVJbWFnZVB0ciA9IGltYWdlLT5uYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpOworICAgICAgICBpZiAoIW5ld05hdGl2ZUltYWdlUHRyKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChuZXdOYXRpdmVJbWFnZVB0ciA9PSBtX2Nv
bXBvc2l0ZWROYXRpdmVJbWFnZVB0cikKICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBt
X2NvbXBvc2l0ZWRJbWFnZSA9IGltYWdlOworICAgICAgICBtX2NvbXBvc2l0ZWROYXRpdmVJbWFn
ZVB0ciA9IG5ld05hdGl2ZUltYWdlUHRyOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIG1f
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50IGlzIG5vdCBzZXQgeWV0IHRoZXJlIHNob3Vs
ZCBiZSBubyBiYWNraW5nIHN0b3JlIElELgotICAgICAgICBBU1NFUlQoIW1fbGF5ZXJJbmZvLmlt
YWdlQmFja2luZ1N0b3JlSUQpOwotICAgICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAg
ICAgIG1fY29tcG9zaXRlZEltYWdlID0gMDsKKyAgICAgICAgbV9jb21wb3NpdGVkTmF0aXZlSW1h
Z2VQdHIgPSAwOwogICAgIH0KIAotICAgIG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQg
PSBuZXdJRDsKLSAgICBtX2ltYWdlID0gaW1hZ2U7CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29u
dGVudHNUb0ltYWdlKGltYWdlKTsKKyAgICBkaWRDaGFuZ2VDb21wb3NpdGVkSW1hZ2UoKTsKIH0K
IAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihHcmFwaGljc0xh
eWVyKiBsYXllcikKQEAgLTQ1OSw2ICs0NjYsMzEgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnN5bmNGaWx0ZXJzKCkKIH0KICNlbmRpZgogCit2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6c3luY0NvbXBvc2l0ZWRJbWFnZSgpCit7CisgICAgaWYgKCFtX3Nob3VsZFN5bmND
b21wb3NpdGVkSW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Nob3VsZFN5bmNDb21wb3Np
dGVkSW1hZ2UgPSBmYWxzZTsKKworICAgIGlmIChtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0cikg
eworICAgICAgICBBU1NFUlQoIW1fbWFpbkJhY2tpbmdTdG9yZSk7CisgICAgICAgIEFTU0VSVCht
X2NvbXBvc2l0ZWRJbWFnZSk7CisKKyAgICAgICAgYm9vbCBpbWFnZUluc3RhbmNlUmVwbGFjZWQg
PSBtX2Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlICYmIG1fY29vcmRpbmF0ZWRDb21wb3NpdGVk
SW1hZ2UtPmlkKCkgIT0gQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U6OmdldENvb3JkaW5hdGVk
Q29tcG9zaXRlZEltYWdlSUQobV9jb21wb3NpdGVkSW1hZ2UuZ2V0KCkpOworICAgICAgICBpZiAo
aW1hZ2VJbnN0YW5jZVJlcGxhY2VkKQorICAgICAgICAgICAgcmVsZWFzZUNvbXBvc2l0ZWRJbWFn
ZUlmTmVlZGVkKCk7CisKKyAgICAgICAgaWYgKCFtX2Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdl
KSB7CisgICAgICAgICAgICBtX2Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlID0gbV9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPmFkb3B0Q29tcG9zaXRlZEltYWdlKG1fY29tcG9zaXRl
ZEltYWdlLmdldCgpKTsKKyAgICAgICAgICAgIG1fY29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2Ut
PmFkZExheWVyQ2xpZW50KHRoaXMpOworICAgICAgICAgICAgbV9sYXllckluZm8uaW1hZ2VJRCA9
IG1fY29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UtPmlkKCk7CisgICAgICAgIH0KKworICAgICAg
ICBtX2Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLT5pbnZhbGlkYXRlKCk7CisgICAgfSBlbHNl
CisgICAgICAgIHJlbGVhc2VDb21wb3NpdGVkSW1hZ2VJZk5lZWRlZCgpOworfQorCiB2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0xheWVyU3RhdGUoKQogewogICAgIGlmICghbV9z
aG91bGRTeW5jTGF5ZXJTdGF0ZSkKQEAgLTUxMSwxOCArNTQzLDggQEAgdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMoKQogICAgIG1fY2FudmFzTmVlZHNEaXNwbGF5ID0g
ZmFsc2U7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjplbnN1cmVJbWFnZUJh
Y2tpbmdTdG9yZSgpCi17Ci0gICAgaWYgKCFtX2ltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKCFtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKQotICAgICAgICBtX2xheWVySW5m
by5pbWFnZUJhY2tpbmdTdG9yZUlEID0gbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQt
PmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUobV9pbWFnZS5nZXQoKSk7Ci19Ci0KIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5
KCkKIHsKLSAgICAvLyBUaGUgcmVtb3RlIGltYWdlIG1pZ2h0IGhhdmUgYmVlbiByZWxlYXNlZCBi
eSBwdXJnZUJhY2tpbmdTdG9yZXMuCi0gICAgZW5zdXJlSW1hZ2VCYWNraW5nU3RvcmUoKTsKICAg
ICBzeW5jTGF5ZXJTdGF0ZSgpOwogICAgIHN5bmNBbmltYXRpb25zKCk7CiAgICAgY29tcHV0ZVRy
YW5zZm9ybWVkVmlzaWJsZVJlY3QoKTsKQEAgLTUzMSw5ICs1NTMsMzAgQEAgdm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHko
KQogICAgIHN5bmNGaWx0ZXJzKCk7CiAjZW5kaWYKICAgICB1cGRhdGVDb250ZW50QnVmZmVycygp
OworICAgIHN5bmNDb21wb3NpdGVkSW1hZ2UoKTsKICAgICBzeW5jQ2FudmFzKCk7CiB9CiAKK0lu
dFJlY3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjb21wb3NpdGVkSW1hZ2VWaXNpYmxlUmVj
dCgpCit7CisgICAgQVNTRVJUKG1fY29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UpOworICAgIEZs
b2F0UmVjdCB2aXNpYmxlSW1hZ2VSZWN0ID0gdGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgp
OworICAgIEZsb2F0U2l6ZSByYXRpb09maW1hZ2VPdmVyTGF5ZXJTaXplKG1fY29tcG9zaXRlZElt
YWdlLT53aWR0aCgpIC8gc2l6ZSgpLndpZHRoKCksIG1fY29tcG9zaXRlZEltYWdlLT5oZWlnaHQo
KSAvIHNpemUoKS5oZWlnaHQoKSk7CisgICAgdmlzaWJsZUltYWdlUmVjdC5zY2FsZShyYXRpb09m
aW1hZ2VPdmVyTGF5ZXJTaXplLndpZHRoKCksIHJhdGlvT2ZpbWFnZU92ZXJMYXllclNpemUuaGVp
Z2h0KCkpOworICAgIHJldHVybiBlbmNsb3NlZEludFJlY3QodmlzaWJsZUltYWdlUmVjdCk7Cit9
CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZWxlYXNlQ29tcG9zaXRlZEltYWdl
SWZOZWVkZWQoKQoreworICAgIGlmICghbV9jb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xp
ZW50KTsKKyAgICBtX2Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLT5yZW1vdmVMYXllckNsaWVu
dCh0aGlzKTsKKyAgICBtX2Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLmNsZWFyKCk7CisgICAg
bV9sYXllckluZm8uaW1hZ2VJRCA9IEludmFsaWRDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlE
OworfQorCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQ
YWludEJlZ2luKCkKIHsKIH0KQEAgLTU4Myw3ICs2MjYsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6YWRqdXN0Q29udGVudHNTY2FsZSgpCiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpjcmVhdGVCYWNraW5nU3RvcmUoKQogewotICAgIG1fbWFpbkJhY2tpbmdTdG9y
ZSA9IGFkb3B0UHRyKG5ldyBUaWxlZEJhY2tpbmdTdG9yZSh0aGlzLCBDb29yZGluYXRlZFRpbGVC
YWNrZW5kOjpjcmVhdGUodGhpcykpKTsKKyAgICBtX21haW5CYWNraW5nU3RvcmUgPSBUaWxlZEJh
Y2tpbmdTdG9yZTo6Y3JlYXRlKHRoaXMsIENvb3JkaW5hdGVkVGlsZUJhY2tlbmQ6OmNyZWF0ZSh0
aGlzKSk7CiAgICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRTdXBwb3J0c0FscGhhKCFjb250ZW50
c09wYXF1ZSgpKTsKICAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldENvbnRlbnRzU2NhbGUoZWZm
ZWN0aXZlQ29udGVudHNTY2FsZSgpKTsKIH0KQEAgLTYzNiw3ICs2NzksNyBAQCBDb2xvciBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKCkg
Y29uc3QKICAgICByZXR1cm4gY29udGVudHNPcGFxdWUoKSA/IENvbG9yOjp3aGl0ZSA6IENvbG9y
Ojp0cmFuc3BhcmVudDsKIH0KIAotUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIHNpemUsIGludCYgYXRsYXMsIFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQp
CitQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpi
ZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgaW50JiBhdGxhcywgSW50UG9p
bnQmIG9mZnNldCkKIHsKICAgICByZXR1cm4gbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGll
bnQtPmJlZ2luQ29udGVudFVwZGF0ZShzaXplLCBjb250ZW50c09wYXF1ZSgpID8gMCA6IFNoYXJl
YWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSwgYXRsYXMsIG9mZnNldCk7CiB9CkBAIC02ODMsMTEg
KzcyNiw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpwdXJnZUJhY2tpbmdTdG9y
ZXMoKQogewogICAgIG1fbWFpbkJhY2tpbmdTdG9yZS5jbGVhcigpOwogICAgIG1fcHJldmlvdXNC
YWNraW5nU3RvcmUuY2xlYXIoKTsKLQotICAgIGlmIChtX2xheWVySW5mby5pbWFnZUJhY2tpbmdT
dG9yZUlEKSB7Ci0gICAgICAgIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5yZWxl
YXNlSW1hZ2VCYWNraW5nU3RvcmUobV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCk7Ci0g
ICAgICAgIG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQgPSAwOwotICAgIH0KKyAgICBy
ZWxlYXNlQ29tcG9zaXRlZEltYWdlSWZOZWVkZWQoKTsKIAogICAgIGRpZENoYW5nZUxheWVyU3Rh
dGUoKTsKICAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOwpAQCAtNzMzLDcgKzc3Miw3IEBAIGJvb2wg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpoYXNQZW5kaW5nVmlzaWJsZUNoYW5nZXMoKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKCFtX3Nob3VsZFN5bmNMYXll
clN0YXRlICYmICFtX3Nob3VsZFN5bmNDaGlsZHJlbiAmJiAhbV9zaG91bGRTeW5jRmlsdGVycyAm
JiAhbV9zaG91bGRTeW5jQW5pbWF0aW9ucyAmJiAhbV9jYW52YXNOZWVkc0Rpc3BsYXkpCisgICAg
aWYgKCFtX3Nob3VsZFN5bmNMYXllclN0YXRlICYmICFtX3Nob3VsZFN5bmNDaGlsZHJlbiAmJiAh
bV9zaG91bGRTeW5jRmlsdGVycyAmJiAhbV9zaG91bGRTeW5jQ29tcG9zaXRlZEltYWdlICYmICFt
X3Nob3VsZFN5bmNBbmltYXRpb25zICYmICFtX2NhbnZhc05lZWRzRGlzcGxheSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRy
YW5zZm9ybXMoKSB8fCAhdGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpLmlzRW1wdHkoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyLmgKaW5kZXggMTE4OGFhNzVmYjc3ODI5YmIyMWM5OGVkZjBkNzBmYjIyNTUwMWUyZi4uYzVi
ZmE4ZmM1MGI0MTU4MGM1MjQyOWJmZTg2ODlhNzIxMWFhNTc3ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKQEAgLTIxLDYg
KzIxLDcgQEAKICNpZm5kZWYgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyX2gKICNkZWZpbmUgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyX2gKIAorI2luY2x1ZGUgIkNvb3JkaW5hdGVkQ29tcG9zaXRl
ZEltYWdlLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRUaWxlLmgiCiAjaW5jbHVkZSAiRmxvYXRQ
b2ludDNELmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgpAQCAtNDksNiArNTAsOSBAQCBu
YW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50
IHsKIHB1YmxpYzoKKyAgICAvLyBUaGlzIG1ldGhvZCBpcyB0aGUgYW50aXRoZXNpcyBvZiBDb29y
ZGluYXRlZENvbXBvc2l0ZWRJbWFnZUNsaWVudDo6cmVsZWFzZUNvbXBvc2l0ZWRJbWFnZSgpLiBT
ZWUgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VDbGllbnQuCisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlPiBhZG9wdENvbXBvc2l0ZWRJbWFnZShXZWJD
b3JlOjpJbWFnZSopID0gMDsKKwogICAgIC8vIENvb3JkaW5hdGVkVGlsZUNsaWVudAogICAgIHZp
cnR1YWwgdm9pZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZh
Y2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBk
YXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7CkBAIC01Niw4ICs2MCw2IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB2aXNpYmxlQ29udGVudHNS
ZWN0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBsYXllclRyZWVUaWxlVXBkYXRlc0Fs
bG93ZWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBpbnQ2NF90IGFkb3B0SW1hZ2VCYWNraW5n
U3RvcmUoV2ViQ29yZTo6SW1hZ2UqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VJbWFn
ZUJhY2tpbmdTdG9yZShpbnQ2NF90KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0
YXRlKFdlYkxheWVySUQsIGNvbnN0IFdlYkxheWVySW5mbyYpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgc3luY0xheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+
JikgPSAwOwogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKQEAgLTgwLDcgKzgyLDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgOiBwdWJsaWMg
R3JhcGhpY3NMYXllcgogICAgICwgcHVibGljIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50Ci0gICAg
LCBwdWJsaWMgV2ViS2l0OjpDb29yZGluYXRlZFRpbGVDbGllbnQgeworICAgICwgcHVibGljIFdl
YktpdDo6Q29vcmRpbmF0ZWRUaWxlQ2xpZW50CisgICAgLCBwdWJsaWMgV2ViS2l0OjpDb29yZGlu
YXRlZENvbXBvc2l0ZWRJbWFnZUdyYXBoaWNzTGF5ZXJDbGllbnQgewogcHVibGljOgogICAgIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50Kik7CiAgICAgdmlydHVh
bCB+Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKCk7CkBAIC0xNjgsNiArMTcxLDcgQEAgcHJpdmF0
ZToKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAgdm9pZCBkaWRDaGFuZ2VGaWx0ZXJzKCk7
CiAjZW5kaWYKKyAgICB2b2lkIGRpZENoYW5nZUNvbXBvc2l0ZWRJbWFnZSgpOwogCiAgICAgdm9p
ZCBzeW5jTGF5ZXJTdGF0ZSgpOwogICAgIHZvaWQgc3luY0FuaW1hdGlvbnMoKTsKQEAgLTE3NSw2
ICsxNzksNyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICB2b2lkIHN5
bmNGaWx0ZXJzKCk7CiAjZW5kaWYKKyAgICB2b2lkIHN5bmNDb21wb3NpdGVkSW1hZ2UoKTsKICAg
ICB2b2lkIHN5bmNDYW52YXMoKTsKICAgICB2b2lkIGVuc3VyZUltYWdlQmFja2luZ1N0b3JlKCk7
CiAgICAgdm9pZCBjb21wdXRlVHJhbnNmb3JtZWRWaXNpYmxlUmVjdCgpOwpAQCAtMTgyLDYgKzE4
NywxMSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjcmVhdGVCYWNraW5nU3RvcmUoKTsKIAorICAg
IC8vIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlR3JhcGhpY3NMYXllckNsaWVudAorICAgIHZp
cnR1YWwgSW50UmVjdCBjb21wb3NpdGVkSW1hZ2VWaXNpYmxlUmVjdCgpIE9WRVJSSURFOworCisg
ICAgdm9pZCByZWxlYXNlQ29tcG9zaXRlZEltYWdlSWZOZWVkZWQoKTsKKwogICAgIGJvb2wgc2Vs
Zk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNmb3JtcygpOwogICAgIGJvb2wgc2hvdWxkVXNl
VGlsZWRCYWNraW5nU3RvcmUoKTsKICAgICB2b2lkIGFkanVzdENvbnRlbnRzU2NhbGUoKTsKQEAg
LTE5Myw3ICsyMDMsNiBAQCBwcml2YXRlOgogCiAgICAgV2ViS2l0OjpXZWJMYXllcklEIG1faWQ7
CiAgICAgV2ViS2l0OjpXZWJMYXllckluZm8gbV9sYXllckluZm87Ci0gICAgUmVmUHRyPEltYWdl
PiBtX2ltYWdlOwogICAgIEdyYXBoaWNzTGF5ZXIqIG1fbWFza1RhcmdldDsKICAgICBGbG9hdFJl
Y3QgbV9uZWVkc0Rpc3BsYXlSZWN0OwogICAgIEdyYXBoaWNzTGF5ZXJUcmFuc2Zvcm0gbV9sYXll
clRyYW5zZm9ybTsKQEAgLTIwMiw2ICsyMTEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zaG91
bGRTeW5jTGF5ZXJTdGF0ZTogMTsKICAgICBib29sIG1fc2hvdWxkU3luY0NoaWxkcmVuOiAxOwog
ICAgIGJvb2wgbV9zaG91bGRTeW5jRmlsdGVyczogMTsKKyAgICBib29sIG1fc2hvdWxkU3luY0Nv
bXBvc2l0ZWRJbWFnZTogMTsKICAgICBib29sIG1fc2hvdWxkU3luY0FuaW1hdGlvbnM6IDE7CiAg
ICAgYm9vbCBtX2ZpeGVkVG9WaWV3cG9ydCA6IDE7CiAgICAgYm9vbCBtX2NhbnZhc05lZWRzRGlz
cGxheSA6IDE7CkBAIC0yMTMsNiArMjIzLDEyIEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFRpbGVk
QmFja2luZ1N0b3JlPiBtX21haW5CYWNraW5nU3RvcmU7CiAgICAgT3duUHRyPFRpbGVkQmFja2lu
Z1N0b3JlPiBtX3ByZXZpb3VzQmFja2luZ1N0b3JlOwogICAgIGZsb2F0IG1fY29udGVudHNTY2Fs
ZTsKKworICAgIC8vIFdoZW4gbV9jb21wb3NpdGVkSW1hZ2UgZXhpc3RzLCB0aGlzIGxheWVyIGNh
bm5vdCBiZSBhIGNvbnRlbnQgbGF5ZXIsIGJlY2F1c2Ugc2V0RHJhd3NDb250ZW50IGFuZCBzZXRD
b250ZW50c1RvSW1hZ2UgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KKyAgICBSZWZQdHI8SW1hZ2U+
IG1fY29tcG9zaXRlZEltYWdlOworICAgIE5hdGl2ZUltYWdlUHRyIG1fY29tcG9zaXRlZE5hdGl2
ZUltYWdlUHRyOworICAgIFJlZlB0cjxXZWJLaXQ6OkNvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdl
PiBtX2Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlOworCiAgICAgUGxhdGZvcm1MYXllciogbV9j
YW52YXNQbGF0Zm9ybUxheWVyOwogICAgIFRpbWVyPENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcj4g
bV9hbmltYXRpb25TdGFydGVkVGltZXI7CiAgICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMgbV9h
bmltYXRpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29v
cmRpbmF0b3IuY3BwCmluZGV4IDVkOWIzZWYzODQ3NWE5YWRmOTIzN2MxN2I1YTU2YWQ1MmZlNDEy
OTIuLmQ2ZWIzZmE5ZDgwYTE5YzZkNzEwYjFiMDQ5OWNjNTMzZjU4N2JkY2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAKQEAgLTQ3
LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyQ29tcG9zaXRvci5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGlu
Z3MuaD4KKyNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCkBAIC03Miw2ICs3Myw3IEBAIExheWVyVHJlZUNvb3JkaW5hdG9yOjpMYXll
clRyZWVDb29yZGluYXRvcihXZWJQYWdlKiB3ZWJQYWdlKQogICAgIDogTGF5ZXJUcmVlSG9zdCh3
ZWJQYWdlKQogICAgICwgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2goZmFsc2UpCiAg
ICAgLCBtX2lzVmFsaWQodHJ1ZSkKKyAgICAsIG1faXNQdXJnaW5nKGZhbHNlKQogICAgICwgbV93
YWl0aW5nRm9yVUlQcm9jZXNzKHRydWUpCiAgICAgLCBtX2lzU3VzcGVuZGVkKGZhbHNlKQogICAg
ICwgbV9jb250ZW50c1NjYWxlKDEpCkBAIC0yNjcsNyArMjY5LDcgQEAgYm9vbCBMYXllclRyZWVD
b29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKIAogICAgIG1fcm9vdExheWVy
LT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiAKLSAgICBwdXJnZVJl
bGVhc2VkSW1hZ2VzKCk7CisgICAgdXBkYXRlQ29tcG9zaXRlZEltYWdlcygpOwogCiAgICAgaWYg
KG1fc2hvdWxkU3luY1Jvb3RMYXllcikgewogICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldFJvb3RDb21wb3NpdGluZ0xheWVyKHRv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+aWQoKSkpOwpAQCAt
NDQ3LDEzICs0NDksNiBAQCB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpkaWRQZXJmb3JtU2No
ZWR1bGVkTGF5ZXJGbHVzaCgpCiAgICAgfQogfQogCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9y
OjpwdXJnZVJlbGVhc2VkSW1hZ2VzKCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
cmVsZWFzZWREaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6RGVzdHJv
eURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKG1fcmVsZWFzZWREaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZXNbaV0pKTsKLSAgICBtX3JlbGVhc2VkRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmNsZWFyKCk7
Ci19Ci0KIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmxheWVyRmx1c2hUaW1lckZpcmVkKFRp
bWVyPExheWVyVHJlZUNvb3JkaW5hdG9yPiopCiB7CiAgICAgcGVyZm9ybVNjaGVkdWxlZExheWVy
Rmx1c2goKTsKQEAgLTQ4MSw4MCArNDc2LDYgQEAgdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6
ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKQogICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IG51bGxw
dHI7CiB9CiAKLWludDY0X3QgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmFkb3B0SW1hZ2VCYWNraW5n
U3RvcmUoSW1hZ2UqIGltYWdlKQotewotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybiBJ
bnZhbGlkV2ViTGF5ZXJJRDsKLQotICAgIGludDY0X3Qga2V5ID0gMDsKLQotI2lmIFBMQVRGT1JN
KFFUKQotICAgIFFQaXhtYXAqIG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCk7Ci0KLSAgICBpZiAoIW5hdGl2ZUltYWdlKQotICAgICAgICByZXR1cm4gSW52
YWxpZFdlYkxheWVySUQ7Ci0KLSAgICBrZXkgPSBuYXRpdmVJbWFnZS0+Y2FjaGVLZXkoKTsKLSNl
bGlmIFVTRShDQUlSTykKLSAgICBOYXRpdmVJbWFnZUNhaXJvKiBuYXRpdmVJbWFnZSA9IGltYWdl
LT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIGlmICghbmF0aXZlSW1hZ2UpCi0g
ICAgICAgIHJldHVybiBJbnZhbGlkV2ViTGF5ZXJJRDsKLSAgICAvLyBUaGlzIGNhbiBiZSBzYWZl
bHkgZG9uZSBzaW5jZSB3ZSBvd24gdGhlIHJlZmVyZW5jZS4KLSAgICAvLyBBIGNvcnJlc3BvbmRp
bmcgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KCkgaXMgZW5zdXJlZCBpbiByZWxlYXNlSW1hZ2VCYWNr
aW5nU3RvcmUoKS4KLSAgICBjYWlyb19zdXJmYWNlX3QqIGNhaXJvU3VyZmFjZSA9IGNhaXJvX3N1
cmZhY2VfcmVmZXJlbmNlKG5hdGl2ZUltYWdlLT5zdXJmYWNlKCkpOwotICAgIGtleSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8aW50NjRfdD4oY2Fpcm9TdXJmYWNlKTsKLSNlbmRpZgotCi0gICAgSGFzaE1h
cDxpbnQ2NF90LCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VS
ZWZDb3VudHMuZmluZChrZXkpOwotCi0gICAgaWYgKGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVk
SW1hZ2VSZWZDb3VudHMuZW5kKCkpIHsKLSAgICAgICAgKysoaXQtPnZhbHVlKTsKLSAgICAgICAg
cmV0dXJuIGtleTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpZiB3ZSB3ZXJlIGdvaW5nIHRvIHJl
bGVhc2UgdGhpcyBpbWFnZSBkdXJpbmcgdGhlIG5leHQgZmx1c2guCi0gICAgc2l6ZV90IHJlbGVh
c2VkSW5kZXggPSBtX3JlbGVhc2VkRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmQoa2V5KTsK
LSAgICBpZiAocmVsZWFzZWRJbmRleCA9PSBub3RGb3VuZCkgewotICAgICAgICBSZWZQdHI8U2hh
cmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShp
bWFnZS0+c2l6ZSgpLCAoaW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgPyBTaGFyZWFibGVC
aXRtYXA6OlN1cHBvcnRzQWxwaGEgOiAwKSk7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIE93blB0
cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IGJpdG1hcC0+Y3Jl
YXRlR3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJ
bWFnZShpbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQ6Onplcm8oKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOwotICAgICAgICBi
aXRtYXAtPmNyZWF0ZUhhbmRsZShoYW5kbGUpOwotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0ZURpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlKGtleSwgaGFuZGxlKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcmVsZWFzZWREaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZXMucmVtb3ZlKHJlbGVhc2VkSW5kZXgpOwotCi0gICAgbV9kaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5hZGQoa2V5LCAxKTsKLSAgICByZXR1cm4ga2V5
OwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZWxlYXNlSW1hZ2VCYWNraW5nU3Rv
cmUoaW50NjRfdCBrZXkpCi17Ci0gICAgaWYgKCFrZXkpCi0gICAgICAgIHJldHVybjsKLSAgICBI
YXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJ
bWFnZVJlZkNvdW50cy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ID09IG1fZGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGl0LT52YWx1
ZS0tOwotCi0gICAgaWYgKGl0LT52YWx1ZSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgVVNFKENB
SVJPKQotICAgIC8vIENvbXBsZW1lbnQgdGhlIHJlZmVyZW5jaW5nIGluIGFkb3B0SW1hZ2VCYWNr
aW5nU3RvcmUoKS4KLSAgICBjYWlyb19zdXJmYWNlX3QqIGNhaXJvU3VyZmFjZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y2Fpcm9fc3VyZmFjZV90Kj4oa2V5KTsKLSAgICBjYWlyb19zdXJmYWNlX2Rlc3Ry
b3koY2Fpcm9TdXJmYWNlKTsKLSNlbmRpZgotCi0gICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZVJlZkNvdW50cy5yZW1vdmUoaXQpOwotICAgIG1fcmVsZWFzZWREaXJlY3RseUNvbXBvc2l0ZWRJ
bWFnZXMuYXBwZW5kKGtleSk7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLQogdm9p
ZCBMYXllclRyZWVDb29yZGluYXRvcjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIC8qIHRpbWUgKi8pCiB7CiB9CkBAIC02MDgsNiAr
NTI5LDc1IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbW92ZVRpbGUoV2ViTGF5ZXJJ
RCBsYXllcklELCBpbnQgdGlsZUlEKQogICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6UmVtb3ZlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJ
RCkpOwogfQogCitQYXNzUmVmUHRyPENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlPiBMYXllclRy
ZWVDb29yZGluYXRvcjo6YWRvcHRDb21wb3NpdGVkSW1hZ2UoSW1hZ2UqIGltYWdlKQoreworICAg
IENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgaW1hZ2VJRCA9IENvb3JkaW5hdGVkQ29tcG9z
aXRlZEltYWdlOjpnZXRDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEKGltYWdlKTsKKyAgICBD
b21wb3NpdGVkSW1hZ2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jb21wb3NpdGVkSW1hZ2VzLmZpbmQo
aW1hZ2VJRCk7CisgICAgUmVmUHRyPENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlPiBjb21wb3Np
dGVkSW1hZ2U7CisgICAgaWYgKGl0ID09IG1fY29tcG9zaXRlZEltYWdlcy5lbmQoKSkgeworICAg
ICAgICBjb21wb3NpdGVkSW1hZ2UgPSBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6Y3JlYXRl
KHRoaXMsIGltYWdlKTsKKyAgICAgICAgbV9jb21wb3NpdGVkSW1hZ2VzLmFkZChpbWFnZUlELCBj
b21wb3NpdGVkSW1hZ2UpOworICAgIH0gZWxzZQorICAgICAgICBjb21wb3NpdGVkSW1hZ2UgPSBp
dC0+dmFsdWU7CisKKyAgICByZXR1cm4gY29tcG9zaXRlZEltYWdlOworfQorCit2b2lkIExheWVy
VHJlZUNvb3JkaW5hdG9yOjpyZWxlYXNlQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9z
aXRlZEltYWdlSUQgaW1hZ2VJRCkKK3sKKyAgICBBU1NFUlQobV9jb21wb3NpdGVkSW1hZ2VzLmNv
bnRhaW5zKGltYWdlSUQpKTsKKyAgICBtX2NvbXBvc2l0ZWRJbWFnZXMucmVtb3ZlKGltYWdlSUQp
OworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjp1cGRhdGVDb21wb3NpdGVkSW1hZ2Vz
KCkKK3sKKyAgICBDb21wb3NpdGVkSW1hZ2VNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fY29tcG9zaXRl
ZEltYWdlcy5lbmQoKTsKKyAgICBmb3IgKENvbXBvc2l0ZWRJbWFnZU1hcDo6aXRlcmF0b3IgaXRl
ciA9IG1fY29tcG9zaXRlZEltYWdlcy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAg
ICAgICBpdGVyLT52YWx1ZS0+dXBkYXRlKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OmNyZWF0ZVRpbGVkQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdl
SUQgaW1hZ2VJRCkKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6OkNyZWF0ZVRpbGVkQ29tcG9zaXRlZEltYWdlKGltYWdlSUQpKTsKK30K
Kwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGVzdHJveVRpbGVkQ29tcG9zaXRlZEltYWdl
KENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgaW1hZ2VJRCkKK3sKKyAgICBpZiAobV9pc1B1
cmdpbmcpCisgICAgICAgIHJldHVybjsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Okxh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkRlc3Ryb3lUaWxlZENvbXBvc2l0ZWRJbWFnZShpbWFn
ZUlEKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZVRpbGVGb3JDb21w
b3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCBpbWFnZUlELCBpbnQgdGls
ZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgdGFyZ2V0UmVjdCkKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Cisg
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpD
cmVhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKGltYWdlSUQsIHRpbGVJRCwgdGFyZ2V0UmVjdCwg
dXBkYXRlSW5mbykpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjp1cGRhdGVUaWxl
Rm9yQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgaW1hZ2VJRCwg
aW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHRhcmdldFJlY3QpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0
cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eTo6VXBkYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShpbWFnZUlELCB0aWxlSUQsIHRhcmdl
dFJlY3QsIHVwZGF0ZUluZm8pKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVt
b3ZlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEIGlt
YWdlSUQsIGludCB0aWxlSUQpCit7CisgICAgaWYgKG1faXNQdXJnaW5nKQorICAgICAgICByZXR1
cm47CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6UmVtb3ZlVGlsZUZvckNvbXBvc2l0
ZWRJbWFnZShpbWFnZUlELCB0aWxlSUQpKTsKK30KKworUGFzc093blB0cjxHcmFwaGljc0NvbnRl
eHQ+IExheWVyVHJlZUNvb3JkaW5hdG9yOjpiZWdpbkNvbXBvc2l0ZWRJbWFnZVVwZGF0ZShjb25z
dCBJbnRTaXplJiBzaXplLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzLCBpbnQmIGF0bGFz
SUQsIEludFBvaW50JiBvZmZzZXQpCit7CisgICAgcmV0dXJuIGJlZ2luQ29udGVudFVwZGF0ZShz
aXplLCBmbGFncywgYXRsYXNJRCwgb2Zmc2V0KTsKK30KKworYm9vbCBMYXllclRyZWVDb29yZGlu
YXRvcjo6bGF5ZXJUcmVlQ29tcG9zaXRlZEltYWdlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCk7Cit9CisKIHZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lELCBjb25z
dCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKIHsKICAgICBtX3dlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0ZVVwZGF0ZUF0bGFz
KGF0bGFzSUQsIGhhbmRsZSkpOwpAQCAtNjE1LDYgKzYwNSw4IEBAIHZvaWQgTGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OmNyZWF0ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lELCBjb25zdCBTaGFyZWFibGVT
dXJmYWNlCiAKIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbW92ZVVwZGF0ZUF0bGFzKGlu
dCBhdGxhc0lEKQogeworICAgIGlmIChtX2lzUHVyZ2luZykKKyAgICAgICAgcmV0dXJuOwogICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6UmVt
b3ZlVXBkYXRlQXRsYXMoYXRsYXNJRCkpOwogfQogCkBAIC02OTAsMTQgKzY4MiwxMyBAQCBib29s
IExheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25z
dAogCiB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpwdXJnZUJhY2tpbmdTdG9yZXMoKQogewor
ICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiBwdXJnaW5nVG9nZ2xlKG1faXNQdXJnaW5nLCB0cnVl
KTsKKwogICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0
ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKICAgICBmb3IgKEhhc2hTZXQ8
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gbV9yZWdp
c3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgKCppdCktPnB1
cmdlQmFja2luZ1N0b3JlcygpOwogCi0gICAgcHVyZ2VSZWxlYXNlZEltYWdlcygpOwotCi0gICAg
QVNTRVJUKCFtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnNpemUoKSk7Ci0gICAg
QVNTRVJUKCFtX3JlbGVhc2VkRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnNpemUoKSk7CisgICAg
bV9jb21wb3NpdGVkSW1hZ2VzLmNsZWFyKCk7CiAgICAgbV91cGRhdGVBdGxhc2VzLmNsZWFyKCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRv
ci5oCmluZGV4IGNhY2I2OGVhYWU1Yjk3OWExNTViNzA1NjRlZGMxODJlZTNkYTMwOTUuLjAzNDAw
NDQ2YjFkZmY0ODEzMTJiNWZhOTljZjU1NDk0NzY4OTJlZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNv
b3JkaW5hdG9yLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaApAQCAtMjIsNiArMjIsNyBAQAog
CiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRD
b21wb3NpdGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCIK
ICNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5o
IgpAQCAtNDAsNiArNDEsNyBAQCBjbGFzcyBXZWJQYWdlOwogY2xhc3MgTGF5ZXJUcmVlQ29vcmRp
bmF0b3IgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVu
dAogICAgICwgcHVibGljIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudAogICAgICwgcHVi
bGljIFVwZGF0ZUF0bGFzQ2xpZW50CisgICAgLCBwdWJsaWMgQ29vcmRpbmF0ZWRDb21wb3NpdGVk
SW1hZ2VDbGllbnQKICAgICAsIHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+IGNy
ZWF0ZShXZWJQYWdlKik7CkBAIC02Nyw5ICs2OSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgcGF1c2VSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSB0cnVlOyB9CiAgICAgdmlydHVh
bCB2b2lkIHJlc3VtZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOyBzY2hlZHVs
ZUxheWVyRmx1c2goKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VTY2FsZUZhY3RvckRpZENo
YW5nZSgpIHsgfQotICAgIHZpcnR1YWwgaW50NjRfdCBhZG9wdEltYWdlQmFja2luZ1N0b3JlKFdl
YkNvcmU6OkltYWdlKik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VJbWFnZUJhY2tpbmdTdG9y
ZShpbnQ2NF90KTsKIAorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDb29yZGluYXRlZENvbXBvc2l0
ZWRJbWFnZT4gYWRvcHRDb21wb3NpdGVkSW1hZ2UoV2ViQ29yZTo6SW1hZ2UqKSBPVkVSUklERTsK
ICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25z
dCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNl
VXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlEKTsKQEAgLTExMyw2ICsxMTQsMTggQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKik7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29u
c3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBjbGlwUmVjdCk7CiAKKyAgICAvLyBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUNsaWVudAor
ICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9z
aXRlZEltYWdlSUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlZENvbXBv
c2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGVzdHJveVRpbGVkQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9z
aXRlZEltYWdlSUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlRm9yQ29t
cG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQsIGludCB0aWxlSUQsIGNv
bnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKENvb3JkaW5h
dGVkQ29tcG9zaXRlZEltYWdlSUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZv
JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQs
IGludCB0aWxlSUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ+IGJlZ2luQ29tcG9zaXRlZEltYWdlVXBkYXRlKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzLCBpbnQmIGF0bGFzSUQsIFdlYkNvcmU6
OkludFBvaW50JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGxheWVyVHJlZUNvbXBvc2l0
ZWRJbWFnZVRpbGVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0IE9WRVJSSURFOworCisgICAgdm9pZCB1
cGRhdGVDb21wb3NpdGVkSW1hZ2VzKCk7CisKICAgICAvLyBHcmFwaGljc0xheWVyRmFjdG9yeQog
ICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBjcmVhdGVHcmFw
aGljc0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQqKSBPVkVSUklERTsKIApAQCAt
MTI2LDcgKzEzOSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzeW5jRGlzcGxheVN0YXRlKCk7CiAg
ICAgdm9pZCBsb2NrQW5pbWF0aW9ucygpOwogICAgIHZvaWQgdW5sb2NrQW5pbWF0aW9ucygpOwot
ICAgIHZvaWQgcHVyZ2VSZWxlYXNlZEltYWdlcygpOwogCiAgICAgdm9pZCBsYXllckZsdXNoVGlt
ZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxMYXllclRyZWVDb29yZGluYXRvcj4qKTsKIApAQCAtMTQ3
LDEyICsxNTksMTMgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyKj4gbV9yZWdpc3RlcmVkTGF5ZXJzOwogICAgIFZlY3RvcjxXZWJMYXll
cklEPiBtX2RldGFjaGVkTGF5ZXJzOwotICAgIEhhc2hNYXA8aW50NjRfdCwgaW50PiBtX2RpcmVj
dGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzOwotICAgIFZlY3RvcjxpbnQ2NF90PiBtX3JlbGVh
c2VkRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzOworICAgIHR5cGVkZWYgSGFzaE1hcDxDb29yZGlu
YXRlZENvbXBvc2l0ZWRJbWFnZUlELCBSZWZQdHI8Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U+
ID4gQ29tcG9zaXRlZEltYWdlTWFwOworICAgIENvbXBvc2l0ZWRJbWFnZU1hcCBtX2NvbXBvc2l0
ZWRJbWFnZXM7CiAgICAgVmVjdG9yPE93blB0cjxVcGRhdGVBdGxhcz4gPiBtX3VwZGF0ZUF0bGFz
ZXM7CiAKICAgICBib29sIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOwogICAgIGJv
b2wgbV9pc1ZhbGlkOworICAgIGJvb2wgbV9pc1B1cmdpbmc7CiAKICAgICBib29sIG1fd2FpdGlu
Z0ZvclVJUHJvY2VzczsKICAgICBib29sIG1faXNTdXNwZW5kZWQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172717</attachid>
            <date>2012-11-06 21:48:15 -0800</date>
            <delta_ts>2012-11-11 18:54:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101023-20121107144620.patch</filename>
            <type>text/plain</type>
            <size>78611</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzNzIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTMwNDFhYWRkMzM0NWE5
YzM4YzJhODQwNDkzOWMzYWE4NzJiZGQ3Mi4uMDRkMzYyMGZiYTlmYjc0ZTNlZDE5Mjc2OWUwYmMz
OWEwMjg5ODlmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTExLTA2ICBIdWFu
ZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIENvb3JkaW5h
dGVkIEdyYXBoaWNzOiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgaGFuZGxlcyBhIGNvbXBvc2l0
ZWQgaW1hZ2Ugd2l0aCBUaWxlZEJhY2tpbmdTdG9yZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTAyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBhIHBvdGVudGlhbCBidWcgaW4gR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIuCisgICAgICAgIG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyIG11
c3QgYmUgaW5pdGlhbGllZC4gT3RoZXJ3aXNlIHRoZSBtZW1iZXIncworICAgICAgICB1bmRlZmlu
ZWQgdmFsdWUgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvdXIuCisKKyAgICAgICAgSW4gYWRk
aXRpb24sIGZpeCBzb21lIG5pdHMgaW4gVGlsZWRCYWNraW5nU3RvcmUgYW5kIFRleHR1cmVNYXBw
ZXJMYXllci4KKworICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWU6OnNldFRpbGVkQmFja2luZ1N0b3JlRW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRC
YWNraW5nU3RvcmU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoVGlsZWRCYWNraW5n
U3RvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcjo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1M
YXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJM
YXllci5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpzZXRCYWNraW5n
U3RvcmUpOgorCiAyMDEyLTExLTA2ICBEYW4gQmVhbSAgPGRiZWFtQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBFbmFibGUgUkVRVUVTVF9BVVRPQ09NUExFVEUgZm9yIGNocm9taXVtIHBvcnQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwppbmRleCA1YzEwYTRlNzM3ODExY2E3MjE5ZDRjMDllZDg5MDNhYjI0ZmY4NzUwLi5hZjAw
OWM4OWEyMzE3OTA2OWU2MDkxODJiMzJkYjI4ZmY1OGMxZDg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTQ3IEBACisyMDEyLTExLTA2ICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkx
MDAubmV0PgorCisgICAgICAgIENvb3JkaW5hdGVkIEdyYXBoaWNzOiBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIgaGFuZGxlcyBhIGNvbXBvc2l0ZWQgaW1hZ2Ugd2l0aCBUaWxlZEJhY2tpbmdTdG9y
ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTAy
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJl
bnRseSwgQ29vcmRpbmF0ZWQgR3JhcGhpY3MgaGFzIHNldmVyYWwgcHJvYmxlbXMgaW4gdGVybXMg
b2YgaGFuZGxpbmcgYQorICAgICAgICBjb21wb3NpdGVkIGltYWdlLgorICAgICAgICAxLiBFdmVu
IGlmIGEgY29tcG9zaXRlZCBpbWFnZSBpcyBvZmYgdGhlIHZpZXdwb3J0LCBUZXh0dXJlTWFwcGVy
TGF5ZXIgY2FuIG5vdAorICAgICAgICByZW1vdmUgYW4gaW1hZ2UgdGV4dHVyZS4KKyAgICAgICAg
Mi4gV2UgY2FuIG5vdCBzZW5kIGFuIGltYWdlIHRvIFVJIFByb2Nlc3MgdXNpbmcgR3JhcGhpY3NT
dXJmYWNlLCBiZWNhdXNlCisgICAgICAgIEdyYXBoaWNzU3VyZmFjZSBoYXMgdGhlIHNpemUgbGlt
aXRhdGlvbi4oR0xfTUFYX1RFWFRVUkVfU0laRSkKKyAgICAgICAgMy4gV2UgbXVzdCBhbGxvY2F0
ZSBiaWcgY29udGludW91cyBtZW1vcnkgd2hlbiBhbiBpbWFnZSBpcyBiaWcuCisKKyAgICAgICAg
SWYgd2UgdXNlIFRpbGVkQmFja2luZ1N0b3JlIHRvIGhhbmRsZSBhIGNvbXBvc2l0ZWQgaW1hZ2Us
IHdlIGNhbiBnZXQgZm9sbG93aW5nCisgICAgICAgIGJlbmVmaXRzLgorICAgICAgICAxLiBXaGVu
IGEgY29tcG9zaXRlZCBpbWFnZSBpcyBvZmYgdGhlIHZpZXdwb3J0LCBUZXh0dXJlTWFwcGVyTGF5
ZXIgY2FuIHJlbW92ZSBhbgorICAgICAgICBpbWFnZSB0ZXh0dXJlIHRvIHNhdmUgdGV4dHVyZSBt
ZW1vcnkuIE1vcmVvdmVyLCBpZiB0aGUgaW1hZ2UgaXMgYmlnIGFuZCB0aGUgcGFydAorICAgICAg
ICBpcyBvbiB0aGUgdmlld3BvcnQsIHdlIGNhbiByZW1vdmUgb25seSBpbnZpc2libGUgdGlsZXMs
IG5vdCB0aGUgd2hvbGUgaW1hZ2UuCisgICAgICAgIDIuIFdlIGNhbiB1c2UgR3JhcGhpY3NTdXJm
YWNlIHRvIHNlbmQgYW4gaW1hZ2UgdG8gVUkgUHJvY2Vzcy4KKyAgICAgICAgMy4gV2UgY2FuIHNl
bmQgYSBiaWcgaW1hZ2UgdG8gVUkgUHJvY2VzcyB1c2luZyBtYW55IHNtYWxsIHRpbGVzLgorCisg
ICAgICAgIFdlIGNyZWF0ZSBvbmx5IG9uZSBUaWxlZEJhY2tpbmdTdG9yZSBwZXIgaW1hZ2UgKGUu
Zy4gaW4gdGhlIGxlYXZlcyBkZW1vIHdlIGhhdmUKKyAgICAgICAgb25seSAzIGxlYXZlIFRpbGVk
QmFja2luZ1N0b3JlcykuCisKKyAgICAgICAgSW4gYWRkaXRpb24sIHRoaXMgcGF0Y2ggZml4ZXMg
dGhlIGJ1ZyB0aGF0IENvb3JkaW5hdGVkIEdyYXBoaWNzIG9ubHkgcmVuZGVycyB0aGUKKyAgICAg
ICAgZmlyc3QgZnJhbWUgb2YgYSBnaWYgYW5pbWF0aW9uIGltYWdlLgorCisgICAgICAgICogU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRC5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogU2hhcmVkL1dlYkxheWVyVHJlZUlu
Zm8uaDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJJbmZvOjpXZWJMYXllckluZm8pOgorICAg
ICAgICAoV2ViTGF5ZXJJbmZvKToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpjcmVhdGVUaWxl
Rm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojp1
cGRhdGVUaWxlRm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpyZW1vdmVUaWxlRm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlVGlsZWRDb21wb3NpdGVk
SW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkZXN0
cm95VGlsZWRDb21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29y
ZGluYXRvclByb3h5OjpjcmVhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRlVGlsZUZvckNvbXBvc2l0ZWRJ
bWFnZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnJlbW92
ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29y
ZGluYXRvclByb3h5OjpwdXJnZUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaDoKKyAgICAgICAg
KExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW46CisgICAg
ICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJTdGF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjphc3NpZ25JbWFnZVRvTGF5ZXIpOgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6Omdl
dEJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpjcmVh
dGVUaWxlRm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6cmVt
b3ZlVGlsZUZvckxheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OnVw
ZGF0ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpj
cmVhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRp
bGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxlZENvbXBvc2l0ZWRJ
bWFnZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95VGlsZWRD
b21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6cmVt
b3ZlUmVsZWFzZWRJbWFnZXNJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJl
bmRlcmVyOjpjcmVhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFn
ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpnZXRCYWNraW5nU3RvcmVG
b3JDb21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6
cHVyZ2VHTFJlc291cmNlcyk6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlUmVuZGVyZXIuaDoKKyAgICAgICAgKExheWVyVHJlZVJlbmRlcmVyKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZENvbXBvc2l0ZWRJbWFnZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFdlYktpdDo6Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U6OmdldENvb3JkaW5hdGVkQ29tcG9z
aXRlZEltYWdlSUQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFn
ZTo6Y3JlYXRlKToKKyAgICAgICAgKENvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9yZSk6CisgICAg
ICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlOjpDb29yZGluYXRlZENvbXBv
c2l0ZWRJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdl
Ojp+Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZENvbXBvc2l0ZWRJbWFnZTo6YWRkTGF5ZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpD
b29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6cmVtb3ZlTGF5ZXJDbGllbnQpOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6aW52YWxpZGF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlOjp1cGRhdGUpOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6dmlzaWJsZVJlY3QpOgorICAgICAg
ICAoV2ViS2l0OjpDb21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmU6OkNvbXBvc2l0ZWRUaWxlZEJh
Y2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9y
ZTo6fkNvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBv
c2l0ZWRUaWxlZEJhY2tpbmdTdG9yZTo6dXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9z
aXRlZFRpbGVkQmFja2luZ1N0b3JlOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4pOgorICAg
ICAgICAoV2ViS2l0OjpDb21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmU6OnRpbGVkQmFja2luZ1N0
b3JlUGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmU6
OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGVk
VGlsZWRCYWNraW5nU3RvcmU6OnRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQpOgorICAg
ICAgICAoV2ViS2l0OjpDb21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmU6OnRpbGVkQmFja2luZ1N0
b3JlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRlZFRpbGVkQmFja2lu
Z1N0b3JlOjp0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYktpdDo6
Q29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3JlOjp0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRD
b2xvcik6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9yZTo6YmVn
aW5Db250ZW50VXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRlZFRpbGVkQmFja2lu
Z1N0b3JlOjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRlZFRpbGVkQmFj
a2luZ1N0b3JlOjp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRlZFRpbGVk
QmFja2luZ1N0b3JlOjpyZW1vdmVUaWxlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS5oOiBBZGRlZC4K
KyAgICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgdXNlcyBDb29yZGluYXRlZENvbXBv
c2l0ZWRJbWFnZSB0byBoYW5kbGUgYQorICAgICAgICAgIGNvbXBvc2l0ZWQgaW1hZ2UuIENvb3Jk
aW5hdGVkQ29tcG9zaXRlZEltYWdlIHBsYXlzIGEgcm9sZSBpbiBpbWFnZQorICAgICAgICAgIHJl
c291cmNlIG1hbmFnZW1lbnQ6IHNlbmRpbmcgdGhlIGltYWdlIHRvIFVJIFByb2Nlc3MsIHJlbW92
aW5nIGFuCisgICAgICAgICAgaW52aXNpYmxlIHBhcnQgb2YgdGhlIGltYWdlIGFuZCByZXBhaW50
aW5nIHdoaWxlIGEgZ2lmIGFuaW1hdGlvbgorICAgICAgICAgIHByb2dyZXNzZXMuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChDb29yZGluYXRlZENvbXBv
c2l0ZWRJbWFnZUNsaWVudCk6CisgICAgICAgIChDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUdy
YXBoaWNzTGF5ZXJDbGllbnQpOgorICAgICAgICAoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2Up
OgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6aWQpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OmRpZENoYW5nZUNvbXBvc2l0ZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRlZEltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9y
VGhpc0xheWVyT25seSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OmNvbXBvc2l0ZWRJbWFnZVZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6cmVsZWFzZUNvbXBvc2l0ZWRJbWFnZUlmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlQmFja2luZ1N0
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YmVnaW5D
b250ZW50VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6aGFzUGVuZGluZ1Zpc2libGVDaGFuZ2VzKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
aDoKKyAgICAgICAgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk6CisgICAgICAgIChD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OkxheWVyVHJlZUNvb3JkaW5hdG9yKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdl
cyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjphZG9wdENvbXBvc2l0
ZWRJbWFnZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVD
b29yZGluYXRvcjo6cmVsZWFzZUNvbXBvc2l0ZWRJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUNvb3JkaW5hdG9yOjp1cGRhdGVDb21wb3NpdGVkSW1hZ2VzKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZVRpbGVkQ29tcG9zaXRlZEltYWdlKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRlc3Ryb3lUaWxlZENvbXBv
c2l0ZWRJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVh
dGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OnVwZGF0ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVDb29yZGluYXRvcjo6cmVtb3ZlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpiZWdpbkNvbXBvc2l0ZWRJbWFn
ZVVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllclRy
ZWVDb21wb3NpdGVkSW1hZ2VUaWxlVXBkYXRlc0FsbG93ZWQpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVDb29yZGluYXRvcjo6cmVtb3ZlVXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVDb29yZGluYXRvcjo6cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRv
ci5oOgorICAgICAgICAoTGF5ZXJUcmVlQ29vcmRpbmF0b3IpOgorCiAyMDEyLTExLTA2ICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIEphdmEg
cmVsYXRlZCBXS1NJIGZ1bmN0aW9uIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IGFlOGYz
OTcyYTMxZjhhZWY1OTE0MjRmZGNlYzZkY2VmYzllNGEyY2QuLjg2MjJiMWMzYjRlOTZiMzdmYzY2
MzA3N2NhMTRjYTMyNzgxYjk0Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC04MjYsNyArODI2
LDcgQEAgdm9pZCBGcmFtZTo6c2V0VGlsZWRCYWNraW5nU3RvcmVFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKICAgICB9CiAgICAgaWYgKG1fdGlsZWRCYWNraW5nU3RvcmUpCiAgICAgICAgIHJldHVybjsK
LSAgICBtX3RpbGVkQmFja2luZ1N0b3JlID0gYWRvcHRQdHIobmV3IFRpbGVkQmFja2luZ1N0b3Jl
KHRoaXMpKTsKKyAgICBtX3RpbGVkQmFja2luZ1N0b3JlID0gVGlsZWRCYWNraW5nU3RvcmU6OmNy
ZWF0ZSh0aGlzKTsKICAgICBpZiAobV92aWV3KQogICAgICAgICBtX3ZpZXctPnNldFBhaW50c0Vu
dGlyZUNvbnRlbnRzKHRydWUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwCmluZGV4IGM1NjRkYmVkMDZkOGQ5Mjdh
NzE1ZDIzNmQ3NzQ4ZGU3YWRlMDJjNTkuLjk3YzRhM2VmODhhMWM3NGFlNzA2Y2YzNDI0MGIwOWUw
MzdkZGExNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Rp
bGVkQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAKQEAgLTM1LDYgKzM1LDExIEBAIHN0YXRpYyBJbnRQb2lu
dCBpbm5lckJvdHRvbVJpZ2h0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgcmV0dXJuIEludFBv
aW50KHJlY3QubWF4WCgpIC0gMSwgcmVjdC5tYXhZKCkgLSAxKTsKIH0KIAorUGFzc093blB0cjxU
aWxlZEJhY2tpbmdTdG9yZT4gVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZShUaWxlZEJhY2tpbmdT
dG9yZUNsaWVudCogY2xpZW50LCBQYXNzT3duUHRyPFRpbGVkQmFja2luZ1N0b3JlQmFja2VuZD4g
YmFja2VuZCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRpbGVkQmFja2luZ1N0b3JlKGNs
aWVudCwgYmFja2VuZCkpOworfQorCiBUaWxlZEJhY2tpbmdTdG9yZTo6VGlsZWRCYWNraW5nU3Rv
cmUoVGlsZWRCYWNraW5nU3RvcmVDbGllbnQqIGNsaWVudCwgUGFzc093blB0cjxUaWxlZEJhY2tp
bmdTdG9yZUJhY2tlbmQ+IGJhY2tlbmQpCiAgICAgOiBtX2NsaWVudChjbGllbnQpCiAgICAgLCBt
X2JhY2tlbmQoYmFja2VuZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9UaWxlZEJhY2tpbmdTdG9yZS5oCmluZGV4IGIzYzM2NWMzNTljZTI2MWQ5OWFlYTg0YWQ4
Y2U1NjVjMWNhODdlNGQuLmQ2NGFlMGMwYzQ4NTlkMDg0ODQ3ZTg1MjVkMjg3OGZlYTk1Zjg0OTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2lu
Z1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNr
aW5nU3RvcmUuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC00MSw3ICs0Miw3IEBAIGNsYXNzIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50
OwogY2xhc3MgVGlsZWRCYWNraW5nU3RvcmUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRp
bGVkQmFja2luZ1N0b3JlKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAg
VGlsZWRCYWNraW5nU3RvcmUoVGlsZWRCYWNraW5nU3RvcmVDbGllbnQqLCBQYXNzT3duUHRyPFRp
bGVkQmFja2luZ1N0b3JlQmFja2VuZD4gPSBUaWxlZEJhY2tpbmdTdG9yZUJhY2tlbmQ6OmNyZWF0
ZSgpKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxUaWxlZEJhY2tpbmdTdG9yZT4gY3JlYXRlKFRp
bGVkQmFja2luZ1N0b3JlQ2xpZW50KiwgUGFzc093blB0cjxUaWxlZEJhY2tpbmdTdG9yZUJhY2tl
bmQ+ID0gVGlsZWRCYWNraW5nU3RvcmVCYWNrZW5kOjpjcmVhdGUoKSk7CiAgICAgflRpbGVkQmFj
a2luZ1N0b3JlKCk7CiAKICAgICBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudCogY2xpZW50KCkgeyBy
ZXR1cm4gbV9jbGllbnQ7IH0KQEAgLTgwLDYgKzgxLDggQEAgcHVibGljOgogICAgIGJvb2wgc3Vw
cG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VwcG9ydHNBbHBoYTsgfQogCiBwcml2YXRl
OgorICAgIFRpbGVkQmFja2luZ1N0b3JlKFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50KiwgUGFzc093
blB0cjxUaWxlZEJhY2tpbmdTdG9yZUJhY2tlbmQ+KTsKKwogICAgIHZvaWQgc3RhcnRUaWxlQnVm
ZmVyVXBkYXRlVGltZXIoKTsKICAgICB2b2lkIHN0YXJ0QmFja2luZ1N0b3JlVXBkYXRlVGltZXIo
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggNDE4
OTdjNjNlODE4NWQ5NmU4NTBjM2FiNjIyZmYyMDliZTkxNjZhZS4uZmRkYjc4OTc1NmE0NDVkNzk0
ZTg4Mzg4YWFmYWZmNDZhZWNhNjg3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIuY3BwCkBAIC00NCw2ICs0NCw3IEBAIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4g
R3JhcGhpY3NMYXllcjo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKIEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihHcmFwaGlj
c0xheWVyQ2xpZW50KiBjbGllbnQpCiAgICAgOiBHcmFwaGljc0xheWVyKGNsaWVudCkKICAgICAs
IG1fbGF5ZXIoYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJMYXllcigpKSkKKyAgICAsIG1fY29t
cG9zaXRlZE5hdGl2ZUltYWdlUHRyKDApCiAgICAgLCBtX2NoYW5nZU1hc2soMCkKICAgICAsIG1f
bmVlZHNEaXNwbGF5KGZhbHNlKQogICAgICwgbV9maXhlZFRvVmlld3BvcnQoZmFsc2UpCkBAIC0z
NTEsOCArMzUyLDEwIEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRl
bnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiAgICAgICAgIGlmICghbV9jb21wb3NpdGVkSW1hZ2Up
CiAgICAgICAgICAgICBtX2NvbXBvc2l0ZWRJbWFnZSA9IFRleHR1cmVNYXBwZXJUaWxlZEJhY2tp
bmdTdG9yZTo6Y3JlYXRlKCk7CiAgICAgICAgIG1fY29tcG9zaXRlZEltYWdlLT5zZXRDb250ZW50
c1RvSW1hZ2UoaW1hZ2UpOwotICAgIH0gZWxzZQorICAgIH0gZWxzZSB7CisgICAgICAgIG1fY29t
cG9zaXRlZE5hdGl2ZUltYWdlUHRyID0gMDsKICAgICAgICAgbV9jb21wb3NpdGVkSW1hZ2UgPSAw
OworICAgIH0KIAogICAgIHNldENvbnRlbnRzVG9NZWRpYShtX2NvbXBvc2l0ZWRJbWFnZS5nZXQo
KSk7CiAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6Q29udGVudENoYW5nZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCmluZGV4IDUxMGIyM2Y1YzAy
NDVkZTRjZjJiMDNkMDJiNDNiZWFmMzkyOGI4ZDIuLmU3ZWRkNjI5YzFmMTM1OWE3OGM2ODQyOTcy
NjZiYzUxNzA5NTEzYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5o
CkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb21wb3Np
dGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbXBv
c2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5hbWUo
Y29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3Jt
TGF5ZXIoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBw
bGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c0xheWVyOyB9CiAKICAgICB2
b2lkIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6OkNoYW5nZU1hc2spOwogICAgIGlu
bGluZSBpbnQgY2hhbmdlTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbmdlTWFzazsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJMYXllci5oCmluZGV4IDVjZDk1OWQ2MTNkODM0YTQ5Y2E5NjFlMTczMTk4MTAz
YzRjMmIwNjkuLmQ1YTkyOGIzNjY0OTI3YTYzOWVhYzZjZTQwOWNlYzUyMmYwZDAyZDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckxheWVyLmgKQEAgLTEyOCw3ICsxMjgsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBwYWludCgpOwogCiAgICAgdm9pZCBzZXRTaG91bGRVcGRhdGVCYWNraW5nU3RvcmVGcm9tTGF5
ZXIoYm9vbCBiKSB7IG1fc2hvdWxkVXBkYXRlQmFja2luZ1N0b3JlRnJvbUxheWVyID0gYjsgfQot
ICAgIHZvaWQgc2V0QmFja2luZ1N0b3JlKFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUqIGJhY2tp
bmdTdG9yZSkgeyBtX2JhY2tpbmdTdG9yZSA9IGJhY2tpbmdTdG9yZTsgfQorICAgIHZvaWQgc2V0
QmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4gYmFja2lu
Z1N0b3JlKSB7IG1fYmFja2luZ1N0b3JlID0gYmFja2luZ1N0b3JlOyB9CiAgICAgUGFzc1JlZlB0
cjxUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoKSB7IHJldHVybiBtX2Jh
Y2tpbmdTdG9yZTsgfQogICAgIHZvaWQgY2xlYXJCYWNraW5nU3RvcmVzUmVjdXJzaXZlKCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktp
dDIvQ01ha2VMaXN0cy50eHQKaW5kZXggNmU0NmY0OGE5OWUzMTJiMzcwNjMxY2FiMjMzMjdiOTJi
NTU1Y2IxZS4uYzhjNGRiYzU1OWYwMzdmNTFhY2RlYWNhMWI5MGQ1ZDc2YmU2Yjc2MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIv
Q01ha2VMaXN0cy50eHQKQEAgLTQ5NCw2ICs0OTQsNyBAQCBTRVQoV2ViS2l0Ml9TT1VSQ0VTCiAg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcAogICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5jcHAKIAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLmNwcAogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ci5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZFRpbGUuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELmggYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENvbXBv
c2l0ZWRJbWFnZUlELmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjhlZWE2OWU2MjY1ODZlZDQ1NzNjYWM3ZDQzMzZl
NDIzMTVlNGMzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQuaApAQCAtMCwwICsx
LDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBDb29yZGluYXRlZENvbXBvc2l0
ZWRJbWFnZUlEX2gKKyNkZWZpbmUgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRF9oCisKKyNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCituYW1lc3BhY2UgV2ViS2l0IHsKK3R5cGVkZWYg
dWludHB0cl90IENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQ7CitlbnVtIHsgSW52YWxpZENv
b3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgPSAwIH07Cit9CisjZW5kaWYKKyNlbmRpZiAvLyBD
b29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5
ZXJUcmVlSW5mby5oCmluZGV4IDU4ZTA3YmMwMjdlZmQ1YzFhOTU5YjNiMGM2MThlNGFlMDVjZTc4
ZTguLmE0MzE2NDEzNDViMTk3YzQzMzRkOWJiZmYzZGFkMWVkMTllZGYwZjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKKysrIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaApAQCAtMjQsMTAgKzI0LDEwIEBACiAKICNp
bmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKICNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIK
KyNpbmNsdWRlICJDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELmgiCiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXll
ci5oIgotI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IApAQCAtMzksMTMgKzM5LDEzIEBAIHN0cnVjdCBXZWJMYXllckluZm8gewogICAgIFdlYkxheWVy
SW5mbygpCiAgICAgICAgIDogcmVwbGljYShJbnZhbGlkV2ViTGF5ZXJJRCkKICAgICAgICAgLCBt
YXNrKEludmFsaWRXZWJMYXllcklEKQotICAgICAgICAsIGltYWdlQmFja2luZ1N0b3JlSUQoMCkK
KyAgICAgICAgLCBpbWFnZUlEKEludmFsaWRDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEKQog
ICAgICAgICAsIG9wYWNpdHkoMCkKICAgICAgICAgLCBmbGFncygwKSB7IH0KIAogICAgIFdlYkxh
eWVySUQgcmVwbGljYTsKICAgICBXZWJMYXllcklEIG1hc2s7Ci0gICAgaW50NjRfdCBpbWFnZUJh
Y2tpbmdTdG9yZUlEOworICAgIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgaW1hZ2VJRDsK
IAogICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9zOwogICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQz
RCBhbmNob3JQb2ludDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9T
b3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IGFhMjM3NDhkMjdmNDk3NWU2ZmY4ODc0NGFl
ZWUxNTI0Y2VhMjkyMWQuLmE1YjkyNjc5NDI0NjNkMTMwZWEwYmRmMzU0OGZlOGYwNGU4MDFmN2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktp
dDIvVGFyZ2V0LnByaQpAQCAtMTM0LDYgKzEzNCw3IEBAIEhFQURFUlMgKz0gXAogICAgIFNoYXJl
ZC9XZWJVUkxSZXF1ZXN0LmggXAogICAgIFNoYXJlZC9XZWJVUkxSZXNwb25zZS5oIFwKICAgICBT
aGFyZWQvV2ViVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmggXAorICAgIFNoYXJlZC9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQuaCBcCiAgICAgU2hhcmVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmggXAog
ICAgIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkN1c3RvbUZpbHRlclByb2dyYW0uaCBc
CiAgICAgU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5Nb2R1bGUuaCBcCkBA
IC0zNjMsNiArMzY0LDcgQEAgSEVBREVSUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Ry
YXdpbmdBcmVhSW1wbC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVy
LmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oIFwKKyAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENvbXBvc2l0ZWRJ
bWFnZS5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmggXApAQCAtNzM5LDYgKzc0
MSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FbmNvZGVyQWRhcHRl
ci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwIFwKICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIFwKKyAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS5j
cHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcCBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVD
b29yZGluYXRvclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCmluZGV4IDRkNDNmZWI4MTcw
MGU5NTc5Y2M3NjZlZWE3MzdmYThjNzY1MDNkNTYuLjkxMGU0MzE2YmRmMjI4OTU3OTMxNDE2NDVl
MzY0NDQxYmUzZGI1Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkuY3BwCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eTo6ZGlzcGF0Y2hVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCiAK
IHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlVGlsZUZvckxheWVyKGludCBs
YXllcklELCBpbnQgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBXZWJL
aXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQogewotICAgIGRpc3BhdGNoVXBkYXRl
KGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBs
YXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IpKTsKKyAgICBkaXNwYXRjaFVw
ZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlVGlsZUZvckxheWVyLCBtX3JlbmRl
cmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IpKTsKICAg
ICB1cGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0YXJnZXRSZWN0LCB1cGRhdGVJ
bmZvKTsKIH0KIApAQCAtNjYsMTIgKzY2LDQwIEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eTo6dXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zCiB7
CiAgICAgU3VyZmFjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N1cmZhY2VzLmZpbmQodXBkYXRlSW5m
by5hdGxhc0lEKTsKICAgICBBU1NFUlQoaXQgIT0gbV9zdXJmYWNlcy5lbmQoKSk7Ci0gICAgZGlz
cGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGUsIG1fcmVuZGVy
ZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwgTGF5ZXJUcmVlUmVuZGVyZXI6OlRpbGVVcGRhdGUo
dXBkYXRlSW5mby51cGRhdGVSZWN0LCB0YXJnZXRSZWN0LCBpdC0+dmFsdWUsIHVwZGF0ZUluZm8u
c3VyZmFjZU9mZnNldCkpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5k
ZXJlcjo6dXBkYXRlVGlsZUZvckxheWVyLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxl
SUQsIExheWVyVHJlZVJlbmRlcmVyOjpUaWxlVXBkYXRlKHVwZGF0ZUluZm8udXBkYXRlUmVjdCwg
dGFyZ2V0UmVjdCwgaXQtPnZhbHVlLCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpKSk7CiB9CiAK
IHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKGludCBs
YXllcklELCBpbnQgdGlsZUlEKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJl
ZVJlbmRlcmVyOjpyZW1vdmVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQp
KTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlVGls
ZUZvckxheWVyLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQpKTsKK30KKwordm9p
ZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpjcmVhdGVUaWxlZENvbXBvc2l0ZWRJbWFnZShD
b29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEIGltYWdlSUQpCit7CisgICAgZGlzcGF0Y2hVcGRh
dGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZVRpbGVkQ29tcG9zaXRlZEltYWdlLCBt
X3JlbmRlcmVyLmdldCgpLCBpbWFnZUlEKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6ZGVzdHJveVRpbGVkQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRl
ZEltYWdlSUQgaW1hZ2VJRCkKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVS
ZW5kZXJlcjo6ZGVzdHJveVRpbGVkQ29tcG9zaXRlZEltYWdlLCBtX3JlbmRlcmVyLmdldCgpLCBp
bWFnZUlEKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlVGls
ZUZvckNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEIGltYWdlSUQs
IGludCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFdlYktpdDo6U3Vy
ZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgm
TGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UsIG1fcmVuZGVy
ZXIuZ2V0KCksIGltYWdlSUQsIHRpbGVJRCwgdXBkYXRlSW5mby5zY2FsZUZhY3RvcikpOworICAg
IHVwZGF0ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UoaW1hZ2VJRCwgdGlsZUlELCB0YXJnZXRSZWN0
LCB1cGRhdGVJbmZvKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojp1cGRh
dGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgaW1h
Z2VJRCwgaW50IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgV2ViS2l0
OjpTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBTdXJmYWNlTWFwOjppdGVy
YXRvciBpdCA9IG1fc3VyZmFjZXMuZmluZCh1cGRhdGVJbmZvLmF0bGFzSUQpOworICAgIEFTU0VS
VChpdCAhPSBtX3N1cmZhY2VzLmVuZCgpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXll
clRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZSwgbV9yZW5kZXJlci5n
ZXQoKSwgaW1hZ2VJRCwgdGlsZUlELCBMYXllclRyZWVSZW5kZXJlcjo6VGlsZVVwZGF0ZSh1cGRh
dGVJbmZvLnVwZGF0ZVJlY3QsIHRhcmdldFJlY3QsIGl0LT52YWx1ZSwgdXBkYXRlSW5mby5zdXJm
YWNlT2Zmc2V0KSkpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnJlbW92
ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCBpbWFn
ZUlELCBpbnQgdGlsZUlEKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJl
bmRlcmVyOjpyZW1vdmVUaWxlRm9yQ29tcG9zaXRlZEltYWdlLCBtX3JlbmRlcmVyLmdldCgpLCBp
bWFnZUlELCB0aWxlSUQpKTsKIH0KIAogdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojpj
cmVhdGVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCwgY29uc3QgU2hhcmVhYmxlU3VyZmFjZTo6SGFu
ZGxlJiBoYW5kbGUpCkBAIC0xMjcsMTcgKzE1NSw2IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6ZGlkUmVuZGVyRnJhbWUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGVudHNT
CiAjZW5kaWYKIH0KIAotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpjcmVhdGVEaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSwgY29uc3QgV2ViS2l0OjpTaGFyZWFibGVC
aXRtYXA6OkhhbmRsZSYgaGFuZGxlKQotewotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJp
dG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSk7Ci0gICAgZGlzcGF0Y2hVcGRh
dGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUltYWdlLCBtX3JlbmRlcmVyLmdldCgp
LCBrZXksIGJpdG1hcCkpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmRl
c3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSkKLXsKLSAgICBkaXNwYXRj
aFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6ZGVzdHJveUltYWdlLCBtX3JlbmRlcmVy
LmdldCgpLCBrZXkpKTsKLX0KLQogdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRD
b250ZW50c1NpemUoY29uc3QgRmxvYXRTaXplJiBjb250ZW50c1NpemUpCiB7CiAgICAgZGlzcGF0
Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldENvbnRlbnRzU2l6ZSwgbV9yZW5k
ZXJlci5nZXQoKSwgY29udGVudHNTaXplKSk7CkBAIC0yMDEsNiArMjE4LDkgQEAgdm9pZCBMYXll
clRyZWVDb29yZGluYXRvclByb3h5OjpzeW5jQ2FudmFzKHVpbnQzMl90IGlkLCBjb25zdCBJbnRT
aXplJiBjYW52YXNTaXoKIAogdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpwdXJnZUJh
Y2tpbmdTdG9yZXMoKQogeworICAgIC8vIFdlIGRvbid0IGV4cGVjdCB0byByZWNlaXZlIHRoZSBt
ZXNzYWdlcyByZWxhdGVkIHRvIHJlbGVhc2luZyByZXNvdXJjZXMgZnJvbSBXZWIgUHJvY2VzcyBh
ZnRlciBzZW5kaW5nIHRoZSBQdXJnZUJhY2tpbmdTdG9yZXMgbWVzc2FnZS4KKyAgICAvLyBTZWUg
TGF5ZXJUcmVlUmVuZGVyZXI6OnB1cmdlR0xSZXNvdXJjZXMoKQorICAgIG1fc3VyZmFjZXMuY2xl
YXIoKTsKICAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvcjo6UHVyZ2VCYWNraW5nU3RvcmVzKCksIG1fZHJh
d2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNz
L0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaAppbmRleCA2NDY4MDExNjhmMjRhNzg5YjdlYjgw
NzFjZjRiNmY4YTRjNGZiOTdhLi5hN2M1NjM5ZjUzYTIzZDhmNmU4NzdhYTA4MDhiNTdiMTBiY2U1
NGNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oCkBA
IC0yMyw2ICsyMyw3IEBACiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogCiAjaW5jbHVk
ZSAiQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJ
RC5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIgogI2lu
Y2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKICNpbmNsdWRlICJSZWdpb24uaCIKQEAgLTY1LDEw
ICs2NiwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVy
SUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJmYWNlVXBk
YXRlSW5mbyYpOwogICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQg
dGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8m
KTsKICAgICB2b2lkIHJlbW92ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCk7
CisgICAgdm9pZCBjcmVhdGVUaWxlZENvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0
ZWRJbWFnZUlEKTsKKyAgICB2b2lkIGRlc3Ryb3lUaWxlZENvbXBvc2l0ZWRJbWFnZShDb29yZGlu
YXRlZENvbXBvc2l0ZWRJbWFnZUlEKTsKKyAgICB2b2lkIGNyZWF0ZVRpbGVGb3JDb21wb3NpdGVk
SW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCwgaW50IHRpbGVJRCwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJik7CisgICAgdm9pZCB1cGRh
dGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQsIGlu
dCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5m
byYpOworICAgIHZvaWQgcmVtb3ZlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENv
bXBvc2l0ZWRJbWFnZUlELCBpbnQgdGlsZUlEKTsKICAgICB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFz
KGludCBhdGxhc0lELCBjb25zdCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmKTsKICAgICB2b2lk
IHJlbW92ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lEKTsKLSAgICB2b2lkIGNyZWF0ZURpcmVjdGx5
Q29tcG9zaXRlZEltYWdlKGludDY0X3QsIGNvbnN0IFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpI
YW5kbGUmKTsKLSAgICB2b2lkIGRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90
KTsKICAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvclByb3h5TWVzc2FnZShD
b3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdl
RGVjb2RlciYpOwogICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoKTsKICAgICB2b2lkIHJlbmRlck5l
eHRGcmFtZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkubWVzc2FnZXMuaW4KaW5kZXggYmE4OGRlNTNmZjMzZTQ1ZjFkMDg4YTNkMjA1NTcw
YTQwZmQ0YjU2Ny4uY2UzM2U1ODMxOGI0MTk3NTQzYjY1Y2MxYTA3NzdmYzE4ZTA1MzJmMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1l
c3NhZ2VzLmluCkBAIC0yOSwxMCArMjksMTMgQEAgbWVzc2FnZXMgLT4gTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eSB7CiAgICAgQ3JlYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIGlu
dCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGFyZ2V0UmVjdCwgV2ViS2l0OjpTdXJmYWNlVXBk
YXRlSW5mbyB1cGRhdGVJbmZvKQogICAgIFVwZGF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXll
cklELCBpbnQgdGlsZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRhcmdldFJlY3QsIFdlYktpdDo6U3Vy
ZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKICAgICBSZW1vdmVUaWxlRm9yTGF5ZXIodWludDMy
X3QgbGF5ZXJJRCwgaW50IHRpbGVJRCkKKyAgICBDcmVhdGVUaWxlZENvbXBvc2l0ZWRJbWFnZSh1
aW50cHRyX3QgaW1hZ2VJRCkKKyAgICBEZXN0cm95VGlsZWRDb21wb3NpdGVkSW1hZ2UodWludHB0
cl90IGltYWdlSUQpCisgICAgQ3JlYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZSh1aW50cHRyX3Qg
aW1hZ2VJRCwgaW50IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0YXJnZXRSZWN0LCBXZWJLaXQ6
OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCisgICAgVXBkYXRlVGlsZUZvckNvbXBvc2l0
ZWRJbWFnZSh1aW50cHRyX3QgaW1hZ2VJRCwgaW50IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0
YXJnZXRSZWN0LCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCisgICAgUmVt
b3ZlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZSh1aW50cHRyX3QgaW1hZ2VJRCwgaW50IHRpbGVJRCkK
ICAgICBDcmVhdGVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCwgV2ViS2l0OjpTaGFyZWFibGVTdXJm
YWNlOjpIYW5kbGUgaGFuZGxlKQogICAgIFJlbW92ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lEKQot
ICAgIENyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5LCBXZWJLaXQ6OlNo
YXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkKLSAgICBEZXN0cm95RGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2UoaW50NjRfdCBrZXkpCiAgICAgRGlkUmVuZGVyRnJhbWUoV2ViQ29yZTo6SW50U2l6
ZSBjb250ZW50c1NpemUsIFdlYkNvcmU6OkludFJlY3QgY292ZXJlZFJlY3QpCiAgICAgRGlkQ2hh
bmdlU2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6SW50UG9pbnQgcG9zaXRpb24pCiAgICAgU2V0TGF5
ZXJBbmltYXRpb25zKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9u
cyBhbmltYXRpb25zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCmluZGV4IGJk
OTJmNzI0OTMxNGU3ZDJhYTY5ZWRkZDM2OTY5OGI5NzI3ZTk0MzMuLjg0MmU3ZTQ5NmVjOGI3ZTk5
NGU0ODQxZjE2OGYxY2FlMWUxZjNiMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJl
ci5jcHAKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlci5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCIKICNpbmNsdWRl
ICJNZXNzYWdlSUQuaCIKLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgog
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgpAQCAtMzAxLDcgKzMwMCw3IEBAIHZvaWQgTGF5
ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyU3RhdGUoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2ViTGF5
ZXJJbmZvJiBsYXllckluCiAgICAgZWxzZQogICAgICAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShp
ZCk7CiAKLSAgICBhc3NpZ25JbWFnZVRvTGF5ZXIobGF5ZXIsIGxheWVySW5mby5pbWFnZUJhY2tp
bmdTdG9yZUlEKTsKKyAgICBhc3NpZ25JbWFnZVRvTGF5ZXIobGF5ZXIsIGxheWVySW5mby5pbWFn
ZUlEKTsKIAogICAgIC8vIE5ldmVyIG1ha2UgdGhlIHJvb3QgbGF5ZXIgY2xpcC4KICAgICBsYXll
ci0+c2V0TWFza3NUb0JvdW5kcyhsYXllckluZm8uaXNSb290TGF5ZXIgPyBmYWxzZSA6IGxheWVy
SW5mby5tYXNrc1RvQm91bmRzKTsKQEAgLTM1NCw1OSArMzUzLDEwNSBAQCB2b2lkIExheWVyVHJl
ZVJlbmRlcmVyOjpzZXRSb290TGF5ZXJJRChXZWJMYXllcklEIGxheWVySUQpCiAgICAgbV9yb290
TGF5ZXItPmFkZENoaWxkKGxheWVyKTsKIH0KIAotUGFzc1JlZlB0cjxDb29yZGluYXRlZEJhY2tp
bmdTdG9yZT4gTGF5ZXJUcmVlUmVuZGVyZXI6OmdldEJhY2tpbmdTdG9yZShXZWJMYXllcklEIGlk
KQordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6YXNzaWduSW1hZ2VUb0xheWVyKEdyYXBoaWNzTGF5
ZXIqIGxheWVyLCBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEIGltYWdlSUQpCit7CisgICAg
cmVtb3ZlUmVsZWFzZWRJbWFnZXNJZk5lZWRlZCgpOworCisgICAgaWYgKEludmFsaWRDb29yZGlu
YXRlZENvbXBvc2l0ZWRJbWFnZUlEID09IGltYWdlSUQpIHsKKyAgICAgICAgbGF5ZXItPnNldENv
bnRlbnRzVG9NZWRpYSgwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBUaWxlZENvbXBv
c2l0ZWRJbWFnZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVkQ29tcG9zaXRlZEltYWdlcy5maW5k
KGltYWdlSUQpOworICAgIEFTU0VSVChpdCAhPSBtX3RpbGVkQ29tcG9zaXRlZEltYWdlcy5lbmQo
KSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShpdC0+dmFsdWUuZ2V0KCkpOworfQor
CitDb29yZGluYXRlZEJhY2tpbmdTdG9yZSogTGF5ZXJUcmVlUmVuZGVyZXI6OmdldEJhY2tpbmdT
dG9yZShXZWJMYXllcklEIGlkKQogewogICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0
b1RleHR1cmVNYXBwZXJMYXllcihsYXllckJ5SUQoaWQpKTsKICAgICBBU1NFUlQobGF5ZXIpOwog
ICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gc3RhdGlj
X2Nhc3Q8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmUqPihsYXllci0+YmFja2luZ1N0b3JlKCkuZ2V0
KCkpOwogICAgIGlmICghYmFja2luZ1N0b3JlKSB7CiAgICAgICAgIGJhY2tpbmdTdG9yZSA9IENv
b3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKLSAgICAgICAgbGF5ZXItPnNldEJhY2tp
bmdTdG9yZShiYWNraW5nU3RvcmUuZ2V0KCkpOworICAgICAgICBsYXllci0+c2V0QmFja2luZ1N0
b3JlKGJhY2tpbmdTdG9yZSk7CiAgICAgfQogICAgIEFTU0VSVChiYWNraW5nU3RvcmUpOwotICAg
IHJldHVybiBiYWNraW5nU3RvcmU7CisgICAgcmV0dXJuIGJhY2tpbmdTdG9yZS5nZXQoKTsKK30K
Kwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlVGlsZUZvckxheWVyKFdlYkxheWVySUQg
bGF5ZXJJRCwgaW50IHRpbGVJRCwgZmxvYXQgc2NhbGUpCit7CisgICAgY3JlYXRlVGlsZShnZXRC
YWNraW5nU3RvcmUobGF5ZXJJRCksIHRpbGVJRCwgc2NhbGUpOworfQorCit2b2lkIExheWVyVHJl
ZVJlbmRlcmVyOjpyZW1vdmVUaWxlRm9yTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGls
ZUlEKQoreworICAgIHJlbW92ZVRpbGUoZ2V0QmFja2luZ1N0b3JlKGxheWVySUQpLCB0aWxlSUQp
OworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxlRm9yTGF5ZXIoV2ViTGF5
ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBUaWxlVXBkYXRlJiB1cGRhdGUpCit7Cisg
ICAgdXBkYXRlVGlsZShnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCksIHRpbGVJRCwgdXBkYXRlKTsK
IH0KIAotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVy
SUQsIGludCB0aWxlSUQsIGZsb2F0IHNjYWxlKQordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y3Jl
YXRlVGlsZShDb29yZGluYXRlZEJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBpbnQgdGlsZUlE
LCBmbG9hdCBzY2FsZSkKIHsKLSAgICBnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCktPmNyZWF0ZVRp
bGUodGlsZUlELCBzY2FsZSk7CisgICAgYmFja2luZ1N0b3JlLT5jcmVhdGVUaWxlKHRpbGVJRCwg
c2NhbGUpOwogfQogCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxlKFdlYkxheWVy
SUQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRp
bGUoQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50IHRpbGVJRCkKIHsK
LSAgICBnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCktPnJlbW92ZVRpbGUodGlsZUlEKTsKKyAgICBi
YWNraW5nU3RvcmUtPnJlbW92ZVRpbGUodGlsZUlEKTsKIH0KIAotdm9pZCBMYXllclRyZWVSZW5k
ZXJlcjo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFRp
bGVVcGRhdGUmIHVwZGF0ZSkKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGUoQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmUqIHJhd0JhY2tpbmdTdG9yZSwgaW50IHRpbGVJRCwgY29uc3Qg
VGlsZVVwZGF0ZSYgdXBkYXRlKQogewotICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZT4gYmFja2luZ1N0b3JlID0gZ2V0QmFja2luZ1N0b3JlKGxheWVySUQpOworICAgIFJlZlB0cjxD
b29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gcmF3QmFja2luZ1N0b3JlOwog
ICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZSh0aWxlSUQsIHVwZGF0ZS5zb3VyY2VSZWN0LCB1
cGRhdGUudGFyZ2V0UmVjdCwgdXBkYXRlLnN1cmZhY2UsIHVwZGF0ZS5vZmZzZXQpOwogICAgIG1f
YmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKIH0KIAot
dm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlSW1hZ2UoaW50NjRfdCBpbWFnZUlELCBQYXNz
UmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gd2Vha0JpdG1hcCkKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVy
ZXI6OmNyZWF0ZVRpbGVkQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdl
SUQgaW1hZ2VJRCkKIHsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSB3ZWFr
Qml0bWFwOwotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU+IGJhY2tp
bmdTdG9yZSA9IFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7Ci0gICAg
bV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuc2V0KGltYWdlSUQsIGJhY2tpbmdTdG9yZSk7Ci0g
ICAgYmFja2luZ1N0b3JlLT51cGRhdGVDb250ZW50cyhtX3RleHR1cmVNYXBwZXIuZ2V0KCksIGJp
dG1hcC0+Y3JlYXRlSW1hZ2UoKS5nZXQoKSwgQml0bWFwVGV4dHVyZTo6VXBkYXRlQ2Fubm90TW9k
aWZ5T3JpZ2luYWxJbWFnZURhdGEpOworICAgIEFTU0VSVCghbV90aWxlZENvbXBvc2l0ZWRJbWFn
ZXMuY29udGFpbnMoaW1hZ2VJRCkpOworICAgIG1fdGlsZWRDb21wb3NpdGVkSW1hZ2VzLmFkZChp
bWFnZUlELCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCkpOwogfQogCi12b2lkIExh
eWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95SW1hZ2UoaW50NjRfdCBpbWFnZUlEKQordm9pZCBMYXll
clRyZWVSZW5kZXJlcjo6ZGVzdHJveVRpbGVkQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29t
cG9zaXRlZEltYWdlSUQgaW1hZ2VJRCkKIHsKLSAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdl
cy5yZW1vdmUoaW1hZ2VJRCk7CisgICAgQVNTRVJUKG1fdGlsZWRDb21wb3NpdGVkSW1hZ2VzLmNv
bnRhaW5zKGltYWdlSUQpKTsKKyAgICAvLyBXZSBkb24ndCB3YW50IFRleHR1cmVNYXBwZXJMYXll
ciByZWZlcnMgYSBkYW5nbGluZyBwb2ludGVyLgorICAgIG1fcmVsZWFzZWRJbWFnZUlEcy5hcHBl
bmQoaW1hZ2VJRCk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmFzc2lnbkltYWdlVG9M
YXllcihHcmFwaGljc0xheWVyKiBsYXllciwgaW50NjRfdCBpbWFnZUlEKQordm9pZCBMYXllclRy
ZWVSZW5kZXJlcjo6cmVtb3ZlUmVsZWFzZWRJbWFnZXNJZk5lZWRlZCgpCiB7Ci0gICAgaWYgKCFp
bWFnZUlEKSB7Ci0gICAgICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoMCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3JlbGVhc2VkSW1h
Z2VJRHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fdGlsZWRDb21wb3NpdGVkSW1hZ2VzLnJlbW92
ZShtX3JlbGVhc2VkSW1hZ2VJRHNbaV0pOworICAgIG1fcmVsZWFzZWRJbWFnZUlEcy5jbGVhcigp
OworfQogCi0gICAgSGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8VGV4dHVyZU1hcHBlckJhY2tpbmdT
dG9yZT4gPjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5maW5kKGlt
YWdlSUQpOwotICAgIEFTU0VSVChpdCAhPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5lbmQo
KSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShpdC0+dmFsdWUuZ2V0KCkpOwordm9p
ZCBMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShDb29yZGlu
YXRlZENvbXBvc2l0ZWRJbWFnZUlEIGltYWdlSUQsIGludCB0aWxlSUQsIGZsb2F0IHNjYWxlKQor
eworICAgIGNyZWF0ZVRpbGUoZ2V0QmFja2luZ1N0b3JlRm9yQ29tcG9zaXRlZEltYWdlKGltYWdl
SUQpLCB0aWxlSUQsIHNjYWxlKTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVtb3Zl
VGlsZUZvckNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEIGltYWdl
SUQsIGludCB0aWxlSUQpCit7CisgICAgcmVtb3ZlVGlsZShnZXRCYWNraW5nU3RvcmVGb3JDb21w
b3NpdGVkSW1hZ2UoaW1hZ2VJRCksIHRpbGVJRCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVy
ZXI6OnVwZGF0ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1h
Z2VJRCBpbWFnZUlELCBpbnQgdGlsZUlELCBjb25zdCBUaWxlVXBkYXRlJiB1cGRhdGUpCit7Cisg
ICAgdXBkYXRlVGlsZShnZXRCYWNraW5nU3RvcmVGb3JDb21wb3NpdGVkSW1hZ2UoaW1hZ2VJRCks
IHRpbGVJRCwgdXBkYXRlKTsKK30KKworQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUqIExheWVyVHJl
ZVJlbmRlcmVyOjpnZXRCYWNraW5nU3RvcmVGb3JDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRD
b21wb3NpdGVkSW1hZ2VJRCBpbWFnZUlEKQoreworICAgIEFTU0VSVChtX3RpbGVkQ29tcG9zaXRl
ZEltYWdlcy5jb250YWlucyhpbWFnZUlEKSk7CisgICAgVGlsZWRDb21wb3NpdGVkSW1hZ2VNYXA6
Oml0ZXJhdG9yIGl0ID0gbV90aWxlZENvbXBvc2l0ZWRJbWFnZXMuZmluZChpbWFnZUlEKTsKKyAg
ICBBU1NFUlQoaXQtPnZhbHVlLmdldCgpKTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwog
fQogCiB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjb21taXRUaWxlT3BlcmF0aW9ucygpCkBAIC00
ODMsNyArNTI4LDcgQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cHVyZ2VHTFJlc291cmNlcygp
CiAgICAgaWYgKGxheWVyKQogICAgICAgICBsYXllci0+Y2xlYXJCYWNraW5nU3RvcmVzUmVjdXJz
aXZlKCk7CiAKLSAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5jbGVhcigpOworICAgIG1f
dGlsZWRDb21wb3NpdGVkSW1hZ2VzLmNsZWFyKCk7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
CiAgICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5jbGVhcigpOwogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVS
ZW5kZXJlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlUmVuZGVyZXIuaAppbmRleCBlYmU0Y2EzOTE1MWM3MjMwNTU0NGI0MGU2ZDNjYjc4
OTEyYzE0MTBjLi4wNjE4MGU0MzkzMjhhY2Y3NTllMzc2ZTc3ZDAzY2RjYTA4NzhhZjkxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVSZW5kZXJlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmgKQEAgLTIyLDYgKzIyLDcgQEAKIAogI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKICNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKKyNpbmNs
dWRlICJDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxl
U3VyZmFjZS5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyQmFja2luZ1N0b3JlLmgiCkBAIC04NSwxMiArODYsMTUgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0TGF5ZXJGaWx0ZXJzKFdlYkxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJh
dGlvbnMmKTsKICNlbmRpZgogCi0gICAgdm9pZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGludCwg
ZmxvYXQgc2NhbGUpOwotICAgIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQpOwotICAg
IHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQsIGNvbnN0IFRpbGVVcGRhdGUmKTsKKyAg
ICB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihXZWJMYXllcklELCBpbnQsIGZsb2F0IHNjYWxlKTsK
KyAgICB2b2lkIHJlbW92ZVRpbGVGb3JMYXllcihXZWJMYXllcklELCBpbnQpOworICAgIHZvaWQg
dXBkYXRlVGlsZUZvckxheWVyKFdlYkxheWVySUQsIGludCwgY29uc3QgVGlsZVVwZGF0ZSYpOwor
ICAgIHZvaWQgY3JlYXRlVGlsZWRDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVk
SW1hZ2VJRCk7CisgICAgdm9pZCBkZXN0cm95VGlsZWRDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0
ZWRDb21wb3NpdGVkSW1hZ2VJRCk7CisgICAgdm9pZCBjcmVhdGVUaWxlRm9yQ29tcG9zaXRlZElt
YWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQsIGludCwgZmxvYXQgc2NhbGUpOworICAg
IHZvaWQgcmVtb3ZlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJ
bWFnZUlELCBpbnQpOworICAgIHZvaWQgdXBkYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShDb29y
ZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELCBpbnQsIGNvbnN0IFRpbGVVcGRhdGUmKTsKICAgICB2
b2lkIGZsdXNoTGF5ZXJDaGFuZ2VzKCk7Ci0gICAgdm9pZCBjcmVhdGVJbWFnZShpbnQ2NF90LCBQ
YXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4pOwotICAgIHZvaWQgZGVzdHJveUltYWdlKGludDY0
X3QpOwogICAgIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKFdlYkxheWVySUQsIGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJik7CiAgICAgdm9pZCBzZXRBbmltYXRpb25zTG9j
a2VkKGJvb2wpOwogCkBAIC0xMTMsMTMgKzExNywyMSBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlz
cGF0Y2hPbk1haW5UaHJlYWQoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwogICAgIHZvaWQgYWRq
dXN0UG9zaXRpb25Gb3JGaXhlZExheWVycygpOwogCi0gICAgdm9pZCBhc3NpZ25JbWFnZVRvTGF5
ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGludDY0X3QgaW1hZ2VJRCk7CisgICAgdm9pZCBh
c3NpZ25JbWFnZVRvTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIENvb3JkaW5hdGVkQ29t
cG9zaXRlZEltYWdlSUQpOworICAgIHZvaWQgcmVtb3ZlUmVsZWFzZWRJbWFnZXNJZk5lZWRlZCgp
OwogICAgIHZvaWQgZW5zdXJlUm9vdExheWVyKCk7CiAgICAgdm9pZCBlbnN1cmVMYXllcihXZWJM
YXllcklEKTsKICAgICB2b2lkIGNvbW1pdFRpbGVPcGVyYXRpb25zKCk7CiAgICAgdm9pZCByZW5k
ZXJOZXh0RnJhbWUoKTsKICAgICB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOwogCisgICAgdm9p
ZCBjcmVhdGVUaWxlKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlKiwgaW50LCBmbG9hdCBzY2FsZSk7
CisgICAgdm9pZCByZW1vdmVUaWxlKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlKiwgaW50KTsKKyAg
ICB2b2lkIHVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUqLCBpbnQsIGNvbnN0IFRp
bGVVcGRhdGUmKTsKKworICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlKiBnZXRCYWNraW5nU3Rv
cmUoV2ViTGF5ZXJJRCk7CisgICAgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUqIGdldEJhY2tpbmdT
dG9yZUZvckNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEKTsKKwog
ICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJMYXllcklELCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKj4g
TGF5ZXJNYXA7CiAgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fY29udGVudHNTaXplOwogICAgIFdl
YkNvcmU6OkZsb2F0UmVjdCBtX3Zpc2libGVDb250ZW50c1JlY3Q7CkBAIC0xMjgsMTIgKzE0MCwx
NCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxGdW5jdGlvbjx2b2lkKCk+ID4gbV9yZW5kZXJRdWV1
ZTsKICAgICBNdXRleCBtX3JlbmRlclF1ZXVlTXV0ZXg7CiAKLSNpZiBVU0UoVEVYVFVSRV9NQVBQ
RVIpCiAgICAgT3duUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsK
LSAgICBQYXNzUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBnZXRCYWNraW5nU3RvcmUo
V2ViTGF5ZXJJRCk7Ci0gICAgSGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8V2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckJhY2tpbmdTdG9yZT4gPiBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlczsKKworICAg
IHR5cGVkZWYgSGFzaE1hcDxDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELCBSZWZQdHI8Q29v
cmRpbmF0ZWRCYWNraW5nU3RvcmU+ID4gVGlsZWRDb21wb3NpdGVkSW1hZ2VNYXA7CisgICAgVGls
ZWRDb21wb3NpdGVkSW1hZ2VNYXAgbV90aWxlZENvbXBvc2l0ZWRJbWFnZXM7CisgICAgVmVjdG9y
PENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQ+IG1fcmVsZWFzZWRJbWFnZUlEczsKKwogICAg
IEhhc2hTZXQ8UmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiA+IG1fYmFja2luZ1N0b3Jl
c1dpdGhQZW5kaW5nQnVmZmVyczsKLSNlbmRpZgorCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
CiAgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkxheWVySUQsIFJlZlB0cjxXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZT4gPiBTdXJmYWNlQmFja2luZ1N0b3JlTWFwOwogICAg
IFN1cmZhY2VCYWNraW5nU3RvcmVNYXAgbV9zdXJmYWNlQmFja2luZ1N0b3JlczsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iNDVjODYwMDcyMjg5YTQyNjBmOGFmNDU1ZGUwMDdlMTMwMDk3NmE3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UuY3BwCkBAIC0wLDAg
KzEsMjI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJDb29yZGluYXRlZENvbXBvc2l0
ZWRJbWFnZS5oIgorCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRUaWxlLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUmVnaW9uLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNr
aW5nU3RvcmUuaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK0Nvb3JkaW5hdGVk
Q29tcG9zaXRlZEltYWdlSUQgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U6OmdldENvb3JkaW5h
dGVkQ29tcG9zaXRlZEltYWdlSUQoSW1hZ2UqIGltYWdlKQoreworICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQ+KGltYWdlKTsKK30KKworUGFz
c1JlZlB0cjxDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZT4gQ29vcmRpbmF0ZWRDb21wb3NpdGVk
SW1hZ2U6OmNyZWF0ZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUNsaWVudCogY2xpZW50LCBQ
YXNzUmVmUHRyPEltYWdlPiBpbWFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3Jk
aW5hdGVkQ29tcG9zaXRlZEltYWdlKGNsaWVudCwgaW1hZ2UpKTsKK30KKworY2xhc3MgQ29tcG9z
aXRlZFRpbGVkQmFja2luZ1N0b3JlIDogcHVibGljIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50LCBw
dWJsaWMgQ29vcmRpbmF0ZWRUaWxlQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
b21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIGV4cGxpY2l0IENvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9yZShDb29y
ZGluYXRlZENvbXBvc2l0ZWRJbWFnZSopOworICAgIHZpcnR1YWwgfkNvbXBvc2l0ZWRUaWxlZEJh
Y2tpbmdTdG9yZSgpOworCisgICAgdm9pZCB1cGRhdGUoYm9vbCBpbnZhbGlkYXRlZCk7CisKK3By
aXZhdGU6CisgICAgLy8gVGlsZWRCYWNraW5nU3RvcmVDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQg
dGlsZWRCYWNraW5nU3RvcmVQYWludEJlZ2luKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNv
bnN0IFZlY3RvcjxJbnRSZWN0PiYgcGFpbnRlZEFyZWEpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
Ym9vbCB0aWxlZEJhY2tpbmdTdG9yZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBJbnRSZWN0IHRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBJbnRSZWN0IHRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIENvbG9yIHRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENv
bG9yKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICAvLyBDb29yZGluYXRlZFRpbGVDbGllbnQKKyAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRl
SW5mbyYsIGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
VGlsZShpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IEludFJlY3Qm
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShpbnQgdGlsZUlEKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRl
bnRVcGRhdGUoY29uc3QgSW50U2l6ZSYsIGludCYgYXRsYXNJRCwgSW50UG9pbnQmKSBPVkVSUklE
RTsKKworICAgIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlKiBtX293bmVyOworICAgIE93blB0
cjxUaWxlZEJhY2tpbmdTdG9yZT4gbV90aWxlZEJhY2tpbmdTdG9yZTsKKworICAgIGJvb2wgbV9p
blVwZGF0ZU1vZGU7Cit9OworCitDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6Q29vcmRpbmF0
ZWRDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VDbGllbnQqIGNsaWVu
dCwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UpCisgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAg
LCBtX2ltYWdlKGltYWdlKQorICAgICwgbV9pZChnZXRDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFn
ZUlEKG1faW1hZ2UuZ2V0KCkpKQorICAgICwgbV9kaWRJbnZhbGlkYXRlKGZhbHNlKQoreworICAg
IG1fYmFja2luZ1N0b3JlID0gYWRvcHRQdHIobmV3IENvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9y
ZSh0aGlzKSk7CisKKyAgICAvLyBGSVhNRTogV2Ugd291bGQgbmVlZCB0byBkZWNvZGUgYSBzbWFs
bCBpbWFnZSBkaXJlY3RseSBpbnRvIGEgR3JhcGhpY3NTdXJmYWNlLgorICAgIC8vIGh0dHA6Ly93
ZWJraXQub3JnL2IvMTAxNDI2Cit9CisKK0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlOjp+Q29v
cmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UoKQoreworfQorCit2b2lkIENvb3JkaW5hdGVkQ29tcG9z
aXRlZEltYWdlOjphZGRMYXllckNsaWVudChDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUdyYXBo
aWNzTGF5ZXJDbGllbnQqIGxheWVyQ2xpZW50KQoreworICAgIEFTU0VSVCghbV9sYXllckNsaWVu
dHMuY29udGFpbnMobGF5ZXJDbGllbnQpKTsKKyAgICBtX2xheWVyQ2xpZW50cy5hcHBlbmQobGF5
ZXJDbGllbnQpOworfQorCit2b2lkIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlOjpyZW1vdmVM
YXllckNsaWVudChDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUdyYXBoaWNzTGF5ZXJDbGllbnQq
IGxheWVyQ2xpZW50KQoreworICAgIHNpemVfdCBwb3NpdGlvbiA9IG1fbGF5ZXJDbGllbnRzLmZp
bmQobGF5ZXJDbGllbnQpOworICAgIEFTU0VSVChwb3NpdGlvbiAhPSBub3RGb3VuZCk7CisgICAg
bV9sYXllckNsaWVudHMucmVtb3ZlKHBvc2l0aW9uKTsKKworICAgIGlmIChtX2xheWVyQ2xpZW50
cy5pc0VtcHR5KCkpCisgICAgICAgIG1fY2xpZW50LT5yZWxlYXNlQ29tcG9zaXRlZEltYWdlKGlk
KCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlOjppbnZhbGlkYXRlKCkK
K3sKKyAgICBtX2RpZEludmFsaWRhdGUgPSB0cnVlOworfQorCit2b2lkIENvb3JkaW5hdGVkQ29t
cG9zaXRlZEltYWdlOjp1cGRhdGUoKQoreworICAgIG1fYmFja2luZ1N0b3JlLT51cGRhdGUobV9k
aWRJbnZhbGlkYXRlKTsKKyAgICBtX2RpZEludmFsaWRhdGUgPSBmYWxzZTsKK30KKworSW50UmVj
dCBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6dmlzaWJsZVJlY3QoKSBjb25zdAoreworICAg
IFJlZ2lvbiB1bml0ZWRWaXNpYmxlUmVnaW9uOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9sYXllckNsaWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgIHVuaXRlZFZpc2libGVSZWdpb24u
dW5pdGUobV9sYXllckNsaWVudHNbaV0tPmNvbXBvc2l0ZWRJbWFnZVZpc2libGVSZWN0KCkpOwor
CisgICAgSW50UmVjdCB1bml0ZWRWaXNpYmxlUmVjdCA9IHVuaXRlZFZpc2libGVSZWdpb24uYm91
bmRzKCk7CisgICAgdW5pdGVkVmlzaWJsZVJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQ6
Onplcm8oKSwgbV9pbWFnZS0+c2l6ZSgpKSk7CisgICAgcmV0dXJuIHVuaXRlZFZpc2libGVSZWN0
OworfQorCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CisvLyBDb21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmUgQ2xhc3MKKy8vID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ29tcG9zaXRlZFRpbGVk
QmFja2luZ1N0b3JlOjpDb21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmUoQ29vcmRpbmF0ZWRDb21w
b3NpdGVkSW1hZ2UqIG93bmVyKQorICAgIDogbV9vd25lcihvd25lcikKKyAgICAsIG1faW5VcGRh
dGVNb2RlKGZhbHNlKQoreworICAgIG1fb3duZXItPm1fY2xpZW50LT5jcmVhdGVUaWxlZENvbXBv
c2l0ZWRJbWFnZShtX293bmVyLT5pZCgpKTsKKyAgICBtX3RpbGVkQmFja2luZ1N0b3JlID0gVGls
ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSh0aGlzLCBDb29yZGluYXRlZFRpbGVCYWNrZW5kOjpjcmVh
dGUodGhpcykpOworICAgIG1fdGlsZWRCYWNraW5nU3RvcmUtPnNldENvbnRlbnRzU2NhbGUoMSk7
Cit9CisKK0NvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9yZTo6fkNvbXBvc2l0ZWRUaWxlZEJhY2tp
bmdTdG9yZSgpCit7CisgICAgLy8gUmVtb3ZlIG1fdGlsZWRCYWNraW5nU3RvcmUgZXhwbGljaXRs
eSBiZWNhdXNlIHdlIHdhbnQgdG8gc2VuZCBSZW1vdmVUaWxlRm9yQ29tcG9zaXRlZEltYWdlIG1l
c3NhZ2VzIGJlZm9yZSBhIERlc3Ryb3lUaWxlZENvbXBvc2l0ZWRJbWFnZSBtZXNzYWdlLgorICAg
IG1fdGlsZWRCYWNraW5nU3RvcmUuY2xlYXIoKTsKKyAgICBtX293bmVyLT5tX2NsaWVudC0+ZGVz
dHJveVRpbGVkQ29tcG9zaXRlZEltYWdlKG1fb3duZXItPmlkKCkpOworfQorCit2b2lkIENvbXBv
c2l0ZWRUaWxlZEJhY2tpbmdTdG9yZTo6dXBkYXRlKGJvb2wgaW52YWxpZGF0ZWQpCit7CisgICAg
bV9pblVwZGF0ZU1vZGUgPSB0cnVlOworICAgIG1fdGlsZWRCYWNraW5nU3RvcmUtPmNvdmVyV2l0
aFRpbGVzSWZOZWVkZWQoKTsKKyAgICBpZiAoaW52YWxpZGF0ZWQpIHsKKyAgICAgICAgLy8gT25l
IGZyYW1lIG9mIHRoZSBpbWFnZSBjYW4gYmUgb3BhcXVlIHdoaWxlIGFub3RoZXIgaXMgbm90IG9w
YXF1ZS4KKyAgICAgICAgbV90aWxlZEJhY2tpbmdTdG9yZS0+c2V0U3VwcG9ydHNBbHBoYShtX293
bmVyLT5tX2ltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpKTsKKyAgICAgICAgbV90aWxlZEJh
Y2tpbmdTdG9yZS0+aW52YWxpZGF0ZSh0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpKTsK
KyAgICB9CisgICAgbV90aWxlZEJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZUJ1ZmZlcnMoKTsKKyAg
ICBtX2luVXBkYXRlTW9kZSA9IGZhbHNlOworfQorCit2b2lkIENvbXBvc2l0ZWRUaWxlZEJhY2tp
bmdTdG9yZTo6dGlsZWRCYWNraW5nU3RvcmVQYWludEJlZ2luKCkKK3sKK30KKwordm9pZCBDb21w
b3NpdGVkVGlsZWRCYWNraW5nU3RvcmU6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChyZWN0Lmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29udGV4dC0+ZHJhd0ltYWdlKG1fb3du
ZXItPm1faW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIHJlY3QpOworfQorCit2b2lk
IENvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9yZTo6dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZChj
b25zdCBWZWN0b3I8SW50UmVjdD4mIC8qIHVwZGF0ZWRSZWN0cyAqLykKK3sKK30KKworYm9vbCBD
b21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmU6OnRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93
ZWQoKSBjb25zdAoreworICAgIGlmICghbV9pblVwZGF0ZU1vZGUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gbV9vd25lci0+bV9jbGllbnQtPmxheWVyVHJlZUNvbXBvc2l0ZWRJ
bWFnZVRpbGVVcGRhdGVzQWxsb3dlZCgpOworfQorCitJbnRSZWN0IENvbXBvc2l0ZWRUaWxlZEJh
Y2tpbmdTdG9yZTo6dGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKQoreworICAgIHJldHVy
biBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fb3duZXItPm1faW1hZ2UtPnNpemUoKSk7Cit9
CisKK0ludFJlY3QgQ29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3JlOjp0aWxlZEJhY2tpbmdTdG9y
ZVZpc2libGVSZWN0KCkKK3sKKyAgICByZXR1cm4gbV9vd25lci0+dmlzaWJsZVJlY3QoKTsKK30K
KworQ29sb3IgQ29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3JlOjp0aWxlZEJhY2tpbmdTdG9yZUJh
Y2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudDsK
K30KKworUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IENvbXBvc2l0ZWRUaWxlZEJhY2tpbmdT
dG9yZTo6YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IEludFNpemUmIHNpemUsIGludCYgYXRsYXMs
IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgcmV0dXJuIG1fb3duZXItPm1fY2xpZW50LT5iZWdp
bkNvbXBvc2l0ZWRJbWFnZVVwZGF0ZShzaXplLCBtX293bmVyLT5tX2ltYWdlLT5jdXJyZW50RnJh
bWVIYXNBbHBoYSgpID8gU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhIDogU2hhcmVhYmxl
Qml0bWFwOjpOb0ZsYWdzLCBhdGxhcywgb2Zmc2V0KTsKK30KKwordm9pZCBDb21wb3NpdGVkVGls
ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0
ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QpCit7CisgICAgbV9v
d25lci0+bV9jbGllbnQtPmNyZWF0ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UobV9vd25lci0+aWQo
KSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0YXJnZXRSZWN0KTsKK30KKwordm9pZCBDb21wb3NpdGVk
VGlsZWRCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVw
ZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QpCit7CisgICAg
bV9vd25lci0+bV9jbGllbnQtPnVwZGF0ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UobV9vd25lci0+
aWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0YXJnZXRSZWN0KTsKK30KKwordm9pZCBDb21wb3Np
dGVkVGlsZWRCYWNraW5nU3RvcmU6OnJlbW92ZVRpbGUoaW50IHRpbGVJRCkKK3sKKyAgICBtX293
bmVyLT5tX2NsaWVudC0+cmVtb3ZlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShtX293bmVyLT5pZCgp
LCB0aWxlSUQpOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQ29tcG9zaXRl
ZEltYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhkZDc4Njhj
NzY5NGEwOTA1Y2QwYmI2NTBmOGU1YzBjZWZiNmFhOTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZENvbXBvc2l0ZWRJbWFnZS5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworCisjaWZuZGVmIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlX2gKKyNkZWZpbmUgQ29vcmRp
bmF0ZWRDb21wb3NpdGVkSW1hZ2VfaAorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQor
I2luY2x1ZGUgIkNvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQuaCIKKyNpbmNsdWRlICJJbWFn
ZS5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIK
KyNpbmNsdWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBHcmFwaGljc0NvbnRleHQ7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgQ29tcG9z
aXRlZFRpbGVkQmFja2luZ1N0b3JlOworCitjbGFzcyBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFn
ZUNsaWVudCB7CitwdWJsaWM6CisgICAgLy8gVGhpcyBtZXRob2QgaXMgdGhlIGFudGl0aGVzaXMg
b2YgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50OjphZG9wdENvbXBvc2l0ZWRJbWFnZSgp
LiBTZWUgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LgorICAgIHZpcnR1YWwgdm9pZCBy
ZWxlYXNlQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZWRDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRD
b21wb3NpdGVkSW1hZ2VJRCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95VGlsZWRDb21w
b3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRl
ZEltYWdlSUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZUZvckNvbXBv
c2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELCBpbnQgdGlsZUlELCBjb25z
dCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHJlbW92ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21w
b3NpdGVkSW1hZ2VJRCwgaW50IHRpbGVJRCkgPSAwOworICAgIHZpcnR1YWwgUGFzc093blB0cjxX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29tcG9zaXRlZEltYWdlVXBkYXRlKGNvbnN0
IFdlYkNvcmU6OkludFNpemUmLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzLCBpbnQmIGF0bGFzSUQs
IFdlYkNvcmU6OkludFBvaW50JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBsYXllclRyZWVDb21w
b3NpdGVkSW1hZ2VUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdCA9IDA7Cit9OworCitjbGFzcyBD
b29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUdyYXBoaWNzTGF5ZXJDbGllbnQgeworcHVibGljOgor
ICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBjb21wb3NpdGVkSW1hZ2VWaXNpYmxlUmVjdCgp
ID0gMDsKK307CisKK2NsYXNzIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlIDogcHVibGljIFJl
ZkNvdW50ZWQ8Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U+IHsKKyAgICBmcmllbmQgY2xhc3Mg
Q29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3JlOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlPiBjcmVhdGUoQ29vcmRpbmF0ZWRDb21wb3Np
dGVkSW1hZ2VDbGllbnQqLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkltYWdlPik7CisgICAgdmlydHVh
bCB+Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UoKTsKKworICAgIHN0YXRpYyBDb29yZGluYXRl
ZENvbXBvc2l0ZWRJbWFnZUlEIGdldENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQoV2ViQ29y
ZTo6SW1hZ2UqKTsKKyAgICBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEIGlkKCkgY29uc3Qg
eyByZXR1cm4gbV9pZDsgfQorCisgICAgdm9pZCBhZGRMYXllckNsaWVudChDb29yZGluYXRlZENv
bXBvc2l0ZWRJbWFnZUdyYXBoaWNzTGF5ZXJDbGllbnQqKTsKKyAgICB2b2lkIHJlbW92ZUxheWVy
Q2xpZW50KENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlR3JhcGhpY3NMYXllckNsaWVudCopOwor
CisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CisgICAgdm9pZCB1cGRhdGUoKTsKKworcHJpdmF0ZToK
KyAgICBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFn
ZUNsaWVudCosIFBhc3NSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+KTsKKworICAgIFdlYkNvcmU6Oklu
dFJlY3QgdmlzaWJsZVJlY3QoKSBjb25zdDsKKworICAgIENvb3JkaW5hdGVkQ29tcG9zaXRlZElt
YWdlQ2xpZW50KiBtX2NsaWVudDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IG1faW1hZ2U7
CisgICAgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCBtX2lkOworICAgIFZlY3RvcjxDb29y
ZGluYXRlZENvbXBvc2l0ZWRJbWFnZUdyYXBoaWNzTGF5ZXJDbGllbnQqPiBtX2xheWVyQ2xpZW50
czsKKyAgICBPd25QdHI8Q29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9y
ZTsKKworICAgIGJvb2wgbV9kaWRJbnZhbGlkYXRlOworfTsKKworfQorI2VuZGlmCisKKyNlbmRp
ZiAvLyBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZV9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAppbmRleCAyNmU0OGQ2
MWM0MTgyYjA2MjdhMjFiMjkyMWQ0YTJhMWRiYmQyNmU4Li43YmQ4MTBkYWNlM2VmNzVlNDgzMTIx
NDdlMzliNWE4M2RhNzVlY2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKQEAgLTgyLDYgKzgyLDEzIEBAIHZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VGaWx0ZXJzKCkKIH0KICNlbmRpZgog
Cit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlQ29tcG9zaXRlZEltYWdl
KCkKK3sKKyAgICBtX3Nob3VsZFN5bmNDb21wb3NpdGVkSW1hZ2UgPSB0cnVlOworICAgIGlmIChj
bGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7Cit9
CisKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRTaG91bGRVcGRhdGVWaXNpYmxl
UmVjdCgpCiB7CiAgICAgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCA9IHRydWU7CkBAIC0xMDUs
MTEgKzExMiwxMyBAQCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCiAgICAgLCBtX3Nob3VsZFN5bmNM
YXllclN0YXRlKHRydWUpCiAgICAgLCBtX3Nob3VsZFN5bmNDaGlsZHJlbih0cnVlKQogICAgICwg
bV9zaG91bGRTeW5jRmlsdGVycyh0cnVlKQorICAgICwgbV9zaG91bGRTeW5jQ29tcG9zaXRlZElt
YWdlKHRydWUpCiAgICAgLCBtX3Nob3VsZFN5bmNBbmltYXRpb25zKHRydWUpCiAgICAgLCBtX2Zp
eGVkVG9WaWV3cG9ydChmYWxzZSkKICAgICAsIG1fY2FudmFzTmVlZHNEaXNwbGF5KGZhbHNlKQog
ICAgICwgbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQoMCkKICAgICAsIG1fY29udGVu
dHNTY2FsZSgxKQorICAgICwgbV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIoMCkKICAgICAsIG1f
Y2FudmFzUGxhdGZvcm1MYXllcigwKQogICAgICwgbV9hbmltYXRpb25TdGFydGVkVGltZXIodGhp
cywgJkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQp
CiB7CkBAIC0zMTgsOSArMzI3LDYgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNl
dENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByKQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKQogewotICAgIFJlZlB0cjxJbWFnZT4g
aW1hZ2UgPSBtX2ltYWdlOwotICAgIHNldENvbnRlbnRzVG9JbWFnZSgwKTsKLSAgICBzZXRDb250
ZW50c1RvSW1hZ2UoaW1hZ2UuZ2V0KCkpOwogICAgIG1fY2FudmFzTmVlZHNEaXNwbGF5ID0gdHJ1
ZTsKICAgICBpZiAoY2xpZW50KCkpCiAgICAgICAgIGNsaWVudCgpLT5ub3RpZnlGbHVzaFJlcXVp
cmVkKHRoaXMpOwpAQCAtMzQ3LDI1ICszNTMsMjYgQEAgYm9vbCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgbmV3RmlsdGVycykKIAog
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSog
aW1hZ2UpCiB7Ci0gICAgaWYgKGltYWdlID09IG1faW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpbnQ2NF90IG5ld0lEID0gMDsKLSAgICBpZiAobV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJD
bGllbnQpIHsKLSAgICAgICAgLy8gV2UgYWRvcHQgZmlyc3QsIGluIGNhc2UgdGhpcyBpcyB0aGUg
c2FtZSBmcmFtZSAtIHRoYXQgd2F5IHdlIGF2b2lkIGRlc3Ryb3lpbmcgYW5kIHJlY3JlYXRpbmcg
dGhlIGltYWdlLgotICAgICAgICBuZXdJRCA9IG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xp
ZW50LT5hZG9wdEltYWdlQmFja2luZ1N0b3JlKGltYWdlKTsKLSAgICAgICAgbV9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXJDbGllbnQtPnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShtX2xheWVySW5m
by5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKLSAgICAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwot
ICAgICAgICBpZiAobV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCAmJiBuZXdJRCA9PSBt
X2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKQorICAgIGlmIChpbWFnZSkgeworICAgICAg
ICAvLyBNYWtlIHRoZSBkZWNpc2lvbiBhYm91dCB3aGV0aGVyIHRoZSBpbWFnZSBoYXMgY2hhbmdl
ZC4KKyAgICAgICAgLy8gVGhpcyBjb2RlIG1ha2VzIHRoZSBhc3N1bXB0aW9uIHRoYXQgcG9pbnRl
ciBlcXVhbGl0eSBvbiBhIE5hdGl2ZUltYWdlUHRyIGlzIGEgdmFsaWQgd2F5IHRvIHRlbGwgaWYg
dGhlIGltYWdlIGlzIGNoYW5nZWQuCisgICAgICAgIC8vIFRoaXMgYXNzdW1wdGlvbiBpcyB0cnVl
IGluIFF0LCBHVEsgYW5kIEVGTC4KKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIgbmV3TmF0aXZlSW1h
Z2VQdHIgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAgaWYg
KCFuZXdOYXRpdmVJbWFnZVB0cikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAo
bmV3TmF0aXZlSW1hZ2VQdHIgPT0gbV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIpCiAgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgbV9jb21wb3NpdGVkSW1hZ2UgPSBpbWFnZTsKKyAgICAg
ICAgbV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIgPSBuZXdOYXRpdmVJbWFnZVB0cjsKICAgICB9
IGVsc2UgewotICAgICAgICAvLyBJZiBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCBp
cyBub3Qgc2V0IHlldCB0aGVyZSBzaG91bGQgYmUgbm8gYmFja2luZyBzdG9yZSBJRC4KLSAgICAg
ICAgQVNTRVJUKCFtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKLSAgICAgICAgZGlk
Q2hhbmdlTGF5ZXJTdGF0ZSgpOworICAgICAgICBtX2NvbXBvc2l0ZWRJbWFnZSA9IDA7CisgICAg
ICAgIG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyID0gMDsKICAgICB9CiAKLSAgICBtX2xheWVy
SW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEID0gbmV3SUQ7Ci0gICAgbV9pbWFnZSA9IGltYWdlOwog
ICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZShpbWFnZSk7CisgICAgZGlkQ2hh
bmdlQ29tcG9zaXRlZEltYWdlKCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCkBAIC00NTksNiArNDY2LDMxIEBA
IHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jRmlsdGVycygpCiB9CiAjZW5kaWYK
IAordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGVkSW1hZ2UoKQor
eworICAgIGlmICghbV9zaG91bGRTeW5jQ29tcG9zaXRlZEltYWdlKQorICAgICAgICByZXR1cm47
CisgICAgbV9zaG91bGRTeW5jQ29tcG9zaXRlZEltYWdlID0gZmFsc2U7CisKKyAgICBpZiAobV9j
b21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIpIHsKKyAgICAgICAgQVNTRVJUKCFtX21haW5CYWNraW5n
U3RvcmUpOworICAgICAgICBBU1NFUlQobV9jb21wb3NpdGVkSW1hZ2UpOworCisgICAgICAgIGJv
b2wgaW1hZ2VJbnN0YW5jZVJlcGxhY2VkID0gbV9jb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZSAm
JiBtX2Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLT5pZCgpICE9IENvb3JkaW5hdGVkQ29tcG9z
aXRlZEltYWdlOjpnZXRDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEKG1fY29tcG9zaXRlZElt
YWdlLmdldCgpKTsKKyAgICAgICAgaWYgKGltYWdlSW5zdGFuY2VSZXBsYWNlZCkKKyAgICAgICAg
ICAgIHJlbGVhc2VDb21wb3NpdGVkSW1hZ2VJZk5lZWRlZCgpOworCisgICAgICAgIGlmICghbV9j
b29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZSkgeworICAgICAgICAgICAgbV9jb29yZGluYXRlZENv
bXBvc2l0ZWRJbWFnZSA9IG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5hZG9wdENv
bXBvc2l0ZWRJbWFnZShtX2NvbXBvc2l0ZWRJbWFnZS5nZXQoKSk7CisgICAgICAgICAgICBtX2Nv
b3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLT5hZGRMYXllckNsaWVudCh0aGlzKTsKKyAgICAgICAg
ICAgIG1fbGF5ZXJJbmZvLmltYWdlSUQgPSBtX2Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLT5p
ZCgpOworICAgICAgICB9CisKKyAgICAgICAgbV9jb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS0+
aW52YWxpZGF0ZSgpOworICAgIH0gZWxzZQorICAgICAgICByZWxlYXNlQ29tcG9zaXRlZEltYWdl
SWZOZWVkZWQoKTsKK30KKwogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNMYXll
clN0YXRlKCkKIHsKICAgICBpZiAoIW1fc2hvdWxkU3luY0xheWVyU3RhdGUpCkBAIC01MTEsMTgg
KzU0Myw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2FudmFzKCkKICAg
ICBtX2NhbnZhc05lZWRzRGlzcGxheSA9IGZhbHNlOwogfQogCi12b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6ZW5zdXJlSW1hZ2VCYWNraW5nU3RvcmUoKQotewotICAgIGlmICghbV9pbWFn
ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3Rv
cmVJRCkKLSAgICAgICAgbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCA9IG1fQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5hZG9wdEltYWdlQmFja2luZ1N0b3JlKG1faW1hZ2Uu
Z2V0KCkpOwotfQotCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Zmx1c2hDb21wb3Np
dGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCiB7Ci0gICAgLy8gVGhlIHJlbW90ZSBpbWFnZSBt
aWdodCBoYXZlIGJlZW4gcmVsZWFzZWQgYnkgcHVyZ2VCYWNraW5nU3RvcmVzLgotICAgIGVuc3Vy
ZUltYWdlQmFja2luZ1N0b3JlKCk7CiAgICAgc3luY0xheWVyU3RhdGUoKTsKICAgICBzeW5jQW5p
bWF0aW9ucygpOwogICAgIGNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KCk7CkBAIC01MzEs
OSArNTUzLDMwIEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpmbHVzaENvbXBvc2l0
aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKICAgICBzeW5jRmlsdGVycygpOwogI2VuZGlmCiAg
ICAgdXBkYXRlQ29udGVudEJ1ZmZlcnMoKTsKKyAgICBzeW5jQ29tcG9zaXRlZEltYWdlKCk7CiAg
ICAgc3luY0NhbnZhcygpOwogfQogCitJbnRSZWN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
Y29tcG9zaXRlZEltYWdlVmlzaWJsZVJlY3QoKQoreworICAgIEFTU0VSVChtX2Nvb3JkaW5hdGVk
Q29tcG9zaXRlZEltYWdlKTsKKyAgICBGbG9hdFJlY3QgdmlzaWJsZUltYWdlUmVjdCA9IHRpbGVk
QmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKTsKKyAgICBGbG9hdFNpemUgcmF0aW9PZmltYWdlT3Zl
ckxheWVyU2l6ZShtX2NvbXBvc2l0ZWRJbWFnZS0+d2lkdGgoKSAvIHNpemUoKS53aWR0aCgpLCBt
X2NvbXBvc2l0ZWRJbWFnZS0+aGVpZ2h0KCkgLyBzaXplKCkuaGVpZ2h0KCkpOworICAgIHZpc2li
bGVJbWFnZVJlY3Quc2NhbGUocmF0aW9PZmltYWdlT3ZlckxheWVyU2l6ZS53aWR0aCgpLCByYXRp
b09maW1hZ2VPdmVyTGF5ZXJTaXplLmhlaWdodCgpKTsKKyAgICByZXR1cm4gZW5jbG9zZWRJbnRS
ZWN0KHZpc2libGVJbWFnZVJlY3QpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6cmVsZWFzZUNvbXBvc2l0ZWRJbWFnZUlmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fY29vcmRp
bmF0ZWRDb21wb3NpdGVkSW1hZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk7CisgICAgbV9jb29yZGluYXRlZENvbXBvc2l0
ZWRJbWFnZS0+cmVtb3ZlTGF5ZXJDbGllbnQodGhpcyk7CisgICAgbV9jb29yZGluYXRlZENvbXBv
c2l0ZWRJbWFnZS5jbGVhcigpOworICAgIG1fbGF5ZXJJbmZvLmltYWdlSUQgPSBJbnZhbGlkQ29v
cmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRDsKK30KKwogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpCiB7CiB9CkBAIC01ODMsNyArNjI2
LDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkanVzdENvbnRlbnRzU2NhbGUo
KQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlQmFja2luZ1N0b3JlKCkK
IHsKLSAgICBtX21haW5CYWNraW5nU3RvcmUgPSBhZG9wdFB0cihuZXcgVGlsZWRCYWNraW5nU3Rv
cmUodGhpcywgQ29vcmRpbmF0ZWRUaWxlQmFja2VuZDo6Y3JlYXRlKHRoaXMpKSk7CisgICAgbV9t
YWluQmFja2luZ1N0b3JlID0gVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSh0aGlzLCBDb29yZGlu
YXRlZFRpbGVCYWNrZW5kOjpjcmVhdGUodGhpcykpOwogICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+
c2V0U3VwcG9ydHNBbHBoYSghY29udGVudHNPcGFxdWUoKSk7CiAgICAgbV9tYWluQmFja2luZ1N0
b3JlLT5zZXRDb250ZW50c1NjYWxlKGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKSk7CiB9CkBAIC02
MzYsNyArNjc5LDcgQEAgQ29sb3IgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tp
bmdTdG9yZUJhY2tncm91bmRDb2xvcigpIGNvbnN0CiAgICAgcmV0dXJuIGNvbnRlbnRzT3BhcXVl
KCkgPyBDb2xvcjo6d2hpdGUgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7CiB9CiAKLVBhc3NPd25QdHI8
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmJlZ2lu
Q29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBpbnQmIGF0bGFzLCBX
ZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KQorUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IEludFNpemUm
IHNpemUsIGludCYgYXRsYXMsIEludFBvaW50JiBvZmZzZXQpCiB7CiAgICAgcmV0dXJuIG1fQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5iZWdpbkNvbnRlbnRVcGRhdGUoc2l6ZSwgY29u
dGVudHNPcGFxdWUoKSA/IDAgOiBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEsIGF0bGFz
LCBvZmZzZXQpOwogfQpAQCAtNjgzLDExICs3MjYsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKIHsKICAgICBtX21haW5CYWNraW5nU3RvcmUu
Y2xlYXIoKTsKICAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLmNsZWFyKCk7Ci0KLSAgICBpZiAo
bV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCkgewotICAgICAgICBtX0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllckNsaWVudC0+cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKG1fbGF5ZXJJbmZv
LmltYWdlQmFja2luZ1N0b3JlSUQpOwotICAgICAgICBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdT
dG9yZUlEID0gMDsKLSAgICB9CisgICAgcmVsZWFzZUNvbXBvc2l0ZWRJbWFnZUlmTmVlZGVkKCk7
CiAKICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiAgICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsK
QEAgLTczMyw3ICs3NzIsNyBAQCBib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6aGFzUGVu
ZGluZ1Zpc2libGVDaGFuZ2VzKCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAot
ICAgIGlmICghbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSAmJiAhbV9zaG91bGRTeW5jQ2hpbGRyZW4g
JiYgIW1fc2hvdWxkU3luY0ZpbHRlcnMgJiYgIW1fc2hvdWxkU3luY0FuaW1hdGlvbnMgJiYgIW1f
Y2FudmFzTmVlZHNEaXNwbGF5KQorICAgIGlmICghbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSAmJiAh
bV9zaG91bGRTeW5jQ2hpbGRyZW4gJiYgIW1fc2hvdWxkU3luY0ZpbHRlcnMgJiYgIW1fc2hvdWxk
U3luY0NvbXBvc2l0ZWRJbWFnZSAmJiAhbV9zaG91bGRTeW5jQW5pbWF0aW9ucyAmJiAhbV9jYW52
YXNOZWVkc0Rpc3BsYXkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBzZWxm
T3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCkgfHwgIXRpbGVkQmFja2luZ1N0b3Jl
VmlzaWJsZVJlY3QoKS5pc0VtcHR5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCmluZGV4IDExODhhYTc1ZmI3NzgyOWJiMjFj
OThlZGYwZDcwZmIyMjU1MDFlMmYuLmM1YmZhOGZjNTBiNDE1ODBjNTI0MjliZmU4Njg5YTcyMTFh
YTU3N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllci5oCkBAIC0yMSw2ICsyMSw3IEBACiAjaWZuZGVmIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcl9oCiAjZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcl9oCiAKKyNpbmNs
dWRlICJDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVk
VGlsZS5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXIuaCIKQEAgLTQ5LDYgKzUwLDkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCB7CiBwdWJsaWM6CisgICAgLy8gVGhpcyBtZXRob2Qg
aXMgdGhlIGFudGl0aGVzaXMgb2YgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VDbGllbnQ6OnJl
bGVhc2VDb21wb3NpdGVkSW1hZ2UoKS4gU2VlIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlQ2xp
ZW50LgorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZT4g
YWRvcHRDb21wb3NpdGVkSW1hZ2UoV2ViQ29yZTo6SW1hZ2UqKSA9IDA7CisKICAgICAvLyBDb29y
ZGluYXRlZFRpbGVDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJMYXllcklE
LCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50
IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JikgPSAwOwpAQCAtNTYsOCArNjAsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFdlYkNvcmU6
OkludFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJv
b2wgbGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
aW50NjRfdCBhZG9wdEltYWdlQmFja2luZ1N0b3JlKFdlYkNvcmU6OkltYWdlKikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShXZWJMYXllcklELCBjb25zdCBXZWJMYXllcklu
Zm8mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKFdlYkxheWVySUQs
IGNvbnN0IFZlY3RvcjxXZWJMYXllcklEPiYpID0gMDsKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
CkBAIC04MCw3ICs4Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyIDogcHVibGljIEdyYXBoaWNzTGF5ZXIKICAgICAsIHB1YmxpYyBUaWxl
ZEJhY2tpbmdTdG9yZUNsaWVudAotICAgICwgcHVibGljIFdlYktpdDo6Q29vcmRpbmF0ZWRUaWxl
Q2xpZW50IHsKKyAgICAsIHB1YmxpYyBXZWJLaXQ6OkNvb3JkaW5hdGVkVGlsZUNsaWVudAorICAg
ICwgcHVibGljIFdlYktpdDo6Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VHcmFwaGljc0xheWVy
Q2xpZW50IHsKIHB1YmxpYzoKICAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NM
YXllckNsaWVudCopOwogICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcigpOwpA
QCAtMTY4LDYgKzE3MSw3IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogICAg
IHZvaWQgZGlkQ2hhbmdlRmlsdGVycygpOwogI2VuZGlmCisgICAgdm9pZCBkaWRDaGFuZ2VDb21w
b3NpdGVkSW1hZ2UoKTsKIAogICAgIHZvaWQgc3luY0xheWVyU3RhdGUoKTsKICAgICB2b2lkIHN5
bmNBbmltYXRpb25zKCk7CkBAIC0xNzUsNiArMTc5LDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCiAgICAgdm9pZCBzeW5jRmlsdGVycygpOwogI2VuZGlmCisgICAgdm9pZCBz
eW5jQ29tcG9zaXRlZEltYWdlKCk7CiAgICAgdm9pZCBzeW5jQ2FudmFzKCk7CiAgICAgdm9pZCBl
bnN1cmVJbWFnZUJhY2tpbmdTdG9yZSgpOwogICAgIHZvaWQgY29tcHV0ZVRyYW5zZm9ybWVkVmlz
aWJsZVJlY3QoKTsKQEAgLTE4Miw2ICsxODcsMTEgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY3Jl
YXRlQmFja2luZ1N0b3JlKCk7CiAKKyAgICAvLyBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUdy
YXBoaWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIEludFJlY3QgY29tcG9zaXRlZEltYWdlVmlz
aWJsZVJlY3QoKSBPVkVSUklERTsKKworICAgIHZvaWQgcmVsZWFzZUNvbXBvc2l0ZWRJbWFnZUlm
TmVlZGVkKCk7CisKICAgICBib29sIHNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9y
bXMoKTsKICAgICBib29sIHNob3VsZFVzZVRpbGVkQmFja2luZ1N0b3JlKCk7CiAgICAgdm9pZCBh
ZGp1c3RDb250ZW50c1NjYWxlKCk7CkBAIC0xOTMsNyArMjAzLDYgQEAgcHJpdmF0ZToKIAogICAg
IFdlYktpdDo6V2ViTGF5ZXJJRCBtX2lkOwogICAgIFdlYktpdDo6V2ViTGF5ZXJJbmZvIG1fbGF5
ZXJJbmZvOwotICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKICAgICBHcmFwaGljc0xheWVyKiBt
X21hc2tUYXJnZXQ7CiAgICAgRmxvYXRSZWN0IG1fbmVlZHNEaXNwbGF5UmVjdDsKICAgICBHcmFw
aGljc0xheWVyVHJhbnNmb3JtIG1fbGF5ZXJUcmFuc2Zvcm07CkBAIC0yMDIsNiArMjExLDcgQEAg
cHJpdmF0ZToKICAgICBib29sIG1fc2hvdWxkU3luY0xheWVyU3RhdGU6IDE7CiAgICAgYm9vbCBt
X3Nob3VsZFN5bmNDaGlsZHJlbjogMTsKICAgICBib29sIG1fc2hvdWxkU3luY0ZpbHRlcnM6IDE7
CisgICAgYm9vbCBtX3Nob3VsZFN5bmNDb21wb3NpdGVkSW1hZ2U6IDE7CiAgICAgYm9vbCBtX3No
b3VsZFN5bmNBbmltYXRpb25zOiAxOwogICAgIGJvb2wgbV9maXhlZFRvVmlld3BvcnQgOiAxOwog
ICAgIGJvb2wgbV9jYW52YXNOZWVkc0Rpc3BsYXkgOiAxOwpAQCAtMjEzLDYgKzIyMywxMiBAQCBw
cml2YXRlOgogICAgIE93blB0cjxUaWxlZEJhY2tpbmdTdG9yZT4gbV9tYWluQmFja2luZ1N0b3Jl
OwogICAgIE93blB0cjxUaWxlZEJhY2tpbmdTdG9yZT4gbV9wcmV2aW91c0JhY2tpbmdTdG9yZTsK
ICAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7CisKKyAgICAvLyBXaGVuIG1fY29tcG9zaXRlZElt
YWdlIGV4aXN0cywgdGhpcyBsYXllciBjYW5ub3QgYmUgYSBjb250ZW50IGxheWVyLCBiZWNhdXNl
IHNldERyYXdzQ29udGVudCBhbmQgc2V0Q29udGVudHNUb0ltYWdlIGFyZSBtdXR1YWxseSBleGNs
dXNpdmUuCisgICAgUmVmUHRyPEltYWdlPiBtX2NvbXBvc2l0ZWRJbWFnZTsKKyAgICBOYXRpdmVJ
bWFnZVB0ciBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0cjsKKyAgICBSZWZQdHI8V2ViS2l0OjpD
b29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZT4gbV9jb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTsK
KwogICAgIFBsYXRmb3JtTGF5ZXIqIG1fY2FudmFzUGxhdGZvcm1MYXllcjsKICAgICBUaW1lcjxD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI+IG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVyOwogICAgIEdy
YXBoaWNzTGF5ZXJBbmltYXRpb25zIG1fYW5pbWF0aW9uczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNv
b3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcAppbmRleCA1ZDliM2VmMzg0NzVh
OWFkZjkyMzdjMTdiNWE1NmFkNTJmZTQxMjkyLi5kNmViM2ZhOWQ4MGExOWM2ZDcxMGIxYjA0OTlj
YzUzM2Y1ODdiZGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJU
cmVlQ29vcmRpbmF0b3IuY3BwCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9S
ZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CisjaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNo
YW5nZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNzIsNiArNzMsNyBAQCBM
YXllclRyZWVDb29yZGluYXRvcjo6TGF5ZXJUcmVlQ29vcmRpbmF0b3IoV2ViUGFnZSogd2ViUGFn
ZSkKICAgICA6IExheWVyVHJlZUhvc3Qod2ViUGFnZSkKICAgICAsIG1fbm90aWZ5QWZ0ZXJTY2hl
ZHVsZWRMYXllckZsdXNoKGZhbHNlKQogICAgICwgbV9pc1ZhbGlkKHRydWUpCisgICAgLCBtX2lz
UHVyZ2luZyhmYWxzZSkKICAgICAsIG1fd2FpdGluZ0ZvclVJUHJvY2Vzcyh0cnVlKQogICAgICwg
bV9pc1N1c3BlbmRlZChmYWxzZSkKICAgICAsIG1fY29udGVudHNTY2FsZSgxKQpAQCAtMjY3LDcg
KzI2OSw3IEBAIGJvb2wgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hh
bmdlcygpCiAKICAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xh
eWVyT25seSgpOwogCi0gICAgcHVyZ2VSZWxlYXNlZEltYWdlcygpOworICAgIHVwZGF0ZUNvbXBv
c2l0ZWRJbWFnZXMoKTsKIAogICAgIGlmIChtX3Nob3VsZFN5bmNSb290TGF5ZXIpIHsKICAgICAg
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpT
ZXRSb290Q29tcG9zaXRpbmdMYXllcih0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RM
YXllci5nZXQoKSktPmlkKCkpKTsKQEAgLTQ0NywxMyArNDQ5LDYgQEAgdm9pZCBMYXllclRyZWVD
b29yZGluYXRvcjo6ZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQogICAgIH0KIH0KIAot
dm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cHVyZ2VSZWxlYXNlZEltYWdlcygpCi17Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3JlbGVhc2VkRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Vz
LnNpemUoKTsgKytpKQotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHk6OkRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShtX3JlbGVh
c2VkRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzW2ldKSk7Ci0gICAgbV9yZWxlYXNlZERpcmVjdGx5
Q29tcG9zaXRlZEltYWdlcy5jbGVhcigpOwotfQotCiB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9y
OjpsYXllckZsdXNoVGltZXJGaXJlZChUaW1lcjxMYXllclRyZWVDb29yZGluYXRvcj4qKQogewog
ICAgIHBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7CkBAIC00ODEsODAgKzQ3Niw2IEBAIHZv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCkKICAgICBt
X3BhZ2VPdmVybGF5TGF5ZXIgPSBudWxscHRyOwogfQogCi1pbnQ2NF90IExheWVyVHJlZUNvb3Jk
aW5hdG9yOjphZG9wdEltYWdlQmFja2luZ1N0b3JlKEltYWdlKiBpbWFnZSkKLXsKLSAgICBpZiAo
IWltYWdlKQotICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7Ci0KLSAgICBpbnQ2NF90
IGtleSA9IDA7Ci0KLSNpZiBQTEFURk9STShRVCkKLSAgICBRUGl4bWFwKiBuYXRpdmVJbWFnZSA9
IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotCi0gICAgaWYgKCFuYXRpdmVJ
bWFnZSkKLSAgICAgICAgcmV0dXJuIEludmFsaWRXZWJMYXllcklEOwotCi0gICAga2V5ID0gbmF0
aXZlSW1hZ2UtPmNhY2hlS2V5KCk7Ci0jZWxpZiBVU0UoQ0FJUk8pCi0gICAgTmF0aXZlSW1hZ2VD
YWlybyogbmF0aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsK
LSAgICBpZiAoIW5hdGl2ZUltYWdlKQotICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7
Ci0gICAgLy8gVGhpcyBjYW4gYmUgc2FmZWx5IGRvbmUgc2luY2Ugd2Ugb3duIHRoZSByZWZlcmVu
Y2UuCi0gICAgLy8gQSBjb3JyZXNwb25kaW5nIGNhaXJvX3N1cmZhY2VfZGVzdHJveSgpIGlzIGVu
c3VyZWQgaW4gcmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKCkuCi0gICAgY2Fpcm9fc3VyZmFjZV90
KiBjYWlyb1N1cmZhY2UgPSBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZShuYXRpdmVJbWFnZS0+c3Vy
ZmFjZSgpKTsKLSAgICBrZXkgPSByZWludGVycHJldF9jYXN0PGludDY0X3Q+KGNhaXJvU3VyZmFj
ZSk7Ci0jZW5kaWYKLQotICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBt
X2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5KTsKLQotICAgIGlmIChp
dCAhPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKSB7Ci0gICAgICAg
ICsrKGl0LT52YWx1ZSk7Ci0gICAgICAgIHJldHVybiBrZXk7Ci0gICAgfQotCi0gICAgLy8gQ2hl
Y2sgaWYgd2Ugd2VyZSBnb2luZyB0byByZWxlYXNlIHRoaXMgaW1hZ2UgZHVyaW5nIHRoZSBuZXh0
IGZsdXNoLgotICAgIHNpemVfdCByZWxlYXNlZEluZGV4ID0gbV9yZWxlYXNlZERpcmVjdGx5Q29t
cG9zaXRlZEltYWdlcy5maW5kKGtleSk7Ci0gICAgaWYgKHJlbGVhc2VkSW5kZXggPT0gbm90Rm91
bmQpIHsKLSAgICAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxl
Qml0bWFwOjpjcmVhdGVTaGFyZWFibGUoaW1hZ2UtPnNpemUoKSwgKGltYWdlLT5jdXJyZW50RnJh
bWVIYXNBbHBoYSgpID8gU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhIDogMCkpOwotICAg
ICAgICB7Ci0gICAgICAgICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBncmFw
aGljc0NvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwotICAgICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0Is
IEludFBvaW50Ojp6ZXJvKCkpOwotICAgICAgICB9Ci0gICAgICAgIFNoYXJlYWJsZUJpdG1hcDo6
SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgYml0bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKLSAg
ICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5
OjpDcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShrZXksIGhhbmRsZSkpOwotICAgIH0gZWxz
ZQotICAgICAgICBtX3JlbGVhc2VkRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnJlbW92ZShyZWxl
YXNlZEluZGV4KTsKLQotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuYWRk
KGtleSwgMSk7Ci0gICAgcmV0dXJuIGtleTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRv
cjo6cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKGludDY0X3Qga2V5KQotewotICAgIGlmICgha2V5
KQotICAgICAgICByZXR1cm47Ci0gICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVyYXRvciBp
dCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZmluZChrZXkpOwotICAgIGlm
IChpdCA9PSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpdC0+dmFsdWUtLTsKLQotICAgIGlmIChpdC0+dmFsdWUpCi0gICAg
ICAgIHJldHVybjsKLQotI2lmIFVTRShDQUlSTykKLSAgICAvLyBDb21wbGVtZW50IHRoZSByZWZl
cmVuY2luZyBpbiBhZG9wdEltYWdlQmFja2luZ1N0b3JlKCkuCi0gICAgY2Fpcm9fc3VyZmFjZV90
KiBjYWlyb1N1cmZhY2UgPSByZWludGVycHJldF9jYXN0PGNhaXJvX3N1cmZhY2VfdCo+KGtleSk7
Ci0gICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGNhaXJvU3VyZmFjZSk7Ci0jZW5kaWYKLQotICAg
IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMucmVtb3ZlKGl0KTsKLSAgICBtX3Jl
bGVhc2VkRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmFwcGVuZChrZXkpOwotICAgIHNjaGVkdWxl
TGF5ZXJGbHVzaCgpOwotfQotCi0KIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6Om5vdGlmeUFu
aW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSAvKiB0
aW1lICovKQogewogfQpAQCAtNjA4LDYgKzUyOSw3NSBAQCB2b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yOjpyZW1vdmVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKICAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlJlbW92ZVRp
bGVGb3JMYXllcihsYXllcklELCB0aWxlSUQpKTsKIH0KIAorUGFzc1JlZlB0cjxDb29yZGluYXRl
ZENvbXBvc2l0ZWRJbWFnZT4gTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmFkb3B0Q29tcG9zaXRlZElt
YWdlKEltYWdlKiBpbWFnZSkKK3sKKyAgICBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEIGlt
YWdlSUQgPSBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6Z2V0Q29vcmRpbmF0ZWRDb21wb3Np
dGVkSW1hZ2VJRChpbWFnZSk7CisgICAgQ29tcG9zaXRlZEltYWdlTWFwOjppdGVyYXRvciBpdCA9
IG1fY29tcG9zaXRlZEltYWdlcy5maW5kKGltYWdlSUQpOworICAgIFJlZlB0cjxDb29yZGluYXRl
ZENvbXBvc2l0ZWRJbWFnZT4gY29tcG9zaXRlZEltYWdlOworICAgIGlmIChpdCA9PSBtX2NvbXBv
c2l0ZWRJbWFnZXMuZW5kKCkpIHsKKyAgICAgICAgY29tcG9zaXRlZEltYWdlID0gQ29vcmRpbmF0
ZWRDb21wb3NpdGVkSW1hZ2U6OmNyZWF0ZSh0aGlzLCBpbWFnZSk7CisgICAgICAgIG1fY29tcG9z
aXRlZEltYWdlcy5hZGQoaW1hZ2VJRCwgY29tcG9zaXRlZEltYWdlKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgY29tcG9zaXRlZEltYWdlID0gaXQtPnZhbHVlOworCisgICAgcmV0dXJuIGNvbXBvc2l0
ZWRJbWFnZTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVsZWFzZUNvbXBvc2l0
ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEIGltYWdlSUQpCit7CisgICAgQVNT
RVJUKG1fY29tcG9zaXRlZEltYWdlcy5jb250YWlucyhpbWFnZUlEKSk7CisgICAgbV9jb21wb3Np
dGVkSW1hZ2VzLnJlbW92ZShpbWFnZUlEKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRv
cjo6dXBkYXRlQ29tcG9zaXRlZEltYWdlcygpCit7CisgICAgQ29tcG9zaXRlZEltYWdlTWFwOjpp
dGVyYXRvciBlbmQgPSBtX2NvbXBvc2l0ZWRJbWFnZXMuZW5kKCk7CisgICAgZm9yIChDb21wb3Np
dGVkSW1hZ2VNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2NvbXBvc2l0ZWRJbWFnZXMuYmVnaW4oKTsg
aXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgaXRlci0+dmFsdWUtPnVwZGF0ZSgpOworfQor
Cit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVUaWxlZENvbXBvc2l0ZWRJbWFnZShD
b29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEIGltYWdlSUQpCit7CisgICAgbV93ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpDcmVhdGVUaWxlZENvbXBv
c2l0ZWRJbWFnZShpbWFnZUlEKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRl
c3Ryb3lUaWxlZENvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEIGlt
YWdlSUQpCit7CisgICAgaWYgKG1faXNQdXJnaW5nKQorICAgICAgICByZXR1cm47CisgICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpEZXN0cm95
VGlsZWRDb21wb3NpdGVkSW1hZ2UoaW1hZ2VJRCkpOworfQorCit2b2lkIExheWVyVHJlZUNvb3Jk
aW5hdG9yOjpjcmVhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRl
ZEltYWdlSUQgaW1hZ2VJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVw
ZGF0ZUluZm8sIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHRhcmdldFJlY3QpCit7CisgICAgbV9z
aG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Q3JlYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShpbWFn
ZUlELCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pKTsKK30KKwordm9pZCBMYXllclRy
ZWVDb29yZGluYXRvcjo6dXBkYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENv
bXBvc2l0ZWRJbWFnZUlEIGltYWdlSUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJ
bmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0YXJnZXRSZWN0KQorewor
ICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlVwZGF0ZVRpbGVGb3JDb21wb3NpdGVkSW1h
Z2UoaW1hZ2VJRCwgdGlsZUlELCB0YXJnZXRSZWN0LCB1cGRhdGVJbmZvKSk7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbW92ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UoQ29vcmRp
bmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCBpbWFnZUlELCBpbnQgdGlsZUlEKQoreworICAgIGlmICht
X2lzUHVyZ2luZykKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1
ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHk6OlJlbW92ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UoaW1hZ2VJRCwgdGlsZUlEKSk7Cit9CisK
K1Bhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBMYXllclRyZWVDb29yZGluYXRvcjo6YmVnaW5D
b21wb3NpdGVkSW1hZ2VVcGRhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgU2hhcmVhYmxlQml0bWFw
OjpGbGFncyBmbGFncywgaW50JiBhdGxhc0lELCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIHJl
dHVybiBiZWdpbkNvbnRlbnRVcGRhdGUoc2l6ZSwgZmxhZ3MsIGF0bGFzSUQsIG9mZnNldCk7Cit9
CisKK2Jvb2wgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmxheWVyVHJlZUNvbXBvc2l0ZWRJbWFnZVRp
bGVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxheWVyVHJlZVRpbGVVcGRh
dGVzQWxsb3dlZCgpOworfQorCiB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVVcGRh
dGVBdGxhcyhpbnQgYXRsYXNJRCwgY29uc3QgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiBoYW5k
bGUpCiB7CiAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpDcmVhdGVVcGRhdGVBdGxhcyhhdGxhc0lELCBoYW5kbGUpKTsKQEAgLTYxNSw2ICs2
MDUsOCBAQCB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVVcGRhdGVBdGxhcyhpbnQg
YXRsYXNJRCwgY29uc3QgU2hhcmVhYmxlU3VyZmFjZQogCiB2b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yOjpyZW1vdmVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCkKIHsKKyAgICBpZiAobV9pc1B1cmdp
bmcpCisgICAgICAgIHJldHVybjsKICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OlJlbW92ZVVwZGF0ZUF0bGFzKGF0bGFzSUQpKTsKIH0KIApA
QCAtNjkwLDE0ICs2ODIsMTMgQEAgYm9vbCBMYXllclRyZWVDb29yZGluYXRvcjo6bGF5ZXJUcmVl
VGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QKIAogdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6
cHVyZ2VCYWNraW5nU3RvcmVzKCkKIHsKKyAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gcHVyZ2lu
Z1RvZ2dsZShtX2lzUHVyZ2luZywgdHJ1ZSk7CisKICAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMu
ZW5kKCk7CiAgICAgZm9yIChIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cio+OjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCiAgICAgICAgICgqaXQpLT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsKIAotICAgIHB1cmdl
UmVsZWFzZWRJbWFnZXMoKTsKLQotICAgIEFTU0VSVCghbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZVJlZkNvdW50cy5zaXplKCkpOwotICAgIEFTU0VSVCghbV9yZWxlYXNlZERpcmVjdGx5Q29tcG9z
aXRlZEltYWdlcy5zaXplKCkpOworICAgIG1fY29tcG9zaXRlZEltYWdlcy5jbGVhcigpOwogICAg
IG1fdXBkYXRlQXRsYXNlcy5jbGVhcigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGlu
YXRvci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaAppbmRleCBjYWNiNjhlYWFlNWI5NzlhMTU1Yjcw
NTY0ZWRjMTgyZWUzZGEzMDk1Li4wMzQwMDQ0NmIxZGZmNDgxMzEyYjVmYTk5Y2Y1NTQ5NDc2ODky
ZWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5h
dG9yLmgKQEAgLTIyLDYgKzIyLDcgQEAKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
IAorI2luY2x1ZGUgIkNvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLmgiCiAjaW5jbHVkZSAiQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgog
I2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKQEAgLTQwLDYgKzQxLDcgQEAgY2xhc3MgV2ViUGFn
ZTsKIGNsYXNzIExheWVyVHJlZUNvb3JkaW5hdG9yIDogcHVibGljIExheWVyVHJlZUhvc3QsIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQKICAgICAsIHB1YmxpYyBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXJDbGllbnQKICAgICAsIHB1YmxpYyBVcGRhdGVBdGxhc0NsaWVudAorICAgICwgcHVi
bGljIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlQ2xpZW50CiAgICAgLCBwdWJsaWMgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckZhY3RvcnkgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PExheWVyVHJlZUNvb3JkaW5hdG9yPiBjcmVhdGUoV2ViUGFnZSopOwpAQCAtNjcsOSArNjksOCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVu
ZGVkID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSB7IG1faXNT
dXNwZW5kZWQgPSBmYWxzZTsgc2NoZWR1bGVMYXllckZsdXNoKCk7IH0KICAgICB2aXJ0dWFsIHZv
aWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKSB7IH0KLSAgICB2aXJ0dWFsIGludDY0X3Qg
YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShXZWJDb3JlOjpJbWFnZSopOwotICAgIHZpcnR1YWwgdm9p
ZCByZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCk7CiAKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U+IGFkb3B0Q29tcG9zaXRlZEltYWdlKFdl
YkNvcmU6OkltYWdlKikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2Vi
TGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwg
aW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJ
RCk7CkBAIC0xMTMsNiArMTE0LDE4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIG5vdGlm
eUZsdXNoUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwogICAgIHZpcnR1
YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFz
ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOwogCisgICAgLy8gQ29vcmRpbmF0
ZWRDb21wb3NpdGVkSW1hZ2VDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUNvbXBvc2l0
ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlVGlsZWRDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVk
SW1hZ2VJRCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lUaWxlZENvbXBvc2l0
ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0
ZWRJbWFnZUlELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZUZv
ckNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELCBpbnQgdGlsZUlE
LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShDb29y
ZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELCBpbnQgdGlsZUlEKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbXBvc2l0ZWRJ
bWFnZVVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFn
cywgaW50JiBhdGxhc0lELCBXZWJDb3JlOjpJbnRQb2ludCYpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgYm9vbCBsYXllclRyZWVDb21wb3NpdGVkSW1hZ2VUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25z
dCBPVkVSUklERTsKKworICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRlZEltYWdlcygpOworCiAgICAg
Ly8gR3JhcGhpY3NMYXllckZhY3RvcnkKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6
R3JhcGhpY3NMYXllcj4gY3JlYXRlR3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q2xpZW50KikgT1ZFUlJJREU7CiAKQEAgLTEyNiw3ICsxMzksNiBAQCBwcml2YXRlOgogICAgIHZv
aWQgc3luY0Rpc3BsYXlTdGF0ZSgpOwogICAgIHZvaWQgbG9ja0FuaW1hdGlvbnMoKTsKICAgICB2
b2lkIHVubG9ja0FuaW1hdGlvbnMoKTsKLSAgICB2b2lkIHB1cmdlUmVsZWFzZWRJbWFnZXMoKTsK
IAogICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8TGF5ZXJUcmVl
Q29vcmRpbmF0b3I+Kik7CiAKQEAgLTE0NywxMiArMTU5LDEzIEBAIHByaXZhdGU6CiAKICAgICBI
YXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+IG1fcmVnaXN0ZXJlZExh
eWVyczsKICAgICBWZWN0b3I8V2ViTGF5ZXJJRD4gbV9kZXRhY2hlZExheWVyczsKLSAgICBIYXNo
TWFwPGludDY0X3QsIGludD4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50czsKLSAg
ICBWZWN0b3I8aW50NjRfdD4gbV9yZWxlYXNlZERpcmVjdGx5Q29tcG9zaXRlZEltYWdlczsKKyAg
ICB0eXBlZGVmIEhhc2hNYXA8Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCwgUmVmUHRyPENv
b3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlPiA+IENvbXBvc2l0ZWRJbWFnZU1hcDsKKyAgICBDb21w
b3NpdGVkSW1hZ2VNYXAgbV9jb21wb3NpdGVkSW1hZ2VzOwogICAgIFZlY3RvcjxPd25QdHI8VXBk
YXRlQXRsYXM+ID4gbV91cGRhdGVBdGxhc2VzOwogCiAgICAgYm9vbCBtX25vdGlmeUFmdGVyU2No
ZWR1bGVkTGF5ZXJGbHVzaDsKICAgICBib29sIG1faXNWYWxpZDsKKyAgICBib29sIG1faXNQdXJn
aW5nOwogCiAgICAgYm9vbCBtX3dhaXRpbmdGb3JVSVByb2Nlc3M7CiAgICAgYm9vbCBtX2lzU3Vz
cGVuZGVkOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172743</attachid>
            <date>2012-11-07 02:19:58 -0800</date>
            <delta_ts>2012-11-11 18:54:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101023-20121107191801.patch</filename>
            <type>text/plain</type>
            <size>79178</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzNzIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTMwNDFhYWRkMzM0NWE5
YzM4YzJhODQwNDkzOWMzYWE4NzJiZGQ3Mi4uMDRkMzYyMGZiYTlmYjc0ZTNlZDE5Mjc2OWUwYmMz
OWEwMjg5ODlmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTExLTA2ICBIdWFu
ZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIENvb3JkaW5h
dGVkIEdyYXBoaWNzOiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgaGFuZGxlcyBhIGNvbXBvc2l0
ZWQgaW1hZ2Ugd2l0aCBUaWxlZEJhY2tpbmdTdG9yZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTAyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBhIHBvdGVudGlhbCBidWcgaW4gR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIuCisgICAgICAgIG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyIG11
c3QgYmUgaW5pdGlhbGllZC4gT3RoZXJ3aXNlIHRoZSBtZW1iZXIncworICAgICAgICB1bmRlZmlu
ZWQgdmFsdWUgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvdXIuCisKKyAgICAgICAgSW4gYWRk
aXRpb24sIGZpeCBzb21lIG5pdHMgaW4gVGlsZWRCYWNraW5nU3RvcmUgYW5kIFRleHR1cmVNYXBw
ZXJMYXllci4KKworICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWU6OnNldFRpbGVkQmFja2luZ1N0b3JlRW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRC
YWNraW5nU3RvcmU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoVGlsZWRCYWNraW5n
U3RvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcjo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cGxhdGZvcm1M
YXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJM
YXllci5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpzZXRCYWNraW5n
U3RvcmUpOgorCiAyMDEyLTExLTA2ICBEYW4gQmVhbSAgPGRiZWFtQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBFbmFibGUgUkVRVUVTVF9BVVRPQ09NUExFVEUgZm9yIGNocm9taXVtIHBvcnQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwppbmRleCA4NDMzMTgyZDI4MTRiZTRiZDYwMTZhNDZjNTFjMDI4MTQ0YTU1YzkxLi43MmU4
MjIwNGFkMWU2YzU5YTk3OTlkNDcwNmEzZmI3ODZhZGE0YTBlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTQ3IEBACisyMDEyLTExLTA2ICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkx
MDAubmV0PgorCisgICAgICAgIENvb3JkaW5hdGVkIEdyYXBoaWNzOiBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIgaGFuZGxlcyBhIGNvbXBvc2l0ZWQgaW1hZ2Ugd2l0aCBUaWxlZEJhY2tpbmdTdG9y
ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTAy
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJl
bnRseSwgQ29vcmRpbmF0ZWQgR3JhcGhpY3MgaGFzIHNldmVyYWwgcHJvYmxlbXMgaW4gdGVybXMg
b2YgaGFuZGxpbmcgYQorICAgICAgICBjb21wb3NpdGVkIGltYWdlLgorICAgICAgICAxLiBFdmVu
IGlmIGEgY29tcG9zaXRlZCBpbWFnZSBpcyBvZmYgdGhlIHZpZXdwb3J0LCBUZXh0dXJlTWFwcGVy
TGF5ZXIgY2FuIG5vdAorICAgICAgICByZW1vdmUgYW4gaW1hZ2UgdGV4dHVyZS4KKyAgICAgICAg
Mi4gV2UgY2FuIG5vdCBzZW5kIGFuIGltYWdlIHRvIFVJIFByb2Nlc3MgdXNpbmcgR3JhcGhpY3NT
dXJmYWNlLCBiZWNhdXNlCisgICAgICAgIEdyYXBoaWNzU3VyZmFjZSBoYXMgdGhlIHNpemUgbGlt
aXRhdGlvbi4oR0xfTUFYX1RFWFRVUkVfU0laRSkKKyAgICAgICAgMy4gV2UgbXVzdCBhbGxvY2F0
ZSBiaWcgY29udGludW91cyBtZW1vcnkgd2hlbiBhbiBpbWFnZSBpcyBiaWcuCisKKyAgICAgICAg
SWYgd2UgdXNlIFRpbGVkQmFja2luZ1N0b3JlIHRvIGhhbmRsZSBhIGNvbXBvc2l0ZWQgaW1hZ2Us
IHdlIGNhbiBnZXQgZm9sbG93aW5nCisgICAgICAgIGJlbmVmaXRzLgorICAgICAgICAxLiBXaGVu
IGEgY29tcG9zaXRlZCBpbWFnZSBpcyBvZmYgdGhlIHZpZXdwb3J0LCBUZXh0dXJlTWFwcGVyTGF5
ZXIgY2FuIHJlbW92ZSBhbgorICAgICAgICBpbWFnZSB0ZXh0dXJlIHRvIHNhdmUgdGV4dHVyZSBt
ZW1vcnkuIE1vcmVvdmVyLCBpZiB0aGUgaW1hZ2UgaXMgYmlnIGFuZCB0aGUgcGFydAorICAgICAg
ICBpcyBvbiB0aGUgdmlld3BvcnQsIHdlIGNhbiByZW1vdmUgb25seSBpbnZpc2libGUgdGlsZXMs
IG5vdCB0aGUgd2hvbGUgaW1hZ2UuCisgICAgICAgIDIuIFdlIGNhbiB1c2UgR3JhcGhpY3NTdXJm
YWNlIHRvIHNlbmQgYW4gaW1hZ2UgdG8gVUkgUHJvY2Vzcy4KKyAgICAgICAgMy4gV2UgY2FuIHNl
bmQgYSBiaWcgaW1hZ2UgdG8gVUkgUHJvY2VzcyB1c2luZyBtYW55IHNtYWxsIHRpbGVzLgorCisg
ICAgICAgIFdlIGNyZWF0ZSBvbmx5IG9uZSBUaWxlZEJhY2tpbmdTdG9yZSBwZXIgaW1hZ2UgKGUu
Zy4gaW4gdGhlIGxlYXZlcyBkZW1vIHdlIGhhdmUKKyAgICAgICAgb25seSAzIGxlYXZlIFRpbGVk
QmFja2luZ1N0b3JlcykuCisKKyAgICAgICAgSW4gYWRkaXRpb24sIHRoaXMgcGF0Y2ggZml4ZXMg
dGhlIGJ1ZyB0aGF0IENvb3JkaW5hdGVkIEdyYXBoaWNzIG9ubHkgcmVuZGVycyB0aGUKKyAgICAg
ICAgZmlyc3QgZnJhbWUgb2YgYSBnaWYgYW5pbWF0aW9uIGltYWdlLgorCisgICAgICAgICogU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRC5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogU2hhcmVkL1dlYkxheWVyVHJlZUlu
Zm8uaDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJJbmZvOjpXZWJMYXllckluZm8pOgorICAg
ICAgICAoV2ViTGF5ZXJJbmZvKToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpjcmVhdGVUaWxl
Rm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojp1
cGRhdGVUaWxlRm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpyZW1vdmVUaWxlRm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlVGlsZWRDb21wb3NpdGVk
SW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkZXN0
cm95VGlsZWRDb21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29y
ZGluYXRvclByb3h5OjpjcmVhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRlVGlsZUZvckNvbXBvc2l0ZWRJ
bWFnZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnJlbW92
ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29y
ZGluYXRvclByb3h5OjpwdXJnZUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaDoKKyAgICAgICAg
KExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW46CisgICAg
ICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJTdGF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjphc3NpZ25JbWFnZVRvTGF5ZXIpOgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6Omdl
dEJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpjcmVh
dGVUaWxlRm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6cmVt
b3ZlVGlsZUZvckxheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OnVw
ZGF0ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpj
cmVhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRp
bGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxlZENvbXBvc2l0ZWRJ
bWFnZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95VGlsZWRD
b21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6cmVt
b3ZlUmVsZWFzZWRJbWFnZXNJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJl
bmRlcmVyOjpjcmVhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFn
ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpnZXRCYWNraW5nU3RvcmVG
b3JDb21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6
cHVyZ2VHTFJlc291cmNlcyk6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlUmVuZGVyZXIuaDoKKyAgICAgICAgKExheWVyVHJlZVJlbmRlcmVyKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZENvbXBvc2l0ZWRJbWFnZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFdlYktpdDo6Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U6OmdldENvb3JkaW5hdGVkQ29tcG9z
aXRlZEltYWdlSUQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFn
ZTo6Y3JlYXRlKToKKyAgICAgICAgKENvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9yZSk6CisgICAg
ICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlOjpDb29yZGluYXRlZENvbXBv
c2l0ZWRJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdl
Ojp+Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZENvbXBvc2l0ZWRJbWFnZTo6YWRkTGF5ZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpD
b29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6cmVtb3ZlTGF5ZXJDbGllbnQpOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6aW52YWxpZGF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlOjp1cGRhdGUpOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6dmlzaWJsZVJlY3QpOgorICAgICAg
ICAoV2ViS2l0OjpDb21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmU6OkNvbXBvc2l0ZWRUaWxlZEJh
Y2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9y
ZTo6fkNvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbXBv
c2l0ZWRUaWxlZEJhY2tpbmdTdG9yZTo6dXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9z
aXRlZFRpbGVkQmFja2luZ1N0b3JlOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4pOgorICAg
ICAgICAoV2ViS2l0OjpDb21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmU6OnRpbGVkQmFja2luZ1N0
b3JlUGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmU6
OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQpOgorICAgICAgICAoV2ViS2l0OjpDb21wb3NpdGVk
VGlsZWRCYWNraW5nU3RvcmU6OnRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQpOgorICAg
ICAgICAoV2ViS2l0OjpDb21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmU6OnRpbGVkQmFja2luZ1N0
b3JlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRlZFRpbGVkQmFja2lu
Z1N0b3JlOjp0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYktpdDo6
Q29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3JlOjp0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRD
b2xvcik6CisgICAgICAgIChXZWJLaXQ6OkNvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9yZTo6YmVn
aW5Db250ZW50VXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRlZFRpbGVkQmFja2lu
Z1N0b3JlOjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRlZFRpbGVkQmFj
a2luZ1N0b3JlOjp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6Q29tcG9zaXRlZFRpbGVk
QmFja2luZ1N0b3JlOjpyZW1vdmVUaWxlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS5oOiBBZGRlZC4K
KyAgICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgdXNlcyBDb29yZGluYXRlZENvbXBv
c2l0ZWRJbWFnZSB0byBoYW5kbGUgYQorICAgICAgICAgIGNvbXBvc2l0ZWQgaW1hZ2UuIENvb3Jk
aW5hdGVkQ29tcG9zaXRlZEltYWdlIHBsYXlzIGEgcm9sZSBpbiBpbWFnZQorICAgICAgICAgIHJl
c291cmNlIG1hbmFnZW1lbnQ6IHNlbmRpbmcgdGhlIGltYWdlIHRvIFVJIFByb2Nlc3MsIHJlbW92
aW5nIGFuCisgICAgICAgICAgaW52aXNpYmxlIHBhcnQgb2YgdGhlIGltYWdlIGFuZCByZXBhaW50
aW5nIHdoaWxlIGEgZ2lmIGFuaW1hdGlvbgorICAgICAgICAgIHByb2dyZXNzZXMuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChDb29yZGluYXRlZENvbXBv
c2l0ZWRJbWFnZUNsaWVudCk6CisgICAgICAgIChDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUdy
YXBoaWNzTGF5ZXJDbGllbnQpOgorICAgICAgICAoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2Up
OgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6aWQpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OmRpZENoYW5nZUNvbXBvc2l0ZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRlZEltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9y
VGhpc0xheWVyT25seSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OmNvbXBvc2l0ZWRJbWFnZVZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6cmVsZWFzZUNvbXBvc2l0ZWRJbWFnZUlmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlQmFja2luZ1N0
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YmVnaW5D
b250ZW50VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6aGFzUGVuZGluZ1Zpc2libGVDaGFuZ2VzKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
aDoKKyAgICAgICAgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk6CisgICAgICAgIChD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OkxheWVyVHJlZUNvb3JkaW5hdG9yKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdl
cyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjphZG9wdENvbXBvc2l0
ZWRJbWFnZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVD
b29yZGluYXRvcjo6cmVsZWFzZUNvbXBvc2l0ZWRJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUNvb3JkaW5hdG9yOjp1cGRhdGVDb21wb3NpdGVkSW1hZ2VzKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZVRpbGVkQ29tcG9zaXRlZEltYWdlKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRlc3Ryb3lUaWxlZENvbXBv
c2l0ZWRJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVh
dGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OnVwZGF0ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVDb29yZGluYXRvcjo6cmVtb3ZlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpiZWdpbkNvbXBvc2l0ZWRJbWFn
ZVVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllclRy
ZWVDb21wb3NpdGVkSW1hZ2VUaWxlVXBkYXRlc0FsbG93ZWQpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVDb29yZGluYXRvcjo6cmVtb3ZlVXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVDb29yZGluYXRvcjo6cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRv
ci5oOgorICAgICAgICAoTGF5ZXJUcmVlQ29vcmRpbmF0b3IpOgorCiAyMDEyLTExLTA3ICBIdWFu
ZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgogCiAgICAgICAgIENvb3JkaW5h
dGVkIEdyYXBoaWNzOiBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBw
ZXIgbXVzdCBjb25jZXJuIHRhcmdldFJlY3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IGFlOGYz
OTcyYTMxZjhhZWY1OTE0MjRmZGNlYzZkY2VmYzllNGEyY2QuLjg2MjJiMWMzYjRlOTZiMzdmYzY2
MzA3N2NhMTRjYTMyNzgxYjk0Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC04MjYsNyArODI2
LDcgQEAgdm9pZCBGcmFtZTo6c2V0VGlsZWRCYWNraW5nU3RvcmVFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKICAgICB9CiAgICAgaWYgKG1fdGlsZWRCYWNraW5nU3RvcmUpCiAgICAgICAgIHJldHVybjsK
LSAgICBtX3RpbGVkQmFja2luZ1N0b3JlID0gYWRvcHRQdHIobmV3IFRpbGVkQmFja2luZ1N0b3Jl
KHRoaXMpKTsKKyAgICBtX3RpbGVkQmFja2luZ1N0b3JlID0gVGlsZWRCYWNraW5nU3RvcmU6OmNy
ZWF0ZSh0aGlzKTsKICAgICBpZiAobV92aWV3KQogICAgICAgICBtX3ZpZXctPnNldFBhaW50c0Vu
dGlyZUNvbnRlbnRzKHRydWUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwCmluZGV4IGM1NjRkYmVkMDZkOGQ5Mjdh
NzE1ZDIzNmQ3NzQ4ZGU3YWRlMDJjNTkuLjk3YzRhM2VmODhhMWM3NGFlNzA2Y2YzNDI0MGIwOWUw
MzdkZGExNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Rp
bGVkQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAKQEAgLTM1LDYgKzM1LDExIEBAIHN0YXRpYyBJbnRQb2lu
dCBpbm5lckJvdHRvbVJpZ2h0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgcmV0dXJuIEludFBv
aW50KHJlY3QubWF4WCgpIC0gMSwgcmVjdC5tYXhZKCkgLSAxKTsKIH0KIAorUGFzc093blB0cjxU
aWxlZEJhY2tpbmdTdG9yZT4gVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZShUaWxlZEJhY2tpbmdT
dG9yZUNsaWVudCogY2xpZW50LCBQYXNzT3duUHRyPFRpbGVkQmFja2luZ1N0b3JlQmFja2VuZD4g
YmFja2VuZCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRpbGVkQmFja2luZ1N0b3JlKGNs
aWVudCwgYmFja2VuZCkpOworfQorCiBUaWxlZEJhY2tpbmdTdG9yZTo6VGlsZWRCYWNraW5nU3Rv
cmUoVGlsZWRCYWNraW5nU3RvcmVDbGllbnQqIGNsaWVudCwgUGFzc093blB0cjxUaWxlZEJhY2tp
bmdTdG9yZUJhY2tlbmQ+IGJhY2tlbmQpCiAgICAgOiBtX2NsaWVudChjbGllbnQpCiAgICAgLCBt
X2JhY2tlbmQoYmFja2VuZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9UaWxlZEJhY2tpbmdTdG9yZS5oCmluZGV4IGIzYzM2NWMzNTljZTI2MWQ5OWFlYTg0YWQ4
Y2U1NjVjMWNhODdlNGQuLmQ2NGFlMGMwYzQ4NTlkMDg0ODQ3ZTg1MjVkMjg3OGZlYTk1Zjg0OTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2lu
Z1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNr
aW5nU3RvcmUuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC00MSw3ICs0Miw3IEBAIGNsYXNzIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50
OwogY2xhc3MgVGlsZWRCYWNraW5nU3RvcmUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRp
bGVkQmFja2luZ1N0b3JlKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAg
VGlsZWRCYWNraW5nU3RvcmUoVGlsZWRCYWNraW5nU3RvcmVDbGllbnQqLCBQYXNzT3duUHRyPFRp
bGVkQmFja2luZ1N0b3JlQmFja2VuZD4gPSBUaWxlZEJhY2tpbmdTdG9yZUJhY2tlbmQ6OmNyZWF0
ZSgpKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxUaWxlZEJhY2tpbmdTdG9yZT4gY3JlYXRlKFRp
bGVkQmFja2luZ1N0b3JlQ2xpZW50KiwgUGFzc093blB0cjxUaWxlZEJhY2tpbmdTdG9yZUJhY2tl
bmQ+ID0gVGlsZWRCYWNraW5nU3RvcmVCYWNrZW5kOjpjcmVhdGUoKSk7CiAgICAgflRpbGVkQmFj
a2luZ1N0b3JlKCk7CiAKICAgICBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudCogY2xpZW50KCkgeyBy
ZXR1cm4gbV9jbGllbnQ7IH0KQEAgLTgwLDYgKzgxLDggQEAgcHVibGljOgogICAgIGJvb2wgc3Vw
cG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VwcG9ydHNBbHBoYTsgfQogCiBwcml2YXRl
OgorICAgIFRpbGVkQmFja2luZ1N0b3JlKFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50KiwgUGFzc093
blB0cjxUaWxlZEJhY2tpbmdTdG9yZUJhY2tlbmQ+KTsKKwogICAgIHZvaWQgc3RhcnRUaWxlQnVm
ZmVyVXBkYXRlVGltZXIoKTsKICAgICB2b2lkIHN0YXJ0QmFja2luZ1N0b3JlVXBkYXRlVGltZXIo
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggNDE4
OTdjNjNlODE4NWQ5NmU4NTBjM2FiNjIyZmYyMDliZTkxNjZhZS4uZmRkYjc4OTc1NmE0NDVkNzk0
ZTg4Mzg4YWFmYWZmNDZhZWNhNjg3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIuY3BwCkBAIC00NCw2ICs0NCw3IEBAIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4g
R3JhcGhpY3NMYXllcjo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKIEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihHcmFwaGlj
c0xheWVyQ2xpZW50KiBjbGllbnQpCiAgICAgOiBHcmFwaGljc0xheWVyKGNsaWVudCkKICAgICAs
IG1fbGF5ZXIoYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJMYXllcigpKSkKKyAgICAsIG1fY29t
cG9zaXRlZE5hdGl2ZUltYWdlUHRyKDApCiAgICAgLCBtX2NoYW5nZU1hc2soMCkKICAgICAsIG1f
bmVlZHNEaXNwbGF5KGZhbHNlKQogICAgICwgbV9maXhlZFRvVmlld3BvcnQoZmFsc2UpCkBAIC0z
NTEsOCArMzUyLDEwIEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRl
bnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiAgICAgICAgIGlmICghbV9jb21wb3NpdGVkSW1hZ2Up
CiAgICAgICAgICAgICBtX2NvbXBvc2l0ZWRJbWFnZSA9IFRleHR1cmVNYXBwZXJUaWxlZEJhY2tp
bmdTdG9yZTo6Y3JlYXRlKCk7CiAgICAgICAgIG1fY29tcG9zaXRlZEltYWdlLT5zZXRDb250ZW50
c1RvSW1hZ2UoaW1hZ2UpOwotICAgIH0gZWxzZQorICAgIH0gZWxzZSB7CisgICAgICAgIG1fY29t
cG9zaXRlZE5hdGl2ZUltYWdlUHRyID0gMDsKICAgICAgICAgbV9jb21wb3NpdGVkSW1hZ2UgPSAw
OworICAgIH0KIAogICAgIHNldENvbnRlbnRzVG9NZWRpYShtX2NvbXBvc2l0ZWRJbWFnZS5nZXQo
KSk7CiAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6Q29udGVudENoYW5nZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCmluZGV4IDUxMGIyM2Y1YzAy
NDVkZTRjZjJiMDNkMDJiNDNiZWFmMzkyOGI4ZDIuLmU3ZWRkNjI5YzFmMTM1OWE3OGM2ODQyOTcy
NjZiYzUxNzA5NTEzYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5o
CkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb21wb3Np
dGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbXBv
c2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5hbWUo
Y29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3Jt
TGF5ZXIoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBw
bGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c0xheWVyOyB9CiAKICAgICB2
b2lkIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6OkNoYW5nZU1hc2spOwogICAgIGlu
bGluZSBpbnQgY2hhbmdlTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbmdlTWFzazsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJMYXllci5oCmluZGV4IDVjZDk1OWQ2MTNkODM0YTQ5Y2E5NjFlMTczMTk4MTAz
YzRjMmIwNjkuLmQ1YTkyOGIzNjY0OTI3YTYzOWVhYzZjZTQwOWNlYzUyMmYwZDAyZDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckxheWVyLmgKQEAgLTEyOCw3ICsxMjgsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBwYWludCgpOwogCiAgICAgdm9pZCBzZXRTaG91bGRVcGRhdGVCYWNraW5nU3RvcmVGcm9tTGF5
ZXIoYm9vbCBiKSB7IG1fc2hvdWxkVXBkYXRlQmFja2luZ1N0b3JlRnJvbUxheWVyID0gYjsgfQot
ICAgIHZvaWQgc2V0QmFja2luZ1N0b3JlKFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUqIGJhY2tp
bmdTdG9yZSkgeyBtX2JhY2tpbmdTdG9yZSA9IGJhY2tpbmdTdG9yZTsgfQorICAgIHZvaWQgc2V0
QmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4gYmFja2lu
Z1N0b3JlKSB7IG1fYmFja2luZ1N0b3JlID0gYmFja2luZ1N0b3JlOyB9CiAgICAgUGFzc1JlZlB0
cjxUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoKSB7IHJldHVybiBtX2Jh
Y2tpbmdTdG9yZTsgfQogICAgIHZvaWQgY2xlYXJCYWNraW5nU3RvcmVzUmVjdXJzaXZlKCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktp
dDIvQ01ha2VMaXN0cy50eHQKaW5kZXggNmU0NmY0OGE5OWUzMTJiMzcwNjMxY2FiMjMzMjdiOTJi
NTU1Y2IxZS4uYzhjNGRiYzU1OWYwMzdmNTFhY2RlYWNhMWI5MGQ1ZDc2YmU2Yjc2MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIv
Q01ha2VMaXN0cy50eHQKQEAgLTQ5NCw2ICs0OTQsNyBAQCBTRVQoV2ViS2l0Ml9TT1VSQ0VTCiAg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcAogICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5jcHAKIAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLmNwcAogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ci5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZFRpbGUuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELmggYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENvbXBv
c2l0ZWRJbWFnZUlELmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjhlZWE2OWU2MjY1ODZlZDQ1NzNjYWM3ZDQzMzZl
NDIzMTVlNGMzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQuaApAQCAtMCwwICsx
LDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBDb29yZGluYXRlZENvbXBvc2l0
ZWRJbWFnZUlEX2gKKyNkZWZpbmUgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRF9oCisKKyNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCituYW1lc3BhY2UgV2ViS2l0IHsKK3R5cGVkZWYg
dWludHB0cl90IENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQ7CitlbnVtIHsgSW52YWxpZENv
b3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgPSAwIH07Cit9CisjZW5kaWYKKyNlbmRpZiAvLyBD
b29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5
ZXJUcmVlSW5mby5oCmluZGV4IDU4ZTA3YmMwMjdlZmQ1YzFhOTU5YjNiMGM2MThlNGFlMDVjZTc4
ZTguLmE0MzE2NDEzNDViMTk3YzQzMzRkOWJiZmYzZGFkMWVkMTllZGYwZjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKKysrIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaApAQCAtMjQsMTAgKzI0LDEwIEBACiAKICNp
bmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKICNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIK
KyNpbmNsdWRlICJDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELmgiCiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXll
ci5oIgotI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IApAQCAtMzksMTMgKzM5LDEzIEBAIHN0cnVjdCBXZWJMYXllckluZm8gewogICAgIFdlYkxheWVy
SW5mbygpCiAgICAgICAgIDogcmVwbGljYShJbnZhbGlkV2ViTGF5ZXJJRCkKICAgICAgICAgLCBt
YXNrKEludmFsaWRXZWJMYXllcklEKQotICAgICAgICAsIGltYWdlQmFja2luZ1N0b3JlSUQoMCkK
KyAgICAgICAgLCBpbWFnZUlEKEludmFsaWRDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEKQog
ICAgICAgICAsIG9wYWNpdHkoMCkKICAgICAgICAgLCBmbGFncygwKSB7IH0KIAogICAgIFdlYkxh
eWVySUQgcmVwbGljYTsKICAgICBXZWJMYXllcklEIG1hc2s7Ci0gICAgaW50NjRfdCBpbWFnZUJh
Y2tpbmdTdG9yZUlEOworICAgIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgaW1hZ2VJRDsK
IAogICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9zOwogICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQz
RCBhbmNob3JQb2ludDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9T
b3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IGFhMjM3NDhkMjdmNDk3NWU2ZmY4ODc0NGFl
ZWUxNTI0Y2VhMjkyMWQuLmE1YjkyNjc5NDI0NjNkMTMwZWEwYmRmMzU0OGZlOGYwNGU4MDFmN2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktp
dDIvVGFyZ2V0LnByaQpAQCAtMTM0LDYgKzEzNCw3IEBAIEhFQURFUlMgKz0gXAogICAgIFNoYXJl
ZC9XZWJVUkxSZXF1ZXN0LmggXAogICAgIFNoYXJlZC9XZWJVUkxSZXNwb25zZS5oIFwKICAgICBT
aGFyZWQvV2ViVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmggXAorICAgIFNoYXJlZC9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQuaCBcCiAgICAgU2hhcmVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmggXAog
ICAgIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkN1c3RvbUZpbHRlclByb2dyYW0uaCBc
CiAgICAgU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5Nb2R1bGUuaCBcCkBA
IC0zNjMsNiArMzY0LDcgQEAgSEVBREVSUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Ry
YXdpbmdBcmVhSW1wbC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVy
LmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oIFwKKyAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENvbXBvc2l0ZWRJ
bWFnZS5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmggXApAQCAtNzM5LDYgKzc0
MSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FbmNvZGVyQWRhcHRl
ci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwIFwKICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIFwKKyAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS5j
cHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcCBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVD
b29yZGluYXRvclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCmluZGV4IDRkNDNmZWI4MTcw
MGU5NTc5Y2M3NjZlZWE3MzdmYThjNzY1MDNkNTYuLjcyNTFiMmNkZTZlNjliYWIyNGUwNjZhODgx
OTQyOWFjODYwZjRiNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkuY3BwCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eTo6ZGlzcGF0Y2hVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCiAK
IHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlVGlsZUZvckxheWVyKGludCBs
YXllcklELCBpbnQgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBXZWJL
aXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQogewotICAgIGRpc3BhdGNoVXBkYXRl
KGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBs
YXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IpKTsKKyAgICBkaXNwYXRjaFVw
ZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlVGlsZUZvckxheWVyLCBtX3JlbmRl
cmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IpKTsKICAg
ICB1cGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0YXJnZXRSZWN0LCB1cGRhdGVJ
bmZvKTsKIH0KIApAQCAtNjYsMTIgKzY2LDQwIEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eTo6dXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zCiB7
CiAgICAgU3VyZmFjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N1cmZhY2VzLmZpbmQodXBkYXRlSW5m
by5hdGxhc0lEKTsKICAgICBBU1NFUlQoaXQgIT0gbV9zdXJmYWNlcy5lbmQoKSk7Ci0gICAgZGlz
cGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGUsIG1fcmVuZGVy
ZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwgTGF5ZXJUcmVlUmVuZGVyZXI6OlRpbGVVcGRhdGUo
dXBkYXRlSW5mby51cGRhdGVSZWN0LCB0YXJnZXRSZWN0LCBpdC0+dmFsdWUsIHVwZGF0ZUluZm8u
c3VyZmFjZU9mZnNldCkpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5k
ZXJlcjo6dXBkYXRlVGlsZUZvckxheWVyLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxl
SUQsIExheWVyVHJlZVJlbmRlcmVyOjpUaWxlVXBkYXRlKHVwZGF0ZUluZm8udXBkYXRlUmVjdCwg
dGFyZ2V0UmVjdCwgaXQtPnZhbHVlLCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpKSk7CiB9CiAK
IHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKGludCBs
YXllcklELCBpbnQgdGlsZUlEKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJl
ZVJlbmRlcmVyOjpyZW1vdmVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQp
KTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlVGls
ZUZvckxheWVyLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQpKTsKK30KKwordm9p
ZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpjcmVhdGVUaWxlZENvbXBvc2l0ZWRJbWFnZShD
b29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEIGltYWdlSUQsIGNvbnN0IEludFNpemUmIHNpemUp
Cit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZVRp
bGVkQ29tcG9zaXRlZEltYWdlLCBtX3JlbmRlcmVyLmdldCgpLCBpbWFnZUlELCBzaXplKSk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6ZGVzdHJveVRpbGVkQ29tcG9zaXRl
ZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgaW1hZ2VJRCkKK3sKKyAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6ZGVzdHJveVRpbGVkQ29tcG9zaXRl
ZEltYWdlLCBtX3JlbmRlcmVyLmdldCgpLCBpbWFnZUlEKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRl
ZENvbXBvc2l0ZWRJbWFnZUlEIGltYWdlSUQsIGludCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHRh
cmdldFJlY3QsIGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7
CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZVRpbGVG
b3JDb21wb3NpdGVkSW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGltYWdlSUQsIHRpbGVJRCwgdXBk
YXRlSW5mby5zY2FsZUZhY3RvcikpOworICAgIHVwZGF0ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2Uo
aW1hZ2VJRCwgdGlsZUlELCB0YXJnZXRSZWN0LCB1cGRhdGVJbmZvKTsKK30KKwordm9pZCBMYXll
clRyZWVDb29yZGluYXRvclByb3h5Ojp1cGRhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKENvb3Jk
aW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgaW1hZ2VJRCwgaW50IHRpbGVJRCwgY29uc3QgSW50UmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5m
bykKK3sKKyAgICBTdXJmYWNlTWFwOjppdGVyYXRvciBpdCA9IG1fc3VyZmFjZXMuZmluZCh1cGRh
dGVJbmZvLmF0bGFzSUQpOworICAgIEFTU0VSVChpdCAhPSBtX3N1cmZhY2VzLmVuZCgpKTsKKyAg
ICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZUZvckNv
bXBvc2l0ZWRJbWFnZSwgbV9yZW5kZXJlci5nZXQoKSwgaW1hZ2VJRCwgdGlsZUlELCBMYXllclRy
ZWVSZW5kZXJlcjo6VGlsZVVwZGF0ZSh1cGRhdGVJbmZvLnVwZGF0ZVJlY3QsIHRhcmdldFJlY3Qs
IGl0LT52YWx1ZSwgdXBkYXRlSW5mby5zdXJmYWNlT2Zmc2V0KSkpOworfQorCit2b2lkIExheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OnJlbW92ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UoQ29vcmRp
bmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCBpbWFnZUlELCBpbnQgdGlsZUlEKQoreworICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxlRm9yQ29tcG9zaXRl
ZEltYWdlLCBtX3JlbmRlcmVyLmdldCgpLCBpbWFnZUlELCB0aWxlSUQpKTsKIH0KIAogdm9pZCBM
YXllclRyZWVDb29yZGluYXRvclByb3h5OjpjcmVhdGVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCwg
Y29uc3QgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCkBAIC0xMjcsMTcgKzE1NSw2
IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6ZGlkUmVuZGVyRnJhbWUoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgY29udGVudHNTCiAjZW5kaWYKIH0KIAotdm9pZCBMYXllclRyZWVD
b29yZGluYXRvclByb3h5OjpjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtl
eSwgY29uc3QgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlKQotewotICAg
IFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRl
KGhhbmRsZSk7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmNy
ZWF0ZUltYWdlLCBtX3JlbmRlcmVyLmdldCgpLCBrZXksIGJpdG1hcCkpOwotfQotCi12b2lkIExh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShp
bnQ2NF90IGtleSkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJl
cjo6ZGVzdHJveUltYWdlLCBtX3JlbmRlcmVyLmdldCgpLCBrZXkpKTsKLX0KLQogdm9pZCBMYXll
clRyZWVDb29yZGluYXRvclByb3h5OjpzZXRDb250ZW50c1NpemUoY29uc3QgRmxvYXRTaXplJiBj
b250ZW50c1NpemUpCiB7CiAgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVy
ZXI6OnNldENvbnRlbnRzU2l6ZSwgbV9yZW5kZXJlci5nZXQoKSwgY29udGVudHNTaXplKSk7CkBA
IC0yMDEsNiArMjE4LDkgQEAgdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzeW5jQ2Fu
dmFzKHVpbnQzMl90IGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXoKIAogdm9pZCBMYXllclRy
ZWVDb29yZGluYXRvclByb3h5OjpwdXJnZUJhY2tpbmdTdG9yZXMoKQogeworICAgIC8vIFdlIGRv
bid0IGV4cGVjdCB0byByZWNlaXZlIHRoZSBtZXNzYWdlcyByZWxhdGVkIHRvIHJlbGVhc2luZyBy
ZXNvdXJjZXMgZnJvbSBXZWIgUHJvY2VzcyBhZnRlciBzZW5kaW5nIHRoZSBQdXJnZUJhY2tpbmdT
dG9yZXMgbWVzc2FnZS4KKyAgICAvLyBTZWUgTGF5ZXJUcmVlUmVuZGVyZXI6OnB1cmdlR0xSZXNv
dXJjZXMoKQorICAgIG1fc3VyZmFjZXMuY2xlYXIoKTsKICAgICBtX2RyYXdpbmdBcmVhUHJveHkt
PnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvcjo6
UHVyZ2VCYWNraW5nU3RvcmVzKCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQo
KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaApp
bmRleCA2NDY4MDExNjhmMjRhNzg5YjdlYjgwNzFjZjRiNmY4YTRjNGZiOTdhLi40NGIyYmFlN2Q4
NjdjMmVjNzE0Yzg0M2U4NjY2OTM3MDdlNDRlYmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oCkBAIC0yMyw2ICsyMyw3IEBACiAjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQogCiAjaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAi
Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRC5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3Jh
cGhpY3NBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKICNp
bmNsdWRlICJSZWdpb24uaCIKQEAgLTY1LDEwICs2NiwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
cmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpOwogICAgIHZvaWQgdXBkYXRlVGls
ZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mKTsKICAgICB2b2lkIHJlbW92ZVRpbGVGb3JMYXll
cihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCk7CisgICAgdm9pZCBjcmVhdGVUaWxlZENvbXBvc2l0
ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJik7CisgICAgdm9pZCBkZXN0cm95VGlsZWRDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRD
b21wb3NpdGVkSW1hZ2VJRCk7CisgICAgdm9pZCBjcmVhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdl
KENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpOworICAgIHZvaWQgdXBkYXRlVGls
ZUZvckNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELCBpbnQgdGls
ZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mKTsK
KyAgICB2b2lkIHJlbW92ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3Np
dGVkSW1hZ2VJRCwgaW50IHRpbGVJRCk7CiAgICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyhpbnQg
YXRsYXNJRCwgY29uc3QgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJik7CiAgICAgdm9pZCByZW1v
dmVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCk7Ci0gICAgdm9pZCBjcmVhdGVEaXJlY3RseUNvbXBv
c2l0ZWRJbWFnZShpbnQ2NF90LCBjb25zdCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxl
Jik7Ci0gICAgdm9pZCBkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCk7CiAg
ICAgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2UoQ29yZUlQ
Qzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29k
ZXImKTsKICAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7CiAgICAgdm9pZCByZW5kZXJOZXh0RnJh
bWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclBy
b3h5Lm1lc3NhZ2VzLmluCmluZGV4IGJhODhkZTUzZmYzM2U0NWYxZDA4OGEzZDIwNTU3MGE0MGZk
NGI1NjcuLmU2MjE5YmNjMmVhMzlhNDYxMWMzNTRjYjYwYzZmY2RhOTAzZWZkN2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdl
cy5pbgpAQCAtMjksMTAgKzI5LDEzIEBAIG1lc3NhZ2VzIC0+IExheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHkgewogICAgIENyZWF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGls
ZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRhcmdldFJlY3QsIFdlYktpdDo6U3VyZmFjZVVwZGF0ZUlu
Zm8gdXBkYXRlSW5mbykKICAgICBVcGRhdGVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwg
aW50IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0YXJnZXRSZWN0LCBXZWJLaXQ6OlN1cmZhY2VV
cGRhdGVJbmZvIHVwZGF0ZUluZm8pCiAgICAgUmVtb3ZlVGlsZUZvckxheWVyKHVpbnQzMl90IGxh
eWVySUQsIGludCB0aWxlSUQpCisgICAgQ3JlYXRlVGlsZWRDb21wb3NpdGVkSW1hZ2UodWludHB0
cl90IGltYWdlSUQsIFdlYkNvcmU6OkludFNpemUgc2l6ZSkKKyAgICBEZXN0cm95VGlsZWRDb21w
b3NpdGVkSW1hZ2UodWludHB0cl90IGltYWdlSUQpCisgICAgQ3JlYXRlVGlsZUZvckNvbXBvc2l0
ZWRJbWFnZSh1aW50cHRyX3QgaW1hZ2VJRCwgaW50IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0
YXJnZXRSZWN0LCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCisgICAgVXBk
YXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZSh1aW50cHRyX3QgaW1hZ2VJRCwgaW50IHRpbGVJRCwg
V2ViQ29yZTo6SW50UmVjdCB0YXJnZXRSZWN0LCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvIHVw
ZGF0ZUluZm8pCisgICAgUmVtb3ZlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZSh1aW50cHRyX3QgaW1h
Z2VJRCwgaW50IHRpbGVJRCkKICAgICBDcmVhdGVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCwgV2Vi
S2l0OjpTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUgaGFuZGxlKQogICAgIFJlbW92ZVVwZGF0ZUF0
bGFzKGludCBhdGxhc0lEKQotICAgIENyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0
X3Qga2V5LCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkKLSAgICBEZXN0
cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkpCiAgICAgRGlkUmVuZGVyRnJh
bWUoV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUsIFdlYkNvcmU6OkludFJlY3QgY292ZXJl
ZFJlY3QpCiAgICAgRGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6SW50UG9pbnQgcG9z
aXRpb24pCiAgICAgU2V0TGF5ZXJBbmltYXRpb25zKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyQW5pbWF0aW9ucyBhbmltYXRpb25zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVu
ZGVyZXIuY3BwCmluZGV4IDc1ODIzM2ViM2I1NDQ3YTdmNWZhNzUzMWI1ZWUwMjdiYjg1NDI3ZmMu
LmQ5NTI5ZWFiMWY4ZDY3MGYzNGRkZmJjOWU4MDhkY2UyYjM1YmVkNDcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRl
cmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVSZW5kZXJlci5jcHAKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHkuaCIKICNpbmNsdWRlICJNZXNzYWdlSUQuaCIKLSNpbmNsdWRlICJTaGFyZWFibGVCaXRt
YXAuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ckJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgpAQCAtMzAxLDcg
KzMwMCw3IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyU3RhdGUoV2ViTGF5ZXJJ
RCBpZCwgY29uc3QgV2ViTGF5ZXJJbmZvJiBsYXllckluCiAgICAgZWxzZQogICAgICAgICBtX2Zp
eGVkTGF5ZXJzLnJlbW92ZShpZCk7CiAKLSAgICBhc3NpZ25JbWFnZVRvTGF5ZXIobGF5ZXIsIGxh
eWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKKyAgICBhc3NpZ25JbWFnZVRvTGF5ZXIobGF5
ZXIsIGxheWVySW5mby5pbWFnZUlEKTsKIAogICAgIC8vIE5ldmVyIG1ha2UgdGhlIHJvb3QgbGF5
ZXIgY2xpcC4KICAgICBsYXllci0+c2V0TWFza3NUb0JvdW5kcyhsYXllckluZm8uaXNSb290TGF5
ZXIgPyBmYWxzZSA6IGxheWVySW5mby5tYXNrc1RvQm91bmRzKTsKQEAgLTM1NCw2NCArMzUzLDEx
NSBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRSb290TGF5ZXJJRChXZWJMYXllcklEIGxh
eWVySUQpCiAgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKGxheWVyKTsKIH0KIAotUGFzc1JlZlB0
cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gTGF5ZXJUcmVlUmVuZGVyZXI6OmdldEJhY2tpbmdT
dG9yZShXZWJMYXllcklEIGlkKQordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6YXNzaWduSW1hZ2VU
b0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlE
IGltYWdlSUQpCit7CisgICAgcmVtb3ZlUmVsZWFzZWRJbWFnZXNJZk5lZWRlZCgpOworCisgICAg
aWYgKEludmFsaWRDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEID09IGltYWdlSUQpIHsKKyAg
ICAgICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYSgwKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBUaWxlZENvbXBvc2l0ZWRJbWFnZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVkQ29t
cG9zaXRlZEltYWdlcy5maW5kKGltYWdlSUQpOworICAgIEFTU0VSVChpdCAhPSBtX3RpbGVkQ29t
cG9zaXRlZEltYWdlcy5lbmQoKSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShpdC0+
dmFsdWUuZ2V0KCkpOworfQorCitDb29yZGluYXRlZEJhY2tpbmdTdG9yZSogTGF5ZXJUcmVlUmVu
ZGVyZXI6OmdldEJhY2tpbmdTdG9yZShXZWJMYXllcklEIGlkKQogewogICAgIFRleHR1cmVNYXBw
ZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihsYXllckJ5SUQoaWQpKTsKICAg
ICBBU1NFUlQobGF5ZXIpOwogICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFj
a2luZ1N0b3JlID0gc3RhdGljX2Nhc3Q8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmUqPihsYXllci0+
YmFja2luZ1N0b3JlKCkuZ2V0KCkpOwogICAgIGlmICghYmFja2luZ1N0b3JlKSB7CiAgICAgICAg
IGJhY2tpbmdTdG9yZSA9IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKLSAgICAg
ICAgbGF5ZXItPnNldEJhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUuZ2V0KCkpOworICAgICAgICBs
YXllci0+c2V0QmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSk7CiAgICAgfQogICAgIEFTU0VSVChi
YWNraW5nU3RvcmUpOwotICAgIHJldHVybiBiYWNraW5nU3RvcmU7CisgICAgcmV0dXJuIGJhY2tp
bmdTdG9yZS5nZXQoKTsKIH0KIAotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlVGlsZShX
ZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGZsb2F0IHNjYWxlKQordm9pZCBMYXllclRy
ZWVSZW5kZXJlcjo6Y3JlYXRlVGlsZUZvckxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRp
bGVJRCwgZmxvYXQgc2NhbGUpCiB7Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
PiBiYWNraW5nU3RvcmUgPSBnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCk7Ci0gICAgYmFja2luZ1N0
b3JlLT5jcmVhdGVUaWxlKHRpbGVJRCwgc2NhbGUpOworICAgIENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlKiBiYWNraW5nU3RvcmUgPSBnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCk7CisgICAgY3JlYXRl
VGlsZShiYWNraW5nU3RvcmUsIHRpbGVJRCwgc2NhbGUpOwogCiAgICAgR3JhcGhpY3NMYXllciog
bGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7CiAgICAgQVNTRVJUKGxheWVyKTsKICAgICBiYWNr
aW5nU3RvcmUtPnNldFNpemUobGF5ZXItPnNpemUoKSk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlUmVu
ZGVyZXI6OnJlbW92ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlEKQordm9pZCBM
YXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlVGlsZUZvckxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCwg
aW50IHRpbGVJRCkKK3sKKyAgICByZW1vdmVUaWxlKGdldEJhY2tpbmdTdG9yZShsYXllcklEKSwg
dGlsZUlEKTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZUZvckxheWVy
KFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgVGlsZVVwZGF0ZSYgdXBkYXRl
KQoreworICAgIHVwZGF0ZVRpbGUoZ2V0QmFja2luZ1N0b3JlKGxheWVySUQpLCB0aWxlSUQsIHVw
ZGF0ZSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZVRpbGUoQ29vcmRpbmF0
ZWRCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50IHRpbGVJRCwgZmxvYXQgc2NhbGUpCit7
CisgICAgYmFja2luZ1N0b3JlLT5jcmVhdGVUaWxlKHRpbGVJRCwgc2NhbGUpOworfQorCit2b2lk
IExheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxlKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlKiBi
YWNraW5nU3RvcmUsIGludCB0aWxlSUQpCiB7Ci0gICAgZ2V0QmFja2luZ1N0b3JlKGxheWVySUQp
LT5yZW1vdmVUaWxlKHRpbGVJRCk7CisgICAgYmFja2luZ1N0b3JlLT5yZW1vdmVUaWxlKHRpbGVJ
RCk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCBs
YXllcklELCBpbnQgdGlsZUlELCBjb25zdCBUaWxlVXBkYXRlJiB1cGRhdGUpCit2b2lkIExheWVy
VHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxlKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlKiByYXdCYWNr
aW5nU3RvcmUsIGludCB0aWxlSUQsIGNvbnN0IFRpbGVVcGRhdGUmIHVwZGF0ZSkKIHsKLSAgICBS
ZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IGdldEJhY2tpbmdT
dG9yZShsYXllcklEKTsKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tp
bmdTdG9yZSA9IHJhd0JhY2tpbmdTdG9yZTsKICAgICBiYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGUo
dGlsZUlELCB1cGRhdGUuc291cmNlUmVjdCwgdXBkYXRlLnRhcmdldFJlY3QsIHVwZGF0ZS5zdXJm
YWNlLCB1cGRhdGUub2Zmc2V0KTsKICAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZl
cnMuYWRkKGJhY2tpbmdTdG9yZSk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0
ZUltYWdlKGludDY0X3QgaW1hZ2VJRCwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IHdlYWtC
aXRtYXApCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxlZENvbXBvc2l0ZWRJbWFn
ZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEIGltYWdlSUQsIGNvbnN0IEludFNpemUmIHNp
emUpCiB7Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gd2Vha0JpdG1hcDsK
LSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUg
PSBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOwotICAgIG1fZGlyZWN0
bHlDb21wb3NpdGVkSW1hZ2VzLnNldChpbWFnZUlELCBiYWNraW5nU3RvcmUpOwotICAgIGJhY2tp
bmdTdG9yZS0+dXBkYXRlQ29udGVudHMobV90ZXh0dXJlTWFwcGVyLmdldCgpLCBiaXRtYXAtPmNy
ZWF0ZUltYWdlKCkuZ2V0KCksIEJpdG1hcFRleHR1cmU6OlVwZGF0ZUNhbm5vdE1vZGlmeU9yaWdp
bmFsSW1hZ2VEYXRhKTsKKyAgICBBU1NFUlQoIW1fdGlsZWRDb21wb3NpdGVkSW1hZ2VzLmNvbnRh
aW5zKGltYWdlSUQpKTsKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tp
bmdTdG9yZShDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCkpOworICAgIGJhY2tpbmdT
dG9yZS0+c2V0U2l6ZShzaXplKTsKKyAgICBtX3RpbGVkQ29tcG9zaXRlZEltYWdlcy5hZGQoaW1h
Z2VJRCwgYmFja2luZ1N0b3JlLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlUmVuZGVy
ZXI6OmRlc3Ryb3lJbWFnZShpbnQ2NF90IGltYWdlSUQpCit2b2lkIExheWVyVHJlZVJlbmRlcmVy
OjpkZXN0cm95VGlsZWRDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJ
RCBpbWFnZUlEKQogewotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnJlbW92ZShpbWFn
ZUlEKTsKKyAgICBBU1NFUlQobV90aWxlZENvbXBvc2l0ZWRJbWFnZXMuY29udGFpbnMoaW1hZ2VJ
RCkpOworICAgIC8vIFdlIGRvbid0IHdhbnQgVGV4dHVyZU1hcHBlckxheWVyIHJlZmVycyBhIGRh
bmdsaW5nIHBvaW50ZXIuCisgICAgbV9yZWxlYXNlZEltYWdlSURzLmFwcGVuZChpbWFnZUlEKTsK
IH0KIAotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6YXNzaWduSW1hZ2VUb0xheWVyKEdyYXBoaWNz
TGF5ZXIqIGxheWVyLCBpbnQ2NF90IGltYWdlSUQpCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpy
ZW1vdmVSZWxlYXNlZEltYWdlc0lmTmVlZGVkKCkKIHsKLSAgICBpZiAoIWltYWdlSUQpIHsKLSAg
ICAgICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYSgwKTsKKyAgICBpZiAobV9yZWxlYXNlZElt
YWdlSURzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEhhc2hNYXA8
aW50NjRfdCwgUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGl0
ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZmluZChpbWFnZUlEKTsKLSAgICBBU1NFUlQo
aXQgIT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZW5kKCkpOwotICAgIGxheWVyLT5zZXRD
b250ZW50c1RvTWVkaWEoaXQtPnZhbHVlLmdldCgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fcmVsZWFzZWRJbWFnZUlEcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV90aWxlZENvbXBv
c2l0ZWRJbWFnZXMucmVtb3ZlKG1fcmVsZWFzZWRJbWFnZUlEc1tpXSk7CisgICAgbV9yZWxlYXNl
ZEltYWdlSURzLmNsZWFyKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZVRp
bGVGb3JDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCBpbWFnZUlE
LCBpbnQgdGlsZUlELCBmbG9hdCBzY2FsZSkKK3sKKyAgICBjcmVhdGVUaWxlKGdldEJhY2tpbmdT
dG9yZUZvckNvbXBvc2l0ZWRJbWFnZShpbWFnZUlEKSwgdGlsZUlELCBzY2FsZSk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UoQ29vcmRp
bmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCBpbWFnZUlELCBpbnQgdGlsZUlEKQoreworICAgIHJlbW92
ZVRpbGUoZ2V0QmFja2luZ1N0b3JlRm9yQ29tcG9zaXRlZEltYWdlKGltYWdlSUQpLCB0aWxlSUQp
OworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxlRm9yQ29tcG9zaXRlZElt
YWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgaW1hZ2VJRCwgaW50IHRpbGVJRCwgY29u
c3QgVGlsZVVwZGF0ZSYgdXBkYXRlKQoreworICAgIHVwZGF0ZVRpbGUoZ2V0QmFja2luZ1N0b3Jl
Rm9yQ29tcG9zaXRlZEltYWdlKGltYWdlSUQpLCB0aWxlSUQsIHVwZGF0ZSk7Cit9CisKK0Nvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlKiBMYXllclRyZWVSZW5kZXJlcjo6Z2V0QmFja2luZ1N0b3JlRm9y
Q29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgaW1hZ2VJRCkKK3sK
KyAgICBBU1NFUlQobV90aWxlZENvbXBvc2l0ZWRJbWFnZXMuY29udGFpbnMoaW1hZ2VJRCkpOwor
ICAgIFRpbGVkQ29tcG9zaXRlZEltYWdlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZWRDb21wb3Np
dGVkSW1hZ2VzLmZpbmQoaW1hZ2VJRCk7CisgICAgQVNTRVJUKGl0LT52YWx1ZS5nZXQoKSk7Cisg
ICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAogdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6
Y29tbWl0VGlsZU9wZXJhdGlvbnMoKQpAQCAtNDg4LDcgKzUzOCw3IEBAIHZvaWQgTGF5ZXJUcmVl
UmVuZGVyZXI6OnB1cmdlR0xSZXNvdXJjZXMoKQogICAgIGlmIChsYXllcikKICAgICAgICAgbGF5
ZXItPmNsZWFyQmFja2luZ1N0b3Jlc1JlY3Vyc2l2ZSgpOwogCi0gICAgbV9kaXJlY3RseUNvbXBv
c2l0ZWRJbWFnZXMuY2xlYXIoKTsKKyAgICBtX3RpbGVkQ29tcG9zaXRlZEltYWdlcy5jbGVhcigp
OwogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQogICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMu
Y2xlYXIoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmgKaW5kZXggZWJl
NGNhMzkxNTFjNzIzMDU1NDRiNDBlNmQzY2I3ODkxMmMxNDEwYy4uZjQwOTU4M2VkNWVjZmFhY2Vi
ZWQwMzRkZGJmZTA4MDAzMWFjMDM1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5o
CkBAIC0yMiw2ICsyMiw3IEBACiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAjaW5j
bHVkZSAiQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1h
Z2VJRC5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZVN1cmZhY2UuaCIKICNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgpAQCAtODUs
MTIgKzg2LDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldExheWVyRmlsdGVycyhXZWJMYXllcklE
LCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7CiAjZW5kaWYKIAotICAgIHZvaWQg
Y3JlYXRlVGlsZShXZWJMYXllcklELCBpbnQsIGZsb2F0IHNjYWxlKTsKLSAgICB2b2lkIHJlbW92
ZVRpbGUoV2ViTGF5ZXJJRCwgaW50KTsKLSAgICB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwg
aW50LCBjb25zdCBUaWxlVXBkYXRlJik7CisgICAgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoV2Vi
TGF5ZXJJRCwgaW50LCBmbG9hdCBzY2FsZSk7CisgICAgdm9pZCByZW1vdmVUaWxlRm9yTGF5ZXIo
V2ViTGF5ZXJJRCwgaW50KTsKKyAgICB2b2lkIHVwZGF0ZVRpbGVGb3JMYXllcihXZWJMYXllcklE
LCBpbnQsIGNvbnN0IFRpbGVVcGRhdGUmKTsKKyAgICB2b2lkIGNyZWF0ZVRpbGVkQ29tcG9zaXRl
ZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmKTsKKyAgICB2b2lkIGRlc3Ryb3lUaWxlZENvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENv
bXBvc2l0ZWRJbWFnZUlEKTsKKyAgICB2b2lkIGNyZWF0ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2Uo
Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCwgaW50LCBmbG9hdCBzY2FsZSk7CisgICAgdm9p
ZCByZW1vdmVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdl
SUQsIGludCk7CisgICAgdm9pZCB1cGRhdGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKENvb3JkaW5h
dGVkQ29tcG9zaXRlZEltYWdlSUQsIGludCwgY29uc3QgVGlsZVVwZGF0ZSYpOwogICAgIHZvaWQg
Zmx1c2hMYXllckNoYW5nZXMoKTsKLSAgICB2b2lkIGNyZWF0ZUltYWdlKGludDY0X3QsIFBhc3NS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPik7Ci0gICAgdm9pZCBkZXN0cm95SW1hZ2UoaW50NjRfdCk7
CiAgICAgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6
R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKICAgICB2b2lkIHNldEFuaW1hdGlvbnNMb2NrZWQo
Ym9vbCk7CiAKQEAgLTExMywxMyArMTE3LDIxIEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaXNwYXRj
aE9uTWFpblRocmVhZChjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CiAgICAgdm9pZCBhZGp1c3RQ
b3NpdGlvbkZvckZpeGVkTGF5ZXJzKCk7CiAKLSAgICB2b2lkIGFzc2lnbkltYWdlVG9MYXllcihX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgaW50NjRfdCBpbWFnZUlEKTsKKyAgICB2b2lkIGFzc2ln
bkltYWdlVG9MYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgQ29vcmRpbmF0ZWRDb21wb3Np
dGVkSW1hZ2VJRCk7CisgICAgdm9pZCByZW1vdmVSZWxlYXNlZEltYWdlc0lmTmVlZGVkKCk7CiAg
ICAgdm9pZCBlbnN1cmVSb290TGF5ZXIoKTsKICAgICB2b2lkIGVuc3VyZUxheWVyKFdlYkxheWVy
SUQpOwogICAgIHZvaWQgY29tbWl0VGlsZU9wZXJhdGlvbnMoKTsKICAgICB2b2lkIHJlbmRlck5l
eHRGcmFtZSgpOwogICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CiAKKyAgICB2b2lkIGNy
ZWF0ZVRpbGUoQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUqLCBpbnQsIGZsb2F0IHNjYWxlKTsKKyAg
ICB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUqLCBpbnQpOworICAgIHZv
aWQgdXBkYXRlVGlsZShDb29yZGluYXRlZEJhY2tpbmdTdG9yZSosIGludCwgY29uc3QgVGlsZVVw
ZGF0ZSYpOworCisgICAgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUqIGdldEJhY2tpbmdTdG9yZShX
ZWJMYXllcklEKTsKKyAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZSogZ2V0QmFja2luZ1N0b3Jl
Rm9yQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQpOworCiAgICAg
dHlwZWRlZiBIYXNoTWFwPFdlYkxheWVySUQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqPiBMYXll
ck1hcDsKICAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV9jb250ZW50c1NpemU7CiAgICAgV2ViQ29y
ZTo6RmxvYXRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKQEAgLTEyOCwxMiArMTQwLDE0IEBA
IHByaXZhdGU6CiAgICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQoKT4gPiBtX3JlbmRlclF1ZXVlOwog
ICAgIE11dGV4IG1fcmVuZGVyUXVldWVNdXRleDsKIAotI2lmIFVTRShURVhUVVJFX01BUFBFUikK
ICAgICBPd25QdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOwotICAg
IFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGdldEJhY2tpbmdTdG9yZShXZWJM
YXllcklEKTsKLSAgICBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyQmFja2luZ1N0b3JlPiA+IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzOworCisgICAgdHlw
ZWRlZiBIYXNoTWFwPENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQsIFJlZlB0cjxDb29yZGlu
YXRlZEJhY2tpbmdTdG9yZT4gPiBUaWxlZENvbXBvc2l0ZWRJbWFnZU1hcDsKKyAgICBUaWxlZENv
bXBvc2l0ZWRJbWFnZU1hcCBtX3RpbGVkQ29tcG9zaXRlZEltYWdlczsKKyAgICBWZWN0b3I8Q29v
cmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRD4gbV9yZWxlYXNlZEltYWdlSURzOworCiAgICAgSGFz
aFNldDxSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID4gbV9iYWNraW5nU3RvcmVzV2l0
aFBlbmRpbmdCdWZmZXJzOwotI2VuZGlmCisKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKICAg
ICB0eXBlZGVmIEhhc2hNYXA8V2ViTGF5ZXJJRCwgUmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJTdXJmYWNlQmFja2luZ1N0b3JlPiA+IFN1cmZhY2VCYWNraW5nU3RvcmVNYXA7CiAgICAgU3Vy
ZmFjZUJhY2tpbmdTdG9yZU1hcCBtX3N1cmZhY2VCYWNraW5nU3RvcmVzOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjYxYmM1ZGU0ODdkNmMzZTg4NDY1YzVkYzFmZWFiMDc4MWRlZjk3ZDQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS5jcHAKQEAgLTAsMCArMSwy
MjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIkNvb3JkaW5hdGVkQ29tcG9zaXRlZElt
YWdlLmgiCisKKyNpbmNsdWRlICJDb29yZGluYXRlZFRpbGUuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZWdpb24uaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdT
dG9yZS5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgiCisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworQ29vcmRpbmF0ZWRDb21w
b3NpdGVkSW1hZ2VJRCBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6Z2V0Q29vcmRpbmF0ZWRD
b21wb3NpdGVkSW1hZ2VJRChJbWFnZSogaW1hZ2UpCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRD4oaW1hZ2UpOworfQorCitQYXNzUmVm
UHRyPENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlPiBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFn
ZTo6Y3JlYXRlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlQ2xpZW50KiBjbGllbnQsIFBhc3NS
ZWZQdHI8SW1hZ2U+IGltYWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0
ZWRDb21wb3NpdGVkSW1hZ2UoY2xpZW50LCBpbWFnZSkpOworfQorCitjbGFzcyBDb21wb3NpdGVk
VGlsZWRCYWNraW5nU3RvcmUgOiBwdWJsaWMgVGlsZWRCYWNraW5nU3RvcmVDbGllbnQsIHB1Ymxp
YyBDb29yZGluYXRlZFRpbGVDbGllbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbXBv
c2l0ZWRUaWxlZEJhY2tpbmdTdG9yZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgZXhwbGljaXQgQ29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3JlKENvb3JkaW5h
dGVkQ29tcG9zaXRlZEltYWdlKik7CisgICAgdmlydHVhbCB+Q29tcG9zaXRlZFRpbGVkQmFja2lu
Z1N0b3JlKCk7CisKKyAgICB2b2lkIHVwZGF0ZShib29sIGludmFsaWRhdGVkKTsKKworcHJpdmF0
ZToKKyAgICAvLyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCB0aWxl
ZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdGls
ZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3Qg
VmVjdG9yPEludFJlY3Q+JiBwYWludGVkQXJlYSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29s
IHRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgQ29sb3IgdGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdCBPVkVSUklERTsKKworICAgIC8vIENvb3JkaW5hdGVkVGlsZUNsaWVudAorICAgIHZp
cnR1YWwgdm9pZCBjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZv
JiwgY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxl
KGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgSW50UmVjdCYpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKGludCB0aWxlSUQpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVw
ZGF0ZShjb25zdCBJbnRTaXplJiwgaW50JiBhdGxhc0lELCBJbnRQb2ludCYpIE9WRVJSSURFOwor
CisgICAgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UqIG1fb3duZXI7CisgICAgT3duUHRyPFRp
bGVkQmFja2luZ1N0b3JlPiBtX3RpbGVkQmFja2luZ1N0b3JlOworCisgICAgYm9vbCBtX2luVXBk
YXRlTW9kZTsKK307CisKK0Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlOjpDb29yZGluYXRlZENv
bXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUNsaWVudCogY2xpZW50LCBQ
YXNzUmVmUHRyPEltYWdlPiBpbWFnZSkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1f
aW1hZ2UoaW1hZ2UpCisgICAgLCBtX2lkKGdldENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQo
bV9pbWFnZS5nZXQoKSkpCisgICAgLCBtX2RpZEludmFsaWRhdGUoZmFsc2UpCit7CisgICAgbV9i
YWNraW5nU3RvcmUgPSBhZG9wdFB0cihuZXcgQ29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3JlKHRo
aXMpKTsKKworICAgIC8vIEZJWE1FOiBXZSB3b3VsZCBuZWVkIHRvIGRlY29kZSBhIHNtYWxsIGlt
YWdlIGRpcmVjdGx5IGludG8gYSBHcmFwaGljc1N1cmZhY2UuCisgICAgLy8gaHR0cDovL3dlYmtp
dC5vcmcvYi8xMDE0MjYKK30KKworQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U6On5Db29yZGlu
YXRlZENvbXBvc2l0ZWRJbWFnZSgpCit7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRDb21wb3NpdGVk
SW1hZ2U6OmFkZExheWVyQ2xpZW50KENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlR3JhcGhpY3NM
YXllckNsaWVudCogbGF5ZXJDbGllbnQpCit7CisgICAgQVNTRVJUKCFtX2xheWVyQ2xpZW50cy5j
b250YWlucyhsYXllckNsaWVudCkpOworICAgIG1fbGF5ZXJDbGllbnRzLmFwcGVuZChsYXllckNs
aWVudCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U6OnJlbW92ZUxheWVy
Q2xpZW50KENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlR3JhcGhpY3NMYXllckNsaWVudCogbGF5
ZXJDbGllbnQpCit7CisgICAgc2l6ZV90IHBvc2l0aW9uID0gbV9sYXllckNsaWVudHMuZmluZChs
YXllckNsaWVudCk7CisgICAgQVNTRVJUKHBvc2l0aW9uICE9IG5vdEZvdW5kKTsKKyAgICBtX2xh
eWVyQ2xpZW50cy5yZW1vdmUocG9zaXRpb24pOworCisgICAgaWYgKG1fbGF5ZXJDbGllbnRzLmlz
RW1wdHkoKSkKKyAgICAgICAgbV9jbGllbnQtPnJlbGVhc2VDb21wb3NpdGVkSW1hZ2UoaWQoKSk7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2U6OmludmFsaWRhdGUoKQorewor
ICAgIG1fZGlkSW52YWxpZGF0ZSA9IHRydWU7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRDb21wb3Np
dGVkSW1hZ2U6OnVwZGF0ZSgpCit7CisgICAgbV9iYWNraW5nU3RvcmUtPnVwZGF0ZShtX2RpZElu
dmFsaWRhdGUpOworICAgIG1fZGlkSW52YWxpZGF0ZSA9IGZhbHNlOworfQorCitJbnRSZWN0IENv
b3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlOjp2aXNpYmxlUmVjdCgpIGNvbnN0Cit7CisgICAgUmVn
aW9uIHVuaXRlZFZpc2libGVSZWdpb247CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xh
eWVyQ2xpZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgdW5pdGVkVmlzaWJsZVJlZ2lvbi51bml0
ZShtX2xheWVyQ2xpZW50c1tpXS0+Y29tcG9zaXRlZEltYWdlVmlzaWJsZVJlY3QoKSk7CisKKyAg
ICByZXR1cm4gdW5pdGVkVmlzaWJsZVJlZ2lvbi5ib3VuZHMoKTsKK30KKworLy8gPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gQ29tcG9zaXRlZFRp
bGVkQmFja2luZ1N0b3JlIENsYXNzCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CisKK0NvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9yZTo6Q29tcG9z
aXRlZFRpbGVkQmFja2luZ1N0b3JlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlKiBvd25lcikK
KyAgICA6IG1fb3duZXIob3duZXIpCisgICAgLCBtX2luVXBkYXRlTW9kZShmYWxzZSkKK3sKKyAg
ICBtX293bmVyLT5tX2NsaWVudC0+Y3JlYXRlVGlsZWRDb21wb3NpdGVkSW1hZ2UobV9vd25lci0+
aWQoKSwgbV9vd25lci0+bV9pbWFnZS0+c2l6ZSgpKTsKKyAgICBtX3RpbGVkQmFja2luZ1N0b3Jl
ID0gVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSh0aGlzLCBDb29yZGluYXRlZFRpbGVCYWNrZW5k
OjpjcmVhdGUodGhpcykpOworICAgIG1fdGlsZWRCYWNraW5nU3RvcmUtPnNldENvbnRlbnRzU2Nh
bGUoMSk7Cit9CisKK0NvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9yZTo6fkNvbXBvc2l0ZWRUaWxl
ZEJhY2tpbmdTdG9yZSgpCit7CisgICAgLy8gUmVtb3ZlIG1fdGlsZWRCYWNraW5nU3RvcmUgZXhw
bGljaXRseSBiZWNhdXNlIHdlIHdhbnQgdG8gc2VuZCBSZW1vdmVUaWxlRm9yQ29tcG9zaXRlZElt
YWdlIG1lc3NhZ2VzIGJlZm9yZSBhIERlc3Ryb3lUaWxlZENvbXBvc2l0ZWRJbWFnZSBtZXNzYWdl
LgorICAgIG1fdGlsZWRCYWNraW5nU3RvcmUuY2xlYXIoKTsKKyAgICBtX293bmVyLT5tX2NsaWVu
dC0+ZGVzdHJveVRpbGVkQ29tcG9zaXRlZEltYWdlKG1fb3duZXItPmlkKCkpOworfQorCit2b2lk
IENvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9yZTo6dXBkYXRlKGJvb2wgaW52YWxpZGF0ZWQpCit7
CisgICAgbV9pblVwZGF0ZU1vZGUgPSB0cnVlOworICAgIG1fdGlsZWRCYWNraW5nU3RvcmUtPmNv
dmVyV2l0aFRpbGVzSWZOZWVkZWQoKTsKKyAgICBpZiAoaW52YWxpZGF0ZWQpIHsKKyAgICAgICAg
Ly8gT25lIGZyYW1lIG9mIHRoZSBpbWFnZSBjYW4gYmUgb3BhcXVlIHdoaWxlIGFub3RoZXIgaXMg
bm90IG9wYXF1ZS4KKyAgICAgICAgbV90aWxlZEJhY2tpbmdTdG9yZS0+c2V0U3VwcG9ydHNBbHBo
YShtX293bmVyLT5tX2ltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpKTsKKyAgICAgICAgbV90
aWxlZEJhY2tpbmdTdG9yZS0+aW52YWxpZGF0ZSh0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVj
dCgpKTsKKyAgICB9CisgICAgbV90aWxlZEJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZUJ1ZmZlcnMo
KTsKKyAgICBtX2luVXBkYXRlTW9kZSA9IGZhbHNlOworfQorCit2b2lkIENvbXBvc2l0ZWRUaWxl
ZEJhY2tpbmdTdG9yZTo6dGlsZWRCYWNraW5nU3RvcmVQYWludEJlZ2luKCkKK3sKK30KKwordm9p
ZCBDb21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmU6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChy
ZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29udGV4dC0+ZHJhd0ltYWdl
KG1fb3duZXItPm1faW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIHJlY3QsIHJlY3Qp
OworfQorCit2b2lkIENvbXBvc2l0ZWRUaWxlZEJhY2tpbmdTdG9yZTo6dGlsZWRCYWNraW5nU3Rv
cmVQYWludEVuZChjb25zdCBWZWN0b3I8SW50UmVjdD4mIC8qIHVwZGF0ZWRSZWN0cyAqLykKK3sK
K30KKworYm9vbCBDb21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmU6OnRpbGVkQmFja2luZ1N0b3Jl
VXBkYXRlc0FsbG93ZWQoKSBjb25zdAoreworICAgIGlmICghbV9pblVwZGF0ZU1vZGUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9vd25lci0+bV9jbGllbnQtPmxheWVyVHJl
ZUNvbXBvc2l0ZWRJbWFnZVRpbGVVcGRhdGVzQWxsb3dlZCgpOworfQorCitJbnRSZWN0IENvbXBv
c2l0ZWRUaWxlZEJhY2tpbmdTdG9yZTo6dGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKQor
eworICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fb3duZXItPm1faW1hZ2Ut
PnNpemUoKSk7Cit9CisKK0ludFJlY3QgQ29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3JlOjp0aWxl
ZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KCkKK3sKKyAgICByZXR1cm4gbV9vd25lci0+dmlzaWJs
ZVJlY3QoKTsKK30KKworQ29sb3IgQ29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3JlOjp0aWxlZEJh
Y2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9yOjp0
cmFuc3BhcmVudDsKK30KKworUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IENvbXBvc2l0ZWRU
aWxlZEJhY2tpbmdTdG9yZTo6YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IEludFNpemUmIHNpemUs
IGludCYgYXRsYXMsIEludFBvaW50JiBvZmZzZXQpCit7CisgICAgcmV0dXJuIG1fb3duZXItPm1f
Y2xpZW50LT5iZWdpbkNvbXBvc2l0ZWRJbWFnZVVwZGF0ZShzaXplLCBtX293bmVyLT5tX2ltYWdl
LT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpID8gU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhh
IDogU2hhcmVhYmxlQml0bWFwOjpOb0ZsYWdzLCBhdGxhcywgb2Zmc2V0KTsKK30KKwordm9pZCBD
b21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3Qg
U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3Qp
Cit7CisgICAgbV9vd25lci0+bV9jbGllbnQtPmNyZWF0ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2Uo
bV9vd25lci0+aWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0YXJnZXRSZWN0KTsKK30KKwordm9p
ZCBDb21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29u
c3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJlY3QmIHRhcmdldFJl
Y3QpCit7CisgICAgbV9vd25lci0+bV9jbGllbnQtPnVwZGF0ZVRpbGVGb3JDb21wb3NpdGVkSW1h
Z2UobV9vd25lci0+aWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0YXJnZXRSZWN0KTsKK30KKwor
dm9pZCBDb21wb3NpdGVkVGlsZWRCYWNraW5nU3RvcmU6OnJlbW92ZVRpbGUoaW50IHRpbGVJRCkK
K3sKKyAgICBtX293bmVyLT5tX2NsaWVudC0+cmVtb3ZlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZSht
X293bmVyLT5pZCgpLCB0aWxlSUQpOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkQ29tcG9zaXRlZEltYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmM4NjY0ZmZiNzJmZGJkZmRhNmM5NzQxYjJkZDcyODdjZjM0NWMyNzMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworCisjaWZuZGVmIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlX2gKKyNk
ZWZpbmUgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VfaAorCisjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQorI2luY2x1ZGUgIkNvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQuaCIKKyNp
bmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJTaGFyZWFi
bGVCaXRtYXAuaCIKKyNpbmNsdWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgewor
Y2xhc3MgQ29tcG9zaXRlZFRpbGVkQmFja2luZ1N0b3JlOworCitjbGFzcyBDb29yZGluYXRlZENv
bXBvc2l0ZWRJbWFnZUNsaWVudCB7CitwdWJsaWM6CisgICAgLy8gVGhpcyBtZXRob2QgaXMgdGhl
IGFudGl0aGVzaXMgb2YgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50OjphZG9wdENvbXBv
c2l0ZWRJbWFnZSgpLiBTZWUgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LgorICAgIHZp
cnR1YWwgdm9pZCByZWxlYXNlQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZElt
YWdlSUQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZWRDb21wb3NpdGVkSW1hZ2Uo
Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveVRpbGVkQ29tcG9zaXRlZEltYWdlKENvb3JkaW5h
dGVkQ29tcG9zaXRlZEltYWdlSUQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZUZv
ckNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELCBpbnQgdGlsZUlE
LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGVGb3JDb21wb3NpdGVkSW1hZ2UoQ29vcmRpbmF0
ZWRDb21wb3NpdGVkSW1hZ2VJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8m
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVU
aWxlRm9yQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQsIGludCB0
aWxlSUQpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0PiBiZWdpbkNvbXBvc2l0ZWRJbWFnZVVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwg
U2hhcmVhYmxlQml0bWFwOjpGbGFncywgaW50JiBhdGxhc0lELCBXZWJDb3JlOjpJbnRQb2ludCYp
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgbGF5ZXJUcmVlQ29tcG9zaXRlZEltYWdlVGlsZVVwZGF0
ZXNBbGxvd2VkKCkgY29uc3QgPSAwOworfTsKKworY2xhc3MgQ29vcmRpbmF0ZWRDb21wb3NpdGVk
SW1hZ2VHcmFwaGljc0xheWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIFdlYkNvcmU6
OkludFJlY3QgY29tcG9zaXRlZEltYWdlVmlzaWJsZVJlY3QoKSA9IDA7Cit9OworCitjbGFzcyBD
b29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZSA6IHB1YmxpYyBSZWZDb3VudGVkPENvb3JkaW5hdGVk
Q29tcG9zaXRlZEltYWdlPiB7CisgICAgZnJpZW5kIGNsYXNzIENvbXBvc2l0ZWRUaWxlZEJhY2tp
bmdTdG9yZTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZENvbXBv
c2l0ZWRJbWFnZT4gY3JlYXRlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlQ2xpZW50KiwgUGFz
c1JlZlB0cjxXZWJDb3JlOjpJbWFnZT4pOworICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkQ29tcG9z
aXRlZEltYWdlKCk7CisKKyAgICBzdGF0aWMgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCBn
ZXRDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEKFdlYkNvcmU6OkltYWdlKik7CisgICAgQ29v
cmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKwor
ICAgIHZvaWQgYWRkTGF5ZXJDbGllbnQoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VHcmFwaGlj
c0xheWVyQ2xpZW50Kik7CisgICAgdm9pZCByZW1vdmVMYXllckNsaWVudChDb29yZGluYXRlZENv
bXBvc2l0ZWRJbWFnZUdyYXBoaWNzTGF5ZXJDbGllbnQqKTsKKworICAgIHZvaWQgaW52YWxpZGF0
ZSgpOworICAgIHZvaWQgdXBkYXRlKCk7CisKK3ByaXZhdGU6CisgICAgQ29vcmRpbmF0ZWRDb21w
b3NpdGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VDbGllbnQqLCBQYXNzUmVmUHRy
PFdlYkNvcmU6OkltYWdlPik7CisKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHZpc2libGVSZWN0KCkg
Y29uc3Q7CisKKyAgICBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUNsaWVudCogbV9jbGllbnQ7
CisgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlPiBtX2ltYWdlOworICAgIENvb3JkaW5hdGVkQ29t
cG9zaXRlZEltYWdlSUQgbV9pZDsKKyAgICBWZWN0b3I8Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1h
Z2VHcmFwaGljc0xheWVyQ2xpZW50Kj4gbV9sYXllckNsaWVudHM7CisgICAgT3duUHRyPENvbXBv
c2l0ZWRUaWxlZEJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CisKKyAgICBib29sIG1fZGlk
SW52YWxpZGF0ZTsKK307CisKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gQ29vcmRpbmF0ZWRDb21w
b3NpdGVkSW1hZ2VfSApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllci5jcHAKaW5kZXggMjZlNDhkNjFjNDE4MmIwNjI3YTIxYjI5MjFk
NGEyYTFkYmJkMjZlOC4uNDUyMDUxNTY1N2UxYjM3ZDA2YzZmZjc0NjY0NjdiZTBlYTNjY2NiMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuY3BwCkBAIC04Miw2ICs4MiwxMyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6ZGlkQ2hhbmdlRmlsdGVycygpCiB9CiAjZW5kaWYKIAordm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OmRpZENoYW5nZUNvbXBvc2l0ZWRJbWFnZSgpCit7CisgICAgbV9zaG91bGRT
eW5jQ29tcG9zaXRlZEltYWdlID0gdHJ1ZTsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNs
aWVudCgpLT5ub3RpZnlGbHVzaFJlcXVpcmVkKHRoaXMpOworfQorCiB2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6c2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKQogewogICAgIG1fc2hv
dWxkVXBkYXRlVmlzaWJsZVJlY3QgPSB0cnVlOwpAQCAtMTA1LDExICsxMTIsMTMgQEAgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXll
ckNsaWVudCogY2xpZW50KQogICAgICwgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSh0cnVlKQogICAg
ICwgbV9zaG91bGRTeW5jQ2hpbGRyZW4odHJ1ZSkKICAgICAsIG1fc2hvdWxkU3luY0ZpbHRlcnMo
dHJ1ZSkKKyAgICAsIG1fc2hvdWxkU3luY0NvbXBvc2l0ZWRJbWFnZSh0cnVlKQogICAgICwgbV9z
aG91bGRTeW5jQW5pbWF0aW9ucyh0cnVlKQogICAgICwgbV9maXhlZFRvVmlld3BvcnQoZmFsc2Up
CiAgICAgLCBtX2NhbnZhc05lZWRzRGlzcGxheShmYWxzZSkKICAgICAsIG1fQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyQ2xpZW50KDApCiAgICAgLCBtX2NvbnRlbnRzU2NhbGUoMSkKKyAgICAsIG1f
Y29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyKDApCiAgICAgLCBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIo
MCkKICAgICAsIG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVyKHRoaXMsICZDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OmFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKQogewpAQCAtMzE4LDkgKzMyNyw2
IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1JlY3QoY29uc3Qg
SW50UmVjdCYgcikKIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRz
TmVlZHNEaXNwbGF5KCkKIHsKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gbV9pbWFnZTsKLSAg
ICBzZXRDb250ZW50c1RvSW1hZ2UoMCk7Ci0gICAgc2V0Q29udGVudHNUb0ltYWdlKGltYWdlLmdl
dCgpKTsKICAgICBtX2NhbnZhc05lZWRzRGlzcGxheSA9IHRydWU7CiAgICAgaWYgKGNsaWVudCgp
KQogICAgICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKQEAgLTM0Nywy
NSArMzUzLDI2IEBAIGJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKGNv
bnN0IEZpbHRlck9wZXJhdGlvbnMmIG5ld0ZpbHRlcnMpCiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQogewotICAgIGlmIChp
bWFnZSA9PSBtX2ltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgaW50NjRfdCBuZXdJRCA9IDA7
Ci0gICAgaWYgKG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KSB7Ci0gICAgICAgIC8v
IFdlIGFkb3B0IGZpcnN0LCBpbiBjYXNlIHRoaXMgaXMgdGhlIHNhbWUgZnJhbWUgLSB0aGF0IHdh
eSB3ZSBhdm9pZCBkZXN0cm95aW5nIGFuZCByZWNyZWF0aW5nIHRoZSBpbWFnZS4KLSAgICAgICAg
bmV3SUQgPSBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+YWRvcHRJbWFnZUJhY2tp
bmdTdG9yZShpbWFnZSk7Ci0gICAgICAgIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50
LT5yZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUobV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJ
RCk7Ci0gICAgICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLSAgICAgICAgaWYgKG1fbGF5ZXJJ
bmZvLmltYWdlQmFja2luZ1N0b3JlSUQgJiYgbmV3SUQgPT0gbV9sYXllckluZm8uaW1hZ2VCYWNr
aW5nU3RvcmVJRCkKKyAgICBpZiAoaW1hZ2UpIHsKKyAgICAgICAgLy8gTWFrZSB0aGUgZGVjaXNp
b24gYWJvdXQgd2hldGhlciB0aGUgaW1hZ2UgaGFzIGNoYW5nZWQuCisgICAgICAgIC8vIFRoaXMg
Y29kZSBtYWtlcyB0aGUgYXNzdW1wdGlvbiB0aGF0IHBvaW50ZXIgZXF1YWxpdHkgb24gYSBOYXRp
dmVJbWFnZVB0ciBpcyBhIHZhbGlkIHdheSB0byB0ZWxsIGlmIHRoZSBpbWFnZSBpcyBjaGFuZ2Vk
LgorICAgICAgICAvLyBUaGlzIGFzc3VtcHRpb24gaXMgdHJ1ZSBpbiBRdCwgR1RLIGFuZCBFRkwu
CisgICAgICAgIE5hdGl2ZUltYWdlUHRyIG5ld05hdGl2ZUltYWdlUHRyID0gaW1hZ2UtPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgIGlmICghbmV3TmF0aXZlSW1hZ2VQdHIp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKG5ld05hdGl2ZUltYWdlUHRyID09
IG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyKQogICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIG1fY29tcG9zaXRlZEltYWdlID0gaW1hZ2U7CisgICAgICAgIG1fY29tcG9zaXRlZE5hdGl2
ZUltYWdlUHRyID0gbmV3TmF0aXZlSW1hZ2VQdHI7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8g
SWYgbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQgaXMgbm90IHNldCB5ZXQgdGhlcmUg
c2hvdWxkIGJlIG5vIGJhY2tpbmcgc3RvcmUgSUQuCi0gICAgICAgIEFTU0VSVCghbV9sYXllcklu
Zm8uaW1hZ2VCYWNraW5nU3RvcmVJRCk7Ci0gICAgICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsK
KyAgICAgICAgbV9jb21wb3NpdGVkSW1hZ2UgPSAwOworICAgICAgICBtX2NvbXBvc2l0ZWROYXRp
dmVJbWFnZVB0ciA9IDA7CiAgICAgfQogCi0gICAgbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3Rv
cmVJRCA9IG5ld0lEOwotICAgIG1faW1hZ2UgPSBpbWFnZTsKICAgICBHcmFwaGljc0xheWVyOjpz
ZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UpOworICAgIGRpZENoYW5nZUNvbXBvc2l0ZWRJbWFnZSgp
OwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVyKEdyYXBo
aWNzTGF5ZXIqIGxheWVyKQpAQCAtNDU5LDYgKzQ2NiwzNCBAQCB2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c3luY0ZpbHRlcnMoKQogfQogI2VuZGlmCiAKK3ZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRlZEltYWdlKCkKK3sKKyAgICBpZiAoIW1fc2hvdWxk
U3luY0NvbXBvc2l0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2hvdWxkU3luY0Nv
bXBvc2l0ZWRJbWFnZSA9IGZhbHNlOworCisgICAgaWYgKG1fY29tcG9zaXRlZE5hdGl2ZUltYWdl
UHRyKSB7CisgICAgICAgIEFTU0VSVCghbV9tYWluQmFja2luZ1N0b3JlKTsKKyAgICAgICAgQVNT
RVJUKG1fY29tcG9zaXRlZEltYWdlKTsKKworICAgICAgICBib29sIGltYWdlSW5zdGFuY2VSZXBs
YWNlZCA9IG1fY29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UgJiYgbV9jb29yZGluYXRlZENvbXBv
c2l0ZWRJbWFnZS0+aWQoKSAhPSBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZTo6Z2V0Q29vcmRp
bmF0ZWRDb21wb3NpdGVkSW1hZ2VJRChtX2NvbXBvc2l0ZWRJbWFnZS5nZXQoKSk7CisgICAgICAg
IGlmIChpbWFnZUluc3RhbmNlUmVwbGFjZWQpCisgICAgICAgICAgICByZWxlYXNlQ29tcG9zaXRl
ZEltYWdlSWZOZWVkZWQoKTsKKworICAgICAgICBpZiAoIW1fY29vcmRpbmF0ZWRDb21wb3NpdGVk
SW1hZ2UpIHsKKyAgICAgICAgICAgIG1fY29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UgPSBtX0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+YWRvcHRDb21wb3NpdGVkSW1hZ2UobV9jb21w
b3NpdGVkSW1hZ2UuZ2V0KCkpOworICAgICAgICAgICAgbV9jb29yZGluYXRlZENvbXBvc2l0ZWRJ
bWFnZS0+YWRkTGF5ZXJDbGllbnQodGhpcyk7CisgICAgICAgICAgICBtX2xheWVySW5mby5pbWFn
ZUlEID0gbV9jb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZS0+aWQoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIG1fY29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2UtPmludmFsaWRhdGUoKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgcmVsZWFzZUNvbXBvc2l0ZWRJbWFnZUlmTmVlZGVkKCk7CisKKyAgICAv
LyBUaGlzIG1ldGhvZCBjaGFuZ2VzIG1fbGF5ZXJJbmZvLmltYWdlSUQuCisgICAgZGlkQ2hhbmdl
TGF5ZXJTdGF0ZSgpOworfQorCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0xh
eWVyU3RhdGUoKQogewogICAgIGlmICghbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSkKQEAgLTUxMSwx
OCArNTQ2LDkgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMoKQog
ICAgIG1fY2FudmFzTmVlZHNEaXNwbGF5ID0gZmFsc2U7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjplbnN1cmVJbWFnZUJhY2tpbmdTdG9yZSgpCi17Ci0gICAgaWYgKCFtX2lt
YWdlKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX2xheWVySW5mby5pbWFnZUJhY2tpbmdT
dG9yZUlEKQotICAgICAgICBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEID0gbV9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUobV9pbWFn
ZS5nZXQoKSk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpmbHVzaENvbXBv
c2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKIHsKLSAgICAvLyBUaGUgcmVtb3RlIGltYWdl
IG1pZ2h0IGhhdmUgYmVlbiByZWxlYXNlZCBieSBwdXJnZUJhY2tpbmdTdG9yZXMuCi0gICAgZW5z
dXJlSW1hZ2VCYWNraW5nU3RvcmUoKTsKKyAgICBzeW5jQ29tcG9zaXRlZEltYWdlKCk7CiAgICAg
c3luY0xheWVyU3RhdGUoKTsKICAgICBzeW5jQW5pbWF0aW9ucygpOwogICAgIGNvbXB1dGVUcmFu
c2Zvcm1lZFZpc2libGVSZWN0KCk7CkBAIC01MzQsNiArNTYwLDI2IEBAIHZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkK
ICAgICBzeW5jQ2FudmFzKCk7CiB9CiAKK0ludFJlY3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Ojpjb21wb3NpdGVkSW1hZ2VWaXNpYmxlUmVjdCgpCit7CisgICAgQVNTRVJUKG1fY29vcmRpbmF0
ZWRDb21wb3NpdGVkSW1hZ2UpOworICAgIEZsb2F0UmVjdCB2aXNpYmxlSW1hZ2VSZWN0ID0gdGls
ZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpOworICAgIEZsb2F0U2l6ZSByYXRpb09maW1hZ2VP
dmVyTGF5ZXJTaXplKG1fY29tcG9zaXRlZEltYWdlLT53aWR0aCgpIC8gc2l6ZSgpLndpZHRoKCks
IG1fY29tcG9zaXRlZEltYWdlLT5oZWlnaHQoKSAvIHNpemUoKS5oZWlnaHQoKSk7CisgICAgdmlz
aWJsZUltYWdlUmVjdC5zY2FsZShyYXRpb09maW1hZ2VPdmVyTGF5ZXJTaXplLndpZHRoKCksIHJh
dGlvT2ZpbWFnZU92ZXJMYXllclNpemUuaGVpZ2h0KCkpOworICAgIHJldHVybiBlbmNsb3NlZElu
dFJlY3QodmlzaWJsZUltYWdlUmVjdCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpyZWxlYXNlQ29tcG9zaXRlZEltYWdlSWZOZWVkZWQoKQoreworICAgIGlmICghbV9jb29y
ZGluYXRlZENvbXBvc2l0ZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1f
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KTsKKyAgICBtX2Nvb3JkaW5hdGVkQ29tcG9z
aXRlZEltYWdlLT5yZW1vdmVMYXllckNsaWVudCh0aGlzKTsKKyAgICBtX2Nvb3JkaW5hdGVkQ29t
cG9zaXRlZEltYWdlLmNsZWFyKCk7CisgICAgbV9sYXllckluZm8uaW1hZ2VJRCA9IEludmFsaWRD
b29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEOworfQorCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEJlZ2luKCkKIHsKIH0KQEAgLTU4Myw3ICs2
MjksNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YWRqdXN0Q29udGVudHNTY2Fs
ZSgpCiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVCYWNraW5nU3RvcmUo
KQogewotICAgIG1fbWFpbkJhY2tpbmdTdG9yZSA9IGFkb3B0UHRyKG5ldyBUaWxlZEJhY2tpbmdT
dG9yZSh0aGlzLCBDb29yZGluYXRlZFRpbGVCYWNrZW5kOjpjcmVhdGUodGhpcykpKTsKKyAgICBt
X21haW5CYWNraW5nU3RvcmUgPSBUaWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKHRoaXMsIENvb3Jk
aW5hdGVkVGlsZUJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSk7CiAgICAgbV9tYWluQmFja2luZ1N0b3Jl
LT5zZXRTdXBwb3J0c0FscGhhKCFjb250ZW50c09wYXF1ZSgpKTsKICAgICBtX21haW5CYWNraW5n
U3RvcmUtPnNldENvbnRlbnRzU2NhbGUoZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKTsKIH0KQEAg
LTYzNiw3ICs2ODIsNyBAQCBDb2xvciBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFj
a2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKCkgY29uc3QKICAgICByZXR1cm4gY29udGVudHNPcGFx
dWUoKSA/IENvbG9yOjp3aGl0ZSA6IENvbG9yOjp0cmFuc3BhcmVudDsKIH0KIAotUGFzc093blB0
cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YmVn
aW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIGludCYgYXRsYXMs
IFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpCitQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4g
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgaW50JiBhdGxhcywgSW50UG9pbnQmIG9mZnNldCkKIHsKICAgICByZXR1cm4gbV9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPmJlZ2luQ29udGVudFVwZGF0ZShzaXplLCBj
b250ZW50c09wYXF1ZSgpID8gMCA6IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSwgYXRs
YXMsIG9mZnNldCk7CiB9CkBAIC02ODMsMTEgKzcyOSw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpwdXJnZUJhY2tpbmdTdG9yZXMoKQogewogICAgIG1fbWFpbkJhY2tpbmdTdG9y
ZS5jbGVhcigpOwogICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUuY2xlYXIoKTsKLQotICAgIGlm
IChtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKSB7Ci0gICAgICAgIG1fQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5yZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUobV9sYXllcklu
Zm8uaW1hZ2VCYWNraW5nU3RvcmVJRCk7Ci0gICAgICAgIG1fbGF5ZXJJbmZvLmltYWdlQmFja2lu
Z1N0b3JlSUQgPSAwOwotICAgIH0KKyAgICByZWxlYXNlQ29tcG9zaXRlZEltYWdlSWZOZWVkZWQo
KTsKIAogICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKICAgICBkaWRDaGFuZ2VDaGlsZHJlbigp
OwpAQCAtNzMzLDcgKzc3NSw3IEBAIGJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpoYXNQ
ZW5kaW5nVmlzaWJsZUNoYW5nZXMoKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
Ci0gICAgaWYgKCFtX3Nob3VsZFN5bmNMYXllclN0YXRlICYmICFtX3Nob3VsZFN5bmNDaGlsZHJl
biAmJiAhbV9zaG91bGRTeW5jRmlsdGVycyAmJiAhbV9zaG91bGRTeW5jQW5pbWF0aW9ucyAmJiAh
bV9jYW52YXNOZWVkc0Rpc3BsYXkpCisgICAgaWYgKCFtX3Nob3VsZFN5bmNMYXllclN0YXRlICYm
ICFtX3Nob3VsZFN5bmNDaGlsZHJlbiAmJiAhbV9zaG91bGRTeW5jRmlsdGVycyAmJiAhbV9zaG91
bGRTeW5jQ29tcG9zaXRlZEltYWdlICYmICFtX3Nob3VsZFN5bmNBbmltYXRpb25zICYmICFtX2Nh
bnZhc05lZWRzRGlzcGxheSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHNl
bGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9ybXMoKSB8fCAhdGlsZWRCYWNraW5nU3Rv
cmVWaXNpYmxlUmVjdCgpLmlzRW1wdHkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKaW5kZXggMTE4OGFhNzVmYjc3ODI5YmIy
MWM5OGVkZjBkNzBmYjIyNTUwMWUyZi4uYzViZmE4ZmM1MGI0MTU4MGM1MjQyOWJmZTg2ODlhNzIx
MWFhNTc3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpZm5kZWYgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyX2gKICNkZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyX2gKIAorI2lu
Y2x1ZGUgIkNvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0
ZWRUaWxlLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NM
YXllci5oIgpAQCAtNDksNiArNTAsOSBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50IHsKIHB1YmxpYzoKKyAgICAvLyBUaGlzIG1ldGhv
ZCBpcyB0aGUgYW50aXRoZXNpcyBvZiBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUNsaWVudDo6
cmVsZWFzZUNvbXBvc2l0ZWRJbWFnZSgpLiBTZWUgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VD
bGllbnQuCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdl
PiBhZG9wdENvbXBvc2l0ZWRJbWFnZShXZWJDb3JlOjpJbWFnZSopID0gMDsKKwogICAgIC8vIENv
b3JkaW5hdGVkVGlsZUNsaWVudAogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKFdlYkxheWVy
SUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklELCBp
bnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKSA9IDA7CkBAIC01Niw4ICs2MCw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgV2ViQ29y
ZTo6SW50UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
Ym9vbCBsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBpbnQ2NF90IGFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoV2ViQ29yZTo6SW1hZ2UqKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90KSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKFdlYkxheWVySUQsIGNvbnN0IFdlYkxheWVy
SW5mbyYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJ
RCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+JikgPSAwOwogI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKQEAgLTgwLDcgKzgyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIgOiBwdWJsaWMgR3JhcGhpY3NMYXllcgogICAgICwgcHVibGljIFRp
bGVkQmFja2luZ1N0b3JlQ2xpZW50Ci0gICAgLCBwdWJsaWMgV2ViS2l0OjpDb29yZGluYXRlZFRp
bGVDbGllbnQgeworICAgICwgcHVibGljIFdlYktpdDo6Q29vcmRpbmF0ZWRUaWxlQ2xpZW50Cisg
ICAgLCBwdWJsaWMgV2ViS2l0OjpDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUdyYXBoaWNzTGF5
ZXJDbGllbnQgewogcHVibGljOgogICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihHcmFwaGlj
c0xheWVyQ2xpZW50Kik7CiAgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKCk7
CkBAIC0xNjgsNiArMTcxLDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAg
ICAgdm9pZCBkaWRDaGFuZ2VGaWx0ZXJzKCk7CiAjZW5kaWYKKyAgICB2b2lkIGRpZENoYW5nZUNv
bXBvc2l0ZWRJbWFnZSgpOwogCiAgICAgdm9pZCBzeW5jTGF5ZXJTdGF0ZSgpOwogICAgIHZvaWQg
c3luY0FuaW1hdGlvbnMoKTsKQEAgLTE3NSw2ICsxNzksNyBAQCBwcml2YXRlOgogI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKICAgICB2b2lkIHN5bmNGaWx0ZXJzKCk7CiAjZW5kaWYKKyAgICB2b2lk
IHN5bmNDb21wb3NpdGVkSW1hZ2UoKTsKICAgICB2b2lkIHN5bmNDYW52YXMoKTsKICAgICB2b2lk
IGVuc3VyZUltYWdlQmFja2luZ1N0b3JlKCk7CiAgICAgdm9pZCBjb21wdXRlVHJhbnNmb3JtZWRW
aXNpYmxlUmVjdCgpOwpAQCAtMTgyLDYgKzE4NywxMSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBj
cmVhdGVCYWNraW5nU3RvcmUoKTsKIAorICAgIC8vIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdl
R3JhcGhpY3NMYXllckNsaWVudAorICAgIHZpcnR1YWwgSW50UmVjdCBjb21wb3NpdGVkSW1hZ2VW
aXNpYmxlUmVjdCgpIE9WRVJSSURFOworCisgICAgdm9pZCByZWxlYXNlQ29tcG9zaXRlZEltYWdl
SWZOZWVkZWQoKTsKKwogICAgIGJvb2wgc2VsZk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNm
b3JtcygpOwogICAgIGJvb2wgc2hvdWxkVXNlVGlsZWRCYWNraW5nU3RvcmUoKTsKICAgICB2b2lk
IGFkanVzdENvbnRlbnRzU2NhbGUoKTsKQEAgLTE5Myw3ICsyMDMsNiBAQCBwcml2YXRlOgogCiAg
ICAgV2ViS2l0OjpXZWJMYXllcklEIG1faWQ7CiAgICAgV2ViS2l0OjpXZWJMYXllckluZm8gbV9s
YXllckluZm87Ci0gICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOwogICAgIEdyYXBoaWNzTGF5ZXIq
IG1fbWFza1RhcmdldDsKICAgICBGbG9hdFJlY3QgbV9uZWVkc0Rpc3BsYXlSZWN0OwogICAgIEdy
YXBoaWNzTGF5ZXJUcmFuc2Zvcm0gbV9sYXllclRyYW5zZm9ybTsKQEAgLTIwMiw2ICsyMTEsNyBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZTogMTsKICAgICBib29s
IG1fc2hvdWxkU3luY0NoaWxkcmVuOiAxOwogICAgIGJvb2wgbV9zaG91bGRTeW5jRmlsdGVyczog
MTsKKyAgICBib29sIG1fc2hvdWxkU3luY0NvbXBvc2l0ZWRJbWFnZTogMTsKICAgICBib29sIG1f
c2hvdWxkU3luY0FuaW1hdGlvbnM6IDE7CiAgICAgYm9vbCBtX2ZpeGVkVG9WaWV3cG9ydCA6IDE7
CiAgICAgYm9vbCBtX2NhbnZhc05lZWRzRGlzcGxheSA6IDE7CkBAIC0yMTMsNiArMjIzLDEyIEBA
IHByaXZhdGU6CiAgICAgT3duUHRyPFRpbGVkQmFja2luZ1N0b3JlPiBtX21haW5CYWNraW5nU3Rv
cmU7CiAgICAgT3duUHRyPFRpbGVkQmFja2luZ1N0b3JlPiBtX3ByZXZpb3VzQmFja2luZ1N0b3Jl
OwogICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKKworICAgIC8vIFdoZW4gbV9jb21wb3NpdGVk
SW1hZ2UgZXhpc3RzLCB0aGlzIGxheWVyIGNhbm5vdCBiZSBhIGNvbnRlbnQgbGF5ZXIsIGJlY2F1
c2Ugc2V0RHJhd3NDb250ZW50IGFuZCBzZXRDb250ZW50c1RvSW1hZ2UgYXJlIG11dHVhbGx5IGV4
Y2x1c2l2ZS4KKyAgICBSZWZQdHI8SW1hZ2U+IG1fY29tcG9zaXRlZEltYWdlOworICAgIE5hdGl2
ZUltYWdlUHRyIG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyOworICAgIFJlZlB0cjxXZWJLaXQ6
OkNvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlPiBtX2Nvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdl
OworCiAgICAgUGxhdGZvcm1MYXllciogbV9jYW52YXNQbGF0Zm9ybUxheWVyOwogICAgIFRpbWVy
PENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcj4gbV9hbmltYXRpb25TdGFydGVkVGltZXI7CiAgICAg
R3JhcGhpY3NMYXllckFuaW1hdGlvbnMgbV9hbmltYXRpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCmluZGV4IDVkOWIzZWYzODQ3
NWE5YWRmOTIzN2MxN2I1YTU2YWQ1MmZlNDEyOTIuLmU2Nzg4ZTg4ZjA4NDI0OGE4YmY0YWRhODQx
NzYzZDVjMDhlYWQ2NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVDb29yZGluYXRvci5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDxXZWJDb3Jl
L1JlbmRlckxheWVyQ29tcG9zaXRvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KKyNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5
Q2hhbmdlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC03Miw2ICs3Myw3IEBA
IExheWVyVHJlZUNvb3JkaW5hdG9yOjpMYXllclRyZWVDb29yZGluYXRvcihXZWJQYWdlKiB3ZWJQ
YWdlKQogICAgIDogTGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKQogICAgICwgbV9ub3RpZnlBZnRlclNj
aGVkdWxlZExheWVyRmx1c2goZmFsc2UpCiAgICAgLCBtX2lzVmFsaWQodHJ1ZSkKKyAgICAsIG1f
aXNQdXJnaW5nKGZhbHNlKQogICAgICwgbV93YWl0aW5nRm9yVUlQcm9jZXNzKHRydWUpCiAgICAg
LCBtX2lzU3VzcGVuZGVkKGZhbHNlKQogICAgICwgbV9jb250ZW50c1NjYWxlKDEpCkBAIC0yNjcs
NyArMjY5LDcgQEAgYm9vbCBMYXllclRyZWVDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJD
aGFuZ2VzKCkKIAogICAgIG1fcm9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlz
TGF5ZXJPbmx5KCk7CiAKLSAgICBwdXJnZVJlbGVhc2VkSW1hZ2VzKCk7CisgICAgdXBkYXRlQ29t
cG9zaXRlZEltYWdlcygpOwogCiAgICAgaWYgKG1fc2hvdWxkU3luY1Jvb3RMYXllcikgewogICAg
ICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6
OlNldFJvb3RDb21wb3NpdGluZ0xheWVyKHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9v
dExheWVyLmdldCgpKS0+aWQoKSkpOwpAQCAtNDQ3LDEzICs0NDksNiBAQCB2b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yOjpkaWRQZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpCiAgICAgfQogfQog
Ci12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpwdXJnZVJlbGVhc2VkSW1hZ2VzKCkKLXsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcmVsZWFzZWREaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eTo6RGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKG1fcmVs
ZWFzZWREaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXNbaV0pKTsKLSAgICBtX3JlbGVhc2VkRGlyZWN0
bHlDb21wb3NpdGVkSW1hZ2VzLmNsZWFyKCk7Ci19Ci0KIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OmxheWVyRmx1c2hUaW1lckZpcmVkKFRpbWVyPExheWVyVHJlZUNvb3JkaW5hdG9yPiopCiB7
CiAgICAgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKQEAgLTQ4MSw4MCArNDc2LDYgQEAg
dm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKQogICAg
IG1fcGFnZU92ZXJsYXlMYXllciA9IG51bGxwdHI7CiB9CiAKLWludDY0X3QgTGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoSW1hZ2UqIGltYWdlKQotewotICAgIGlm
ICghaW1hZ2UpCi0gICAgICAgIHJldHVybiBJbnZhbGlkV2ViTGF5ZXJJRDsKLQotICAgIGludDY0
X3Qga2V5ID0gMDsKLQotI2lmIFBMQVRGT1JNKFFUKQotICAgIFFQaXhtYXAqIG5hdGl2ZUltYWdl
ID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0KLSAgICBpZiAoIW5hdGl2
ZUltYWdlKQotICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7Ci0KLSAgICBrZXkgPSBu
YXRpdmVJbWFnZS0+Y2FjaGVLZXkoKTsKLSNlbGlmIFVTRShDQUlSTykKLSAgICBOYXRpdmVJbWFn
ZUNhaXJvKiBuYXRpdmVJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
OwotICAgIGlmICghbmF0aXZlSW1hZ2UpCi0gICAgICAgIHJldHVybiBJbnZhbGlkV2ViTGF5ZXJJ
RDsKLSAgICAvLyBUaGlzIGNhbiBiZSBzYWZlbHkgZG9uZSBzaW5jZSB3ZSBvd24gdGhlIHJlZmVy
ZW5jZS4KLSAgICAvLyBBIGNvcnJlc3BvbmRpbmcgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KCkgaXMg
ZW5zdXJlZCBpbiByZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoKS4KLSAgICBjYWlyb19zdXJmYWNl
X3QqIGNhaXJvU3VyZmFjZSA9IGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKG5hdGl2ZUltYWdlLT5z
dXJmYWNlKCkpOwotICAgIGtleSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50NjRfdD4oY2Fpcm9TdXJm
YWNlKTsKLSNlbmRpZgotCi0gICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVyYXRvciBpdCA9
IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZmluZChrZXkpOwotCi0gICAgaWYg
KGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpIHsKLSAgICAg
ICAgKysoaXQtPnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIGtleTsKLSAgICB9Ci0KLSAgICAvLyBD
aGVjayBpZiB3ZSB3ZXJlIGdvaW5nIHRvIHJlbGVhc2UgdGhpcyBpbWFnZSBkdXJpbmcgdGhlIG5l
eHQgZmx1c2guCi0gICAgc2l6ZV90IHJlbGVhc2VkSW5kZXggPSBtX3JlbGVhc2VkRGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2VzLmZpbmQoa2V5KTsKLSAgICBpZiAocmVsZWFzZWRJbmRleCA9PSBub3RG
b3VuZCkgewotICAgICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFi
bGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShpbWFnZS0+c2l6ZSgpLCAoaW1hZ2UtPmN1cnJlbnRG
cmFtZUhhc0FscGhhKCkgPyBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEgOiAwKSk7Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdy
YXBoaWNzQ29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgICAg
ICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFjZURldmljZVJH
QiwgSW50UG9pbnQ6Onplcm8oKSk7Ci0gICAgICAgIH0KLSAgICAgICAgU2hhcmVhYmxlQml0bWFw
OjpIYW5kbGUgaGFuZGxlOwotICAgICAgICBiaXRtYXAtPmNyZWF0ZUhhbmRsZShoYW5kbGUpOwot
ICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHk6OkNyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGtleSwgaGFuZGxlKSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIG1fcmVsZWFzZWREaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMucmVtb3ZlKHJl
bGVhc2VkSW5kZXgpOwotCi0gICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5h
ZGQoa2V5LCAxKTsKLSAgICByZXR1cm4ga2V5OwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yOjpyZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCBrZXkpCi17Ci0gICAgaWYgKCFr
ZXkpCi0gICAgICAgIHJldHVybjsKLSAgICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJhdG9y
IGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7Ci0gICAg
aWYgKGl0ID09IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGl0LT52YWx1ZS0tOwotCi0gICAgaWYgKGl0LT52YWx1ZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0jaWYgVVNFKENBSVJPKQotICAgIC8vIENvbXBsZW1lbnQgdGhlIHJl
ZmVyZW5jaW5nIGluIGFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoKS4KLSAgICBjYWlyb19zdXJmYWNl
X3QqIGNhaXJvU3VyZmFjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2Fpcm9fc3VyZmFjZV90Kj4oa2V5
KTsKLSAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koY2Fpcm9TdXJmYWNlKTsKLSNlbmRpZgotCi0g
ICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5yZW1vdmUoaXQpOwotICAgIG1f
cmVsZWFzZWREaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuYXBwZW5kKGtleSk7Ci0gICAgc2NoZWR1
bGVMYXllckZsdXNoKCk7Ci19Ci0KLQogdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6bm90aWZ5
QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIC8q
IHRpbWUgKi8pCiB7CiB9CkBAIC02MDgsNiArNTI5LDc1IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRp
bmF0b3I6OnJlbW92ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlEKQogICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6UmVtb3Zl
VGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCkpOwogfQogCitQYXNzUmVmUHRyPENvb3JkaW5h
dGVkQ29tcG9zaXRlZEltYWdlPiBMYXllclRyZWVDb29yZGluYXRvcjo6YWRvcHRDb21wb3NpdGVk
SW1hZ2UoSW1hZ2UqIGltYWdlKQoreworICAgIENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQg
aW1hZ2VJRCA9IENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlOjpnZXRDb29yZGluYXRlZENvbXBv
c2l0ZWRJbWFnZUlEKGltYWdlKTsKKyAgICBDb21wb3NpdGVkSW1hZ2VNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9jb21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1hZ2VJRCk7CisgICAgUmVmUHRyPENvb3JkaW5h
dGVkQ29tcG9zaXRlZEltYWdlPiBjb21wb3NpdGVkSW1hZ2U7CisgICAgaWYgKGl0ID09IG1fY29t
cG9zaXRlZEltYWdlcy5lbmQoKSkgeworICAgICAgICBjb21wb3NpdGVkSW1hZ2UgPSBDb29yZGlu
YXRlZENvbXBvc2l0ZWRJbWFnZTo6Y3JlYXRlKHRoaXMsIGltYWdlKTsKKyAgICAgICAgbV9jb21w
b3NpdGVkSW1hZ2VzLmFkZChpbWFnZUlELCBjb21wb3NpdGVkSW1hZ2UpOworICAgIH0gZWxzZQor
ICAgICAgICBjb21wb3NpdGVkSW1hZ2UgPSBpdC0+dmFsdWU7CisKKyAgICByZXR1cm4gY29tcG9z
aXRlZEltYWdlOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZWxlYXNlQ29tcG9z
aXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgaW1hZ2VJRCkKK3sKKyAgICBB
U1NFUlQobV9jb21wb3NpdGVkSW1hZ2VzLmNvbnRhaW5zKGltYWdlSUQpKTsKKyAgICBtX2NvbXBv
c2l0ZWRJbWFnZXMucmVtb3ZlKGltYWdlSUQpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yOjp1cGRhdGVDb21wb3NpdGVkSW1hZ2VzKCkKK3sKKyAgICBDb21wb3NpdGVkSW1hZ2VNYXA6
Oml0ZXJhdG9yIGVuZCA9IG1fY29tcG9zaXRlZEltYWdlcy5lbmQoKTsKKyAgICBmb3IgKENvbXBv
c2l0ZWRJbWFnZU1hcDo6aXRlcmF0b3IgaXRlciA9IG1fY29tcG9zaXRlZEltYWdlcy5iZWdpbigp
OyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICBpdGVyLT52YWx1ZS0+dXBkYXRlKCk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZVRpbGVkQ29tcG9zaXRlZEltYWdl
KENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgaW1hZ2VJRCwgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHk6OkNyZWF0ZVRpbGVkQ29tcG9zaXRlZEltYWdlKGltYWdlSUQsIHNpemUpKTsKK30KKwor
dm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGVzdHJveVRpbGVkQ29tcG9zaXRlZEltYWdlKENv
b3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgaW1hZ2VJRCkKK3sKKyAgICBpZiAobV9pc1B1cmdp
bmcpCisgICAgICAgIHJldHVybjsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OkRlc3Ryb3lUaWxlZENvbXBvc2l0ZWRJbWFnZShpbWFnZUlE
KSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZVRpbGVGb3JDb21wb3Np
dGVkSW1hZ2UoQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCBpbWFnZUlELCBpbnQgdGlsZUlE
LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgdGFyZ2V0UmVjdCkKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpDcmVh
dGVUaWxlRm9yQ29tcG9zaXRlZEltYWdlKGltYWdlSUQsIHRpbGVJRCwgdGFyZ2V0UmVjdCwgdXBk
YXRlSW5mbykpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjp1cGRhdGVUaWxlRm9y
Q29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRlZEltYWdlSUQgaW1hZ2VJRCwgaW50
IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHRhcmdldFJlY3QpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVl
OworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eTo6VXBkYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShpbWFnZUlELCB0aWxlSUQsIHRhcmdldFJl
Y3QsIHVwZGF0ZUluZm8pKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVtb3Zl
VGlsZUZvckNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEIGltYWdl
SUQsIGludCB0aWxlSUQpCit7CisgICAgaWYgKG1faXNQdXJnaW5nKQorICAgICAgICByZXR1cm47
CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6UmVtb3ZlVGlsZUZvckNvbXBvc2l0ZWRJ
bWFnZShpbWFnZUlELCB0aWxlSUQpKTsKK30KKworUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+
IExheWVyVHJlZUNvb3JkaW5hdG9yOjpiZWdpbkNvbXBvc2l0ZWRJbWFnZVVwZGF0ZShjb25zdCBJ
bnRTaXplJiBzaXplLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzLCBpbnQmIGF0bGFzSUQs
IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgcmV0dXJuIGJlZ2luQ29udGVudFVwZGF0ZShzaXpl
LCBmbGFncywgYXRsYXNJRCwgb2Zmc2V0KTsKK30KKworYm9vbCBMYXllclRyZWVDb29yZGluYXRv
cjo6bGF5ZXJUcmVlQ29tcG9zaXRlZEltYWdlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCk7Cit9CisKIHZvaWQgTGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lELCBjb25zdCBT
aGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKIHsKICAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0ZVVwZGF0ZUF0bGFzKGF0
bGFzSUQsIGhhbmRsZSkpOwpAQCAtNjE1LDYgKzYwNSw4IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRp
bmF0b3I6OmNyZWF0ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lELCBjb25zdCBTaGFyZWFibGVTdXJm
YWNlCiAKIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbW92ZVVwZGF0ZUF0bGFzKGludCBh
dGxhc0lEKQogeworICAgIGlmIChtX2lzUHVyZ2luZykKKyAgICAgICAgcmV0dXJuOwogICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6UmVtb3Zl
VXBkYXRlQXRsYXMoYXRsYXNJRCkpOwogfQogCkBAIC02OTAsMTQgKzY4MiwxMyBAQCBib29sIExh
eWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdAog
CiB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpwdXJnZUJhY2tpbmdTdG9yZXMoKQogeworICAg
IFRlbXBvcmFyeUNoYW5nZTxib29sPiBwdXJnaW5nVG9nZ2xlKG1faXNQdXJnaW5nLCB0cnVlKTsK
KwogICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJh
dG9yIGVuZCA9IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKICAgICBmb3IgKEhhc2hTZXQ8V2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3Rl
cmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgKCppdCktPnB1cmdl
QmFja2luZ1N0b3JlcygpOwogCi0gICAgcHVyZ2VSZWxlYXNlZEltYWdlcygpOwotCi0gICAgQVNT
RVJUKCFtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnNpemUoKSk7Ci0gICAgQVNT
RVJUKCFtX3JlbGVhc2VkRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnNpemUoKSk7CisgICAgbV9j
b21wb3NpdGVkSW1hZ2VzLmNsZWFyKCk7CiAgICAgbV91cGRhdGVBdGxhc2VzLmNsZWFyKCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5o
CmluZGV4IGNhY2I2OGVhYWU1Yjk3OWExNTViNzA1NjRlZGMxODJlZTNkYTMwOTUuLjMwZjk4YmQ0
NTFiYmMxMzkwZDE3Yzg4NzQwM2M3MTIyYTVhZTFmZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3Jk
aW5hdG9yLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaApAQCAtMjIsNiArMjIsNyBAQAogCiAj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRDb21w
b3NpdGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCIKICNp
bmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgpA
QCAtNDAsNiArNDEsNyBAQCBjbGFzcyBXZWJQYWdlOwogY2xhc3MgTGF5ZXJUcmVlQ29vcmRpbmF0
b3IgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudAog
ICAgICwgcHVibGljIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudAogICAgICwgcHVibGlj
IFVwZGF0ZUF0bGFzQ2xpZW50CisgICAgLCBwdWJsaWMgQ29vcmRpbmF0ZWRDb21wb3NpdGVkSW1h
Z2VDbGllbnQKICAgICAsIHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+IGNyZWF0
ZShXZWJQYWdlKik7CkBAIC02Nyw5ICs2OSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
cGF1c2VSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSB0cnVlOyB9CiAgICAgdmlydHVhbCB2
b2lkIHJlc3VtZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOyBzY2hlZHVsZUxh
eWVyRmx1c2goKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5n
ZSgpIHsgfQotICAgIHZpcnR1YWwgaW50NjRfdCBhZG9wdEltYWdlQmFja2luZ1N0b3JlKFdlYkNv
cmU6OkltYWdlKik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShp
bnQ2NF90KTsKIAorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDb29yZGluYXRlZENvbXBvc2l0ZWRJ
bWFnZT4gYWRvcHRDb21wb3NpdGVkSW1hZ2UoV2ViQ29yZTo6SW1hZ2UqKSBPVkVSUklERTsKICAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBT
dXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBk
YXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlEKTsKQEAgLTExMyw2ICsxMTQsMTggQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKik7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBj
bGlwUmVjdCk7CiAKKyAgICAvLyBDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUNsaWVudAorICAg
IHZpcnR1YWwgdm9pZCByZWxlYXNlQ29tcG9zaXRlZEltYWdlKENvb3JkaW5hdGVkQ29tcG9zaXRl
ZEltYWdlSUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlZENvbXBvc2l0
ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lUaWxlZENvbXBvc2l0ZWRJ
bWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgY3JlYXRlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJ
bWFnZUlELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZUZvckNv
bXBvc2l0ZWRJbWFnZShDb29yZGluYXRlZENvbXBvc2l0ZWRJbWFnZUlELCBpbnQgdGlsZUlELCBj
b25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZUZvckNvbXBvc2l0ZWRJbWFnZShDb29yZGlu
YXRlZENvbXBvc2l0ZWRJbWFnZUlELCBpbnQgdGlsZUlEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbXBvc2l0ZWRJbWFn
ZVVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncywg
aW50JiBhdGxhc0lELCBXZWJDb3JlOjpJbnRQb2ludCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
Ym9vbCBsYXllclRyZWVDb21wb3NpdGVkSW1hZ2VUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdCBP
VkVSUklERTsKKworICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRlZEltYWdlcygpOworCiAgICAgLy8g
R3JhcGhpY3NMYXllckZhY3RvcnkKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3Jh
cGhpY3NMYXllcj4gY3JlYXRlR3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xp
ZW50KikgT1ZFUlJJREU7CiAKQEAgLTEyNiw3ICsxMzksNiBAQCBwcml2YXRlOgogICAgIHZvaWQg
c3luY0Rpc3BsYXlTdGF0ZSgpOwogICAgIHZvaWQgbG9ja0FuaW1hdGlvbnMoKTsKICAgICB2b2lk
IHVubG9ja0FuaW1hdGlvbnMoKTsKLSAgICB2b2lkIHB1cmdlUmVsZWFzZWRJbWFnZXMoKTsKIAog
ICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8TGF5ZXJUcmVlQ29v
cmRpbmF0b3I+Kik7CiAKQEAgLTE0NywxMiArMTU5LDEzIEBAIHByaXZhdGU6CiAKICAgICBIYXNo
U2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+IG1fcmVnaXN0ZXJlZExheWVy
czsKICAgICBWZWN0b3I8V2ViTGF5ZXJJRD4gbV9kZXRhY2hlZExheWVyczsKLSAgICBIYXNoTWFw
PGludDY0X3QsIGludD4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50czsKLSAgICBW
ZWN0b3I8aW50NjRfdD4gbV9yZWxlYXNlZERpcmVjdGx5Q29tcG9zaXRlZEltYWdlczsKKyAgICB0
eXBlZGVmIEhhc2hNYXA8Q29vcmRpbmF0ZWRDb21wb3NpdGVkSW1hZ2VJRCwgUmVmUHRyPENvb3Jk
aW5hdGVkQ29tcG9zaXRlZEltYWdlPiA+IENvbXBvc2l0ZWRJbWFnZU1hcDsKKyAgICBDb21wb3Np
dGVkSW1hZ2VNYXAgbV9jb21wb3NpdGVkSW1hZ2VzOwogICAgIFZlY3RvcjxPd25QdHI8VXBkYXRl
QXRsYXM+ID4gbV91cGRhdGVBdGxhc2VzOwogCiAgICAgYm9vbCBtX25vdGlmeUFmdGVyU2NoZWR1
bGVkTGF5ZXJGbHVzaDsKICAgICBib29sIG1faXNWYWxpZDsKKyAgICBib29sIG1faXNQdXJnaW5n
OwogCiAgICAgYm9vbCBtX3dhaXRpbmdGb3JVSVByb2Nlc3M7CiAgICAgYm9vbCBtX2lzU3VzcGVu
ZGVkOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173536</attachid>
            <date>2012-11-11 18:55:03 -0800</date>
            <delta_ts>2012-11-11 19:58:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101023-20121112115245.patch</filename>
            <type>text/plain</type>
            <size>59173</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0MTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYzY3NTgyYzc3ZDY5NGFm
YTI2Y2E5NzlmOWQyNjRiOTFhYzJlYWE3Ny4uNmNhMDBkZmY5MDk2NTA1NzIyMzk1YWZhMzg1NjU3
OWY2MzJmY2M3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNiBAQAorMjAxMi0xMS0xMSAgSHVh
bmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGlu
YXRlZCBHcmFwaGljczogQWRkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nIHRvIG1hbmFnZSBhbiBp
bWFnZSByZXNvdXJjZSBzbWFydGx5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTAxMDIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQ3VycmVudGx5LCBMYXllclRyZWVDb29yZGluYXRvciBtYW5hZ2VzIGNv
bXBvc2l0ZWQgaW1hZ2VzIHVzaW5nCisgICAgICAgIFNoYXJlYWJsZUJpdG1hcC4gVGhpcyBwYXRj
aCBpbnRyb2R1Y2VzIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nIHdoaWNoCisgICAgICAgIHBsYXlz
IGEgcm9sZSBpbiBtYW5hZ2luZyBjb21wb3NpdGVkIGltYWdlcy4KKworICAgICAgICBXZSBjYW4g
Z2V0IGZvbGxvd2luZyBiZW5lZml0cy4KKyAgICAgICAgMS4gV2UgY2FuIHJlbW92ZSBhIHRleHR1
cmUgaWYgYW4gaW1hZ2UgaXMgb2ZmIHRoZSB2aWV3cG9ydC4KKyAgICAgICAgMi4gV2UgY2FuIHVw
ZGF0ZSBhIHRleHR1cmUgaWYgYW4gaW1hZ2UgaXMgdXBkYXRlZC4gKGkuZS4gZ2lmIGFuaW1hdGlv
bnMpCisKKyAgICAgICAgV2UgY3JlYXRlIG9ubHkgb25lIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
IHBlciBpbWFnZS4gRm9yIGV4YW1wbGUsIGluIHRoZSBsZWF2ZXMKKyAgICAgICAgZGVtbywgd2Ug
Y3JlYXRlIG9ubHkgMyBsZWF2ZSBDb29yZGluYXRlZEltYWdlQmFja2luZ3MuCisKKyAgICAgICAg
SW4gYWRkaXRpb24sIHRoaXMgcGF0Y2ggZml4ZXMgdHdvIGJ1Z3MuCisgICAgICAgIDEuIFJlbmRl
ciBvbmx5IHRoZSBmaXJzdCBmcmFtZSBvZiBhIGdpZiBhbmltYXRpb24gaW1hZ2UuCisgICAgICAg
IDIuIExvc3QgYSBzaGFyZWQgaW1hZ2UgYmVjYXVzZSBXZWIgUHJvY2VzcyBjYW4gcmVtb3ZlIFNo
YXJlYWJsZUJpdG1hcCBiZWZvcmUgVUkgUHJvY2VzcyByZWFkcyBpdC4KKyAgICAgICAgICAgRm9y
IGV4YW1wbGUsIENvb3JkaW5hdGVkIEdyYXBoaWNzIG9mdGVuIGRvZXNuJ3QgcmVuZGVyIGEgZ3Jh
ZGllbnQgbWFzayBvbgorICAgICAgICAgICBhIHJlZmxlY3Rpb24gaW1hZ2UgaW4gdGhlIHNub3dz
dGFjayBkZW1vLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogU2hhcmVk
L1dlYkxheWVyVHJlZUluZm8uaDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJJbmZvOjpXZWJM
YXllckluZm8pOgorICAgICAgICAoV2ViTGF5ZXJJbmZvKToKKyAgICAgICAgKiBUYXJnZXQucHJp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChDb29yZGluYXRlZElt
YWdlQmFja2luZ1N0b3JlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nU3RvcmVUaWxlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ1N0b3JlVGlsZSk6CisgICAg
ICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nU3RvcmU6OkNvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEltYWdlQmFja2lu
Z1N0b3JlOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nU3RvcmU6OmNyZWF0ZVRpbGVzSWZOZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpD
b29yZGluYXRlZEltYWdlQmFja2luZ1N0b3JlOjpyZW1vdmVUaWxlc0lmTmVlZGVkKToKKyAgICAg
ICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdTdG9yZTo6cmVtb3ZlQWxsVGlsZXMp
OgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEltYWdlQmFja2luZ1N0b3JlOjpjb21taXRU
aWxlT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
U3RvcmU6OnRleHR1cmUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEltYWdlQmFja2lu
Z1N0b3JlOjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgIChDb29yZGluYXRlZEltYWdlQmFja2luZ1N0b3JlKToKKyAgICAgICAgICAg
IEl0IGlzIGEgY291bnRlcnBhcnQgb2YgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgaW4gVUkgUHJv
Y2Vzcy4gSXQgaXMKKyAgICAgICAgICAgIGltcGxlbWVudGVkIHNpbXBseSB1c2luZyBDb29yZGlu
YXRlZEJhY2tpbmdTdG9yZS4KKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdTdG9yZTo6Y3JlYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRlSW1hZ2VCYWNraW5nKToKKyAgICAg
ICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6
Om5vdGlmeUludmlzaWJsZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHk6OnJlbW92ZUltYWdlQmFja2luZyk6CisgICAgICAgICogVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oOgorICAg
ICAgICAoTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSk6CisgICAgICAgICogVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbjoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJl
ci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0YXRl
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZUJhY2tpbmdTdG9y
ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRp
bGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlSW1hZ2VCYWNr
aW5nKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZUltYWdlQmFj
a2luZyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpub3RpZnlJbnZpc2li
bGVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZVJlbmRlcmVyOjphc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVJlbGVhc2VkSW1hZ2VCYWNraW5nc0lmTmVl
ZGVkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OmNvbW1pdFRpbGVPcGVy
YXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OmZsdXNoTGF5ZXJD
aGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OnB1cmdlR0xSZXNv
dXJjZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJl
ZVJlbmRlcmVyLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoTGF5ZXJUcmVlUmVuZGVy
ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jSW1hZ2VCYWNraW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Zmx1c2hDb21wb3NpdGluZ1N0YXRl
Rm9yVGhpc0xheWVyT25seSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OmltYWdlQmFja2luZ1Zpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpyZWxlYXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpiZWdpbkNvbnRlbnRVcGRhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpwdXJnZUJhY2tpbmdT
dG9yZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpoYXNQ
ZW5kaW5nVmlzaWJsZUNoYW5nZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oOgorICAgICAgICAoQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KToKKyAgICAgICAgKENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgICBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIgdXNlcyBDb29yZGluYXRlZEltYWdlQmFja2luZyB0byBoYW5kbGUg
YQorICAgICAgICAgIGNvbXBvc2l0ZWQgaW1hZ2UuIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nIHBs
YXlzIGEgcm9sZSBpbiBpbWFnZQorICAgICAgICAgIHJlc291cmNlIG1hbmFnZW1lbnQ6IHNlbmRp
bmcgdGhlIGltYWdlIHRvIFVJIFByb2Nlc3MsIHJlcGFpbnRpbmcgd2hpbGUKKyAgICAgICAgICBh
IGdpZiBhbmltYXRpb24gcHJvZ3Jlc3NlcyBhbmQgcmVtb3ZpbmcgYW4gaW1hZ2UgcHJvcGVybHku
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEltYWdlQmFj
a2luZzo6Z2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk6CisgICAgICAgIChXZWJLaXQ6OkNv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6fkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKToK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmFkZExheWVyQ2xpZW50
KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnJlbW92ZUxheWVy
Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmludmFs
aWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6dXBkYXRl
KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnJlbGVhc2VTdXJm
YWNlSWZOZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6
bm90aWZ5SW52aXNpYmxlSW1hZ2VCYWNraW5nSW5OZWVkZWQpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmg6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nQ2xpZW50KToKKyAgICAgICAgKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nR3JhcGhpY3NMYXll
ckNsaWVudCk6CisgICAgICAgIChDb29yZGluYXRlZEltYWdlQmFja2luZyk6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjppZCk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJD
aGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZUlt
YWdlQmFja2luZ0lmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OmNyZWF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yOjp1cGRhdGVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVD
b29yZGluYXRvcjo6bm90aWZ5SW52aXNpYmxlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbW92ZUltYWdlQmFja2luZyk6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjp1cGRhdGVJbWFnZUJhY2tpbmdzKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnB1cmdlQmFja2luZ1N0b3Jlcyk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IuaDoKKyAgICAgICAgKExheWVyVHJlZUNvb3JkaW5hdG9yKToKKwogMjAxMi0x
MS0xMCAgWmVubyBBbGJpc3NlciAgPHplbm9Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbUXRdW1dL
Ml0gVXNlIFFMaWJyYXJ5SW5mbyB0byBzZWFyY2ggZm9yIGV4ZWN1dGFibGVzLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxp
c3RzLnR4dAppbmRleCA2ZTQ2ZjQ4YTk5ZTMxMmIzNzA2MzFjYWIyMzMyN2I5MmI1NTVjYjFlLi4w
NWQ3YzZkNzk2YzE2Y2FhMzhjNmVkMGZjN2E0ZmRjNDkwMTgwYmQ0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3Rz
LnR4dApAQCAtNDk0LDYgKzQ5NCw3IEBAIFNFVChXZWJLaXQyX1NPVVJDRVMKICAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlVuZG9TdGVwLmNwcAogCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHAK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29y
ZGluYXRvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRy
ZWVJbmZvLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCmluZGV4
IDU4ZTA3YmMwMjdlZmQ1YzFhOTU5YjNiMGM2MThlNGFlMDVjZTc4ZTguLmU2YTJhZWRhNjNhNGM1
Y2M0NTI2NzRlMjI3ODllZGQ2OTAyMDRiYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJMYXllclRyZWVJbmZvLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxh
eWVyVHJlZUluZm8uaApAQCAtMjcsMjUgKzI3LDI3IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgotI2lu
Y2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdHlwZWRl
ZiB1aW50MzJfdCBXZWJMYXllcklEOwogZW51bSB7IEludmFsaWRXZWJMYXllcklEID0gMCB9Owog
Cit0eXBlZGVmIHVpbnRwdHJfdCBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEOworZW51bSB7IElu
dmFsaWRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEID0gMCB9OworCiAvLyBOT1RFOiBXZWJMYXll
ckluZm8gc2hvdWxkIG9ubHkgdXNlIFBPRCB0eXBlcywgYXMgdG8gbWFrZSBzZXJpYWxpemF0aW9u
IGZhc3Rlci4KIHN0cnVjdCBXZWJMYXllckluZm8gewogICAgIFdlYkxheWVySW5mbygpCiAgICAg
ICAgIDogcmVwbGljYShJbnZhbGlkV2ViTGF5ZXJJRCkKICAgICAgICAgLCBtYXNrKEludmFsaWRX
ZWJMYXllcklEKQotICAgICAgICAsIGltYWdlQmFja2luZ1N0b3JlSUQoMCkKKyAgICAgICAgLCBp
bWFnZUlEKEludmFsaWRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKQogICAgICAgICAsIG9wYWNp
dHkoMCkKICAgICAgICAgLCBmbGFncygwKSB7IH0KIAogICAgIFdlYkxheWVySUQgcmVwbGljYTsK
ICAgICBXZWJMYXllcklEIG1hc2s7Ci0gICAgaW50NjRfdCBpbWFnZUJhY2tpbmdTdG9yZUlEOwor
ICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRDsKIAogICAgIFdlYkNvcmU6OkZs
b2F0UG9pbnQgcG9zOwogICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQzRCBhbmNob3JQb2ludDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJn
ZXQucHJpCmluZGV4IGRhYzliOWEyNDg5YjhhNTI2YmVlYzNjM2RiNGZhOWY2MzY3NzgxZDIuLjdj
ZDAxNmVkOTg2OTRmMTI5NzFlNjc3NDhiYWE4YmMwNmIyNDgzY2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAt
MzY5LDYgKzM2OSw3IEBAIEhFQURFUlMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVu
dERpc3BhdGNoZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmgg
XAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllci5oIFwKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuaCBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaCBcCiAgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhpZ2hsaWdodENvbnRyb2xsZXIuaCBcCkBAIC03NTAsNiAr
NzUxLDcgQEAgU09VUkNFUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0
Y2hlci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgXAog
ICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllci5jcHAgXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcCBcCiAgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwIFwK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGFwSGlnaGxpZ2h0Q29udHJvbGxlci5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwCmluZGV4IDM4NWFmNGRk
ZmYyNTA1MGFlMDk1ODRhMzgyYWUxZmNlYzdhYjFlMGUuLjcxMzBiZjY4NjdhNTU2YzQxN2FjZjc1
ODU2MDk1ODEyOTNmMmE5NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tp
bmdTdG9yZS5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogIENvcHlyaWdodCAoQykgMjAxMiBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyBDb3B5cmlnaHQgKEMp
IDIwMTIgQ29tcGFueSAxMDAsIEluYy4KIAogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTg3LDUgKzE4OCw5MCBA
QCB2b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjb21taXRUaWxlT3BlcmF0aW9ucyhUZXh0
dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQogICAgICAgICBpdC0+dmFsdWUuc3dhcEJ1ZmZlcnMo
dGV4dHVyZU1hcHBlcik7CiB9CiAKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KKy8vIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nU3RvcmUgQ2xhc3MK
Ky8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwor
c3RydWN0IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nU3RvcmVUaWxlIHsKKyAgICBleHBsaWNpdCBD
b29yZGluYXRlZEltYWdlQmFja2luZ1N0b3JlVGlsZShjb25zdCBJbnRSZWN0Jik7CisKKyAgICBp
bnQgbV9pZDsKKyAgICBJbnRSZWN0IG1fcmVjdDsKK307CisKK0Nvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nU3RvcmVUaWxlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ1N0b3JlVGlsZShjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiByZWN0KQorICAgIDogbV9yZWN0KHJlY3QpCit7CisgICAgc3RhdGljIGlu
dCBuZXh0SUQgPSAwOworICAgIG1faWQgPSArK25leHRJRDsKK30KKworQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdTdG9yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdTdG9yZSgpCisgICAgOiBtX2Jh
Y2tpbmdTdG9yZShDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCkpCit7Cit9CisKK3Zv
aWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdTdG9yZTo6dXBkYXRlQ29udGVudHMoUGFzc1JlZlB0
cjxTaGFyZWFibGVTdXJmYWNlPiBwcnBTdXJmYWNlKQoreworICAgIHJlbW92ZVRpbGVzSWZOZWVk
ZWQoKTsKKworICAgIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBzdXJmYWNlID0gcHJwU3VyZmFj
ZTsKKyAgICBJbnRTaXplIHNpemUoc3VyZmFjZS0+c2l6ZSgpKTsKKworICAgIGNyZWF0ZVRpbGVz
SWZOZWVkZWQoc2l6ZSk7CisKKyAgICBtX2JhY2tpbmdTdG9yZS0+c2V0U2l6ZShzaXplKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGlsZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1f
YmFja2luZ1N0b3JlLT51cGRhdGVUaWxlKG1fdGlsZXNbaV0ubV9pZCwgSW50UmVjdChJbnRQb2lu
dDo6emVybygpLCBtX3RpbGVzW2ldLm1fcmVjdC5zaXplKCkpLCBtX3RpbGVzW2ldLm1fcmVjdCwg
c3VyZmFjZSwgbV90aWxlc1tpXS5tX3JlY3QubG9jYXRpb24oKSk7Cit9CisKK3ZvaWQgQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdTdG9yZTo6Y3JlYXRlVGlsZXNJZk5lZWRlZChjb25zdCBJbnRTaXpl
JiBzaXplKQoreworICAgIHN0YXRpYyBjb25zdCBJbnRTaXplIHRpbGVTaXplKDEwMjQsIDEwMjQp
OworICAgIEludFJlY3QgcmVjdChJbnRQb2ludDo6emVybygpLCBzaXplKTsKKworICAgIGZvciAo
ZmxvYXQgeSA9IDA7IHkgPCBzaXplLmhlaWdodCgpOyB5ICs9IHRpbGVTaXplLmhlaWdodCgpKSB7
CisgICAgICAgIGZvciAoZmxvYXQgeCA9IDA7IHggPCBzaXplLndpZHRoKCk7IHggKz0gdGlsZVNp
emUud2lkdGgoKSkgeworICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdCh4LCB5LCB0aWxlU2l6
ZS53aWR0aCgpLCB0aWxlU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICB0aWxlUmVjdC5pbnRl
cnNlY3QocmVjdCk7CisgICAgICAgICAgICBtX3RpbGVzLmFwcGVuZChDb29yZGluYXRlZEltYWdl
QmFja2luZ1N0b3JlVGlsZSh0aWxlUmVjdCkpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3RpbGVzLnNpemUoKTsgKytpKQorICAgICAgICBtX2JhY2tp
bmdTdG9yZS0+Y3JlYXRlVGlsZShtX3RpbGVzW2ldLm1faWQsIDEgLyogc2NhbGUgKi8pOworfQor
Cit2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nU3RvcmU6OnJlbW92ZVRpbGVzSWZOZWVkZWQo
KQoreworICAgIGlmIChtX3RpbGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RpbGVzLnNpemUoKTsgKytpKQorICAgICAgICBtX2Jh
Y2tpbmdTdG9yZS0+cmVtb3ZlVGlsZShtX3RpbGVzW2ldLm1faWQpOworCisgICAgbV90aWxlcy5j
bGVhcigpOworfQorCit2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nU3RvcmU6OnJlbW92ZUFs
bFRpbGVzKCkKK3sKKyAgICByZW1vdmVUaWxlc0lmTmVlZGVkKCk7Cit9CisKK3ZvaWQgQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdTdG9yZTo6Y29tbWl0VGlsZU9wZXJhdGlvbnMoVGV4dHVyZU1hcHBl
ciogdGV4dHVyZU1hcHBlcikKK3sKKyAgICBtX2JhY2tpbmdTdG9yZS0+Y29tbWl0VGlsZU9wZXJh
dGlvbnModGV4dHVyZU1hcHBlcik7Cit9CisKK1Bhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdTdG9yZTo6dGV4dHVyZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fYmFja2luZ1N0b3JlLT50ZXh0dXJlKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1h
cHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKQorewor
ICAgIG1fYmFja2luZ1N0b3JlLT5wYWludFRvVGV4dHVyZU1hcHBlcih0ZXh0dXJlTWFwcGVyLCB0
YXJnZXRSZWN0LCB0cmFuc2Zvcm0sIG9wYWNpdHksIG1hc2spOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
LmgKaW5kZXggMGIyNDgyNjc2MTZkYmRhZGYzOWMxMjQzM2Q0YjMwMmE0MTMzNDc3ZS4uMTg2NGVm
Nzk5ZjRhMGJlM2QzMDczOGExZWEzOGYzYTgxZjU2MDZlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZEJhY2tpbmdTdG9yZS5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICBDb3B5cmlnaHQg
KEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisg
Q29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCiAKICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTc5
LDYgKzgwLDI3IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9zY2FsZTsKIH07CiAKK3N0cnVjdCBD
b29yZGluYXRlZEltYWdlQmFja2luZ1N0b3JlVGlsZTsKKworY2xhc3MgQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdTdG9yZSA6IHB1YmxpYyBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3Jl
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2lu
Z1N0b3JlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmdTdG9yZSk7IH0KKyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKFBhc3NSZWZQdHI8U2hhcmVh
YmxlU3VyZmFjZT4pOworICAgIHZvaWQgcmVtb3ZlQWxsVGlsZXMoKTsKKyAgICB2b2lkIGNvbW1p
dFRpbGVPcGVyYXRpb25zKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqKTsKKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8V2ViQ29yZTo6Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBmbG9hdCwgV2ViQ29yZTo6Qml0bWFwVGV4dHVyZSopOworCitwcml2YXRlOgorICAg
IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nU3RvcmUoKTsKKworICAgIHZvaWQgY3JlYXRlVGlsZXNJ
Zk5lZWRlZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CisgICAgdm9pZCByZW1vdmVUaWxlc0lm
TmVlZGVkKCk7CisKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IG1fYmFja2lu
Z1N0b3JlOworICAgIFZlY3RvcjxDb29yZGluYXRlZEltYWdlQmFja2luZ1N0b3JlVGlsZT4gbV90
aWxlczsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogI2VuZGlmCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAKaW5kZXggMTdmYTJlYTk1YzNl
ZGU4M2VmOTBlMWFhN2FjOGQ1ODY0NDQ1ZDFhNS4uNDY2ZDVlNWM2ZTEwZDk5MWFiN2M3MTU3YmM5
YWVlNTg5OTNkZGY4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eS5jcHAKQEAgLTEyNywxNSArMTI3LDI0IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6ZGlkUmVuZGVyRnJhbWUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGVudHNT
CiAjZW5kaWYKIH0KIAotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpjcmVhdGVEaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSwgY29uc3QgV2ViS2l0OjpTaGFyZWFibGVC
aXRtYXA6OkhhbmRsZSYgaGFuZGxlKQordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojpj
cmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQogewot
ICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3Jl
YXRlKGhhbmRsZSk7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6
OmNyZWF0ZUltYWdlLCBtX3JlbmRlcmVyLmdldCgpLCBrZXksIGJpdG1hcCkpOworICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVJbWFnZUJhY2tpbmcsIG1f
cmVuZGVyZXIuZ2V0KCksIGltYWdlSUQpKTsKIH0KIAotdm9pZCBMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkpCit2b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEIGltYWdlSUQsIGNvbnN0IFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYg
aGFuZGxlKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpk
ZXN0cm95SW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGtleSkpOworICAgIGRpc3BhdGNoVXBkYXRl
KGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVJbWFnZUJhY2tpbmcsIG1fcmVuZGVyZXIu
Z2V0KCksIGltYWdlSUQsIFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZShoYW5kbGUpKSk7Cit9CisK
K3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6bm90aWZ5SW52aXNpYmxlSW1hZ2VCYWNr
aW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBkaXNwYXRjaFVw
ZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6bm90aWZ5SW52aXNpYmxlSW1hZ2VCYWNraW5n
LCBtX3JlbmRlcmVyLmdldCgpLCBpbWFnZUlEKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eTo6cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQg
aW1hZ2VJRCkKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6
cmVtb3ZlSW1hZ2VCYWNraW5nLCBtX3JlbmRlcmVyLmdldCgpLCBpbWFnZUlEKSk7CiB9CiAKIHZv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c2V0Q29udGVudHNTaXplKGNvbnN0IEZsb2F0
U2l6ZSYgY29udGVudHNTaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eS5oCmluZGV4IGQzNDg2ODc4ZDg4ZDQzZGE1MDQwMDgxY2Q1ZWMxMzMzMWY2ZTk0ZDgu
LjE1YWExYjNiNzUxZjVlZWJlNzdjODUzZjQ2M2JjZTBmYjc0YTViYTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmgKQEAgLTY3LDggKzY3LDEwIEBAIHB1
YmxpYzoKICAgICB2b2lkIHJlbW92ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJ
RCk7CiAgICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCwgY29uc3QgU2hhcmVh
YmxlU3VyZmFjZTo6SGFuZGxlJik7CiAgICAgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyhpbnQgYXRs
YXNJRCk7Ci0gICAgdm9pZCBjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90LCBj
b25zdCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJik7Ci0gICAgdm9pZCBkZXN0cm95
RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCk7CisgICAgdm9pZCBjcmVhdGVJbWFnZUJh
Y2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CisgICAgdm9pZCB1cGRhdGVJbWFnZUJh
Y2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgY29uc3QgU2hhcmVhYmxlU3VyZmFjZTo6
SGFuZGxlJik7CisgICAgdm9pZCBub3RpZnlJbnZpc2libGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCk7CisgICAgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCk7CiAgICAgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwg
Q29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsKICAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7CiAg
ICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVz
c2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IGU1ZTY0YTkzYTdhMDc2
Y2U5MzNmMDI5Yzk2NWE0Njk3M2E3ODNmN2QuLjRjZDMyNTc1NGQ3YmRkNGIyN2Y2NDQ1OWM2OWYy
N2Q1ZWIyMjk2ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4KKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgpAQCAtMzEsOCArMzEsMTAgQEAgbWVzc2FnZXMgLT4g
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSB7CiAgICAgUmVtb3ZlVGlsZUZvckxheWVyKHVpbnQz
Ml90IGxheWVySUQsIGludCB0aWxlSUQpCiAgICAgQ3JlYXRlVXBkYXRlQXRsYXMoaW50IGF0bGFz
SUQsIFdlYktpdDo6U2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlIGhhbmRsZSkKICAgICBSZW1vdmVV
cGRhdGVBdGxhcyhpbnQgYXRsYXNJRCkKLSAgICBDcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZShpbnQ2NF90IGtleSwgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpCi0g
ICAgRGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5KQorICAgIENyZWF0
ZUltYWdlQmFja2luZyh1aW50cHRyX3QgaW1hZ2VJRCkKKyAgICBVcGRhdGVJbWFnZUJhY2tpbmco
dWludHB0cl90IGltYWdlSUQsIFdlYktpdDo6U2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlIGhhbmRs
ZSkKKyAgICBOb3RpZnlJbnZpc2libGVJbWFnZUJhY2tpbmcodWludHB0cl90IGltYWdlSUQpCisg
ICAgUmVtb3ZlSW1hZ2VCYWNraW5nKHVpbnRwdHJfdCBpbWFnZUlEKQogICAgIERpZFJlbmRlckZy
YW1lKFdlYkNvcmU6OkludFNpemUgY29udGVudHNTaXplLCBXZWJDb3JlOjpJbnRSZWN0IGNvdmVy
ZWRSZWN0KQogICAgIERpZENoYW5nZVNjcm9sbFBvc2l0aW9uKFdlYkNvcmU6OkludFBvaW50IHBv
c2l0aW9uKQogICAgIFNldExheWVyQW5pbWF0aW9ucyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckFuaW1hdGlvbnMgYW5pbWF0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJl
bmRlcmVyLmNwcAppbmRleCAxM2QwMjY5OTU0YTNiZjc2MDc4NmQzM2I3MDA4ZjQ4OGZmNzNmMDUz
Li5jZWJmZDQyMjRkZjZmZDVmZjQ5ODNmMWYzNTYwYzkwM2U4NGM0YmU1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5k
ZXJlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAgICBDb3B5cmln
aHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisgICAgQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCiAKICAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTI3LDcgKzI4LDYgQEAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlci5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCIKICNpbmNsdWRl
ICJNZXNzYWdlSUQuaCIKLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgog
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgpAQCAtMzAxLDcgKzMwMSw3IEBAIHZvaWQgTGF5
ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyU3RhdGUoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2ViTGF5
ZXJJbmZvJiBsYXllckluCiAgICAgZWxzZQogICAgICAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShp
ZCk7CiAKLSAgICBhc3NpZ25JbWFnZVRvTGF5ZXIobGF5ZXIsIGxheWVySW5mby5pbWFnZUJhY2tp
bmdTdG9yZUlEKTsKKyAgICBhc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKGxheWVyLCBsYXllcklu
Zm8uaW1hZ2VJRCk7CiAKICAgICAvLyBOZXZlciBtYWtlIHRoZSByb290IGxheWVyIGNsaXAuCiAg
ICAgbGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMobGF5ZXJJbmZvLmlzUm9vdExheWVyID8gZmFsc2Ug
OiBsYXllckluZm8ubWFza3NUb0JvdW5kcyk7CkBAIC0zNjcsNyArMzY3LDcgQEAgUGFzc1JlZlB0
cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gTGF5ZXJUcmVlUmVuZGVyZXI6OmdldEJhY2tpbmdT
dG9yZShXZWJMYXllckkKICAgICByZXR1cm4gYmFja2luZ1N0b3JlOwogfQogCi12b2lkIExheWVy
VHJlZVJlbmRlcmVyOjpyZW1vdmVCYWNraW5nU3RvcmVJZk5lZWRlZChXZWJMYXllcklEIGxheWVy
SUQsIGludCAvKnRpbGVJRCovKQordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlQmFja2lu
Z1N0b3JlSWZOZWVkZWQoV2ViTGF5ZXJJRCBsYXllcklEKQogewogICAgIFRleHR1cmVNYXBwZXJM
YXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihsYXllckJ5SUQobGF5ZXJJRCkpOwog
ICAgIEFTU0VSVChsYXllcik7CkBAIC0zODcsNyArMzg3LDcgQEAgdm9pZCBMYXllclRyZWVSZW5k
ZXJlcjo6Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGZsb2F0IHNj
YWxlLAogdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlVGlsZShXZWJMYXllcklEIGxheWVy
SUQsIGludCB0aWxlSUQpCiB7CiAgICAgZ2V0QmFja2luZ1N0b3JlKGxheWVySUQpLT5yZW1vdmVU
aWxlKHRpbGVJRCk7Ci0gICAgcmVtb3ZlQmFja2luZ1N0b3JlSWZOZWVkZWQobGF5ZXJJRCwgdGls
ZUlEKTsKKyAgICByZW1vdmVCYWNraW5nU3RvcmVJZk5lZWRlZChsYXllcklEKTsKIH0KIAogdm9p
ZCBMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0
aWxlSUQsIGNvbnN0IFRpbGVVcGRhdGUmIHVwZGF0ZSkKQEAgLTM5NywzOCArMzk3LDc0IEBAIHZv
aWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQg
dGlsZUlELCBjb25zdCBUaWxlVXBkCiAgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZm
ZXJzLmFkZChiYWNraW5nU3RvcmUpOwogfQogCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjcmVh
dGVJbWFnZShpbnQ2NF90IGltYWdlSUQsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiB3ZWFr
Qml0bWFwKQordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlSW1hZ2VCYWNraW5nKENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKIHsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBiaXRtYXAgPSB3ZWFrQml0bWFwOwotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyVGlsZWRC
YWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9y
ZTo6Y3JlYXRlKCk7Ci0gICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuc2V0KGltYWdlSUQs
IGJhY2tpbmdTdG9yZSk7Ci0gICAgYmFja2luZ1N0b3JlLT51cGRhdGVDb250ZW50cyhtX3RleHR1
cmVNYXBwZXIuZ2V0KCksIGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKS5nZXQoKSwgQml0bWFwVGV4dHVy
ZTo6VXBkYXRlQ2Fubm90TW9kaWZ5T3JpZ2luYWxJbWFnZURhdGEpOworICAgIEFTU0VSVCghbV9p
bWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nU3Rv
cmU6OmNyZWF0ZSgpKTsKKyAgICBtX2ltYWdlQmFja2luZ3MuYWRkKGltYWdlSUQsIGJhY2tpbmdT
dG9yZS5yZWxlYXNlKCkpOwogfQogCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95SW1h
Z2UoaW50NjRfdCBpbWFnZUlEKQordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlSW1hZ2VC
YWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwgUGFzc1JlZlB0cjxTaGFy
ZWFibGVTdXJmYWNlPiBzdXJmYWNlKQogewotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Vz
LnJlbW92ZShpbWFnZUlEKTsKKyAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGlt
YWdlSUQpKTsKKyAgICBJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tp
bmdzLmZpbmQoaW1hZ2VJRCk7CisgICAgUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nU3Rv
cmU+IGJhY2tpbmdTdG9yZSA9IGl0LT52YWx1ZTsKKyAgICBiYWNraW5nU3RvcmUtPnVwZGF0ZUNv
bnRlbnRzKHN1cmZhY2UpOworICAgIG1faW1hZ2VCYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZm
ZXJzLmFkZChiYWNraW5nU3RvcmUpOwogfQogCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjphc3Np
Z25JbWFnZVRvTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIsIGludDY0X3QgaW1hZ2VJRCkKK3Zv
aWQgTGF5ZXJUcmVlUmVuZGVyZXI6Om5vdGlmeUludmlzaWJsZUltYWdlQmFja2luZyhDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCiB7Ci0gICAgaWYgKCFpbWFnZUlEKSB7CisgICAg
QVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlEKSk7CisgICAgSW1hZ2VCYWNr
aW5nTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VCYWNraW5ncy5maW5kKGltYWdlSUQpOworICAg
IFJlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBpdC0+
dmFsdWU7CisgICAgYmFja2luZ1N0b3JlLT5yZW1vdmVBbGxUaWxlcygpOworICAgIG1faW1hZ2VC
YWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOworfQorCit2
b2lkIExheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCBpbWFnZUlEKQoreworICAgIEFTU0VSVChtX2ltYWdlQmFja2luZ3MuY29udGFp
bnMoaW1hZ2VJRCkpOworCisgICAgLy8gV2UgZG9uJ3Qgd2FudCBUZXh0dXJlTWFwcGVyTGF5ZXIg
cmVmZXJzIGEgZGFuZ2xpbmcgcG9pbnRlci4KKyAgICBJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7CisgICAgbV9yZWxlYXNlZEltYWdl
QmFja2luZ3MuYXBwZW5kKGl0LT52YWx1ZSk7CisgICAgbV9pbWFnZUJhY2tpbmdzLnJlbW92ZShp
bWFnZUlEKTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6YXNzaWduSW1hZ2VCYWNraW5n
VG9MYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBp
bWFnZUlEKQoreworICAgIGlmIChpbWFnZUlEID09IEludmFsaWRDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEKSB7CiAgICAgICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoMCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0KLSAgICBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxUZXh0dXJlTWFw
cGVyQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1h
Z2VzLmZpbmQoaW1hZ2VJRCk7Ci0gICAgQVNTRVJUKGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVk
SW1hZ2VzLmVuZCgpKTsKKyAgICBJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFn
ZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7CisgICAgQVNTRVJUKGl0ICE9IG1faW1hZ2VCYWNraW5n
cy5lbmQoKSk7CiAgICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShpdC0+dmFsdWUuZ2V0KCkp
OwogfQogCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVSZWxlYXNlZEltYWdlQmFja2lu
Z3NJZk5lZWRlZCgpCit7CisgICAgbV9yZWxlYXNlZEltYWdlQmFja2luZ3MuY2xlYXIoKTsKK30K
Kwogdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y29tbWl0VGlsZU9wZXJhdGlvbnMoKQogewotICAg
IEhhc2hTZXQ8UmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBlbmQg
PSBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuZW5kKCk7Ci0gICAgZm9yIChIYXNo
U2V0PFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgaXQgPSBtX2Jh
Y2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICAoKml0KS0+Y29tbWl0VGlsZU9wZXJhdGlvbnMobV90ZXh0dXJlTWFwcGVyLmdldCgp
KTsKKyAgICB7CisgICAgICAgIEhhc2hTZXQ8UmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
PiA+OjppdGVyYXRvciBlbmQgPSBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuZW5k
KCk7CisgICAgICAgIGZvciAoSGFzaFNldDxSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+
ID46Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgICgqaXQpLT5jb21taXRUaWxlT3BlcmF0
aW9ucyhtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwogCi0gICAgbV9iYWNraW5nU3RvcmVzV2l0aFBl
bmRpbmdCdWZmZXJzLmNsZWFyKCk7CisgICAgICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5n
QnVmZmVycy5jbGVhcigpOworICAgIH0KKworICAgIHsKKyAgICAgICAgSGFzaFNldDxSZWZQdHI8
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgZW5kID0gbV9pbWFnZUJh
Y2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuZW5kKCk7CisgICAgICAgIGZvciAoSGFzaFNl
dDxSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgaXQgPSBt
X2ltYWdlQmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCisgICAgICAgICAgICAoKml0KS0+Y29tbWl0VGlsZU9wZXJhdGlvbnMobV90ZXh0dXJl
TWFwcGVyLmdldCgpKTsKKworICAgICAgICBtX2ltYWdlQmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5n
QnVmZmVycy5jbGVhcigpOworICAgIH0KIH0KIAogdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Zmx1
c2hMYXllckNoYW5nZXMoKQpAQCAtNDQwLDYgKzQ3Niw3IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVy
ZXI6OmZsdXNoTGF5ZXJDaGFuZ2VzKCkKIAogICAgIG1fcm9vdExheWVyLT5mbHVzaENvbXBvc2l0
aW5nU3RhdGUoRmxvYXRSZWN0KCkpOwogICAgIGNvbW1pdFRpbGVPcGVyYXRpb25zKCk7CisgICAg
cmVtb3ZlUmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZOZWVkZWQoKTsKIAogICAgIC8vIFRoZSBwZW5k
aW5nIHRpbGVzIHN0YXRlIGlzIG9uIGl0cyB3YXkgZm9yIHRoZSBzY3JlZW4sIHRlbGwgdGhlIHdl
YiBwcm9jZXNzIHRvIHJlbmRlciB0aGUgbmV4dCBvbmUuCiAgICAgZGlzcGF0Y2hPbk1haW5UaHJl
YWQoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbmRlck5leHRGcmFtZSwgdGhpcykpOwpAQCAt
NDk2LDcgKzUzMyw3IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnB1cmdlR0xSZXNvdXJjZXMo
KQogICAgIGlmIChsYXllcikKICAgICAgICAgbGF5ZXItPmNsZWFyQmFja2luZ1N0b3Jlc1JlY3Vy
c2l2ZSgpOwogCi0gICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuY2xlYXIoKTsKKyAgICBt
X2ltYWdlQmFja2luZ3MuY2xlYXIoKTsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKICAgICBt
X3N1cmZhY2VCYWNraW5nU3RvcmVzLmNsZWFyKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVy
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVSZW5kZXJlci5oCmluZGV4IDY3YmZmMTY5ZjQwYzk0ZWQ2MzgxOTk4MTk3YTI0NTZhOWQzYTYy
ZDIuLjljNjBiMWQ1NzU0ODQ1NTVmZjU0NDIzMzllM2I5YTFmNDcyZTdkZmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJl
bmRlcmVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlUmVuZGVyZXIuaApAQCAtNDEsNiArNDEsNyBAQAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKIGNsYXNzIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOworY2xhc3MgQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdTdG9yZTsKIGNsYXNzIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk7CiBjbGFz
cyBXZWJMYXllckluZm87CiBjbGFzcyBXZWJMYXllclVwZGF0ZUluZm87CkBAIC04OSw4ICs5MCwx
MCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCk7CiAgICAg
dm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCwgY29uc3QgVGlsZVVwZGF0ZSYpOwogICAg
IHZvaWQgZmx1c2hMYXllckNoYW5nZXMoKTsKLSAgICB2b2lkIGNyZWF0ZUltYWdlKGludDY0X3Qs
IFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPik7Ci0gICAgdm9pZCBkZXN0cm95SW1hZ2UoaW50
NjRfdCk7CisgICAgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCk7CisgICAgdm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCwgUGFzc1JlZlB0cjxTaGFyZWFibGVTdXJmYWNlPik7CisgICAgdm9pZCBub3RpZnlJbnZp
c2libGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CisgICAgdm9pZCBy
ZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CiAgICAgdm9pZCBz
ZXRMYXllckFuaW1hdGlvbnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckFuaW1hdGlvbnMmKTsKICAgICB2b2lkIHNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCk7CiAKQEAg
LTExMyw3ICsxMTYsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlzcGF0Y2hPbk1haW5UaHJlYWQo
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwogICAgIHZvaWQgYWRqdXN0UG9zaXRpb25Gb3JGaXhl
ZExheWVycygpOwogCi0gICAgdm9pZCBhc3NpZ25JbWFnZVRvTGF5ZXIoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciosIGludDY0X3QgaW1hZ2VJRCk7CisgICAgdm9pZCBhc3NpZ25JbWFnZUJhY2tpbmdU
b0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
KTsKKyAgICB2b2lkIHJlbW92ZVJlbGVhc2VkSW1hZ2VCYWNraW5nc0lmTmVlZGVkKCk7CiAgICAg
dm9pZCBlbnN1cmVSb290TGF5ZXIoKTsKICAgICB2b2lkIGVuc3VyZUxheWVyKFdlYkxheWVySUQp
OwogICAgIHZvaWQgY29tbWl0VGlsZU9wZXJhdGlvbnMoKTsKQEAgLTEyMSw3ICsxMjUsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CiAKICAgICBQYXNzUmVmUHRy
PENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBnZXRCYWNraW5nU3RvcmUoV2ViTGF5ZXJJRCk7Ci0g
ICAgdm9pZCByZW1vdmVCYWNraW5nU3RvcmVJZk5lZWRlZChXZWJMYXllcklELCBpbnQgdGlsZUlE
KTsKKyAgICB2b2lkIHJlbW92ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKFdlYkxheWVySUQpOwogCiAg
ICAgdHlwZWRlZiBIYXNoTWFwPFdlYkxheWVySUQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqPiBM
YXllck1hcDsKICAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV9jb250ZW50c1NpemU7CkBAIC0xMzIs
NyArMTM2LDEyIEBAIHByaXZhdGU6CiAgICAgTXV0ZXggbV9yZW5kZXJRdWV1ZU11dGV4OwogCiAg
ICAgT3duUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsKLSAgICBI
YXNoTWFwPGludDY0X3QsIFJlZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3Jl
PiA+IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzOworCisgICAgdHlwZWRlZiBIYXNoTWFwPENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZ1N0
b3JlPiA+IEltYWdlQmFja2luZ01hcDsKKyAgICBJbWFnZUJhY2tpbmdNYXAgbV9pbWFnZUJhY2tp
bmdzOworICAgIFZlY3RvcjxSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdTdG9yZT4gPiBt
X3JlbGVhc2VkSW1hZ2VCYWNraW5nczsKKyAgICBIYXNoU2V0PFJlZlB0cjxDb29yZGluYXRlZElt
YWdlQmFja2luZ1N0b3JlPiA+IG1faW1hZ2VCYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJz
OworCiAgICAgSGFzaFNldDxSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID4gbV9iYWNr
aW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzOwogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmNwcAppbmRleCA5OWJiYzY2Njc4NDMzYTUwYzRjNzQ3ZmM4M2RkOGFiNTA0NTNiZTBm
Li4wOGU4ZjJmNzlmODllMzE2OTBiMWUyOWRhNjM5MTAzYTIzNjk5NjlhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAK
QEAgLTEsNSArMSw2IEBACiAvKgogIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFu
eSAxMDAsIEluYy4KIAogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtODIsNiArODMsMTMgQEAgdm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUZpbHRlcnMoKQogfQogI2VuZGlmCiAKK3ZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VJbWFnZUJhY2tpbmcoKQoreworICAg
IG1fc2hvdWxkU3luY0ltYWdlQmFja2luZyA9IHRydWU7CisgICAgaWYgKGNsaWVudCgpKQorICAg
ICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKK30KKwogdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCkKIHsKICAg
ICBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0ID0gdHJ1ZTsKQEAgLTEwNSwxMSArMTEzLDEzIEBA
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKEdyYXBo
aWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKICAgICAsIG1fc2hvdWxkU3luY0xheWVyU3RhdGUodHJ1
ZSkKICAgICAsIG1fc2hvdWxkU3luY0NoaWxkcmVuKHRydWUpCiAgICAgLCBtX3Nob3VsZFN5bmNG
aWx0ZXJzKHRydWUpCisgICAgLCBtX3Nob3VsZFN5bmNJbWFnZUJhY2tpbmcodHJ1ZSkKICAgICAs
IG1fc2hvdWxkU3luY0FuaW1hdGlvbnModHJ1ZSkKICAgICAsIG1fZml4ZWRUb1ZpZXdwb3J0KGZh
bHNlKQogICAgICwgbV9jYW52YXNOZWVkc0Rpc3BsYXkoZmFsc2UpCiAgICAgLCBtX0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllckNsaWVudCgwKQogICAgICwgbV9jb250ZW50c1NjYWxlKDEpCisgICAg
LCBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0cigwKQogICAgICwgbV9jYW52YXNQbGF0Zm9ybUxh
eWVyKDApCiAgICAgLCBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lcih0aGlzLCAmQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjphbmltYXRpb25TdGFydGVkVGltZXJGaXJlZCkKIHsKQEAgLTMxOCw5ICsz
MjgsNiBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KGNv
bnN0IEludFJlY3QmIHIpCiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250
ZW50c05lZWRzRGlzcGxheSgpCiB7Ci0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IG1faW1hZ2U7
Ci0gICAgc2V0Q29udGVudHNUb0ltYWdlKDApOwotICAgIHNldENvbnRlbnRzVG9JbWFnZShpbWFn
ZS5nZXQoKSk7CiAgICAgbV9jYW52YXNOZWVkc0Rpc3BsYXkgPSB0cnVlOwogICAgIGlmIChjbGll
bnQoKSkKICAgICAgICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7CkBAIC0z
NDcsMjUgKzM1NCwyNiBAQCBib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0RmlsdGVy
cyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBuZXdGaWx0ZXJzKQogCiB2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKIHsKLSAgICBp
ZiAoaW1hZ2UgPT0gbV9pbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludDY0X3QgbmV3SUQg
PSAwOwotICAgIGlmIChtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCkgewotICAgICAg
ICAvLyBXZSBhZG9wdCBmaXJzdCwgaW4gY2FzZSB0aGlzIGlzIHRoZSBzYW1lIGZyYW1lIC0gdGhh
dCB3YXkgd2UgYXZvaWQgZGVzdHJveWluZyBhbmQgcmVjcmVhdGluZyB0aGUgaW1hZ2UuCi0gICAg
ICAgIG5ld0lEID0gbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPmFkb3B0SW1hZ2VC
YWNraW5nU3RvcmUoaW1hZ2UpOwotICAgICAgICBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNs
aWVudC0+cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0
b3JlSUQpOwotICAgICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgICAgIGlmIChtX2xh
eWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEICYmIG5ld0lEID09IG1fbGF5ZXJJbmZvLmltYWdl
QmFja2luZ1N0b3JlSUQpCisgICAgaWYgKGltYWdlKSB7CisgICAgICAgIC8vIE1ha2UgdGhlIGRl
Y2lzaW9uIGFib3V0IHdoZXRoZXIgdGhlIGltYWdlIGhhcyBjaGFuZ2VkLgorICAgICAgICAvLyBU
aGlzIGNvZGUgbWFrZXMgdGhlIGFzc3VtcHRpb24gdGhhdCBwb2ludGVyIGVxdWFsaXR5IG9uIGEg
TmF0aXZlSW1hZ2VQdHIgaXMgYSB2YWxpZCB3YXkgdG8gdGVsbCBpZiB0aGUgaW1hZ2UgaXMgY2hh
bmdlZC4KKyAgICAgICAgLy8gVGhpcyBhc3N1bXB0aW9uIGlzIHRydWUgaW4gUXQsIEdUSyBhbmQg
RUZMLgorICAgICAgICBOYXRpdmVJbWFnZVB0ciBuZXdOYXRpdmVJbWFnZVB0ciA9IGltYWdlLT5u
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgICAgICBpZiAoIW5ld05hdGl2ZUltYWdl
UHRyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChuZXdOYXRpdmVJbWFnZVB0
ciA9PSBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0cikKICAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBtX2NvbXBvc2l0ZWRJbWFnZSA9IGltYWdlOworICAgICAgICBtX2NvbXBvc2l0ZWRO
YXRpdmVJbWFnZVB0ciA9IG5ld05hdGl2ZUltYWdlUHRyOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IC8vIElmIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50IGlzIG5vdCBzZXQgeWV0IHRo
ZXJlIHNob3VsZCBiZSBubyBiYWNraW5nIHN0b3JlIElELgotICAgICAgICBBU1NFUlQoIW1fbGF5
ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOwotICAgICAgICBkaWRDaGFuZ2VMYXllclN0YXRl
KCk7CisgICAgICAgIG1fY29tcG9zaXRlZEltYWdlID0gMDsKKyAgICAgICAgbV9jb21wb3NpdGVk
TmF0aXZlSW1hZ2VQdHIgPSAwOwogICAgIH0KIAotICAgIG1fbGF5ZXJJbmZvLmltYWdlQmFja2lu
Z1N0b3JlSUQgPSBuZXdJRDsKLSAgICBtX2ltYWdlID0gaW1hZ2U7CiAgICAgR3JhcGhpY3NMYXll
cjo6c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKKyAgICBkaWRDaGFuZ2VJbWFnZUJhY2tpbmco
KTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihHcmFw
aGljc0xheWVyKiBsYXllcikKQEAgLTQ3Myw2ICs0ODEsMzQgQEAgdm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnN5bmNGaWx0ZXJzKCkKIH0KICNlbmRpZgogCit2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6c3luY0ltYWdlQmFja2luZygpCit7CisgICAgaWYgKCFtX3Nob3VsZFN5
bmNJbWFnZUJhY2tpbmcpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Nob3VsZFN5bmNJbWFnZUJh
Y2tpbmcgPSBmYWxzZTsKKworICAgIGlmIChtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0cikgewor
ICAgICAgICBBU1NFUlQoIW1fbWFpbkJhY2tpbmdTdG9yZSk7CisgICAgICAgIEFTU0VSVChtX2Nv
bXBvc2l0ZWRJbWFnZSk7CisKKyAgICAgICAgYm9vbCBpbWFnZUluc3RhbmNlUmVwbGFjZWQgPSBt
X2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nICYmIChtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLT5p
ZCgpICE9IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpnZXRDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEKG1fY29tcG9zaXRlZEltYWdlLmdldCgpKSk7CisgICAgICAgIGlmIChpbWFnZUluc3RhbmNl
UmVwbGFjZWQpCisgICAgICAgICAgICByZWxlYXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQoKTsKKwor
ICAgICAgICBpZiAoIW1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcpIHsKKyAgICAgICAgICAgIG1f
Y29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgPSBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVu
dC0+Y3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQobV9jb21wb3NpdGVkSW1hZ2UuZ2V0KCkpOwor
ICAgICAgICAgICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+YWRkTGF5ZXJDbGllbnQodGhp
cyk7CisgICAgICAgICAgICBtX2xheWVySW5mby5pbWFnZUlEID0gbV9jb29yZGluYXRlZEltYWdl
QmFja2luZy0+aWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fY29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmctPmludmFsaWRhdGUoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVsZWFzZUltYWdlQmFj
a2luZ0lmTmVlZGVkKCk7CisKKyAgICAvLyBUaGlzIG1ldGhvZCBjaGFuZ2VzIG1fbGF5ZXJJbmZv
LmltYWdlSUQuCisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCiB2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6c3luY0xheWVyU3RhdGUoKQogewogICAgIGlmICghbV9zaG91bGRT
eW5jTGF5ZXJTdGF0ZSkKQEAgLTUyNSwxOCArNTYxLDkgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnN5bmNDYW52YXMoKQogICAgIG1fY2FudmFzTmVlZHNEaXNwbGF5ID0gZmFsc2U7
CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjplbnN1cmVJbWFnZUJhY2tpbmdT
dG9yZSgpCi17Ci0gICAgaWYgKCFtX2ltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFt
X2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKQotICAgICAgICBtX2xheWVySW5mby5pbWFn
ZUJhY2tpbmdTdG9yZUlEID0gbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPmFkb3B0
SW1hZ2VCYWNraW5nU3RvcmUobV9pbWFnZS5nZXQoKSk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKIHsK
LSAgICAvLyBUaGUgcmVtb3RlIGltYWdlIG1pZ2h0IGhhdmUgYmVlbiByZWxlYXNlZCBieSBwdXJn
ZUJhY2tpbmdTdG9yZXMuCi0gICAgZW5zdXJlSW1hZ2VCYWNraW5nU3RvcmUoKTsKKyAgICBzeW5j
SW1hZ2VCYWNraW5nKCk7CiAgICAgc3luY0xheWVyU3RhdGUoKTsKICAgICBzeW5jQW5pbWF0aW9u
cygpOwogICAgIGNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KCk7CkBAIC01NDgsNiArNTc1
LDIzIEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpmbHVzaENvbXBvc2l0aW5nU3Rh
dGVGb3JUaGlzTGF5ZXJPbmx5KCkKICAgICBzeW5jQ2FudmFzKCk7CiB9CiAKK2Jvb2wgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjppbWFnZUJhY2tpbmdWaXNpYmxlKCkKK3sKKyAgICBBU1NFUlQo
bV9jb29yZGluYXRlZEltYWdlQmFja2luZyk7CisgICAgcmV0dXJuIHRpbGVkQmFja2luZ1N0b3Jl
VmlzaWJsZVJlY3QoKS5pbnRlcnNlY3RzKHRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCkp
OworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cmVsZWFzZUltYWdlQmFja2lu
Z0lmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcpCisgICAg
ICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVu
dCk7CisgICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+cmVtb3ZlTGF5ZXJDbGllbnQodGhp
cyk7CisgICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZy5jbGVhcigpOworICAgIG1fbGF5ZXJJ
bmZvLmltYWdlSUQgPSBJbnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRDsKK30KKwogdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigp
CiB7CiB9CkBAIC02NTAsNyArNjk0LDcgQEAgQ29sb3IgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Ojp0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcigpIGNvbnN0CiAgICAgcmV0dXJuIGNv
bnRlbnRzT3BhcXVlKCkgPyBDb2xvcjo6d2hpdGUgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7CiB9CiAK
LVBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OmJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBp
bnQmIGF0bGFzLCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KQorUGFzc093blB0cjxHcmFwaGlj
c0NvbnRleHQ+IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YmVnaW5Db250ZW50VXBkYXRlKGNv
bnN0IEludFNpemUmIHNpemUsIGludCYgYXRsYXMsIEludFBvaW50JiBvZmZzZXQpCiB7CiAgICAg
cmV0dXJuIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5iZWdpbkNvbnRlbnRVcGRh
dGUoc2l6ZSwgY29udGVudHNPcGFxdWUoKSA/IDAgOiBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRz
QWxwaGEsIGF0bGFzLCBvZmZzZXQpOwogfQpAQCAtNjk3LDExICs3NDEsNyBAQCB2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKIHsKICAgICBtX21haW5C
YWNraW5nU3RvcmUuY2xlYXIoKTsKICAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLmNsZWFyKCk7
Ci0KLSAgICBpZiAobV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCkgewotICAgICAgICBt
X0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+cmVsZWFzZUltYWdlQmFja2luZ1N0b3Jl
KG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOwotICAgICAgICBtX2xheWVySW5mby5p
bWFnZUJhY2tpbmdTdG9yZUlEID0gMDsKLSAgICB9CisgICAgcmVsZWFzZUltYWdlQmFja2luZ0lm
TmVlZGVkKCk7CiAKICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiAgICAgZGlkQ2hhbmdlQ2hp
bGRyZW4oKTsKQEAgLTc0Nyw3ICs3ODcsNyBAQCBib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6aGFzUGVuZGluZ1Zpc2libGVDaGFuZ2VzKCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAotICAgIGlmICghbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSAmJiAhbV9zaG91bGRTeW5j
Q2hpbGRyZW4gJiYgIW1fc2hvdWxkU3luY0ZpbHRlcnMgJiYgIW1fc2hvdWxkU3luY0FuaW1hdGlv
bnMgJiYgIW1fY2FudmFzTmVlZHNEaXNwbGF5KQorICAgIGlmICghbV9zaG91bGRTeW5jTGF5ZXJT
dGF0ZSAmJiAhbV9zaG91bGRTeW5jQ2hpbGRyZW4gJiYgIW1fc2hvdWxkU3luY0ZpbHRlcnMgJiYg
IW1fc2hvdWxkU3luY0ltYWdlQmFja2luZyAmJiAhbV9zaG91bGRTeW5jQW5pbWF0aW9ucyAmJiAh
bV9jYW52YXNOZWVkc0Rpc3BsYXkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVy
biBzZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCkgfHwgIXRpbGVkQmFja2lu
Z1N0b3JlVmlzaWJsZVJlY3QoKS5pc0VtcHR5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCmluZGV4IDJhOTQzNjkxZjBhNGFi
M2VjNWM1OWNhNWRlM2UxODQxZTQxZDFjOGYuLmRhZjgzMDNkZjRmNWRiMGQ0ZTdhODk3YjkwY2M0
MDdmNjViZWZjMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllci5oCkBAIC0yMSw2ICsyMSw3IEBACiAjaWZuZGVmIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcl9oCiAjZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcl9oCiAK
KyNpbmNsdWRlICJDb29yZGluYXRlZEltYWdlQmFja2luZy5oIgogI2luY2x1ZGUgIkNvb3JkaW5h
dGVkVGlsZS5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
TGF5ZXIuaCIKQEAgLTU2LDggKzU3LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBXZWJDb3Jl
OjpJbnRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBi
b29sIGxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IGludDY0X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9yZShXZWJDb3JlOjpJbWFnZSopID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKGludDY0X3QpID0gMDsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdl
QmFja2luZ0lmTmVlZGVkKFdlYkNvcmU6OkltYWdlKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBz
eW5jTGF5ZXJTdGF0ZShXZWJMYXllcklELCBjb25zdCBXZWJMYXllckluZm8mKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKFdlYkxheWVySUQsIGNvbnN0IFZlY3RvcjxX
ZWJMYXllcklEPiYpID0gMDsKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCkBAIC04MCw3ICs4MCw4
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
IDogcHVibGljIEdyYXBoaWNzTGF5ZXIKICAgICAsIHB1YmxpYyBUaWxlZEJhY2tpbmdTdG9yZUNs
aWVudAotICAgICwgcHVibGljIFdlYktpdDo6Q29vcmRpbmF0ZWRUaWxlQ2xpZW50IHsKKyAgICAs
IHB1YmxpYyBXZWJLaXQ6OkNvb3JkaW5hdGVkVGlsZUNsaWVudAorICAgICwgcHVibGljIFdlYktp
dDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdHcmFwaGljc0xheWVyQ2xpZW50IHsKIHB1YmxpYzoK
ICAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCopOwogICAg
IHZpcnR1YWwgfkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcigpOwpAQCAtMTY5LDYgKzE3MCw3IEBA
IHByaXZhdGU6CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogICAgIHZvaWQgZGlkQ2hhbmdlRmls
dGVycygpOwogI2VuZGlmCisgICAgdm9pZCBkaWRDaGFuZ2VJbWFnZUJhY2tpbmcoKTsKIAogICAg
IHZvaWQgc3luY0xheWVyU3RhdGUoKTsKICAgICB2b2lkIHN5bmNBbmltYXRpb25zKCk7CkBAIC0x
NzYsNiArMTc4LDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAgdm9p
ZCBzeW5jRmlsdGVycygpOwogI2VuZGlmCisgICAgdm9pZCBzeW5jSW1hZ2VCYWNraW5nKCk7CiAg
ICAgdm9pZCBzeW5jQ2FudmFzKCk7CiAgICAgdm9pZCBlbnN1cmVJbWFnZUJhY2tpbmdTdG9yZSgp
OwogICAgIHZvaWQgY29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKTsKQEAgLTE4Myw2ICsx
ODYsMTEgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY3JlYXRlQmFja2luZ1N0b3JlKCk7CiAKKyAg
ICAvLyBDb29yZGluYXRlZEltYWdlQmFja2luZ0dyYXBoaWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0
dWFsIGJvb2wgaW1hZ2VCYWNraW5nVmlzaWJsZSgpIE9WRVJSSURFOworCisgICAgdm9pZCByZWxl
YXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQoKTsKKwogICAgIGJvb2wgc2VsZk9yQW5jZXN0b3JIYXZl
Tm9uQWZmaW5lVHJhbnNmb3JtcygpOwogICAgIGJvb2wgc2hvdWxkVXNlVGlsZWRCYWNraW5nU3Rv
cmUoKTsKICAgICB2b2lkIGFkanVzdENvbnRlbnRzU2NhbGUoKTsKQEAgLTE5NCw3ICsyMDIsNiBA
QCBwcml2YXRlOgogCiAgICAgV2ViS2l0OjpXZWJMYXllcklEIG1faWQ7CiAgICAgV2ViS2l0OjpX
ZWJMYXllckluZm8gbV9sYXllckluZm87Ci0gICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOwogICAg
IEdyYXBoaWNzTGF5ZXIqIG1fbWFza1RhcmdldDsKICAgICBGbG9hdFJlY3QgbV9uZWVkc0Rpc3Bs
YXlSZWN0OwogICAgIEdyYXBoaWNzTGF5ZXJUcmFuc2Zvcm0gbV9sYXllclRyYW5zZm9ybTsKQEAg
LTIwMyw2ICsyMTAsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zaG91bGRTeW5jTGF5ZXJTdGF0
ZTogMTsKICAgICBib29sIG1fc2hvdWxkU3luY0NoaWxkcmVuOiAxOwogICAgIGJvb2wgbV9zaG91
bGRTeW5jRmlsdGVyczogMTsKKyAgICBib29sIG1fc2hvdWxkU3luY0ltYWdlQmFja2luZzogMTsK
ICAgICBib29sIG1fc2hvdWxkU3luY0FuaW1hdGlvbnM6IDE7CiAgICAgYm9vbCBtX2ZpeGVkVG9W
aWV3cG9ydCA6IDE7CiAgICAgYm9vbCBtX2NhbnZhc05lZWRzRGlzcGxheSA6IDE7CkBAIC0yMTQs
NiArMjIyLDEyIEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFRpbGVkQmFja2luZ1N0b3JlPiBtX21h
aW5CYWNraW5nU3RvcmU7CiAgICAgT3duUHRyPFRpbGVkQmFja2luZ1N0b3JlPiBtX3ByZXZpb3Vz
QmFja2luZ1N0b3JlOwogICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKKworICAgIC8vIFdoZW4g
bV9pbWFnZUJhY2tpbmcgZXhpc3RzLCB0aGlzIGxheWVyIGNhbm5vdCBiZSBhIGNvbnRlbnQgbGF5
ZXIsIGJlY2F1c2Ugc2V0RHJhd3NDb250ZW50IGFuZCBzZXRDb250ZW50c1RvSW1hZ2UgYXJlIG11
dHVhbGx5IGV4Y2x1c2l2ZS4KKyAgICBSZWZQdHI8SW1hZ2U+IG1fY29tcG9zaXRlZEltYWdlOwor
ICAgIE5hdGl2ZUltYWdlUHRyIG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyOworICAgIFJlZlB0
cjxXZWJLaXQ6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nOworCiAgICAgUGxhdGZvcm1MYXllciogbV9jYW52YXNQbGF0Zm9ybUxheWVyOwogICAgIFRp
bWVyPENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcj4gbV9hbmltYXRpb25TdGFydGVkVGltZXI7CiAg
ICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMgbV9hbmltYXRpb25zOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmcuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjNhNTRkNjk5NjNlNDFlZDhjZmQyYzZjZGRhZGZhM2NhYWQ0NTEwNzUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQorI2luY2x1ZGUgIkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgiCisKKyNpbmNs
dWRlICJDb29yZGluYXRlZFRpbGUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3Jl
Q2xpZW50LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKworQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6
Z2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRChJbWFnZSogaW1hZ2UpCit7CisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRD4oaW1hZ2UpOworfQor
CitQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBDb29yZGluYXRlZEltYWdlQmFj
a2luZzo6Y3JlYXRlKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nQ2xpZW50KiBjbGllbnQsIFBhc3NS
ZWZQdHI8SW1hZ2U+IGltYWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmcoY2xpZW50LCBpbWFnZSkpOworfQorCitDb29yZGluYXRlZEltYWdlQmFj
a2luZzo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdDbGll
bnQqIGNsaWVudCwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UpCisgICAgOiBtX2NsaWVudChjbGll
bnQpCisgICAgLCBtX2ltYWdlKGltYWdlKQorICAgICwgbV9pZChnZXRDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEKG1faW1hZ2UuZ2V0KCkpKQorICAgICwgbV9kaWRJbnZhbGlkYXRlKGZhbHNlKQor
ICAgICwgbV9pc1Zpc2libGUodHJ1ZSkKK3sKKyAgICAvLyBGSVhNRTogV2Ugd291bGQgbmVlZCB0
byBkZWNvZGUgYSBzbWFsbCBpbWFnZSBkaXJlY3RseSBpbnRvIGEgR3JhcGhpY3NTdXJmYWNlLgor
ICAgIC8vIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAxNDI2CisKKyAgICBtX2NsaWVudC0+Y3JlYXRl
SW1hZ2VCYWNraW5nKGlkKCkpOworfQorCitDb29yZGluYXRlZEltYWdlQmFja2luZzo6fkNvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nKCkKK3sKK30KKwordm9pZCBDb29yZGluYXRlZEltYWdlQmFja2lu
Zzo6YWRkTGF5ZXJDbGllbnQoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdHcmFwaGljc0xheWVyQ2xp
ZW50KiBsYXllckNsaWVudCkKK3sKKyAgICBBU1NFUlQoIW1fbGF5ZXJDbGllbnRzLmNvbnRhaW5z
KGxheWVyQ2xpZW50KSk7CisgICAgbV9sYXllckNsaWVudHMuYXBwZW5kKGxheWVyQ2xpZW50KTsK
K30KKwordm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6cmVtb3ZlTGF5ZXJDbGllbnQoQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdHcmFwaGljc0xheWVyQ2xpZW50KiBsYXllckNsaWVudCkKK3sK
KyAgICBzaXplX3QgcG9zaXRpb24gPSBtX2xheWVyQ2xpZW50cy5maW5kKGxheWVyQ2xpZW50KTsK
KyAgICBBU1NFUlQocG9zaXRpb24gIT0gbm90Rm91bmQpOworICAgIG1fbGF5ZXJDbGllbnRzLnJl
bW92ZShwb3NpdGlvbik7CisKKyAgICBpZiAobV9sYXllckNsaWVudHMuaXNFbXB0eSgpKQorICAg
ICAgICBtX2NsaWVudC0+cmVtb3ZlSW1hZ2VCYWNraW5nKGlkKCkpOworfQorCit2b2lkIENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nOjppbnZhbGlkYXRlKCkKK3sKKyAgICBtX2RpZEludmFsaWRhdGUg
PSB0cnVlOworfQorCit2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjp1cGRhdGUoKQorewor
ICAgIHJlbGVhc2VTdXJmYWNlSWZOZWVkZWQoKTsKKworICAgIGJvb2wgcHJldmlvdXNJc1Zpc2li
bGUgPSBtX2lzVmlzaWJsZTsKKyAgICBub3RpZnlJbnZpc2libGVJbWFnZUJhY2tpbmdJbk5lZWRl
ZCgpOworICAgIGJvb2wgY2hhZ2VkVG9WaXNpYmxlID0gIXByZXZpb3VzSXNWaXNpYmxlICYmIG1f
aXNWaXNpYmxlOworCisgICAgYm9vbCBuZWVkVG9VcGRhdGUgPSBjaGFnZWRUb1Zpc2libGUgfHwg
KG1faXNWaXNpYmxlICYmIG1fZGlkSW52YWxpZGF0ZSk7CisgICAgaWYgKCFuZWVkVG9VcGRhdGUp
IHsKKyAgICAgICAgbV9kaWRJbnZhbGlkYXRlID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBtX3N1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUobV9pbWFnZS0+
c2l6ZSgpLCBtX2ltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpID8gU2hhcmVhYmxlQml0bWFw
OjpTdXBwb3J0c0FscGhhIDogU2hhcmVhYmxlQml0bWFwOjpOb0ZsYWdzLCBTaGFyZWFibGVTdXJm
YWNlOjpTdXBwb3J0c0dyYXBoaWNzU3VyZmFjZSk7CisgICAgbV9oYW5kbGUgPSBhZG9wdFB0cihu
ZXcgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlKCkpOworCisgICAgaWYgKCFtX3N1cmZhY2UtPmNy
ZWF0ZUhhbmRsZSgqbV9oYW5kbGUpKSB7CisgICAgICAgIHJlbGVhc2VTdXJmYWNlSWZOZWVkZWQo
KTsKKyAgICAgICAgbV9kaWRJbnZhbGlkYXRlID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV9pbWFnZS0+c2l6ZSgp
KTsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0ID0gbV9zdXJmYWNlLT5jcmVh
dGVHcmFwaGljc0NvbnRleHQocmVjdCk7CisgICAgY29udGV4dC0+ZHJhd0ltYWdlKG1faW1hZ2Uu
Z2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIHJlY3QsIHJlY3QpOworCisgICAgbV9jbGllbnQt
PnVwZGF0ZUltYWdlQmFja2luZyhpZCgpLCAqbV9oYW5kbGUpOworICAgIG1fZGlkSW52YWxpZGF0
ZSA9IGZhbHNlOworfQorCit2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpyZWxlYXNlU3Vy
ZmFjZUlmTmVlZGVkKCkKK3sKKyAgICAvLyBXZSBtdXN0IGtlZXAgbV9zdXJmYWNlIHVudGlsIFVJ
IFByb2Nlc3MgcmVhZHMgbV9zdXJmYWNlLgorICAgIG1faGFuZGxlLmNsZWFyKCk7CisgICAgbV9z
dXJmYWNlLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6Om5vdGlm
eUludmlzaWJsZUltYWdlQmFja2luZ0luTmVlZGVkKCkKK3sKKyAgICBib29sIHByZXZpb3VzSXNW
aXNpYmxlID0gbV9pc1Zpc2libGU7CisKKyAgICBtX2lzVmlzaWJsZSA9IGZhbHNlOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9sYXllckNsaWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgaWYgKG1fbGF5ZXJDbGllbnRzW2ldLT5pbWFnZUJhY2tpbmdWaXNpYmxlKCkpIHsKKyAgICAg
ICAgICAgIG1faXNWaXNpYmxlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorCisgICAgYm9vbCBjaGFnZWRUb0ludmlzaWJsZSA9IHByZXZpb3VzSXNWaXNpYmxl
ICYmICFtX2lzVmlzaWJsZTsKKyAgICBpZiAoY2hhZ2VkVG9JbnZpc2libGUpCisgICAgICAgIG1f
Y2xpZW50LT5ub3RpZnlJbnZpc2libGVJbWFnZUJhY2tpbmcoaWQoKSk7Cit9CisKK30KKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNWNmYzRiOWY0MDBjODMzOGVmZWZmZWUzNTcwM2RiMjcyYjRlNjMz
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgKQEAgLTAsMCArMSw4
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdfaAorI2RlZmluZSBDb29yZGluYXRlZEltYWdlQmFja2luZ19oCisKKyNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVT
dXJmYWNlLmgiCisjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdDbGllbnQgeworcHVibGljOgorICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRCwgY29uc3QgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlJbnZpc2libGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgPSAwOworfTsKKworY2xhc3MgQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdHcmFwaGljc0xheWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wg
aW1hZ2VCYWNraW5nVmlzaWJsZSgpID0gMDsKK307CisKK2NsYXNzIENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nIDogcHVibGljIFJlZkNvdW50ZWQ8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gY3Jl
YXRlKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nQ2xpZW50KiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJ
bWFnZT4pOworICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKCk7CisKKyAgICBz
dGF0aWMgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBnZXRDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEKFdlYkNvcmU6OkltYWdlKik7CisgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpZCgp
IGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKworICAgIHZvaWQgYWRkTGF5ZXJDbGllbnQoQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdHcmFwaGljc0xheWVyQ2xpZW50Kik7CisgICAgdm9pZCByZW1vdmVM
YXllckNsaWVudChDb29yZGluYXRlZEltYWdlQmFja2luZ0dyYXBoaWNzTGF5ZXJDbGllbnQqKTsK
KworICAgIHZvaWQgaW52YWxpZGF0ZSgpOworICAgIHZvaWQgdXBkYXRlKCk7CisKK3ByaXZhdGU6
CisgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdDbGll
bnQqLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkltYWdlPik7CisKKyAgICB2b2lkIHJlbGVhc2VTdXJm
YWNlSWZOZWVkZWQoKTsKKyAgICB2b2lkIG5vdGlmeUludmlzaWJsZUltYWdlQmFja2luZ0luTmVl
ZGVkKCk7CisKKyAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0NsaWVudCogbV9jbGllbnQ7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlPiBtX2ltYWdlOworICAgIENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQgbV9pZDsKKyAgICBWZWN0b3I8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdHcmFwaGlj
c0xheWVyQ2xpZW50Kj4gbV9sYXllckNsaWVudHM7CisKKyAgICBSZWZQdHI8U2hhcmVhYmxlU3Vy
ZmFjZT4gbV9zdXJmYWNlOworICAgIE93blB0cjxTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGU+IG1f
aGFuZGxlOworCisgICAgYm9vbCBtX2RpZEludmFsaWRhdGU7CisgICAgYm9vbCBtX2lzVmlzaWJs
ZTsKKworfTsKKworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBDb29yZGluYXRlZEltYWdlQmFja2lu
Z19ICmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRv
ci5jcHAKaW5kZXggNDMzYmNlOWFkNTA2Mzc2ZmVmNzU4OTI5Zjc4YTVlOWYzMDU3MDhkMC4uMDkz
OGViN2FlMjk4YjY2MWVhNmNjMTg0ZGE4OWRmYjBjZDQxZjdhMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcApAQCAtMjY5LDcgKzI2
OSw3IEBAIGJvb2wgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdl
cygpCiAKICAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVy
T25seSgpOwogCi0gICAgcHVyZ2VSZWxlYXNlZEltYWdlcygpOworICAgIHVwZGF0ZUltYWdlQmFj
a2luZ3MoKTsKIAogICAgIGlmIChtX3Nob3VsZFN5bmNSb290TGF5ZXIpIHsKICAgICAgICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRSb290
Q29tcG9zaXRpbmdMYXllcih0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5n
ZXQoKSktPmlkKCkpKTsKQEAgLTQ0OSwxNSArNDQ5LDYgQEAgdm9pZCBMYXllclRyZWVDb29yZGlu
YXRvcjo6ZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQogICAgIH0KIH0KIAotdm9pZCBM
YXllclRyZWVDb29yZGluYXRvcjo6cHVyZ2VSZWxlYXNlZEltYWdlcygpCi17Ci0gICAgaWYgKCFt
X2lzUHVyZ2luZykgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcmVsZWFzZWRE
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkRlc3Ryb3lEaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZShtX3JlbGVhc2VkRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzW2ld
KSk7Ci0gICAgfQotICAgIG1fcmVsZWFzZWREaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuY2xlYXIo
KTsKLX0KLQogdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQo
VGltZXI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+KikKIHsKICAgICBwZXJmb3JtU2NoZWR1bGVkTGF5
ZXJGbHVzaCgpOwpAQCAtNDg1LDc5ICs0NzYsNTAgQEAgdm9pZCBMYXllclRyZWVDb29yZGluYXRv
cjo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKQogICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IG51
bGxwdHI7CiB9CiAKLWludDY0X3QgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmFkb3B0SW1hZ2VCYWNr
aW5nU3RvcmUoSW1hZ2UqIGltYWdlKQorUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2lu
Zz4gTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKEltYWdl
KiBpbWFnZSkKIHsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxh
eWVySUQ7Ci0KLSAgICBpbnQ2NF90IGtleSA9IDA7Ci0KLSNpZiBQTEFURk9STShRVCkKLSAgICBR
UGl4bWFwKiBuYXRpdmVJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
OwotCi0gICAgaWYgKCFuYXRpdmVJbWFnZSkKLSAgICAgICAgcmV0dXJuIEludmFsaWRXZWJMYXll
cklEOwotCi0gICAga2V5ID0gbmF0aXZlSW1hZ2UtPmNhY2hlS2V5KCk7Ci0jZWxpZiBVU0UoQ0FJ
Uk8pCi0gICAgTmF0aXZlSW1hZ2VDYWlybyogbmF0aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIW5hdGl2ZUltYWdlKQotICAgICAgICByZXR1
cm4gSW52YWxpZFdlYkxheWVySUQ7Ci0gICAgLy8gVGhpcyBjYW4gYmUgc2FmZWx5IGRvbmUgc2lu
Y2Ugd2Ugb3duIHRoZSByZWZlcmVuY2UuCi0gICAgLy8gQSBjb3JyZXNwb25kaW5nIGNhaXJvX3N1
cmZhY2VfZGVzdHJveSgpIGlzIGVuc3VyZWQgaW4gcmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKCku
Ci0gICAgY2Fpcm9fc3VyZmFjZV90KiBjYWlyb1N1cmZhY2UgPSBjYWlyb19zdXJmYWNlX3JlZmVy
ZW5jZShuYXRpdmVJbWFnZS0+c3VyZmFjZSgpKTsKLSAgICBrZXkgPSByZWludGVycHJldF9jYXN0
PGludDY0X3Q+KGNhaXJvU3VyZmFjZSk7Ci0jZW5kaWYKLQotICAgIEhhc2hNYXA8aW50NjRfdCwg
aW50Pjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZp
bmQoa2V5KTsKLQotICAgIGlmIChpdCAhPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291
bnRzLmVuZCgpKSB7Ci0gICAgICAgICsrKGl0LT52YWx1ZSk7Ci0gICAgICAgIHJldHVybiBrZXk7
Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgaWYgd2Ugd2VyZSBnb2luZyB0byByZWxlYXNlIHRoaXMg
aW1hZ2UgZHVyaW5nIHRoZSBuZXh0IGZsdXNoLgotICAgIHNpemVfdCByZWxlYXNlZEluZGV4ID0g
bV9yZWxlYXNlZERpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5maW5kKGtleSk7Ci0gICAgaWYgKHJl
bGVhc2VkSW5kZXggPT0gbm90Rm91bmQpIHsKLSAgICAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1h
cD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoaW1hZ2UtPnNpemUo
KSwgKGltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpID8gU2hhcmVhYmxlQml0bWFwOjpTdXBw
b3J0c0FscGhhIDogMCkpOwotICAgICAgICB7Ci0gICAgICAgICAgICBPd25QdHI8V2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNz
Q29udGV4dCgpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2Us
IENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50Ojp6ZXJvKCkpOwotICAgICAgICB9Ci0gICAg
ICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKLSAgICAgICAgYml0bWFwLT5jcmVh
dGVIYW5kbGUoaGFuZGxlKTsKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXll
clRyZWVDb29yZGluYXRvclByb3h5OjpDcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShrZXks
IGhhbmRsZSkpOworICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCA9IENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nOjpnZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKGltYWdlKTsK
KyAgICBJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQo
aW1hZ2VJRCk7CisgICAgUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBpbWFnZUJhY2tp
bmc7CisgICAgaWYgKGl0ID09IG1faW1hZ2VCYWNraW5ncy5lbmQoKSkgeworICAgICAgICBpbWFn
ZUJhY2tpbmcgPSBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y3JlYXRlKHRoaXMsIGltYWdlKTsK
KyAgICAgICAgbV9pbWFnZUJhY2tpbmdzLmFkZChpbWFnZUlELCBpbWFnZUJhY2tpbmcpOwogICAg
IH0gZWxzZQotICAgICAgICBtX3JlbGVhc2VkRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnJlbW92
ZShyZWxlYXNlZEluZGV4KTsKKyAgICAgICAgaW1hZ2VCYWNraW5nID0gaXQtPnZhbHVlOwogCi0g
ICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5hZGQoa2V5LCAxKTsKLSAgICBy
ZXR1cm4ga2V5OworICAgIHJldHVybiBpbWFnZUJhY2tpbmc7CiB9CiAKLXZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90IGtleSkKK3ZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEIGltYWdlSUQpCiB7Ci0gICAgaWYgKCFrZXkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ID09IG1fZGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0ZUltYWdl
QmFja2luZyhpbWFnZUlEKSk7Cit9CiAKLSAgICBpdC0+dmFsdWUtLTsKK3ZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
IGltYWdlSUQsIGNvbnN0IFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlKQoreworICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6VXBk
YXRlSW1hZ2VCYWNraW5nKGltYWdlSUQsIGhhbmRsZSkpOworfQogCi0gICAgaWYgKGl0LT52YWx1
ZSkKLSAgICAgICAgcmV0dXJuOwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6bm90aWZ5SW52
aXNpYmxlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sK
KyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6
Ok5vdGlmeUludmlzaWJsZUltYWdlQmFja2luZyhpbWFnZUlEKSk7Cit9CiAKLSNpZiBVU0UoQ0FJ
Uk8pCi0gICAgLy8gQ29tcGxlbWVudCB0aGUgcmVmZXJlbmNpbmcgaW4gYWRvcHRJbWFnZUJhY2tp
bmdTdG9yZSgpLgotICAgIGNhaXJvX3N1cmZhY2VfdCogY2Fpcm9TdXJmYWNlID0gcmVpbnRlcnBy
ZXRfY2FzdDxjYWlyb19zdXJmYWNlX3QqPihrZXkpOwotICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJv
eShjYWlyb1N1cmZhY2UpOwotI2VuZGlmCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW1v
dmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQoreworICAg
IEFTU0VSVChtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkpOworICAgIG1faW1hZ2VC
YWNraW5ncy5yZW1vdmUoaW1hZ2VJRCk7CiAKLSAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdl
UmVmQ291bnRzLnJlbW92ZShpdCk7Ci0gICAgbV9yZWxlYXNlZERpcmVjdGx5Q29tcG9zaXRlZElt
YWdlcy5hcHBlbmQoa2V5KTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBpZiAoIW1f
aXNQdXJnaW5nKQorICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6OlJlbW92ZUltYWdlQmFja2luZyhpbWFnZUlEKSk7CiB9CiAKK3ZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnVwZGF0ZUltYWdlQmFja2luZ3MoKQoreworICAgIEltYWdl
QmFja2luZ01hcDo6aXRlcmF0b3IgZW5kID0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpOworICAgIGZv
ciAoSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdGVyID0gbV9pbWFnZUJhY2tpbmdzLmJlZ2lu
KCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgIGl0ZXItPnZhbHVlLT51cGRhdGUoKTsK
K30KIAogdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChj
b25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIC8qIHRpbWUgKi8pCiB7CkBAIC03
MDQsMTAgKzY2Niw3IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnB1cmdlQmFja2luZ1N0
b3JlcygpCiAgICAgZm9yIChIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cio+OjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCiAgICAgICAgICgqaXQpLT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsKIAotICAgIHB1cmdl
UmVsZWFzZWRJbWFnZXMoKTsKLQotICAgIEFTU0VSVCghbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZVJlZkNvdW50cy5zaXplKCkpOwotICAgIEFTU0VSVCghbV9yZWxlYXNlZERpcmVjdGx5Q29tcG9z
aXRlZEltYWdlcy5zaXplKCkpOworICAgIG1faW1hZ2VCYWNraW5ncy5jbGVhcigpOwogICAgIG1f
dXBkYXRlQXRsYXNlcy5jbGVhcigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRv
ci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaAppbmRleCBmNmIzOGMxYzRlMDBhZTU4ZGU1YWI0MTRh
ZTdlNGUzZDIwMGJlZmNmLi5lNDE2NTFhNTQxN2ZkNjc2NzgyYzc4ZTk3MGMyNTVmYzVhYjNlMmIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9y
LmgKQEAgLTIzLDYgKzIzLDcgQEAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAKICNp
bmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJDb29yZGluYXRl
ZEltYWdlQmFja2luZy5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKICNpbmNsdWRl
ICJMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKQEAgLTQwLDYgKzQxLDcgQEAg
Y2xhc3MgV2ViUGFnZTsKIGNsYXNzIExheWVyVHJlZUNvb3JkaW5hdG9yIDogcHVibGljIExheWVy
VHJlZUhvc3QsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQKICAgICAsIHB1YmxpYyBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKICAgICAsIHB1YmxpYyBVcGRhdGVBdGxhc0NsaWVu
dAorICAgICwgcHVibGljIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nQ2xpZW50CiAgICAgLCBwdWJs
aWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkgewogcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPExheWVyVHJlZUNvb3JkaW5hdG9yPiBjcmVhdGUoV2ViUGFnZSopOwpAQCAtNjcs
OCArNjksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCkgeyBt
X2lzU3VzcGVuZGVkID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmco
KSB7IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsgc2NoZWR1bGVMYXllckZsdXNoKCk7IH0KICAgICB2
aXJ0dWFsIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKSB7IH0KLSAgICB2aXJ0dWFs
IGludDY0X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9yZShXZWJDb3JlOjpJbWFnZSopOwotICAgIHZp
cnR1YWwgdm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCk7CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJ
Zk5lZWRlZChXZWJDb3JlOjpJbWFnZSopIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8m
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgYmFja2luZ1NpemUpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQs
IGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpOwpAQCAtMTEzLDYgKzExNCwxNCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKICAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5n
UGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKIAorICAgIC8vIENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUltYWdlQmFj
a2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIGNvbnN0IFNo
YXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZnlJbnZpc2libGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEKSBPVkVSUklERTsKKworICAgIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5ncygpOwor
CiAgICAgLy8gR3JhcGhpY3NMYXllckZhY3RvcnkKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2Vi
Q29yZTo6R3JhcGhpY3NMYXllcj4gY3JlYXRlR3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2xpZW50KikgT1ZFUlJJREU7CiAKQEAgLTEyNiw3ICsxMzUsNiBAQCBwcml2YXRlOgog
ICAgIHZvaWQgc3luY0Rpc3BsYXlTdGF0ZSgpOwogICAgIHZvaWQgbG9ja0FuaW1hdGlvbnMoKTsK
ICAgICB2b2lkIHVubG9ja0FuaW1hdGlvbnMoKTsKLSAgICB2b2lkIHB1cmdlUmVsZWFzZWRJbWFn
ZXMoKTsKIAogICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8TGF5
ZXJUcmVlQ29vcmRpbmF0b3I+Kik7CiAKQEAgLTE0Nyw4ICsxNTUsOCBAQCBwcml2YXRlOgogCiAg
ICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiBtX3JlZ2lzdGVy
ZWRMYXllcnM7CiAgICAgVmVjdG9yPFdlYkxheWVySUQ+IG1fZGV0YWNoZWRMYXllcnM7Ci0gICAg
SGFzaE1hcDxpbnQ2NF90LCBpbnQ+IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHM7
Ci0gICAgVmVjdG9yPGludDY0X3Q+IG1fcmVsZWFzZWREaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXM7
CisgICAgdHlwZWRlZiBIYXNoTWFwPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxD
b29yZGluYXRlZEltYWdlQmFja2luZz4gPiBJbWFnZUJhY2tpbmdNYXA7CisgICAgSW1hZ2VCYWNr
aW5nTWFwIG1faW1hZ2VCYWNraW5nczsKICAgICBWZWN0b3I8T3duUHRyPFVwZGF0ZUF0bGFzPiA+
IG1fdXBkYXRlQXRsYXNlczsKIAogICAgIGJvb2wgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVy
Rmx1c2g7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173542</attachid>
            <date>2012-11-11 19:58:59 -0800</date>
            <delta_ts>2012-11-15 02:26:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101023-20121112125640.patch</filename>
            <type>text/plain</type>
            <size>58912</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0MTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNGMzNmJiMDkzMDY1Njk3
NzdiNjhjZTFkODc0OTk2NWJmMTZiZGEzMy4uZDdhMmFjNTQ4N2I3ZWQ3ZDAxY2M5NDUwZGVlY2Mz
ZmIwNjUxMzNhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMyBAQAorMjAxMi0xMS0xMSAgSHVh
bmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGlu
YXRlZCBHcmFwaGljczogQWRkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nIHRvIG1hbmFnZSBhbiBp
bWFnZSByZXNvdXJjZSBzbWFydGx5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTAxMDIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQ3VycmVudGx5LCBMYXllclRyZWVDb29yZGluYXRvciBtYW5hZ2VzIGNv
bXBvc2l0ZWQgaW1hZ2VzIHVzaW5nCisgICAgICAgIFNoYXJlYWJsZUJpdG1hcC4gVGhpcyBwYXRj
aCBpbnRyb2R1Y2VzIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nIHdoaWNoCisgICAgICAgIHBsYXlz
IGEgcm9sZSBpbiBtYW5hZ2luZyBjb21wb3NpdGVkIGltYWdlcy4KKworICAgICAgICBXZSBjYW4g
Z2V0IGZvbGxvd2luZyBiZW5lZml0cy4KKyAgICAgICAgMS4gV2UgY2FuIHJlbW92ZSBhIHRleHR1
cmUgaWYgYW4gaW1hZ2UgaXMgb2ZmIHRoZSB2aWV3cG9ydC4KKyAgICAgICAgMi4gV2UgY2FuIHVw
ZGF0ZSBhIHRleHR1cmUgaWYgYW4gaW1hZ2UgaXMgdXBkYXRlZC4gKGkuZS4gZ2lmIGFuaW1hdGlv
bnMpCisKKyAgICAgICAgV2UgY3JlYXRlIG9ubHkgb25lIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
IHBlciBpbWFnZS4gRm9yIGV4YW1wbGUsIGluIHRoZSBsZWF2ZXMKKyAgICAgICAgZGVtbywgd2Ug
Y3JlYXRlIG9ubHkgMyBsZWF2ZSBDb29yZGluYXRlZEltYWdlQmFja2luZ3MuCisKKyAgICAgICAg
SW4gYWRkaXRpb24sIHRoaXMgcGF0Y2ggZml4ZXMgdGhlIGJ1ZzogcmVuZGVyaW5nIG9ubHkgdGhl
IGZpcnN0IGZyYW1lIG9mCisgICAgICAgIGEgZ2lmIGFuaW1hdGlvbiBpbWFnZS4KKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFNoYXJlZC9XZWJMYXllclRyZWVJbmZvLmg6
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVySW5mbzo6V2ViTGF5ZXJJbmZvKToKKyAgICAgICAg
KFdlYkxheWVySW5mbyk6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICAoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdTdG9yZVRpbGUp
OgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEltYWdlQmFja2luZ1N0b3JlVGlsZTo6Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdTdG9yZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZEltYWdlQmFja2luZ1N0b3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ1N0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdTdG9yZTo6dXBkYXRlQ29udGVu
dHMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEltYWdlQmFja2luZ1N0b3JlOjpjcmVh
dGVUaWxlc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdTdG9yZTo6cmVtb3ZlVGlsZXNJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nU3RvcmU6OnJlbW92ZUFsbFRpbGVzKToKKyAgICAgICAgKFdlYktpdDo6
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdTdG9yZTo6Y29tbWl0VGlsZU9wZXJhdGlvbnMpOgorICAg
ICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEltYWdlQmFja2luZ1N0b3JlOjp0ZXh0dXJlKToKKyAg
ICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1
cmVNYXBwZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdTdG9yZSk6CisgICAgICAgICAgICBJdCBpcyBhIGNvdW50ZXJwYXJ0
IG9mIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nIGluIFVJIFByb2Nlc3MuIEl0IGlzCisgICAgICAg
ICAgICBpbXBsZW1lbnRlZCBzaW1wbHkgdXNpbmcgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuCisg
ICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nU3RvcmU6OmNyZWF0ZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6
OmNyZWF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OnVwZGF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojpub3RpZnlJbnZpc2libGVJbWFn
ZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojpy
ZW1vdmVJbWFnZUJhY2tpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaDoKKyAgICAgICAgKExheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVCYWNraW5nU3RvcmVJZk5lZWRlZCk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxlKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVSZW5kZXJlcjo6bm90aWZ5SW52aXNpYmxlSW1hZ2VCYWNraW5nKToKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpyZW1v
dmVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6YXNz
aWduSW1hZ2VCYWNraW5nVG9MYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRl
cmVyOjpyZW1vdmVSZWxlYXNlZEltYWdlQmFja2luZ3NJZk5lZWRlZCk6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpjb21taXRUaWxlT3BlcmF0aW9ucyk6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdlcyk6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUdMUmVzb3VyY2VzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oOgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKExheWVyVHJlZVJlbmRlcmVyKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRD
aGFuZ2VJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzTmVl
ZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0Q29udGVudHNUb0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6c3luY0ltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjppbWFnZUJhY2tpbmdW
aXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cmVs
ZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6YmVnaW5Db250ZW50VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6aGFzUGVuZGluZ1Zpc2libGVDaGFuZ2Vz
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ckNsaWVudCk6CisgICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nLmNwcDogQWRkZWQuCisgICAgICAgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIHVz
ZXMgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgdG8gaGFuZGxlIGEKKyAgICAgICAgICBjb21wb3Np
dGVkIGltYWdlLiBDb29yZGluYXRlZEltYWdlQmFja2luZyBwbGF5cyBhIHJvbGUgaW4gaW1hZ2UK
KyAgICAgICAgICByZXNvdXJjZSBtYW5hZ2VtZW50OiBzZW5kaW5nIHRoZSBpbWFnZSB0byBVSSBQ
cm9jZXNzLCByZXBhaW50aW5nIHdoaWxlCisgICAgICAgICAgYSBnaWYgYW5pbWF0aW9uIHByb2dy
ZXNzZXMgYW5kIHJlbW92aW5nIGFuIGltYWdlIHByb3Blcmx5LgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmdldENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEltYWdlQmFja2lu
Zzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmc6On5Db29yZGluYXRlZEltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJLaXQ6OkNv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nOjphZGRMYXllckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6
OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpyZW1vdmVMYXllckNsaWVudCk6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpyZWxlYXNlU3VyZmFjZUlmTmVlZGVkKToKKyAgICAg
ICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6Om5vdGlmeUludmlzaWJsZUltYWdl
QmFja2luZ0luTmVlZGVkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChDb29yZGluYXRlZEltYWdlQmFja2luZ0NsaWVudCk6CisgICAgICAg
IChDb29yZGluYXRlZEltYWdlQmFja2luZ0dyYXBoaWNzTGF5ZXJDbGllbnQpOgorICAgICAgICAo
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZElt
YWdlQmFja2luZzo6aWQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcyk6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZCk6
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVJbWFnZUJhY2tp
bmcpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6dXBkYXRlSW1hZ2VC
YWNraW5nKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6Om5vdGlmeUlu
dmlzaWJsZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5h
dG9yOjpyZW1vdmVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29y
ZGluYXRvcjo6dXBkYXRlSW1hZ2VCYWNraW5ncyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yOjpwdXJnZUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmg6CisgICAg
ICAgIChMYXllclRyZWVDb29yZGluYXRvcik6CisKIDIwMTItMTEtMTEgIFNoZXJpZmYgQm90ICA8
d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxp
bmcgb3V0IHIxMzQxNDQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4
dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CmluZGV4IDZlNDZmNDhhOTllMzEyYjM3
MDYzMWNhYjIzMzI3YjkyYjU1NWNiMWUuLjA1ZDdjNmQ3OTZjMTZjYWEzOGM2ZWQwZmM3YTRmZGM0
OTAxODBiZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBi
L1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC00OTQsNiArNDk0LDcgQEAgU0VUKFdl
YktpdDJfU09VUkNFUwogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5j
cHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVW5kb1N0ZXAuY3BwCiAKKyAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5j
cHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJMYXllclRyZWVJbmZvLmgKaW5kZXggNThlMDdiYzAyN2VmZDVjMWE5NTliM2IwYzYxOGU0
YWUwNWNlNzhlOC4uZTZhMmFlZGE2M2E0YzVjYzQ1MjY3NGUyMjc4OWVkZDY5MDIwNGJiNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCkBAIC0yNywyNSArMjcsMjcg
QEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKICNpbmNs
dWRlICJHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCiB0eXBlZGVmIHVpbnQzMl90IFdlYkxheWVySUQ7CiBlbnVtIHsg
SW52YWxpZFdlYkxheWVySUQgPSAwIH07CiAKK3R5cGVkZWYgdWludHB0cl90IENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQ7CitlbnVtIHsgSW52YWxpZENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQg
PSAwIH07CisKIC8vIE5PVEU6IFdlYkxheWVySW5mbyBzaG91bGQgb25seSB1c2UgUE9EIHR5cGVz
LCBhcyB0byBtYWtlIHNlcmlhbGl6YXRpb24gZmFzdGVyLgogc3RydWN0IFdlYkxheWVySW5mbyB7
CiAgICAgV2ViTGF5ZXJJbmZvKCkKICAgICAgICAgOiByZXBsaWNhKEludmFsaWRXZWJMYXllcklE
KQogICAgICAgICAsIG1hc2soSW52YWxpZFdlYkxheWVySUQpCi0gICAgICAgICwgaW1hZ2VCYWNr
aW5nU3RvcmVJRCgwKQorICAgICAgICAsIGltYWdlSUQoSW52YWxpZENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQpCiAgICAgICAgICwgb3BhY2l0eSgwKQogICAgICAgICAsIGZsYWdzKDApIHsgfQog
CiAgICAgV2ViTGF5ZXJJRCByZXBsaWNhOwogICAgIFdlYkxheWVySUQgbWFzazsKLSAgICBpbnQ2
NF90IGltYWdlQmFja2luZ1N0b3JlSUQ7CisgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBp
bWFnZUlEOwogCiAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBwb3M7CiAgICAgV2ViQ29yZTo6Rmxv
YXRQb2ludDNEIGFuY2hvclBvaW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0
LnByaSBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKaW5kZXggZGFjOWI5YTI0ODliOGE1MjZi
ZWVjM2MzZGI0ZmE5ZjYzNjc3ODFkMi4uN2NkMDE2ZWQ5ODY5NGYxMjk3MWU2Nzc0OGJhYThiYzA2
YjI0ODNjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9UYXJnZXQucHJpCkBAIC0zNjksNiArMzY5LDcgQEAgSEVBREVSUyArPSBcCiAg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5oIFwKICAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmggXAorICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgg
XAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
VGlsZS5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVDb29yZGluYXRvci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGFwSGlnaGxpZ2h0
Q29udHJvbGxlci5oIFwKQEAgLTc1MCw2ICs3NTEsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQ
YWdlL0ZpbmRDb250cm9sbGVyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBcCisgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3Bw
IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZFRpbGUuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVDb29yZGluYXRvci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UYXBIaWdo
bGlnaHRDb250cm9sbGVyLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tp
bmdTdG9yZS5jcHAKaW5kZXggMzg1YWY0ZGRmZjI1MDUwYWUwOTU4NGEzODJhZTFmY2VjN2FiMWUw
ZS4uOTU0MTVlYTFiODVlZmM5YTJlNTNkNTQ3ZDFmNTgzNzk4ZjAwOGRkNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRC
YWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8q
CiAgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLgogCiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0xODcsNSArMTg4LDkwIEBAIHZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6
OmNvbW1pdFRpbGVPcGVyYXRpb25zKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCiAgICAg
ICAgIGl0LT52YWx1ZS5zd2FwQnVmZmVycyh0ZXh0dXJlTWFwcGVyKTsKIH0KIAorLy8gPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdTdG9yZSBDbGFzcworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQorCitzdHJ1Y3QgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdT
dG9yZVRpbGUgeworICAgIGV4cGxpY2l0IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nU3RvcmVUaWxl
KGNvbnN0IEludFJlY3QmKTsKKworICAgIGludCBtX2lkOworICAgIEludFJlY3QgbV9yZWN0Owor
fTsKKworQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdTdG9yZVRpbGU6OkNvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nU3RvcmVUaWxlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCisgICAgOiBtX3Jl
Y3QocmVjdCkKK3sKKyAgICBzdGF0aWMgaW50IG5leHRJRCA9IDA7CisgICAgbV9pZCA9ICsrbmV4
dElEOworfQorCitDb29yZGluYXRlZEltYWdlQmFja2luZ1N0b3JlOjpDb29yZGluYXRlZEltYWdl
QmFja2luZ1N0b3JlKCkKKyAgICA6IG1fYmFja2luZ1N0b3JlKENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlOjpjcmVhdGUoKSkKK3sKK30KKwordm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZ1N0b3Jl
Ojp1cGRhdGVDb250ZW50cyhQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IHBycFN1cmZhY2Up
Cit7CisgICAgcmVtb3ZlVGlsZXNJZk5lZWRlZCgpOworCisgICAgUmVmUHRyPFNoYXJlYWJsZVN1
cmZhY2U+IHN1cmZhY2UgPSBwcnBTdXJmYWNlOworICAgIEludFNpemUgc2l6ZShzdXJmYWNlLT5z
aXplKCkpOworCisgICAgY3JlYXRlVGlsZXNJZk5lZWRlZChzaXplKTsKKworICAgIG1fYmFja2lu
Z1N0b3JlLT5zZXRTaXplKHNpemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90aWxl
cy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9iYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGUobV90aWxl
c1tpXS5tX2lkLCBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fdGlsZXNbaV0ubV9yZWN0LnNp
emUoKSksIG1fdGlsZXNbaV0ubV9yZWN0LCBzdXJmYWNlLCBtX3RpbGVzW2ldLm1fcmVjdC5sb2Nh
dGlvbigpKTsKK30KKwordm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZ1N0b3JlOjpjcmVhdGVU
aWxlc0lmTmVlZGVkKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgc3RhdGljIGNvbnN0IElu
dFNpemUgdGlsZVNpemUoNTEyLCA1MTIpOworICAgIEludFJlY3QgcmVjdChJbnRQb2ludDo6emVy
bygpLCBzaXplKTsKKworICAgIGZvciAoZmxvYXQgeSA9IDA7IHkgPCBzaXplLmhlaWdodCgpOyB5
ICs9IHRpbGVTaXplLmhlaWdodCgpKSB7CisgICAgICAgIGZvciAoZmxvYXQgeCA9IDA7IHggPCBz
aXplLndpZHRoKCk7IHggKz0gdGlsZVNpemUud2lkdGgoKSkgeworICAgICAgICAgICAgSW50UmVj
dCB0aWxlUmVjdCh4LCB5LCB0aWxlU2l6ZS53aWR0aCgpLCB0aWxlU2l6ZS5oZWlnaHQoKSk7Cisg
ICAgICAgICAgICB0aWxlUmVjdC5pbnRlcnNlY3QocmVjdCk7CisgICAgICAgICAgICBtX3RpbGVz
LmFwcGVuZChDb29yZGluYXRlZEltYWdlQmFja2luZ1N0b3JlVGlsZSh0aWxlUmVjdCkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RpbGVzLnNpemUo
KTsgKytpKQorICAgICAgICBtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlVGlsZShtX3RpbGVzW2ldLm1f
aWQsIDEgLyogc2NhbGUgKi8pOworfQorCit2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nU3Rv
cmU6OnJlbW92ZVRpbGVzSWZOZWVkZWQoKQoreworICAgIGlmIChtX3RpbGVzLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RpbGVzLnNp
emUoKTsgKytpKQorICAgICAgICBtX2JhY2tpbmdTdG9yZS0+cmVtb3ZlVGlsZShtX3RpbGVzW2ld
Lm1faWQpOworCisgICAgbV90aWxlcy5jbGVhcigpOworfQorCit2b2lkIENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nU3RvcmU6OnJlbW92ZUFsbFRpbGVzKCkKK3sKKyAgICByZW1vdmVUaWxlc0lmTmVl
ZGVkKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdTdG9yZTo6Y29tbWl0VGls
ZU9wZXJhdGlvbnMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKK3sKKyAgICBtX2JhY2tp
bmdTdG9yZS0+Y29tbWl0VGlsZU9wZXJhdGlvbnModGV4dHVyZU1hcHBlcik7Cit9CisKK1Bhc3NS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdTdG9yZTo6dGV4dHVy
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlLT50ZXh0dXJlKCk7Cit9CisK
K3ZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIo
VGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBC
aXRtYXBUZXh0dXJlKiBtYXNrKQoreworICAgIG1fYmFja2luZ1N0b3JlLT5wYWludFRvVGV4dHVy
ZU1hcHBlcih0ZXh0dXJlTWFwcGVyLCB0YXJnZXRSZWN0LCB0cmFuc2Zvcm0sIG9wYWNpdHksIG1h
c2spOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNr
aW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmgKaW5kZXggMGIyNDgyNjc2MTZkYmRhZGYzOWMxMjQz
M2Q0YjMwMmE0MTMzNDc3ZS4uMTg2NGVmNzk5ZjRhMGJlM2QzMDczOGExZWEzOGYzYTgxZjU2MDZl
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5oCkBAIC0xLDUg
KzEsNiBAQAogLyoKICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJ
bmMuCiAKICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTc5LDYgKzgwLDI3IEBAIHByaXZhdGU6CiAgICAgZmxvYXQg
bV9zY2FsZTsKIH07CiAKK3N0cnVjdCBDb29yZGluYXRlZEltYWdlQmFja2luZ1N0b3JlVGlsZTsK
KworY2xhc3MgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdTdG9yZSA6IHB1YmxpYyBXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDb29yZGluYXRlZEltYWdlQmFja2luZ1N0b3JlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJl
ZihuZXcgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdTdG9yZSk7IH0KKyAgICB2b2lkIHVwZGF0ZUNv
bnRlbnRzKFBhc3NSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4pOworICAgIHZvaWQgcmVtb3ZlQWxs
VGlsZXMoKTsKKyAgICB2b2lkIGNvbW1pdFRpbGVPcGVyYXRpb25zKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXIqKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6Qml0bWFwVGV4dHVyZT4g
dGV4dHVyZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3Qg
V2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCwgV2ViQ29yZTo6Qml0bWFwVGV4
dHVyZSopOworCitwcml2YXRlOgorICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nU3RvcmUoKTsK
KworICAgIHZvaWQgY3JlYXRlVGlsZXNJZk5lZWRlZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7
CisgICAgdm9pZCByZW1vdmVUaWxlc0lmTmVlZGVkKCk7CisKKyAgICBSZWZQdHI8Q29vcmRpbmF0
ZWRCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAgIFZlY3RvcjxDb29yZGluYXRlZElt
YWdlQmFja2luZ1N0b3JlVGlsZT4gbV90aWxlczsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eS5jcHAKaW5kZXggMTdmYTJlYTk1YzNlZGU4M2VmOTBlMWFhN2FjOGQ1ODY0NDQ1ZDFhNS4uNDY2
ZDVlNWM2ZTEwZDk5MWFiN2M3MTU3YmM5YWVlNTg5OTNkZGY4ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTEyNywxNSArMTI3LDI0IEBA
IHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6ZGlkUmVuZGVyRnJhbWUoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgY29udGVudHNTCiAjZW5kaWYKIH0KIAotdm9pZCBMYXllclRyZWVDb29y
ZGluYXRvclByb3h5OjpjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSwg
Y29uc3QgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlKQordm9pZCBMYXll
clRyZWVDb29yZGluYXRvclByb3h5OjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCBpbWFnZUlEKQogewotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1h
cCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSk7Ci0gICAgZGlzcGF0Y2hVcGRhdGUo
YmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUltYWdlLCBtX3JlbmRlcmVyLmdldCgpLCBr
ZXksIGJpdG1hcCkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVy
OjpjcmVhdGVJbWFnZUJhY2tpbmcsIG1fcmVuZGVyZXIuZ2V0KCksIGltYWdlSUQpKTsKIH0KIAot
dm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVk
SW1hZ2UoaW50NjRfdCBrZXkpCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnVwZGF0
ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQsIGNvbnN0IFNo
YXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJp
bmQoJkxheWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95SW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGtl
eSkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVJ
bWFnZUJhY2tpbmcsIG1fcmVuZGVyZXIuZ2V0KCksIGltYWdlSUQsIFNoYXJlYWJsZVN1cmZhY2U6
OmNyZWF0ZShoYW5kbGUpKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
bm90aWZ5SW52aXNpYmxlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1h
Z2VJRCkKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6bm90
aWZ5SW52aXNpYmxlSW1hZ2VCYWNraW5nLCBtX3JlbmRlcmVyLmdldCgpLCBpbWFnZUlEKSk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6cmVtb3ZlSW1hZ2VCYWNraW5nKENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlSW1hZ2VCYWNraW5nLCBtX3JlbmRlcmVyLmdl
dCgpLCBpbWFnZUlEKSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c2V0
Q29udGVudHNTaXplKGNvbnN0IEZsb2F0U2l6ZSYgY29udGVudHNTaXplKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oCmluZGV4IGQzNDg2ODc4ZDg4ZDQzZGE1
MDQwMDgxY2Q1ZWMxMzMzMWY2ZTk0ZDguLjE1YWExYjNiNzUxZjVlZWJlNzdjODUzZjQ2M2JjZTBm
Yjc0YTViYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5
LmgKQEAgLTY3LDggKzY3LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZVRpbGVGb3JMYXll
cihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCk7CiAgICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyhp
bnQgYXRsYXNJRCwgY29uc3QgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJik7CiAgICAgdm9pZCBy
ZW1vdmVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCk7Ci0gICAgdm9pZCBjcmVhdGVEaXJlY3RseUNv
bXBvc2l0ZWRJbWFnZShpbnQ2NF90LCBjb25zdCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFu
ZGxlJik7Ci0gICAgdm9pZCBkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCk7
CisgICAgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7
CisgICAgdm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwg
Y29uc3QgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJik7CisgICAgdm9pZCBub3RpZnlJbnZpc2li
bGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CisgICAgdm9pZCByZW1v
dmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CiAgICAgdm9pZCBkaWRS
ZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlv
biosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsKICAgICB2
b2lkIHVwZGF0ZVZpZXdwb3J0KCk7CiAgICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2Vz
LmluCmluZGV4IGU1ZTY0YTkzYTdhMDc2Y2U5MzNmMDI5Yzk2NWE0Njk3M2E3ODNmN2QuLjRjZDMy
NTc1NGQ3YmRkNGIyN2Y2NDQ1OWM2OWYyN2Q1ZWIyMjk2ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgpAQCAtMzEs
OCArMzEsMTAgQEAgbWVzc2FnZXMgLT4gTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSB7CiAgICAg
UmVtb3ZlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0aWxlSUQpCiAgICAgQ3Jl
YXRlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQsIFdlYktpdDo6U2hhcmVhYmxlU3VyZmFjZTo6SGFu
ZGxlIGhhbmRsZSkKICAgICBSZW1vdmVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCkKLSAgICBDcmVh
dGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSwgV2ViS2l0OjpTaGFyZWFibGVC
aXRtYXA6OkhhbmRsZSBoYW5kbGUpCi0gICAgRGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdl
KGludDY0X3Qga2V5KQorICAgIENyZWF0ZUltYWdlQmFja2luZyh1aW50cHRyX3QgaW1hZ2VJRCkK
KyAgICBVcGRhdGVJbWFnZUJhY2tpbmcodWludHB0cl90IGltYWdlSUQsIFdlYktpdDo6U2hhcmVh
YmxlU3VyZmFjZTo6SGFuZGxlIGhhbmRsZSkKKyAgICBOb3RpZnlJbnZpc2libGVJbWFnZUJhY2tp
bmcodWludHB0cl90IGltYWdlSUQpCisgICAgUmVtb3ZlSW1hZ2VCYWNraW5nKHVpbnRwdHJfdCBp
bWFnZUlEKQogICAgIERpZFJlbmRlckZyYW1lKFdlYkNvcmU6OkludFNpemUgY29udGVudHNTaXpl
LCBXZWJDb3JlOjpJbnRSZWN0IGNvdmVyZWRSZWN0KQogICAgIERpZENoYW5nZVNjcm9sbFBvc2l0
aW9uKFdlYkNvcmU6OkludFBvaW50IHBvc2l0aW9uKQogICAgIFNldExheWVyQW5pbWF0aW9ucyh1
aW50MzJfdCBpZCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMgYW5pbWF0aW9ucykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNz
L0xheWVyVHJlZVJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcAppbmRleCAxM2QwMjY5OTU0YTNiZjc2
MDc4NmQzM2I3MDA4ZjQ4OGZmNzNmMDUzLi5jZWJmZDQyMjRkZjZmZDVmZjQ5ODNmMWYzNTYwYzkw
M2U4NGM0YmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkg
MTAwLCBJbmMuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI3LDcgKzI4LDYgQEAKICNpbmNsdWRl
ICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkuaCIKICNpbmNsdWRlICJNZXNzYWdlSUQuaCIKLSNpbmNsdWRlICJTaGFyZWFi
bGVCaXRtYXAuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlckJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgpAQCAt
MzAxLDcgKzMwMSw3IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyU3RhdGUoV2Vi
TGF5ZXJJRCBpZCwgY29uc3QgV2ViTGF5ZXJJbmZvJiBsYXllckluCiAgICAgZWxzZQogICAgICAg
ICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShpZCk7CiAKLSAgICBhc3NpZ25JbWFnZVRvTGF5ZXIobGF5
ZXIsIGxheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKKyAgICBhc3NpZ25JbWFnZUJhY2tp
bmdUb0xheWVyKGxheWVyLCBsYXllckluZm8uaW1hZ2VJRCk7CiAKICAgICAvLyBOZXZlciBtYWtl
IHRoZSByb290IGxheWVyIGNsaXAuCiAgICAgbGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMobGF5ZXJJ
bmZvLmlzUm9vdExheWVyID8gZmFsc2UgOiBsYXllckluZm8ubWFza3NUb0JvdW5kcyk7CkBAIC0z
NjcsNyArMzY3LDcgQEAgUGFzc1JlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gTGF5ZXJU
cmVlUmVuZGVyZXI6OmdldEJhY2tpbmdTdG9yZShXZWJMYXllckkKICAgICByZXR1cm4gYmFja2lu
Z1N0b3JlOwogfQogCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVCYWNraW5nU3RvcmVJ
Zk5lZWRlZChXZWJMYXllcklEIGxheWVySUQsIGludCAvKnRpbGVJRCovKQordm9pZCBMYXllclRy
ZWVSZW5kZXJlcjo6cmVtb3ZlQmFja2luZ1N0b3JlSWZOZWVkZWQoV2ViTGF5ZXJJRCBsYXllcklE
KQogewogICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXll
cihsYXllckJ5SUQobGF5ZXJJRCkpOwogICAgIEFTU0VSVChsYXllcik7CkBAIC0zODcsNyArMzg3
LDcgQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVy
SUQsIGludCB0aWxlSUQsIGZsb2F0IHNjYWxlLAogdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVt
b3ZlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQpCiB7CiAgICAgZ2V0QmFja2lu
Z1N0b3JlKGxheWVySUQpLT5yZW1vdmVUaWxlKHRpbGVJRCk7Ci0gICAgcmVtb3ZlQmFja2luZ1N0
b3JlSWZOZWVkZWQobGF5ZXJJRCwgdGlsZUlEKTsKKyAgICByZW1vdmVCYWNraW5nU3RvcmVJZk5l
ZWRlZChsYXllcklEKTsKIH0KIAogdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZShX
ZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFRpbGVVcGRhdGUmIHVwZGF0ZSkK
QEAgLTM5NywzOCArMzk3LDc0IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGUo
V2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBUaWxlVXBkCiAgICAgbV9iYWNr
aW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOwogfQogCi12b2lk
IExheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVJbWFnZShpbnQ2NF90IGltYWdlSUQsIFBhc3NSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiB3ZWFrQml0bWFwKQordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6
Y3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKIHsK
LSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSB3ZWFrQml0bWFwOwotICAgIFJl
ZlB0cjxUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IFRleHR1
cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7Ci0gICAgbV9kaXJlY3RseUNvbXBv
c2l0ZWRJbWFnZXMuc2V0KGltYWdlSUQsIGJhY2tpbmdTdG9yZSk7Ci0gICAgYmFja2luZ1N0b3Jl
LT51cGRhdGVDb250ZW50cyhtX3RleHR1cmVNYXBwZXIuZ2V0KCksIGJpdG1hcC0+Y3JlYXRlSW1h
Z2UoKS5nZXQoKSwgQml0bWFwVGV4dHVyZTo6VXBkYXRlQ2Fubm90TW9kaWZ5T3JpZ2luYWxJbWFn
ZURhdGEpOworICAgIEFTU0VSVCghbV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsK
KyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nU3RvcmU6OmNyZWF0ZSgpKTsKKyAgICBtX2ltYWdlQmFja2lu
Z3MuYWRkKGltYWdlSUQsIGJhY2tpbmdTdG9yZS5yZWxlYXNlKCkpOwogfQogCi12b2lkIExheWVy
VHJlZVJlbmRlcmVyOjpkZXN0cm95SW1hZ2UoaW50NjRfdCBpbWFnZUlEKQordm9pZCBMYXllclRy
ZWVSZW5kZXJlcjo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQg
aW1hZ2VJRCwgUGFzc1JlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBzdXJmYWNlKQogewotICAgIG1f
ZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnJlbW92ZShpbWFnZUlEKTsKKyAgICBBU1NFUlQobV9p
bWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKKyAgICBJbWFnZUJhY2tpbmdNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7CisgICAgUmVmUHRyPENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IGl0LT52YWx1ZTsKKyAg
ICBiYWNraW5nU3RvcmUtPnVwZGF0ZUNvbnRlbnRzKHN1cmZhY2UpOworICAgIG1faW1hZ2VCYWNr
aW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOwogfQogCi12b2lk
IExheWVyVHJlZVJlbmRlcmVyOjphc3NpZ25JbWFnZVRvTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5
ZXIsIGludDY0X3QgaW1hZ2VJRCkKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6Om5vdGlmeUludmlz
aWJsZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCiB7Ci0g
ICAgaWYgKCFpbWFnZUlEKSB7CisgICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhp
bWFnZUlEKSk7CisgICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VCYWNr
aW5ncy5maW5kKGltYWdlSUQpOworICAgIFJlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZ1N0
b3JlPiBiYWNraW5nU3RvcmUgPSBpdC0+dmFsdWU7CisgICAgYmFja2luZ1N0b3JlLT5yZW1vdmVB
bGxUaWxlcygpOworICAgIG1faW1hZ2VCYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFk
ZChiYWNraW5nU3RvcmUpOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVJbWFn
ZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQoreworICAgIEFTU0VS
VChtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkpOworCisgICAgLy8gV2UgZG9uJ3Qg
d2FudCBUZXh0dXJlTWFwcGVyTGF5ZXIgcmVmZXJzIGEgZGFuZ2xpbmcgcG9pbnRlci4KKyAgICBJ
bWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJ
RCk7CisgICAgbV9yZWxlYXNlZEltYWdlQmFja2luZ3MuYXBwZW5kKGl0LT52YWx1ZSk7CisgICAg
bV9pbWFnZUJhY2tpbmdzLnJlbW92ZShpbWFnZUlEKTsKK30KKwordm9pZCBMYXllclRyZWVSZW5k
ZXJlcjo6YXNzaWduSW1hZ2VCYWNraW5nVG9MYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQoreworICAgIGlmIChpbWFnZUlEID09IElu
dmFsaWRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSB7CiAgICAgICAgIGxheWVyLT5zZXRDb250
ZW50c1RvTWVkaWEoMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBIYXNoTWFwPGlu
dDY0X3QsIFJlZlB0cjxUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBpdCA9
IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1hZ2VJRCk7Ci0gICAgQVNTRVJUKGl0
ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmVuZCgpKTsKKyAgICBJbWFnZUJhY2tpbmdN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7CisgICAgQVNT
RVJUKGl0ICE9IG1faW1hZ2VCYWNraW5ncy5lbmQoKSk7CiAgICAgbGF5ZXItPnNldENvbnRlbnRz
VG9NZWRpYShpdC0+dmFsdWUuZ2V0KCkpOwogfQogCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpy
ZW1vdmVSZWxlYXNlZEltYWdlQmFja2luZ3NJZk5lZWRlZCgpCit7CisgICAgbV9yZWxlYXNlZElt
YWdlQmFja2luZ3MuY2xlYXIoKTsKK30KKwogdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y29tbWl0
VGlsZU9wZXJhdGlvbnMoKQogewotICAgIEhhc2hTZXQ8UmVmUHRyPENvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlPiA+OjppdGVyYXRvciBlbmQgPSBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZl
cnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZT4gPjo6aXRlcmF0b3IgaXQgPSBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+Y29tbWl0VGlsZU9wZXJhdGlv
bnMobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKKyAgICB7CisgICAgICAgIEhhc2hTZXQ8UmVmUHRy
PENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBlbmQgPSBtX2JhY2tpbmdTdG9y
ZXNXaXRoUGVuZGluZ0J1ZmZlcnMuZW5kKCk7CisgICAgICAgIGZvciAoSGFzaFNldDxSZWZQdHI8
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5nU3RvcmVz
V2l0aFBlbmRpbmdCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAg
ICgqaXQpLT5jb21taXRUaWxlT3BlcmF0aW9ucyhtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwogCi0g
ICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmNsZWFyKCk7CisgICAgICAgIG1f
YmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5jbGVhcigpOworICAgIH0KKworICAgIHsK
KyAgICAgICAgSGFzaFNldDxSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdTdG9yZT4gPjo6
aXRlcmF0b3IgZW5kID0gbV9pbWFnZUJhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuZW5k
KCk7CisgICAgICAgIGZvciAoSGFzaFNldDxSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdT
dG9yZT4gPjo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlQmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVm
ZmVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICAoKml0KS0+Y29tbWl0
VGlsZU9wZXJhdGlvbnMobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKKworICAgICAgICBtX2ltYWdl
QmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5jbGVhcigpOworICAgIH0KIH0KIAogdm9p
ZCBMYXllclRyZWVSZW5kZXJlcjo6Zmx1c2hMYXllckNoYW5nZXMoKQpAQCAtNDQwLDYgKzQ3Niw3
IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmZsdXNoTGF5ZXJDaGFuZ2VzKCkKIAogICAgIG1f
cm9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGUoRmxvYXRSZWN0KCkpOwogICAgIGNvbW1p
dFRpbGVPcGVyYXRpb25zKCk7CisgICAgcmVtb3ZlUmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZOZWVk
ZWQoKTsKIAogICAgIC8vIFRoZSBwZW5kaW5nIHRpbGVzIHN0YXRlIGlzIG9uIGl0cyB3YXkgZm9y
IHRoZSBzY3JlZW4sIHRlbGwgdGhlIHdlYiBwcm9jZXNzIHRvIHJlbmRlciB0aGUgbmV4dCBvbmUu
CiAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbmRl
ck5leHRGcmFtZSwgdGhpcykpOwpAQCAtNDk2LDcgKzUzMyw3IEBAIHZvaWQgTGF5ZXJUcmVlUmVu
ZGVyZXI6OnB1cmdlR0xSZXNvdXJjZXMoKQogICAgIGlmIChsYXllcikKICAgICAgICAgbGF5ZXIt
PmNsZWFyQmFja2luZ1N0b3Jlc1JlY3Vyc2l2ZSgpOwogCi0gICAgbV9kaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZXMuY2xlYXIoKTsKKyAgICBtX2ltYWdlQmFja2luZ3MuY2xlYXIoKTsKICNpZiBVU0Uo
R1JBUEhJQ1NfU1VSRkFDRSkKICAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNsZWFyKCk7CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oCmluZGV4IDY3YmZmMTY5ZjQwYzk0
ZWQ2MzgxOTk4MTk3YTI0NTZhOWQzYTYyZDIuLjljNjBiMWQ1NzU0ODQ1NTVmZjU0NDIzMzllM2I5
YTFmNDcyZTdkZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuaApAQCAtNDEsNiAr
NDEsNyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlOworY2xhc3MgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdTdG9yZTsKIGNsYXNzIExheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHk7CiBjbGFzcyBXZWJMYXllckluZm87CiBjbGFzcyBXZWJMYXllclVw
ZGF0ZUluZm87CkBAIC04OSw4ICs5MCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVUaWxl
KFdlYkxheWVySUQsIGludCk7CiAgICAgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCwg
Y29uc3QgVGlsZVVwZGF0ZSYpOwogICAgIHZvaWQgZmx1c2hMYXllckNoYW5nZXMoKTsKLSAgICB2
b2lkIGNyZWF0ZUltYWdlKGludDY0X3QsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPik7Ci0g
ICAgdm9pZCBkZXN0cm95SW1hZ2UoaW50NjRfdCk7CisgICAgdm9pZCBjcmVhdGVJbWFnZUJhY2tp
bmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CisgICAgdm9pZCB1cGRhdGVJbWFnZUJhY2tp
bmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxTaGFyZWFibGVTdXJmYWNl
Pik7CisgICAgdm9pZCBub3RpZnlJbnZpc2libGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCk7CisgICAgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCk7CiAgICAgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoV2ViTGF5ZXJJRCwgY29u
c3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKICAgICB2b2lkIHNldEFuaW1h
dGlvbnNMb2NrZWQoYm9vbCk7CiAKQEAgLTExMyw3ICsxMTYsOCBAQCBwcml2YXRlOgogICAgIHZv
aWQgZGlzcGF0Y2hPbk1haW5UaHJlYWQoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwogICAgIHZv
aWQgYWRqdXN0UG9zaXRpb25Gb3JGaXhlZExheWVycygpOwogCi0gICAgdm9pZCBhc3NpZ25JbWFn
ZVRvTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGludDY0X3QgaW1hZ2VJRCk7CisgICAg
dm9pZCBhc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2b2lkIHJlbW92ZVJlbGVhc2VkSW1hZ2VC
YWNraW5nc0lmTmVlZGVkKCk7CiAgICAgdm9pZCBlbnN1cmVSb290TGF5ZXIoKTsKICAgICB2b2lk
IGVuc3VyZUxheWVyKFdlYkxheWVySUQpOwogICAgIHZvaWQgY29tbWl0VGlsZU9wZXJhdGlvbnMo
KTsKQEAgLTEyMSw3ICsxMjUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcHVyZ2VCYWNraW5nU3Rv
cmVzKCk7CiAKICAgICBQYXNzUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBnZXRCYWNr
aW5nU3RvcmUoV2ViTGF5ZXJJRCk7Ci0gICAgdm9pZCByZW1vdmVCYWNraW5nU3RvcmVJZk5lZWRl
ZChXZWJMYXllcklELCBpbnQgdGlsZUlEKTsKKyAgICB2b2lkIHJlbW92ZUJhY2tpbmdTdG9yZUlm
TmVlZGVkKFdlYkxheWVySUQpOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkxheWVySUQsIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqPiBMYXllck1hcDsKICAgICBXZWJDb3JlOjpGbG9hdFNpemUg
bV9jb250ZW50c1NpemU7CkBAIC0xMzIsNyArMTM2LDEyIEBAIHByaXZhdGU6CiAgICAgTXV0ZXgg
bV9yZW5kZXJRdWV1ZU11dGV4OwogCiAgICAgT3duUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+
IG1fdGV4dHVyZU1hcHBlcjsKLSAgICBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiA+IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzOwor
CisgICAgdHlwZWRlZiBIYXNoTWFwPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxD
b29yZGluYXRlZEltYWdlQmFja2luZ1N0b3JlPiA+IEltYWdlQmFja2luZ01hcDsKKyAgICBJbWFn
ZUJhY2tpbmdNYXAgbV9pbWFnZUJhY2tpbmdzOworICAgIFZlY3RvcjxSZWZQdHI8Q29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdTdG9yZT4gPiBtX3JlbGVhc2VkSW1hZ2VCYWNraW5nczsKKyAgICBIYXNo
U2V0PFJlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZ1N0b3JlPiA+IG1faW1hZ2VCYWNraW5n
U3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzOworCiAgICAgSGFzaFNldDxSZWZQdHI8Q29vcmRpbmF0
ZWRCYWNraW5nU3RvcmU+ID4gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzOwogCiAj
aWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAppbmRleCA5OWJiYzY2Njc4NDMzYTUw
YzRjNzQ3ZmM4M2RkOGFiNTA0NTNiZTBmLi4wOGU4ZjJmNzlmODllMzE2OTBiMWUyOWRhNjM5MTAz
YTIzNjk5NjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllci5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogIENvcHlyaWdodCAo
QykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyBD
b3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KIAogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtODIs
NiArODMsMTMgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUZpbHRl
cnMoKQogfQogI2VuZGlmCiAKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFu
Z2VJbWFnZUJhY2tpbmcoKQoreworICAgIG1fc2hvdWxkU3luY0ltYWdlQmFja2luZyA9IHRydWU7
CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJl
ZCh0aGlzKTsKK30KKwogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNob3VsZFVw
ZGF0ZVZpc2libGVSZWN0KCkKIHsKICAgICBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0ID0gdHJ1
ZTsKQEAgLTEwNSwxMSArMTEzLDEzIEBAIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKICAgICAsIG1f
c2hvdWxkU3luY0xheWVyU3RhdGUodHJ1ZSkKICAgICAsIG1fc2hvdWxkU3luY0NoaWxkcmVuKHRy
dWUpCiAgICAgLCBtX3Nob3VsZFN5bmNGaWx0ZXJzKHRydWUpCisgICAgLCBtX3Nob3VsZFN5bmNJ
bWFnZUJhY2tpbmcodHJ1ZSkKICAgICAsIG1fc2hvdWxkU3luY0FuaW1hdGlvbnModHJ1ZSkKICAg
ICAsIG1fZml4ZWRUb1ZpZXdwb3J0KGZhbHNlKQogICAgICwgbV9jYW52YXNOZWVkc0Rpc3BsYXko
ZmFsc2UpCiAgICAgLCBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCgwKQogICAgICwg
bV9jb250ZW50c1NjYWxlKDEpCisgICAgLCBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0cigwKQog
ICAgICwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKDApCiAgICAgLCBtX2FuaW1hdGlvblN0YXJ0ZWRU
aW1lcih0aGlzLCAmQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphbmltYXRpb25TdGFydGVkVGlt
ZXJGaXJlZCkKIHsKQEAgLTMxOCw5ICszMjgsNiBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHIpCiAKIHZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgpCiB7Ci0gICAgUmVmUHRy
PEltYWdlPiBpbWFnZSA9IG1faW1hZ2U7Ci0gICAgc2V0Q29udGVudHNUb0ltYWdlKDApOwotICAg
IHNldENvbnRlbnRzVG9JbWFnZShpbWFnZS5nZXQoKSk7CiAgICAgbV9jYW52YXNOZWVkc0Rpc3Bs
YXkgPSB0cnVlOwogICAgIGlmIChjbGllbnQoKSkKICAgICAgICAgY2xpZW50KCktPm5vdGlmeUZs
dXNoUmVxdWlyZWQodGhpcyk7CkBAIC0zNDcsMjUgKzM1NCwyNiBAQCBib29sIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6c2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBuZXdGaWx0
ZXJzKQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdl
KEltYWdlKiBpbWFnZSkKIHsKLSAgICBpZiAoaW1hZ2UgPT0gbV9pbWFnZSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGludDY0X3QgbmV3SUQgPSAwOwotICAgIGlmIChtX0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllckNsaWVudCkgewotICAgICAgICAvLyBXZSBhZG9wdCBmaXJzdCwgaW4gY2FzZSB0aGlz
IGlzIHRoZSBzYW1lIGZyYW1lIC0gdGhhdCB3YXkgd2UgYXZvaWQgZGVzdHJveWluZyBhbmQgcmVj
cmVhdGluZyB0aGUgaW1hZ2UuCi0gICAgICAgIG5ld0lEID0gbV9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXJDbGllbnQtPmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoaW1hZ2UpOwotICAgICAgICBtX0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKG1f
bGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOwotICAgICAgICBkaWRDaGFuZ2VMYXllclN0
YXRlKCk7Ci0gICAgICAgIGlmIChtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEICYmIG5l
d0lEID09IG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpCisgICAgaWYgKGltYWdlKSB7
CisgICAgICAgIC8vIE1ha2UgdGhlIGRlY2lzaW9uIGFib3V0IHdoZXRoZXIgdGhlIGltYWdlIGhh
cyBjaGFuZ2VkLgorICAgICAgICAvLyBUaGlzIGNvZGUgbWFrZXMgdGhlIGFzc3VtcHRpb24gdGhh
dCBwb2ludGVyIGVxdWFsaXR5IG9uIGEgTmF0aXZlSW1hZ2VQdHIgaXMgYSB2YWxpZCB3YXkgdG8g
dGVsbCBpZiB0aGUgaW1hZ2UgaXMgY2hhbmdlZC4KKyAgICAgICAgLy8gVGhpcyBhc3N1bXB0aW9u
IGlzIHRydWUgaW4gUXQsIEdUSyBhbmQgRUZMLgorICAgICAgICBOYXRpdmVJbWFnZVB0ciBuZXdO
YXRpdmVJbWFnZVB0ciA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAg
ICAgICBpZiAoIW5ld05hdGl2ZUltYWdlUHRyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGlmIChuZXdOYXRpdmVJbWFnZVB0ciA9PSBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0cikK
ICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX2NvbXBvc2l0ZWRJbWFnZSA9IGltYWdl
OworICAgICAgICBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0ciA9IG5ld05hdGl2ZUltYWdlUHRy
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Q2xpZW50IGlzIG5vdCBzZXQgeWV0IHRoZXJlIHNob3VsZCBiZSBubyBiYWNraW5nIHN0b3JlIElE
LgotICAgICAgICBBU1NFUlQoIW1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOwotICAg
ICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgICAgIG1fY29tcG9zaXRlZEltYWdlID0g
MDsKKyAgICAgICAgbV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIgPSAwOwogICAgIH0KIAotICAg
IG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQgPSBuZXdJRDsKLSAgICBtX2ltYWdlID0g
aW1hZ2U7CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKKyAg
ICBkaWRDaGFuZ2VJbWFnZUJhY2tpbmcoKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKQEAgLTQ3Myw2ICs0ODEs
MzQgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNGaWx0ZXJzKCkKIH0KICNl
bmRpZgogCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0ltYWdlQmFja2luZygp
Cit7CisgICAgaWYgKCFtX3Nob3VsZFN5bmNJbWFnZUJhY2tpbmcpCisgICAgICAgIHJldHVybjsK
KyAgICBtX3Nob3VsZFN5bmNJbWFnZUJhY2tpbmcgPSBmYWxzZTsKKworICAgIGlmIChtX2NvbXBv
c2l0ZWROYXRpdmVJbWFnZVB0cikgeworICAgICAgICBBU1NFUlQoIW1fbWFpbkJhY2tpbmdTdG9y
ZSk7CisgICAgICAgIEFTU0VSVChtX2NvbXBvc2l0ZWRJbWFnZSk7CisKKyAgICAgICAgYm9vbCBp
bWFnZUluc3RhbmNlUmVwbGFjZWQgPSBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nICYmIChtX2Nv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nLT5pZCgpICE9IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpn
ZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKG1fY29tcG9zaXRlZEltYWdlLmdldCgpKSk7Cisg
ICAgICAgIGlmIChpbWFnZUluc3RhbmNlUmVwbGFjZWQpCisgICAgICAgICAgICByZWxlYXNlSW1h
Z2VCYWNraW5nSWZOZWVkZWQoKTsKKworICAgICAgICBpZiAoIW1fY29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmcpIHsKKyAgICAgICAgICAgIG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgPSBtX0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+Y3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQobV9j
b21wb3NpdGVkSW1hZ2UuZ2V0KCkpOworICAgICAgICAgICAgbV9jb29yZGluYXRlZEltYWdlQmFj
a2luZy0+YWRkTGF5ZXJDbGllbnQodGhpcyk7CisgICAgICAgICAgICBtX2xheWVySW5mby5pbWFn
ZUlEID0gbV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+aWQoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmctPmludmFsaWRhdGUoKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgcmVsZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCk7CisKKyAgICAvLyBUaGlzIG1l
dGhvZCBjaGFuZ2VzIG1fbGF5ZXJJbmZvLmltYWdlSUQuCisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0
ZSgpOworfQorCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0xheWVyU3RhdGUo
KQogewogICAgIGlmICghbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSkKQEAgLTUyNSwxOCArNTYxLDkg
QEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMoKQogICAgIG1fY2Fu
dmFzTmVlZHNEaXNwbGF5ID0gZmFsc2U7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjplbnN1cmVJbWFnZUJhY2tpbmdTdG9yZSgpCi17Ci0gICAgaWYgKCFtX2ltYWdlKQotICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKCFtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKQot
ICAgICAgICBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEID0gbV9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXJDbGllbnQtPmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUobV9pbWFnZS5nZXQoKSk7
Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpmbHVzaENvbXBvc2l0aW5nU3Rh
dGVGb3JUaGlzTGF5ZXJPbmx5KCkKIHsKLSAgICAvLyBUaGUgcmVtb3RlIGltYWdlIG1pZ2h0IGhh
dmUgYmVlbiByZWxlYXNlZCBieSBwdXJnZUJhY2tpbmdTdG9yZXMuCi0gICAgZW5zdXJlSW1hZ2VC
YWNraW5nU3RvcmUoKTsKKyAgICBzeW5jSW1hZ2VCYWNraW5nKCk7CiAgICAgc3luY0xheWVyU3Rh
dGUoKTsKICAgICBzeW5jQW5pbWF0aW9ucygpOwogICAgIGNvbXB1dGVUcmFuc2Zvcm1lZFZpc2li
bGVSZWN0KCk7CkBAIC01NDgsNiArNTc1LDIzIEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKICAgICBzeW5jQ2Fu
dmFzKCk7CiB9CiAKK2Jvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjppbWFnZUJhY2tpbmdW
aXNpYmxlKCkKK3sKKyAgICBBU1NFUlQobV9jb29yZGluYXRlZEltYWdlQmFja2luZyk7CisgICAg
cmV0dXJuIHRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKS5pbnRlcnNlY3RzKHRpbGVkQmFj
a2luZ1N0b3JlQ29udGVudHNSZWN0KCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6cmVsZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fY29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk7CisgICAgbV9jb29yZGluYXRlZEltYWdlQmFja2lu
Zy0+cmVtb3ZlTGF5ZXJDbGllbnQodGhpcyk7CisgICAgbV9jb29yZGluYXRlZEltYWdlQmFja2lu
Zy5jbGVhcigpOworICAgIG1fbGF5ZXJJbmZvLmltYWdlSUQgPSBJbnZhbGlkQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRDsKK30KKwogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVk
QmFja2luZ1N0b3JlUGFpbnRCZWdpbigpCiB7CiB9CkBAIC02NTAsNyArNjk0LDcgQEAgQ29sb3Ig
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xv
cigpIGNvbnN0CiAgICAgcmV0dXJuIGNvbnRlbnRzT3BhcXVlKCkgPyBDb2xvcjo6d2hpdGUgOiBD
b2xvcjo6dHJhbnNwYXJlbnQ7CiB9CiAKLVBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0PiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBzaXplLCBpbnQmIGF0bGFzLCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zm
c2V0KQorUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IEludFNpemUmIHNpemUsIGludCYgYXRsYXMsIElu
dFBvaW50JiBvZmZzZXQpCiB7CiAgICAgcmV0dXJuIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Q2xpZW50LT5iZWdpbkNvbnRlbnRVcGRhdGUoc2l6ZSwgY29udGVudHNPcGFxdWUoKSA/IDAgOiBT
aGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEsIGF0bGFzLCBvZmZzZXQpOwogfQpAQCAtNjk3
LDExICs3NDEsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cHVyZ2VCYWNraW5n
U3RvcmVzKCkKIHsKICAgICBtX21haW5CYWNraW5nU3RvcmUuY2xlYXIoKTsKICAgICBtX3ByZXZp
b3VzQmFja2luZ1N0b3JlLmNsZWFyKCk7Ci0KLSAgICBpZiAobV9sYXllckluZm8uaW1hZ2VCYWNr
aW5nU3RvcmVJRCkgewotICAgICAgICBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+
cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQp
OwotICAgICAgICBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEID0gMDsKLSAgICB9Cisg
ICAgcmVsZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCk7CiAKICAgICBkaWRDaGFuZ2VMYXllclN0
YXRlKCk7CiAgICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKQEAgLTc0Nyw3ICs3ODcsNyBAQCBib29s
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6aGFzUGVuZGluZ1Zpc2libGVDaGFuZ2VzKCkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmICghbV9zaG91bGRTeW5jTGF5
ZXJTdGF0ZSAmJiAhbV9zaG91bGRTeW5jQ2hpbGRyZW4gJiYgIW1fc2hvdWxkU3luY0ZpbHRlcnMg
JiYgIW1fc2hvdWxkU3luY0FuaW1hdGlvbnMgJiYgIW1fY2FudmFzTmVlZHNEaXNwbGF5KQorICAg
IGlmICghbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSAmJiAhbV9zaG91bGRTeW5jQ2hpbGRyZW4gJiYg
IW1fc2hvdWxkU3luY0ZpbHRlcnMgJiYgIW1fc2hvdWxkU3luY0ltYWdlQmFja2luZyAmJiAhbV9z
aG91bGRTeW5jQW5pbWF0aW9ucyAmJiAhbV9jYW52YXNOZWVkc0Rpc3BsYXkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIHJldHVybiBzZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFu
c2Zvcm1zKCkgfHwgIXRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKS5pc0VtcHR5KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ci5oCmluZGV4IDJhOTQzNjkxZjBhNGFiM2VjNWM1OWNhNWRlM2UxODQxZTQxZDFjOGYuLmRhZjgz
MDNkZjRmNWRiMGQ0ZTdhODk3YjkwY2M0MDdmNjViZWZjMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCkBAIC0yMSw2ICsy
MSw3IEBACiAjaWZuZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcl9oCiAjZGVmaW5lIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcl9oCiAKKyNpbmNsdWRlICJDb29yZGluYXRlZEltYWdlQmFja2lu
Zy5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkVGlsZS5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQz
RC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKQEAgLTU2LDggKzU3LDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGludDY0X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9yZShX
ZWJDb3JlOjpJbWFnZSopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUltYWdlQmFja2lu
Z1N0b3JlKGludDY0X3QpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKFdlYkNvcmU6OkltYWdlKikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShXZWJMYXllcklELCBjb25zdCBX
ZWJMYXllckluZm8mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKFdl
YkxheWVySUQsIGNvbnN0IFZlY3RvcjxXZWJMYXllcklEPiYpID0gMDsKICNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCkBAIC04MCw3ICs4MCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIDogcHVibGljIEdyYXBoaWNzTGF5ZXIKICAgICAsIHB1
YmxpYyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAotICAgICwgcHVibGljIFdlYktpdDo6Q29vcmRp
bmF0ZWRUaWxlQ2xpZW50IHsKKyAgICAsIHB1YmxpYyBXZWJLaXQ6OkNvb3JkaW5hdGVkVGlsZUNs
aWVudAorICAgICwgcHVibGljIFdlYktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdHcmFwaGlj
c0xheWVyQ2xpZW50IHsKIHB1YmxpYzoKICAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoR3Jh
cGhpY3NMYXllckNsaWVudCopOwogICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cigpOwpAQCAtMTY5LDYgKzE3MCw3IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKENTU19GSUxURVJT
KQogICAgIHZvaWQgZGlkQ2hhbmdlRmlsdGVycygpOwogI2VuZGlmCisgICAgdm9pZCBkaWRDaGFu
Z2VJbWFnZUJhY2tpbmcoKTsKIAogICAgIHZvaWQgc3luY0xheWVyU3RhdGUoKTsKICAgICB2b2lk
IHN5bmNBbmltYXRpb25zKCk7CkBAIC0xNzYsNiArMTc4LDcgQEAgcHJpdmF0ZToKICNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCiAgICAgdm9pZCBzeW5jRmlsdGVycygpOwogI2VuZGlmCisgICAgdm9p
ZCBzeW5jSW1hZ2VCYWNraW5nKCk7CiAgICAgdm9pZCBzeW5jQ2FudmFzKCk7CiAgICAgdm9pZCBl
bnN1cmVJbWFnZUJhY2tpbmdTdG9yZSgpOwogICAgIHZvaWQgY29tcHV0ZVRyYW5zZm9ybWVkVmlz
aWJsZVJlY3QoKTsKQEAgLTE4Myw2ICsxODYsMTEgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY3Jl
YXRlQmFja2luZ1N0b3JlKCk7CiAKKyAgICAvLyBDb29yZGluYXRlZEltYWdlQmFja2luZ0dyYXBo
aWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VCYWNraW5nVmlzaWJsZSgpIE9W
RVJSSURFOworCisgICAgdm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQoKTsKKwogICAg
IGJvb2wgc2VsZk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNmb3JtcygpOwogICAgIGJvb2wg
c2hvdWxkVXNlVGlsZWRCYWNraW5nU3RvcmUoKTsKICAgICB2b2lkIGFkanVzdENvbnRlbnRzU2Nh
bGUoKTsKQEAgLTE5NCw3ICsyMDIsNiBAQCBwcml2YXRlOgogCiAgICAgV2ViS2l0OjpXZWJMYXll
cklEIG1faWQ7CiAgICAgV2ViS2l0OjpXZWJMYXllckluZm8gbV9sYXllckluZm87Ci0gICAgUmVm
UHRyPEltYWdlPiBtX2ltYWdlOwogICAgIEdyYXBoaWNzTGF5ZXIqIG1fbWFza1RhcmdldDsKICAg
ICBGbG9hdFJlY3QgbV9uZWVkc0Rpc3BsYXlSZWN0OwogICAgIEdyYXBoaWNzTGF5ZXJUcmFuc2Zv
cm0gbV9sYXllclRyYW5zZm9ybTsKQEAgLTIwMyw2ICsyMTAsNyBAQCBwcml2YXRlOgogICAgIGJv
b2wgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZTogMTsKICAgICBib29sIG1fc2hvdWxkU3luY0NoaWxk
cmVuOiAxOwogICAgIGJvb2wgbV9zaG91bGRTeW5jRmlsdGVyczogMTsKKyAgICBib29sIG1fc2hv
dWxkU3luY0ltYWdlQmFja2luZzogMTsKICAgICBib29sIG1fc2hvdWxkU3luY0FuaW1hdGlvbnM6
IDE7CiAgICAgYm9vbCBtX2ZpeGVkVG9WaWV3cG9ydCA6IDE7CiAgICAgYm9vbCBtX2NhbnZhc05l
ZWRzRGlzcGxheSA6IDE7CkBAIC0yMTQsNiArMjIyLDEyIEBAIHByaXZhdGU6CiAgICAgT3duUHRy
PFRpbGVkQmFja2luZ1N0b3JlPiBtX21haW5CYWNraW5nU3RvcmU7CiAgICAgT3duUHRyPFRpbGVk
QmFja2luZ1N0b3JlPiBtX3ByZXZpb3VzQmFja2luZ1N0b3JlOwogICAgIGZsb2F0IG1fY29udGVu
dHNTY2FsZTsKKworICAgIC8vIFdoZW4gbV9pbWFnZUJhY2tpbmcgZXhpc3RzLCB0aGlzIGxheWVy
IGNhbm5vdCBiZSBhIGNvbnRlbnQgbGF5ZXIsIGJlY2F1c2Ugc2V0RHJhd3NDb250ZW50IGFuZCBz
ZXRDb250ZW50c1RvSW1hZ2UgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KKyAgICBSZWZQdHI8SW1h
Z2U+IG1fY29tcG9zaXRlZEltYWdlOworICAgIE5hdGl2ZUltYWdlUHRyIG1fY29tcG9zaXRlZE5h
dGl2ZUltYWdlUHRyOworICAgIFJlZlB0cjxXZWJLaXQ6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
PiBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOworCiAgICAgUGxhdGZvcm1MYXllciogbV9jYW52
YXNQbGF0Zm9ybUxheWVyOwogICAgIFRpbWVyPENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcj4gbV9h
bmltYXRpb25TdGFydGVkVGltZXI7CiAgICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMgbV9hbmlt
YXRpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhNTRkNjk5NjNlNDFlZDhjZmQyYzZjZGRhZGZh
M2NhYWQ0NTEwNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAK
QEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIkNvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nLmgiCisKKyNpbmNsdWRlICJDb29yZGluYXRlZFRpbGUuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZS5oIgorI2lu
Y2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBD
b29yZGluYXRlZEltYWdlQmFja2luZzo6Z2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRChJbWFn
ZSogaW1hZ2UpCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRD4oaW1hZ2UpOworfQorCitQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nPiBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y3JlYXRlKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nQ2xpZW50KiBjbGllbnQsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKQoreworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoY2xpZW50LCBpbWFnZSkpOwor
fQorCitDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdDbGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxJbWFnZT4gaW1h
Z2UpCisgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX2ltYWdlKGltYWdlKQorICAgICwg
bV9pZChnZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKG1faW1hZ2UuZ2V0KCkpKQorICAgICwg
bV9kaWRJbnZhbGlkYXRlKGZhbHNlKQorICAgICwgbV9pc1Zpc2libGUodHJ1ZSkKK3sKKyAgICAv
LyBGSVhNRTogV2Ugd291bGQgbmVlZCB0byBkZWNvZGUgYSBzbWFsbCBpbWFnZSBkaXJlY3RseSBp
bnRvIGEgR3JhcGhpY3NTdXJmYWNlLgorICAgIC8vIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAxNDI2
CisKKyAgICBtX2NsaWVudC0+Y3JlYXRlSW1hZ2VCYWNraW5nKGlkKCkpOworfQorCitDb29yZGlu
YXRlZEltYWdlQmFja2luZzo6fkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKCkKK3sKK30KKwordm9p
ZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6YWRkTGF5ZXJDbGllbnQoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdHcmFwaGljc0xheWVyQ2xpZW50KiBsYXllckNsaWVudCkKK3sKKyAgICBBU1NFUlQo
IW1fbGF5ZXJDbGllbnRzLmNvbnRhaW5zKGxheWVyQ2xpZW50KSk7CisgICAgbV9sYXllckNsaWVu
dHMuYXBwZW5kKGxheWVyQ2xpZW50KTsKK30KKwordm9pZCBDb29yZGluYXRlZEltYWdlQmFja2lu
Zzo6cmVtb3ZlTGF5ZXJDbGllbnQoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdHcmFwaGljc0xheWVy
Q2xpZW50KiBsYXllckNsaWVudCkKK3sKKyAgICBzaXplX3QgcG9zaXRpb24gPSBtX2xheWVyQ2xp
ZW50cy5maW5kKGxheWVyQ2xpZW50KTsKKyAgICBBU1NFUlQocG9zaXRpb24gIT0gbm90Rm91bmQp
OworICAgIG1fbGF5ZXJDbGllbnRzLnJlbW92ZShwb3NpdGlvbik7CisKKyAgICBpZiAobV9sYXll
ckNsaWVudHMuaXNFbXB0eSgpKQorICAgICAgICBtX2NsaWVudC0+cmVtb3ZlSW1hZ2VCYWNraW5n
KGlkKCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjppbnZhbGlkYXRlKCkK
K3sKKyAgICBtX2RpZEludmFsaWRhdGUgPSB0cnVlOworfQorCit2b2lkIENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nOjp1cGRhdGUoKQoreworICAgIHJlbGVhc2VTdXJmYWNlSWZOZWVkZWQoKTsKKwor
ICAgIGJvb2wgcHJldmlvdXNJc1Zpc2libGUgPSBtX2lzVmlzaWJsZTsKKyAgICBub3RpZnlJbnZp
c2libGVJbWFnZUJhY2tpbmdJbk5lZWRlZCgpOworICAgIGJvb2wgY2hhZ2VkVG9WaXNpYmxlID0g
IXByZXZpb3VzSXNWaXNpYmxlICYmIG1faXNWaXNpYmxlOworCisgICAgYm9vbCBuZWVkVG9VcGRh
dGUgPSBjaGFnZWRUb1Zpc2libGUgfHwgKG1faXNWaXNpYmxlICYmIG1fZGlkSW52YWxpZGF0ZSk7
CisgICAgaWYgKCFuZWVkVG9VcGRhdGUpIHsKKyAgICAgICAgbV9kaWRJbnZhbGlkYXRlID0gZmFs
c2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3N1cmZhY2UgPSBTaGFyZWFibGVT
dXJmYWNlOjpjcmVhdGUobV9pbWFnZS0+c2l6ZSgpLCBtX2ltYWdlLT5jdXJyZW50RnJhbWVIYXNB
bHBoYSgpID8gU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhIDogU2hhcmVhYmxlQml0bWFw
OjpOb0ZsYWdzLCBTaGFyZWFibGVTdXJmYWNlOjpTdXBwb3J0c0dyYXBoaWNzU3VyZmFjZSk7Cisg
ICAgbV9oYW5kbGUgPSBhZG9wdFB0cihuZXcgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlKCkpOwor
CisgICAgaWYgKCFtX3N1cmZhY2UtPmNyZWF0ZUhhbmRsZSgqbV9oYW5kbGUpKSB7CisgICAgICAg
IHJlbGVhc2VTdXJmYWNlSWZOZWVkZWQoKTsKKyAgICAgICAgbV9kaWRJbnZhbGlkYXRlID0gZmFs
c2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQ6
Onplcm8oKSwgbV9pbWFnZS0+c2l6ZSgpKTsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBj
b250ZXh0ID0gbV9zdXJmYWNlLT5jcmVhdGVHcmFwaGljc0NvbnRleHQocmVjdCk7CisgICAgY29u
dGV4dC0+ZHJhd0ltYWdlKG1faW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIHJlY3Qs
IHJlY3QpOworCisgICAgbV9jbGllbnQtPnVwZGF0ZUltYWdlQmFja2luZyhpZCgpLCAqbV9oYW5k
bGUpOworICAgIG1fZGlkSW52YWxpZGF0ZSA9IGZhbHNlOworfQorCit2b2lkIENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nOjpyZWxlYXNlU3VyZmFjZUlmTmVlZGVkKCkKK3sKKyAgICAvLyBXZSBtdXN0
IGtlZXAgbV9zdXJmYWNlIHVudGlsIFVJIFByb2Nlc3MgcmVhZHMgbV9zdXJmYWNlLgorICAgIG1f
aGFuZGxlLmNsZWFyKCk7CisgICAgbV9zdXJmYWNlLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmc6Om5vdGlmeUludmlzaWJsZUltYWdlQmFja2luZ0luTmVlZGVkKCkK
K3sKKyAgICBib29sIHByZXZpb3VzSXNWaXNpYmxlID0gbV9pc1Zpc2libGU7CisKKyAgICBtX2lz
VmlzaWJsZSA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9sYXllckNsaWVu
dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fbGF5ZXJDbGllbnRzW2ldLT5pbWFnZUJh
Y2tpbmdWaXNpYmxlKCkpIHsKKyAgICAgICAgICAgIG1faXNWaXNpYmxlID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBjaGFnZWRUb0ludmlz
aWJsZSA9IHByZXZpb3VzSXNWaXNpYmxlICYmICFtX2lzVmlzaWJsZTsKKyAgICBpZiAoY2hhZ2Vk
VG9JbnZpc2libGUpCisgICAgICAgIG1fY2xpZW50LT5ub3RpZnlJbnZpc2libGVJbWFnZUJhY2tp
bmcoaWQoKSk7Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmcuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWNmYzRiOWY0MDBjODMz
OGVmZWZmZWUzNTcwM2RiMjcyYjRlNjMzNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBD
b21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5k
ZWYgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdfaAorI2RlZmluZSBDb29yZGluYXRlZEltYWdlQmFj
a2luZ19oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiSW1hZ2Uu
aCIKKyNpbmNsdWRlICJTaGFyZWFibGVTdXJmYWNlLmgiCisjaW5jbHVkZSAiV2ViTGF5ZXJUcmVl
SW5mby5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmco
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVJ
bWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgY29uc3QgU2hhcmVhYmxlU3Vy
ZmFjZTo6SGFuZGxlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlJbnZpc2libGVJbWFn
ZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgPSAwOworfTsK
KworY2xhc3MgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdHcmFwaGljc0xheWVyQ2xpZW50IHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VCYWNraW5nVmlzaWJsZSgpID0gMDsKK307CisK
K2NsYXNzIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nIDogcHVibGljIFJlZkNvdW50ZWQ8Q29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmc+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29y
ZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nQ2xpZW50
KiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJbWFnZT4pOworICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nKCk7CisKKyAgICBzdGF0aWMgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBn
ZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKFdlYkNvcmU6OkltYWdlKik7CisgICAgQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKworICAgIHZv
aWQgYWRkTGF5ZXJDbGllbnQoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdHcmFwaGljc0xheWVyQ2xp
ZW50Kik7CisgICAgdm9pZCByZW1vdmVMYXllckNsaWVudChDb29yZGluYXRlZEltYWdlQmFja2lu
Z0dyYXBoaWNzTGF5ZXJDbGllbnQqKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZSgpOworICAgIHZv
aWQgdXBkYXRlKCk7CisKK3ByaXZhdGU6CisgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdDbGllbnQqLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkltYWdlPik7
CisKKyAgICB2b2lkIHJlbGVhc2VTdXJmYWNlSWZOZWVkZWQoKTsKKyAgICB2b2lkIG5vdGlmeUlu
dmlzaWJsZUltYWdlQmFja2luZ0luTmVlZGVkKCk7CisKKyAgICBDb29yZGluYXRlZEltYWdlQmFj
a2luZ0NsaWVudCogbV9jbGllbnQ7CisgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlPiBtX2ltYWdl
OworICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgbV9pZDsKKyAgICBWZWN0b3I8Q29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdHcmFwaGljc0xheWVyQ2xpZW50Kj4gbV9sYXllckNsaWVudHM7CisK
KyAgICBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gbV9zdXJmYWNlOworICAgIE93blB0cjxTaGFy
ZWFibGVTdXJmYWNlOjpIYW5kbGU+IG1faGFuZGxlOworCisgICAgYm9vbCBtX2RpZEludmFsaWRh
dGU7CisgICAgYm9vbCBtX2lzVmlzaWJsZTsKKworfTsKKworfQorI2VuZGlmCisKKyNlbmRpZiAv
LyBDb29yZGluYXRlZEltYWdlQmFja2luZ19ICmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRv
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAKaW5kZXggNDMzYmNlOWFkNTA2Mzc2ZmVmNzU4
OTI5Zjc4YTVlOWYzMDU3MDhkMC4uMDkzOGViN2FlMjk4YjY2MWVhNmNjMTg0ZGE4OWRmYjBjZDQx
ZjdhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3Jk
aW5hdG9yLmNwcApAQCAtMjY5LDcgKzI2OSw3IEBAIGJvb2wgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpCiAKICAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21w
b3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwogCi0gICAgcHVyZ2VSZWxlYXNlZEltYWdl
cygpOworICAgIHVwZGF0ZUltYWdlQmFja2luZ3MoKTsKIAogICAgIGlmIChtX3Nob3VsZFN5bmNS
b290TGF5ZXIpIHsKICAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVD
b29yZGluYXRvclByb3h5OjpTZXRSb290Q29tcG9zaXRpbmdMYXllcih0b0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmlkKCkpKTsKQEAgLTQ0OSwxNSArNDQ5LDYg
QEAgdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1
c2goKQogICAgIH0KIH0KIAotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cHVyZ2VSZWxlYXNl
ZEltYWdlcygpCi17Ci0gICAgaWYgKCFtX2lzUHVyZ2luZykgewotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fcmVsZWFzZWREaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHk6OkRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShtX3JlbGVhc2VkRGly
ZWN0bHlDb21wb3NpdGVkSW1hZ2VzW2ldKSk7Ci0gICAgfQotICAgIG1fcmVsZWFzZWREaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZXMuY2xlYXIoKTsKLX0KLQogdm9pZCBMYXllclRyZWVDb29yZGluYXRv
cjo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoVGltZXI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+KikKIHsK
ICAgICBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOwpAQCAtNDg1LDc5ICs0NzYsNTAgQEAg
dm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKQogICAg
IG1fcGFnZU92ZXJsYXlMYXllciA9IG51bGxwdHI7CiB9CiAKLWludDY0X3QgTGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoSW1hZ2UqIGltYWdlKQorUGFzc1JlZlB0
cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZUlt
YWdlQmFja2luZ0lmTmVlZGVkKEltYWdlKiBpbWFnZSkKIHsKLSAgICBpZiAoIWltYWdlKQotICAg
ICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7Ci0KLSAgICBpbnQ2NF90IGtleSA9IDA7Ci0K
LSNpZiBQTEFURk9STShRVCkKLSAgICBRUGl4bWFwKiBuYXRpdmVJbWFnZSA9IGltYWdlLT5uYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotCi0gICAgaWYgKCFuYXRpdmVJbWFnZSkKLSAgICAg
ICAgcmV0dXJuIEludmFsaWRXZWJMYXllcklEOwotCi0gICAga2V5ID0gbmF0aXZlSW1hZ2UtPmNh
Y2hlS2V5KCk7Ci0jZWxpZiBVU0UoQ0FJUk8pCi0gICAgTmF0aXZlSW1hZ2VDYWlybyogbmF0aXZl
SW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIW5h
dGl2ZUltYWdlKQotICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7Ci0gICAgLy8gVGhp
cyBjYW4gYmUgc2FmZWx5IGRvbmUgc2luY2Ugd2Ugb3duIHRoZSByZWZlcmVuY2UuCi0gICAgLy8g
QSBjb3JyZXNwb25kaW5nIGNhaXJvX3N1cmZhY2VfZGVzdHJveSgpIGlzIGVuc3VyZWQgaW4gcmVs
ZWFzZUltYWdlQmFja2luZ1N0b3JlKCkuCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBjYWlyb1N1cmZh
Y2UgPSBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZShuYXRpdmVJbWFnZS0+c3VyZmFjZSgpKTsKLSAg
ICBrZXkgPSByZWludGVycHJldF9jYXN0PGludDY0X3Q+KGNhaXJvU3VyZmFjZSk7Ci0jZW5kaWYK
LQotICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29t
cG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5KTsKLQotICAgIGlmIChpdCAhPSBtX2RpcmVj
dGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKSB7Ci0gICAgICAgICsrKGl0LT52YWx1
ZSk7Ci0gICAgICAgIHJldHVybiBrZXk7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgaWYgd2Ugd2Vy
ZSBnb2luZyB0byByZWxlYXNlIHRoaXMgaW1hZ2UgZHVyaW5nIHRoZSBuZXh0IGZsdXNoLgotICAg
IHNpemVfdCByZWxlYXNlZEluZGV4ID0gbV9yZWxlYXNlZERpcmVjdGx5Q29tcG9zaXRlZEltYWdl
cy5maW5kKGtleSk7Ci0gICAgaWYgKHJlbGVhc2VkSW5kZXggPT0gbm90Rm91bmQpIHsKLSAgICAg
ICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVh
dGVTaGFyZWFibGUoaW1hZ2UtPnNpemUoKSwgKGltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgp
ID8gU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhIDogMCkpOwotICAgICAgICB7Ci0gICAg
ICAgICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQg
PSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwotICAgICAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50Ojp6
ZXJvKCkpOwotICAgICAgICB9Ci0gICAgICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRs
ZTsKLSAgICAgICAgYml0bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKLSAgICAgICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpDcmVhdGVEaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZShrZXksIGhhbmRsZSkpOworICAgIENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQgaW1hZ2VJRCA9IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpnZXRDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEKGltYWdlKTsKKyAgICBJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7CisgICAgUmVmUHRyPENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nPiBpbWFnZUJhY2tpbmc7CisgICAgaWYgKGl0ID09IG1faW1hZ2VCYWNraW5n
cy5lbmQoKSkgeworICAgICAgICBpbWFnZUJhY2tpbmcgPSBDb29yZGluYXRlZEltYWdlQmFja2lu
Zzo6Y3JlYXRlKHRoaXMsIGltYWdlKTsKKyAgICAgICAgbV9pbWFnZUJhY2tpbmdzLmFkZChpbWFn
ZUlELCBpbWFnZUJhY2tpbmcpOwogICAgIH0gZWxzZQotICAgICAgICBtX3JlbGVhc2VkRGlyZWN0
bHlDb21wb3NpdGVkSW1hZ2VzLnJlbW92ZShyZWxlYXNlZEluZGV4KTsKKyAgICAgICAgaW1hZ2VC
YWNraW5nID0gaXQtPnZhbHVlOwogCi0gICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNv
dW50cy5hZGQoa2V5LCAxKTsKLSAgICByZXR1cm4ga2V5OworICAgIHJldHVybiBpbWFnZUJhY2tp
bmc7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbGVhc2VJbWFnZUJhY2tpbmdT
dG9yZShpbnQ2NF90IGtleSkKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZUltYWdl
QmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCiB7Ci0gICAgaWYgKCFr
ZXkpCi0gICAgICAgIHJldHVybjsKLSAgICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJhdG9y
IGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7Ci0gICAg
aWYgKGl0ID09IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpCi0gICAg
ICAgIHJldHVybjsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHk6OkNyZWF0ZUltYWdlQmFja2luZyhpbWFnZUlEKSk7Cit9CiAKLSAgICBpdC0+
dmFsdWUtLTsKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnVwZGF0ZUltYWdlQmFja2luZyhD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQsIGNvbnN0IFNoYXJlYWJsZVN1cmZhY2U6
OkhhbmRsZSYgaGFuZGxlKQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eTo6VXBkYXRlSW1hZ2VCYWNraW5nKGltYWdlSUQsIGhhbmRsZSkp
OworfQogCi0gICAgaWYgKGl0LT52YWx1ZSkKLSAgICAgICAgcmV0dXJuOwordm9pZCBMYXllclRy
ZWVDb29yZGluYXRvcjo6bm90aWZ5SW52aXNpYmxlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Okxh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6Ok5vdGlmeUludmlzaWJsZUltYWdlQmFja2luZyhpbWFn
ZUlEKSk7Cit9CiAKLSNpZiBVU0UoQ0FJUk8pCi0gICAgLy8gQ29tcGxlbWVudCB0aGUgcmVmZXJl
bmNpbmcgaW4gYWRvcHRJbWFnZUJhY2tpbmdTdG9yZSgpLgotICAgIGNhaXJvX3N1cmZhY2VfdCog
Y2Fpcm9TdXJmYWNlID0gcmVpbnRlcnByZXRfY2FzdDxjYWlyb19zdXJmYWNlX3QqPihrZXkpOwot
ICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShjYWlyb1N1cmZhY2UpOwotI2VuZGlmCit2b2lkIExh
eWVyVHJlZUNvb3JkaW5hdG9yOjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmdJRCBpbWFnZUlEKQoreworICAgIEFTU0VSVChtX2ltYWdlQmFja2luZ3MuY29udGFpbnMo
aW1hZ2VJRCkpOworICAgIG1faW1hZ2VCYWNraW5ncy5yZW1vdmUoaW1hZ2VJRCk7CiAKLSAgICBt
X2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnJlbW92ZShpdCk7Ci0gICAgbV9yZWxl
YXNlZERpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5hcHBlbmQoa2V5KTsKLSAgICBzY2hlZHVsZUxh
eWVyRmx1c2goKTsKKyAgICBpZiAoIW1faXNQdXJnaW5nKQorICAgICAgICBtX3dlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlJlbW92ZUltYWdlQmFja2lu
ZyhpbWFnZUlEKSk7CiB9CiAKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnVwZGF0ZUltYWdl
QmFja2luZ3MoKQoreworICAgIEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgZW5kID0gbV9pbWFn
ZUJhY2tpbmdzLmVuZCgpOworICAgIGZvciAoSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdGVy
ID0gbV9pbWFnZUJhY2tpbmdzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAg
IGl0ZXItPnZhbHVlLT51cGRhdGUoKTsKK30KIAogdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6
bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91
YmxlIC8qIHRpbWUgKi8pCiB7CkBAIC03MDQsMTAgKzY2Niw3IEBAIHZvaWQgTGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OnB1cmdlQmFja2luZ1N0b3JlcygpCiAgICAgZm9yIChIYXNoU2V0PFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExh
eWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICgqaXQpLT5wdXJnZUJhY2tp
bmdTdG9yZXMoKTsKIAotICAgIHB1cmdlUmVsZWFzZWRJbWFnZXMoKTsKLQotICAgIEFTU0VSVCgh
bV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5zaXplKCkpOwotICAgIEFTU0VSVCgh
bV9yZWxlYXNlZERpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5zaXplKCkpOworICAgIG1faW1hZ2VC
YWNraW5ncy5jbGVhcigpOwogICAgIG1fdXBkYXRlQXRsYXNlcy5jbGVhcigpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9MYXllclRyZWVDb29yZGluYXRvci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaAppbmRleCBm
NmIzOGMxYzRlMDBhZTU4ZGU1YWI0MTRhZTdlNGUzZDIwMGJlZmNmLi5lNDE2NTFhNTQxN2ZkNjc2
NzgyYzc4ZTk3MGMyNTVmYzVhYjNlMmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmgKQEAgLTIzLDYgKzIzLDcgQEAKICNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCiAKICNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
aCIKKyNpbmNsdWRlICJDb29yZGluYXRlZEltYWdlQmFja2luZy5oIgogI2luY2x1ZGUgIkxheWVy
VHJlZUNvbnRleHQuaCIKICNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiVGlt
ZXIuaCIKQEAgLTQwLDYgKzQxLDcgQEAgY2xhc3MgV2ViUGFnZTsKIGNsYXNzIExheWVyVHJlZUNv
b3JkaW5hdG9yIDogcHVibGljIExheWVyVHJlZUhvc3QsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
bGllbnQKICAgICAsIHB1YmxpYyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKICAgICAs
IHB1YmxpYyBVcGRhdGVBdGxhc0NsaWVudAorICAgICwgcHVibGljIENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nQ2xpZW50CiAgICAgLCBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3Rvcnkg
ewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyVHJlZUNvb3JkaW5hdG9yPiBj
cmVhdGUoV2ViUGFnZSopOwpAQCAtNjcsOCArNjksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIHBhdXNlUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gdHJ1ZTsgfQogICAgIHZpcnR1
YWwgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsgc2NoZWR1
bGVMYXllckZsdXNoKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRD
aGFuZ2UoKSB7IH0KLSAgICB2aXJ0dWFsIGludDY0X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9yZShX
ZWJDb3JlOjpJbWFnZSopOwotICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nU3Rv
cmUoaW50NjRfdCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChXZWJDb3JlOjpJbWFnZSopIE9WRVJSSURF
OwogCiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwg
Y29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgYmFja2luZ1NpemUpOwogICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJ
bmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwpAQCAtMTEzLDYgKzExNCwxNCBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNs
aXBSZWN0KTsKIAorICAgIC8vIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nQ2xpZW50CisgICAgdmly
dHVhbCB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQsIGNvbnN0IFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlJbnZpc2libGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUltYWdl
QmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKKworICAgIHZvaWQg
dXBkYXRlSW1hZ2VCYWNraW5ncygpOworCiAgICAgLy8gR3JhcGhpY3NMYXllckZhY3RvcnkKICAg
ICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gY3JlYXRlR3JhcGhp
Y3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50KikgT1ZFUlJJREU7CiAKQEAgLTEy
Niw3ICsxMzUsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgc3luY0Rpc3BsYXlTdGF0ZSgpOwogICAg
IHZvaWQgbG9ja0FuaW1hdGlvbnMoKTsKICAgICB2b2lkIHVubG9ja0FuaW1hdGlvbnMoKTsKLSAg
ICB2b2lkIHB1cmdlUmVsZWFzZWRJbWFnZXMoKTsKIAogICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVy
RmlyZWQoV2ViQ29yZTo6VGltZXI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+Kik7CiAKQEAgLTE0Nyw4
ICsxNTUsOCBAQCBwcml2YXRlOgogCiAgICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIqPiBtX3JlZ2lzdGVyZWRMYXllcnM7CiAgICAgVmVjdG9yPFdlYkxheWVySUQ+
IG1fZGV0YWNoZWRMYXllcnM7Ci0gICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+IG1fZGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2VSZWZDb3VudHM7Ci0gICAgVmVjdG9yPGludDY0X3Q+IG1fcmVsZWFzZWRE
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZXM7CisgICAgdHlwZWRlZiBIYXNoTWFwPENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gPiBJbWFnZUJh
Y2tpbmdNYXA7CisgICAgSW1hZ2VCYWNraW5nTWFwIG1faW1hZ2VCYWNraW5nczsKICAgICBWZWN0
b3I8T3duUHRyPFVwZGF0ZUF0bGFzPiA+IG1fdXBkYXRlQXRsYXNlczsKIAogICAgIGJvb2wgbV9u
b3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174380</attachid>
            <date>2012-11-15 02:26:58 -0800</date>
            <delta_ts>2012-11-15 03:07:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101023-20121115192424.patch</filename>
            <type>text/plain</type>
            <size>45866</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0NzMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZWQxMzNjZGRlNDA2YTNk
ZTM4ZTY1ZjhlNWZmNDExNTM0YWM1NTZiZi4uY2EwMWE0NDhmMWQ3ZGU1NzUwOTg3MjkzZDBiMGNh
MGViMjFmN2RkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk3IEBACisyMDEyLTExLTE1ICBIdWFu
ZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIENvb3JkaW5h
dGVkIEdyYXBoaWNzOiBBZGQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgdG8gbWFuYWdlIGFuIGlt
YWdlIHJlc291cmNlIHNtYXJ0bHkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDEwMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbnRlcm5hbCBSZXZpZXcgYnkgR3dhbmcgWW9vbiBId2FuZyBhbmQgSmFl
IEh5dW4gUGFyay4KKworICAgICAgICBDdXJyZW50bHksIExheWVyVHJlZUNvb3JkaW5hdG9yIG1h
bmFnZXMgY29tcG9zaXRlZCBpbWFnZXMgdXNpbmcKKyAgICAgICAgU2hhcmVhYmxlQml0bWFwLiBU
aGlzIHBhdGNoIGludHJvZHVjZXMgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgd2hpY2gKKyAgICAg
ICAgcGxheXMgYSByb2xlIGluIG1hbmFnaW5nIGNvbXBvc2l0ZWQgaW1hZ2VzLgorCisgICAgICAg
IFdlIGNhbiBnZXQgdGhlIGZvbGxvd2luZyBiZW5lZml0cy4KKyAgICAgICAgMS4gUmVtb3ZlIGEg
dGV4dHVyZSBpZiBhbiBpbWFnZSBpcyBvZmYgdGhlIHZpZXdwb3J0LgorICAgICAgICAyLiBHYXRo
ZXIgY29kZSByZWxhdGVkIHRvIGEgZGlyZWN0bHkgY29tcG9zaXRlZCBpbWFnZSBpbnRvIGEgc2lu
Z2xlIGNsYXNzLgorCisgICAgICAgIFdlIGNyZWF0ZSBvbmx5IG9uZSBDb29yZGluYXRlZEltYWdl
QmFja2luZyBwZXIgaW1hZ2UuIEZvciBleGFtcGxlLCBpbiB0aGUgbGVhdmVzCisgICAgICAgIGRl
bW8sIHdlIGNyZWF0ZSBvbmx5IDMgdGV4dHVyZXMgb2YgbGVhdmVzLgorCisgICAgICAgIFdoZW4g
YWxsIGxheWVycyBhcmUgaW52aXNpYmxlLCB3ZSB3YWl0IDMgc2Vjb25kcyB0byByZW1vdmUgdGhl
IGltYWdlLCBiZWNhdXNlIHdlCisgICAgICAgIHdhbnQgdG8gcHJldmVudCBhIHRyYW5zZm9ybSBh
bmltYXRpb24gZnJvbSBjcmVhdGluZyBhbmQgZGVzdHJveWluZyBhIHRleHR1cmUKKyAgICAgICAg
b3ZlciBhbmQgb3ZlciBhZ2Fpbi4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIFNoYXJlZC9XZWJMYXllclRyZWVJbmZvLmg6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVy
SW5mbzo6V2ViTGF5ZXJJbmZvKToKKyAgICAgICAgKFdlYkxheWVySW5mbyk6CisgICAgICAgICog
VGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlVGlsZTo6c3dhcEJ1ZmZlcnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpjcmVhdGVJbWFnZUJhY2tpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojp1cGRhdGVJbWFnZUJhY2tp
bmcpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eTo6bWFrZUltYWdlQmFja2luZ0ludmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnJlbW92ZUltYWdlQmFja2luZyk6CisgICAgICAg
ICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eS5oOgorICAgICAgICAoTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNz
YWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVSZW5kZXJlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpzZXRM
YXllclN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUlt
YWdlQmFja2luZyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVJ
bWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlUmVuZGVyZXI6Om1ha2VJbWFnZUJhY2tpbmdJbnZpc2libGUpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlUmVuZGVyZXI6OmFzc2lnbkltYWdlQmFja2luZ1RvTGF5ZXIpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlUmVsZWFzZWRJbWFnZUJhY2tpbmdz
SWZOZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6Zmx1c2hMYXll
ckNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6cHVyZ2VHTFJl
c291cmNlcyk6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJU
cmVlUmVuZGVyZXIuaDoKKyAgICAgICAgKExheWVyVHJlZVJlbmRlcmVyKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpz
ZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzeW5jSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6aW1hZ2VCYWNraW5nVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cmVsZWFzZUltYWdl
QmFja2luZ0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6YmVnaW5Db250ZW50VXBkYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAg
KENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk6CisgICAgICAgIChDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6Z2V0Q29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEltYWdlQmFja2lu
Zzo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZEltYWdlQmFja2luZzo6fkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYktp
dDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmFkZExheWVyQ2xpZW50KToKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnJlbW92ZUxheWVyQ2xpZW50KToKKyAgICAg
ICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6Om1hcmtEaXJ0eSk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjp1cGRhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6cmVsZWFzZVN1cmZhY2VJZk5lZWRlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpzZXRJbnZpc2libGVJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjppbnZpc2li
bGVUaW1lckZpcmVkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgIChDb29yZGluYXRlZEltYWdlQmFja2luZyk6CisgICAgICAgIChDb29yZGlu
YXRvcik6CisgICAgICAgIChMYXllckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nOjppZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZUltYWdlQmFja2luZ0lmTmVl
ZGVkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZUltYWdl
QmFja2luZyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjp1cGRhdGVJ
bWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6bWFr
ZUltYWdlQmFja2luZ0ludmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yOjpyZW1vdmVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVD
b29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcyk6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpwdXJnZUJhY2tpbmdTdG9yZXMpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3Jk
aW5hdG9yLmg6CisgICAgICAgIChMYXllclRyZWVDb29yZGluYXRvcik6CisKIDIwMTItMTEtMTQg
IEh1YW5nIERvbmdzdW5nICA8bHV4dGVsbGFAY29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgQ29v
cmRpbmF0ZWQgR3JhcGhpY3M6IFJlbW92ZSB0aWxlcyBvZiBhIGxheWVyIHdoZW4gdGhleSBhcmUg
b2ZmIHRoZSB2aWV3cG9ydC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMu
dHh0IGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKaW5kZXggNmU0NmY0OGE5OWUzMTJi
MzcwNjMxY2FiMjMzMjdiOTJiNTU1Y2IxZS4uMDVkN2M2ZDc5NmMxNmNhYTM4YzZlZDBmYzdhNGZk
YzQ5MDE4MGJkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysr
IGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKQEAgLTQ5NCw2ICs0OTQsNyBAQCBTRVQo
V2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5
LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5jcHAKIAorICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllci5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZFRpbGUuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkxheWVyVHJlZUluZm8uaAppbmRleCA1OGUwN2JjMDI3ZWZkNWMxYTk1OWIzYjBjNjE4
ZTRhZTA1Y2U3OGU4Li5lNmEyYWVkYTYzYTRjNWNjNDUyNjc0ZTIyNzg5ZWRkNjkwMjA0YmI1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKQEAgLTI3LDI1ICsyNywy
NyBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKIHR5cGVkZWYgdWludDMyX3QgV2ViTGF5ZXJJRDsKIGVudW0g
eyBJbnZhbGlkV2ViTGF5ZXJJRCA9IDAgfTsKIAordHlwZWRlZiB1aW50cHRyX3QgQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRDsKK2VudW0geyBJbnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCA9IDAgfTsKKwogLy8gTk9URTogV2ViTGF5ZXJJbmZvIHNob3VsZCBvbmx5IHVzZSBQT0QgdHlw
ZXMsIGFzIHRvIG1ha2Ugc2VyaWFsaXphdGlvbiBmYXN0ZXIuCiBzdHJ1Y3QgV2ViTGF5ZXJJbmZv
IHsKICAgICBXZWJMYXllckluZm8oKQogICAgICAgICA6IHJlcGxpY2EoSW52YWxpZFdlYkxheWVy
SUQpCiAgICAgICAgICwgbWFzayhJbnZhbGlkV2ViTGF5ZXJJRCkKLSAgICAgICAgLCBpbWFnZUJh
Y2tpbmdTdG9yZUlEKDApCisgICAgICAgICwgaW1hZ2VJRChJbnZhbGlkQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCkKICAgICAgICAgLCBvcGFjaXR5KDApCiAgICAgICAgICwgZmxhZ3MoMCkgeyB9
CiAKICAgICBXZWJMYXllcklEIHJlcGxpY2E7CiAgICAgV2ViTGF5ZXJJRCBtYXNrOwotICAgIGlu
dDY0X3QgaW1hZ2VCYWNraW5nU3RvcmVJRDsKKyAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
IGltYWdlSUQ7CiAKICAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHBvczsKICAgICBXZWJDb3JlOjpG
bG9hdFBvaW50M0QgYW5jaG9yUG9pbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJn
ZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCBkYWM5YjlhMjQ4OWI4YTUy
NmJlZWMzYzNkYjRmYTlmNjM2Nzc4MWQyLi43Y2QwMTZlZDk4Njk0ZjEyOTcxZTY3NzQ4YmFhOGJj
MDZiMjQ4M2NjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTM2OSw2ICszNjksNyBAQCBIRUFERVJTICs9IFwK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmggXAogICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBcCisgICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcu
aCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRUaWxlLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UYXBIaWdobGln
aHRDb250cm9sbGVyLmggXApAQCAtNzUwLDYgKzc1MSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dl
YlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwIFwKKyAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5j
cHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkVGlsZS5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhp
Z2hsaWdodENvbnRyb2xsZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlLmNwcAppbmRleCA1MWVkNmM4NTJlMWE1NDlkZmJkMjFmNDBmMWQ3ODY1YWQyNDkz
ZGI2Li4wNTRhMWU5YmQ2OWYxNGIzMjY5ZjY4YzNhZDM0ZjhhZGE3OTE0YTQ3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwCkBAIC00OSw2ICs0OSw3IEBA
IHZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlOjpzd2FwQnVmZmVycyhXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwCiAgICAgICAgIHNob3VsZFJlc2V0ID0gdHJ1ZTsKICAg
ICB9CiAKKyAgICBBU1NFUlQodGV4dHVyZU1hcHBlci0+bWF4VGV4dHVyZVNpemUoKSA+PSBzdGQ6
Om1heChtX3RpbGVSZWN0LnNpemUoKS53aWR0aCgpLCBtX3RpbGVSZWN0LnNpemUoKS5oZWlnaHQo
KSkpOwogICAgIGlmIChzaG91bGRSZXNldCkKICAgICAgICAgdGV4dHVyZS0+cmVzZXQobV90aWxl
UmVjdC5zaXplKCksIG1fc3VyZmFjZS0+ZmxhZ3MoKSAmIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9y
dHNBbHBoYSA/IEJpdG1hcFRleHR1cmU6OlN1cHBvcnRzQWxwaGEgOiAwKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcAppbmRleCBiM2QxNDBmYTc0
NGI1ZjdiZTMzY2E2MWMxMjY0Yjg0NWU5YjQ4ODkyLi4zYTk2NDk0YjNhNDBiNDZmMTBhMTQzMmVh
OTEyODcyZWE2YjhlOGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGlu
YXRvclByb3h5LmNwcApAQCAtMTI3LDE1ICsxMjcsMjQgQEAgdm9pZCBMYXllclRyZWVDb29yZGlu
YXRvclByb3h5OjpkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50
c1MKICNlbmRpZgogfQogCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmNyZWF0ZURp
cmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5LCBjb25zdCBXZWJLaXQ6OlNoYXJlYWJs
ZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUpCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6
OmNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCiB7
Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpj
cmVhdGUoaGFuZGxlKTsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJl
cjo6Y3JlYXRlSW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGtleSwgYml0bWFwKSk7CisgICAgZGlz
cGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUltYWdlQmFja2luZywg
bV9yZW5kZXJlci5nZXQoKSwgaW1hZ2VJRCkpOwogfQogCi12b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OmRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSkKK3Zv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwgY29uc3QgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxl
JiBoYW5kbGUpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6
OmRlc3Ryb3lJbWFnZSwgbV9yZW5kZXJlci5nZXQoKSwga2V5KSk7CisgICAgZGlzcGF0Y2hVcGRh
dGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZUltYWdlQmFja2luZywgbV9yZW5kZXJl
ci5nZXQoKSwgaW1hZ2VJRCwgU2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRlKGhhbmRsZSkpKTsKK30K
Kwordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjptYWtlSW1hZ2VCYWNraW5nSW52aXNp
YmxlKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBkaXNwYXRjaFVw
ZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6bWFrZUltYWdlQmFja2luZ0ludmlzaWJsZSwg
bV9yZW5kZXJlci5nZXQoKSwgaW1hZ2VJRCkpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlt
YWdlSUQpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnJl
bW92ZUltYWdlQmFja2luZywgbV9yZW5kZXJlci5nZXQoKSwgaW1hZ2VJRCkpOwogfQogCiB2b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldENvbnRlbnRzU2l6ZShjb25zdCBGbG9hdFNp
emUmIGNvbnRlbnRzU2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHkuaAppbmRleCA2NDY4MDExNjhmMjRhNzg5YjdlYjgwNzFjZjRiNmY4YTRjNGZiOTdhLi5m
OTZkNDVhMTg2MWI3NjFkMGViNjJiNWJlNjc2MmI3MzRiZWJmMzU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGlu
YXRvclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oCkBAIC02Nyw4ICs2NywxMCBAQCBwdWJs
aWM6CiAgICAgdm9pZCByZW1vdmVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQp
OwogICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQsIGNvbnN0IFNoYXJlYWJs
ZVN1cmZhY2U6OkhhbmRsZSYpOwogICAgIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXMoaW50IGF0bGFz
SUQpOwotICAgIHZvaWQgY3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCwgY29u
c3QgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYpOwotICAgIHZvaWQgZGVzdHJveURp
cmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3QpOworICAgIHZvaWQgY3JlYXRlSW1hZ2VCYWNr
aW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOworICAgIHZvaWQgdXBkYXRlSW1hZ2VCYWNr
aW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIGNvbnN0IFNoYXJlYWJsZVN1cmZhY2U6Okhh
bmRsZSYpOworICAgIHZvaWQgbWFrZUltYWdlQmFja2luZ0ludmlzaWJsZShDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEKTsKKyAgICB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEKTsKICAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvclBy
b3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3Jl
SVBDOjpNZXNzYWdlRGVjb2RlciYpOwogICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoKTsKICAgICB2
b2lkIHJlbmRlck5leHRGcmFtZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4KaW5kZXggY2QzMmVkOTgyMGEzZTRiZDQy
MThjNWJjMmEzMTQwYWQ1YjYyMzNkNy4uNjcxNTgwNmMyZmMyMjYyMmIyMGViM2Q1NDM2NWY0ZDU3
MDNjM2E2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGlu
YXRvclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0zMSw4ICszMSwxMCBAQCBtZXNzYWdlcyAtPiBMYXll
clRyZWVDb29yZGluYXRvclByb3h5IHsKICAgICBSZW1vdmVUaWxlRm9yTGF5ZXIodWludDMyX3Qg
bGF5ZXJJRCwgaW50IHRpbGVJRCkKICAgICBDcmVhdGVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCwg
V2ViS2l0OjpTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUgaGFuZGxlKQogICAgIFJlbW92ZVVwZGF0
ZUF0bGFzKGludCBhdGxhc0lEKQotICAgIENyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGlu
dDY0X3Qga2V5LCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkKLSAgICBE
ZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkpCisgICAgQ3JlYXRlSW1h
Z2VCYWNraW5nKHVpbnRwdHJfdCBpbWFnZUlEKQorICAgIFVwZGF0ZUltYWdlQmFja2luZyh1aW50
cHRyX3QgaW1hZ2VJRCwgV2ViS2l0OjpTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUgaGFuZGxlKQor
ICAgIE1ha2VJbWFnZUJhY2tpbmdJbnZpc2libGUodWludHB0cl90IGltYWdlSUQpCisgICAgUmVt
b3ZlSW1hZ2VCYWNraW5nKHVpbnRwdHJfdCBpbWFnZUlEKQogICAgIERpZFJlbmRlckZyYW1lKFdl
YkNvcmU6OkludFNpemUgY29udGVudHNTaXplLCBXZWJDb3JlOjpJbnRSZWN0IGNvdmVyZWRSZWN0
KQogICAgIERpZENoYW5nZVNjcm9sbFBvc2l0aW9uKFdlYkNvcmU6OkludFBvaW50IHBvc2l0aW9u
KQogICAgIFNldExheWVyQW5pbWF0aW9ucyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6R3JhcGhpY3NM
YXllckFuaW1hdGlvbnMgYW5pbWF0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVy
LmNwcAppbmRleCAxMWVkMDNiYjExMTQ2ZDhlNTliMjRjMzc5YTIzZWNiMzBkZDFlNzI5Li5jMGUw
MjM2ODNlMGM3OWEyODJlZThiMjllNjkzODVjNDMwMWVkYmI5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5
ZXJUcmVlUmVuZGVyZXIuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMp
IDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgICAg
Q29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCiAKICAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTI3LDcgKzI4LDYgQEAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5o
IgogI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCIKICNpbmNsdWRlICJNZXNz
YWdlSUQuaCIKLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgogI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgpAQCAtMzAyLDcgKzMwMiw3IEBAIHZvaWQgTGF5ZXJUcmVl
UmVuZGVyZXI6OnNldExheWVyU3RhdGUoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2ViTGF5ZXJJbmZv
JiBsYXllckluCiAgICAgZWxzZQogICAgICAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShpZCk7CiAK
LSAgICBhc3NpZ25JbWFnZVRvTGF5ZXIobGF5ZXIsIGxheWVySW5mby5pbWFnZUJhY2tpbmdTdG9y
ZUlEKTsKKyAgICBhc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKGxheWVyLCBsYXllckluZm8uaW1h
Z2VJRCk7CiAKICAgICAvLyBOZXZlciBtYWtlIHRoZSByb290IGxheWVyIGNsaXAuCiAgICAgbGF5
ZXItPnNldE1hc2tzVG9Cb3VuZHMobGF5ZXJJbmZvLmlzUm9vdExheWVyID8gZmFsc2UgOiBsYXll
ckluZm8ubWFza3NUb0JvdW5kcyk7CkBAIC00MTYsMzEgKzQxNiw2MyBAQCB2b2lkIExheWVyVHJl
ZVJlbmRlcmVyOjp1cGRhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29u
c3QgVGlsZVVwZAogICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFj
a2luZ1N0b3JlKTsKIH0KIAotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlSW1hZ2UoaW50
NjRfdCBpbWFnZUlELCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gd2Vha0JpdG1hcCkKK3Zv
aWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEIGltYWdlSUQpCiB7Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFw
ID0gd2Vha0JpdG1hcDsKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3Jl
PiBiYWNraW5nU3RvcmUgPSBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgp
OwotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnNldChpbWFnZUlELCBiYWNraW5nU3Rv
cmUpOwotICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlQ29udGVudHMobV90ZXh0dXJlTWFwcGVyLmdl
dCgpLCBiaXRtYXAtPmNyZWF0ZUltYWdlKCkuZ2V0KCksIEJpdG1hcFRleHR1cmU6OlVwZGF0ZUNh
bm5vdE1vZGlmeU9yaWdpbmFsSW1hZ2VEYXRhKTsKKyAgICBBU1NFUlQoIW1faW1hZ2VCYWNraW5n
cy5jb250YWlucyhpbWFnZUlEKSk7CisgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
PiBiYWNraW5nU3RvcmUoQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgpKTsKKyAgICBt
X2ltYWdlQmFja2luZ3MuYWRkKGltYWdlSUQsIGJhY2tpbmdTdG9yZS5yZWxlYXNlKCkpOwogfQog
Ci12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95SW1hZ2UoaW50NjRfdCBpbWFnZUlEKQor
dm9pZCBMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQgaW1hZ2VJRCwgUGFzc1JlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBzdXJmYWNl
KQogewotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnJlbW92ZShpbWFnZUlEKTsKKyAg
ICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKKyAgICBJbWFnZUJh
Y2tpbmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7Cisg
ICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBpdC0+dmFs
dWU7CisKKyAgICAvLyBDb29yZGluYXRlZEltYWdlQmFja2luZyBpcyByZWFsaXplZCB0byBDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZSB3aXRoIG9ubHkgb25lIHRpbGUgaW4gVUkgUHJvY2Vzcy4KKyAg
ICBiYWNraW5nU3RvcmUtPmNyZWF0ZVRpbGUoMSAvKiBpZCAqLywgMSAvKiBzY2FsZSAqLyk7Cisg
ICAgSW50UmVjdCByZWN0KEludFBvaW50Ojp6ZXJvKCksIHN1cmZhY2UtPnNpemUoKSk7CisgICAg
YmFja2luZ1N0b3JlLT5zZXRTaXplKHJlY3Quc2l6ZSgpKTsKKyAgICBiYWNraW5nU3RvcmUtPnVw
ZGF0ZVRpbGUoMSAvKiBpZCAqLywgcmVjdCwgcmVjdCwgc3VyZmFjZSwgcmVjdC5sb2NhdGlvbigp
KTsKKworICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0
b3JlKTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6bWFrZUltYWdlQmFja2luZ0ludmlz
aWJsZShDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAgQVNTRVJUKG1f
aW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlEKSk7CisgICAgSW1hZ2VCYWNraW5nTWFwOjpp
dGVyYXRvciBpdCA9IG1faW1hZ2VCYWNraW5ncy5maW5kKGltYWdlSUQpOworICAgIFJlZlB0cjxD
b29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gaXQtPnZhbHVlOworICAgIGJh
Y2tpbmdTdG9yZS0+cmVtb3ZlVGlsZSgxIC8qIGlkICovKTsKKyAgICBtX2JhY2tpbmdTdG9yZXNX
aXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVl
UmVuZGVyZXI6OmFzc2lnbkltYWdlVG9MYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgaW50NjRf
dCBpbWFnZUlEKQordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlSW1hZ2VCYWNraW5nKENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKIHsKLSAgICBpZiAoIWltYWdlSUQpIHsK
KyAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKKworICAgIC8v
IFdlIGRvbid0IHdhbnQgVGV4dHVyZU1hcHBlckxheWVyIHJlZmVycyBhIGRhbmdsaW5nIHBvaW50
ZXIuCisgICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VCYWNraW5ncy5m
aW5kKGltYWdlSUQpOworICAgIG1fcmVsZWFzZWRJbWFnZUJhY2tpbmdzLmFwcGVuZChpdC0+dmFs
dWUpOworICAgIG1faW1hZ2VCYWNraW5ncy5yZW1vdmUoaW1hZ2VJRCk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlUmVuZGVyZXI6OmFzc2lnbkltYWdlQmFja2luZ1RvTGF5ZXIoR3JhcGhpY3NMYXllciog
bGF5ZXIsIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBpZiAoaW1h
Z2VJRCA9PSBJbnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgewogICAgICAgICBsYXll
ci0+c2V0Q29udGVudHNUb01lZGlhKDApOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAg
SGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4gPjo6aXRl
cmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5maW5kKGltYWdlSUQpOwotICAg
IEFTU0VSVChpdCAhPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5lbmQoKSk7CisgICAgSW1h
Z2VCYWNraW5nTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VCYWNraW5ncy5maW5kKGltYWdlSUQp
OworICAgIEFTU0VSVChpdCAhPSBtX2ltYWdlQmFja2luZ3MuZW5kKCkpOwogICAgIGxheWVyLT5z
ZXRDb250ZW50c1RvTWVkaWEoaXQtPnZhbHVlLmdldCgpKTsKIH0KIAordm9pZCBMYXllclRyZWVS
ZW5kZXJlcjo6cmVtb3ZlUmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZOZWVkZWQoKQoreworICAgIG1f
cmVsZWFzZWRJbWFnZUJhY2tpbmdzLmNsZWFyKCk7Cit9CisKIHZvaWQgTGF5ZXJUcmVlUmVuZGVy
ZXI6OmNvbW1pdFRpbGVPcGVyYXRpb25zKCkKIHsKICAgICBIYXNoU2V0PFJlZlB0cjxDb29yZGlu
YXRlZEJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgZW5kID0gbV9iYWNraW5nU3RvcmVzV2l0aFBl
bmRpbmdCdWZmZXJzLmVuZCgpOwpAQCAtNDU5LDYgKzQ5MSw3IEBAIHZvaWQgTGF5ZXJUcmVlUmVu
ZGVyZXI6OmZsdXNoTGF5ZXJDaGFuZ2VzKCkKIAogICAgIG1fcm9vdExheWVyLT5mbHVzaENvbXBv
c2l0aW5nU3RhdGUoRmxvYXRSZWN0KCkpOwogICAgIGNvbW1pdFRpbGVPcGVyYXRpb25zKCk7Cisg
ICAgcmVtb3ZlUmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZOZWVkZWQoKTsKIAogICAgIC8vIFRoZSBw
ZW5kaW5nIHRpbGVzIHN0YXRlIGlzIG9uIGl0cyB3YXkgZm9yIHRoZSBzY3JlZW4sIHRlbGwgdGhl
IHdlYiBwcm9jZXNzIHRvIHJlbmRlciB0aGUgbmV4dCBvbmUuCiAgICAgZGlzcGF0Y2hPbk1haW5U
aHJlYWQoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbmRlck5leHRGcmFtZSwgdGhpcykpOwpA
QCAtNTE1LDcgKzU0OCw3IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnB1cmdlR0xSZXNvdXJj
ZXMoKQogICAgIGlmIChsYXllcikKICAgICAgICAgbGF5ZXItPmNsZWFyQmFja2luZ1N0b3Jlc1Jl
Y3Vyc2l2ZSgpOwogCi0gICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuY2xlYXIoKTsKKyAg
ICBtX2ltYWdlQmFja2luZ3MuY2xlYXIoKTsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKICAg
ICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNsZWFyKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRl
cmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVSZW5kZXJlci5oCmluZGV4IDJlZjAxZWNiMTgwNWI4OGRjYWRhN2RmZTA4ZmFhM2VlOWRi
ZGMwYjkuLjI0NzczOGVjYjFjNTZkNWRmZTI0MmFhYzBkZDNlMDNjNDMwZjRkM2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJl
ZVJlbmRlcmVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuaApAQCAtODksOCArODksMTAgQEAgcHVibGljOgogICAg
IHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQpOwogICAgIHZvaWQgdXBkYXRlVGlsZShX
ZWJMYXllcklELCBpbnQsIGNvbnN0IFRpbGVVcGRhdGUmKTsKICAgICB2b2lkIGZsdXNoTGF5ZXJD
aGFuZ2VzKCk7Ci0gICAgdm9pZCBjcmVhdGVJbWFnZShpbnQ2NF90LCBQYXNzUmVmUHRyPFNoYXJl
YWJsZUJpdG1hcD4pOwotICAgIHZvaWQgZGVzdHJveUltYWdlKGludDY0X3QpOworICAgIHZvaWQg
Y3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOworICAgIHZvaWQg
dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8
U2hhcmVhYmxlU3VyZmFjZT4pOworICAgIHZvaWQgbWFrZUltYWdlQmFja2luZ0ludmlzaWJsZShD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKICAgICB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhX
ZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOwogICAg
IHZvaWQgc2V0QW5pbWF0aW9uc0xvY2tlZChib29sKTsKIApAQCAtMTE5LDcgKzEyMSw4IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBkaXNwYXRjaE9uTWFpblRocmVhZChjb25zdCBGdW5jdGlvbjx2b2lk
KCk+Jik7CiAgICAgdm9pZCBhZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKCk7CiAKLSAgICB2
b2lkIGFzc2lnbkltYWdlVG9MYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgaW50NjRfdCBp
bWFnZUlEKTsKKyAgICB2b2lkIGFzc2lnbkltYWdlQmFja2luZ1RvTGF5ZXIoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciosIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOworICAgIHZvaWQgcmVtb3Zl
UmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZOZWVkZWQoKTsKICAgICB2b2lkIGVuc3VyZVJvb3RMYXll
cigpOwogICAgIHZvaWQgZW5zdXJlTGF5ZXIoV2ViTGF5ZXJJRCk7CiAgICAgdm9pZCBjb21taXRU
aWxlT3BlcmF0aW9ucygpOwpAQCAtMTM5LDcgKzE0MiwxMSBAQCBwcml2YXRlOgogICAgIE11dGV4
IG1fcmVuZGVyUXVldWVNdXRleDsKIAogICAgIE93blB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
PiBtX3RleHR1cmVNYXBwZXI7Ci0gICAgSGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8V2ViQ29yZTo6
VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4gPiBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlczsK
KworICAgIHR5cGVkZWYgSGFzaE1hcDxDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBSZWZQdHI8
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID4gSW1hZ2VCYWNraW5nTWFwOworICAgIEltYWdlQmFj
a2luZ01hcCBtX2ltYWdlQmFja2luZ3M7CisgICAgVmVjdG9yPFJlZlB0cjxDb29yZGluYXRlZEJh
Y2tpbmdTdG9yZT4gPiBtX3JlbGVhc2VkSW1hZ2VCYWNraW5nczsKKwogICAgIEhhc2hTZXQ8UmVm
UHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiA+IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5n
QnVmZmVyczsKIAogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKaW5kZXggYjUx
MjlmYzMxMWYzZGFjNDA0NGMyOTc5YjA5NWEyMjE5MDYyOTE3YS4uNGFiYTMwYWFkMzAzNzBiYzNm
Njg1ZGMyZjMyYjQ4ZDI1MTE4NmYxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisgQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCiAKICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTM1MSw4ICszNTIsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKICAgICAgICAgLy8gVGhpcyBjb2RlIG1h
a2VzIHRoZSBhc3N1bXB0aW9uIHRoYXQgcG9pbnRlciBlcXVhbGl0eSBvbiBhIE5hdGl2ZUltYWdl
UHRyIGlzIGEgdmFsaWQgd2F5IHRvIHRlbGwgaWYgdGhlIGltYWdlIGlzIGNoYW5nZWQuCiAgICAg
ICAgIC8vIFRoaXMgYXNzdW1wdGlvbiBpcyB0cnVlIGluIFF0LCBHVEsgYW5kIEVGTC4KICAgICAg
ICAgTmF0aXZlSW1hZ2VQdHIgbmV3TmF0aXZlSW1hZ2VQdHIgPSBpbWFnZS0+bmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKTsKLSAgICAgICAgaWYgKCFuZXdOYXRpdmVJbWFnZVB0cikKLSAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKG5ld05hdGl2ZUltYWdlUHRyKTsKIAogICAg
ICAgICBpZiAobmV3TmF0aXZlSW1hZ2VQdHIgPT0gbV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIp
CiAgICAgICAgICAgICByZXR1cm47CkBAIC00NzMsMTYgKzQ3MywyNSBAQCB2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6c3luY0ltYWdlQmFja2luZygpCiAgICAgICAgIHJldHVybjsKICAg
ICBtX3Nob3VsZFN5bmNJbWFnZUJhY2tpbmcgPSBmYWxzZTsKIAotICAgIHJlbGVhc2VJbWFnZUJh
Y2tpbmdJZk5lZWRlZCgpOwotCiAgICAgaWYgKG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyKSB7
CiAgICAgICAgIEFTU0VSVCghbV9tYWluQmFja2luZ1N0b3JlKTsKICAgICAgICAgQVNTRVJUKG1f
Y29tcG9zaXRlZEltYWdlKTsKIAotICAgICAgICBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9y
ZUlEID0gbV9jb29yZGluYXRvci0+YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShtX2NvbXBvc2l0ZWRJ
bWFnZS5nZXQoKSk7Ci0gICAgfQorICAgICAgICBib29sIGltYWdlSW5zdGFuY2VSZXBsYWNlZCA9
IG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgJiYgKG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmct
PmlkKCkgIT0gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmdldENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQobV9jb21wb3NpdGVkSW1hZ2UuZ2V0KCkpKTsKKyAgICAgICAgaWYgKGltYWdlSW5zdGFu
Y2VSZXBsYWNlZCkKKyAgICAgICAgICAgIHJlbGVhc2VJbWFnZUJhY2tpbmdJZk5lZWRlZCgpOwor
CisgICAgICAgIGlmICghbV9jb29yZGluYXRlZEltYWdlQmFja2luZykgeworICAgICAgICAgICAg
bV9jb29yZGluYXRlZEltYWdlQmFja2luZyA9IG1fY29vcmRpbmF0b3ItPmNyZWF0ZUltYWdlQmFj
a2luZ0lmTmVlZGVkKG1fY29tcG9zaXRlZEltYWdlLmdldCgpKTsKKyAgICAgICAgICAgIG1fY29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmctPmFkZExheWVyQ2xpZW50KHRoaXMpOworICAgICAgICAgICAg
bV9sYXllckluZm8uaW1hZ2VJRCA9IG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmctPmlkKCk7Cisg
ICAgICAgIH0KIAotICAgIC8vIFRoaXMgbWV0aG9kIGNoYW5nZXMgbV9sYXllckluZm8uaW1hZ2VC
YWNraW5nU3RvcmVJRC4KKyAgICAgICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+bWFya0Rp
cnR5KCk7CisgICAgfSBlbHNlCisgICAgICAgIHJlbGVhc2VJbWFnZUJhY2tpbmdJZk5lZWRlZCgp
OworCisgICAgLy8gc3luY0ltYWdlQmFja2luZygpIGNoYW5nZWQgbV9sYXllckluZm8uaW1hZ2VJ
RC4KICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiB9CiAKQEAgLTU1NywxNCArNTY2LDIxIEBA
IHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCkKICAgICBzeW5jQ2FudmFzKCk7CiB9CiAKK2Jvb2wgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjppbWFnZUJhY2tpbmdWaXNpYmxlKCkKK3sKKyAgICBBU1NFUlQobV9jb29y
ZGluYXRlZEltYWdlQmFja2luZyk7CisgICAgcmV0dXJuIHRpbGVkQmFja2luZ1N0b3JlVmlzaWJs
ZVJlY3QoKS5pbnRlcnNlY3RzKGNvbnRlbnRzUmVjdCgpKTsKK30KKwogdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnJlbGVhc2VJbWFnZUJhY2tpbmdJZk5lZWRlZCgpCiB7Ci0gICAgaWYg
KCFtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKQorICAgIGlmICghbV9jb29yZGluYXRl
ZEltYWdlQmFja2luZykKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKG1fY29vcmRpbmF0
b3IpOwotICAgIG1fY29vcmRpbmF0b3ItPnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShtX2xheWVy
SW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKLSAgICBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdT
dG9yZUlEID0gMDsKKyAgICBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLT5yZW1vdmVMYXllckNs
aWVudCh0aGlzKTsKKyAgICBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNsZWFyKCk7CisgICAg
bV9sYXllckluZm8uaW1hZ2VJRCA9IEludmFsaWRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEOwog
fQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWlu
dEJlZ2luKCkKQEAgLTY2OCw3ICs2ODQsNyBAQCBDb2xvciBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKCkgY29uc3QKICAgICByZXR1cm4g
Y29udGVudHNPcGFxdWUoKSA/IENvbG9yOjp3aGl0ZSA6IENvbG9yOjp0cmFuc3BhcmVudDsKIH0K
IAotUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUs
IGludCYgYXRsYXMsIFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpCitQYXNzT3duUHRyPEdyYXBo
aWNzQ29udGV4dD4gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpiZWdpbkNvbnRlbnRVcGRhdGUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgaW50JiBhdGxhcywgSW50UG9pbnQmIG9mZnNldCkKIHsKICAg
ICBpZiAoIW1fY29vcmRpbmF0b3IpCiAgICAgICAgIHJldHVybiBQYXNzT3duUHRyPFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dD4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKaW5kZXggOWMzMWUwNWE2MGU2ZTU2MWMyZmI0ZjY2
MGIxZDk1MzBiZWUzNGY0Yy4uNjg4YTM1OTMyMzliZGQyMDkwNjQ1NTRhMTY5ZWQ4NTA2YTc3M2Zl
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpZm5kZWYgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyX2gKICNkZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyX2gKIAorI2luY2x1ZGUg
IkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRUaWxlLmgi
CiAjaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgpA
QCAtNTYsOCArNTcsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qg
dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgbGF5ZXJU
cmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgaW50NjRfdCBh
ZG9wdEltYWdlQmFja2luZ1N0b3JlKFdlYkNvcmU6OkltYWdlKikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCkgPSAwOworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZO
ZWVkZWQoV2ViQ29yZTo6SW1hZ2UqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0
YXRlKFdlYkxheWVySUQsIGNvbnN0IFdlYkxheWVySW5mbyYpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgc3luY0xheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+
JikgPSAwOwogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKQEAgLTc5LDYgKzc5LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgOiBwdWJsaWMg
R3JhcGhpY3NMYXllcgogICAgICwgcHVibGljIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50CisgICAg
LCBwdWJsaWMgV2ViS2l0OjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6TGF5ZXJDbGllbnQKICAg
ICAsIHB1YmxpYyBXZWJLaXQ6OkNvb3JkaW5hdGVkVGlsZUNsaWVudAogICAgICwgcHVibGljIEdy
YXBoaWNzTGF5ZXJBbmltYXRpb246OkNsaWVudCB7CiBwdWJsaWM6CkBAIC0xODQsNiArMTg1LDkg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZUJhY2tpbmdTdG9yZSgpOwogICAgIHZvaWQgcmVs
ZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCk7CiAKKyAgICAvLyBDb29yZGluYXRlZEltYWdlQmFj
a2luZzo6TGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VCYWNraW5nVmlzaWJsZSgp
IE9WRVJSSURFOworCiAgICAgYm9vbCBzZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zv
cm1zKCk7CiAgICAgdm9pZCBhZGp1c3RDb250ZW50c1NjYWxlKCk7CiAKQEAgLTIyMiw2ICsyMjYs
NyBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPEltYWdlPiBtX2NvbXBvc2l0ZWRJbWFnZTsKICAg
ICBOYXRpdmVJbWFnZVB0ciBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0cjsKKyAgICBSZWZQdHI8
V2ViS2l0OjpDb29yZGluYXRlZEltYWdlQmFja2luZz4gbV9jb29yZGluYXRlZEltYWdlQmFja2lu
ZzsKIAogICAgIFBsYXRmb3JtTGF5ZXIqIG1fY2FudmFzUGxhdGZvcm1MYXllcjsKICAgICBUaW1l
cjxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI+IG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVyOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmMwYTI5NjgzY2VhMzYyOGI4ZmM5MTc3MGVmNTVlNTdhMjAwNjEwNWIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAKQEAgLTAsMCArMSwx
NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpnZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKElt
YWdlKiBpbWFnZSkKK3sKKyAgICAvLyBDb29yZGluYXRlZEltYWdlQmFja2luZyBrZWVwcyBhIFJl
ZlB0cjxJbWFnZT4gbWVtYmVyLCBzbyB0aGUgc2FtZSBJbWFnZSBwb2ludGVyIGNhbiBub3QgcmVm
ZXIgdHdvIGRpZmZlcmVudCBpbnN0YW5jZXMgdW50aWwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcg
cmVsZWFzZXMgdGhlIG1lbWJlci4KKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEPihpbWFnZSk7Cit9CisKK1Bhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmc+IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjcmVhdGUoQ29vcmRpbmF0b3Iq
IGNsaWVudCwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDb29yZGluYXRlZEltYWdlQmFja2luZyhjbGllbnQsIGltYWdlKSk7Cit9CisKK0Nvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRlZEltYWdlQmFja2luZyhDb29yZGluYXRvciog
Y2xpZW50LCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSkKKyAgICA6IG1fY29vcmRpbmF0b3IoY2xp
ZW50KQorICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICAsIG1faWQoZ2V0Q29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRChtX2ltYWdlLmdldCgpKSkKKyAgICAsIG1faW52aXNpYmxlVGltZXIodGhpcywg
JkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjppbnZpc2libGVUaW1lckZpcmVkKQorICAgICwgbV9p
c0RpcnR5KGZhbHNlKQorICAgICwgbV9pc1Zpc2libGUodHJ1ZSkKK3sKKyAgICAvLyBGSVhNRTog
V2Ugd291bGQgbmVlZCB0byBkZWNvZGUgYSBzbWFsbCBpbWFnZSBkaXJlY3RseSBpbnRvIGEgR3Jh
cGhpY3NTdXJmYWNlLgorICAgIC8vIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAxNDI2CisKKyAgICBt
X2Nvb3JkaW5hdG9yLT5jcmVhdGVJbWFnZUJhY2tpbmcoaWQoKSk7Cit9CisKK0Nvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nOjp+Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoKQoreworfQorCit2b2lkIENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nOjphZGRMYXllckNsaWVudChMYXllckNsaWVudCogbGF5ZXJD
bGllbnQpCit7CisgICAgQVNTRVJUKCFtX2xheWVyQ2xpZW50cy5jb250YWlucyhsYXllckNsaWVu
dCkpOworICAgIG1fbGF5ZXJDbGllbnRzLmFwcGVuZChsYXllckNsaWVudCk7Cit9CisKK3ZvaWQg
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnJlbW92ZUxheWVyQ2xpZW50KExheWVyQ2xpZW50KiBs
YXllckNsaWVudCkKK3sKKyAgICBzaXplX3QgcG9zaXRpb24gPSBtX2xheWVyQ2xpZW50cy5maW5k
KGxheWVyQ2xpZW50KTsKKyAgICBBU1NFUlQocG9zaXRpb24gIT0gbm90Rm91bmQpOworICAgIG1f
bGF5ZXJDbGllbnRzLnJlbW92ZShwb3NpdGlvbik7CisKKyAgICBpZiAobV9sYXllckNsaWVudHMu
aXNFbXB0eSgpKQorICAgICAgICBtX2Nvb3JkaW5hdG9yLT5yZW1vdmVJbWFnZUJhY2tpbmcoaWQo
KSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6Om1hcmtEaXJ0eSgpCit7Cisg
ICAgbV9pc0RpcnR5ID0gdHJ1ZTsKK30KKwordm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6
dXBkYXRlKCkKK3sKKyAgICByZWxlYXNlU3VyZmFjZUlmTmVlZGVkKCk7CisKKyAgICBib29sIGNo
YW5nZWRUb1Zpc2libGUgPSBzZXRJbnZpc2libGVJZk5lZWRlZCgpOworICAgIGJvb2wgbmVlZFRv
VXBkYXRlID0gY2hhbmdlZFRvVmlzaWJsZSB8fCAobV9pc1Zpc2libGUgJiYgbV9pc0RpcnR5KTsK
KyAgICBpZiAoIW5lZWRUb1VwZGF0ZSkgeworICAgICAgICBtX2lzRGlydHkgPSBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc3VyZmFjZSA9IFNoYXJlYWJsZVN1cmZhY2U6
OmNyZWF0ZShtX2ltYWdlLT5zaXplKCksIG1faW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkg
PyBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEgOiBTaGFyZWFibGVCaXRtYXA6Ok5vRmxh
Z3MsIFNoYXJlYWJsZVN1cmZhY2U6OlN1cHBvcnRzR3JhcGhpY3NTdXJmYWNlKTsKKyAgICBtX2hh
bmRsZSA9IGFkb3B0UHRyKG5ldyBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUoKSk7CisKKyAgICBp
ZiAoIW1fc3VyZmFjZS0+Y3JlYXRlSGFuZGxlKCptX2hhbmRsZSkpIHsKKyAgICAgICAgcmVsZWFz
ZVN1cmZhY2VJZk5lZWRlZCgpOworICAgICAgICBtX2lzRGlydHkgPSBmYWxzZTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEludFJlY3QgcmVjdChJbnRQb2ludDo6emVybygpLCBtX2lt
YWdlLT5zaXplKCkpOworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGNvbnRleHQgPSBtX3N1
cmZhY2UtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dChyZWN0KTsKKyAgICBjb250ZXh0LT5kcmF3SW1h
Z2UobV9pbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgcmVjdCwgcmVjdCk7CisKKyAg
ICBtX2Nvb3JkaW5hdG9yLT51cGRhdGVJbWFnZUJhY2tpbmcoaWQoKSwgKm1faGFuZGxlKTsKKyAg
ICBtX2lzRGlydHkgPSBmYWxzZTsKK30KKwordm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6
cmVsZWFzZVN1cmZhY2VJZk5lZWRlZCgpCit7CisgICAgLy8gV2UgbXVzdCBrZWVwIG1fc3VyZmFj
ZSB1bnRpbCBVSSBQcm9jZXNzIHJlYWRzIG1fc3VyZmFjZS4KKyAgICAvLyBJZiBtX3N1cmZhY2Ug
ZXhpc3RzLCBpdCB3YXMgY3JlYXRlZCBpbiB0aGUgcHJldmlvdXMgdXBkYXRlLgorICAgIG1faGFu
ZGxlLmNsZWFyKCk7CisgICAgbV9zdXJmYWNlLmNsZWFyKCk7Cit9CisKK3N0YXRpYyBjb25zdCBk
b3VibGUgSW52aXNpYmxlVGltZXJJbnRlcnZhbCA9IDM7CisKK2Jvb2wgQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmc6OnNldEludmlzaWJsZUlmTmVlZGVkKCkKK3sKKyAgICBib29sIHByZXZpb3VzSXNW
aXNpYmxlID0gbV9pc1Zpc2libGU7CisKKyAgICBtX2lzVmlzaWJsZSA9IGZhbHNlOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9sYXllckNsaWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgaWYgKG1fbGF5ZXJDbGllbnRzW2ldLT5pbWFnZUJhY2tpbmdWaXNpYmxlKCkpIHsKKyAgICAg
ICAgICAgIG1faXNWaXNpYmxlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorCisgICAgYm9vbCBjaGFuZ2VkVG9JbnZpc2libGUgPSBwcmV2aW91c0lzVmlzaWJs
ZSAmJiAhbV9pc1Zpc2libGU7CisgICAgaWYgKGNoYW5nZWRUb0ludmlzaWJsZSkgeworICAgICAg
ICBBU1NFUlQoIW1faW52aXNpYmxlVGltZXIuaXNBY3RpdmUoKSk7CisgICAgICAgIG1faW52aXNp
YmxlVGltZXIuc3RhcnRPbmVTaG90KEludmlzaWJsZVRpbWVySW50ZXJ2YWwpOworICAgIH0KKwor
ICAgIGJvb2wgY2hhbmdlZFRvVmlzaWJsZSA9ICFwcmV2aW91c0lzVmlzaWJsZSAmJiBtX2lzVmlz
aWJsZTsKKworICAgIGlmIChtX2lzVmlzaWJsZSAmJiBtX2ludmlzaWJsZVRpbWVyLmlzQWN0aXZl
KCkpIHsKKyAgICAgICAgbV9pbnZpc2libGVUaW1lci5zdG9wKCk7CisgICAgICAgIGNoYW5nZWRU
b1Zpc2libGUgPSBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gY2hhbmdlZFRvVmlzaWJsZTsK
K30KKwordm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6aW52aXNpYmxlVGltZXJGaXJlZChX
ZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZEltYWdlQmFja2luZz4qKQoreworICAgIG1fY29vcmRp
bmF0b3ItPm1ha2VJbWFnZUJhY2tpbmdJbnZpc2libGUoaWQoKSk7Cit9CisKK30KKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNzI5OGM4ZWIyZjI5ODhhYzQ3YTI5ZTU3ZDcyMTk4N2FjYmQ0NzRlNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgKQEAgLTAsMCArMSw5NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdf
aAorI2RlZmluZSBDb29yZGluYXRlZEltYWdlQmFja2luZ19oCisKKyNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVTdXJm
YWNlLmgiCisjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
VGltZXIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nIDogcHVibGljIFJlZkNvdW50ZWQ8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IHsKK3B1Ymxp
YzoKKyAgICBjbGFzcyBDb29yZGluYXRvciB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFs
IHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpID0gMDsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdl
QmFja2luZ0lELCBjb25zdCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmKSA9IDA7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBtYWtlSW1hZ2VCYWNraW5nSW52aXNpYmxlKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEKSA9IDA7CisgICAgfTsKKworICAgIGNsYXNzIExheWVy
Q2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgYm9vbCBpbWFnZUJhY2tpbmdW
aXNpYmxlKCkgPSAwOworICAgIH07CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRl
ZEltYWdlQmFja2luZz4gY3JlYXRlKENvb3JkaW5hdG9yKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJ
bWFnZT4pOworICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKCk7CisKKyAgICBz
dGF0aWMgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBnZXRDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEKFdlYkNvcmU6OkltYWdlKik7CisgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpZCgp
IGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKworICAgIHZvaWQgYWRkTGF5ZXJDbGllbnQoTGF5ZXJD
bGllbnQqKTsKKyAgICB2b2lkIHJlbW92ZUxheWVyQ2xpZW50KExheWVyQ2xpZW50Kik7CisKKyAg
ICAvLyBXaGVuIGFuIGFuaW1hdGVkIGdpZiBpcyBwcm9ncmVzc2VkLCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIgY2FsbHMgaW52YWxpZGF0ZSgpLgorICAgIHZvaWQgbWFya0RpcnR5KCk7CisKKyAg
ICAvLyBDcmVhdGUsIHJlbW92ZSBvciB1cGRhdGUgaXRzIGJhY2tpbmcuCisgICAgdm9pZCB1cGRh
dGUoKTsKKworcHJpdmF0ZToKKyAgICBDb29yZGluYXRlZEltYWdlQmFja2luZyhDb29yZGluYXRv
ciosIFBhc3NSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+KTsKKworICAgIHZvaWQgcmVsZWFzZVN1cmZh
Y2VJZk5lZWRlZCgpOworICAgIGJvb2wgc2V0SW52aXNpYmxlSWZOZWVkZWQoKTsKKyAgICB2b2lk
IGludmlzaWJsZVRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmc+Kik7CisKKyAgICBDb29yZGluYXRvciogbV9jb29yZGluYXRvcjsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6SW1hZ2U+IG1faW1hZ2U7CisgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBtX2lk
OworICAgIFZlY3RvcjxMYXllckNsaWVudCo+IG1fbGF5ZXJDbGllbnRzOworCisgICAgUmVmUHRy
PFNoYXJlYWJsZVN1cmZhY2U+IG1fc3VyZmFjZTsKKyAgICBPd25QdHI8U2hhcmVhYmxlU3VyZmFj
ZTo6SGFuZGxlPiBtX2hhbmRsZTsKKworICAgIFdlYkNvcmU6OlRpbWVyPENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nPiBtX2ludmlzaWJsZVRpbWVyOworCisgICAgYm9vbCBtX2lzRGlydHk7CisgICAg
Ym9vbCBtX2lzVmlzaWJsZTsKKworfTsKKworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBDb29yZGlu
YXRlZEltYWdlQmFja2luZ19ICmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVDb29yZGluYXRvci5jcHAKaW5kZXggYmI5ZWIzYjViNzg1MGI3MGY1MjU4ZThkYWY2YzVk
ZmE5ZjY0MDdmNy4uMmZmMjE2M2VlM2FkNTIxNjZmNDQ1ODNjNjQ5MDBjZTZjNDMxNDUxZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNw
cApAQCAtMjY4LDcgKzI2OCw3IEBAIGJvb2wgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmZsdXNoUGVu
ZGluZ0xheWVyQ2hhbmdlcygpCiAKICAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0
YXRlRm9yVGhpc0xheWVyT25seSgpOwogCi0gICAgcHVyZ2VSZWxlYXNlZEltYWdlcygpOworICAg
IGZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKTsKIAogICAgIGlmIChtX3Nob3VsZFN5
bmNSb290TGF5ZXIpIHsKICAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRy
ZWVDb29yZGluYXRvclByb3h5OjpTZXRSb290Q29tcG9zaXRpbmdMYXllcih0b0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmlkKCkpKTsKQEAgLTQzOSwxNSArNDM5
LDYgQEAgdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGlkUGVyZm9ybVNjaGVkdWxlZExheWVy
Rmx1c2goKQogICAgIH0KIH0KIAotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cHVyZ2VSZWxl
YXNlZEltYWdlcygpCi17Ci0gICAgaWYgKCFtX2lzUHVyZ2luZykgewotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fcmVsZWFzZWREaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuc2l6ZSgp
OyArK2kpCi0gICAgICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6OkRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShtX3JlbGVhc2Vk
RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzW2ldKSk7Ci0gICAgfQotICAgIG1fcmVsZWFzZWREaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZXMuY2xlYXIoKTsKLX0KLQogdm9pZCBMYXllclRyZWVDb29yZGlu
YXRvcjo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoVGltZXI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+KikK
IHsKICAgICBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOwpAQCAtNDc1LDc5ICs0NjYsNTUg
QEAgdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKQog
ICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IG51bGxwdHI7CiB9CiAKLWludDY0X3QgTGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoSW1hZ2UqIGltYWdlKQorUGFzc1Jl
ZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0
ZUltYWdlQmFja2luZ0lmTmVlZGVkKEltYWdlKiBpbWFnZSkKIHsKLSAgICBpZiAoIWltYWdlKQot
ICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7Ci0KLSAgICBpbnQ2NF90IGtleSA9IDA7
Ci0KLSNpZiBQTEFURk9STShRVCkKLSAgICBRUGl4bWFwKiBuYXRpdmVJbWFnZSA9IGltYWdlLT5u
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotCi0gICAgaWYgKCFuYXRpdmVJbWFnZSkKLSAg
ICAgICAgcmV0dXJuIEludmFsaWRXZWJMYXllcklEOwotCi0gICAga2V5ID0gbmF0aXZlSW1hZ2Ut
PmNhY2hlS2V5KCk7Ci0jZWxpZiBVU0UoQ0FJUk8pCi0gICAgTmF0aXZlSW1hZ2VDYWlybyogbmF0
aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAo
IW5hdGl2ZUltYWdlKQotICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7Ci0gICAgLy8g
VGhpcyBjYW4gYmUgc2FmZWx5IGRvbmUgc2luY2Ugd2Ugb3duIHRoZSByZWZlcmVuY2UuCi0gICAg
Ly8gQSBjb3JyZXNwb25kaW5nIGNhaXJvX3N1cmZhY2VfZGVzdHJveSgpIGlzIGVuc3VyZWQgaW4g
cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKCkuCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBjYWlyb1N1
cmZhY2UgPSBjYWlyb19zdXJmYWNlX3JlZmVyZW5jZShuYXRpdmVJbWFnZS0+c3VyZmFjZSgpKTsK
LSAgICBrZXkgPSByZWludGVycHJldF9jYXN0PGludDY0X3Q+KGNhaXJvU3VyZmFjZSk7Ci0jZW5k
aWYKLQotICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5
Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5KTsKLQotICAgIGlmIChpdCAhPSBtX2Rp
cmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKSB7Ci0gICAgICAgICsrKGl0LT52
YWx1ZSk7Ci0gICAgICAgIHJldHVybiBrZXk7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgaWYgd2Ug
d2VyZSBnb2luZyB0byByZWxlYXNlIHRoaXMgaW1hZ2UgZHVyaW5nIHRoZSBuZXh0IGZsdXNoLgot
ICAgIHNpemVfdCByZWxlYXNlZEluZGV4ID0gbV9yZWxlYXNlZERpcmVjdGx5Q29tcG9zaXRlZElt
YWdlcy5maW5kKGtleSk7Ci0gICAgaWYgKHJlbGVhc2VkSW5kZXggPT0gbm90Rm91bmQpIHsKLSAg
ICAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpj
cmVhdGVTaGFyZWFibGUoaW1hZ2UtPnNpemUoKSwgKGltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBo
YSgpID8gU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhIDogMCkpOwotICAgICAgICB7Ci0g
ICAgICAgICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRl
eHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwotICAgICAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50
Ojp6ZXJvKCkpOwotICAgICAgICB9Ci0gICAgICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhh
bmRsZTsKLSAgICAgICAgYml0bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKLSAgICAgICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpDcmVhdGVE
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZShrZXksIGhhbmRsZSkpOworICAgIENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQgaW1hZ2VJRCA9IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpnZXRDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEKGltYWdlKTsKKyAgICBJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7CisgICAgUmVmUHRyPENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nPiBpbWFnZUJhY2tpbmc7CisgICAgaWYgKGl0ID09IG1faW1hZ2VCYWNr
aW5ncy5lbmQoKSkgeworICAgICAgICBpbWFnZUJhY2tpbmcgPSBDb29yZGluYXRlZEltYWdlQmFj
a2luZzo6Y3JlYXRlKHRoaXMsIGltYWdlKTsKKyAgICAgICAgbV9pbWFnZUJhY2tpbmdzLmFkZChp
bWFnZUlELCBpbWFnZUJhY2tpbmcpOwogICAgIH0gZWxzZQotICAgICAgICBtX3JlbGVhc2VkRGly
ZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnJlbW92ZShyZWxlYXNlZEluZGV4KTsKKyAgICAgICAgaW1h
Z2VCYWNraW5nID0gaXQtPnZhbHVlOwogCi0gICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJl
ZkNvdW50cy5hZGQoa2V5LCAxKTsKLSAgICByZXR1cm4ga2V5OworICAgIHJldHVybiBpbWFnZUJh
Y2tpbmc7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbGVhc2VJbWFnZUJhY2tp
bmdTdG9yZShpbnQ2NF90IGtleSkKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZUlt
YWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCiB7Ci0gICAgaWYg
KCFrZXkpCi0gICAgICAgIHJldHVybjsKLSAgICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJh
dG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7Ci0g
ICAgaWYgKGl0ID09IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpCi0g
ICAgICAgIHJldHVybjsKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpDcmVhdGVJbWFn
ZUJhY2tpbmcoaW1hZ2VJRCkpOworfQogCi0gICAgaXQtPnZhbHVlLS07Cit2b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yOjp1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCBpbWFnZUlELCBjb25zdCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKK3sKKyAg
ICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpVcGRhdGVJbWFnZUJhY2tpbmcoaW1hZ2VJRCwg
aGFuZGxlKSk7Cit9CiAKLSAgICBpZiAoaXQtPnZhbHVlKQotICAgICAgICByZXR1cm47Cit2b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yOjptYWtlSW1hZ2VCYWNraW5nSW52aXNpYmxlKENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRy
dWU7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclBy
b3h5OjpNYWtlSW1hZ2VCYWNraW5nSW52aXNpYmxlKGltYWdlSUQpKTsKK30KIAotI2lmIFVTRShD
QUlSTykKLSAgICAvLyBDb21wbGVtZW50IHRoZSByZWZlcmVuY2luZyBpbiBhZG9wdEltYWdlQmFj
a2luZ1N0b3JlKCkuCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBjYWlyb1N1cmZhY2UgPSByZWludGVy
cHJldF9jYXN0PGNhaXJvX3N1cmZhY2VfdCo+KGtleSk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9kZXN0
cm95KGNhaXJvU3VyZmFjZSk7Ci0jZW5kaWYKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJl
bW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7Cisg
ICAgaWYgKG1faXNQdXJnaW5nKQorICAgICAgICByZXR1cm47CiAKLSAgICBtX2RpcmVjdGx5Q29t
cG9zaXRlZEltYWdlUmVmQ291bnRzLnJlbW92ZShpdCk7Ci0gICAgbV9yZWxlYXNlZERpcmVjdGx5
Q29tcG9zaXRlZEltYWdlcy5hcHBlbmQoa2V5KTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsK
KyAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKKyAgICBtX3No
b3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV9pbWFnZUJhY2tpbmdzLnJlbW92ZShpbWFnZUlE
KTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHk6OlJlbW92ZUltYWdlQmFja2luZyhpbWFnZUlEKSk7CiB9CiAKK3ZvaWQgTGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OmZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKQoreworICAgIEltYWdl
QmFja2luZ01hcDo6aXRlcmF0b3IgZW5kID0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpOworICAgIGZv
ciAoSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdGVyID0gbV9pbWFnZUJhY2tpbmdzLmJlZ2lu
KCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgIGl0ZXItPnZhbHVlLT51cGRhdGUoKTsK
K30KIAogdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChj
b25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIC8qIHRpbWUgKi8pCiB7CkBAIC02
OTcsMTAgKzY2NCw3IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnB1cmdlQmFja2luZ1N0
b3JlcygpCiAgICAgZm9yIChIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cio+OjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCiAgICAgICAgICgqaXQpLT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsKIAotICAgIHB1cmdl
UmVsZWFzZWRJbWFnZXMoKTsKLQotICAgIEFTU0VSVCghbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZVJlZkNvdW50cy5zaXplKCkpOwotICAgIEFTU0VSVCghbV9yZWxlYXNlZERpcmVjdGx5Q29tcG9z
aXRlZEltYWdlcy5zaXplKCkpOworICAgIG1faW1hZ2VCYWNraW5ncy5jbGVhcigpOwogICAgIG1f
dXBkYXRlQXRsYXNlcy5jbGVhcigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRv
ci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaAppbmRleCAxYTllMTc5YWM4ODllMjZkMDNiZmIxYzY2
ODFlYjc1OTFkYzA3NzI2Li41MDk1ZTg2MDEwYjFmM2Y3ZGMyZDNkOTMwNTI4MWE0ZDAyOWNkNDQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9y
LmgKQEAgLTIzLDYgKzIzLDcgQEAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAKICNp
bmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJDb29yZGluYXRl
ZEltYWdlQmFja2luZy5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKICNpbmNsdWRl
ICJMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKQEAgLTM5LDYgKzQwLDcgQEAg
Y2xhc3MgV2ViUGFnZTsKIAogY2xhc3MgTGF5ZXJUcmVlQ29vcmRpbmF0b3IgOiBwdWJsaWMgTGF5
ZXJUcmVlSG9zdCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudAogICAgICwgcHVibGljIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudAorICAgICwgcHVibGljIENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nOjpDb29yZGluYXRvcgogICAgICwgcHVibGljIFVwZGF0ZUF0bGFzQ2xpZW50CiAg
ICAgLCBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkgewogcHVibGljOgpAQCAt
NjcsOCArNjksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCkg
eyBtX2lzU3VzcGVuZGVkID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJp
bmcoKSB7IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsgc2NoZWR1bGVMYXllckZsdXNoKCk7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKSB7IH0KLSAgICB2aXJ0
dWFsIGludDY0X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9yZShXZWJDb3JlOjpJbWFnZSopOwotICAg
IHZpcnR1YWwgdm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCk7CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tp
bmdJZk5lZWRlZChXZWJDb3JlOjpJbWFnZSopIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lk
IGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUlu
Zm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRp
bGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0Jik7CkBAIC0xMTIsNiArMTEzLDE0IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NM
YXllciopOwogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOwog
CisgICAgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdG9yCisgICAgdmlydHVh
bCB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQsIGNvbnN0IFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBtYWtlSW1hZ2VCYWNraW5nSW52aXNpYmxlKENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbWFnZUJhY2tp
bmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7CisKKyAgICB2b2lkIGZsdXNo
UGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKTsKKwogICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0
b3J5CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0
ZUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCopIE9WRVJSSURFOwog
CkBAIC0xMjUsNyArMTM0LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN5bmNEaXNwbGF5U3RhdGUo
KTsKICAgICB2b2lkIGxvY2tBbmltYXRpb25zKCk7CiAgICAgdm9pZCB1bmxvY2tBbmltYXRpb25z
KCk7Ci0gICAgdm9pZCBwdXJnZVJlbGVhc2VkSW1hZ2VzKCk7CiAKICAgICB2b2lkIGxheWVyRmx1
c2hUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUNvb3JkaW5hdG9yPiopOwogCkBA
IC0xNDYsOCArMTU0LDggQEAgcHJpdmF0ZToKIAogICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKj4gbV9yZWdpc3RlcmVkTGF5ZXJzOwogICAgIFZlY3RvcjxXZWJM
YXllcklEPiBtX2RldGFjaGVkTGF5ZXJzOwotICAgIEhhc2hNYXA8aW50NjRfdCwgaW50PiBtX2Rp
cmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzOwotICAgIFZlY3RvcjxpbnQ2NF90PiBtX3Jl
bGVhc2VkRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzOworICAgIHR5cGVkZWYgSGFzaE1hcDxDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lELCBSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+ID4g
SW1hZ2VCYWNraW5nTWFwOworICAgIEltYWdlQmFja2luZ01hcCBtX2ltYWdlQmFja2luZ3M7CiAg
ICAgVmVjdG9yPE93blB0cjxVcGRhdGVBdGxhcz4gPiBtX3VwZGF0ZUF0bGFzZXM7CiAKICAgICBi
b29sIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174389</attachid>
            <date>2012-11-15 03:07:38 -0800</date>
            <delta_ts>2012-11-15 17:03:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101023-20121115200504.patch</filename>
            <type>text/plain</type>
            <size>45867</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0NzMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZWQxMzNjZGRlNDA2YTNk
ZTM4ZTY1ZjhlNWZmNDExNTM0YWM1NTZiZi4uY2EwMWE0NDhmMWQ3ZGU1NzUwOTg3MjkzZDBiMGNh
MGViMjFmN2RkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk3IEBACisyMDEyLTExLTE1ICBIdWFu
ZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIENvb3JkaW5h
dGVkIEdyYXBoaWNzOiBBZGQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgdG8gbWFuYWdlIGFuIGlt
YWdlIHJlc291cmNlIHNtYXJ0bHkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDEwMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbnRlcm5hbCBSZXZpZXcgYnkgR3dhbmcgWW9vbiBId2FuZyBhbmQgSmFl
IEh5dW4gUGFyay4KKworICAgICAgICBDdXJyZW50bHksIExheWVyVHJlZUNvb3JkaW5hdG9yIG1h
bmFnZXMgY29tcG9zaXRlZCBpbWFnZXMgdXNpbmcKKyAgICAgICAgU2hhcmVhYmxlQml0bWFwLiBU
aGlzIHBhdGNoIGludHJvZHVjZXMgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgd2hpY2gKKyAgICAg
ICAgcGxheXMgYSByb2xlIGluIG1hbmFnaW5nIGNvbXBvc2l0ZWQgaW1hZ2VzLgorCisgICAgICAg
IFdlIGNhbiBnZXQgdGhlIGZvbGxvd2luZyBiZW5lZml0cy4KKyAgICAgICAgMS4gUmVtb3ZlIGEg
dGV4dHVyZSBpZiBhbiBpbWFnZSBpcyBvZmYgdGhlIHZpZXdwb3J0LgorICAgICAgICAyLiBHYXRo
ZXIgY29kZSByZWxhdGVkIHRvIGEgZGlyZWN0bHkgY29tcG9zaXRlZCBpbWFnZSBpbnRvIGEgc2lu
Z2xlIGNsYXNzLgorCisgICAgICAgIFdlIGNyZWF0ZSBvbmx5IG9uZSBDb29yZGluYXRlZEltYWdl
QmFja2luZyBwZXIgaW1hZ2UuIEZvciBleGFtcGxlLCBpbiB0aGUgbGVhdmVzCisgICAgICAgIGRl
bW8sIHdlIGNyZWF0ZSBvbmx5IDMgdGV4dHVyZXMgb2YgbGVhdmVzLgorCisgICAgICAgIFdoZW4g
YWxsIGxheWVycyBhcmUgaW52aXNpYmxlLCB3ZSB3YWl0IDMgc2Vjb25kcyB0byByZW1vdmUgdGhl
IGltYWdlLCBiZWNhdXNlIHdlCisgICAgICAgIHdhbnQgdG8gcHJldmVudCBhIHRyYW5zZm9ybSBh
bmltYXRpb24gZnJvbSBjcmVhdGluZyBhbmQgZGVzdHJveWluZyBhIHRleHR1cmUKKyAgICAgICAg
b3ZlciBhbmQgb3ZlciBhZ2Fpbi4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIFNoYXJlZC9XZWJMYXllclRyZWVJbmZvLmg6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVy
SW5mbzo6V2ViTGF5ZXJJbmZvKToKKyAgICAgICAgKFdlYkxheWVySW5mbyk6CisgICAgICAgICog
VGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlVGlsZTo6c3dhcEJ1ZmZlcnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpjcmVhdGVJbWFnZUJhY2tpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojp1cGRhdGVJbWFnZUJhY2tp
bmcpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eTo6bWFrZUltYWdlQmFja2luZ0ludmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnJlbW92ZUltYWdlQmFja2luZyk6CisgICAgICAg
ICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eS5oOgorICAgICAgICAoTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNz
YWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVSZW5kZXJlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpzZXRM
YXllclN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUlt
YWdlQmFja2luZyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVJ
bWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlUmVuZGVyZXI6Om1ha2VJbWFnZUJhY2tpbmdJbnZpc2libGUpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlUmVuZGVyZXI6OmFzc2lnbkltYWdlQmFja2luZ1RvTGF5ZXIpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlUmVsZWFzZWRJbWFnZUJhY2tpbmdz
SWZOZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6Zmx1c2hMYXll
ckNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6cHVyZ2VHTFJl
c291cmNlcyk6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJU
cmVlUmVuZGVyZXIuaDoKKyAgICAgICAgKExheWVyVHJlZVJlbmRlcmVyKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpz
ZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzeW5jSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6aW1hZ2VCYWNraW5nVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cmVsZWFzZUltYWdl
QmFja2luZ0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6YmVnaW5Db250ZW50VXBkYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAg
KENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk6CisgICAgICAgIChDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6Z2V0Q29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZEltYWdlQmFja2lu
Zzo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZEltYWdlQmFja2luZzo6fkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYktp
dDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmFkZExheWVyQ2xpZW50KToKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnJlbW92ZUxheWVyQ2xpZW50KToKKyAgICAg
ICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6Om1hcmtEaXJ0eSk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjp1cGRhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6cmVsZWFzZVN1cmZhY2VJZk5lZWRlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpzZXRJbnZpc2libGVJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjppbnZpc2li
bGVUaW1lckZpcmVkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgIChDb29yZGluYXRlZEltYWdlQmFja2luZyk6CisgICAgICAgIChDb29yZGlu
YXRvcik6CisgICAgICAgIChMYXllckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nOjppZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZUltYWdlQmFja2luZ0lmTmVl
ZGVkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZUltYWdl
QmFja2luZyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjp1cGRhdGVJ
bWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6bWFr
ZUltYWdlQmFja2luZ0ludmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yOjpyZW1vdmVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVD
b29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcyk6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpwdXJnZUJhY2tpbmdTdG9yZXMpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3Jk
aW5hdG9yLmg6CisgICAgICAgIChMYXllclRyZWVDb29yZGluYXRvcik6CisKIDIwMTItMTEtMTQg
IEh1YW5nIERvbmdzdW5nICA8bHV4dGVsbGFAY29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgQ29v
cmRpbmF0ZWQgR3JhcGhpY3M6IFJlbW92ZSB0aWxlcyBvZiBhIGxheWVyIHdoZW4gdGhleSBhcmUg
b2ZmIHRoZSB2aWV3cG9ydC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMu
dHh0IGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKaW5kZXggNmU0NmY0OGE5OWUzMTJi
MzcwNjMxY2FiMjMzMjdiOTJiNTU1Y2IxZS4uMDVkN2M2ZDc5NmMxNmNhYTM4YzZlZDBmYzdhNGZk
YzQ5MDE4MGJkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysr
IGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKQEAgLTQ5NCw2ICs0OTQsNyBAQCBTRVQo
V2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5
LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5jcHAKIAorICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllci5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZFRpbGUuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkxheWVyVHJlZUluZm8uaAppbmRleCA1OGUwN2JjMDI3ZWZkNWMxYTk1OWIzYjBjNjE4
ZTRhZTA1Y2U3OGU4Li5lNmEyYWVkYTYzYTRjNWNjNDUyNjc0ZTIyNzg5ZWRkNjkwMjA0YmI1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKQEAgLTI3LDI1ICsyNywy
NyBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKIHR5cGVkZWYgdWludDMyX3QgV2ViTGF5ZXJJRDsKIGVudW0g
eyBJbnZhbGlkV2ViTGF5ZXJJRCA9IDAgfTsKIAordHlwZWRlZiB1aW50cHRyX3QgQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRDsKK2VudW0geyBJbnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCA9IDAgfTsKKwogLy8gTk9URTogV2ViTGF5ZXJJbmZvIHNob3VsZCBvbmx5IHVzZSBQT0QgdHlw
ZXMsIGFzIHRvIG1ha2Ugc2VyaWFsaXphdGlvbiBmYXN0ZXIuCiBzdHJ1Y3QgV2ViTGF5ZXJJbmZv
IHsKICAgICBXZWJMYXllckluZm8oKQogICAgICAgICA6IHJlcGxpY2EoSW52YWxpZFdlYkxheWVy
SUQpCiAgICAgICAgICwgbWFzayhJbnZhbGlkV2ViTGF5ZXJJRCkKLSAgICAgICAgLCBpbWFnZUJh
Y2tpbmdTdG9yZUlEKDApCisgICAgICAgICwgaW1hZ2VJRChJbnZhbGlkQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCkKICAgICAgICAgLCBvcGFjaXR5KDApCiAgICAgICAgICwgZmxhZ3MoMCkgeyB9
CiAKICAgICBXZWJMYXllcklEIHJlcGxpY2E7CiAgICAgV2ViTGF5ZXJJRCBtYXNrOwotICAgIGlu
dDY0X3QgaW1hZ2VCYWNraW5nU3RvcmVJRDsKKyAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
IGltYWdlSUQ7CiAKICAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHBvczsKICAgICBXZWJDb3JlOjpG
bG9hdFBvaW50M0QgYW5jaG9yUG9pbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJn
ZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCBkYWM5YjlhMjQ4OWI4YTUy
NmJlZWMzYzNkYjRmYTlmNjM2Nzc4MWQyLi43Y2QwMTZlZDk4Njk0ZjEyOTcxZTY3NzQ4YmFhOGJj
MDZiMjQ4M2NjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTM2OSw2ICszNjksNyBAQCBIRUFERVJTICs9IFwK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmggXAogICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBcCisgICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcu
aCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRUaWxlLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UYXBIaWdobGln
aHRDb250cm9sbGVyLmggXApAQCAtNzUwLDYgKzc1MSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dl
YlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwIFwKKyAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5j
cHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkVGlsZS5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhp
Z2hsaWdodENvbnRyb2xsZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlLmNwcAppbmRleCA1MWVkNmM4NTJlMWE1NDlkZmJkMjFmNDBmMWQ3ODY1YWQyNDkz
ZGI2Li4wNTRhMWU5YmQ2OWYxNGIzMjY5ZjY4YzNhZDM0ZjhhZGE3OTE0YTQ3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwCkBAIC00OSw2ICs0OSw3IEBA
IHZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlOjpzd2FwQnVmZmVycyhXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwCiAgICAgICAgIHNob3VsZFJlc2V0ID0gdHJ1ZTsKICAg
ICB9CiAKKyAgICBBU1NFUlQodGV4dHVyZU1hcHBlci0+bWF4VGV4dHVyZVNpemUoKSA+PSBzdGQ6
Om1heChtX3RpbGVSZWN0LnNpemUoKS53aWR0aCgpLCBtX3RpbGVSZWN0LnNpemUoKS5oZWlnaHQo
KSkpOwogICAgIGlmIChzaG91bGRSZXNldCkKICAgICAgICAgdGV4dHVyZS0+cmVzZXQobV90aWxl
UmVjdC5zaXplKCksIG1fc3VyZmFjZS0+ZmxhZ3MoKSAmIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9y
dHNBbHBoYSA/IEJpdG1hcFRleHR1cmU6OlN1cHBvcnRzQWxwaGEgOiAwKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcAppbmRleCBiM2QxNDBmYTc0
NGI1ZjdiZTMzY2E2MWMxMjY0Yjg0NWU5YjQ4ODkyLi4zYTk2NDk0YjNhNDBiNDZmMTBhMTQzMmVh
OTEyODcyZWE2YjhlOGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGlu
YXRvclByb3h5LmNwcApAQCAtMTI3LDE1ICsxMjcsMjQgQEAgdm9pZCBMYXllclRyZWVDb29yZGlu
YXRvclByb3h5OjpkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50
c1MKICNlbmRpZgogfQogCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmNyZWF0ZURp
cmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5LCBjb25zdCBXZWJLaXQ6OlNoYXJlYWJs
ZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUpCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6
OmNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCiB7
Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpj
cmVhdGUoaGFuZGxlKTsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJl
cjo6Y3JlYXRlSW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGtleSwgYml0bWFwKSk7CisgICAgZGlz
cGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUltYWdlQmFja2luZywg
bV9yZW5kZXJlci5nZXQoKSwgaW1hZ2VJRCkpOwogfQogCi12b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OmRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSkKK3Zv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwgY29uc3QgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxl
JiBoYW5kbGUpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6
OmRlc3Ryb3lJbWFnZSwgbV9yZW5kZXJlci5nZXQoKSwga2V5KSk7CisgICAgZGlzcGF0Y2hVcGRh
dGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZUltYWdlQmFja2luZywgbV9yZW5kZXJl
ci5nZXQoKSwgaW1hZ2VJRCwgU2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRlKGhhbmRsZSkpKTsKK30K
Kwordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjptYWtlSW1hZ2VCYWNraW5nSW52aXNp
YmxlKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBkaXNwYXRjaFVw
ZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6bWFrZUltYWdlQmFja2luZ0ludmlzaWJsZSwg
bV9yZW5kZXJlci5nZXQoKSwgaW1hZ2VJRCkpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlt
YWdlSUQpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnJl
bW92ZUltYWdlQmFja2luZywgbV9yZW5kZXJlci5nZXQoKSwgaW1hZ2VJRCkpOwogfQogCiB2b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldENvbnRlbnRzU2l6ZShjb25zdCBGbG9hdFNp
emUmIGNvbnRlbnRzU2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHkuaAppbmRleCA2NDY4MDExNjhmMjRhNzg5YjdlYjgwNzFjZjRiNmY4YTRjNGZiOTdhLi5m
OTZkNDVhMTg2MWI3NjFkMGViNjJiNWJlNjc2MmI3MzRiZWJmMzU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGlu
YXRvclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oCkBAIC02Nyw4ICs2NywxMCBAQCBwdWJs
aWM6CiAgICAgdm9pZCByZW1vdmVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQp
OwogICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQsIGNvbnN0IFNoYXJlYWJs
ZVN1cmZhY2U6OkhhbmRsZSYpOwogICAgIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXMoaW50IGF0bGFz
SUQpOwotICAgIHZvaWQgY3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCwgY29u
c3QgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYpOwotICAgIHZvaWQgZGVzdHJveURp
cmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3QpOworICAgIHZvaWQgY3JlYXRlSW1hZ2VCYWNr
aW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOworICAgIHZvaWQgdXBkYXRlSW1hZ2VCYWNr
aW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIGNvbnN0IFNoYXJlYWJsZVN1cmZhY2U6Okhh
bmRsZSYpOworICAgIHZvaWQgbWFrZUltYWdlQmFja2luZ0ludmlzaWJsZShDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEKTsKKyAgICB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEKTsKICAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvclBy
b3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3Jl
SVBDOjpNZXNzYWdlRGVjb2RlciYpOwogICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoKTsKICAgICB2
b2lkIHJlbmRlck5leHRGcmFtZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4KaW5kZXggY2QzMmVkOTgyMGEzZTRiZDQy
MThjNWJjMmEzMTQwYWQ1YjYyMzNkNy4uNjcxNTgwNmMyZmMyMjYyMmIyMGViM2Q1NDM2NWY0ZDU3
MDNjM2E2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGlu
YXRvclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0zMSw4ICszMSwxMCBAQCBtZXNzYWdlcyAtPiBMYXll
clRyZWVDb29yZGluYXRvclByb3h5IHsKICAgICBSZW1vdmVUaWxlRm9yTGF5ZXIodWludDMyX3Qg
bGF5ZXJJRCwgaW50IHRpbGVJRCkKICAgICBDcmVhdGVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCwg
V2ViS2l0OjpTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUgaGFuZGxlKQogICAgIFJlbW92ZVVwZGF0
ZUF0bGFzKGludCBhdGxhc0lEKQotICAgIENyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGlu
dDY0X3Qga2V5LCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkKLSAgICBE
ZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkpCisgICAgQ3JlYXRlSW1h
Z2VCYWNraW5nKHVpbnRwdHJfdCBpbWFnZUlEKQorICAgIFVwZGF0ZUltYWdlQmFja2luZyh1aW50
cHRyX3QgaW1hZ2VJRCwgV2ViS2l0OjpTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUgaGFuZGxlKQor
ICAgIE1ha2VJbWFnZUJhY2tpbmdJbnZpc2libGUodWludHB0cl90IGltYWdlSUQpCisgICAgUmVt
b3ZlSW1hZ2VCYWNraW5nKHVpbnRwdHJfdCBpbWFnZUlEKQogICAgIERpZFJlbmRlckZyYW1lKFdl
YkNvcmU6OkludFNpemUgY29udGVudHNTaXplLCBXZWJDb3JlOjpJbnRSZWN0IGNvdmVyZWRSZWN0
KQogICAgIERpZENoYW5nZVNjcm9sbFBvc2l0aW9uKFdlYkNvcmU6OkludFBvaW50IHBvc2l0aW9u
KQogICAgIFNldExheWVyQW5pbWF0aW9ucyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6R3JhcGhpY3NM
YXllckFuaW1hdGlvbnMgYW5pbWF0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVy
LmNwcAppbmRleCAxMWVkMDNiYjExMTQ2ZDhlNTliMjRjMzc5YTIzZWNiMzBkZDFlNzI5Li5jMGUw
MjM2ODNlMGM3OWEyODJlZThiMjllNjkzODVjNDMwMWVkYmI5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5
ZXJUcmVlUmVuZGVyZXIuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMp
IDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgICAg
Q29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCiAKICAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTI3LDcgKzI4LDYgQEAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5o
IgogI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCIKICNpbmNsdWRlICJNZXNz
YWdlSUQuaCIKLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgogI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgpAQCAtMzAyLDcgKzMwMiw3IEBAIHZvaWQgTGF5ZXJUcmVl
UmVuZGVyZXI6OnNldExheWVyU3RhdGUoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2ViTGF5ZXJJbmZv
JiBsYXllckluCiAgICAgZWxzZQogICAgICAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShpZCk7CiAK
LSAgICBhc3NpZ25JbWFnZVRvTGF5ZXIobGF5ZXIsIGxheWVySW5mby5pbWFnZUJhY2tpbmdTdG9y
ZUlEKTsKKyAgICBhc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKGxheWVyLCBsYXllckluZm8uaW1h
Z2VJRCk7CiAKICAgICAvLyBOZXZlciBtYWtlIHRoZSByb290IGxheWVyIGNsaXAuCiAgICAgbGF5
ZXItPnNldE1hc2tzVG9Cb3VuZHMobGF5ZXJJbmZvLmlzUm9vdExheWVyID8gZmFsc2UgOiBsYXll
ckluZm8ubWFza3NUb0JvdW5kcyk7CkBAIC00MTYsMzEgKzQxNiw2MyBAQCB2b2lkIExheWVyVHJl
ZVJlbmRlcmVyOjp1cGRhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29u
c3QgVGlsZVVwZAogICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFj
a2luZ1N0b3JlKTsKIH0KIAotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlSW1hZ2UoaW50
NjRfdCBpbWFnZUlELCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gd2Vha0JpdG1hcCkKK3Zv
aWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEIGltYWdlSUQpCiB7Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFw
ID0gd2Vha0JpdG1hcDsKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3Jl
PiBiYWNraW5nU3RvcmUgPSBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgp
OwotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnNldChpbWFnZUlELCBiYWNraW5nU3Rv
cmUpOwotICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlQ29udGVudHMobV90ZXh0dXJlTWFwcGVyLmdl
dCgpLCBiaXRtYXAtPmNyZWF0ZUltYWdlKCkuZ2V0KCksIEJpdG1hcFRleHR1cmU6OlVwZGF0ZUNh
bm5vdE1vZGlmeU9yaWdpbmFsSW1hZ2VEYXRhKTsKKyAgICBBU1NFUlQoIW1faW1hZ2VCYWNraW5n
cy5jb250YWlucyhpbWFnZUlEKSk7CisgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
PiBiYWNraW5nU3RvcmUoQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgpKTsKKyAgICBt
X2ltYWdlQmFja2luZ3MuYWRkKGltYWdlSUQsIGJhY2tpbmdTdG9yZS5yZWxlYXNlKCkpOwogfQog
Ci12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95SW1hZ2UoaW50NjRfdCBpbWFnZUlEKQor
dm9pZCBMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQgaW1hZ2VJRCwgUGFzc1JlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBzdXJmYWNl
KQogewotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnJlbW92ZShpbWFnZUlEKTsKKyAg
ICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKKyAgICBJbWFnZUJh
Y2tpbmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7Cisg
ICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBpdC0+dmFs
dWU7CisKKyAgICAvLyBDb29yZGluYXRlZEltYWdlQmFja2luZyBpcyByZWFsaXplZCB0byBDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZSB3aXRoIG9ubHkgb25lIHRpbGUgaW4gVUkgUHJvY2Vzcy4KKyAg
ICBiYWNraW5nU3RvcmUtPmNyZWF0ZVRpbGUoMSAvKiBpZCAqLywgMSAvKiBzY2FsZSAqLyk7Cisg
ICAgSW50UmVjdCByZWN0KEludFBvaW50Ojp6ZXJvKCksIHN1cmZhY2UtPnNpemUoKSk7CisgICAg
YmFja2luZ1N0b3JlLT5zZXRTaXplKHJlY3Quc2l6ZSgpKTsKKyAgICBiYWNraW5nU3RvcmUtPnVw
ZGF0ZVRpbGUoMSAvKiBpZCAqLywgcmVjdCwgcmVjdCwgc3VyZmFjZSwgcmVjdC5sb2NhdGlvbigp
KTsKKworICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0
b3JlKTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6bWFrZUltYWdlQmFja2luZ0ludmlz
aWJsZShDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAgQVNTRVJUKG1f
aW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlEKSk7CisgICAgSW1hZ2VCYWNraW5nTWFwOjpp
dGVyYXRvciBpdCA9IG1faW1hZ2VCYWNraW5ncy5maW5kKGltYWdlSUQpOworICAgIFJlZlB0cjxD
b29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gaXQtPnZhbHVlOworICAgIGJh
Y2tpbmdTdG9yZS0+cmVtb3ZlVGlsZSgxIC8qIGlkICovKTsKKyAgICBtX2JhY2tpbmdTdG9yZXNX
aXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVl
UmVuZGVyZXI6OmFzc2lnbkltYWdlVG9MYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgaW50NjRf
dCBpbWFnZUlEKQordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlSW1hZ2VCYWNraW5nKENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKIHsKLSAgICBpZiAoIWltYWdlSUQpIHsK
KyAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKKworICAgIC8v
IFdlIGRvbid0IHdhbnQgVGV4dHVyZU1hcHBlckxheWVyIHJlZmVycyBhIGRhbmdsaW5nIHBvaW50
ZXIuCisgICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VCYWNraW5ncy5m
aW5kKGltYWdlSUQpOworICAgIG1fcmVsZWFzZWRJbWFnZUJhY2tpbmdzLmFwcGVuZChpdC0+dmFs
dWUpOworICAgIG1faW1hZ2VCYWNraW5ncy5yZW1vdmUoaW1hZ2VJRCk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlUmVuZGVyZXI6OmFzc2lnbkltYWdlQmFja2luZ1RvTGF5ZXIoR3JhcGhpY3NMYXllciog
bGF5ZXIsIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBpZiAoaW1h
Z2VJRCA9PSBJbnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgewogICAgICAgICBsYXll
ci0+c2V0Q29udGVudHNUb01lZGlhKDApOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAg
SGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4gPjo6aXRl
cmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5maW5kKGltYWdlSUQpOwotICAg
IEFTU0VSVChpdCAhPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5lbmQoKSk7CisgICAgSW1h
Z2VCYWNraW5nTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VCYWNraW5ncy5maW5kKGltYWdlSUQp
OworICAgIEFTU0VSVChpdCAhPSBtX2ltYWdlQmFja2luZ3MuZW5kKCkpOwogICAgIGxheWVyLT5z
ZXRDb250ZW50c1RvTWVkaWEoaXQtPnZhbHVlLmdldCgpKTsKIH0KIAordm9pZCBMYXllclRyZWVS
ZW5kZXJlcjo6cmVtb3ZlUmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZOZWVkZWQoKQoreworICAgIG1f
cmVsZWFzZWRJbWFnZUJhY2tpbmdzLmNsZWFyKCk7Cit9CisKIHZvaWQgTGF5ZXJUcmVlUmVuZGVy
ZXI6OmNvbW1pdFRpbGVPcGVyYXRpb25zKCkKIHsKICAgICBIYXNoU2V0PFJlZlB0cjxDb29yZGlu
YXRlZEJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgZW5kID0gbV9iYWNraW5nU3RvcmVzV2l0aFBl
bmRpbmdCdWZmZXJzLmVuZCgpOwpAQCAtNDU5LDYgKzQ5MSw3IEBAIHZvaWQgTGF5ZXJUcmVlUmVu
ZGVyZXI6OmZsdXNoTGF5ZXJDaGFuZ2VzKCkKIAogICAgIG1fcm9vdExheWVyLT5mbHVzaENvbXBv
c2l0aW5nU3RhdGUoRmxvYXRSZWN0KCkpOwogICAgIGNvbW1pdFRpbGVPcGVyYXRpb25zKCk7Cisg
ICAgcmVtb3ZlUmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZOZWVkZWQoKTsKIAogICAgIC8vIFRoZSBw
ZW5kaW5nIHRpbGVzIHN0YXRlIGlzIG9uIGl0cyB3YXkgZm9yIHRoZSBzY3JlZW4sIHRlbGwgdGhl
IHdlYiBwcm9jZXNzIHRvIHJlbmRlciB0aGUgbmV4dCBvbmUuCiAgICAgZGlzcGF0Y2hPbk1haW5U
aHJlYWQoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbmRlck5leHRGcmFtZSwgdGhpcykpOwpA
QCAtNTE1LDcgKzU0OCw3IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnB1cmdlR0xSZXNvdXJj
ZXMoKQogICAgIGlmIChsYXllcikKICAgICAgICAgbGF5ZXItPmNsZWFyQmFja2luZ1N0b3Jlc1Jl
Y3Vyc2l2ZSgpOwogCi0gICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuY2xlYXIoKTsKKyAg
ICBtX2ltYWdlQmFja2luZ3MuY2xlYXIoKTsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKICAg
ICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNsZWFyKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRl
cmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVSZW5kZXJlci5oCmluZGV4IDJlZjAxZWNiMTgwNWI4OGRjYWRhN2RmZTA4ZmFhM2VlOWRi
ZGMwYjkuLjI0NzczOGVjYjFjNTZkNWRmZTI0MmFhYzBkZDNlMDNjNDMwZjRkM2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJl
ZVJlbmRlcmVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuaApAQCAtODksOCArODksMTAgQEAgcHVibGljOgogICAg
IHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQpOwogICAgIHZvaWQgdXBkYXRlVGlsZShX
ZWJMYXllcklELCBpbnQsIGNvbnN0IFRpbGVVcGRhdGUmKTsKICAgICB2b2lkIGZsdXNoTGF5ZXJD
aGFuZ2VzKCk7Ci0gICAgdm9pZCBjcmVhdGVJbWFnZShpbnQ2NF90LCBQYXNzUmVmUHRyPFNoYXJl
YWJsZUJpdG1hcD4pOwotICAgIHZvaWQgZGVzdHJveUltYWdlKGludDY0X3QpOworICAgIHZvaWQg
Y3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOworICAgIHZvaWQg
dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8
U2hhcmVhYmxlU3VyZmFjZT4pOworICAgIHZvaWQgbWFrZUltYWdlQmFja2luZ0ludmlzaWJsZShD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKICAgICB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhX
ZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOwogICAg
IHZvaWQgc2V0QW5pbWF0aW9uc0xvY2tlZChib29sKTsKIApAQCAtMTE5LDcgKzEyMSw4IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBkaXNwYXRjaE9uTWFpblRocmVhZChjb25zdCBGdW5jdGlvbjx2b2lk
KCk+Jik7CiAgICAgdm9pZCBhZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKCk7CiAKLSAgICB2
b2lkIGFzc2lnbkltYWdlVG9MYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgaW50NjRfdCBp
bWFnZUlEKTsKKyAgICB2b2lkIGFzc2lnbkltYWdlQmFja2luZ1RvTGF5ZXIoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciosIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOworICAgIHZvaWQgcmVtb3Zl
UmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZOZWVkZWQoKTsKICAgICB2b2lkIGVuc3VyZVJvb3RMYXll
cigpOwogICAgIHZvaWQgZW5zdXJlTGF5ZXIoV2ViTGF5ZXJJRCk7CiAgICAgdm9pZCBjb21taXRU
aWxlT3BlcmF0aW9ucygpOwpAQCAtMTM5LDcgKzE0MiwxMSBAQCBwcml2YXRlOgogICAgIE11dGV4
IG1fcmVuZGVyUXVldWVNdXRleDsKIAogICAgIE93blB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
PiBtX3RleHR1cmVNYXBwZXI7Ci0gICAgSGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8V2ViQ29yZTo6
VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4gPiBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlczsK
KworICAgIHR5cGVkZWYgSGFzaE1hcDxDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBSZWZQdHI8
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID4gSW1hZ2VCYWNraW5nTWFwOworICAgIEltYWdlQmFj
a2luZ01hcCBtX2ltYWdlQmFja2luZ3M7CisgICAgVmVjdG9yPFJlZlB0cjxDb29yZGluYXRlZEJh
Y2tpbmdTdG9yZT4gPiBtX3JlbGVhc2VkSW1hZ2VCYWNraW5nczsKKwogICAgIEhhc2hTZXQ8UmVm
UHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiA+IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5n
QnVmZmVyczsKIAogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKaW5kZXggYjUx
MjlmYzMxMWYzZGFjNDA0NGMyOTc5YjA5NWEyMjE5MDYyOTE3YS4uNGFiYTMwYWFkMzAzNzBiYzNm
Njg1ZGMyZjMyYjQ4ZDI1MTE4NmYxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisgQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCiAKICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTM1MSw4ICszNTIsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKICAgICAgICAgLy8gVGhpcyBjb2RlIG1h
a2VzIHRoZSBhc3N1bXB0aW9uIHRoYXQgcG9pbnRlciBlcXVhbGl0eSBvbiBhIE5hdGl2ZUltYWdl
UHRyIGlzIGEgdmFsaWQgd2F5IHRvIHRlbGwgaWYgdGhlIGltYWdlIGlzIGNoYW5nZWQuCiAgICAg
ICAgIC8vIFRoaXMgYXNzdW1wdGlvbiBpcyB0cnVlIGluIFF0LCBHVEsgYW5kIEVGTC4KICAgICAg
ICAgTmF0aXZlSW1hZ2VQdHIgbmV3TmF0aXZlSW1hZ2VQdHIgPSBpbWFnZS0+bmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKTsKLSAgICAgICAgaWYgKCFuZXdOYXRpdmVJbWFnZVB0cikKLSAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKG5ld05hdGl2ZUltYWdlUHRyKTsKIAogICAg
ICAgICBpZiAobmV3TmF0aXZlSW1hZ2VQdHIgPT0gbV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIp
CiAgICAgICAgICAgICByZXR1cm47CkBAIC00NzMsMTYgKzQ3MywyNSBAQCB2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6c3luY0ltYWdlQmFja2luZygpCiAgICAgICAgIHJldHVybjsKICAg
ICBtX3Nob3VsZFN5bmNJbWFnZUJhY2tpbmcgPSBmYWxzZTsKIAotICAgIHJlbGVhc2VJbWFnZUJh
Y2tpbmdJZk5lZWRlZCgpOwotCiAgICAgaWYgKG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyKSB7
CiAgICAgICAgIEFTU0VSVCghbV9tYWluQmFja2luZ1N0b3JlKTsKICAgICAgICAgQVNTRVJUKG1f
Y29tcG9zaXRlZEltYWdlKTsKIAotICAgICAgICBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9y
ZUlEID0gbV9jb29yZGluYXRvci0+YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShtX2NvbXBvc2l0ZWRJ
bWFnZS5nZXQoKSk7Ci0gICAgfQorICAgICAgICBib29sIGltYWdlSW5zdGFuY2VSZXBsYWNlZCA9
IG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgJiYgKG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmct
PmlkKCkgIT0gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmdldENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQobV9jb21wb3NpdGVkSW1hZ2UuZ2V0KCkpKTsKKyAgICAgICAgaWYgKGltYWdlSW5zdGFu
Y2VSZXBsYWNlZCkKKyAgICAgICAgICAgIHJlbGVhc2VJbWFnZUJhY2tpbmdJZk5lZWRlZCgpOwor
CisgICAgICAgIGlmICghbV9jb29yZGluYXRlZEltYWdlQmFja2luZykgeworICAgICAgICAgICAg
bV9jb29yZGluYXRlZEltYWdlQmFja2luZyA9IG1fY29vcmRpbmF0b3ItPmNyZWF0ZUltYWdlQmFj
a2luZ0lmTmVlZGVkKG1fY29tcG9zaXRlZEltYWdlLmdldCgpKTsKKyAgICAgICAgICAgIG1fY29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmctPmFkZExheWVyQ2xpZW50KHRoaXMpOworICAgICAgICAgICAg
bV9sYXllckluZm8uaW1hZ2VJRCA9IG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmctPmlkKCk7Cisg
ICAgICAgIH0KIAotICAgIC8vIFRoaXMgbWV0aG9kIGNoYW5nZXMgbV9sYXllckluZm8uaW1hZ2VC
YWNraW5nU3RvcmVJRC4KKyAgICAgICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+bWFya0Rp
cnR5KCk7CisgICAgfSBlbHNlCisgICAgICAgIHJlbGVhc2VJbWFnZUJhY2tpbmdJZk5lZWRlZCgp
OworCisgICAgLy8gc3luY0ltYWdlQmFja2luZygpIGNoYW5nZWQgbV9sYXllckluZm8uaW1hZ2VJ
RC4KICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiB9CiAKQEAgLTU1NywxNCArNTY2LDIxIEBA
IHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCkKICAgICBzeW5jQ2FudmFzKCk7CiB9CiAKK2Jvb2wgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjppbWFnZUJhY2tpbmdWaXNpYmxlKCkKK3sKKyAgICBBU1NFUlQobV9jb29y
ZGluYXRlZEltYWdlQmFja2luZyk7CisgICAgcmV0dXJuIHRpbGVkQmFja2luZ1N0b3JlVmlzaWJs
ZVJlY3QoKS5pbnRlcnNlY3RzKGNvbnRlbnRzUmVjdCgpKTsKK30KKwogdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnJlbGVhc2VJbWFnZUJhY2tpbmdJZk5lZWRlZCgpCiB7Ci0gICAgaWYg
KCFtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKQorICAgIGlmICghbV9jb29yZGluYXRl
ZEltYWdlQmFja2luZykKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKG1fY29vcmRpbmF0
b3IpOwotICAgIG1fY29vcmRpbmF0b3ItPnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShtX2xheWVy
SW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKLSAgICBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdT
dG9yZUlEID0gMDsKKyAgICBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLT5yZW1vdmVMYXllckNs
aWVudCh0aGlzKTsKKyAgICBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNsZWFyKCk7CisgICAg
bV9sYXllckluZm8uaW1hZ2VJRCA9IEludmFsaWRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEOwog
fQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWlu
dEJlZ2luKCkKQEAgLTY2OCw3ICs2ODQsNyBAQCBDb2xvciBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKCkgY29uc3QKICAgICByZXR1cm4g
Y29udGVudHNPcGFxdWUoKSA/IENvbG9yOjp3aGl0ZSA6IENvbG9yOjp0cmFuc3BhcmVudDsKIH0K
IAotUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUs
IGludCYgYXRsYXMsIFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpCitQYXNzT3duUHRyPEdyYXBo
aWNzQ29udGV4dD4gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpiZWdpbkNvbnRlbnRVcGRhdGUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgaW50JiBhdGxhcywgSW50UG9pbnQmIG9mZnNldCkKIHsKICAg
ICBpZiAoIW1fY29vcmRpbmF0b3IpCiAgICAgICAgIHJldHVybiBQYXNzT3duUHRyPFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dD4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKaW5kZXggOWMzMWUwNWE2MGU2ZTU2MWMyZmI0ZjY2
MGIxZDk1MzBiZWUzNGY0Yy4uNjg4YTM1OTMyMzliZGQyMDkwNjQ1NTRhMTY5ZWQ4NTA2YTc3M2Zl
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpZm5kZWYgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyX2gKICNkZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyX2gKIAorI2luY2x1ZGUg
IkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRUaWxlLmgi
CiAjaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgpA
QCAtNTYsOCArNTcsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qg
dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgbGF5ZXJU
cmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgaW50NjRfdCBh
ZG9wdEltYWdlQmFja2luZ1N0b3JlKFdlYkNvcmU6OkltYWdlKikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCkgPSAwOworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZO
ZWVkZWQoV2ViQ29yZTo6SW1hZ2UqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0
YXRlKFdlYkxheWVySUQsIGNvbnN0IFdlYkxheWVySW5mbyYpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgc3luY0xheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+
JikgPSAwOwogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKQEAgLTc5LDYgKzc5LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgOiBwdWJsaWMg
R3JhcGhpY3NMYXllcgogICAgICwgcHVibGljIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50CisgICAg
LCBwdWJsaWMgV2ViS2l0OjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6TGF5ZXJDbGllbnQKICAg
ICAsIHB1YmxpYyBXZWJLaXQ6OkNvb3JkaW5hdGVkVGlsZUNsaWVudAogICAgICwgcHVibGljIEdy
YXBoaWNzTGF5ZXJBbmltYXRpb246OkNsaWVudCB7CiBwdWJsaWM6CkBAIC0xODQsNiArMTg1LDkg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZUJhY2tpbmdTdG9yZSgpOwogICAgIHZvaWQgcmVs
ZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCk7CiAKKyAgICAvLyBDb29yZGluYXRlZEltYWdlQmFj
a2luZzo6TGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VCYWNraW5nVmlzaWJsZSgp
IE9WRVJSSURFOworCiAgICAgYm9vbCBzZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zv
cm1zKCk7CiAgICAgdm9pZCBhZGp1c3RDb250ZW50c1NjYWxlKCk7CiAKQEAgLTIyMiw2ICsyMjYs
NyBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPEltYWdlPiBtX2NvbXBvc2l0ZWRJbWFnZTsKICAg
ICBOYXRpdmVJbWFnZVB0ciBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0cjsKKyAgICBSZWZQdHI8
V2ViS2l0OjpDb29yZGluYXRlZEltYWdlQmFja2luZz4gbV9jb29yZGluYXRlZEltYWdlQmFja2lu
ZzsKIAogICAgIFBsYXRmb3JtTGF5ZXIqIG1fY2FudmFzUGxhdGZvcm1MYXllcjsKICAgICBUaW1l
cjxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI+IG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVyOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjEyMjk4YWQzZjZmZGIyNzY1YzdiYjJkZjI0ZWFkM2U0ZGNkOGQ2ZGUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAKQEAgLTAsMCArMSwx
NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpnZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKElt
YWdlKiBpbWFnZSkKK3sKKyAgICAvLyBDb29yZGluYXRlZEltYWdlQmFja2luZyBrZWVwcyBhIFJl
ZlB0cjxJbWFnZT4gbWVtYmVyLCBzbyB0aGUgc2FtZSBJbWFnZSBwb2ludGVyIGNhbiBub3QgcmVm
ZXIgdHdvIGRpZmZlcmVudCBpbnN0YW5jZXMgdW50aWwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcg
cmVsZWFzZXMgdGhlIG1lbWJlci4KKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEPihpbWFnZSk7Cit9CisKK1Bhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmc+IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjcmVhdGUoQ29vcmRpbmF0b3Iq
IGNsaWVudCwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDb29yZGluYXRlZEltYWdlQmFja2luZyhjbGllbnQsIGltYWdlKSk7Cit9CisKK0Nvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRlZEltYWdlQmFja2luZyhDb29yZGluYXRvciog
Y2xpZW50LCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSkKKyAgICA6IG1fY29vcmRpbmF0b3IoY2xp
ZW50KQorICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICAsIG1faWQoZ2V0Q29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRChtX2ltYWdlLmdldCgpKSkKKyAgICAsIG1faW52aXNpYmxlVGltZXIodGhpcywg
JkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjppbnZpc2libGVUaW1lckZpcmVkKQorICAgICwgbV9p
c0RpcnR5KGZhbHNlKQorICAgICwgbV9pc1Zpc2libGUoZmFsc2UpCit7CisgICAgLy8gRklYTUU6
IFdlIHdvdWxkIG5lZWQgdG8gZGVjb2RlIGEgc21hbGwgaW1hZ2UgZGlyZWN0bHkgaW50byBhIEdy
YXBoaWNzU3VyZmFjZS4KKyAgICAvLyBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMTQyNgorCisgICAg
bV9jb29yZGluYXRvci0+Y3JlYXRlSW1hZ2VCYWNraW5nKGlkKCkpOworfQorCitDb29yZGluYXRl
ZEltYWdlQmFja2luZzo6fkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKCkKK3sKK30KKwordm9pZCBD
b29yZGluYXRlZEltYWdlQmFja2luZzo6YWRkTGF5ZXJDbGllbnQoTGF5ZXJDbGllbnQqIGxheWVy
Q2xpZW50KQoreworICAgIEFTU0VSVCghbV9sYXllckNsaWVudHMuY29udGFpbnMobGF5ZXJDbGll
bnQpKTsKKyAgICBtX2xheWVyQ2xpZW50cy5hcHBlbmQobGF5ZXJDbGllbnQpOworfQorCit2b2lk
IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpyZW1vdmVMYXllckNsaWVudChMYXllckNsaWVudCog
bGF5ZXJDbGllbnQpCit7CisgICAgc2l6ZV90IHBvc2l0aW9uID0gbV9sYXllckNsaWVudHMuZmlu
ZChsYXllckNsaWVudCk7CisgICAgQVNTRVJUKHBvc2l0aW9uICE9IG5vdEZvdW5kKTsKKyAgICBt
X2xheWVyQ2xpZW50cy5yZW1vdmUocG9zaXRpb24pOworCisgICAgaWYgKG1fbGF5ZXJDbGllbnRz
LmlzRW1wdHkoKSkKKyAgICAgICAgbV9jb29yZGluYXRvci0+cmVtb3ZlSW1hZ2VCYWNraW5nKGlk
KCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjptYXJrRGlydHkoKQorewor
ICAgIG1faXNEaXJ0eSA9IHRydWU7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6
OnVwZGF0ZSgpCit7CisgICAgcmVsZWFzZVN1cmZhY2VJZk5lZWRlZCgpOworCisgICAgYm9vbCBj
aGFuZ2VkVG9WaXNpYmxlID0gc2V0SW52aXNpYmxlSWZOZWVkZWQoKTsKKyAgICBib29sIG5lZWRU
b1VwZGF0ZSA9IGNoYW5nZWRUb1Zpc2libGUgfHwgKG1faXNWaXNpYmxlICYmIG1faXNEaXJ0eSk7
CisgICAgaWYgKCFuZWVkVG9VcGRhdGUpIHsKKyAgICAgICAgbV9pc0RpcnR5ID0gZmFsc2U7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3N1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNl
OjpjcmVhdGUobV9pbWFnZS0+c2l6ZSgpLCBtX2ltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgp
ID8gU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhIDogU2hhcmVhYmxlQml0bWFwOjpOb0Zs
YWdzLCBTaGFyZWFibGVTdXJmYWNlOjpTdXBwb3J0c0dyYXBoaWNzU3VyZmFjZSk7CisgICAgbV9o
YW5kbGUgPSBhZG9wdFB0cihuZXcgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlKCkpOworCisgICAg
aWYgKCFtX3N1cmZhY2UtPmNyZWF0ZUhhbmRsZSgqbV9oYW5kbGUpKSB7CisgICAgICAgIHJlbGVh
c2VTdXJmYWNlSWZOZWVkZWQoKTsKKyAgICAgICAgbV9pc0RpcnR5ID0gZmFsc2U7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV9p
bWFnZS0+c2l6ZSgpKTsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0ID0gbV9z
dXJmYWNlLT5jcmVhdGVHcmFwaGljc0NvbnRleHQocmVjdCk7CisgICAgY29udGV4dC0+ZHJhd0lt
YWdlKG1faW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIHJlY3QsIHJlY3QpOworCisg
ICAgbV9jb29yZGluYXRvci0+dXBkYXRlSW1hZ2VCYWNraW5nKGlkKCksICptX2hhbmRsZSk7Cisg
ICAgbV9pc0RpcnR5ID0gZmFsc2U7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6
OnJlbGVhc2VTdXJmYWNlSWZOZWVkZWQoKQoreworICAgIC8vIFdlIG11c3Qga2VlcCBtX3N1cmZh
Y2UgdW50aWwgVUkgUHJvY2VzcyByZWFkcyBtX3N1cmZhY2UuCisgICAgLy8gSWYgbV9zdXJmYWNl
IGV4aXN0cywgaXQgd2FzIGNyZWF0ZWQgaW4gdGhlIHByZXZpb3VzIHVwZGF0ZS4KKyAgICBtX2hh
bmRsZS5jbGVhcigpOworICAgIG1fc3VyZmFjZS5jbGVhcigpOworfQorCitzdGF0aWMgY29uc3Qg
ZG91YmxlIEludmlzaWJsZVRpbWVySW50ZXJ2YWwgPSAzOworCitib29sIENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nOjpzZXRJbnZpc2libGVJZk5lZWRlZCgpCit7CisgICAgYm9vbCBwcmV2aW91c0lz
VmlzaWJsZSA9IG1faXNWaXNpYmxlOworCisgICAgbV9pc1Zpc2libGUgPSBmYWxzZTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbGF5ZXJDbGllbnRzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGlmIChtX2xheWVyQ2xpZW50c1tpXS0+aW1hZ2VCYWNraW5nVmlzaWJsZSgpKSB7CisgICAg
ICAgICAgICBtX2lzVmlzaWJsZSA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGJvb2wgY2hhbmdlZFRvSW52aXNpYmxlID0gcHJldmlvdXNJc1Zpc2li
bGUgJiYgIW1faXNWaXNpYmxlOworICAgIGlmIChjaGFuZ2VkVG9JbnZpc2libGUpIHsKKyAgICAg
ICAgQVNTRVJUKCFtX2ludmlzaWJsZVRpbWVyLmlzQWN0aXZlKCkpOworICAgICAgICBtX2ludmlz
aWJsZVRpbWVyLnN0YXJ0T25lU2hvdChJbnZpc2libGVUaW1lckludGVydmFsKTsKKyAgICB9CisK
KyAgICBib29sIGNoYW5nZWRUb1Zpc2libGUgPSAhcHJldmlvdXNJc1Zpc2libGUgJiYgbV9pc1Zp
c2libGU7CisKKyAgICBpZiAobV9pc1Zpc2libGUgJiYgbV9pbnZpc2libGVUaW1lci5pc0FjdGl2
ZSgpKSB7CisgICAgICAgIG1faW52aXNpYmxlVGltZXIuc3RvcCgpOworICAgICAgICBjaGFuZ2Vk
VG9WaXNpYmxlID0gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIGNoYW5nZWRUb1Zpc2libGU7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmludmlzaWJsZVRpbWVyRmlyZWQo
V2ViQ29yZTo6VGltZXI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+KikKK3sKKyAgICBtX2Nvb3Jk
aW5hdG9yLT5tYWtlSW1hZ2VCYWNraW5nSW52aXNpYmxlKGlkKCkpOworfQorCit9CisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2lu
Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjcyOThjOGViMmYyOTg4YWM0N2EyOWU1N2Q3MjE5ODdhY2JkNDc0ZTYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5oCkBAIC0wLDAgKzEsOTUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
X2gKKyNkZWZpbmUgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdfaAorCisjaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiU2hhcmVhYmxlU3Vy
ZmFjZS5oIgorI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L1RpbWVyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBDb29yZGluYXRlZEltYWdlQmFj
a2luZyA6IHB1YmxpYyBSZWZDb3VudGVkPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiB7CitwdWJs
aWM6CisgICAgY2xhc3MgQ29vcmRpbmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVh
bCB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSA9IDA7
CisgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCwgY29uc3QgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJikgPSAwOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgbWFrZUltYWdlQmFja2luZ0ludmlzaWJsZShDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmco
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgPSAwOworICAgIH07CisKKyAgICBjbGFzcyBMYXll
ckNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VCYWNraW5n
VmlzaWJsZSgpID0gMDsKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZShDb29yZGluYXRvciosIFBhc3NSZWZQdHI8V2ViQ29yZTo6
SW1hZ2U+KTsKKyAgICB2aXJ0dWFsIH5Db29yZGluYXRlZEltYWdlQmFja2luZygpOworCisgICAg
c3RhdGljIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgZ2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRChXZWJDb3JlOjpJbWFnZSopOworICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaWQo
KSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisKKyAgICB2b2lkIGFkZExheWVyQ2xpZW50KExheWVy
Q2xpZW50Kik7CisgICAgdm9pZCByZW1vdmVMYXllckNsaWVudChMYXllckNsaWVudCopOworCisg
ICAgLy8gV2hlbiBhbiBhbmltYXRlZCBnaWYgaXMgcHJvZ3Jlc3NlZCwgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyIGNhbGxzIGludmFsaWRhdGUoKS4KKyAgICB2b2lkIG1hcmtEaXJ0eSgpOworCisg
ICAgLy8gQ3JlYXRlLCByZW1vdmUgb3IgdXBkYXRlIGl0cyBiYWNraW5nLgorICAgIHZvaWQgdXBk
YXRlKCk7CisKK3ByaXZhdGU6CisgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoQ29vcmRpbmF0
b3IqLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkltYWdlPik7CisKKyAgICB2b2lkIHJlbGVhc2VTdXJm
YWNlSWZOZWVkZWQoKTsKKyAgICBib29sIHNldEludmlzaWJsZUlmTmVlZGVkKCk7CisgICAgdm9p
ZCBpbnZpc2libGVUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nPiopOworCisgICAgQ29vcmRpbmF0b3IqIG1fY29vcmRpbmF0b3I7CisgICAgUmVmUHRyPFdl
YkNvcmU6OkltYWdlPiBtX2ltYWdlOworICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgbV9p
ZDsKKyAgICBWZWN0b3I8TGF5ZXJDbGllbnQqPiBtX2xheWVyQ2xpZW50czsKKworICAgIFJlZlB0
cjxTaGFyZWFibGVTdXJmYWNlPiBtX3N1cmZhY2U7CisgICAgT3duUHRyPFNoYXJlYWJsZVN1cmZh
Y2U6OkhhbmRsZT4gbV9oYW5kbGU7CisKKyAgICBXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZElt
YWdlQmFja2luZz4gbV9pbnZpc2libGVUaW1lcjsKKworICAgIGJvb2wgbV9pc0RpcnR5OworICAg
IGJvb2wgbV9pc1Zpc2libGU7CisKK307CisKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdfSApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5
ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCmluZGV4IGJiOWViM2I1Yjc4NTBiNzBmNTI1OGU4ZGFmNmM1
ZGZhOWY2NDA3ZjcuLjJmZjIxNjNlZTNhZDUyMTY2ZjQ0NTgzYzY0OTAwY2U2YzQzMTQ1MWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5j
cHAKQEAgLTI2OCw3ICsyNjgsNyBAQCBib29sIExheWVyVHJlZUNvb3JkaW5hdG9yOjpmbHVzaFBl
bmRpbmdMYXllckNoYW5nZXMoKQogCiAgICAgbV9yb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdT
dGF0ZUZvclRoaXNMYXllck9ubHkoKTsKIAotICAgIHB1cmdlUmVsZWFzZWRJbWFnZXMoKTsKKyAg
ICBmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7CiAKICAgICBpZiAobV9zaG91bGRT
eW5jUm9vdExheWVyKSB7CiAgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodG9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgpKSk7CkBAIC00MzksMTUgKzQz
OSw2IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRpZFBlcmZvcm1TY2hlZHVsZWRMYXll
ckZsdXNoKCkKICAgICB9CiB9CiAKLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnB1cmdlUmVs
ZWFzZWRJbWFnZXMoKQotewotICAgIGlmICghbV9pc1B1cmdpbmcpIHsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3JlbGVhc2VkRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVD
b29yZGluYXRvclByb3h5OjpEZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UobV9yZWxlYXNl
ZERpcmVjdGx5Q29tcG9zaXRlZEltYWdlc1tpXSkpOwotICAgIH0KLSAgICBtX3JlbGVhc2VkRGly
ZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmNsZWFyKCk7Ci19Ci0KIHZvaWQgTGF5ZXJUcmVlQ29vcmRp
bmF0b3I6OmxheWVyRmx1c2hUaW1lckZpcmVkKFRpbWVyPExheWVyVHJlZUNvb3JkaW5hdG9yPiop
CiB7CiAgICAgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKQEAgLTQ3NSw3OSArNDY2LDU1
IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCkK
ICAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBudWxscHRyOwogfQogCi1pbnQ2NF90IExheWVyVHJl
ZUNvb3JkaW5hdG9yOjphZG9wdEltYWdlQmFja2luZ1N0b3JlKEltYWdlKiBpbWFnZSkKK1Bhc3NS
ZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVh
dGVJbWFnZUJhY2tpbmdJZk5lZWRlZChJbWFnZSogaW1hZ2UpCiB7Ci0gICAgaWYgKCFpbWFnZSkK
LSAgICAgICAgcmV0dXJuIEludmFsaWRXZWJMYXllcklEOwotCi0gICAgaW50NjRfdCBrZXkgPSAw
OwotCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgUVBpeG1hcCogbmF0aXZlSW1hZ2UgPSBpbWFnZS0+
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLQotICAgIGlmICghbmF0aXZlSW1hZ2UpCi0g
ICAgICAgIHJldHVybiBJbnZhbGlkV2ViTGF5ZXJJRDsKLQotICAgIGtleSA9IG5hdGl2ZUltYWdl
LT5jYWNoZUtleSgpOwotI2VsaWYgVVNFKENBSVJPKQotICAgIE5hdGl2ZUltYWdlQ2Fpcm8qIG5h
dGl2ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgaWYg
KCFuYXRpdmVJbWFnZSkKLSAgICAgICAgcmV0dXJuIEludmFsaWRXZWJMYXllcklEOwotICAgIC8v
IFRoaXMgY2FuIGJlIHNhZmVseSBkb25lIHNpbmNlIHdlIG93biB0aGUgcmVmZXJlbmNlLgotICAg
IC8vIEEgY29ycmVzcG9uZGluZyBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koKSBpcyBlbnN1cmVkIGlu
IHJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZSgpLgotICAgIGNhaXJvX3N1cmZhY2VfdCogY2Fpcm9T
dXJmYWNlID0gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UobmF0aXZlSW1hZ2UtPnN1cmZhY2UoKSk7
Ci0gICAga2V5ID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90PihjYWlyb1N1cmZhY2UpOwotI2Vu
ZGlmCi0KLSAgICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7Ci0KLSAgICBpZiAoaXQgIT0gbV9k
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQoKSkgewotICAgICAgICArKyhpdC0+
dmFsdWUpOwotICAgICAgICByZXR1cm4ga2V5OwotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIHdl
IHdlcmUgZ29pbmcgdG8gcmVsZWFzZSB0aGlzIGltYWdlIGR1cmluZyB0aGUgbmV4dCBmbHVzaC4K
LSAgICBzaXplX3QgcmVsZWFzZWRJbmRleCA9IG1fcmVsZWFzZWREaXJlY3RseUNvbXBvc2l0ZWRJ
bWFnZXMuZmluZChrZXkpOwotICAgIGlmIChyZWxlYXNlZEluZGV4ID09IG5vdEZvdW5kKSB7Ci0g
ICAgICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6
Y3JlYXRlU2hhcmVhYmxlKGltYWdlLT5zaXplKCksIChpbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxw
aGEoKSA/IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSA6IDApKTsKLSAgICAgICAgewot
ICAgICAgICAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250
ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKLSAgICAgICAgICAgIGdyYXBo
aWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2lu
dDo6emVybygpKTsKLSAgICAgICAgfQotICAgICAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBo
YW5kbGU7Ci0gICAgICAgIGJpdG1hcC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSk7Ci0gICAgICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Q3JlYXRl
RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Uoa2V5LCBoYW5kbGUpKTsKKyAgICBDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEIGltYWdlSUQgPSBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Z2V0Q29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRChpbWFnZSk7CisgICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRv
ciBpdCA9IG1faW1hZ2VCYWNraW5ncy5maW5kKGltYWdlSUQpOworICAgIFJlZlB0cjxDb29yZGlu
YXRlZEltYWdlQmFja2luZz4gaW1hZ2VCYWNraW5nOworICAgIGlmIChpdCA9PSBtX2ltYWdlQmFj
a2luZ3MuZW5kKCkpIHsKKyAgICAgICAgaW1hZ2VCYWNraW5nID0gQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmc6OmNyZWF0ZSh0aGlzLCBpbWFnZSk7CisgICAgICAgIG1faW1hZ2VCYWNraW5ncy5hZGQo
aW1hZ2VJRCwgaW1hZ2VCYWNraW5nKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9yZWxlYXNlZERp
cmVjdGx5Q29tcG9zaXRlZEltYWdlcy5yZW1vdmUocmVsZWFzZWRJbmRleCk7CisgICAgICAgIGlt
YWdlQmFja2luZyA9IGl0LT52YWx1ZTsKIAotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VS
ZWZDb3VudHMuYWRkKGtleSwgMSk7Ci0gICAgcmV0dXJuIGtleTsKKyAgICByZXR1cm4gaW1hZ2VC
YWNraW5nOwogfQogCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZWxlYXNlSW1hZ2VCYWNr
aW5nU3RvcmUoaW50NjRfdCBrZXkpCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVJ
bWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQogewotICAgIGlm
ICgha2V5KQotICAgICAgICByZXR1cm47Ci0gICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVy
YXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZmluZChrZXkpOwot
ICAgIGlmIChpdCA9PSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKQot
ICAgICAgICByZXR1cm47CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Q3JlYXRlSW1h
Z2VCYWNraW5nKGltYWdlSUQpKTsKK30KIAotICAgIGl0LT52YWx1ZS0tOwordm9pZCBMYXllclRy
ZWVDb29yZGluYXRvcjo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQgaW1hZ2VJRCwgY29uc3QgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCit7Cisg
ICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6VXBkYXRlSW1hZ2VCYWNraW5nKGltYWdlSUQs
IGhhbmRsZSkpOworfQogCi0gICAgaWYgKGl0LT52YWx1ZSkKLSAgICAgICAgcmV0dXJuOwordm9p
ZCBMYXllclRyZWVDb29yZGluYXRvcjo6bWFrZUltYWdlQmFja2luZ0ludmlzaWJsZShDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0
cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eTo6TWFrZUltYWdlQmFja2luZ0ludmlzaWJsZShpbWFnZUlEKSk7Cit9CiAKLSNpZiBVU0Uo
Q0FJUk8pCi0gICAgLy8gQ29tcGxlbWVudCB0aGUgcmVmZXJlbmNpbmcgaW4gYWRvcHRJbWFnZUJh
Y2tpbmdTdG9yZSgpLgotICAgIGNhaXJvX3N1cmZhY2VfdCogY2Fpcm9TdXJmYWNlID0gcmVpbnRl
cnByZXRfY2FzdDxjYWlyb19zdXJmYWNlX3QqPihrZXkpOwotICAgIGNhaXJvX3N1cmZhY2VfZGVz
dHJveShjYWlyb1N1cmZhY2UpOwotI2VuZGlmCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpy
ZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQorewor
ICAgIGlmIChtX2lzUHVyZ2luZykKKyAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kaXJlY3RseUNv
bXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5yZW1vdmUoaXQpOwotICAgIG1fcmVsZWFzZWREaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZXMuYXBwZW5kKGtleSk7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7
CisgICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlEKSk7CisgICAgbV9z
aG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1faW1hZ2VCYWNraW5ncy5yZW1vdmUoaW1hZ2VJ
RCk7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclBy
b3h5OjpSZW1vdmVJbWFnZUJhY2tpbmcoaW1hZ2VJRCkpOwogfQogCit2b2lkIExheWVyVHJlZUNv
b3JkaW5hdG9yOjpmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCkKK3sKKyAgICBJbWFn
ZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faW1hZ2VCYWNraW5ncy5lbmQoKTsKKyAgICBm
b3IgKEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgaXRlciA9IG1faW1hZ2VCYWNraW5ncy5iZWdp
bigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICBpdGVyLT52YWx1ZS0+dXBkYXRlKCk7
Cit9CiAKIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQo
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSAvKiB0aW1lICovKQogewpAQCAt
Njk3LDEwICs2NjQsNyBAQCB2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpwdXJnZUJhY2tpbmdT
dG9yZXMoKQogICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIqPjo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQogICAgICAgICAoKml0KS0+cHVyZ2VCYWNraW5nU3RvcmVzKCk7CiAKLSAgICBwdXJn
ZVJlbGVhc2VkSW1hZ2VzKCk7Ci0KLSAgICBBU1NFUlQoIW1fZGlyZWN0bHlDb21wb3NpdGVkSW1h
Z2VSZWZDb3VudHMuc2l6ZSgpKTsKLSAgICBBU1NFUlQoIW1fcmVsZWFzZWREaXJlY3RseUNvbXBv
c2l0ZWRJbWFnZXMuc2l6ZSgpKTsKKyAgICBtX2ltYWdlQmFja2luZ3MuY2xlYXIoKTsKICAgICBt
X3VwZGF0ZUF0bGFzZXMuY2xlYXIoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmgKaW5kZXggMWE5ZTE3OWFjODg5ZTI2ZDAzYmZiMWM2
NjgxZWI3NTkxZGMwNzcyNi4uNTA5NWU4NjAxMGIxZjNmN2RjMmQzZDkzMDUyODFhNGQwMjljZDQ0
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRv
ci5oCkBAIC0yMyw2ICsyMyw3IEBACiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogCiAj
aW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmcuaCIKICNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCkBAIC0zOSw2ICs0MCw3IEBA
IGNsYXNzIFdlYlBhZ2U7CiAKIGNsYXNzIExheWVyVHJlZUNvb3JkaW5hdG9yIDogcHVibGljIExh
eWVyVHJlZUhvc3QsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQKICAgICAsIHB1YmxpYyBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKKyAgICAsIHB1YmxpYyBDb29yZGluYXRlZElt
YWdlQmFja2luZzo6Q29vcmRpbmF0b3IKICAgICAsIHB1YmxpYyBVcGRhdGVBdGxhc0NsaWVudAog
ICAgICwgcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5IHsKIHB1YmxpYzoKQEAg
LTY3LDggKzY5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygp
IHsgbV9pc1N1c3BlbmRlZCA9IHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVy
aW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gZmFsc2U7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9CiAg
ICAgdmlydHVhbCB2b2lkIGRldmljZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKCkgeyB9Ci0gICAgdmly
dHVhbCBpbnQ2NF90IGFkb3B0SW1hZ2VCYWNraW5nU3RvcmUoV2ViQ29yZTo6SW1hZ2UqKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKGludDY0X3QpOworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNr
aW5nSWZOZWVkZWQoV2ViQ29yZTo6SW1hZ2UqKSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJ
bmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVU
aWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpOwpAQCAtMTEyLDYgKzExMywxNCBAQCBwcml2YXRlOgogICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsK
IAorICAgIC8vIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRvcgorICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZElt
YWdlQmFja2luZ0lELCBjb25zdCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgbWFrZUltYWdlQmFja2luZ0ludmlzaWJsZShDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW1hZ2VCYWNr
aW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOworCisgICAgdm9pZCBmbHVz
aFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7CisKICAgICAvLyBHcmFwaGljc0xheWVyRmFj
dG9yeQogICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBjcmVh
dGVHcmFwaGljc0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQqKSBPVkVSUklERTsK
IApAQCAtMTI1LDcgKzEzNCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzeW5jRGlzcGxheVN0YXRl
KCk7CiAgICAgdm9pZCBsb2NrQW5pbWF0aW9ucygpOwogICAgIHZvaWQgdW5sb2NrQW5pbWF0aW9u
cygpOwotICAgIHZvaWQgcHVyZ2VSZWxlYXNlZEltYWdlcygpOwogCiAgICAgdm9pZCBsYXllckZs
dXNoVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxMYXllclRyZWVDb29yZGluYXRvcj4qKTsKIApA
QCAtMTQ2LDggKzE1NCw4IEBAIHByaXZhdGU6CiAKICAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcio+IG1fcmVnaXN0ZXJlZExheWVyczsKICAgICBWZWN0b3I8V2Vi
TGF5ZXJJRD4gbV9kZXRhY2hlZExheWVyczsKLSAgICBIYXNoTWFwPGludDY0X3QsIGludD4gbV9k
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50czsKLSAgICBWZWN0b3I8aW50NjRfdD4gbV9y
ZWxlYXNlZERpcmVjdGx5Q29tcG9zaXRlZEltYWdlczsKKyAgICB0eXBlZGVmIEhhc2hNYXA8Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiA+
IEltYWdlQmFja2luZ01hcDsKKyAgICBJbWFnZUJhY2tpbmdNYXAgbV9pbWFnZUJhY2tpbmdzOwog
ICAgIFZlY3RvcjxPd25QdHI8VXBkYXRlQXRsYXM+ID4gbV91cGRhdGVBdGxhc2VzOwogCiAgICAg
Ym9vbCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174561</attachid>
            <date>2012-11-15 17:03:30 -0800</date>
            <delta_ts>2012-11-15 21:24:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101023-20121116100053.patch</filename>
            <type>text/plain</type>
            <size>41981</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0ODUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYWUxYTk5OGI3NjY5ZTgw
NjJhZDg1NTdhOTNjYzA4ZjZjMjFjNWIyMy4uNDgxMThkYmU2NmZkNDIxNDJkOTNkOTdlMTA2YTZm
ZDBhMTExZDkwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzIEBACisyMDEyLTExLTE1ICBIdWFu
ZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIENvb3JkaW5h
dGVkIEdyYXBoaWNzOiBSZWZhY3RvciBjb2RlIHJlbGF0ZWQgdG8gZGlyZWN0bHkgY29tcG9zaXRl
ZCBpbWFnZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDEwMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbnRlcm5hbCBSZXZpZXcgYnkgR3dhbmcgWW9vbiBId2FuZyBhbmQgSmFlIEh5dW4gUGFyay4K
KworICAgICAgICBDdXJyZW50bHksIExheWVyVHJlZUNvb3JkaW5hdG9yIG1hbmFnZXMgY29tcG9z
aXRlZCBpbWFnZXMgdXNpbmcKKyAgICAgICAgU2hhcmVhYmxlQml0bWFwLiBUaGlzIHBhdGNoIGlu
dHJvZHVjZXMgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgd2hpY2gKKyAgICAgICAgcGxheXMgYSBy
b2xlIGluIG1hbmFnaW5nIGNvbXBvc2l0ZWQgaW1hZ2VzLiBDb29yZGluYXRlZEltYWdlQmFja2lu
ZyBtYWtlcyB1cworICAgICAgICBnYXRoZXIgY29kZSByZWxhdGVkIHRvIGEgZGlyZWN0bHkgY29t
cG9zaXRlZCBpbWFnZSBpbnRvIGEgc2luZ2xlIGNsYXNzLgorCisgICAgICAgIFdlIGNyZWF0ZSBv
bmx5IG9uZSBDb29yZGluYXRlZEltYWdlQmFja2luZyBwZXIgaW1hZ2UuIEZvciBleGFtcGxlLCBp
biB0aGUgbGVhdmVzCisgICAgICAgIGRlbW8sIHdlIGNyZWF0ZSBvbmx5IDMgdGV4dHVyZXMgb2Yg
bGVhdmVzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogU2hhcmVkL1dl
YkxheWVyVHJlZUluZm8uaDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJJbmZvOjpXZWJMYXll
ckluZm8pOgorICAgICAgICAoV2ViTGF5ZXJJbmZvKToKKyAgICAgICAgKiBUYXJnZXQucHJpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxl
Ojpzd2FwQnVmZmVycyk6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHk6OmNyZWF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnVwZGF0ZUltYWdlQmFja2luZyk6CisgICAgICAg
IChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojpy
ZW1vdmVJbWFnZUJhY2tpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaDoKKyAgICAgICAgKExheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6YXNzaWduSW1hZ2VCYWNr
aW5nVG9MYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVS
ZWxlYXNlZEltYWdlQmFja2luZ3NJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZVJlbmRlcmVyOjpwdXJnZUdMUmVzb3VyY2VzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oOgorICAgICAgICAoTGF5ZXJUcmVlUmVu
ZGVyZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNJbWFnZUJhY2tpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZWxlYXNlSW1hZ2VCYWNraW5nSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpiZWdp
bkNvbnRlbnRVcGRhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oOgorICAgICAgICAoQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyQ2xpZW50KToKKyAgICAgICAgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpnZXRDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGlu
YXRlZEltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nOjp+Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZEltYWdlQmFja2luZzo6YWRkTGF5ZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZEltYWdlQmFja2luZzo6cmVtb3ZlTGF5ZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6bWFya0RpcnR5KToKKyAgICAgICAgKFdlYktpdDo6
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nOjpyZWxlYXNlU3VyZmFjZUlmTmVlZGVkKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFj
a2luZy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKENvb3JkaW5hdG9yKToK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmlkKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGlu
YXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpmbHVzaFBl
bmRpbmdMYXllckNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRv
cjo6Y3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVDb29yZGluYXRvcjo6Y3JlYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OnVwZGF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW1vdmVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdl
cyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpwdXJnZUJhY2tpbmdT
dG9yZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0xheWVyVHJlZUNvb3JkaW5hdG9yLmg6CisgICAgICAgIChMYXllclRyZWVDb29yZGluYXRvcik6
CisKIDIwMTItMTEtMTQgIEh1YW5nIERvbmdzdW5nICA8bHV4dGVsbGFAY29tcGFueTEwMC5uZXQ+
CiAKICAgICAgICAgQ29vcmRpbmF0ZWQgR3JhcGhpY3M6IFJlbW92ZSB0aWxlcyBvZiBhIGxheWVy
IHdoZW4gdGhleSBhcmUgb2ZmIHRoZSB2aWV3cG9ydC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKaW5kZXgg
NmU0NmY0OGE5OWUzMTJiMzcwNjMxY2FiMjMzMjdiOTJiNTU1Y2IxZS4uMDVkN2M2ZDc5NmMxNmNh
YTM4YzZlZDBmYzdhNGZkYzQ5MDE4MGJkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ01h
a2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKQEAgLTQ5NCw2
ICs0OTQsNyBAQCBTRVQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2VHcm91cFByb3h5LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5j
cHAKIAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuY3BwCiAgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaAppbmRleCA1OGUwN2JjMDI3ZWZk
NWMxYTk1OWIzYjBjNjE4ZTRhZTA1Y2U3OGU4Li5lNmEyYWVkYTYzYTRjNWNjNDUyNjc0ZTIyNzg5
ZWRkNjkwMjA0YmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJU
cmVlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgK
QEAgLTI3LDI1ICsyNywyNyBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZs
b2F0U2l6ZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJTaGFyZWFi
bGVCaXRtYXAuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHR5cGVkZWYgdWludDMyX3QgV2Vi
TGF5ZXJJRDsKIGVudW0geyBJbnZhbGlkV2ViTGF5ZXJJRCA9IDAgfTsKIAordHlwZWRlZiB1aW50
cHRyX3QgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRDsKK2VudW0geyBJbnZhbGlkQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCA9IDAgfTsKKwogLy8gTk9URTogV2ViTGF5ZXJJbmZvIHNob3VsZCBv
bmx5IHVzZSBQT0QgdHlwZXMsIGFzIHRvIG1ha2Ugc2VyaWFsaXphdGlvbiBmYXN0ZXIuCiBzdHJ1
Y3QgV2ViTGF5ZXJJbmZvIHsKICAgICBXZWJMYXllckluZm8oKQogICAgICAgICA6IHJlcGxpY2Eo
SW52YWxpZFdlYkxheWVySUQpCiAgICAgICAgICwgbWFzayhJbnZhbGlkV2ViTGF5ZXJJRCkKLSAg
ICAgICAgLCBpbWFnZUJhY2tpbmdTdG9yZUlEKDApCisgICAgICAgICwgaW1hZ2VJRChJbnZhbGlk
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkKICAgICAgICAgLCBvcGFjaXR5KDApCiAgICAgICAg
ICwgZmxhZ3MoMCkgeyB9CiAKICAgICBXZWJMYXllcklEIHJlcGxpY2E7CiAgICAgV2ViTGF5ZXJJ
RCBtYXNrOwotICAgIGludDY0X3QgaW1hZ2VCYWNraW5nU3RvcmVJRDsKKyAgICBDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEIGltYWdlSUQ7CiAKICAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHBvczsK
ICAgICBXZWJDb3JlOjpGbG9hdFBvaW50M0QgYW5jaG9yUG9pbnQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCBk
YWM5YjlhMjQ4OWI4YTUyNmJlZWMzYzNkYjRmYTlmNjM2Nzc4MWQyLi43Y2QwMTZlZDk4Njk0ZjEy
OTcxZTY3NzQ4YmFhOGJjMDZiMjQ4M2NjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJn
ZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTM2OSw2ICszNjksNyBA
QCBIRUFERVJTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmgg
XAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oIFwKICAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
aCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmcuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmggXAogICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9UYXBIaWdobGlnaHRDb250cm9sbGVyLmggXApAQCAtNzUwLDYgKzc1MSw3IEBAIFNPVVJD
RVMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwIFwKICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIFwKICAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3Bw
IFwKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEltYWdlQmFja2luZy5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcCBcCiAgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL1RhcEhpZ2hsaWdodENvbnRyb2xsZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcAppbmRleCA1MWVkNmM4NTJlMWE1NDlkZmJkMjFm
NDBmMWQ3ODY1YWQyNDkzZGI2Li4wNTRhMWU5YmQ2OWYxNGIzMjY5ZjY4YzNhZDM0ZjhhZGE3OTE0
YTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwCkBA
IC00OSw2ICs0OSw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlOjpzd2FwQnVm
ZmVycyhXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwCiAgICAgICAgIHNob3VsZFJl
c2V0ID0gdHJ1ZTsKICAgICB9CiAKKyAgICBBU1NFUlQodGV4dHVyZU1hcHBlci0+bWF4VGV4dHVy
ZVNpemUoKSA+PSBzdGQ6Om1heChtX3RpbGVSZWN0LnNpemUoKS53aWR0aCgpLCBtX3RpbGVSZWN0
LnNpemUoKS5oZWlnaHQoKSkpOwogICAgIGlmIChzaG91bGRSZXNldCkKICAgICAgICAgdGV4dHVy
ZS0+cmVzZXQobV90aWxlUmVjdC5zaXplKCksIG1fc3VyZmFjZS0+ZmxhZ3MoKSAmIFNoYXJlYWJs
ZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSA/IEJpdG1hcFRleHR1cmU6OlN1cHBvcnRzQWxwaGEgOiAw
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcApp
bmRleCBiM2QxNDBmYTc0NGI1ZjdiZTMzY2E2MWMxMjY0Yjg0NWU5YjQ4ODkyLi40NmZlZTUzYjE3
Mzg1M2RlYWM1Njk1YzZhMDcyZWE0OWRmZDBjYWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcApAQCAtMTI3LDE1ICsxMjcsMTkgQEAgdm9pZCBM
YXllclRyZWVDb29yZGluYXRvclByb3h5OjpkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBjb250ZW50c1MKICNlbmRpZgogfQogCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHk6OmNyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5LCBjb25zdCBX
ZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUpCit2b2lkIExheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6OmNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEIGltYWdlSUQpCiB7Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hh
cmVhYmxlQml0bWFwOjpjcmVhdGUoaGFuZGxlKTsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZM
YXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlSW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGtleSwgYml0
bWFwKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0
ZUltYWdlQmFja2luZywgbV9yZW5kZXJlci5nZXQoKSwgaW1hZ2VJRCkpOwogfQogCi12b2lkIExh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShp
bnQ2NF90IGtleSkKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRlSW1hZ2VC
YWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwgY29uc3QgU2hhcmVhYmxl
U3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5
ZXJUcmVlUmVuZGVyZXI6OmRlc3Ryb3lJbWFnZSwgbV9yZW5kZXJlci5nZXQoKSwga2V5KSk7Cisg
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZUltYWdlQmFj
a2luZywgbV9yZW5kZXJlci5nZXQoKSwgaW1hZ2VJRCwgU2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRl
KGhhbmRsZSkpKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpyZW1vdmVJ
bWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQoreworICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVJbWFnZUJhY2tpbmcs
IG1fcmVuZGVyZXIuZ2V0KCksIGltYWdlSUQpKTsKIH0KIAogdm9pZCBMYXllclRyZWVDb29yZGlu
YXRvclByb3h5OjpzZXRDb250ZW50c1NpemUoY29uc3QgRmxvYXRTaXplJiBjb250ZW50c1NpemUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Q29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmgKaW5kZXggNjQ2
ODAxMTY4ZjI0YTc4OWI3ZWI4MDcxY2Y0YjZmOGE0YzRmYjk3YS4uNGU5OTc4YTJhOGI4NDc2MWQ5
ZWY0NWE3N2Y3N2JmNDc5OWEwMTAwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHkuaApAQCAtNjcsOCArNjcsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1v
dmVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQpOwogICAgIHZvaWQgY3JlYXRl
VXBkYXRlQXRsYXMoaW50IGF0bGFzSUQsIGNvbnN0IFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYp
OwogICAgIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQpOwotICAgIHZvaWQgY3Jl
YXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCwgY29uc3QgV2ViS2l0OjpTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSYpOwotICAgIHZvaWQgZGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZElt
YWdlKGludDY0X3QpOworICAgIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQpOworICAgIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQsIGNvbnN0IFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYpOworICAgIHZvaWQg
cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwogICAgIHZvaWQg
ZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5l
Y3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJik7CiAg
ICAgdm9pZCB1cGRhdGVWaWV3cG9ydCgpOwogICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNz
YWdlcy5pbgppbmRleCBjZDMyZWQ5ODIwYTNlNGJkNDIxOGM1YmMyYTMxNDBhZDViNjIzM2Q3Li43
Zjc0NGE2Y2VhMmQxZDZmMTUxOTUxYjA4OGE5NWY3ZjNjYzlmYjczIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGlu
YXRvclByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4KQEAg
LTMxLDggKzMxLDkgQEAgbWVzc2FnZXMgLT4gTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSB7CiAg
ICAgUmVtb3ZlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0aWxlSUQpCiAgICAg
Q3JlYXRlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQsIFdlYktpdDo6U2hhcmVhYmxlU3VyZmFjZTo6
SGFuZGxlIGhhbmRsZSkKICAgICBSZW1vdmVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCkKLSAgICBD
cmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSwgV2ViS2l0OjpTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSBoYW5kbGUpCi0gICAgRGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZElt
YWdlKGludDY0X3Qga2V5KQorICAgIENyZWF0ZUltYWdlQmFja2luZyh1aW50cHRyX3QgaW1hZ2VJ
RCkKKyAgICBVcGRhdGVJbWFnZUJhY2tpbmcodWludHB0cl90IGltYWdlSUQsIFdlYktpdDo6U2hh
cmVhYmxlU3VyZmFjZTo6SGFuZGxlIGhhbmRsZSkKKyAgICBSZW1vdmVJbWFnZUJhY2tpbmcodWlu
dHB0cl90IGltYWdlSUQpCiAgICAgRGlkUmVuZGVyRnJhbWUoV2ViQ29yZTo6SW50U2l6ZSBjb250
ZW50c1NpemUsIFdlYkNvcmU6OkludFJlY3QgY292ZXJlZFJlY3QpCiAgICAgRGlkQ2hhbmdlU2Ny
b2xsUG9zaXRpb24oV2ViQ29yZTo6SW50UG9pbnQgcG9zaXRpb24pCiAgICAgU2V0TGF5ZXJBbmlt
YXRpb25zKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBhbmlt
YXRpb25zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCmluZGV4IDExZWQwM2Ji
MTExNDZkOGU1OWIyNGMzNzlhMjNlY2IzMGRkMWU3MjkuLjBiZjcyYTZjOTZhYzAwZGI5ZTkxZDIx
ZGY0NWM5YjJmZWEzZWVjZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAK
QEAgLTEsNSArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIg
Q29tcGFueSAxMDAsIEluYy4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjcsNyArMjgsNiBAQAog
I2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eS5oIgogI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgotI2luY2x1ZGUg
IlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdM
LmgiCkBAIC0zMDIsNyArMzAyLDcgQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJT
dGF0ZShXZWJMYXllcklEIGlkLCBjb25zdCBXZWJMYXllckluZm8mIGxheWVySW4KICAgICBlbHNl
CiAgICAgICAgIG1fZml4ZWRMYXllcnMucmVtb3ZlKGlkKTsKIAotICAgIGFzc2lnbkltYWdlVG9M
YXllcihsYXllciwgbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOworICAgIGFzc2lnbklt
YWdlQmFja2luZ1RvTGF5ZXIobGF5ZXIsIGxheWVySW5mby5pbWFnZUlEKTsKIAogICAgIC8vIE5l
dmVyIG1ha2UgdGhlIHJvb3QgbGF5ZXIgY2xpcC4KICAgICBsYXllci0+c2V0TWFza3NUb0JvdW5k
cyhsYXllckluZm8uaXNSb290TGF5ZXIgPyBmYWxzZSA6IGxheWVySW5mby5tYXNrc1RvQm91bmRz
KTsKQEAgLTQxNiwzMSArNDE2LDU2IEBAIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRp
bGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBUaWxlVXBkCiAgICAgbV9i
YWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOwogfQogCi12
b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVJbWFnZShpbnQ2NF90IGltYWdlSUQsIFBhc3NS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPiB3ZWFrQml0bWFwKQordm9pZCBMYXllclRyZWVSZW5kZXJl
cjo6Y3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkK
IHsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSB3ZWFrQml0bWFwOwotICAg
IFJlZlB0cjxUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IFRl
eHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7Ci0gICAgbV9kaXJlY3RseUNv
bXBvc2l0ZWRJbWFnZXMuc2V0KGltYWdlSUQsIGJhY2tpbmdTdG9yZSk7Ci0gICAgYmFja2luZ1N0
b3JlLT51cGRhdGVDb250ZW50cyhtX3RleHR1cmVNYXBwZXIuZ2V0KCksIGJpdG1hcC0+Y3JlYXRl
SW1hZ2UoKS5nZXQoKSwgQml0bWFwVGV4dHVyZTo6VXBkYXRlQ2Fubm90TW9kaWZ5T3JpZ2luYWxJ
bWFnZURhdGEpOworICAgIEFTU0VSVCghbV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQp
KTsKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZShDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCkpOworICAgIG1faW1hZ2VCYWNraW5ncy5hZGQo
aW1hZ2VJRCwgYmFja2luZ1N0b3JlLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlUmVu
ZGVyZXI6OmRlc3Ryb3lJbWFnZShpbnQ2NF90IGltYWdlSUQpCit2b2lkIExheWVyVHJlZVJlbmRl
cmVyOjp1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlE
LCBQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IHN1cmZhY2UpCiB7Ci0gICAgbV9kaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZXMucmVtb3ZlKGltYWdlSUQpOworICAgIEFTU0VSVChtX2ltYWdlQmFj
a2luZ3MuY29udGFpbnMoaW1hZ2VJRCkpOworICAgIEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3Ig
aXQgPSBtX2ltYWdlQmFja2luZ3MuZmluZChpbWFnZUlEKTsKKyAgICBSZWZQdHI8Q29vcmRpbmF0
ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IGl0LT52YWx1ZTsKKworICAgIC8vIENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nIGlzIHJlYWxpemVkIHRvIENvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
IHdpdGggb25seSBvbmUgdGlsZSBpbiBVSSBQcm9jZXNzLgorICAgIGJhY2tpbmdTdG9yZS0+Y3Jl
YXRlVGlsZSgxIC8qIGlkICovLCAxIC8qIHNjYWxlICovKTsKKyAgICBJbnRSZWN0IHJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgc3VyZmFjZS0+c2l6ZSgpKTsKKyAgICAvLyBTZWUgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzaG91bGREaXJlY3RseUNvbXBvc2l0ZUltYWdlKCkKKyAgICBBU1NFUlQo
MjAwMCA+PSBzdGQ6Om1heChyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKKyAgICBiYWNr
aW5nU3RvcmUtPnNldFNpemUocmVjdC5zaXplKCkpOworICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRl
VGlsZSgxIC8qIGlkICovLCByZWN0LCByZWN0LCBzdXJmYWNlLCByZWN0LmxvY2F0aW9uKCkpOwor
CisgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUp
OwogfQogCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjphc3NpZ25JbWFnZVRvTGF5ZXIoR3JhcGhp
Y3NMYXllciogbGF5ZXIsIGludDY0X3QgaW1hZ2VJRCkKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6
OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCiB7
Ci0gICAgaWYgKCFpbWFnZUlEKSB7CisgICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlu
cyhpbWFnZUlEKSk7CisKKyAgICAvLyBXZSBkb24ndCB3YW50IFRleHR1cmVNYXBwZXJMYXllciBy
ZWZlcnMgYSBkYW5nbGluZyBwb2ludGVyLgorICAgIEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3Ig
aXQgPSBtX2ltYWdlQmFja2luZ3MuZmluZChpbWFnZUlEKTsKKyAgICBtX3JlbGVhc2VkSW1hZ2VC
YWNraW5ncy5hcHBlbmQoaXQtPnZhbHVlKTsKKyAgICBtX2ltYWdlQmFja2luZ3MucmVtb3ZlKGlt
YWdlSUQpOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjphc3NpZ25JbWFnZUJhY2tpbmdU
b0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlt
YWdlSUQpCit7CisgICAgaWYgKGltYWdlSUQgPT0gSW52YWxpZENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQpIHsKICAgICAgICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYSgwKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLQotICAgIEhhc2hNYXA8aW50NjRfdCwgUmVmUHRyPFRleHR1cmVNYXBw
ZXJCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZXMuZmluZChpbWFnZUlEKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJ
bWFnZXMuZW5kKCkpOworICAgIEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdl
QmFja2luZ3MuZmluZChpbWFnZUlEKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9pbWFnZUJhY2tpbmdz
LmVuZCgpKTsKICAgICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKGl0LT52YWx1ZS5nZXQoKSk7
CiB9CiAKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVJlbGVhc2VkSW1hZ2VCYWNraW5n
c0lmTmVlZGVkKCkKK3sKKyAgICBtX3JlbGVhc2VkSW1hZ2VCYWNraW5ncy5jbGVhcigpOworfQor
CiB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjb21taXRUaWxlT3BlcmF0aW9ucygpCiB7CiAgICAg
SGFzaFNldDxSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGVuZCA9
IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5lbmQoKTsKQEAgLTQ1OSw2ICs0ODQs
NyBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdlcygpCiAKICAgICBt
X3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKEZsb2F0UmVjdCgpKTsKICAgICBjb21t
aXRUaWxlT3BlcmF0aW9ucygpOworICAgIHJlbW92ZVJlbGVhc2VkSW1hZ2VCYWNraW5nc0lmTmVl
ZGVkKCk7CiAKICAgICAvLyBUaGUgcGVuZGluZyB0aWxlcyBzdGF0ZSBpcyBvbiBpdHMgd2F5IGZv
ciB0aGUgc2NyZWVuLCB0ZWxsIHRoZSB3ZWIgcHJvY2VzcyB0byByZW5kZXIgdGhlIG5leHQgb25l
LgogICAgIGRpc3BhdGNoT25NYWluVGhyZWFkKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZW5k
ZXJOZXh0RnJhbWUsIHRoaXMpKTsKQEAgLTUxNSw3ICs1NDEsNyBAQCB2b2lkIExheWVyVHJlZVJl
bmRlcmVyOjpwdXJnZUdMUmVzb3VyY2VzKCkKICAgICBpZiAobGF5ZXIpCiAgICAgICAgIGxheWVy
LT5jbGVhckJhY2tpbmdTdG9yZXNSZWN1cnNpdmUoKTsKIAotICAgIG1fZGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VzLmNsZWFyKCk7CisgICAgbV9pbWFnZUJhY2tpbmdzLmNsZWFyKCk7CiAjaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCiAgICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5jbGVhcigpOwog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuaAppbmRleCAyZWYwMWVjYjE4MDVi
ODhkY2FkYTdkZmUwOGZhYTNlZTlkYmRjMGI5Li40N2UyM2QzOGM2NDk0Yjk1NWJjOWMwODdmYTQz
N2U3MjVlYmUwOWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmgKQEAgLTg5LDgg
Kzg5LDkgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQpOwog
ICAgIHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQsIGNvbnN0IFRpbGVVcGRhdGUmKTsK
ICAgICB2b2lkIGZsdXNoTGF5ZXJDaGFuZ2VzKCk7Ci0gICAgdm9pZCBjcmVhdGVJbWFnZShpbnQ2
NF90LCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4pOwotICAgIHZvaWQgZGVzdHJveUltYWdl
KGludDY0X3QpOworICAgIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQpOworICAgIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQsIFBhc3NSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4pOworICAgIHZvaWQgcmVtb3Zl
SW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwogICAgIHZvaWQgc2V0TGF5
ZXJBbmltYXRpb25zKFdlYkxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmlt
YXRpb25zJik7CiAgICAgdm9pZCBzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wpOwogCkBAIC0xMTks
NyArMTIwLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpc3BhdGNoT25NYWluVGhyZWFkKGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mKTsKICAgICB2b2lkIGFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXll
cnMoKTsKIAotICAgIHZvaWQgYXNzaWduSW1hZ2VUb0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqLCBpbnQ2NF90IGltYWdlSUQpOworICAgIHZvaWQgYXNzaWduSW1hZ2VCYWNraW5nVG9MYXll
cihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7Cisg
ICAgdm9pZCByZW1vdmVSZWxlYXNlZEltYWdlQmFja2luZ3NJZk5lZWRlZCgpOwogICAgIHZvaWQg
ZW5zdXJlUm9vdExheWVyKCk7CiAgICAgdm9pZCBlbnN1cmVMYXllcihXZWJMYXllcklEKTsKICAg
ICB2b2lkIGNvbW1pdFRpbGVPcGVyYXRpb25zKCk7CkBAIC0xMzksNyArMTQxLDExIEBAIHByaXZh
dGU6CiAgICAgTXV0ZXggbV9yZW5kZXJRdWV1ZU11dGV4OwogCiAgICAgT3duUHRyPFdlYkNvcmU6
OlRleHR1cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsKLSAgICBIYXNoTWFwPGludDY0X3QsIFJl
ZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiA+IG1fZGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2VzOworCisgICAgdHlwZWRlZiBIYXNoTWFwPENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQsIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPiBJbWFnZUJhY2tpbmdNYXA7
CisgICAgSW1hZ2VCYWNraW5nTWFwIG1faW1hZ2VCYWNraW5nczsKKyAgICBWZWN0b3I8UmVmUHRy
PENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiA+IG1fcmVsZWFzZWRJbWFnZUJhY2tpbmdzOworCiAg
ICAgSGFzaFNldDxSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID4gbV9iYWNraW5nU3Rv
cmVzV2l0aFBlbmRpbmdCdWZmZXJzOwogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
LmNwcAppbmRleCA0ZmJiNTkwZDlhNTc3MTMwYjYzOTA2NzgyZjgwYTczNjA0YjE2ZGM2Li42NjE3
ZGQyOWI2NzJkMTllZGNjYWNiZTgzZGFlYjU2NDM2ZGNiMjgxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKQEAgLTEs
NSArMSw2IEBACiAvKgogIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAs
IEluYy4KIAogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzUxLDggKzM1Miw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQogICAgICAgICAv
LyBUaGlzIGNvZGUgbWFrZXMgdGhlIGFzc3VtcHRpb24gdGhhdCBwb2ludGVyIGVxdWFsaXR5IG9u
IGEgTmF0aXZlSW1hZ2VQdHIgaXMgYSB2YWxpZCB3YXkgdG8gdGVsbCBpZiB0aGUgaW1hZ2UgaXMg
Y2hhbmdlZC4KICAgICAgICAgLy8gVGhpcyBhc3N1bXB0aW9uIGlzIHRydWUgaW4gUXQsIEdUSyBh
bmQgRUZMLgogICAgICAgICBOYXRpdmVJbWFnZVB0ciBuZXdOYXRpdmVJbWFnZVB0ciA9IGltYWdl
LT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgICAgICBpZiAoIW5ld05hdGl2ZUlt
YWdlUHRyKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQobmV3TmF0aXZlSW1h
Z2VQdHIpOwogCiAgICAgICAgIGlmIChuZXdOYXRpdmVJbWFnZVB0ciA9PSBtX2NvbXBvc2l0ZWRO
YXRpdmVJbWFnZVB0cikKICAgICAgICAgICAgIHJldHVybjsKQEAgLTQ3MywxNiArNDczLDI1IEBA
IHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jSW1hZ2VCYWNraW5nKCkKICAgICAg
ICAgcmV0dXJuOwogICAgIG1fc2hvdWxkU3luY0ltYWdlQmFja2luZyA9IGZhbHNlOwogCi0gICAg
cmVsZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCk7Ci0KICAgICBpZiAobV9jb21wb3NpdGVkTmF0
aXZlSW1hZ2VQdHIpIHsKICAgICAgICAgQVNTRVJUKCFtX21haW5CYWNraW5nU3RvcmUpOwogICAg
ICAgICBBU1NFUlQobV9jb21wb3NpdGVkSW1hZ2UpOwogCi0gICAgICAgIG1fbGF5ZXJJbmZvLmlt
YWdlQmFja2luZ1N0b3JlSUQgPSBtX2Nvb3JkaW5hdG9yLT5hZG9wdEltYWdlQmFja2luZ1N0b3Jl
KG1fY29tcG9zaXRlZEltYWdlLmdldCgpKTsKLSAgICB9CisgICAgICAgIGJvb2wgaW1hZ2VJbnN0
YW5jZVJlcGxhY2VkID0gbV9jb29yZGluYXRlZEltYWdlQmFja2luZyAmJiAobV9jb29yZGluYXRl
ZEltYWdlQmFja2luZy0+aWQoKSAhPSBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Z2V0Q29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRChtX2NvbXBvc2l0ZWRJbWFnZS5nZXQoKSkpOworICAgICAgICBp
ZiAoaW1hZ2VJbnN0YW5jZVJlcGxhY2VkKQorICAgICAgICAgICAgcmVsZWFzZUltYWdlQmFja2lu
Z0lmTmVlZGVkKCk7CisKKyAgICAgICAgaWYgKCFtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKSB7
CisgICAgICAgICAgICBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nID0gbV9jb29yZGluYXRvci0+
Y3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQobV9jb21wb3NpdGVkSW1hZ2UuZ2V0KCkpOworICAg
ICAgICAgICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+YWRkTGF5ZXJDbGllbnQodGhpcyk7
CisgICAgICAgICAgICBtX2xheWVySW5mby5pbWFnZUlEID0gbV9jb29yZGluYXRlZEltYWdlQmFj
a2luZy0+aWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmctPm1hcmtEaXJ0eSgpOworICAgIH0gZWxzZQorICAgICAgICByZWxlYXNlSW1hZ2VCYWNraW5n
SWZOZWVkZWQoKTsKIAotICAgIC8vIFRoaXMgbWV0aG9kIGNoYW5nZXMgbV9sYXllckluZm8uaW1h
Z2VCYWNraW5nU3RvcmVJRC4KKyAgICAvLyBzeW5jSW1hZ2VCYWNraW5nKCkgY2hhbmdlZCBtX2xh
eWVySW5mby5pbWFnZUlELgogICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKIH0KIApAQCAtNTU5
LDEyICs1NjgsMTMgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmZsdXNoQ29tcG9z
aXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6cmVsZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCkKIHsKLSAgICBpZiAoIW1fbGF5ZXJJ
bmZvLmltYWdlQmFja2luZ1N0b3JlSUQpCisgICAgaWYgKCFtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQobV9jb29yZGluYXRvcik7Ci0gICAg
bV9jb29yZGluYXRvci0+cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKG1fbGF5ZXJJbmZvLmltYWdl
QmFja2luZ1N0b3JlSUQpOwotICAgIG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQgPSAw
OworICAgIG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmctPnJlbW92ZUxheWVyQ2xpZW50KHRoaXMp
OworICAgIG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY2xlYXIoKTsKKyAgICBtX2xheWVySW5m
by5pbWFnZUlEID0gSW52YWxpZENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQ7CiB9CiAKIHZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKQpA
QCAtNjY5LDcgKzY3OSw3IEBAIENvbG9yIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRC
YWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAogICAgIHJldHVybiBjb250ZW50c09w
YXF1ZSgpID8gQ29sb3I6OndoaXRlIDogQ29sb3I6OnRyYW5zcGFyZW50OwogfQogCi1QYXNzT3du
UHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpi
ZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgaW50JiBhdGxh
cywgV2ViQ29yZTo6SW50UG9pbnQmIG9mZnNldCkKK1Bhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0
PiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBJbnRT
aXplJiBzaXplLCBpbnQmIGF0bGFzLCBJbnRQb2ludCYgb2Zmc2V0KQogewogICAgIGlmICghbV9j
b29yZGluYXRvcikKICAgICAgICAgcmV0dXJuIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0PigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIuaAppbmRleCBjOWNlMTkzZDEyMDk4ZjYyNGM2MzU1MWRmZTg1ZjlkOWE5
ODlkMjQzLi4yZDRmYzFjN2QxMGFjYzUwYzBlZTRhMDBmOGU0YjIzNDA5NTc3MTE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
aApAQCAtMjEsNiArMjEsNyBAQAogI2lmbmRlZiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJfaAog
I2RlZmluZSBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJfaAogCisjaW5jbHVkZSAiQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmcuaCIKICNpbmNsdWRlICJDb29yZGluYXRlZFRpbGUuaCIKICNpbmNsdWRl
ICJGbG9hdFBvaW50M0QuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCkBAIC01Niw4ICs1
Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB2aXNpYmxlQ29u
dGVudHNSZWN0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBsYXllclRyZWVUaWxlVXBk
YXRlc0FsbG93ZWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBpbnQ2NF90IGFkb3B0SW1hZ2VC
YWNraW5nU3RvcmUoV2ViQ29yZTo6SW1hZ2UqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVh
c2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90KSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChXZWJD
b3JlOjpJbWFnZSopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoV2ViTGF5
ZXJJRCwgY29uc3QgV2ViTGF5ZXJJbmZvJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5
ZXJDaGlsZHJlbihXZWJMYXllcklELCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mKSA9IDA7CiAj
aWYgRU5BQkxFKENTU19GSUxURVJTKQpAQCAtMjI0LDYgKzIyNCw3IEBAIHByaXZhdGU6CiAKICAg
ICBSZWZQdHI8SW1hZ2U+IG1fY29tcG9zaXRlZEltYWdlOwogICAgIE5hdGl2ZUltYWdlUHRyIG1f
Y29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyOworICAgIFJlZlB0cjxXZWJLaXQ6OkNvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nPiBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOwogCiAgICAgUGxhdGZvcm1M
YXllciogbV9jYW52YXNQbGF0Zm9ybUxheWVyOwogICAgIFRpbWVyPENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcj4gbV9hbmltYXRpb25TdGFydGVkVGltZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZElt
YWdlQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTRm
OWU5MDlhZjdhMTY5ODc1NTZkYzEwMTY0NmM2NGNkMjdiNGM0MgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCIKKworI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmc6OmdldENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQoSW1hZ2UqIGltYWdlKQoreworICAg
IC8vIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nIGtlZXBzIGEgUmVmUHRyPEltYWdlPiBtZW1iZXIs
IHNvIHRoZSBzYW1lIEltYWdlIHBvaW50ZXIgY2FuIG5vdCByZWZlciB0d28gZGlmZmVyZW50IGlu
c3RhbmNlcyB1bnRpbCBDb29yZGluYXRlZEltYWdlQmFja2luZyByZWxlYXNlcyB0aGUgbWVtYmVy
LgorICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQ+
KGltYWdlKTsKK30KKworUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmc6OmNyZWF0ZShDb29yZGluYXRvciogY2xpZW50LCBQYXNzUmVmUHRy
PEltYWdlPiBpbWFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nKGNsaWVudCwgaW1hZ2UpKTsKK30KKworQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6
OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKENvb3JkaW5hdG9yKiBjbGllbnQsIFBhc3NSZWZQdHI8
SW1hZ2U+IGltYWdlKQorICAgIDogbV9jb29yZGluYXRvcihjbGllbnQpCisgICAgLCBtX2ltYWdl
KGltYWdlKQorICAgICwgbV9pZChnZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKG1faW1hZ2Uu
Z2V0KCkpKQorICAgICwgbV9pc0RpcnR5KGZhbHNlKQoreworICAgIC8vIEZJWE1FOiBXZSB3b3Vs
ZCBuZWVkIHRvIGRlY29kZSBhIHNtYWxsIGltYWdlIGRpcmVjdGx5IGludG8gYSBHcmFwaGljc1N1
cmZhY2UuCisgICAgLy8gaHR0cDovL3dlYmtpdC5vcmcvYi8xMDE0MjYKKworICAgIG1fY29vcmRp
bmF0b3ItPmNyZWF0ZUltYWdlQmFja2luZyhpZCgpKTsKK30KKworQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmc6On5Db29yZGluYXRlZEltYWdlQmFja2luZygpCit7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmc6OmFkZExheWVyQ2xpZW50KENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciog
bGF5ZXJDbGllbnQpCit7CisgICAgQVNTRVJUKCFtX2xheWVyQ2xpZW50cy5jb250YWlucyhsYXll
ckNsaWVudCkpOworICAgIG1fbGF5ZXJDbGllbnRzLmFwcGVuZChsYXllckNsaWVudCk7Cit9CisK
K3ZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnJlbW92ZUxheWVyQ2xpZW50KENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllciogbGF5ZXJDbGllbnQpCit7CisgICAgc2l6ZV90IHBvc2l0aW9uID0g
bV9sYXllckNsaWVudHMuZmluZChsYXllckNsaWVudCk7CisgICAgQVNTRVJUKHBvc2l0aW9uICE9
IG5vdEZvdW5kKTsKKyAgICBtX2xheWVyQ2xpZW50cy5yZW1vdmUocG9zaXRpb24pOworCisgICAg
aWYgKG1fbGF5ZXJDbGllbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9jb29yZGluYXRvci0+cmVt
b3ZlSW1hZ2VCYWNraW5nKGlkKCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
OjptYXJrRGlydHkoKQoreworICAgIG1faXNEaXJ0eSA9IHRydWU7Cit9CisKK3ZvaWQgQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmc6OnVwZGF0ZSgpCit7CisgICAgcmVsZWFzZVN1cmZhY2VJZk5lZWRl
ZCgpOworCisgICAgaWYgKCFtX2lzRGlydHkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3Vy
ZmFjZSA9IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZShtX2ltYWdlLT5zaXplKCksIG1faW1hZ2Ut
PmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgPyBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEg
OiBTaGFyZWFibGVCaXRtYXA6Ok5vRmxhZ3MsIFNoYXJlYWJsZVN1cmZhY2U6OlN1cHBvcnRzR3Jh
cGhpY3NTdXJmYWNlKTsKKyAgICBtX2hhbmRsZSA9IGFkb3B0UHRyKG5ldyBTaGFyZWFibGVTdXJm
YWNlOjpIYW5kbGUoKSk7CisKKyAgICBpZiAoIW1fc3VyZmFjZS0+Y3JlYXRlSGFuZGxlKCptX2hh
bmRsZSkpIHsKKyAgICAgICAgcmVsZWFzZVN1cmZhY2VJZk5lZWRlZCgpOworICAgICAgICBtX2lz
RGlydHkgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEludFJlY3QgcmVj
dChJbnRQb2ludDo6emVybygpLCBtX2ltYWdlLT5zaXplKCkpOworICAgIE93blB0cjxHcmFwaGlj
c0NvbnRleHQ+IGNvbnRleHQgPSBtX3N1cmZhY2UtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dChyZWN0
KTsKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2UobV9pbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgcmVjdCwgcmVjdCk7CisKKyAgICBtX2Nvb3JkaW5hdG9yLT51cGRhdGVJbWFnZUJhY2tp
bmcoaWQoKSwgKm1faGFuZGxlKTsKKyAgICBtX2lzRGlydHkgPSBmYWxzZTsKK30KKwordm9pZCBD
b29yZGluYXRlZEltYWdlQmFja2luZzo6cmVsZWFzZVN1cmZhY2VJZk5lZWRlZCgpCit7CisgICAg
Ly8gV2UgbXVzdCBrZWVwIG1fc3VyZmFjZSB1bnRpbCBVSSBQcm9jZXNzIHJlYWRzIG1fc3VyZmFj
ZS4KKyAgICAvLyBJZiBtX3N1cmZhY2UgZXhpc3RzLCBpdCB3YXMgY3JlYXRlZCBpbiB0aGUgcHJl
dmlvdXMgdXBkYXRlLgorICAgIG1faGFuZGxlLmNsZWFyKCk7CisgICAgbV9zdXJmYWNlLmNsZWFy
KCk7Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDBjZDIxNzhhZmNkYjRlNzQxODAz
MTFhZDViYzgwOTdkMzU3OTAyZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55
IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdfaAorI2RlZmluZSBDb29yZGluYXRlZEltYWdlQmFja2luZ19o
CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNp
bmNsdWRlICJTaGFyZWFibGVTdXJmYWNlLmgiCisjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3Mg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgOiBwdWJsaWMgUmVmQ291bnRlZDxDb29yZGluYXRl
ZEltYWdlQmFja2luZz4geworcHVibGljOgorICAgIGNsYXNzIENvb3JkaW5hdG9yIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSW1hZ2VC
YWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIGNvbnN0IFNoYXJlYWJsZVN1cmZhY2U6
OkhhbmRsZSYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEKSA9IDA7CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGUoQ29vcmRpbmF0b3IqLCBQYXNz
UmVmUHRyPFdlYkNvcmU6OkltYWdlPik7CisgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmcoKTsKKworICAgIHN0YXRpYyBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGdldENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQoV2ViQ29yZTo6SW1hZ2UqKTsKKyAgICBDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorCisgICAgdm9pZCBhZGRM
YXllckNsaWVudChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2b2lk
IHJlbW92ZUxheWVyQ2xpZW50KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopOwor
CisgICAgLy8gV2hlbiBhIG5ldyBpbWFnZSBpcyB1cGRhdGVkIG9yIGFuIGFuaW1hdGVkIGdpZiBp
cyBwcm9ncmVzc2VkLCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgY2FsbHMgbWFya0RpcnR5KCku
CisgICAgdm9pZCBtYXJrRGlydHkoKTsKKworICAgIC8vIENyZWF0ZSwgcmVtb3ZlIG9yIHVwZGF0
ZSBpdHMgYmFja2luZy4KKyAgICB2b2lkIHVwZGF0ZSgpOworCitwcml2YXRlOgorICAgIENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nKENvb3JkaW5hdG9yKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJbWFn
ZT4pOworCisgICAgdm9pZCByZWxlYXNlU3VyZmFjZUlmTmVlZGVkKCk7CisKKyAgICBDb29yZGlu
YXRvciogbV9jb29yZGluYXRvcjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IG1faW1hZ2U7
CisgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBtX2lkOworICAgIFZlY3RvcjxXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiBtX2xheWVyQ2xpZW50czsKKworICAgIFJlZlB0
cjxTaGFyZWFibGVTdXJmYWNlPiBtX3N1cmZhY2U7CisgICAgT3duUHRyPFNoYXJlYWJsZVN1cmZh
Y2U6OkhhbmRsZT4gbV9oYW5kbGU7CisKKyAgICBib29sIG1faXNEaXJ0eTsKK307CisKK30KKyNl
bmRpZgorCisjZW5kaWYgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdfSApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5
ZXJUcmVlQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCmluZGV4IGJiOWVi
M2I1Yjc4NTBiNzBmNTI1OGU4ZGFmNmM1ZGZhOWY2NDA3ZjcuLjU5YTk0ZGQxZjcwOGU0MGExMDFk
YjNmNzhlMDZjZTgxZGJiM2VkZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVDb29yZGluYXRvci5jcHAKQEAgLTI2OCw3ICsyNjgsNyBAQCBib29sIExheWVy
VHJlZUNvb3JkaW5hdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKQogCiAgICAgbV9yb290
TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKIAotICAgIHB1
cmdlUmVsZWFzZWRJbWFnZXMoKTsKKyAgICBmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2Vz
KCk7CiAKICAgICBpZiAobV9zaG91bGRTeW5jUm9vdExheWVyKSB7CiAgICAgICAgIG1fd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0Um9vdENvbXBv
c2l0aW5nTGF5ZXIodG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkp
LT5pZCgpKSk7CkBAIC00MzksMTUgKzQzOSw2IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OmRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCkKICAgICB9CiB9CiAKLXZvaWQgTGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OnB1cmdlUmVsZWFzZWRJbWFnZXMoKQotewotICAgIGlmICghbV9pc1B1
cmdpbmcpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3JlbGVhc2VkRGlyZWN0
bHlDb21wb3NpdGVkSW1hZ2VzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV93ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpEZXN0cm95RGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2UobV9yZWxlYXNlZERpcmVjdGx5Q29tcG9zaXRlZEltYWdlc1tpXSkpOwot
ICAgIH0KLSAgICBtX3JlbGVhc2VkRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmNsZWFyKCk7Ci19
Ci0KIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmxheWVyRmx1c2hUaW1lckZpcmVkKFRpbWVy
PExheWVyVHJlZUNvb3JkaW5hdG9yPiopCiB7CiAgICAgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1
c2goKTsKQEAgLTQ3NSw3OSArNDY2LDQ5IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRl
c3Ryb3lQYWdlT3ZlcmxheUxheWVyKCkKICAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBudWxscHRy
OwogfQogCi1pbnQ2NF90IExheWVyVHJlZUNvb3JkaW5hdG9yOjphZG9wdEltYWdlQmFja2luZ1N0
b3JlKEltYWdlKiBpbWFnZSkKK1Bhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IExh
eWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChJbWFnZSogaW1h
Z2UpCiB7Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIEludmFsaWRXZWJMYXllcklE
OwotCi0gICAgaW50NjRfdCBrZXkgPSAwOwotCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgUVBpeG1h
cCogbmF0aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLQot
ICAgIGlmICghbmF0aXZlSW1hZ2UpCi0gICAgICAgIHJldHVybiBJbnZhbGlkV2ViTGF5ZXJJRDsK
LQotICAgIGtleSA9IG5hdGl2ZUltYWdlLT5jYWNoZUtleSgpOwotI2VsaWYgVVNFKENBSVJPKQot
ICAgIE5hdGl2ZUltYWdlQ2Fpcm8qIG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCk7Ci0gICAgaWYgKCFuYXRpdmVJbWFnZSkKLSAgICAgICAgcmV0dXJuIElu
dmFsaWRXZWJMYXllcklEOwotICAgIC8vIFRoaXMgY2FuIGJlIHNhZmVseSBkb25lIHNpbmNlIHdl
IG93biB0aGUgcmVmZXJlbmNlLgotICAgIC8vIEEgY29ycmVzcG9uZGluZyBjYWlyb19zdXJmYWNl
X2Rlc3Ryb3koKSBpcyBlbnN1cmVkIGluIHJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZSgpLgotICAg
IGNhaXJvX3N1cmZhY2VfdCogY2Fpcm9TdXJmYWNlID0gY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2Uo
bmF0aXZlSW1hZ2UtPnN1cmZhY2UoKSk7Ci0gICAga2V5ID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ2
NF90PihjYWlyb1N1cmZhY2UpOwotI2VuZGlmCi0KLSAgICBIYXNoTWFwPGludDY0X3QsIGludD46
Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtl
eSk7Ci0KLSAgICBpZiAoaXQgIT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5l
bmQoKSkgewotICAgICAgICArKyhpdC0+dmFsdWUpOwotICAgICAgICByZXR1cm4ga2V5OwotICAg
IH0KLQotICAgIC8vIENoZWNrIGlmIHdlIHdlcmUgZ29pbmcgdG8gcmVsZWFzZSB0aGlzIGltYWdl
IGR1cmluZyB0aGUgbmV4dCBmbHVzaC4KLSAgICBzaXplX3QgcmVsZWFzZWRJbmRleCA9IG1fcmVs
ZWFzZWREaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZmluZChrZXkpOwotICAgIGlmIChyZWxlYXNl
ZEluZGV4ID09IG5vdEZvdW5kKSB7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJp
dG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGltYWdlLT5zaXplKCksIChp
bWFnZS0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSA/IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNB
bHBoYSA6IDApKTsKLSAgICAgICAgewotICAgICAgICAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRl
eHQoKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludDo6emVybygpKTsKLSAgICAgICAgfQotICAgICAgICBT
aGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7Ci0gICAgICAgIGJpdG1hcC0+Y3JlYXRlSGFu
ZGxlKGhhbmRsZSk7Ci0gICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eTo6Q3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Uoa2V5LCBoYW5k
bGUpKTsKKyAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQgPSBDb29yZGluYXRl
ZEltYWdlQmFja2luZzo6Z2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRChpbWFnZSk7CisgICAg
SW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VCYWNraW5ncy5maW5kKGltYWdl
SUQpOworICAgIFJlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gaW1hZ2VCYWNraW5nOwor
ICAgIGlmIChpdCA9PSBtX2ltYWdlQmFja2luZ3MuZW5kKCkpIHsKKyAgICAgICAgaW1hZ2VCYWNr
aW5nID0gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNyZWF0ZSh0aGlzLCBpbWFnZSk7CisgICAg
ICAgIG1faW1hZ2VCYWNraW5ncy5hZGQoaW1hZ2VJRCwgaW1hZ2VCYWNraW5nKTsKICAgICB9IGVs
c2UKLSAgICAgICAgbV9yZWxlYXNlZERpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5yZW1vdmUocmVs
ZWFzZWRJbmRleCk7CisgICAgICAgIGltYWdlQmFja2luZyA9IGl0LT52YWx1ZTsKIAotICAgIG1f
ZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuYWRkKGtleSwgMSk7Ci0gICAgcmV0dXJu
IGtleTsKKyAgICByZXR1cm4gaW1hZ2VCYWNraW5nOwogfQogCi12b2lkIExheWVyVHJlZUNvb3Jk
aW5hdG9yOjpyZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCBrZXkpCit2b2lkIExheWVy
VHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCBpbWFnZUlEKQogewotICAgIGlmICgha2V5KQotICAgICAgICByZXR1cm47Ci0gICAgSGFz
aE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1h
Z2VSZWZDb3VudHMuZmluZChrZXkpOwotICAgIGlmIChpdCA9PSBtX2RpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlUmVmQ291bnRzLmVuZCgpKQotICAgICAgICByZXR1cm47CisgICAgbV9zaG91bGRTeW5j
RnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eTo6Q3JlYXRlSW1hZ2VCYWNraW5nKGltYWdlSUQpKTsKK30KIAotICAgIGl0
LT52YWx1ZS0tOwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6dXBkYXRlSW1hZ2VCYWNraW5n
KENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwgY29uc3QgU2hhcmVhYmxlU3VyZmFj
ZTo6SGFuZGxlJiBoYW5kbGUpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6VXBk
YXRlSW1hZ2VCYWNraW5nKGltYWdlSUQsIGhhbmRsZSkpOworfQogCi0gICAgaWYgKGl0LT52YWx1
ZSkKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAgaWYgKG1faXNQdXJnaW5nKQogICAg
ICAgICByZXR1cm47CiAKLSNpZiBVU0UoQ0FJUk8pCi0gICAgLy8gQ29tcGxlbWVudCB0aGUgcmVm
ZXJlbmNpbmcgaW4gYWRvcHRJbWFnZUJhY2tpbmdTdG9yZSgpLgotICAgIGNhaXJvX3N1cmZhY2Vf
dCogY2Fpcm9TdXJmYWNlID0gcmVpbnRlcnByZXRfY2FzdDxjYWlyb19zdXJmYWNlX3QqPihrZXkp
OwotICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShjYWlyb1N1cmZhY2UpOwotI2VuZGlmCi0KLSAg
ICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnJlbW92ZShpdCk7Ci0gICAgbV9y
ZWxlYXNlZERpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5hcHBlbmQoa2V5KTsKLSAgICBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKKyAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdl
SUQpKTsKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV9pbWFnZUJhY2tpbmdz
LnJlbW92ZShpbWFnZUlEKTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHk6OlJlbW92ZUltYWdlQmFja2luZyhpbWFnZUlEKSk7CiB9CiAKK3Zv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMo
KQoreworICAgIEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgZW5kID0gbV9pbWFnZUJhY2tpbmdz
LmVuZCgpOworICAgIGZvciAoSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdGVyID0gbV9pbWFn
ZUJhY2tpbmdzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgIGl0ZXItPnZh
bHVlLT51cGRhdGUoKTsKK30KIAogdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6bm90aWZ5QW5p
bWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIC8qIHRp
bWUgKi8pCiB7CkBAIC02OTcsMTAgKzY1OCw3IEBAIHZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OnB1cmdlQmFja2luZ1N0b3JlcygpCiAgICAgZm9yIChIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICgqaXQpLT5wdXJnZUJhY2tpbmdTdG9yZXMo
KTsKIAotICAgIHB1cmdlUmVsZWFzZWRJbWFnZXMoKTsKLQotICAgIEFTU0VSVCghbV9kaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5zaXplKCkpOwotICAgIEFTU0VSVCghbV9yZWxlYXNl
ZERpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5zaXplKCkpOworICAgIG1faW1hZ2VCYWNraW5ncy5j
bGVhcigpOwogICAgIG1fdXBkYXRlQXRsYXNlcy5jbGVhcigpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVDb29yZGluYXRvci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaAppbmRleCAxYTllMTc5YWM4
ODllMjZkMDNiZmIxYzY2ODFlYjc1OTFkYzA3NzI2Li4xOThlM2MxMTIxM2ZhYzcyOWY0NzQ1YTUy
NDY3M2VlMzRmNzdlYjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVy
VHJlZUNvb3JkaW5hdG9yLmgKQEAgLTIzLDYgKzIzLDcgQEAKICNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCiAKICNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNs
dWRlICJDb29yZGluYXRlZEltYWdlQmFja2luZy5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRl
eHQuaCIKICNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKQEAg
LTM5LDYgKzQwLDcgQEAgY2xhc3MgV2ViUGFnZTsKIAogY2xhc3MgTGF5ZXJUcmVlQ29vcmRpbmF0
b3IgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudAog
ICAgICwgcHVibGljIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudAorICAgICwgcHVibGlj
IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRvcgogICAgICwgcHVibGljIFVwZGF0
ZUF0bGFzQ2xpZW50CiAgICAgLCBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3Rvcnkg
ewogcHVibGljOgpAQCAtNjcsOCArNjksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBh
dXNlUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9p
ZCByZXN1bWVSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsgc2NoZWR1bGVMYXll
ckZsdXNoKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2Uo
KSB7IH0KLSAgICB2aXJ0dWFsIGludDY0X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9yZShXZWJDb3Jl
OjpJbWFnZSopOwotICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50
NjRfdCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBj
cmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChXZWJDb3JlOjpJbWFnZSopIE9WRVJSSURFOwogCiAg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3Qg
U3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVw
ZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CkBAIC0xMTIsNiArMTEzLDEzIEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciopOwogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgY2xpcFJlY3QpOwogCisgICAgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5h
dG9yCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5n
KENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIGNvbnN0IFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRs
ZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7CisKKyAgICB2b2lkIGZsdXNoUGVuZGluZ0lt
YWdlQmFja2luZ0NoYW5nZXMoKTsKKwogICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5CiAgICAg
dmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdyYXBoaWNz
TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCopIE9WRVJSSURFOwogCkBAIC0xMjUs
NyArMTMzLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN5bmNEaXNwbGF5U3RhdGUoKTsKICAgICB2
b2lkIGxvY2tBbmltYXRpb25zKCk7CiAgICAgdm9pZCB1bmxvY2tBbmltYXRpb25zKCk7Ci0gICAg
dm9pZCBwdXJnZVJlbGVhc2VkSW1hZ2VzKCk7CiAKICAgICB2b2lkIGxheWVyRmx1c2hUaW1lckZp
cmVkKFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUNvb3JkaW5hdG9yPiopOwogCkBAIC0xNDYsOCAr
MTUzLDggQEAgcHJpdmF0ZToKIAogICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyKj4gbV9yZWdpc3RlcmVkTGF5ZXJzOwogICAgIFZlY3RvcjxXZWJMYXllcklEPiBt
X2RldGFjaGVkTGF5ZXJzOwotICAgIEhhc2hNYXA8aW50NjRfdCwgaW50PiBtX2RpcmVjdGx5Q29t
cG9zaXRlZEltYWdlUmVmQ291bnRzOwotICAgIFZlY3RvcjxpbnQ2NF90PiBtX3JlbGVhc2VkRGly
ZWN0bHlDb21wb3NpdGVkSW1hZ2VzOworICAgIHR5cGVkZWYgSGFzaE1hcDxDb29yZGluYXRlZElt
YWdlQmFja2luZ0lELCBSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+ID4gSW1hZ2VCYWNr
aW5nTWFwOworICAgIEltYWdlQmFja2luZ01hcCBtX2ltYWdlQmFja2luZ3M7CiAgICAgVmVjdG9y
PE93blB0cjxVcGRhdGVBdGxhcz4gPiBtX3VwZGF0ZUF0bGFzZXM7CiAKICAgICBib29sIG1fbm90
aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>