<?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>68135</bug_id>
          
          <creation_ts>2011-09-14 18:05:16 -0700</creation_ts>
          <short_desc>[chromium] CCLayerTreeHost shouldn&apos;t be RefCounted</short_desc>
          <delta_ts>2013-04-11 15:20:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>
          
          <blocked>66995</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>piman</cc>
    
    <cc>schenney</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>vangelis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>467505</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-14 18:05:16 -0700</bug_when>
    <thetext>[chromium] CCLayerTreeHost shouldn&apos;t be RefCounted</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467506</commentid>
    <comment_count>1</comment_count>
      <attachid>107431</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-14 18:06:15 -0700</bug_when>
    <thetext>Created attachment 107431
just FYI, webgl printing is broken</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467882</commentid>
    <comment_count>2</comment_count>
      <attachid>107431</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-15 10:05:47 -0700</bug_when>
    <thetext>Comment on attachment 107431
just FYI, webgl printing is broken

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

&gt; Source/WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:-89
&gt; -    RenderLayerBacking* backing = static_cast&lt;RenderLayerBacking*&gt;(m_owner-&gt;client());
&gt; -    if (!backing || backing-&gt;paintingGoesToWindow())
&gt; -        return;
&gt; -

Can you remind me why we had these checks originally, but why we don&apos;t need them now?

&gt; Source/WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:-156
&gt; -void VideoLayerChromium::setLayerTreeHost(CCLayerTreeHost* host)
&gt; -{
&gt; -    if (host &amp;&amp; layerTreeHost() != host) {
&gt; -        for (size_t i = 0; i &lt; 3; ++i) {
&gt; -            m_textures[i].m_visibleSize = IntSize();
&gt; -            m_textures[i].m_texture = ManagedTexture::create(host-&gt;contentsTextureManager());
&gt; -        }
&gt; -    }

We don&apos;t need this because we don&apos;t ever destroy the CCLayerTreeHost once we&apos;ve created it? I guess I probably should have removed that earlier, then.

&gt; Source/WebCore/platform/graphics/chromium/WebGLLayerChromium.cpp:127
&gt; +    if (CCLayerTreeHost::animating() &amp;&amp; m_contextSupportsRateLimitingExtension &amp;&amp; !m_rateLimitingTimer.isActive())

This static function call here has some code smell to it, but from comments elsewhere it looks like this is only temporary.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:235
&gt; -void CCLayerTreeHost::clearRenderSurfacesRecursive(LayerChromium* layer)
&gt; +void CCLayerTreeHost::clearStuffRecursive(LayerChromium* layer)

Why is the original name not valid?

&gt; Source/WebKit/chromium/src/WebMediaPlayerClientImpl.cpp:576
&gt;  bool WebMediaPlayerClientImpl::acceleratedRenderingInUse()
&gt;  {
&gt; -    return m_videoLayer.get() &amp;&amp; m_videoLayer-&gt;layerTreeHost();
&gt; +    return m_videoLayer;
&gt;  }

Given that we never clear the LayerTreeHost (or LayerRendererChromium in the past) from WebViewImpl, this makes the condition consistent on the first time a page goes composited before the LayerTreeHost gets created.  However, my only confusion is why the check for the LTH/LRC was needed in the first place.

&gt; Source/WebKit/chromium/src/WebViewImpl.h:575
&gt; -    RefPtr&lt;WebCore::CCLayerTreeHost&gt; m_layerTreeHost;
&gt; +    OwnPtr&lt;WebCore::CCLayerTreeHost&gt; m_layerTreeHost;

\o/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467906</commentid>
    <comment_count>3</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2011-09-15 10:55:59 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 107431 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=107431&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:-89
&gt; &gt; -    RenderLayerBacking* backing = static_cast&lt;RenderLayerBacking*&gt;(m_owner-&gt;client());
&gt; &gt; -    if (!backing || backing-&gt;paintingGoesToWindow())
&gt; &gt; -        return;
&gt; &gt; -
&gt; 
&gt; Can you remind me why we had these checks originally, but why we don&apos;t need them now?

BTW they&apos;ve already been removed by https://bug-67750-attachments.webkit.org/attachment.cgi?id=107377 (see comments in the bug).
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:-156
&gt; &gt; -void VideoLayerChromium::setLayerTreeHost(CCLayerTreeHost* host)
&gt; &gt; -{
&gt; &gt; -    if (host &amp;&amp; layerTreeHost() != host) {
&gt; &gt; -        for (size_t i = 0; i &lt; 3; ++i) {
&gt; &gt; -            m_textures[i].m_visibleSize = IntSize();
&gt; &gt; -            m_textures[i].m_texture = ManagedTexture::create(host-&gt;contentsTextureManager());
&gt; &gt; -        }
&gt; &gt; -    }
&gt; 
&gt; We don&apos;t need this because we don&apos;t ever destroy the CCLayerTreeHost once we&apos;ve created it? I guess I probably should have removed that earlier, then.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/WebGLLayerChromium.cpp:127
&gt; &gt; +    if (CCLayerTreeHost::animating() &amp;&amp; m_contextSupportsRateLimitingExtension &amp;&amp; !m_rateLimitingTimer.isActive())
&gt; 
&gt; This static function call here has some code smell to it, but from comments elsewhere it looks like this is only temporary.
&gt;  
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:235
&gt; &gt; -void CCLayerTreeHost::clearRenderSurfacesRecursive(LayerChromium* layer)
&gt; &gt; +void CCLayerTreeHost::clearStuffRecursive(LayerChromium* layer)
&gt; 
&gt; Why is the original name not valid?

That function was removed by https://bug-67883-attachments.webkit.org/attachment.cgi?id=107434 anyway.
If you rebase, you can trim a bunch of stuff!

&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebMediaPlayerClientImpl.cpp:576
&gt; &gt;  bool WebMediaPlayerClientImpl::acceleratedRenderingInUse()
&gt; &gt;  {
&gt; &gt; -    return m_videoLayer.get() &amp;&amp; m_videoLayer-&gt;layerTreeHost();
&gt; &gt; +    return m_videoLayer;
&gt; &gt;  }
&gt; 
&gt; Given that we never clear the LayerTreeHost (or LayerRendererChromium in the past) from WebViewImpl, this makes the condition consistent on the first time a page goes composited before the LayerTreeHost gets created.  However, my only confusion is why the check for the LTH/LRC was needed in the first place.
&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebViewImpl.h:575
&gt; &gt; -    RefPtr&lt;WebCore::CCLayerTreeHost&gt; m_layerTreeHost;
&gt; &gt; +    OwnPtr&lt;WebCore::CCLayerTreeHost&gt; m_layerTreeHost;
&gt; 
&gt; \o/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468031</commentid>
    <comment_count>4</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-15 13:17:52 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; &gt; Source/WebCore/platform/graphics/chromium/VideoLayerChromium.cpp:-156
&gt; &gt; -void VideoLayerChromium::setLayerTreeHost(CCLayerTreeHost* host)
&gt; &gt; -{
&gt; &gt; -    if (host &amp;&amp; layerTreeHost() != host) {
&gt; &gt; -        for (size_t i = 0; i &lt; 3; ++i) {
&gt; &gt; -            m_textures[i].m_visibleSize = IntSize();
&gt; &gt; -            m_textures[i].m_texture = ManagedTexture::create(host-&gt;contentsTextureManager());
&gt; &gt; -        }
&gt; &gt; -    }
&gt; 
&gt; We don&apos;t need this because we don&apos;t ever destroy the CCLayerTreeHost once we&apos;ve created it? I guess I probably should have removed that earlier, then.

It&apos;s not a straight delete - I added some code in reserveTexture() as well.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/WebGLLayerChromium.cpp:127
&gt; &gt; +    if (CCLayerTreeHost::animating() &amp;&amp; m_contextSupportsRateLimitingExtension &amp;&amp; !m_rateLimitingTimer.isActive())
&gt; 
&gt; This static function call here has some code smell to it, but from comments elsewhere it looks like this is only temporary.

I actually think that this is permanent.  &quot;am I animating right now?&quot; is a process-wide piece of state, so I think having a static getter is reasonable (we can only animate from one thread and even if we have a bunch of different WebViewImpls only one can animate at a time)

&gt; &gt; Source/WebKit/chromium/src/WebMediaPlayerClientImpl.cpp:576
&gt; &gt;  bool WebMediaPlayerClientImpl::acceleratedRenderingInUse()
&gt; &gt;  {
&gt; &gt; -    return m_videoLayer.get() &amp;&amp; m_videoLayer-&gt;layerTreeHost();
&gt; &gt; +    return m_videoLayer;
&gt; &gt;  }
&gt; 
&gt; Given that we never clear the LayerTreeHost (or LayerRendererChromium in the past) from WebViewImpl, this makes the condition consistent on the first time a page goes composited before the LayerTreeHost gets created.  However, my only confusion is why the check for the LTH/LRC was needed in the first place.

I have no idea actually - I&apos;ve never really looked at WebMediaPlayerClientImpl before and most of the code in it seems really wrong.  I only changed this because stuff didn&apos;t compile, and this change makes the tests continue to pass.  I will take a more careful look at what this is trying to do before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>874217</commentid>
    <comment_count>5</comment_count>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2013-04-11 15:20:19 -0700</bug_when>
    <thetext>https://code.google.com/p/chromium/issues/detail?id=230626</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107431</attachid>
            <date>2011-09-14 18:06:15 -0700</date>
            <delta_ts>2011-09-15 10:05:47 -0700</delta_ts>
            <desc>just FYI, webgl printing is broken</desc>
            <filename>bug-68135-20110914180614.patch</filename>
            <type>text/plain</type>
            <size>40189</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTUxMzUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5YjIyMmNmOTJkY2E0Njk5
YWJlZjM0MTIxM2Y3NGE4N2I2YWY5Y2VjLi5jMWVmNjA0NWJiMDRlYmNhYjZhZjMyODliZTZlMjQx
NDVkZDlhMWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNTkgQEAKIDIwMTEtMDktMTQgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAorICAgICAgICBbY2hyb21pdW1dIEND
TGF5ZXJUcmVlSG9zdCBzaG91bGRuJ3QgYmUgUmVmQ291bnRlZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgxMzUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGNvbXBvc2l0aW5nLyB0ZXN0
cworCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21p
dW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0
eSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjp1cGRh
dGVUaWxlU2l6ZUFuZFRpbGluZ09wdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVy
Q2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6VGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGlsaW5nT3B0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnJlc2VydmVUZXh0
dXJlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNo
cm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6dXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hy
b21pdW06OnBhaW50UmVuZGVyZWRSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xMYXllckNocm9taXVtOjpzZXRUZXh0dXJlVXBkYXRlZCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdDo6Q0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3Q6OmNsZWFyU3R1ZmZSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0OjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0OjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3Q6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0OjphbmltYXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0OjpzZXRBbmltYXRpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbDo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIpOgorCisyMDExLTA5LTE0ICBK
YW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgW2Nocm9taXVt
XSBMYXllclJlbmRlcmVyQ2hyb21pdW0gc2hvdWxkbid0IGJlIFJlZkNvdW50ZWQKICAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MTIxCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5
ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDJmNzBmNjhhMTAwMGFjNmMzODM1MzZi
ODliMmQ0YTcyZTBhZmM0NmIuLmY5ZDljMmJhNWY4ZGYwYWNlY2VkMzRkOWYyNWE1ZTM5OThjOWJh
Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcApAQCAtNjQsNyArNjQs
NyBAQCBib29sIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKICAg
ICAgICAgICAgICYmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNl
dFN0YXR1c0FSQigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikpOwogfQogCi12b2lk
IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGlj
c0NvbnRleHQzRCopCit2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRv
clJlc291cmNlcyhDQ0xheWVyVHJlZUhvc3QqLCBHcmFwaGljc0NvbnRleHQzRCopCiB7CiAgICAg
aWYgKCFtX2NvbnRlbnRzRGlydHkgfHwgIWRyYXdzQ29udGVudCgpKQogICAgICAgICByZXR1cm47
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXMyRExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCmluZGV4IGExNWY1ODhlNGQwNDhkZTkz
MmVkNjI2ZDI5MDQwMTkyYjFlYmQ2NDMuLjZlYjNlOGFkNjA1OGM0YzU1OTU0NGFiMjY0NmFkZTlm
NDc5Y2MwZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCkBAIC00Niw3ICs0
Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21p
dW0+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCopOwogICAgIHZpcnR1YWwgfkNhbnZhczJETGF5
ZXJDaHJvbWl1bSgpOwogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQz
RCopOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKENDTGF5ZXJU
cmVlSG9zdCosIEdyYXBoaWNzQ29udGV4dDNEKik7CiAKICAgICB2b2lkIHNldFRleHR1cmVDaGFu
Z2VkKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAppbmRleCBmYTdkM2Zl
OWE5NmRmNzZhMTc0MTllMjM4MWI1MTIzNzA4ZTFiNjZjLi4zMzFiMzA5ZjI5MThmOTllNjI2ZWFk
ODdlMjM5Y2ViZmNkMzZjZDc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3Bw
CkBAIC05MiwxMSArOTIsMTMgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJl
c291cmNlcygpCiAgICAgVGlsZWRMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCk7CiB9
CiAKLXZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKK3Zv
aWQgQ29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KENDTGF5ZXJUcmVl
SG9zdCogbGF5ZXJUcmVlSG9zdCkKIHsKICAgICBBU1NFUlQoZHJhd3NDb250ZW50KCkpOwogCi0g
ICAgdXBkYXRlVGlsZVNpemVBbmRUaWxpbmdPcHRpb24oKTsKKyAgICBjcmVhdGVUZXh0dXJlVXBk
YXRlcklmTmVlZGVkKGxheWVyVHJlZUhvc3QpOworCisgICAgdXBkYXRlVGlsZVNpemVBbmRUaWxp
bmdPcHRpb24obGF5ZXJUcmVlSG9zdC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRl
eHR1cmVTaXplKTsKIAogICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCA9IHZpc2libGVMYXll
clJlY3QoKTsKICAgICBpZiAobGF5ZXJSZWN0LmlzRW1wdHkoKSkKQEAgLTEwOSw3ICsxMTEsNyBA
QCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCiAgICAg
aWYgKCFkcmF3c0NvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcHJlcGFyZVRvVXBk
YXRlKGxheWVyUmVjdCk7CisgICAgcHJlcGFyZVRvVXBkYXRlKGxheWVyVHJlZUhvc3QtPmNvbnRl
bnRzVGV4dHVyZU1hbmFnZXIoKSwgbGF5ZXJSZWN0KTsKICAgICBtX2RpcnR5UmVjdCA9IEZsb2F0
UmVjdCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAppbmRleCA5NDA5YWUx
MmU5ZjMyNjc1MjM1MGFlNjBmNGQzMGFmOTkyZmJjOTE2Li5lNmFkNmRhZWFiNWEwOTUyODBiMDYy
ZDFkOTMyNmYyNDc0Y2M2MzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKQEAg
LTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+Q29udGVudExheWVyQ2hyb21p
dW0oKTsKIAotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgIHZp
cnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eShDQ0xheWVyVHJlZUhvc3QqKTsKIAogcHJp
dmF0ZToKICAgICBleHBsaWNpdCBDb250ZW50TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hy
b21pdW0qIG93bmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDcxYmMw
YjZiOWRiNjU2YmM0NjBmNGY4NTY1NDk0ZmE1N2FiNTBiOGQuLjBlM2MyMGEzZjhkNGJiNmE2Yjg2
ODc4ZjY0MDJlMTFiMjA2ZGQ0MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApA
QCAtMTQ0LDExICsxNDQsMTMgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnNldENvbnRlbnRz
KEltYWdlKiBjb250ZW50cykKICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAotdm9pZCBJbWFn
ZUxheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKK3ZvaWQgSW1hZ2VMYXllckNo
cm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eShDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhv
c3QpCiB7CisgICAgY3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZChsYXllclRyZWVIb3N0KTsK
KwogICAgIGlmICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fdGV4dHVyZVVw
ZGF0ZXItPnVwZGF0ZUZyb21JbWFnZShtX2NvbnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpKTsKLSAgICAgICAgdXBkYXRlVGlsZVNpemVBbmRUaWxpbmdPcHRpb24oKTsKKyAgICAg
ICAgdXBkYXRlVGlsZVNpemVBbmRUaWxpbmdPcHRpb24obGF5ZXJUcmVlSG9zdC0+bGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplKTsKICAgICAgICAgSW50UmVjdCBwYWlu
dFJlY3QoSW50UG9pbnQoKSwgY29udGVudEJvdW5kcygpKTsKICAgICAgICAgaWYgKCFtX2RpcnR5
UmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGludmFsaWRhdGVSZWN0KHBhaW50UmVjdCk7
CkBAIC0xNTksNyArMTYxLDcgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29udGVu
dHNJZkRpcnR5KCkKICAgICBpZiAodmlzaWJsZUxheWVyUmVjdCgpLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgcHJlcGFyZVRvVXBkYXRlKHZpc2libGVMYXllclJlY3QoKSk7Cisg
ICAgcHJlcGFyZVRvVXBkYXRlKGxheWVyVHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIo
KSwgdmlzaWJsZUxheWVyUmVjdCgpKTsKIH0KIAogTGF5ZXJUZXh0dXJlVXBkYXRlciogSW1hZ2VM
YXllckNocm9taXVtOjp0ZXh0dXJlVXBkYXRlcigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJv
bWl1bS5oCmluZGV4IDRhZmUwNWQxNTFmOGIzNjM2Mjk2MzA0MzMxMGEyMDk0OTQxODI5NTYuLmU4
NzRmMDBlYjk3NzA5ZjUyZmIyY2MyZjZiMTI1NjlkN2MzYjRiNjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5
ZXJDaHJvbWl1bS5oCkBAIC01MywxMiArNTMsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfklt
YWdlTGF5ZXJDaHJvbWl1bSgpOwogCiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgIHZpcnR1
YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eShDQ0xheWVyVHJlZUhvc3QqKTsKIAogICAgIHZv
aWQgc2V0Q29udGVudHMoSW1hZ2UqIGltYWdlKTsKIAogcHJpdmF0ZToKLSAgICBJbWFnZUxheWVy
Q2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CisgICAgZXhwbGljaXQgSW1h
Z2VMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwogCiAgICAgdmly
dHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4
dHVyZVVwZGF0ZXIoY29uc3QgQ0NMYXllclRyZWVIb3N0Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3Bw
CmluZGV4IGEwZDM0NjU2ZThjMTVkNTJkMDVlNDAyZDI5MWY4NTQwNTIzOGY0N2QuLmFlMGFiYmVl
ZGE2MGI1MjExMWJlMTBhNDlhY2NkNjY4NmI2NTAyZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3Bw
CkBAIC0xMDksMTggKzEwOSw2IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNl
c1JlY3Vyc2l2ZSgpCiAgICAgY2xlYW51cFJlc291cmNlcygpOwogfQogCi12b2lkIExheWVyQ2hy
b21pdW06OnNldExheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0KiBob3N0KQotewotICAgIC8v
IElmIHdlJ3JlIGNoYW5naW5nIGxheWVyIHJlbmRlcmVycyB0aGVuIHdlIG5lZWQgdG8gZnJlZSB1
cCBhbnkgcmVzb3VyY2VzCi0gICAgLy8gYWxsb2NhdGVkIGJ5IHRoZSBvbGQgcmVuZGVyZXIuCi0g
ICAgaWYgKGxheWVyVHJlZUhvc3QoKSAmJiBsYXllclRyZWVIb3N0KCkgIT0gaG9zdCkgewotICAg
ICAgICBjbGVhbnVwUmVzb3VyY2VzKCk7Ci0gICAgICAgIHNldE5lZWRzRGlzcGxheSgpOwotICAg
IH0KLQotICAgIG1fbGF5ZXJUcmVlSG9zdCA9IGhvc3Q7Ci19Ci0KIHZvaWQgTGF5ZXJDaHJvbWl1
bTo6c2V0TmVlZHNDb21taXQoKQogewogICAgIC8vIENhbGwgbm90aWZ5U3luY1JlcXVpcmVkKCks
IHdoaWNoIGZvciBub24tcm9vdCBsYXllcnMgcGx1bWJzIHRocm91Z2ggdG8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaAppbmRleCA3ZjZmZmE3NGM1ZjZiMmYxZmVhOTcyOGQ4NzM3MTZlNDVkZWM2OTllLi43ODJk
ZTkyMGY2ZDM1OWU1NmJhMWI5ZmU0MTJmYzYxYTZmYzkxNGJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5o
CkBAIC0xNTIsOCArMTUyLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SXNSb290TGF5ZXIoYm9v
bCBpc1Jvb3RMYXllcikgeyBtX2lzUm9vdExheWVyID0gaXNSb290TGF5ZXI7IH0KICAgICBib29s
IGlzUm9vdExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9pc1Jvb3RMYXllcjsgfQogCi0gICAgdmly
dHVhbCB2b2lkIHNldExheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Kik7Ci0KICAgICB2b2lk
IHNldE93bmVyKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpIHsgbV9vd25lciA9IG93bmVy
OyB9CiAKICAgICB2b2lkIHNldFJlcGxpY2FMYXllcihMYXllckNocm9taXVtKiBsYXllcikgeyBt
X3JlcGxpY2FMYXllciA9IGxheWVyOyB9CkBAIC0xNjEsOCArMTU5LDggQEAgcHVibGljOgogCiAg
ICAgLy8gVGhlc2UgbWV0aG9kcyB0eXBpY2FsbHkgbmVlZCB0byBiZSBvdmVyd3JpdHRlbiBieSBk
ZXJpdmVkIGNsYXNzZXMuCiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3ND
b250ZXh0M0QqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoQ0NM
YXllclRyZWVIb3N0KikgeyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMoQ0NMYXllclRyZWVIb3N0KiwgR3JhcGhpY3NDb250ZXh0M0QqKSB7IH0KICAgICB2aXJ0
dWFsIHZvaWQgc2V0SXNNYXNrKGJvb2wpIHt9CiAgICAgdmlydHVhbCB2b2lkIHVucmVzZXJ2ZUNv
bnRlbnRzVGV4dHVyZSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBiaW5kQ29udGVudHNUZXh0dXJl
KCkgeyB9CkBAIC0yMDUsNyArMjAzLDYgQEAgcHVibGljOgogICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiBhbnkgb2YgdGhlIGxheWVyJ3MgZGVzY2VuZGFudHMgaGFzIGNvbnRlbnQgdG8gZHJhdy4KICAg
ICBib29sIGRlc2NlbmRhbnREcmF3c0NvbnRlbnQoKTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdCog
bGF5ZXJUcmVlSG9zdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdC5nZXQoKTsgfQog
ICAgIHZvaWQgY2xlYW51cFJlc291cmNlc1JlY3Vyc2l2ZSgpOwogCiBwcm90ZWN0ZWQ6CkBAIC0y
NTAsOCArMjQ3LDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4gbV9jaGlsZHJlbjsKICAgICBMYXllckNocm9taXVtKiBtX3BhcmVudDsKIAotICAgIFJlZlB0
cjxDQ0xheWVyVHJlZUhvc3Q+IG1fbGF5ZXJUcmVlSG9zdDsKLQogICAgIC8vIExheWVyIHByb3Bl
cnRpZXMuCiAgICAgSW50U2l6ZSBtX2JvdW5kczsKICAgICBJbnRSZWN0IG1fdmlzaWJsZUxheWVy
UmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDZiZDI4MjFkY2YxZGIy
OTFlMzQ1NTdkNTIyZGZlYmI2ZGI5MTQ0ZjkuLjY3NmE3YzM0NzI2ODMwYTQ4ZWZhZjUyMDQyYzMx
NzdlMGI2NzQwYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcApAQCAtOTIsNyAr
OTIsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpCiAgICAg
bV91cGRhdGVSZWN0ID0gSW50UmVjdCgpOwogfQogCi12b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6
dXBkYXRlVGlsZVNpemVBbmRUaWxpbmdPcHRpb24oKQordm9pZCBUaWxlZExheWVyQ2hyb21pdW06
OnVwZGF0ZVRpbGVTaXplQW5kVGlsaW5nT3B0aW9uKGludCBtYXhUZXh0dXJlU2l6ZSkKIHsKICAg
ICBpZiAoIW1fdGlsZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTExNSw4ICsxMTUsNyBAQCB2b2lk
IFRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGlsZVNpemVBbmRUaWxpbmdPcHRpb24oKQogICAg
ICAgICBpc1RpbGVkID0gYXV0b1RpbGVkOwogCiAgICAgSW50U2l6ZSByZXF1ZXN0ZWRTaXplID0g
aXNUaWxlZCA/IHRpbGVTaXplIDogY29udGVudEJvdW5kcygpOwotICAgIGNvbnN0IGludCBtYXhT
aXplID0gbGF5ZXJUcmVlSG9zdCgpLT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4
dHVyZVNpemU7Ci0gICAgSW50U2l6ZSBjbGFtcGVkU2l6ZSA9IHJlcXVlc3RlZFNpemUuc2hydW5r
VG8oSW50U2l6ZShtYXhTaXplLCBtYXhTaXplKSk7CisgICAgSW50U2l6ZSBjbGFtcGVkU2l6ZSA9
IHJlcXVlc3RlZFNpemUuc2hydW5rVG8oSW50U2l6ZShtYXhUZXh0dXJlU2l6ZSwgbWF4VGV4dHVy
ZVNpemUpKTsKICAgICBtX3RpbGVyLT5zZXRUaWxlU2l6ZShjbGFtcGVkU2l6ZSk7CiB9CiAKQEAg
LTEzNCwxNiArMTMzLDE0IEBAIGJvb2wgVGlsZWRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQo
KSBjb25zdAogICAgIHJldHVybiAhbV9za2lwc0RyYXc7CiB9CiAKLXZvaWQgVGlsZWRMYXllckNo
cm9taXVtOjpzZXRMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdCogaG9zdCkKK3ZvaWQgVGls
ZWRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcklmTmVlZGVkKGNvbnN0IENDTGF5
ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkKIHsKLSAgICBMYXllckNocm9taXVtOjpzZXRMYXll
clRyZWVIb3N0KGhvc3QpOwotCi0gICAgaWYgKG1fdGlsZXIgfHwgIWhvc3QpCisgICAgaWYgKHRl
eHR1cmVVcGRhdGVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNyZWF0ZVRleHR1cmVVcGRh
dGVyKGhvc3QpOworICAgIGNyZWF0ZVRleHR1cmVVcGRhdGVyKGxheWVyVHJlZUhvc3QpOwogCi0g
ICAgbV90ZXh0dXJlRm9ybWF0ID0gaG9zdC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLmJl
c3RUZXh0dXJlRm9ybWF0OworICAgIG1fdGV4dHVyZUZvcm1hdCA9IGxheWVyVHJlZUhvc3QtPmxh
eWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5iZXN0VGV4dHVyZUZvcm1hdDsKICAgICBtX3RleHR1
cmVPcmllbnRhdGlvbiA9IHRleHR1cmVVcGRhdGVyKCktPm9yaWVudGF0aW9uKCk7CiAgICAgbV9z
YW1wbGVkVGV4ZWxGb3JtYXQgPSB0ZXh0dXJlVXBkYXRlcigpLT5zYW1wbGVkVGV4ZWxGb3JtYXQo
bV90ZXh0dXJlRm9ybWF0KTsKICAgICBtX3RpbGVyID0gQ0NMYXllclRpbGluZ0RhdGE6OmNyZWF0
ZSgKQEAgLTE1MSw3ICsxNDgsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJU
cmVlSG9zdChDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiAgICAgICAgIGlzUm9vdExheWVyKCkgPyBD
Q0xheWVyVGlsaW5nRGF0YTo6Tm9Cb3JkZXJUZXhlbHMgOiBDQ0xheWVyVGlsaW5nRGF0YTo6SGFz
Qm9yZGVyVGV4ZWxzKTsKIH0KIAotdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCit2b2lkIFRpbGVkTGF5
ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhDQ0xheWVyVHJlZUhvc3QqIGxh
eWVyVHJlZUhvc3QsIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogewogICAgIC8vIFBhaW50
aW5nIGNvdWxkIGNhdXNlIGNvbXBvc2l0aW5nIHRvIGdldCB0dXJuZWQgb2ZmLCB3aGljaCBtYXkg
Y2F1c2UgdGhlIHRpbGVyIHRvIGJlY29tZSBpbnZhbGlkYXRlZCBtaWQtdXBkYXRlLgogICAgIGlm
IChtX3NraXBzRHJhdyB8fCBtX3VwZGF0ZVJlY3QuaXNFbXB0eSgpIHx8ICFtX3RpbGVyLT5udW1U
aWxlcygpKQpAQCAtMTYzLDcgKzE2MCw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRh
dGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogICAgICAg
ICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CiAgICAgICAgICAgICBVcGRh
dGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOwogICAgICAgICAgICAgaWYgKCF0aWxlKQot
ICAgICAgICAgICAgICAgIHRpbGUgPSBjcmVhdGVUaWxlKGksIGopOworICAgICAgICAgICAgICAg
IHRpbGUgPSBjcmVhdGVUaWxlKGxheWVyVHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIo
KSwgaSwgaik7CiAgICAgICAgICAgICBlbHNlIGlmICghdGlsZS0+ZGlydHkoKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKIApAQCAtMjEyLDcgKzIwOSw2IEBAIHZvaWQgVGlsZWRMYXllckNo
cm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0KQogdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnNldFRpbGluZ09wdGlvbihUaWxpbmdPcHRp
b24gdGlsaW5nT3B0aW9uKQogewogICAgIG1fdGlsaW5nT3B0aW9uID0gdGlsaW5nT3B0aW9uOwot
ICAgIHVwZGF0ZVRpbGVTaXplQW5kVGlsaW5nT3B0aW9uKCk7CiB9CiAKIHZvaWQgVGlsZWRMYXll
ckNocm9taXVtOjpzZXRJc01hc2soYm9vbCBpc01hc2spCkBAIC0yNjUsMTkgKzI2MSwxMiBAQCB2
b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5
ZXIpCiAgICAgfQogfQogCi1UZXh0dXJlTWFuYWdlciogVGlsZWRMYXllckNocm9taXVtOjp0ZXh0
dXJlTWFuYWdlcigpIGNvbnN0Ci17Ci0gICAgaWYgKCFsYXllclRyZWVIb3N0KCkpCi0gICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiBsYXllclRyZWVIb3N0KCktPmNvbnRlbnRzVGV4dHVyZU1h
bmFnZXIoKTsKLX0KLQogVXBkYXRhYmxlVGlsZSogVGlsZWRMYXllckNocm9taXVtOjp0aWxlQXQo
aW50IGksIGludCBqKSBjb25zdAogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxVcGRhdGFibGVU
aWxlKj4obV90aWxlci0+dGlsZUF0KGksIGopKTsKIH0KIAotVXBkYXRhYmxlVGlsZSogVGlsZWRM
YXllckNocm9taXVtOjpjcmVhdGVUaWxlKGludCBpLCBpbnQgaikKK1VwZGF0YWJsZVRpbGUqIFRp
bGVkTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGlsZShUZXh0dXJlTWFuYWdlciogbWFuYWdlciwgaW50
IGksIGludCBqKQogewogICAgIFJlZlB0cjxVcGRhdGFibGVUaWxlPiB0aWxlOwogICAgIGlmICht
X3VudXNlZFRpbGVzLnNpemUoKSA+IDApIHsKQEAgLTI4NSw3ICsyNzQsNiBAQCBVcGRhdGFibGVU
aWxlKiBUaWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZVRpbGUoaW50IGksIGludCBqKQogICAgICAg
ICBtX3VudXNlZFRpbGVzLnJlbW92ZUxhc3QoKTsKICAgICAgICAgQVNTRVJUKHRpbGUtPnJlZkNv
dW50KCkgPT0gMSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgVGV4dHVyZU1hbmFnZXIqIG1hbmFn
ZXIgPSB0ZXh0dXJlTWFuYWdlcigpOwogICAgICAgICB0aWxlID0gYWRvcHRSZWYobmV3IFVwZGF0
YWJsZVRpbGUoTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShtYW5hZ2VyKSkpOwogICAgIH0KICAgICBt
X3RpbGVyLT5hZGRUaWxlKHRpbGUsIGksIGopOwpAQCAtMzYxLDcgKzM0OSw3IEBAIHZvaWQgVGls
ZWRMYXllckNocm9taXVtOjpwcm90ZWN0VGlsZVRleHR1cmVzKGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0KQogICAgIH0KIH0KIAotdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1Vw
ZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKK3ZvaWQgVGlsZWRMYXllckNocm9taXVt
OjpwcmVwYXJlVG9VcGRhdGUoVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyLCBjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCkKIHsKICAgICBBU1NFUlQobV90aWxlcik7CiAKQEAgLTM5MSw3
ICszNzksNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSBy
aWdodDsgKytpKSB7CiAgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGks
IGopOwogICAgICAgICAgICAgaWYgKCF0aWxlKQotICAgICAgICAgICAgICAgIHRpbGUgPSBjcmVh
dGVUaWxlKGksIGopOworICAgICAgICAgICAgICAgIHRpbGUgPSBjcmVhdGVUaWxlKHRleHR1cmVN
YW5hZ2VyLCBpLCBqKTsKIAogICAgICAgICAgICAgaWYgKCF0aWxlLT50ZXh0dXJlKCktPmlzVmFs
aWQobV90aWxlci0+dGlsZVNpemUoKSwgbV90ZXh0dXJlRm9ybWF0KSkKICAgICAgICAgICAgICAg
ICB0aWxlLT5tX2RpcnR5TGF5ZXJSZWN0ID0gbV90aWxlci0+dGlsZUxheWVyUmVjdCh0aWxlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rp
bGVkTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKaW5kZXggNjkyNmUzZDUzYzA4NzQyMGQ0YWYxOTNl
ZjY1ZDA3ODE1MzQ0Yzg3Ni4uZmNhNTJmYzI5OWRiODQwNDdlZTgxMTU3MWIzNDM5ZjI5Y2M1OTQz
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKQEAgLTM2LDYgKzM2LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBMYXllclRleHR1cmVVcGRhdGVyOwogY2xhc3MgVXBkYXRh
YmxlVGlsZTsKK2NsYXNzIFRleHR1cmVNYW5hZ2VyOwogCiBjbGFzcyBUaWxlZExheWVyQ2hyb21p
dW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CkBAIC00Myw3ICs0NCw3IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgflRpbGVkTGF5ZXJDaHJvbWl1bSgpOwogCi0gICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhDQ0xheWVyVHJlZUhvc3Qq
LCBHcmFwaGljc0NvbnRleHQzRCopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJc01hc2soYm9vbCk7
CiAKICAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCopOwpAQCAt
NTgsMTUgKzU5LDE2IEBAIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBUaWxlZExheWVyQ2hyb21p
dW0oR3JhcGhpY3NMYXllckNocm9taXVtKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFJl
c291cmNlcygpOwotICAgIHZvaWQgdXBkYXRlVGlsZVNpemVBbmRUaWxpbmdPcHRpb24oKTsKKyAg
ICB2b2lkIHVwZGF0ZVRpbGVTaXplQW5kVGlsaW5nT3B0aW9uKGludCBtYXhUZXh0dXJlU2l6ZSk7
CiAKKyAgICB2b2lkIGNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoY29uc3QgQ0NMYXllclRy
ZWVIb3N0Kik7CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmVVcGRhdGVyKGNvbnN0IEND
TGF5ZXJUcmVlSG9zdCopID0gMDsKICAgICB2aXJ0dWFsIExheWVyVGV4dHVyZVVwZGF0ZXIqIHRl
eHR1cmVVcGRhdGVyKCkgY29uc3QgPSAwOwogCiAgICAgLy8gU2V0IGludmFsaWRhdGlvbnMgdG8g
YmUgcG90ZW50aWFsbHkgcmVwYWludGVkIGR1cmluZyB1cGRhdGUoKS4KICAgICB2b2lkIGludmFs
aWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKICAgICAvLyBQcmVwYXJlIGRh
dGEgbmVlZGVkIHRvIHVwZGF0ZSB0ZXh0dXJlcyB0aGF0IGludGVyc2VjdCB3aXRoIGNvbnRlbnRS
ZWN0LgotICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
KTsKKyAgICB2b2lkIHByZXBhcmVUb1VwZGF0ZShUZXh0dXJlTWFuYWdlciosIGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0KTsKICAgICAvLyBVcGRhdGUgaW52YWxpZCB0ZXh0dXJlcyB0aGF0IGlu
dGVyc2VjdCB3aXRoIGNvbnRlbnRSZWN0IHByb3ZpZGVkIGluIHByZXBhcmVUb1VwZGF0ZSgpLgog
ICAgIHZvaWQgdXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIExheWVyVGV4dHVyZVVwZGF0
ZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgcHJvdGVjdFZpc2libGVUaWxlVGV4dHVyZXMoKTsKQEAg
LTc0LDE4ICs3NiwxNCBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlQ0NMYXllckltcGwoKTsKIAotICAgIHZpcnR1YWwgdm9p
ZCBzZXRMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdCopOwotCiAgICAgdm9pZCBjcmVhdGVU
aWxlcklmTmVlZGVkKCk7CiAgICAgdm9pZCBzZXRUaWxpbmdPcHRpb24oVGlsaW5nT3B0aW9uKTsK
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0aWxpbmdUcmFuc2Zvcm0oKSBjb25zdDsKIAogICAg
IFVwZGF0YWJsZVRpbGUqIHRpbGVBdChpbnQsIGludCkgY29uc3Q7Ci0gICAgVXBkYXRhYmxlVGls
ZSogY3JlYXRlVGlsZShpbnQsIGludCk7CisgICAgVXBkYXRhYmxlVGlsZSogY3JlYXRlVGlsZShU
ZXh0dXJlTWFuYWdlciosIGludCwgaW50KTsKICAgICB2b2lkIGludmFsaWRhdGVUaWxlcyhjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CiAKLSAgICBUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1h
bmFnZXIoKSBjb25zdDsKLQogICAgIC8vIFN0YXRlIGhlbGQgYmV0d2VlbiB1cGRhdGUgYW5kIHVw
bG9hZC4KICAgICBJbnRSZWN0IG1fcGFpbnRSZWN0OwogICAgIEludFJlY3QgbV91cGRhdGVSZWN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VmlkZW9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMTg4ZTJmMGNjZGI1YjlhNDc0
NGNmNWIzNjM2NjhiMjgxZDgxYzU2Yy4uYjhiNDM4NTU5MTZhM2I0MDdmMjk1ZTA2MjQxNjM0ZDFh
NjgwNTA3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCkBAIC03OCwxNSArNzgs
MTEgQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQogICAgIHJl
bGVhc2VDdXJyZW50RnJhbWUoKTsKIH0KIAotdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0
ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCit2b2lkIFZp
ZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhDQ0xheWVyVHJlZUhv
c3QqIGxheWVyVHJlZUhvc3QsIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogewogICAgIGlm
ICghbV9jb250ZW50c0RpcnR5IHx8ICFtX293bmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBS
ZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSBzdGF0aWNfY2FzdDxSZW5kZXJMYXllckJhY2tp
bmcqPihtX293bmVyLT5jbGllbnQoKSk7Ci0gICAgaWYgKCFiYWNraW5nIHx8IGJhY2tpbmctPnBh
aW50aW5nR29lc1RvV2luZG93KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIEFTU0VSVChkcmF3
c0NvbnRlbnQoKSk7CiAKICAgICBtX3NraXBzRHJhdyA9IGZhbHNlOwpAQCAtMTA5LDcgKzEwNSw3
IEBAIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogCiAgICAgLy8gQWxsb2NhdGUgdGV4dHVyZXMgZm9y
IHBsYW5lcyBpZiB0aGV5IGFyZSBub3QgYWxsb2NhdGVkIGFscmVhZHksIG9yCiAgICAgLy8gcmVh
bGxvY2F0ZSB0ZXh0dXJlcyB0aGF0IGFyZSB0aGUgd3Jvbmcgc2l6ZSBmb3IgdGhlIGZyYW1lLgot
ICAgIGJvb2wgdGV4dHVyZXNSZXNlcnZlZCA9IHJlc2VydmVUZXh0dXJlcyhmcmFtZSwgdGV4dHVy
ZUZvcm1hdCk7CisgICAgYm9vbCB0ZXh0dXJlc1Jlc2VydmVkID0gcmVzZXJ2ZVRleHR1cmVzKGxh
eWVyVHJlZUhvc3QsIGZyYW1lLCB0ZXh0dXJlRm9ybWF0KTsKICAgICBpZiAoIXRleHR1cmVzUmVz
ZXJ2ZWQpIHsKICAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOwogICAgICAgICBtX3Byb3ZpZGVy
LT5wdXRDdXJyZW50RnJhbWUoZnJhbWUpOwpAQCAtMTQ2LDE4ICsxNDIsNiBAQCB2b2lkIFZpZGVv
TGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAg
fQogfQogCi12b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdChDQ0xheWVy
VHJlZUhvc3QqIGhvc3QpCi17Ci0gICAgaWYgKGhvc3QgJiYgbGF5ZXJUcmVlSG9zdCgpICE9IGhv
c3QpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAg
ICAgIG1fdGV4dHVyZXNbaV0ubV92aXNpYmxlU2l6ZSA9IEludFNpemUoKTsKLSAgICAgICAgICAg
IG1fdGV4dHVyZXNbaV0ubV90ZXh0dXJlID0gTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShob3N0LT5j
b250ZW50c1RleHR1cmVNYW5hZ2VyKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgTGF5ZXJD
aHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdChob3N0KTsKLX0KLQogR0MzRGVudW0gVmlkZW9MYXll
ckNocm9taXVtOjpkZXRlcm1pbmVUZXh0dXJlRm9ybWF0KGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1
bSogZnJhbWUpCiB7CiAgICAgc3dpdGNoIChmcmFtZS0+Zm9ybWF0KCkpIHsKQEAgLTE3MiwxMyAr
MTU2LDEyIEBAIEdDM0RlbnVtIFZpZGVvTGF5ZXJDaHJvbWl1bTo6ZGV0ZXJtaW5lVGV4dHVyZUZv
cm1hdChjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyCiAgICAgcmV0dXJuIEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFOwogfQogCi1ib29sIFZpZGVvTGF5ZXJDaHJvbWl1bTo6cmVz
ZXJ2ZVRleHR1cmVzKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSogZnJhbWUsIEdDM0RlbnVtIHRl
eHR1cmVGb3JtYXQpCitib29sIFZpZGVvTGF5ZXJDaHJvbWl1bTo6cmVzZXJ2ZVRleHR1cmVzKEND
TGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCwgY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiBm
cmFtZSwgR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkKIHsKLSAgICBBU1NFUlQobGF5ZXJUcmVlSG9z
dCgpKTsKICAgICBBU1NFUlQoZnJhbWUpOwogICAgIEFTU0VSVCh0ZXh0dXJlRm9ybWF0ICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKIAotICAgIGludCBtYXhUZXh0dXJlU2l6
ZSA9IGxheWVyVHJlZUhvc3QoKS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1
cmVTaXplOworICAgIGludCBtYXhUZXh0dXJlU2l6ZSA9IGxheWVyVHJlZUhvc3QtPmxheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZTsKIAogICAgIGZvciAodW5zaWduZWQg
cGxhbmUgPSAwOyBwbGFuZSA8IGZyYW1lLT5wbGFuZXMoKTsgcGxhbmUrKykgewogICAgICAgICBJ
bnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemUgPSBmcmFtZS0+cmVxdWlyZWRUZXh0dXJlU2l6ZShw
bGFuZSk7CkBAIC0xODgsOCArMTcxLDEwIEBAIGJvb2wgVmlkZW9MYXllckNocm9taXVtOjpyZXNl
cnZlVGV4dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSwgR0MzRGVuCiAgICAg
ICAgIGlmIChyZXF1aXJlZFRleHR1cmVTaXplLmlzWmVybygpIHx8IHJlcXVpcmVkVGV4dHVyZVNp
emUud2lkdGgoKSA+IG1heFRleHR1cmVTaXplIHx8IHJlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0
KCkgPiBtYXhUZXh0dXJlU2l6ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAg
ICBpZiAoIW1fdGV4dHVyZXNbcGxhbmVdLm1fdGV4dHVyZSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgaWYgKCFtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUpIHsKKyAgICAg
ICAgICAgIG1fdGV4dHVyZXNbcGxhbmVdLm1fdmlzaWJsZVNpemUgPSBJbnRTaXplKCk7CisgICAg
ICAgICAgICBtX3RleHR1cmVzW3BsYW5lXS5tX3RleHR1cmUgPSBNYW5hZ2VkVGV4dHVyZTo6Y3Jl
YXRlKGxheWVyVHJlZUhvc3QtPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKSk7CisgICAgICAgIH0K
IAogICAgICAgICBpZiAobV90ZXh0dXJlc1twbGFuZV0ubV90ZXh0dXJlLT5zaXplKCkgIT0gcmVx
dWlyZWRUZXh0dXJlU2l6ZSkKICAgICAgICAgICAgIG1fdGV4dHVyZXNbcGxhbmVdLm1fdmlzaWJs
ZVNpemUgPSBjb21wdXRlVmlzaWJsZVNpemUoZnJhbWUsIHBsYW5lKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXll
ckNocm9taXVtLmgKaW5kZXggOWY3OTAzMjU2ZmJlODg2YWM0ZWU2YzlkZjZkYWIzNjYwY2YzZTUx
Zi4uMDM0MTI2NDU0NGEyMTQxNGEyZGIxODM3ZGVmYzcxZmYyNzVlYzQyNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9t
aXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlk
ZW9MYXllckNocm9taXVtLmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOwogCi0gICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhDQ0xheWVyVHJlZUhv
c3QqLCBHcmFwaGljc0NvbnRleHQzRCopOwogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxl
ZCBieSBWaWRlb0ZyYW1lUHJvdmlkZXIuIFdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkCkBAIC01
OSw4ICs1OSw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBwdXNoUHJvcGVydGllc1Rv
KENDTGF5ZXJJbXBsKik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJUcmVlSG9zdChDQ0xh
eWVyVHJlZUhvc3QqKTsKLQogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwUmVz
b3VyY2VzKCk7CiAKQEAgLTc0LDcgKzcyLDcgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyBHQzNE
ZW51bSBkZXRlcm1pbmVUZXh0dXJlRm9ybWF0KGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSopOwog
ICAgIHN0YXRpYyBJbnRTaXplIGNvbXB1dGVWaXNpYmxlU2l6ZShjb25zdCBWaWRlb0ZyYW1lQ2hy
b21pdW0qLCB1bnNpZ25lZCBwbGFuZSk7Ci0gICAgYm9vbCByZXNlcnZlVGV4dHVyZXMoY29uc3Qg
VmlkZW9GcmFtZUNocm9taXVtKiwgR0MzRGVudW0gdGV4dHVyZUZvcm1hdCk7CisgICAgYm9vbCBy
ZXNlcnZlVGV4dHVyZXMoQ0NMYXllclRyZWVIb3N0KiwgY29uc3QgVmlkZW9GcmFtZUNocm9taXVt
KiwgR0MzRGVudW0gdGV4dHVyZUZvcm1hdCk7CiAgICAgdm9pZCB1cGRhdGVUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEKiwgVGV4dHVyZSYsIGNvbnN0IHZvaWQqKSBjb25zdDsKIAogICAgIHZvaWQg
cmVzZXRGcmFtZVBhcmFtZXRlcnMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCmlu
ZGV4IGQxMGQ0ZjU0YjEyNmZiYzU1MGQ3MWU1NThiNTI1MzUwNTMxNjNiZDUuLmQzYzI0ODA0ZDVl
OTg1NDYwMTU0MDhmMWM0MzIyYTFmZWRjNWNlM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9t
aXVtLmNwcApAQCAtNjUsNyArNjUsNyBAQCBib29sIFdlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJhd3ND
b250ZW50KCkgY29uc3QKICAgICByZXR1cm4gKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpID09IEdyYXBoaWNzQ29udGV4
dDNEOjpOT19FUlJPUik7CiB9CiAKLXZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb21w
b3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiByZW5kZXJlckNvbnRleHQpCit2b2lk
IFdlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhDQ0xheWVyVHJl
ZUhvc3QqLCBHcmFwaGljc0NvbnRleHQzRCogcmVuZGVyZXJDb250ZXh0KQogewogICAgIGlmICgh
ZHJhd3NDb250ZW50KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTk3LDYgKzk3LDcgQEAgdm9pZCBX
ZWJHTExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250
ZXh0M0QqIHJlbmRlcmVyQ28KIAogYm9vbCBXZWJHTExheWVyQ2hyb21pdW06OnBhaW50UmVuZGVy
ZWRSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKQogeworI2lmIERPX05P
VF9MQU5EX0RJU0FCTEVfV0VCR0xfUFJJTlRJTkcKICAgICBpZiAobV90ZXh0dXJlVXBkYXRlZCB8
fCAhbGF5ZXJSZW5kZXJlckNvbnRleHQoKSB8fCAhZHJhd3NDb250ZW50KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApAQCAtMTEyLDYgKzExMywxMCBAQCBib29sIFdlYkdMTGF5ZXJDaHJvbWl1
bTo6cGFpbnRSZW5kZXJlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIp
CiAgICAgZXh0ZW5zaW9ucy0+cGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKGZyYW1lYnVmZmVyLCBm
cmFtZWJ1ZmZlclNpemUud2lkdGgoKSwgZnJhbWVidWZmZXJTaXplLmhlaWdodCgpLCAhbV9jb250
ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSwgaW1hZ2VCdWZm
ZXIpOwogICAgIGxheWVyUmVuZGVyZXJDb250ZXh0KCktPmRlbGV0ZUZyYW1lYnVmZmVyKGZyYW1l
YnVmZmVyKTsKICAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGltYWdl
QnVmZmVyKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0KIAogdm9pZCBXZWJHTExheWVy
Q2hyb21pdW06OnNldFRleHR1cmVVcGRhdGVkKCkKQEAgLTExOSw3ICsxMjQsNyBAQCB2b2lkIFdl
YkdMTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVVwZGF0ZWQoKQogICAgIG1fdGV4dHVyZVVwZGF0
ZWQgPSB0cnVlOwogICAgIC8vIElmIFdlYkdMIGNvbW1hbmRzIGFyZSBpc3N1ZWQgb3V0c2lkZSBv
ZiBhIHRoZSBhbmltYXRpb24gY2FsbGJhY2tzLCB0aGVuIHVzZQogICAgIC8vIGNhbGwgcmF0ZUxp
bWl0T2Zmc2NyZWVuQ29udGV4dENIUk9NSVVNKCkgdG8ga2VlcCB0aGUgY29udGV4dCBmcm9tIGdl
dHRpbmcgdG9vIGZhciBhaGVhZC4KLSAgICBpZiAobGF5ZXJUcmVlSG9zdCgpICYmICFsYXllclRy
ZWVIb3N0KCktPmFuaW1hdGluZygpICYmIG1fY29udGV4dFN1cHBvcnRzUmF0ZUxpbWl0aW5nRXh0
ZW5zaW9uICYmICFtX3JhdGVMaW1pdGluZ1RpbWVyLmlzQWN0aXZlKCkpCisgICAgaWYgKENDTGF5
ZXJUcmVlSG9zdDo6YW5pbWF0aW5nKCkgJiYgbV9jb250ZXh0U3VwcG9ydHNSYXRlTGltaXRpbmdF
eHRlbnNpb24gJiYgIW1fcmF0ZUxpbWl0aW5nVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9y
YXRlTGltaXRpbmdUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKQEAgLTE0NCw2ICsxNDksNyBA
QCB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCkKICAgICBtX2NvbnRleHRTdXBwb3J0c1JhdGVMaW1pdGluZ0V4dGVuc2lv
biA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQ0hST01JVU1fcmF0
ZV9saW1pdF9vZmZzY3JlZW5fY29udGV4dCIpOwogfQogCisjaWYgRE9fTk9UX0xBTkRfRElTQUJM
RV9XRUJHTF9QUklOVElORwogR3JhcGhpY3NDb250ZXh0M0QqIFdlYkdMTGF5ZXJDaHJvbWl1bTo6
bGF5ZXJSZW5kZXJlckNvbnRleHQoKQogewogICAgIC8vIEZJWE1FOiBJbiB0aGUgdGhyZWFkZWQg
Y2FzZSwgcGFpbnRSZW5kZXJlZFJlc3VsdHNUb0NhbnZhcyBtdXN0IGJlCkBAIC0xNTIsNiArMTU4
LDcgQEAgR3JhcGhpY3NDb250ZXh0M0QqIFdlYkdMTGF5ZXJDaHJvbWl1bTo6bGF5ZXJSZW5kZXJl
ckNvbnRleHQoKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gbGF5ZXJUcmVlSG9zdCgp
LT5jb250ZXh0KCk7CiB9CisjZW5kaWYKIAogdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnJhdGVM
aW1pdENvbnRleHQoVGltZXI8V2ViR0xMYXllckNocm9taXVtPiopCiB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21p
dW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5
ZXJDaHJvbWl1bS5oCmluZGV4IDIxNTUwZGZjMTQxM2YwYjQ3NmQ1MGIwNjMyYWE4ZjUyNzliYzFj
MDQuLjFiNjMwMGUzMTI0MTE2ZjUyNzBjYTk1MDk3YjlhYmNkODE3YzhmMmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJv
bWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dl
YkdMTGF5ZXJDaHJvbWl1bS5oCkBAIC0zMiw2ICszMiw4IEBACiAjaWZuZGVmIFdlYkdMTGF5ZXJD
aHJvbWl1bV9oCiAjZGVmaW5lIFdlYkdMTGF5ZXJDaHJvbWl1bV9oCiAKKyNkZWZpbmUgRE9fTk9U
X0xBTkRfRElTQUJMRV9XRUJHTF9QUklOVElORyAwCisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiAKICNpbmNsdWRlICJDYW52YXNMYXllckNocm9taXVtLmgiCkBAIC01MCw3ICs1
Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJHTExheWVyQ2hyb21pdW0oKTsKIAogICAg
IHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCopOworICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKENDTGF5ZXJUcmVlSG9zdCosIEdyYXBoaWNz
Q29udGV4dDNEKik7CiAgICAgdm9pZCBzZXRUZXh0dXJlVXBkYXRlZCgpOwogICAgIGJvb2wgcGFp
bnRSZW5kZXJlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciopOwogCkBAIC02MSw3ICs2Myw5
IEBAIHByaXZhdGU6CiAgICAgZXhwbGljaXQgV2ViR0xMYXllckNocm9taXVtKEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bSogb3duZXIpOwogICAgIGZyaWVuZCBjbGFzcyBXZWJHTExheWVyQ2hyb21pdW1S
YXRlTGltaXRUYXNrOwogCisjaWYgRE9fTk9UX0xBTkRfRElTQUJMRV9XRUJHTF9QUklOVElORwog
ICAgIEdyYXBoaWNzQ29udGV4dDNEKiBsYXllclJlbmRlcmVyQ29udGV4dCgpOworI2VuZGlmCiAK
ICAgICB2b2lkIHJhdGVMaW1pdENvbnRleHQoVGltZXI8V2ViR0xMYXllckNocm9taXVtPiopOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCBjZWE1NzljOTM2OTczYzFlYmJh
ODJmZjg4ZGMwODE0ZGQ5ZGNhZGIwLi41YjdiZjRlZTQ5Yjc5NTlmM2YwOWMzOTA3NjhlM2YxZWI0
Yzg5MmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTQwLDE3ICs0MCwx
OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0
PiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwg
Y29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCitib29sIENDTGF5ZXJUcmVlSG9zdDo6c19hbmlt
YXRpbmcgPSBmYWxzZTsKKworUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3Q+IENDTGF5ZXJUcmVl
SG9zdDo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50LCBjb25zdCBDQ1NldHRp
bmdzJiBzZXR0aW5ncykKIHsKLSAgICBSZWZQdHI8Q0NMYXllclRyZWVIb3N0PiBsYXllclRyZWVI
b3N0ID0gYWRvcHRSZWYobmV3IENDTGF5ZXJUcmVlSG9zdChjbGllbnQsIHNldHRpbmdzKSk7Cisg
ICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdD4gbGF5ZXJUcmVlSG9zdCA9IGFkb3B0UHRyKG5ldyBD
Q0xheWVyVHJlZUhvc3QoY2xpZW50LCBzZXR0aW5ncykpOwogICAgIGlmICghbGF5ZXJUcmVlSG9z
dC0+aW5pdGlhbGl6ZSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbGF5ZXJUcmVl
SG9zdDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGxheWVyVHJlZUhvc3Qu
cmVsZWFzZSgpOwogfQogCiBDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdChDQ0xheWVy
VHJlZUhvc3RDbGllbnQqIGNsaWVudCwgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCi0gICAg
OiBtX2FuaW1hdGluZyhmYWxzZSkKLSAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICA6IG1fY2xp
ZW50KGNsaWVudCkKICAgICAsIG1fZnJhbWVOdW1iZXIoMCkKICAgICAsIG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRIb3N0KE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6Y3JlYXRlKG1fY2xpZW50LT5j
cmVhdGVSb290TGF5ZXJQYWludGVyKCkpKQogICAgICwgbV9zZXR0aW5ncyhzZXR0aW5ncykKQEAg
LTExMCw5ICsxMTEsOSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGVsZXRlQ29udGVudHNUZXh0
dXJlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQogewotICAgIG1fYW5pbWF0
aW5nID0gdHJ1ZTsKKyAgICBzX2FuaW1hdGluZyA9IHRydWU7CiAgICAgbV9jbGllbnQtPmFuaW1h
dGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOwotICAgIG1fYW5pbWF0aW5nID0gZmFsc2U7Cisg
ICAgc19hbmltYXRpbmcgPSBmYWxzZTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbW1p
dFRvKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQpAQCAtMjMxLDMyICsyMzIsMjggQEAg
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3KCkKICNlbmRpZgogfQogCi12b2lk
IENDTGF5ZXJUcmVlSG9zdDo6Y2xlYXJSZW5kZXJTdXJmYWNlc1JlY3Vyc2l2ZShMYXllckNocm9t
aXVtKiBsYXllcikKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpjbGVhclN0dWZmUmVjdXJzaXZlKExh
eWVyQ2hyb21pdW0qIGxheWVyKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXIt
PmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNsZWFyUmVuZGVyU3VyZmFjZXNSZWN1
cnNpdmUobGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCkpOworICAgICAgICBjbGVhclN0dWZmUmVj
dXJzaXZlKGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpKTsKIAogICAgIGlmIChsYXllci0+cmVw
bGljYUxheWVyKCkpCi0gICAgICAgIGNsZWFyUmVuZGVyU3VyZmFjZXNSZWN1cnNpdmUobGF5ZXIt
PnJlcGxpY2FMYXllcigpKTsKKyAgICAgICAgY2xlYXJTdHVmZlJlY3Vyc2l2ZShsYXllci0+cmVw
bGljYUxheWVyKCkpOwogCiAgICAgaWYgKGxheWVyLT5tYXNrTGF5ZXIoKSkKLSAgICAgICAgY2xl
YXJSZW5kZXJTdXJmYWNlc1JlY3Vyc2l2ZShsYXllci0+bWFza0xheWVyKCkpOworICAgICAgICBj
bGVhclN0dWZmUmVjdXJzaXZlKGxheWVyLT5tYXNrTGF5ZXIoKSk7CiAKICAgICBsYXllci0+Y2xl
YXJSZW5kZXJTdXJmYWNlKCk7CiB9CiAKLQogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFJvb3RM
YXllcihHcmFwaGljc0xheWVyKiBsYXllcikKIHsKICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50
SG9zdC0+Z3JhcGhpY3NMYXllcigpLT5yZW1vdmVBbGxDaGlsZHJlbigpOwogICAgIG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRIb3N0LT5pbnZhbGlkYXRlRW50aXJlTGF5ZXIoKTsKICAgICBpZiAobGF5
ZXIpCiAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5ncmFwaGljc0xheWVyKCkt
PmFkZENoaWxkKGxheWVyKTsKLSAgICBlbHNlIHsKLSAgICAgICAgY2xlYXJSZW5kZXJTdXJmYWNl
c1JlY3Vyc2l2ZShyb290TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpKTsKLSAgICAgICAgbV9ub25D
b21wb3NpdGVkQ29udGVudEhvc3QtPmdyYXBoaWNzTGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLT5z
ZXRMYXllclRyZWVIb3N0KDApOwotICAgICAgICBtX3Jvb3RMYXllci0+cGxhdGZvcm1MYXllcigp
LT5zZXRMYXllclRyZWVIb3N0KDApOwotICAgIH0KKyAgICBlbHNlCisgICAgICAgIGNsZWFyU3R1
ZmZSZWN1cnNpdmUocm9vdExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSk7CiB9CiAKIHZvaWQgQ0NM
YXllclRyZWVIb3N0OjpzZXRWaWV3cG9ydChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUsIGNv
bnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSwgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9u
KQpAQCAtMzQ0LDExICszNDEsMTEgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVy
cyhMYXllckNocm9taXVtKiByb290TGF5ZXIpCiAgICAgcGFpbnRMYXllckNvbnRlbnRzKG1fdXBk
YXRlTGlzdCk7CiB9CiAKLXN0YXRpYyB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KExheWVyQ2hy
b21pdW0qIGxheWVyLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5ZXJSZWN0KQordm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OnBhaW50Q29udGVudHNJZkRpcnR5KExheWVyQ2hyb21pdW0qIGxheWVyLCBj
b25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5ZXJSZWN0KQogewogICAgIGlmIChsYXllci0+ZHJhd3ND
b250ZW50KCkpIHsKICAgICAgICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZUxh
eWVyUmVjdCk7Ci0gICAgICAgIGxheWVyLT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgICAg
ICBsYXllci0+cGFpbnRDb250ZW50c0lmRGlydHkodGhpcyk7CiAgICAgfQogfQogCkBAIC0zNTks
OCArMzU2LDYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25z
dCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QKICAgICAgICAgUmVuZGVyU3VyZmFj
ZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJm
YWNlKCk7CiAgICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlKTsKIAotICAgICAgICByZW5kZXJT
dXJmYWNlTGF5ZXItPnNldExheWVyVHJlZUhvc3QodGhpcyk7Ci0KICAgICAgICAgLy8gUmVuZGVy
IHN1cmZhY2VzIHdob3NlIGRyYXdhYmxlIGFyZWEgaGFzIHplcm8gd2lkdGggb3IgaGVpZ2h0CiAg
ICAgICAgIC8vIHdpbGwgaGF2ZSBubyBsYXllcnMgYXNzb2NpYXRlZCB3aXRoIHRoZW0gYW5kIHNo
b3VsZCBiZSBza2lwcGVkLgogICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgp
LnNpemUoKSkKQEAgLTM3OSwxOSArMzc0LDkgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50
TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QKICAg
ICAgICAgICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyLT5yZW5kZXJTdXJm
YWNlKCkgIT0gcmVuZGVyU3VyZmFjZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICAgICAgbGF5ZXItPnNldExheWVyVHJlZUhvc3QodGhpcyk7Ci0KICAgICAgICAgICAgIGlm
ICghbGF5ZXItPm9wYWNpdHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAg
ICAgICAgaWYgKGxheWVyLT5tYXNrTGF5ZXIoKSkKLSAgICAgICAgICAgICAgICBsYXllci0+bWFz
a0xheWVyKCktPnNldExheWVyVHJlZUhvc3QodGhpcyk7Ci0gICAgICAgICAgICBpZiAobGF5ZXIt
PnJlcGxpY2FMYXllcigpKSB7Ci0gICAgICAgICAgICAgICAgbGF5ZXItPnJlcGxpY2FMYXllcigp
LT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwotICAgICAgICAgICAgICAgIGlmIChsYXllci0+cmVw
bGljYUxheWVyKCktPm1hc2tMYXllcigpKQotICAgICAgICAgICAgICAgICAgICBsYXllci0+cmVw
bGljYUxheWVyKCktPm1hc2tMYXllcigpLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwotICAgICAg
ICAgICAgfQotCiAgICAgICAgICAgICBpZiAobGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtNDU0LDcgKzQzOSw3IEBAIHZvaWQgQ0NMYXll
clRyZWVIb3N0Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKExheWVyQ2hyb21pdW0qIGxheWVy
LCBHcmFwaGljc0NvCiAgICAgICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMobGF5ZXItPnJl
cGxpY2FMYXllcigpLCBjb250ZXh0KTsKIAogICAgIGlmIChsYXllci0+ZHJhd3NDb250ZW50KCkp
Ci0gICAgICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQpOworICAg
ICAgICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyh0aGlzLCBjb250ZXh0KTsKIH0K
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCAzNzdmNjkxZDIxNmVhOGVhNjUz
N2ViZTAxNjQ1Yjc5MjUxNWUzOTk1Li5iYjNiZmMzMjA0ODU5NDJiMjg2MGIyZDk2MzIwYzk3NDc1
NDFlY2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMzEsNyArMzEsNiBAQAog
CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKICNpZiBVU0UoU0tJQSkKIGNsYXNzIEdy
Q29udGV4dDsKQEAgLTkxLDkgKzkwLDEwIEBAIHN0cnVjdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0
aWVzIHsKICAgICBpbnQgbWF4VGV4dHVyZVNpemU7CiB9OwogCi1jbGFzcyBDQ0xheWVyVHJlZUhv
c3QgOiBwdWJsaWMgUmVmQ291bnRlZDxDQ0xheWVyVHJlZUhvc3Q+IHsKK2NsYXNzIENDTGF5ZXJU
cmVlSG9zdCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NMYXllclRyZWVIb3N0KTsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+IGNyZWF0ZShDQ0xh
eWVyVHJlZUhvc3RDbGllbnQqLCBjb25zdCBDQ1NldHRpbmdzJik7CisgICAgc3RhdGljIFBhc3NP
d25QdHI8Q0NMYXllclRyZWVIb3N0PiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiwgY29u
c3QgQ0NTZXR0aW5ncyYpOwogICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdCgpOwogCiAgICAg
Ly8gQ0NMYXllclRyZWVIb3N0IGludGVyZmFjZSB0byBDQ1Byb3h5LgpAQCAtMTA4LDggKzEwOCw4
IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgLy8gQ0NMYXllclRyZWVIb3N0IGludGVyZmFjZSB0
byBXZWJWaWV3LgotICAgIGJvb2wgYW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRp
bmc7IH0KLSAgICB2b2lkIHNldEFuaW1hdGluZyhib29sIGFuaW1hdGluZykgeyBtX2FuaW1hdGlu
ZyA9IGFuaW1hdGluZzsgfSAvLyBDYW4gYmUgcmVtb3ZlZCB3aGVuIG5vbi10aHJlYWRlZCBzY2hl
ZHVsaW5nIG1vdmVzIGluc2lkZS4KKyAgICBzdGF0aWMgYm9vbCBhbmltYXRpbmcoKSB7IHJldHVy
biBzX2FuaW1hdGluZzsgfQorICAgIHZvaWQgc2V0QW5pbWF0aW5nKGJvb2wgYW5pbWF0aW5nKSB7
IHNfYW5pbWF0aW5nID0gYW5pbWF0aW5nOyB9IC8vIENhbiBiZSByZW1vdmVkIHdoZW4gbm9uLXRo
cmVhZGVkIHNjaGVkdWxpbmcgbW92ZXMgaW5zaWRlLgogCiAgICAgQ0NMYXllclRyZWVIb3N0Q2xp
ZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCkBAIC0xNjUsMTUgKzE2NSwxNiBA
QCBwcml2YXRlOgogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IExh
eWVyTGlzdDsKIAogICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYp
OworICAgIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoTGF5ZXJDaHJvbWl1bSosIGNvbnN0IElu
dFJlY3QmIHZpc2libGVMYXllclJlY3QpOwogICAgIHZvaWQgdXBkYXRlTGF5ZXJzKExheWVyQ2hy
b21pdW0qKTsKICAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29uc3QgTGF5ZXJM
aXN0JiwgR3JhcGhpY3NDb250ZXh0M0QqKTsKICAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMoTGF5ZXJDaHJvbWl1bSosIEdyYXBoaWNzQ29udGV4dDNEKik7CiAKLSAgICB2b2lkIGNs
ZWFyUmVuZGVyU3VyZmFjZXNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSopOworICAgIHZvaWQgY2xl
YXJTdHVmZlJlY3Vyc2l2ZShMYXllckNocm9taXVtKik7CiAKICAgICBib29sIGluaXRpYWxpemUo
KTsKIAotICAgIGJvb2wgbV9hbmltYXRpbmc7CisgICAgc3RhdGljIGJvb2wgc19hbmltYXRpbmc7
CiAKICAgICBDQ0xheWVyVHJlZUhvc3RDbGllbnQqIG1fY2xpZW50OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IGIzMDQ4MzY4ZGFhMjA3NmZhNDlkYmExNGJi
OWM5MzY5OGI2NzZlMWQuLjQ2N2QwZDgyZWQ2MzkyZWFjZDQ4ZGQ5ODJmNGQzZGUzZmQ5MTM5YjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0xMjEsOCArMTIx
LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkK
IAogYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjppbml0aWFsaXplTGF5ZXJSZW5kZXJlcihQYXNz
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQogewotICAgIE93blB0cjxMYXllclJl
bmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXI7Ci0gICAgbGF5ZXJSZW5kZXJlciA9IExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIGNvbnRleHQpOworICAgIE93blB0cjxMYXll
clJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmNyZWF0ZSh0aGlzLCBjb250ZXh0KTsKIAogICAgIC8vIElmIGNyZWF0aW9uIGZhaWxlZCwgYW5k
IHdlIGhhZCBhc2tlZCBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcsIGRpc2FibGUgYWNjZWxlcmF0
ZWQgcGFpbnRpbmcKICAgICAvLyBhbmQgdHJ5IGNyZWF0aW5nIHRoZSByZW5kZXJlciBhZ2Fpbi4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggN2E3N2VkMDZhNTEyMjNlMzJiNDc4MTY4ZGI3
NzNiNmUyZTBmZWRlNC4uMjNmNjEwNzc0NGI0YzIyOTQ2YTU0NDczOTI0N2VlZjdhMmE5MzI5ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMS0wOS0xNCAg
SmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1
bV0gQ0NMYXllclRyZWVIb3N0IHNob3VsZG4ndCBiZSBSZWZDb3VudGVkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODEzNQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3JjL1dlYk1lZGlhUGxheWVyQ2xp
ZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbDo6
fldlYk1lZGlhUGxheWVyQ2xpZW50SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYk1lZGlhUGxh
eWVyQ2xpZW50SW1wbDo6cmVhZHlTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJN
ZWRpYVBsYXllckNsaWVudEltcGw6OnJlcGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRp
YVBsYXllckNsaWVudEltcGw6OmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJNZWRpYVBsYXll
ckNsaWVudEltcGw6OmFjY2VsZXJhdGVkUmVuZGVyaW5nSW5Vc2UpOgorICAgICAgICAqIHNyYy9X
ZWJWaWV3SW1wbC5oOgorCiAyMDExLTA5LTE0ICBOZWJvanNhIENpcmljICA8Y2lyYUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgQ2hhbmdlZCBXZWJLaXQuZ3lwIHRvIHVzZSB0aGUgbmV3IGdyaXQg
dmVyc2lvbiBvZiB0aGUgc2NyaXB0cyB0aGF0IGhhbmRsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1lZGlhUGxheWVyQ2xpZW50SW1wbC5jcHAKaW5kZXggY2U1
MWFmY2I1ZGJhZjljNjU0NjdjMmI3NTAyMzRkZjIzMmFmMWI4Yi4uM2ZhY2NlMjgzYjM1MDU4ZDFj
NzMxYmI2NGUxOGYxZDExNTQxNzJhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuY3BwCkBAIC0xMDMsNyArMTAzLDcg
QEAgV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjp+V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsKCkK
ICAgICAvLyBWaWRlb0xheWVyQ2hyb21pdW0gbWF5IG91dGxpdmUgdGhpcyBvYmplY3Qgc28gbWFr
ZSBzdXJlIGFsbCBmcmFtZXMgYXJlCiAgICAgLy8gcmVsZWFzZWQuCiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQotICAgIGlmIChtX3ZpZGVvTGF5ZXIuZ2V0KCkpCisgICAgaWYgKG1f
dmlkZW9MYXllcikKICAgICAgICAgbV92aWRlb0xheWVyLT5yZWxlYXNlQ3VycmVudEZyYW1lKCk7
CiAjZW5kaWYKIH0KQEAgLTExOSw3ICsxMTksNyBAQCB2b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50
SW1wbDo6cmVhZHlTdGF0ZUNoYW5nZWQoKQogICAgIEFTU0VSVChtX21lZGlhUGxheWVyKTsKICAg
ICBtX21lZGlhUGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOwogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKLSAgICBpZiAoaGFzVmlkZW8oKSAmJiBzdXBwb3J0c0FjY2VsZXJhdGVk
UmVuZGVyaW5nKCkgJiYgIW1fdmlkZW9MYXllci5nZXQoKSkKKyAgICBpZiAoaGFzVmlkZW8oKSAm
JiBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkgJiYgIW1fdmlkZW9MYXllcikKICAgICAg
ICAgbV92aWRlb0xheWVyID0gVmlkZW9MYXllckNocm9taXVtOjpjcmVhdGUoMCwgdGhpcyk7CiAj
ZW5kaWYKIH0KQEAgLTE0Niw3ICsxNDYsNyBAQCB2b2lkIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1w
bDo6cmVwYWludCgpCiB7CiAgICAgQVNTRVJUKG1fbWVkaWFQbGF5ZXIpOwogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAobV92aWRlb0xheWVyLmdldCgpICYmIHN1cHBv
cnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSkKKyAgICBpZiAobV92aWRlb0xheWVyICYmIHN1cHBv
cnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSkKICAgICAgICAgbV92aWRlb0xheWVyLT5zZXROZWVk
c0Rpc3BsYXkoSW50UmVjdCgwLCAwLCBtX3ZpZGVvTGF5ZXItPmJvdW5kcygpLndpZHRoKCksIG1f
dmlkZW9MYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkpKTsKICNlbmRpZgogICAgIG1fbWVkaWFQbGF5
ZXItPnJlcGFpbnQoKTsKQEAgLTIyMyw3ICsyMjMsNyBAQCB2b2lkIFdlYk1lZGlhUGxheWVyQ2xp
ZW50SW1wbDo6bG9hZChjb25zdCBTdHJpbmcmIHVybCkKICAgICAvLyBWaWRlbyBmcmFtZSBvYmpl
Y3QgaXMgb3duZWQgYnkgV2ViTWVkaWFQbGF5ZXIuIEJlZm9yZSBkZXN0cm95aW5nCiAgICAgLy8g
V2ViTWVkaWFQbGF5ZXIgYWxsIGZyYW1lcyBuZWVkIHRvIGJlIHJlbGVhc2VkLgogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAobV92aWRlb0xheWVyLmdldCgpKQorICAg
IGlmIChtX3ZpZGVvTGF5ZXIpCiAgICAgICAgIG1fdmlkZW9MYXllci0+cmVsZWFzZUN1cnJlbnRG
cmFtZSgpOwogI2VuZGlmCiAKQEAgLTU3Miw3ICs1NzIsNyBAQCBib29sIFdlYk1lZGlhUGxheWVy
Q2xpZW50SW1wbDo6c3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNvbnN0CiAKIGJvb2wg
V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjphY2NlbGVyYXRlZFJlbmRlcmluZ0luVXNlKCkKIHsK
LSAgICByZXR1cm4gbV92aWRlb0xheWVyLmdldCgpICYmIG1fdmlkZW9MYXllci0+bGF5ZXJUcmVl
SG9zdCgpOworICAgIHJldHVybiBtX3ZpZGVvTGF5ZXI7CiB9CiAKIFZpZGVvRnJhbWVDaHJvbWl1
bSogV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsOjpnZXRDdXJyZW50RnJhbWUoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggZmE1YWViODFjMDIxOTkxNjRiYThl
MDk5YzI0MGI3OWU5ZjhiM2I2Yi4uMjkyNmFmOWJkY2QzNzY1ZTNlNGMxOWJlNWUyNmExNGQ2MzUx
NGY2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC01NzIs
NyArNTcyLDcgQEAgcHJpdmF0ZToKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
ICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fcm9vdExheWVyU2Nyb2xsRGFtYWdlOwotICAgIFJlZlB0
cjxXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q+IG1fbGF5ZXJUcmVlSG9zdDsKKyAgICBPd25QdHI8
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0PiBtX2xheWVyVHJlZUhvc3Q7CiAgICAgV2ViQ29yZTo6
R3JhcGhpY3NMYXllciogbV9yb290R3JhcGhpY3NMYXllcjsKICAgICBib29sIG1faXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQWN0aXZlOwogICAgIGJvb2wgbV9jb21wb3NpdG9yQ3JlYXRpb25GYWls
ZWQ7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>