<?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>200626</bug_id>
          
          <creation_ts>2019-08-12 05:57:37 -0700</creation_ts>
          <short_desc>[GL][GStreamer] Instantiate GstGLContext when the shared GLContext is created</short_desc>
          <delta_ts>2020-02-26 04:36:15 -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>Media</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Víctor M. Jáquez L.">vjaquez</reporter>
          <assigned_to name="Víctor M. Jáquez L.">vjaquez</assigned_to>
          <cc>annulen</cc>
    
    <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>cturner</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1560383</commentid>
    <comment_count>0</comment_count>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2019-08-12 05:57:37 -0700</bug_when>
    <thetext>Currently one GstGLContext is created per video tag, and (as in https://bugs.webkit.org/show_bug.cgi?id=196966 ) it has to make current the shared context, which may add processing.

A better approach would be to create one GstGLContext when the GLContext is created and current, and when a video media element created, the created GstGLContext increases its reference count and passed to the GStreamer pipeline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593700</commentid>
    <comment_count>1</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-11-26 10:05:01 -0800</bug_when>
    <thetext>The GLVideoSink added in Bug 204624 could have a &quot;context&quot; property, similarly to glimagesink. The player could set that property.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614535</commentid>
    <comment_count>2</comment_count>
      <attachid>389659</attachid>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2020-02-04 07:59:05 -0800</bug_when>
    <thetext>Created attachment 389659
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614544</commentid>
    <comment_count>3</comment_count>
      <attachid>389659</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2020-02-04 08:11:51 -0800</bug_when>
    <thetext>Comment on attachment 389659
WIP Patch

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        keep the wrapper, so it won&apos;t need to be recreated every time is

every time *it* is

&gt; Source/WebCore/ChangeLog:16
&gt; +        instantianted and associated to the GL context when probing the

instantiated

&gt; Source/WebCore/ChangeLog:21
&gt; +        Finally, the wrapper class is retrieved through GLContext and
&gt; +        retrieve the GstGLDisplay and the GstGLContext associated to store
&gt; +        them as private variables for the video sink.

This could be reworded to avoid too many &quot;and&quot; and &quot;retrieve&quot;.

&gt; Source/WebCore/ChangeLog:36
&gt; +        implemenation for WrappedGLContext.

implementation

&gt; Source/WebCore/ChangeLog:37
&gt; +        (webKitGLVideoSinkProbePlatform): instianciates

instantiates

&gt; Source/WebCore/ChangeLog:38
&gt; +        GstWarpperGLContext given the platform&apos;s shared context.

GstWrappedGLContext

&gt; Source/WebCore/platform/graphics/GLContext.h:91
&gt; +    WrappedGLContext *wrappedGLContext() const { return m_wrappedGlContext.get(); }

Could this return a WrappedGLContext&amp; instead of a pointer?

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:66
&gt; +    GRefPtr&lt;GstGLContext&gt; Context() { return m_glContext.get(); }
&gt; +    GRefPtr&lt;GstGLDisplay&gt; Display() { return m_glDisplay.get(); }

Method names should start with a lowercase letter. Seems like these two should be const as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614958</commentid>
    <comment_count>4</comment_count>
      <attachid>389659</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-02-05 00:08:34 -0800</bug_when>
    <thetext>Comment on attachment 389659
WIP Patch

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

&gt; Source/WebCore/ChangeLog:22
&gt; +

This explains how, but I miss a why. What is this fixing?

&gt; Source/WebCore/platform/graphics/GLContext.h:90
&gt; +    void setWrappedGLContext(std::unique_ptr&lt;WrappedGLContext&gt; wrappedContext) { m_wrappedGlContext = WTFMove(wrappedContext); };

I&apos;m not sure what wrapped actually means here. Is it like a sub-context? or associated context? It seems we are setting it here only to sync the lifetime of the gst gl context to the GLContext one. Maybe an observer approach makes more sense?

&gt;&gt; Source/WebCore/platform/graphics/GLContext.h:91
&gt;&gt; +    WrappedGLContext *wrappedGLContext() const { return m_wrappedGlContext.get(); }
&gt; 
&gt; Could this return a WrappedGLContext&amp; instead of a pointer?

I guess it can be nullptr if called before setWrappedGLContext. 

WrappedGLContext * -&gt; WrappedGLContext*

&gt; Source/WebCore/platform/graphics/GLContext.h:105
&gt; +    std::unique_ptr&lt;WrappedGLContext&gt; m_wrappedGlContext { nullptr };

std::unique_ptr already initializes the pointer to nullptr on construction.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:66
&gt;&gt; +    GRefPtr&lt;GstGLDisplay&gt; Display() { return m_glDisplay.get(); }
&gt; 
&gt; Method names should start with a lowercase letter. Seems like these two should be const as well?

Do we really want to return GRefPtr? In that case we don&apos;t need the .get() and it can probably return a ref instead of a copy.

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:162
&gt;      GLContext* sharedContext = sharedDisplay.sharingGLContext();

It seems sharedDisplay is only used here now, we can just GLContext* sharedContext = PlatformDisplay::sharedDisplayForCompositing().sharingGLContext();

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:169
&gt; +    auto wrappedGLContext = sharedContext-&gt;wrappedGLContext();

auto*

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:379
&gt; +    assert(contextHandle);

ASSERT

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:412
&gt; +    if (!sharedContext-&gt;wrappedGLContext()) {
&gt; +        std::unique_ptr&lt;GLContext::WrappedGLContext&gt; wrappedGlContext = makeUnique&lt;GstWrappedGLContext&gt;(sharedDisplay, sharedContext);
&gt; +        sharedContext-&gt;setWrappedGLContext(WTFMove(wrappedGlContext));
&gt; +    }

Shouldn&apos;t we do this only if isGStreamerPluginAvailable(&quot;opengl&quot;)?

You can do:

sharedContext-&gt;setWrappedGLContext(makeUnique&lt;GstWrappedGLContext&gt;(sharedDisplay, sharedContext));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1615006</commentid>
    <comment_count>5</comment_count>
      <attachid>389793</attachid>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2020-02-05 04:41:16 -0800</bug_when>
    <thetext>Created attachment 389793
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1615007</commentid>
    <comment_count>6</comment_count>
      <attachid>389794</attachid>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2020-02-05 04:46:12 -0800</bug_when>
    <thetext>Created attachment 389794
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1615008</commentid>
    <comment_count>7</comment_count>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2020-02-05 04:47:07 -0800</bug_when>
    <thetext>(In reply to Philippe Normand from comment #3)
&gt; Comment on attachment 389659 [details]
&gt; WIP Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=389659&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; +        keep the wrapper, so it won&apos;t need to be recreated every time is
&gt; 
&gt; every time *it* is

Done

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:16
&gt; &gt; +        instantianted and associated to the GL context when probing the
&gt; 
&gt; instantiated

Done

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:21
&gt; &gt; +        Finally, the wrapper class is retrieved through GLContext and
&gt; &gt; +        retrieve the GstGLDisplay and the GstGLContext associated to store
&gt; &gt; +        them as private variables for the video sink.
&gt; 
&gt; This could be reworded to avoid too many &quot;and&quot; and &quot;retrieve&quot;.

Done. I hope it&apos;s better now.

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:36
&gt; &gt; +        implemenation for WrappedGLContext.
&gt; 
&gt; implementation

Done

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:37
&gt; &gt; +        (webKitGLVideoSinkProbePlatform): instianciates
&gt; 
&gt; instantiates

Done 

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:38
&gt; &gt; +        GstWarpperGLContext given the platform&apos;s shared context.
&gt; 
&gt; GstWrappedGLContext
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GLContext.h:91
&gt; &gt; +    WrappedGLContext *wrappedGLContext() const { return m_wrappedGlContext.get(); }
&gt; 
&gt; Could this return a WrappedGLContext&amp; instead of a pointer?

As Carlos said, it can be nullptr before setting it.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:66
&gt; &gt; +    GRefPtr&lt;GstGLContext&gt; Context() { return m_glContext.get(); }
&gt; &gt; +    GRefPtr&lt;GstGLDisplay&gt; Display() { return m_glDisplay.get(); }
&gt; 
&gt; Method names should start with a lowercase letter. Seems like these two
&gt; should be const as well?

Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1615009</commentid>
    <comment_count>8</comment_count>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2020-02-05 04:52:45 -0800</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #4)
&gt; Comment on attachment 389659 [details]
&gt; WIP Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=389659&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:22
&gt; &gt; +
&gt; 
&gt; This explains how, but I miss a why. What is this fixing?

Done.


&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GLContext.h:90
&gt; &gt; +    void setWrappedGLContext(std::unique_ptr&lt;WrappedGLContext&gt; wrappedContext) { m_wrappedGlContext = WTFMove(wrappedContext); };
&gt; 
&gt; I&apos;m not sure what wrapped actually means here. Is it like a sub-context? or
&gt; associated context? It seems we are setting it here only to sync the
&gt; lifetime of the gst gl context to the GLContext one. Maybe an observer
&gt; approach makes more sense?

GstGLContext can be created from an existing GLContext, which is what we do. Thus, it can be viewed as a wrapper.

And yes, the purpose is to sync the life time of the GstGLContext with GLContext, to avoid creating a GstGLContext every time a new video is rendered.

AFAIU it is like already as an observer pattern.

&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/GLContext.h:91
&gt; &gt;&gt; +    WrappedGLContext *wrappedGLContext() const { return m_wrappedGlContext.get(); }
&gt; &gt; 
&gt; &gt; Could this return a WrappedGLContext&amp; instead of a pointer?
&gt; 
&gt; I guess it can be nullptr if called before setWrappedGLContext. 
&gt; 
&gt; WrappedGLContext * -&gt; WrappedGLContext*
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GLContext.h:105
&gt; &gt; +    std::unique_ptr&lt;WrappedGLContext&gt; m_wrappedGlContext { nullptr };
&gt; 
&gt; std::unique_ptr already initializes the pointer to nullptr on construction.

Done

&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:66
&gt; &gt;&gt; +    GRefPtr&lt;GstGLDisplay&gt; Display() { return m_glDisplay.get(); }
&gt; &gt; 
&gt; &gt; Method names should start with a lowercase letter. Seems like these two should be const as well?

Done

&gt; 
&gt; Do we really want to return GRefPtr? In that case we don&apos;t need the .get()
&gt; and it can probably return a ref instead of a copy.

I have a hard time thinking in terms of GRefPtr. I hope it is correct now.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:162
&gt; &gt;      GLContext* sharedContext = sharedDisplay.sharingGLContext();
&gt; 
&gt; It seems sharedDisplay is only used here now, we can just GLContext*
&gt; sharedContext =
&gt; PlatformDisplay::sharedDisplayForCompositing().sharingGLContext();

Nope, the display is also needed :)

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:169
&gt; &gt; +    auto wrappedGLContext = sharedContext-&gt;wrappedGLContext();
&gt; 
&gt; auto*


Done

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:379
&gt; &gt; +    assert(contextHandle);
&gt; 
&gt; ASSERT

Done

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:412
&gt; &gt; +    if (!sharedContext-&gt;wrappedGLContext()) {
&gt; &gt; +        std::unique_ptr&lt;GLContext::WrappedGLContext&gt; wrappedGlContext = makeUnique&lt;GstWrappedGLContext&gt;(sharedDisplay, sharedContext);
&gt; &gt; +        sharedContext-&gt;setWrappedGLContext(WTFMove(wrappedGlContext));
&gt; &gt; +    }
&gt; 
&gt; Shouldn&apos;t we do this only if isGStreamerPluginAvailable(&quot;opengl&quot;)?

Done

&gt; 
&gt; You can do:
&gt; 
&gt; sharedContext-
&gt; &gt;setWrappedGLContext(makeUnique&lt;GstWrappedGLContext&gt;(sharedDisplay,
&gt; sharedContext));

Done

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1616965</commentid>
    <comment_count>9</comment_count>
      <attachid>389794</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2020-02-10 10:55:17 -0800</bug_when>
    <thetext>Comment on attachment 389794
Patch

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

Nice fix Victor!

&gt; Source/WebCore/platform/graphics/GLContext.h:90
&gt; +    void setWrappedGLContext(std::unique_ptr&lt;WrappedGLContext&gt; wrappedContext) { m_wrappedGlContext = WTFMove(wrappedContext); };

Nit, it seems more natural to have setWrappedGLContext take the wrappedContext by &amp;&amp; here. If you change the callsite to something that isn&apos;t an rv, it will error out on unique_ptr(unique_ptr&amp;) being deleted. Also makes clear it is taking ownership. Note that currently you get away with the by-val parameter due to implicit move construction.

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:-157
&gt; -        if (is&lt;PlatformDisplayX11&gt;(sharedDisplay)) {

It looks weird to me that PlatformDisplayX11, PlatformDisplayWayland, etc don&apos;t all have a polymorphic getDisplay() that returns the appropriate glDisplay value. Don&apos;t want to cause another iteration for this, but maybe a FIXME if you agree and I haven&apos;t just misunderstood the wider context of this code.

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:171
&gt; +        GST_ELEMENT_ERROR(GST_ELEMENT_CAST(sink), RESOURCE, NOT_FOUND, ((&quot;WebKit shared GL wrapperd context unavailable&quot;)),

s/wrapperd/wrapped/

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:172
&gt; +            (&quot;The WebKit shared GL wrapped context somehow disappeared. Video textures rendering will fail.&quot;));

Video *texture* rendering will fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617445</commentid>
    <comment_count>10</comment_count>
      <attachid>390380</attachid>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2020-02-11 09:56:03 -0800</bug_when>
    <thetext>Created attachment 390380
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617456</commentid>
    <comment_count>11</comment_count>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2020-02-11 10:06:29 -0800</bug_when>
    <thetext>(In reply to Charlie Turner from comment #9)
&gt; Comment on attachment 389794 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=389794&amp;action=review
&gt; 
&gt; Nice fix Victor!

Thanks!

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GLContext.h:90
&gt; &gt; +    void setWrappedGLContext(std::unique_ptr&lt;WrappedGLContext&gt; wrappedContext) { m_wrappedGlContext = WTFMove(wrappedContext); };
&gt; 
&gt; Nit, it seems more natural to have setWrappedGLContext take the
&gt; wrappedContext by &amp;&amp; here. If you change the callsite to something that
&gt; isn&apos;t an rv, it will error out on unique_ptr(unique_ptr&amp;) being deleted.
&gt; Also makes clear it is taking ownership. Note that currently you get away
&gt; with the by-val parameter due to implicit move construction.

As not always a wrapper is going to be attached to the GLContext we need something that can be nullptr, in other words a pointer, not a reference :(

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:-157
&gt; &gt; -        if (is&lt;PlatformDisplayX11&gt;(sharedDisplay)) {
&gt; 
&gt; It looks weird to me that PlatformDisplayX11, PlatformDisplayWayland, etc
&gt; don&apos;t all have a polymorphic getDisplay() that returns the appropriate
&gt; glDisplay value. Don&apos;t want to cause another iteration for this, but maybe a
&gt; FIXME if you agree and I haven&apos;t just misunderstood the wider context of
&gt; this code.

Yeah, that belongs to another issue :)

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:171
&gt; &gt; +        GST_ELEMENT_ERROR(GST_ELEMENT_CAST(sink), RESOURCE, NOT_FOUND, ((&quot;WebKit shared GL wrapperd context unavailable&quot;)),
&gt; 
&gt; s/wrapperd/wrapped/

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:172
&gt; &gt; +            (&quot;The WebKit shared GL wrapped context somehow disappeared. Video textures rendering will fail.&quot;));
&gt; 
&gt; Video *texture* rendering will fail.

Done.

Also renamed setWrapperGLContext to addWrapperGLContext to follow the observer kind of API and also added a (currently noop) didDestroyContext called at GLContext destructor (before the leaf classes destructors)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617898</commentid>
    <comment_count>12</comment_count>
      <attachid>390380</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-02-12 01:36:48 -0800</bug_when>
    <thetext>Comment on attachment 390380
Patch

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

&gt; Source/WebCore/platform/graphics/GLContext.cpp:139
&gt; +    if (m_wrappedGlContext.get())
&gt; +        m_wrappedGlContext-&gt;didDestroyGLContext();

The idea of using this observer pattern was to avoid making the GLContext handle the lifetime of the gst context. The observer gets notified that the GL context is destroyed and it destroys the gst context.

&gt; Source/WebCore/platform/graphics/GLContext.h:92
&gt; +    void addWrappedGLContext(std::unique_ptr&lt;WrappedGLContext&gt; wrappedContext) { m_wrappedGlContext = WTFMove(wrappedContext); };
&gt; +    WrappedGLContext* wrappedGLContext() const { return m_wrappedGlContext.get(); }

So, this makes it possible to have a wrapped context for every GLContext, but what we really want here is a sharingGstGLContext() right? In that case, maybe it&apos;s easier to add PlatformDisplay::sharingGstGLContext()

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:65
&gt; +    void didDestroyGLContext() override { };

This is pointless if the impl does nothing.

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:70
&gt; +    GRefPtr&lt;GstGLDisplay&gt; m_glDisplay;

If we move it to PlastrformDisplay we would also need to add ::sharingGstGLDisplay().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617908</commentid>
    <comment_count>13</comment_count>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2020-02-12 02:23:19 -0800</bug_when>
    <thetext>Hi Carlos,

Thanks for you review :)

(In reply to Carlos Garcia Campos from comment #12)
&gt; Comment on attachment 390380 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=390380&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GLContext.cpp:139
&gt; &gt; +    if (m_wrappedGlContext.get())
&gt; &gt; +        m_wrappedGlContext-&gt;didDestroyGLContext();
&gt; 
&gt; The idea of using this observer pattern was to avoid making the GLContext
&gt; handle the lifetime of the gst context. The observer gets notified that the
&gt; GL context is destroyed and it destroys the gst context.

But the purpose of the patch is to delegate gst context lifetime to GLContext, since it is a wrapper of it. If the gl context is destroyed, then the gst context one has to be destroyed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GLContext.h:92
&gt; &gt; +    void addWrappedGLContext(std::unique_ptr&lt;WrappedGLContext&gt; wrappedContext) { m_wrappedGlContext = WTFMove(wrappedContext); };
&gt; &gt; +    WrappedGLContext* wrappedGLContext() const { return m_wrappedGlContext.get(); }
&gt; 
&gt; So, this makes it possible to have a wrapped context for every GLContext,
&gt; but what we really want here is a sharingGstGLContext() right? In that case,
&gt; maybe it&apos;s easier to add PlatformDisplay::sharingGstGLContext()

That wouldn&apos;t be an API breakage, adding a very specific context implementation??

That sharingGstGLContext has to be created from a sharingGLContext.

Perhaps this need a better explanation:

GStreamer GL creates its own internal GL context used to hold its own textures, framebuffers, etc. If we want to share these objects with other GL context (the one used by the application to render stuff) we have to tell GStreamerGL that its internal GL Context that its objects are going to be shared with another GL context.

In order to pass this application GL Context with GStreamerGL it is required to wrap it as a GstGLContext, and its lifetime is handled by the GL Context itself.

Right now, a GstGLContext is created every time a video tag is instantiated. This is expensive and requires the GL Context to be current in order to fill GstGLContext internal structure. And it is destroyed when the video tag is destroyed.

This is not efficient. It&apos;s preferable to have a singleton GstGLContext, which is a Wrapper of the application GL Context, and reuse it for all the video tags.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:65
&gt; &gt; +    void didDestroyGLContext() override { };
&gt; 
&gt; This is pointless if the impl does nothing.

Indeed. Sorry.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:70
&gt; &gt; +    GRefPtr&lt;GstGLDisplay&gt; m_glDisplay;
&gt; 
&gt; If we move it to PlastrformDisplay we would also need to add
&gt; ::sharingGstGLDisplay().

I&apos;m not sure to follow this comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617917</commentid>
    <comment_count>14</comment_count>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2020-02-12 02:57:58 -0800</bug_when>
    <thetext>By the way, instead of using std::unique_ptr I&apos;m going to explore using std::optional, as in Rust :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1617934</commentid>
    <comment_count>15</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-02-12 04:31:57 -0800</bug_when>
    <thetext>(In reply to Víctor M. Jáquez L. from comment #13)
&gt; Hi Carlos,
&gt; 
&gt; Thanks for you review :)
&gt; 
&gt; (In reply to Carlos Garcia Campos from comment #12)
&gt; &gt; Comment on attachment 390380 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=390380&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/GLContext.cpp:139
&gt; &gt; &gt; +    if (m_wrappedGlContext.get())
&gt; &gt; &gt; +        m_wrappedGlContext-&gt;didDestroyGLContext();
&gt; &gt; 
&gt; &gt; The idea of using this observer pattern was to avoid making the GLContext
&gt; &gt; handle the lifetime of the gst context. The observer gets notified that the
&gt; &gt; GL context is destroyed and it destroys the gst context.
&gt; 
&gt; But the purpose of the patch is to delegate gst context lifetime to
&gt; GLContext, since it is a wrapper of it. If the gl context is destroyed, then
&gt; the gst context one has to be destroyed.

PlatformDisplay is the owner of the sharing GL context, so it can be the owner of the GstGLContext as well. 

&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/GLContext.h:92
&gt; &gt; &gt; +    void addWrappedGLContext(std::unique_ptr&lt;WrappedGLContext&gt; wrappedContext) { m_wrappedGlContext = WTFMove(wrappedContext); };
&gt; &gt; &gt; +    WrappedGLContext* wrappedGLContext() const { return m_wrappedGlContext.get(); }
&gt; &gt; 
&gt; &gt; So, this makes it possible to have a wrapped context for every GLContext,
&gt; &gt; but what we really want here is a sharingGstGLContext() right? In that case,
&gt; &gt; maybe it&apos;s easier to add PlatformDisplay::sharingGstGLContext()
&gt; 
&gt; That wouldn&apos;t be an API breakage, adding a very specific context
&gt; implementation??

I don&apos;t see why. There&apos;s also eglDisplay handled by PlatformDisplay.

&gt; That sharingGstGLContext has to be created from a sharingGLContext.
&gt; 
&gt; Perhaps this need a better explanation:
&gt; 
&gt; GStreamer GL creates its own internal GL context used to hold its own
&gt; textures, framebuffers, etc. If we want to share these objects with other GL
&gt; context (the one used by the application to render stuff) we have to tell
&gt; GStreamerGL that its internal GL Context that its objects are going to be
&gt; shared with another GL context.
&gt; 
&gt; In order to pass this application GL Context with GStreamerGL it is required
&gt; to wrap it as a GstGLContext, and its lifetime is handled by the GL Context
&gt; itself.
&gt; 
&gt; Right now, a GstGLContext is created every time a video tag is instantiated.
&gt; This is expensive and requires the GL Context to be current in order to fill
&gt; GstGLContext internal structure. And it is destroyed when the video tag is
&gt; destroyed.
&gt; 
&gt; This is not efficient. It&apos;s preferable to have a singleton GstGLContext,
&gt; which is a Wrapper of the application GL Context, and reuse it for all the
&gt; video tags.

I understand, that&apos;s why I think PlatformDisplay would be a good plance, it already provides the singleton we want now.

&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:65
&gt; &gt; &gt; +    void didDestroyGLContext() override { };
&gt; &gt; 
&gt; &gt; This is pointless if the impl does nothing.
&gt; 
&gt; Indeed. Sorry.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:70
&gt; &gt; &gt; +    GRefPtr&lt;GstGLDisplay&gt; m_glDisplay;
&gt; &gt; 
&gt; &gt; If we move it to PlastrformDisplay we would also need to add
&gt; &gt; ::sharingGstGLDisplay().
&gt; 
&gt; I&apos;m not sure to follow this comment.

We would add PlatformDisplay::sharingGstGLContext() and PlatformDisplay::sharingGstGLDisplay()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620139</commentid>
    <comment_count>16</comment_count>
      <attachid>391045</attachid>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2020-02-18 08:03:28 -0800</bug_when>
    <thetext>Created attachment 391045
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620140</commentid>
    <comment_count>17</comment_count>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2020-02-18 08:05:26 -0800</bug_when>
    <thetext>Ready another round for review :)

It&apos;s a complete overhaul of the previous patches following Carlos suggestions in https://bugs.webkit.org/show_bug.cgi?id=200626#c15

Now there&apos;s a new class GLContextGStreamer, created and handled by PlatformDisplay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620171</commentid>
    <comment_count>18</comment_count>
      <attachid>391054</attachid>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2020-02-18 09:08:00 -0800</bug_when>
    <thetext>Created attachment 391054
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620574</commentid>
    <comment_count>19</comment_count>
      <attachid>391054</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-02-19 01:39:43 -0800</bug_when>
    <thetext>Comment on attachment 391054
Patch

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

&gt; Source/WebCore/ChangeLog:23
&gt; +        GLContextGStreamer is class instantiated as singleton by
&gt; +        PlatformDisplay. When the media player request for the
&gt; +        GLContextGStreamer a GL context is created, if it wasn&apos;t before,
&gt; +        and wraps it. The class has two getters, one for GstGLContext
&gt; +        object, and other for GstGLDisplay. Both are used to configure the
&gt; +        internal GStreamer GL context in the multimedia pipeline.

This is indeed simpler, but I don&apos;t think we need another class, because PlatformDisplay is already a singleton, we can simploy add two new methods: PlatformDisplay::sharingGstGLContext() and PlatformDisplay::sharingGstGLDisplay() as I suggested before.

&gt; Source/WebCore/platform/graphics/PlatformDisplay.cpp:262
&gt; +GLContextGStreamer* PlatformDisplay::glGstreamerContext()
&gt; +{
&gt; +    if (!m_gstGLContext)
&gt; +        m_gstGLContext = GLContextGStreamer::create();
&gt; +    return m_gstGLContext.get();
&gt; +}

So, instead of this we could get direct getters for the gst context and display. We would need a private method to initialize the gst wrappers, something like tryEnsureGstGLContext(), called from both getters.

&gt; Source/WebCore/platform/graphics/PlatformDisplay.cpp:265
&gt; +

You should also destroy the gst wrappers in PlatformDisplay::terminateEGLDisplay(), before m_sharingGLContext = nullptr;

&gt; Source/WebCore/platform/graphics/PlatformDisplay.h:40
&gt; +class GLDisplayGStreamer;

This doesn&apos;t exist, right?

&gt; Source/WebCore/platform/graphics/gstreamer/GLContextGStreamer.cpp:19
&gt; +

I would move this to a a file Source/WebCore/platform/graphics/gstreamer/PlatformDisplayGStreamer.cpp

&gt; Source/WebCore/platform/graphics/gstreamer/GLContextGStreamer.cpp:64
&gt; +GLContextGStreamer::GLContextGStreamer(PlatformDisplay&amp; sharedDisplay, GLContext* sharedContext)

And this would be bool PlatformDisplay::tryEnsureGstGLContext()

&gt; Source/WebCore/platform/graphics/gstreamer/GLContextGStreamer.h:37
&gt; +    GRefPtr&lt;GstGLContext&gt; getContext() { return m_context; }
&gt; +    GRefPtr&lt;GstGLDisplay&gt; getDisplay() { return m_display; }

I think it&apos;s better to return plain pointers for these, the caller doesn&apos;t really need to take a reference.

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:126
&gt; +        gst_context_set_gl_display(displayContext, glGstContext-&gt;getDisplay().get());

The display can be nullptr at this point, no? we returned early before if ensureGstGLContext() failed, but now glGstContext is never nullptr.

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:136
&gt; -        gst_structure_set(structure, &quot;context&quot;, GST_TYPE_GL_CONTEXT, priv-&gt;glContext.get(), nullptr);
&gt; +        gst_structure_set(structure, &quot;context&quot;, GST_TYPE_GL_CONTEXT, glGstContext-&gt;getContext().get(), nullptr);
&gt;  #else
&gt; -        gst_structure_set(structure, &quot;context&quot;, GST_GL_TYPE_CONTEXT, priv-&gt;glContext.get(), nullptr);
&gt; +        gst_structure_set(structure, &quot;context&quot;, GST_GL_TYPE_CONTEXT, glGstContext-&gt;getContext().get(), nullptr);

Same here for the context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620581</commentid>
    <comment_count>20</comment_count>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2020-02-19 02:05:54 -0800</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #19)
&gt; Comment on attachment 391054 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=391054&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:23
&gt; &gt; +        GLContextGStreamer is class instantiated as singleton by
&gt; &gt; +        PlatformDisplay. When the media player request for the
&gt; &gt; +        GLContextGStreamer a GL context is created, if it wasn&apos;t before,
&gt; &gt; +        and wraps it. The class has two getters, one for GstGLContext
&gt; &gt; +        object, and other for GstGLDisplay. Both are used to configure the
&gt; &gt; +        internal GStreamer GL context in the multimedia pipeline.
&gt; 
&gt; This is indeed simpler, but I don&apos;t think we need another class, because
&gt; PlatformDisplay is already a singleton, we can simploy add two new methods:
&gt; PlatformDisplay::sharingGstGLContext() and
&gt; PlatformDisplay::sharingGstGLDisplay() as I suggested before.

I tried that first but it looked bit more complex, since I wanted to keep glContextGStreamer class. But taking it out and implementing tryEnsureGstGLContext() instead, sounds like a simpler approach.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/PlatformDisplay.cpp:262
&gt; &gt; +GLContextGStreamer* PlatformDisplay::glGstreamerContext()
&gt; &gt; +{
&gt; &gt; +    if (!m_gstGLContext)
&gt; &gt; +        m_gstGLContext = GLContextGStreamer::create();
&gt; &gt; +    return m_gstGLContext.get();
&gt; &gt; +}
&gt; 
&gt; So, instead of this we could get direct getters for the gst context and
&gt; display. We would need a private method to initialize the gst wrappers,
&gt; something like tryEnsureGstGLContext(), called from both getters.

Agree.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/PlatformDisplay.cpp:265
&gt; &gt; +
&gt; 
&gt; You should also destroy the gst wrappers in
&gt; PlatformDisplay::terminateEGLDisplay(), before m_sharingGLContext = nullptr;

Nice advice!

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/PlatformDisplay.h:40
&gt; &gt; +class GLDisplayGStreamer;
&gt; 
&gt; This doesn&apos;t exist, right?

Oops... crumbs of the first iteration.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GLContextGStreamer.cpp:19
&gt; &gt; +
&gt; 
&gt; I would move this to a a file
&gt; Source/WebCore/platform/graphics/gstreamer/PlatformDisplayGStreamer.cpp

Ok

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GLContextGStreamer.cpp:64
&gt; &gt; +GLContextGStreamer::GLContextGStreamer(PlatformDisplay&amp; sharedDisplay, GLContext* sharedContext)
&gt; 
&gt; And this would be bool PlatformDisplay::tryEnsureGstGLContext()
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GLContextGStreamer.h:37
&gt; &gt; +    GRefPtr&lt;GstGLContext&gt; getContext() { return m_context; }
&gt; &gt; +    GRefPtr&lt;GstGLDisplay&gt; getDisplay() { return m_display; }
&gt; 
&gt; I think it&apos;s better to return plain pointers for these, the caller doesn&apos;t
&gt; really need to take a reference.

But we need to increase the reference count in order to pass them into GStreamer pipelines.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:126
&gt; &gt; +        gst_context_set_gl_display(displayContext, glGstContext-&gt;getDisplay().get());
&gt; 
&gt; The display can be nullptr at this point, no? we returned early before if
&gt; ensureGstGLContext() failed, but now glGstContext is never nullptr.

AFAIU, it cannot. If glGstContext is instantiated, it should have both gst gl objects. 

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:136
&gt; &gt; -        gst_structure_set(structure, &quot;context&quot;, GST_TYPE_GL_CONTEXT, priv-&gt;glContext.get(), nullptr);
&gt; &gt; +        gst_structure_set(structure, &quot;context&quot;, GST_TYPE_GL_CONTEXT, glGstContext-&gt;getContext().get(), nullptr);
&gt; &gt;  #else
&gt; &gt; -        gst_structure_set(structure, &quot;context&quot;, GST_GL_TYPE_CONTEXT, priv-&gt;glContext.get(), nullptr);
&gt; &gt; +        gst_structure_set(structure, &quot;context&quot;, GST_GL_TYPE_CONTEXT, glGstContext-&gt;getContext().get(), nullptr);
&gt; 
&gt; Same here for the context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620633</commentid>
    <comment_count>21</comment_count>
      <attachid>391054</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-02-19 06:28:55 -0800</bug_when>
    <thetext>Comment on attachment 391054
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GLContextGStreamer.cpp:64
&gt;&gt;&gt; +GLContextGStreamer::GLContextGStreamer(PlatformDisplay&amp; sharedDisplay, GLContext* sharedContext)
&gt;&gt; 
&gt;&gt; And this would be bool PlatformDisplay::tryEnsureGstGLContext()
&gt; 
&gt; But we need to increase the reference count in order to pass them into GStreamer pipelines.

Caller is free to use a GRefPtr

&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:126
&gt;&gt;&gt; +        gst_context_set_gl_display(displayContext, glGstContext-&gt;getDisplay().get());
&gt;&gt; 
&gt;&gt; The display can be nullptr at this point, no? we returned early before if ensureGstGLContext() failed, but now glGstContext is never nullptr.
&gt; 
&gt; AFAIU, it cannot. If glGstContext is instantiated, it should have both gst gl objects.

There&apos;s no null check of glGstContext. Anyway, this won&apos;t be a problem when having direct getters in PlatformDisplay</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622138</commentid>
    <comment_count>22</comment_count>
      <attachid>391535</attachid>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2020-02-24 07:25:11 -0800</bug_when>
    <thetext>Created attachment 391535
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622139</commentid>
    <comment_count>23</comment_count>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2020-02-24 07:28:26 -0800</bug_when>
    <thetext>Another round ready :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622571</commentid>
    <comment_count>24</comment_count>
      <attachid>391535</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-02-25 04:40:26 -0800</bug_when>
    <thetext>Comment on attachment 391535
Patch

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

This is the idea, only a few more details. Thanks!

&gt; Source/WebCore/platform/graphics/PlatformDisplay.cpp:156
&gt; +    destroyGstGLContext();

Use GRefPtr and you don&apos;t need this.

&gt; Source/WebCore/platform/graphics/PlatformDisplay.cpp:235
&gt; +    destroyGstGLContext();

And here you can just set both members  to nullptr.

&gt; Source/WebCore/platform/graphics/PlatformDisplay.h:81
&gt; +    WEBCORE_EXPORT GstGLDisplay* sharingGstGLDisplay();
&gt; +    WEBCORE_EXPORT GstGLContext* sharingGstGLContext();

We don&apos;t use WEBCORE_EXPORT macros. I know I proposed these names before, but now I&apos;ve realized the &quot;sharing&quot; is confusing here. The sharingGLContext is the one use to share GL resources like textures. The GstGL context is the one used by Gst for rendering, so I would remove the sharing prefix. gstGLDisplay() and gstGLContext(). I&apos;m sorry I didn&apos;t realize before. I also think we can make these const by marking the members as mutable.

&gt; Source/WebCore/platform/graphics/PlatformDisplay.h:118
&gt; +    GstGLDisplay* m_gstGLDisplay;
&gt; +    GstGLContext* m_gstGLContext;

GRefPtr

&gt; Source/WebCore/platform/graphics/PlatformDisplay.h:120
&gt; +#else
&gt; +    void destroyGstGLContext() { };

You shouldn&apos;t need this, add #if ENABLE(VIDEO) &amp;&amp; USE(GSTREAMER_GL) guards when accessing the members.

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:124
&gt; +    GRefPtr&lt;GstGLDisplay&gt; sharedGLDisplay = sharedDisplay.sharingGstGLDisplay();
&gt; +    GRefPtr&lt;GstGLContext&gt; sharedGLContext = sharedDisplay.sharingGstGLContext();

Why do we need to take a reference here? Since diaply and context are not expected to be nullptr at this point, add ASSERTS to ensure it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622596</commentid>
    <comment_count>25</comment_count>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2020-02-25 07:38:25 -0800</bug_when>
    <thetext>Thanks again, Carlos. I appreciate your time :)


(In reply to Carlos Garcia Campos from comment #24)
&gt; Comment on attachment 391535 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=391535&amp;action=review
&gt; 
&gt; This is the idea, only a few more details. Thanks!
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/PlatformDisplay.cpp:156
&gt; &gt; +    destroyGstGLContext();
&gt; 
&gt; Use GRefPtr and you don&apos;t need this.

I thought it but I preferred to not to include GRefPtrGStreamer.h 
in platform/graphics. It didn&apos;t look like a good idea to mix it.

Can you confirm me that there&apos;s nothing wrong on it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622597</commentid>
    <comment_count>26</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-02-25 07:40:20 -0800</bug_when>
    <thetext>(In reply to Víctor M. Jáquez L. from comment #25)
&gt; Thanks again, Carlos. I appreciate your time :)
&gt; 
&gt; 
&gt; (In reply to Carlos Garcia Campos from comment #24)
&gt; &gt; Comment on attachment 391535 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=391535&amp;action=review
&gt; &gt; 
&gt; &gt; This is the idea, only a few more details. Thanks!
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/PlatformDisplay.cpp:156
&gt; &gt; &gt; +    destroyGstGLContext();
&gt; &gt; 
&gt; &gt; Use GRefPtr and you don&apos;t need this.
&gt; 
&gt; I thought it but I preferred to not to include GRefPtrGStreamer.h 
&gt; in platform/graphics. It didn&apos;t look like a good idea to mix it.
&gt; 
&gt; Can you confirm me that there&apos;s nothing wrong on it?

There isn&apos;t any problem, it&apos;s all platform layer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622630</commentid>
    <comment_count>27</comment_count>
      <attachid>391657</attachid>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2020-02-25 08:58:25 -0800</bug_when>
    <thetext>Created attachment 391657
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622927</commentid>
    <comment_count>28</comment_count>
      <attachid>391657</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-02-26 00:44:27 -0800</bug_when>
    <thetext>Comment on attachment 391657
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/PlatformDisplayGStreamer.cpp:134
&gt; +    if (!const_cast&lt;PlatformDisplay*&gt;(this)-&gt;tryEnsureGstGLContext())

I had never seen this, I think I prefer to make tryEnsureGstGLContext() const and mark m_gstGLContext and m_gstGLDisplay as mutable, instead of a const cast of this. Unless this is better for whatever reason...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622938</commentid>
    <comment_count>29</comment_count>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2020-02-26 02:01:07 -0800</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #28)
&gt; Comment on attachment 391657 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=391657&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/PlatformDisplayGStreamer.cpp:134
&gt; &gt; +    if (!const_cast&lt;PlatformDisplay*&gt;(this)-&gt;tryEnsureGstGLContext())
&gt; 
&gt; I had never seen this, I think I prefer to make tryEnsureGstGLContext()
&gt; const and mark m_gstGLContext and m_gstGLDisplay as mutable, instead of a
&gt; const cast of this. Unless this is better for whatever reason...

let me try that approach.

I copied it from here https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/platform/graphics/PlatformDisplay.cpp#L179 :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622945</commentid>
    <comment_count>30</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-02-26 02:27:31 -0800</bug_when>
    <thetext>(In reply to Víctor M. Jáquez L. from comment #29)
&gt; (In reply to Carlos Garcia Campos from comment #28)
&gt; &gt; Comment on attachment 391657 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=391657&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/PlatformDisplayGStreamer.cpp:134
&gt; &gt; &gt; +    if (!const_cast&lt;PlatformDisplay*&gt;(this)-&gt;tryEnsureGstGLContext())
&gt; &gt; 
&gt; &gt; I had never seen this, I think I prefer to make tryEnsureGstGLContext()
&gt; &gt; const and mark m_gstGLContext and m_gstGLDisplay as mutable, instead of a
&gt; &gt; const cast of this. Unless this is better for whatever reason...
&gt; 
&gt; let me try that approach.
&gt; 
&gt; I copied it from here
&gt; https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/platform/
&gt; graphics/PlatformDisplay.cpp#L179 :)

That case was tricky because initializeEGLDisplay() is virtual, IIRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622952</commentid>
    <comment_count>31</comment_count>
      <attachid>391733</attachid>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2020-02-26 03:30:48 -0800</bug_when>
    <thetext>Created attachment 391733
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622955</commentid>
    <comment_count>32</comment_count>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2020-02-26 03:42:56 -0800</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #28)
&gt; Comment on attachment 391657 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=391657&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/PlatformDisplayGStreamer.cpp:134
&gt; &gt; +    if (!const_cast&lt;PlatformDisplay*&gt;(this)-&gt;tryEnsureGstGLContext())
&gt; 
&gt; I had never seen this, I think I prefer to make tryEnsureGstGLContext()
&gt; const and mark m_gstGLContext and m_gstGLDisplay as mutable, instead of a
&gt; const cast of this. Unless this is better for whatever reason...

Done! But I still have to call sharingGLContext() in this way since it&apos;s not const, and changing it showed up several compilation errors, so that might have be handled in other patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622960</commentid>
    <comment_count>33</comment_count>
      <attachid>391733</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-26 04:35:17 -0800</bug_when>
    <thetext>Comment on attachment 391733
Patch

Clearing flags on attachment: 391733

Committed r257463: &lt;https://trac.webkit.org/changeset/257463&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622961</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-26 04:35:20 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622962</commentid>
    <comment_count>35</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-02-26 04:36:15 -0800</bug_when>
    <thetext>&lt;rdar://problem/59802076&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389659</attachid>
            <date>2020-02-04 07:59:05 -0800</date>
            <delta_ts>2020-02-05 04:41:12 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-200626-20200204170126.patch</filename>
            <type>text/plain</type>
            <size>13516</size>
            <attacher name="Víctor M. Jáquez L.">vjaquez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1NjY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjZmZmUxMjhjZmMxMTNk
MWRjMGRiNGYxYmU2ZTQ1MDAxOTRlZTU0OS4uODhkYTBiY2M5ZTk2YzI1NmMwYjFmZjM5NDYwNmJj
OThlYmM3YjI2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDIwLTAyLTA0ICBWw61j
dG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgIDx2amFxdWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAg
W0dMXVtHU3RyZWFtZXJdIEluc3RhbnRpYXRlIEdzdEdMQ29udGV4dCB3aGVuIHRoZSBzaGFyZWQg
R0xDb250ZXh0IGlzIGNyZWF0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMDYyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdyYXBwZWRHTENvbnRleHQgYWJzdHJhY3QgY2xhc3MgaXMgYWRkZWQgaW50
bworICAgICAgICBXZWJDb3JlOjpHTENvbnRleHQuIFRoaXMgY2xhc3Mgd2lsbCBzdG9yZSBhbnkg
d3JhcHBlciBvZiB0aGF0IEdMCisgICAgICAgIGNvbnRleHQgYW5kIGlzIGFjY2Vzc2VkIHRocm91
Z2ggYSBzZXR0ZXIvZ2V0dGVyLiBHTENvbnRleHQgd2lsbAorICAgICAgICBrZWVwIHRoZSB3cmFw
cGVyLCBzbyBpdCB3b24ndCBuZWVkIHRvIGJlIHJlY3JlYXRlZCBldmVyeSB0aW1lIGlzCisgICAg
ICAgIHJlcXVpcmVkLgorCisgICAgICAgIFRoaXMgY2xhc3MgaXMgaW1wbGVtZW50ZWQgYXMgR3N0
V3JhcHBlZEdMQ29udGV4dCB3aGljaCBzdG9yZXMgYQorICAgICAgICBHc3RHTENvbnRleHQgd3Jh
cHBpbmcgdGhlIHNoYXJlZCBjb250ZXh0LiBUaGUgd3JhcHBlZCBjb250ZXh0IGlzCisgICAgICAg
IGluc3RhbnRpYW50ZWQgYW5kIGFzc29jaWF0ZWQgdG8gdGhlIEdMIGNvbnRleHQgd2hlbiBwcm9i
aW5nIHRoZQorICAgICAgICBwbGF0Zm9ybS4KKworICAgICAgICBGaW5hbGx5LCB0aGUgd3JhcHBl
ciBjbGFzcyBpcyByZXRyaWV2ZWQgdGhyb3VnaCBHTENvbnRleHQgYW5kCisgICAgICAgIHJldHJp
ZXZlIHRoZSBHc3RHTERpc3BsYXkgYW5kIHRoZSBHc3RHTENvbnRleHQgYXNzb2NpYXRlZCB0byBz
dG9yZQorICAgICAgICB0aGVtIGFzIHByaXZhdGUgdmFyaWFibGVzIGZvciB0aGUgdmlkZW8gc2lu
ay4KKworICAgICAgICBObyBuZXcgdGVzdHMgcmVxdWlyZWQuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HTENvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdMQ29udGV4dDo6c2V0
V3JhcHBlZEdMQ29udGV4dCk6IHNldHRlciBmb3IKKyAgICAgICAgV3JhcHBlZEdMQ29udGV4dC4K
KyAgICAgICAgKFdlYkNvcmU6OkdMQ29udGV4dDo6d3JhcHBlZEdMQ29udGV4dCBjb25zdCk6IGdl
dHRlciBmb3IKKyAgICAgICAgV3JhcHBlZEdMQ29udGV4dC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwOgorICAgICAgICAoR3N0
V3JhcHBlZEdMQ29udGV4dDo6Q29udGV4dCk6IGdldHRlciBmb3IgR3N0R0xDb250ZXh0LgorICAg
ICAgICAoR3N0V3JhcHBlZEdMQ29udGV4dDo6RGlzcGxheSk6IGdldHRlciBmb3IgR3N0R0xEaXNw
bGF5LgorICAgICAgICAoZW5zdXJlR3N0R0xDb250ZXh0KTogcmV0cmlldmVzIGNvbnRleHQgYW5k
IGRpc3BsYXkgZnJvbSBjb250ZXh0CisgICAgICAgIHRvIHZpZGVvIHNpbmsgcHJpdmF0ZSB2YXJp
YWJsZXMuCisgICAgICAgIChHc3RXcmFwcGVkR0xDb250ZXh0OjpHc3RXcmFwcGVkR0xDb250ZXh0
KTogR1N0cmVhbWVyCisgICAgICAgIGltcGxlbWVuYXRpb24gZm9yIFdyYXBwZWRHTENvbnRleHQu
CisgICAgICAgICh3ZWJLaXRHTFZpZGVvU2lua1Byb2JlUGxhdGZvcm0pOiBpbnN0aWFuY2lhdGVz
CisgICAgICAgIEdzdFdhcnBwZXJHTENvbnRleHQgZ2l2ZW4gdGhlIHBsYXRmb3JtJ3Mgc2hhcmVk
IGNvbnRleHQuCisKIDIwMjAtMDItMDMgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlA
c29ueS5jb20+CiAKICAgICAgICAgW1dpbkNhaXJvXVtjdXJsXVtDbGFuZ10gZXJyb3I6IG1lbWJl
ciBhY2Nlc3MgaW50byBpbmNvbXBsZXRlIHR5cGUgJ1dlYkNvcmU6OlN5bmNocm9ub3VzTG9hZGVy
TWVzc2FnZVF1ZXVlJyBpbiB+Q3VybFJlcXVlc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR0xDb250ZXh0LmgKaW5kZXggODkwZmMyOTRiYzQ3ZGQxMjVjOGJlN2FkOWQwMTU3
ZGY3OGY4MDBkOC4uOTFhMzEwMWEwYTExZTM3ODU3NDkwNDA5YzdmYTJhMWI4OTQzNmJmMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmgKQEAgLTgyLDYg
KzgyLDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wg
cGxhdGZvcm1Db250ZXh0KCkgPSAwOwogI2VuZGlmCiAKKyAgICBjbGFzcyBXcmFwcGVkR0xDb250
ZXh0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfldyYXBwZWRHTENvbnRleHQoKSA9
IGRlZmF1bHQ7CisgICAgfTsKKworICAgIHZvaWQgc2V0V3JhcHBlZEdMQ29udGV4dChzdGQ6OnVu
aXF1ZV9wdHI8V3JhcHBlZEdMQ29udGV4dD4gd3JhcHBlZENvbnRleHQpIHsgbV93cmFwcGVkR2xD
b250ZXh0ID0gV1RGTW92ZSh3cmFwcGVkQ29udGV4dCk7IH07CisgICAgV3JhcHBlZEdMQ29udGV4
dCAqd3JhcHBlZEdMQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fd3JhcHBlZEdsQ29udGV4dC5n
ZXQoKTsgfQorCiAjaWYgUExBVEZPUk0oWDExKQogcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBh
ZGRBY3RpdmVDb250ZXh0KEdMQ29udGV4dCopOwpAQCAtOTQsNiArMTAyLDcgQEAgcHJvdGVjdGVk
OgogCiAgICAgUGxhdGZvcm1EaXNwbGF5JiBtX2Rpc3BsYXk7CiAgICAgdW5zaWduZWQgbV92ZXJz
aW9uIHsgMCB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXcmFwcGVkR0xDb250ZXh0PiBtX3dyYXBw
ZWRHbENvbnRleHQgeyBudWxscHRyIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR0xW
aWRlb1NpbmtHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNwcAppbmRleCAzNjc2Mzc3ODk2NTBlYjc2
NmE5YjUzNWJjMjMxMjUzMDFhMTI4MjlmLi5mN2Y4MmQ2ZmI2ODk3ZGFkMmFmNDlmODU5ZGI0YWE4
ZWMwYmU3NmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZpZGVvU2lua0dTdHJlYW1lci5jcHAKQEAgLTU4
LDYgKzU4LDE3IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCitjbGFzcyBHc3RXcmFw
cGVkR0xDb250ZXh0IDogcHVibGljIEdMQ29udGV4dDo6V3JhcHBlZEdMQ29udGV4dCB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgR3N0V3JhcHBlZEdMQ29udGV4
dChQbGF0Zm9ybURpc3BsYXkmLCBHTENvbnRleHQqKTsKKyAgICBHUmVmUHRyPEdzdEdMQ29udGV4
dD4gQ29udGV4dCgpIHsgcmV0dXJuIG1fZ2xDb250ZXh0LmdldCgpOyB9CisgICAgR1JlZlB0cjxH
c3RHTERpc3BsYXk+IERpc3BsYXkoKSB7IHJldHVybiBtX2dsRGlzcGxheS5nZXQoKTsgfQorcHJp
dmF0ZToKKyAgICBHUmVmUHRyPEdzdEdMQ29udGV4dD4gbV9nbENvbnRleHQ7CisgICAgR1JlZlB0
cjxHc3RHTERpc3BsYXk+IG1fZ2xEaXNwbGF5OworfTsKKwogZW51bSB7CiAgICAgUFJPUF8wLAog
ICAgIFBST1BfU1RBVFMsCkBAIC0xNDgsNTMgKzE1OSw2IEBAIHN0YXRpYyBib29sIGVuc3VyZUdz
dEdMQ29udGV4dChXZWJLaXRHTFZpZGVvU2luayogc2luaykKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKICAgICBhdXRvJiBzaGFyZWREaXNwbGF5ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNw
bGF5Rm9yQ29tcG9zaXRpbmcoKTsKLQotICAgIC8vIFRoZSBmbG9hdGluZyByZWYgcmVtb3ZhbCBz
dXBwb3J0IHdhcyBhZGRlZCBpbiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzQzMDYyLgotICAgIGJvb2wgc2hvdWxkQWRvcHRSZWYgPSB3ZWJraXRHc3RDaGVja1Zl
cnNpb24oMSwgMTQsIDApOwotICAgIGlmICghcHJpdi0+Z2xEaXNwbGF5KSB7Ci0jaWYgUExBVEZP
Uk0oWDExKQotI2lmIFVTRShHTFgpCi0gICAgICAgIGlmIChpczxQbGF0Zm9ybURpc3BsYXlYMTE+
KHNoYXJlZERpc3BsYXkpKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNpbmssICJD
cmVhdGluZyBYMTEgc2hhcmVkIEdMIGRpc3BsYXkiKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRB
ZG9wdFJlZikKLSAgICAgICAgICAgICAgICBwcml2LT5nbERpc3BsYXkgPSBhZG9wdEdSZWYoR1NU
X0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfeDExX25ld193aXRoX2Rpc3BsYXkoZG93bmNhc3Q8
UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5uYXRpdmUoKSkpKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcml2LT5nbERpc3BsYXkgPSBHU1RfR0xfRElTUExB
WShnc3RfZ2xfZGlzcGxheV94MTFfbmV3X3dpdGhfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURp
c3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLm5hdGl2ZSgpKSk7Ci0gICAgICAgIH0KLSNlbGlmIFVT
RShFR0wpCi0gICAgICAgIGlmIChpczxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkp
KSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNpbmssICJDcmVhdGluZyBYMTEgc2hh
cmVkIEVHTCBkaXNwbGF5Iik7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCi0gICAg
ICAgICAgICAgICAgcHJpdi0+Z2xEaXNwbGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQTEFZKGdz
dF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURp
c3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBwcml2LT5nbERpc3BsYXkgPSBHU1RfR0xfRElTUExBWShnc3Rf
Z2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNw
bGF5WDExPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsKLSAgICAgICAgfQotI2VuZGlm
Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFdBWUxBTkQpCi0gICAgICAgIGlmIChpczxQbGF0Zm9y
bURpc3BsYXlXYXlsYW5kPihzaGFyZWREaXNwbGF5KSkgewotICAgICAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChzaW5rLCAiQ3JlYXRpbmcgV2F5bGFuZCBzaGFyZWQgZGlzcGxheSIpOwotICAgICAg
ICAgICAgaWYgKHNob3VsZEFkb3B0UmVmKQotICAgICAgICAgICAgICAgIHByaXYtPmdsRGlzcGxh
eSA9IGFkb3B0R1JlZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhf
ZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5V2F5bGFuZD4oc2hhcmVkRGlzcGxh
eSkuZWdsRGlzcGxheSgpKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHBy
aXYtPmdsRGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0
aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlXYXlsYW5kPihzaGFyZWREaXNw
bGF5KS5lZ2xEaXNwbGF5KCkpKTsKLSAgICAgICAgfQotI2VuZGlmCi0KLSNpZiBVU0UoV1BFX1JF
TkRFUkVSKQotICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5TGliV1BFPihzaGFyZWREaXNw
bGF5KSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzaW5rLCAiQ3JlYXRpbmcgV1BF
IHNoYXJlZCBFR0wgZGlzcGxheSIpOwotICAgICAgICAgICAgaWYgKHNob3VsZEFkb3B0UmVmKQot
ICAgICAgICAgICAgICAgIHByaXYtPmdsRGlzcGxheSA9IGFkb3B0R1JlZihHU1RfR0xfRElTUExB
WShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZv
cm1EaXNwbGF5TGliV1BFPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKSk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcHJpdi0+Z2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BM
QVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRm
b3JtRGlzcGxheUxpYldQRT4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSk7Ci0gICAgICAg
IH0KLSNlbmRpZgotCi0gICAgICAgIEFTU0VSVChwcml2LT5nbERpc3BsYXkpOwotICAgIH0KLQog
ICAgIEdMQ29udGV4dCogc2hhcmVkQ29udGV4dCA9IHNoYXJlZERpc3BsYXkuc2hhcmluZ0dMQ29u
dGV4dCgpOwogICAgIGlmICghc2hhcmVkQ29udGV4dCkgewogICAgICAgICBHU1RfRUxFTUVOVF9F
UlJPUihHU1RfRUxFTUVOVF9DQVNUKHNpbmspLCBSRVNPVVJDRSwgTk9UX0ZPVU5ELCAoKCJXZWJL
aXQgc2hhcmVkIEdMIGNvbnRleHQgdW5hdmFpbGFibGUiKSksCkBAIC0yMDIsMzggKzE2NiwxNiBA
QCBzdGF0aWMgYm9vbCBlbnN1cmVHc3RHTENvbnRleHQoV2ViS2l0R0xWaWRlb1NpbmsqIHNpbmsp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICAvLyBFR0wgYW5kIEdMWCBhcmUg
bXV0dWFsbHkgZXhjbHVzaXZlLCBubyBuZWVkIGZvciBpZmRlZnMgaGVyZS4KLSAgICBHc3RHTFBs
YXRmb3JtIGdsUGxhdGZvcm0gPSBzaGFyZWRDb250ZXh0LT5pc0VHTENvbnRleHQoKSA/IEdTVF9H
TF9QTEFURk9STV9FR0wgOiBHU1RfR0xfUExBVEZPUk1fR0xYOwotCi0jaWYgVVNFKE9QRU5HTF9F
UykKLSAgICBHc3RHTEFQSSBnbEFQSSA9IEdTVF9HTF9BUElfR0xFUzI7Ci0jZWxpZiBVU0UoT1BF
TkdMKQotICAgIEdzdEdMQVBJIGdsQVBJID0gR1NUX0dMX0FQSV9PUEVOR0w7Ci0jZWxzZQotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0KLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dEdMIGNvbnRleHRIYW5kbGUgPSBzaGFyZWRDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsK
LSAgICBpZiAoIWNvbnRleHRIYW5kbGUpCisgICAgYXV0byB3cmFwcGVkR0xDb250ZXh0ID0gc2hh
cmVkQ29udGV4dC0+d3JhcHBlZEdMQ29udGV4dCgpOworICAgIGlmICghd3JhcHBlZEdMQ29udGV4
dCkgeworICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUihHU1RfRUxFTUVOVF9DQVNUKHNpbmspLCBS
RVNPVVJDRSwgTk9UX0ZPVU5ELCAoKCJXZWJLaXQgc2hhcmVkIEdMIHdyYXBwZXJkIGNvbnRleHQg
dW5hdmFpbGFibGUiKSksCisgICAgICAgICAgICAoIlRoZSBXZWJLaXQgc2hhcmVkIEdMIHdyYXBw
ZWQgY29udGV4dCBzb21laG93IGRpc2FwcGVhcmVkLiBWaWRlbyB0ZXh0dXJlcyByZW5kZXJpbmcg
d2lsbCBmYWlsLiIpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAotICAgIGlmIChz
aG91bGRBZG9wdFJlZikKLSAgICAgICAgcHJpdi0+Z2xDb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9n
bF9jb250ZXh0X25ld193cmFwcGVkKHByaXYtPmdsRGlzcGxheS5nZXQoKSwgcmVpbnRlcnByZXRf
Y2FzdDxndWludHB0cj4oY29udGV4dEhhbmRsZSksIGdsUGxhdGZvcm0sIGdsQVBJKSk7Ci0gICAg
ZWxzZQotICAgICAgICBwcml2LT5nbENvbnRleHQgPSBnc3RfZ2xfY29udGV4dF9uZXdfd3JhcHBl
ZChwcml2LT5nbERpc3BsYXkuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3VpbnRwdHI+KGNvbnRl
eHRIYW5kbGUpLCBnbFBsYXRmb3JtLCBnbEFQSSk7Ci0KLSAgICAvLyBBY3RpdmF0ZSBhbmQgZmls
bCB0aGUgR1N0cmVhbWVyIHdyYXBwZWQgY29udGV4dCB3aXRoIHRoZSBXZWJraXQncyBzaGFyZWQg
b25lLgotICAgIGF1dG8qIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVu
dCgpOwotICAgIHNoYXJlZENvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChn
c3RfZ2xfY29udGV4dF9hY3RpdmF0ZShwcml2LT5nbENvbnRleHQuZ2V0KCksIFRSVUUpKSB7Ci0g
ICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgaWYgKCFnc3RfZ2xf
Y29udGV4dF9maWxsX2luZm8ocHJpdi0+Z2xDb250ZXh0LmdldCgpLCAmZXJyb3Iub3V0UHRyKCkp
KQotICAgICAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0byBmaWxsIGluIEdTdHJlYW1lciBj
b250ZXh0OiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKLSAgICAgICAgZ3N0X2dsX2NvbnRleHRfYWN0
aXZhdGUocHJpdi0+Z2xDb250ZXh0LmdldCgpLCBGQUxTRSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gYWN0aXZhdGUgR1N0cmVhbWVyIGNvbnRleHQgJSIgR1NU
X1BUUl9GT1JNQVQsIHByaXYtPmdsQ29udGV4dC5nZXQoKSk7Ci0gICAgaWYgKHByZXZpb3VzQWN0
aXZlQ29udGV4dCkKLSAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBhdXRvKiBnc3RXcmFwcGVkR0xDb250ZXh0ID0gc3RhdGljX2Nhc3Q8R3N0
V3JhcHBlZEdMQ29udGV4dCo+KHdyYXBwZWRHTENvbnRleHQpOworICAgIHByaXYtPmdsQ29udGV4
dCA9IGdzdFdyYXBwZWRHTENvbnRleHQtPkNvbnRleHQoKTsKKyAgICBwcml2LT5nbERpc3BsYXkg
PSBnc3RXcmFwcGVkR0xDb250ZXh0LT5EaXNwbGF5KCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
QEAgLTM3NCw2ICszMTYsODcgQEAgdm9pZCB3ZWJLaXRHTFZpZGVvU2lua1NldE1lZGlhUGxheWVy
UHJpdmF0ZShXZWJLaXRHTFZpZGVvU2luayogc2luaywgTWVkaWFQbGF5ZXIKICAgICB9LCBwbGF5
ZXIsIG51bGxwdHIpOwogfQogCitHc3RXcmFwcGVkR0xDb250ZXh0OjpHc3RXcmFwcGVkR0xDb250
ZXh0KFBsYXRmb3JtRGlzcGxheSYgZGlzcGxheSwgR0xDb250ZXh0KiBjb250ZXh0KQoreworICAg
IC8vIFRoZSBmbG9hdGluZyByZWYgcmVtb3ZhbCBzdXBwb3J0IHdhcyBhZGRlZCBpbiBodHRwczov
L2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQzMDYyLgorICAgIGJvb2wgc2hv
dWxkQWRvcHRSZWYgPSB3ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwgMTQsIDApOworICAgIGlmICgh
bV9nbERpc3BsYXkpIHsKKyNpZiBQTEFURk9STShYMTEpCisjaWYgVVNFKEdMWCkKKyAgICAgICAg
aWYgKGlzPFBsYXRmb3JtRGlzcGxheVgxMT4oZGlzcGxheSkpIHsKKyAgICAgICAgICAgIEdTVF9E
RUJVRygiQ3JlYXRpbmcgWDExIHNoYXJlZCBHTCBkaXNwbGF5Iik7CisgICAgICAgICAgICBpZiAo
c2hvdWxkQWRvcHRSZWYpCisgICAgICAgICAgICAgICAgbV9nbERpc3BsYXkgPSBhZG9wdEdSZWYo
R1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfeDExX25ld193aXRoX2Rpc3BsYXkoZG93bmNh
c3Q8UGxhdGZvcm1EaXNwbGF5WDExPihkaXNwbGF5KS5uYXRpdmUoKSkpKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZKGdzdF9n
bF9kaXNwbGF5X3gxMV9uZXdfd2l0aF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVgx
MT4oZGlzcGxheSkubmF0aXZlKCkpKTsKKyAgICAgICAgfQorI2VsaWYgVVNFKEVHTCkKKyAgICAg
ICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkpIHsKKyAgICAgICAg
ICAgIEdTVF9ERUJVRygiQ3JlYXRpbmcgWDExIHNoYXJlZCBFR0wgZGlzcGxheSIpOworICAgICAg
ICAgICAgaWYgKHNob3VsZEFkb3B0UmVmKQorICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0g
YWRvcHRHUmVmKEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xf
ZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KGRpc3BsYXkpLmVnbERpc3BsYXko
KSkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IEdT
VF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3du
Y2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KGRpc3BsYXkpLmVnbERpc3BsYXkoKSkpOworICAgICAg
ICB9CisjZW5kaWYKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0FZTEFORCkKKyAgICAgICAgaWYg
KGlzPFBsYXRmb3JtRGlzcGxheVdheWxhbmQ+KGRpc3BsYXkpKSB7CisgICAgICAgICAgICBHU1Rf
REVCVUcoIkNyZWF0aW5nIFdheWxhbmQgc2hhcmVkIGRpc3BsYXkiKTsKKyAgICAgICAgICAgIGlm
IChzaG91bGRBZG9wdFJlZikKKyAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IGFkb3B0R1Jl
ZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXko
ZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5V2F5bGFuZD4oZGlzcGxheSkuZWdsRGlzcGxheSgpKSkp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gR1NUX0dM
X0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0
PFBsYXRmb3JtRGlzcGxheVdheWxhbmQ+KGRpc3BsYXkpLmVnbERpc3BsYXkoKSkpOworICAgICAg
ICB9CisjZW5kaWYKKworI2lmIFVTRShXUEVfUkVOREVSRVIpCisgICAgICAgIGlmIChpczxQbGF0
Zm9ybURpc3BsYXlMaWJXUEU+KGRpc3BsYXkpKSB7CisgICAgICAgICAgICBHU1RfREVCVUcoIkNy
ZWF0aW5nIFdQRSBzaGFyZWQgRUdMIGRpc3BsYXkiKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRB
ZG9wdFJlZikKKyAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IGFkb3B0R1JlZihHU1RfR0xf
RElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8
UGxhdGZvcm1EaXNwbGF5TGliV1BFPihkaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9nbERpc3BsYXkgPSBHU1RfR0xfRElTUExBWShn
c3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1E
aXNwbGF5TGliV1BFPihkaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsKKyAgICAgICAgfQorI2VuZGlm
CisKKyAgICAgICAgQVNTRVJUKG1fZ2xEaXNwbGF5KTsKKyAgICB9CisKKyAgICAvLyBFR0wgYW5k
IEdMWCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLCBubyBuZWVkIGZvciBpZmRlZnMgaGVyZS4KKyAg
ICBHc3RHTFBsYXRmb3JtIGdsUGxhdGZvcm0gPSBjb250ZXh0LT5pc0VHTENvbnRleHQoKSA/IEdT
VF9HTF9QTEFURk9STV9FR0wgOiBHU1RfR0xfUExBVEZPUk1fR0xYOworCisjaWYgVVNFKE9QRU5H
TF9FUykKKyAgICBHc3RHTEFQSSBnbEFQSSA9IEdTVF9HTF9BUElfR0xFUzI7CisjZWxpZiBVU0Uo
T1BFTkdMKQorICAgIEdzdEdMQVBJIGdsQVBJID0gR1NUX0dMX0FQSV9PUEVOR0w7CisjZWxzZQor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisKKyAgICBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dEdMIGNvbnRleHRIYW5kbGUgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAg
ICBhc3NlcnQoY29udGV4dEhhbmRsZSk7CisKKyAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCisgICAg
ICAgIG1fZ2xDb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9nbF9jb250ZXh0X25ld193cmFwcGVkKG1f
Z2xEaXNwbGF5LmdldCgpLCByZWludGVycHJldF9jYXN0PGd1aW50cHRyPihjb250ZXh0SGFuZGxl
KSwgZ2xQbGF0Zm9ybSwgZ2xBUEkpKTsKKyAgICBlbHNlCisgICAgICAgIG1fZ2xDb250ZXh0ID0g
Z3N0X2dsX2NvbnRleHRfbmV3X3dyYXBwZWQobV9nbERpc3BsYXkuZ2V0KCksIHJlaW50ZXJwcmV0
X2Nhc3Q8Z3VpbnRwdHI+KGNvbnRleHRIYW5kbGUpLCBnbFBsYXRmb3JtLCBnbEFQSSk7CisKKyAg
ICAvLyBBY3RpdmF0ZSBhbmQgZmlsbCB0aGUgR1N0cmVhbWVyIHdyYXBwZWQgY29udGV4dCB3aXRo
IHRoZSBXZWJraXQncyBzaGFyZWQgb25lLgorICAgIGF1dG8qIHByZXZpb3VzQWN0aXZlQ29udGV4
dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmIChnc3RfZ2xfY29udGV4dF9hY3RpdmF0ZShtX2dsQ29udGV4dC5nZXQoKSwg
VFJVRSkpIHsKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgICAgICBp
ZiAoIWdzdF9nbF9jb250ZXh0X2ZpbGxfaW5mbyhtX2dsQ29udGV4dC5nZXQoKSwgJmVycm9yLm91
dFB0cigpKSkKKyAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gZmlsbCBpbiBHU3Ry
ZWFtZXIgY29udGV4dDogJXMiLCBlcnJvci0+bWVzc2FnZSk7CisgICAgICAgIGdzdF9nbF9jb250
ZXh0X2FjdGl2YXRlKG1fZ2xDb250ZXh0LmdldCgpLCBGQUxTRSk7CisgICAgfSBlbHNlCisgICAg
ICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gYWN0aXZhdGUgR1N0cmVhbWVyIGNvbnRleHQgJSIg
R1NUX1BUUl9GT1JNQVQsIG1fZ2xDb250ZXh0LmdldCgpKTsKKyAgICBpZiAocHJldmlvdXNBY3Rp
dmVDb250ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOworfQorCiBib29sIHdlYktpdEdMVmlkZW9TaW5rUHJvYmVQbGF0Zm9ybSgpCiB7CiAg
ICAgYXV0byYgc2hhcmVkRGlzcGxheSA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZv
ckNvbXBvc2l0aW5nKCk7CkBAIC0zODMsNiArNDA2LDExIEBAIGJvb2wgd2ViS2l0R0xWaWRlb1Np
bmtQcm9iZVBsYXRmb3JtKCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIGlm
ICghc2hhcmVkQ29udGV4dC0+d3JhcHBlZEdMQ29udGV4dCgpKSB7CisgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxHTENvbnRleHQ6OldyYXBwZWRHTENvbnRleHQ+IHdyYXBwZWRHbENvbnRleHQgPSBt
YWtlVW5pcXVlPEdzdFdyYXBwZWRHTENvbnRleHQ+KHNoYXJlZERpc3BsYXksIHNoYXJlZENvbnRl
eHQpOworICAgICAgICBzaGFyZWRDb250ZXh0LT5zZXRXcmFwcGVkR0xDb250ZXh0KFdURk1vdmUo
d3JhcHBlZEdsQ29udGV4dCkpOworICAgIH0KKwogICAgIHJldHVybiBpc0dTdHJlYW1lclBsdWdp
bkF2YWlsYWJsZSgiYXBwIikgJiYgaXNHU3RyZWFtZXJQbHVnaW5BdmFpbGFibGUoIm9wZW5nbCIp
OwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389793</attachid>
            <date>2020-02-05 04:41:16 -0800</date>
            <delta_ts>2020-02-05 04:46:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200626-20200205134115.patch</filename>
            <type>text/plain</type>
            <size>14211</size>
            <attacher name="Víctor M. Jáquez L.">vjaquez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1Nzg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGMwN2ZjYTFiZWVkYzg0
NThjY2MwZTM5YjE1OWIyZWM5MjE0MzczMi4uZjQyYzI1NDg2ZDNhNzQyMjVhMThhOWQyN2Q5YTg1
OWUzMDU2YTRiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDIwLTAyLTA0ICBWw61j
dG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgIDx2amFxdWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAg
W0dMXVtHU3RyZWFtZXJdIEluc3RhbnRpYXRlIEdzdEdMQ29udGV4dCB3aGVuIHRoZSBzaGFyZWQg
R0xDb250ZXh0IGlzIGNyZWF0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMDYyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJpZ2h0IG5vdyBvbmUgR3N0R0xDb250ZXh0IGlzIGNyZWF0ZWQgcGVyIHZp
ZGVvIHRhZywgd2hpY2ggaXMgYQorICAgICAgICB3cmFwcGVyIG9mIHRoZSBHTCBzaGFyZWQgY29u
dGV4dC4gRXZlcnkgdGltZSB0aGlzIHdyYXBwZXIgaXMKKyAgICAgICAgY3JlYXRlZCB0aGUgR0wg
Y29udGV4dCBoYXMgdG8gYmUgY3VycmVudCBpbiBvcmRlciB0byBpbml0aWFsaXplCisgICAgICAg
IHRoZSB3cmFwcGVyJ3MgaW50ZXJuYWwgc3RhdGUuCisKKyAgICAgICAgQSBiZXR0ZXIgYXBwcm9h
Y2ggaXMgdG8gaGF2ZSBvbmx5IG9uZSBHc3RHTENvbnRleHQgcGVyIEdMIGNvbnRleHQsCisgICAg
ICAgIGFuZCBpbnN0YW50aWF0ZSBpdCB3aGVuIHRoZSBHTCBjb250ZXh0IGlzIGNyZWF0ZWQgYW5k
IGN1cnJlbnQuIEFuZAorICAgICAgICB0aGlzIHNpbmdsZSBHc3RHTENvbnRleHQgaXMgdXNlZCBp
biBhbGwgdGhlIHZpZGVvIHBsYXllcnMgaW5zaWRlCisgICAgICAgIHRoZSBwYWdlLgorCisgICAg
ICAgIFdyYXBwZWRHTENvbnRleHQgYWJzdHJhY3QgY2xhc3MgaXMgYWRkZWQgaW50bworICAgICAg
ICBXZWJDb3JlOjpHTENvbnRleHQuIFRoaXMgY2xhc3Mgd2lsbCBzdG9yZSBhbnkgd3JhcHBlciBv
ZiB0aGF0IEdMCisgICAgICAgIGNvbnRleHQuIFRoZSB3cmFwcGVyIGlzIGFjY2Vzc2VkIHRocm91
Z2ggYQorICAgICAgICBzZXR0ZXIvZ2V0dGVyLiBXZWJDb3JlOjpHTENvbnRleHQgd2lsbCBrZWVw
IHRoZSB3cmFwcGVyLCBzbyBpdAorICAgICAgICB3b24ndCBuZWVkIHRvIGJlIHJlY3JlYXRlZCBl
dmVyeSB0aW1lIGl0IGlzIHJlcXVpcmVkLgorCisgICAgICAgIFdyYXBwZWRHTENvbnRleHQgY2xh
c3MgaXMgaW1wbGVtZW50ZWQgYXMgR3N0V3JhcHBlZEdMQ29udGV4dCwKKyAgICAgICAgd2hpY2gg
c3RvcmVzIHRoZSBHc3RHTENvbnRleHQsIHdyYXBwaW5nIHRoZSBzaGFyZWQgY29udGV4dC4gVGhl
CisgICAgICAgIHdyYXBwZWQgY29udGV4dCBpcyBpbnN0YW50aWF0ZWQgYW5kIGFzc29jaWF0ZWQg
d2l0aCB0aGUgR0wgY29udGV4dAorICAgICAgICB3aGVuIHByb2JpbmcgdGhlIHBsYXRmb3JtLgor
CisgICAgICAgIEZpbmFsbHksIHRoZSB3cmFwcGVyIGNsYXNzIGlzIHJldHJpZXZlZCB0aHJvdWdo
CisgICAgICAgIFdlYkNvcmU6OkdMQ29udGV4dC4gR3N0V3JhcHBlZEdMQ29udGV4dCBhbHNvIGhl
bGQgYm90aAorICAgICAgICBHc3RHTERpc3BsYXkgYW5kIEdzdEdMQ29udGV4dCwgc28gdGhleSBh
cmUgbGF0ZXIgc2V0IGFzIHByaXZhdGUKKyAgICAgICAgdmFyaWFibGVzIG9mIHZpZGVvIHNpbmsu
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHJlcXVpcmVkLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR0xDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpHTENvbnRleHQ6OnNldFdy
YXBwZWRHTENvbnRleHQpOiBzZXR0ZXIgZm9yCisgICAgICAgIFdyYXBwZWRHTENvbnRleHQuCisg
ICAgICAgIChXZWJDb3JlOjpHTENvbnRleHQ6OndyYXBwZWRHTENvbnRleHQgY29uc3QpOiBnZXR0
ZXIgZm9yCisgICAgICAgIFdyYXBwZWRHTENvbnRleHQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKEdzdFdy
YXBwZWRHTENvbnRleHQ6OkNvbnRleHQpOiBnZXR0ZXIgZm9yIEdzdEdMQ29udGV4dC4KKyAgICAg
ICAgKEdzdFdyYXBwZWRHTENvbnRleHQ6OkRpc3BsYXkpOiBnZXR0ZXIgZm9yIEdzdEdMRGlzcGxh
eS4KKyAgICAgICAgKGVuc3VyZUdzdEdMQ29udGV4dCk6IHJldHJpZXZlcyBjb250ZXh0IGFuZCBk
aXNwbGF5IGZyb20gY29udGV4dAorICAgICAgICB0byB2aWRlbyBzaW5rIHByaXZhdGUgdmFyaWFi
bGVzLgorICAgICAgICAoR3N0V3JhcHBlZEdMQ29udGV4dDo6R3N0V3JhcHBlZEdMQ29udGV4dCk6
IEdTdHJlYW1lcgorICAgICAgICBpbXBsZW1lbmF0aW9uIGZvciBXcmFwcGVkR0xDb250ZXh0Lgor
ICAgICAgICAod2ViS2l0R0xWaWRlb1NpbmtQcm9iZVBsYXRmb3JtKTogaW5zdGlhbmNpYXRlcwor
ICAgICAgICBHc3RXYXJwcGVyR0xDb250ZXh0IGdpdmVuIHRoZSBwbGF0Zm9ybSdzIHNoYXJlZCBj
b250ZXh0LgorCiAyMDIwLTAyLTAxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXBsYWNlIFJHQkEzMiB0eXBlZGVmIHdpdGggYSBjbGFzcyB0byBpbXByb3ZlIHR5
cGUgc2FmZXR5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
TENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5o
CmluZGV4IDg5MGZjMjk0YmM0N2RkMTI1YzhiZTdhZDlkMDE1N2RmNzhmODAwZDguLjM0MGEwNmQz
MmM5OTZlNGE3NzYyMjA5MDkyOGQ0NGI1NmI4OGI5MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5oCkBAIC04Miw2ICs4MiwxNCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIHBsYXRmb3JtQ29udGV4dCgpID0g
MDsKICNlbmRpZgogCisgICAgY2xhc3MgV3JhcHBlZEdMQ29udGV4dCB7CisgICAgcHVibGljOgor
ICAgICAgICB2aXJ0dWFsIH5XcmFwcGVkR0xDb250ZXh0KCkgPSBkZWZhdWx0OworICAgIH07CisK
KyAgICB2b2lkIHNldFdyYXBwZWRHTENvbnRleHQoc3RkOjp1bmlxdWVfcHRyPFdyYXBwZWRHTENv
bnRleHQ+IHdyYXBwZWRDb250ZXh0KSB7IG1fd3JhcHBlZEdsQ29udGV4dCA9IFdURk1vdmUod3Jh
cHBlZENvbnRleHQpOyB9OworICAgIFdyYXBwZWRHTENvbnRleHQqIHdyYXBwZWRHTENvbnRleHQo
KSBjb25zdCB7IHJldHVybiBtX3dyYXBwZWRHbENvbnRleHQuZ2V0KCk7IH0KKwogI2lmIFBMQVRG
T1JNKFgxMSkKIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgYWRkQWN0aXZlQ29udGV4dChHTENv
bnRleHQqKTsKQEAgLTk0LDYgKzEwMiw3IEBAIHByb3RlY3RlZDoKIAogICAgIFBsYXRmb3JtRGlz
cGxheSYgbV9kaXNwbGF5OwogICAgIHVuc2lnbmVkIG1fdmVyc2lvbiB7IDAgfTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8V3JhcHBlZEdMQ29udGV4dD4gbV93cmFwcGVkR2xDb250ZXh0OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZpZGVvU2lua0dTdHJlYW1lci5j
cHAKaW5kZXggMzY3NjM3Nzg5NjUwZWI3NjZhOWI1MzViYzIzMTI1MzAxYTEyODI5Zi4uNThmMGE3
OTlkMTVkODA2ZTM5YmEzOTQzNjMwZDA2MGQzZDgxMjNmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR0xWaWRl
b1NpbmtHU3RyZWFtZXIuY3BwCkBAIC01OCw2ICs1OCwxNyBAQAogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIAorY2xhc3MgR3N0V3JhcHBlZEdMQ29udGV4dCA6IHB1YmxpYyBHTENvbnRleHQ6
OldyYXBwZWRHTENvbnRleHQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIEdzdFdyYXBwZWRHTENvbnRleHQoUGxhdGZvcm1EaXNwbGF5JiwgR0xDb250ZXh0Kik7
CisgICAgR1JlZlB0cjxHc3RHTENvbnRleHQ+IGdzdEdMQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1fZ2xDb250ZXh0OyB9CisgICAgR1JlZlB0cjxHc3RHTERpc3BsYXk+IGdzdEdMRGlzcGxheSgp
IGNvbnN0IHsgcmV0dXJuIG1fZ2xEaXNwbGF5OyB9Citwcml2YXRlOgorICAgIEdSZWZQdHI8R3N0
R0xDb250ZXh0PiBtX2dsQ29udGV4dDsKKyAgICBHUmVmUHRyPEdzdEdMRGlzcGxheT4gbV9nbERp
c3BsYXk7Cit9OworCiBlbnVtIHsKICAgICBQUk9QXzAsCiAgICAgUFJPUF9TVEFUUywKQEAgLTE0
OCw1MyArMTU5LDYgQEAgc3RhdGljIGJvb2wgZW5zdXJlR3N0R0xDb250ZXh0KFdlYktpdEdMVmlk
ZW9TaW5rKiBzaW5rKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGF1dG8mIHNoYXJlZERp
c3BsYXkgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpOwot
Ci0gICAgLy8gVGhlIGZsb2F0aW5nIHJlZiByZW1vdmFsIHN1cHBvcnQgd2FzIGFkZGVkIGluIGh0
dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDMwNjIuCi0gICAgYm9v
bCBzaG91bGRBZG9wdFJlZiA9IHdlYmtpdEdzdENoZWNrVmVyc2lvbigxLCAxNCwgMCk7Ci0gICAg
aWYgKCFwcml2LT5nbERpc3BsYXkpIHsKLSNpZiBQTEFURk9STShYMTEpCi0jaWYgVVNFKEdMWCkK
LSAgICAgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkpIHsKLSAg
ICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2luaywgIkNyZWF0aW5nIFgxMSBzaGFyZWQgR0wg
ZGlzcGxheSIpOwotICAgICAgICAgICAgaWYgKHNob3VsZEFkb3B0UmVmKQotICAgICAgICAgICAg
ICAgIHByaXYtPmdsRGlzcGxheSA9IGFkb3B0R1JlZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlz
cGxheV94MTFfbmV3X3dpdGhfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNo
YXJlZERpc3BsYXkpLm5hdGl2ZSgpKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHByaXYtPmdsRGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X3gxMV9u
ZXdfd2l0aF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVgxMT4oc2hhcmVkRGlzcGxh
eSkubmF0aXZlKCkpKTsKLSAgICAgICAgfQotI2VsaWYgVVNFKEVHTCkKLSAgICAgICAgaWYgKGlz
PFBsYXRmb3JtRGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkpIHsKLSAgICAgICAgICAgIEdTVF9E
RUJVR19PQkpFQ1Qoc2luaywgIkNyZWF0aW5nIFgxMSBzaGFyZWQgRUdMIGRpc3BsYXkiKTsKLSAg
ICAgICAgICAgIGlmIChzaG91bGRBZG9wdFJlZikKLSAgICAgICAgICAgICAgICBwcml2LT5nbERp
c3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193
aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVgxMT4oc2hhcmVkRGlzcGxh
eSkuZWdsRGlzcGxheSgpKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHBy
aXYtPmdsRGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0
aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkp
LmVnbERpc3BsYXkoKSkpOwotICAgICAgICB9Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oV0FZTEFORCkKLSAgICAgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheVdheWxhbmQ+KHNoYXJl
ZERpc3BsYXkpKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNpbmssICJDcmVhdGlu
ZyBXYXlsYW5kIHNoYXJlZCBkaXNwbGF5Iik7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkQWRvcHRS
ZWYpCi0gICAgICAgICAgICAgICAgcHJpdi0+Z2xEaXNwbGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9E
SVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQ
bGF0Zm9ybURpc3BsYXlXYXlsYW5kPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKSk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcHJpdi0+Z2xEaXNwbGF5ID0gR1NUX0dM
X0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0
PFBsYXRmb3JtRGlzcGxheVdheWxhbmQ+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpOwot
ICAgICAgICB9Ci0jZW5kaWYKLQotI2lmIFVTRShXUEVfUkVOREVSRVIpCi0gICAgICAgIGlmIChp
czxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJlZERpc3BsYXkpKSB7Ci0gICAgICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHNpbmssICJDcmVhdGluZyBXUEUgc2hhcmVkIEVHTCBkaXNwbGF5Iik7
Ci0gICAgICAgICAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCi0gICAgICAgICAgICAgICAgcHJpdi0+
Z2xEaXNwbGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9u
ZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJl
ZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBwcml2LT5nbERpc3BsYXkgPSBHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xf
bmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5TGliV1BFPihzaGFy
ZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAg
QVNTRVJUKHByaXYtPmdsRGlzcGxheSk7Ci0gICAgfQotCiAgICAgR0xDb250ZXh0KiBzaGFyZWRD
b250ZXh0ID0gc2hhcmVkRGlzcGxheS5zaGFyaW5nR0xDb250ZXh0KCk7CiAgICAgaWYgKCFzaGFy
ZWRDb250ZXh0KSB7CiAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKEdTVF9FTEVNRU5UX0NBU1Qo
c2luayksIFJFU09VUkNFLCBOT1RfRk9VTkQsICgoIldlYktpdCBzaGFyZWQgR0wgY29udGV4dCB1
bmF2YWlsYWJsZSIpKSwKQEAgLTIwMiwzOCArMTY2LDE2IEBAIHN0YXRpYyBib29sIGVuc3VyZUdz
dEdMQ29udGV4dChXZWJLaXRHTFZpZGVvU2luayogc2luaykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIC8vIEVHTCBhbmQgR0xYIGFyZSBtdXR1YWxseSBleGNsdXNpdmUsIG5v
IG5lZWQgZm9yIGlmZGVmcyBoZXJlLgotICAgIEdzdEdMUGxhdGZvcm0gZ2xQbGF0Zm9ybSA9IHNo
YXJlZENvbnRleHQtPmlzRUdMQ29udGV4dCgpID8gR1NUX0dMX1BMQVRGT1JNX0VHTCA6IEdTVF9H
TF9QTEFURk9STV9HTFg7Ci0KLSNpZiBVU0UoT1BFTkdMX0VTKQotICAgIEdzdEdMQVBJIGdsQVBJ
ID0gR1NUX0dMX0FQSV9HTEVTMjsKLSNlbGlmIFVTRShPUEVOR0wpCi0gICAgR3N0R0xBUEkgZ2xB
UEkgPSBHU1RfR0xfQVBJX09QRU5HTDsKLSNlbHNlCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0jZW5kaWYKLQotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgY29udGV4dEhhbmRsZSA9
IHNoYXJlZENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dEhhbmRs
ZSkKKyAgICBhdXRvIHdyYXBwZWRHTENvbnRleHQgPSBzaGFyZWRDb250ZXh0LT53cmFwcGVkR0xD
b250ZXh0KCk7CisgICAgaWYgKCF3cmFwcGVkR0xDb250ZXh0KSB7CisgICAgICAgIEdTVF9FTEVN
RU5UX0VSUk9SKEdTVF9FTEVNRU5UX0NBU1Qoc2luayksIFJFU09VUkNFLCBOT1RfRk9VTkQsICgo
IldlYktpdCBzaGFyZWQgR0wgd3JhcHBlcmQgY29udGV4dCB1bmF2YWlsYWJsZSIpKSwKKyAgICAg
ICAgICAgICgiVGhlIFdlYktpdCBzaGFyZWQgR0wgd3JhcHBlZCBjb250ZXh0IHNvbWVob3cgZGlz
YXBwZWFyZWQuIFZpZGVvIHRleHR1cmVzIHJlbmRlcmluZyB3aWxsIGZhaWwuIikpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgaWYgKHNob3VsZEFkb3B0UmVmKQotICAgICAg
ICBwcml2LT5nbENvbnRleHQgPSBhZG9wdEdSZWYoZ3N0X2dsX2NvbnRleHRfbmV3X3dyYXBwZWQo
cHJpdi0+Z2xEaXNwbGF5LmdldCgpLCByZWludGVycHJldF9jYXN0PGd1aW50cHRyPihjb250ZXh0
SGFuZGxlKSwgZ2xQbGF0Zm9ybSwgZ2xBUEkpKTsKLSAgICBlbHNlCi0gICAgICAgIHByaXYtPmds
Q29udGV4dCA9IGdzdF9nbF9jb250ZXh0X25ld193cmFwcGVkKHByaXYtPmdsRGlzcGxheS5nZXQo
KSwgcmVpbnRlcnByZXRfY2FzdDxndWludHB0cj4oY29udGV4dEhhbmRsZSksIGdsUGxhdGZvcm0s
IGdsQVBJKTsKLQotICAgIC8vIEFjdGl2YXRlIGFuZCBmaWxsIHRoZSBHU3RyZWFtZXIgd3JhcHBl
ZCBjb250ZXh0IHdpdGggdGhlIFdlYmtpdCdzIHNoYXJlZCBvbmUuCi0gICAgYXV0byogcHJldmlv
dXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7Ci0gICAgc2hhcmVkQ29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKGdzdF9nbF9jb250ZXh0X2FjdGl2YXRl
KHByaXYtPmdsQ29udGV4dC5nZXQoKSwgVFJVRSkpIHsKLSAgICAgICAgR1VuaXF1ZU91dFB0cjxH
RXJyb3I+IGVycm9yOwotICAgICAgICBpZiAoIWdzdF9nbF9jb250ZXh0X2ZpbGxfaW5mbyhwcml2
LT5nbENvbnRleHQuZ2V0KCksICZlcnJvci5vdXRQdHIoKSkpCi0gICAgICAgICAgICBHU1RfV0FS
TklORygiRmFpbGVkIHRvIGZpbGwgaW4gR1N0cmVhbWVyIGNvbnRleHQ6ICVzIiwgZXJyb3ItPm1l
c3NhZ2UpOwotICAgICAgICBnc3RfZ2xfY29udGV4dF9hY3RpdmF0ZShwcml2LT5nbENvbnRleHQu
Z2V0KCksIEZBTFNFKTsKLSAgICB9IGVsc2UKLSAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0
byBhY3RpdmF0ZSBHU3RyZWFtZXIgY29udGV4dCAlIiBHU1RfUFRSX0ZPUk1BVCwgcHJpdi0+Z2xD
b250ZXh0LmdldCgpKTsKLSAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQotICAgICAgICBw
cmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGF1dG8qIGdz
dFdyYXBwZWRHTENvbnRleHQgPSBzdGF0aWNfY2FzdDxHc3RXcmFwcGVkR0xDb250ZXh0Kj4od3Jh
cHBlZEdMQ29udGV4dCk7CisgICAgcHJpdi0+Z2xDb250ZXh0ID0gZ3N0V3JhcHBlZEdMQ29udGV4
dC0+Z3N0R0xDb250ZXh0KCk7CisgICAgcHJpdi0+Z2xEaXNwbGF5ID0gZ3N0V3JhcHBlZEdMQ29u
dGV4dC0+Z3N0R0xEaXNwbGF5KCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM3NCwxNiAr
MzE2LDEwMyBAQCB2b2lkIHdlYktpdEdMVmlkZW9TaW5rU2V0TWVkaWFQbGF5ZXJQcml2YXRlKFdl
YktpdEdMVmlkZW9TaW5rKiBzaW5rLCBNZWRpYVBsYXllcgogICAgIH0sIHBsYXllciwgbnVsbHB0
cik7CiB9CiAKK0dzdFdyYXBwZWRHTENvbnRleHQ6OkdzdFdyYXBwZWRHTENvbnRleHQoUGxhdGZv
cm1EaXNwbGF5JiBkaXNwbGF5LCBHTENvbnRleHQqIGNvbnRleHQpCit7CisgICAgLy8gVGhlIGZs
b2F0aW5nIHJlZiByZW1vdmFsIHN1cHBvcnQgd2FzIGFkZGVkIGluIGh0dHBzOi8vYnVnemlsbGEu
Z25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDMwNjIuCisgICAgYm9vbCBzaG91bGRBZG9wdFJl
ZiA9IHdlYmtpdEdzdENoZWNrVmVyc2lvbigxLCAxNCwgMCk7CisgICAgaWYgKCFtX2dsRGlzcGxh
eSkgeworI2lmIFBMQVRGT1JNKFgxMSkKKyNpZiBVU0UoR0xYKQorICAgICAgICBpZiAoaXM8UGxh
dGZvcm1EaXNwbGF5WDExPihkaXNwbGF5KSkgeworICAgICAgICAgICAgR1NUX0RFQlVHKCJDcmVh
dGluZyBYMTEgc2hhcmVkIEdMIGRpc3BsYXkiKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRBZG9w
dFJlZikKKyAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IGFkb3B0R1JlZihHU1RfR0xfRElT
UExBWShnc3RfZ2xfZGlzcGxheV94MTFfbmV3X3dpdGhfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9y
bURpc3BsYXlYMTE+KGRpc3BsYXkpLm5hdGl2ZSgpKSkpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlf
eDExX25ld193aXRoX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihkaXNwbGF5
KS5uYXRpdmUoKSkpOworICAgICAgICB9CisjZWxpZiBVU0UoRUdMKQorICAgICAgICBpZiAoaXM8
UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KSkgeworICAgICAgICAgICAgR1NUX0RF
QlVHKCJDcmVhdGluZyBYMTEgc2hhcmVkIEVHTCBkaXNwbGF5Iik7CisgICAgICAgICAgICBpZiAo
c2hvdWxkQWRvcHRSZWYpCisgICAgICAgICAgICAgICAgbV9nbERpc3BsYXkgPSBhZG9wdEdSZWYo
R1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRv
d25jYXN0PFBsYXRmb3JtRGlzcGxheVgxMT4oZGlzcGxheSkuZWdsRGlzcGxheSgpKSkpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BM
QVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRm
b3JtRGlzcGxheVgxMT4oZGlzcGxheSkuZWdsRGlzcGxheSgpKSk7CisgICAgICAgIH0KKyNlbmRp
ZgorI2VuZGlmCisKKyNpZiBQTEFURk9STShXQVlMQU5EKQorICAgICAgICBpZiAoaXM8UGxhdGZv
cm1EaXNwbGF5V2F5bGFuZD4oZGlzcGxheSkpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVRygiQ3Jl
YXRpbmcgV2F5bGFuZCBzaGFyZWQgZGlzcGxheSIpOworICAgICAgICAgICAgaWYgKHNob3VsZEFk
b3B0UmVmKQorICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9E
SVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQ
bGF0Zm9ybURpc3BsYXlXYXlsYW5kPihkaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9nbERpc3BsYXkgPSBHU1RfR0xfRElTUExBWShn
c3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1E
aXNwbGF5V2F5bGFuZD4oZGlzcGxheSkuZWdsRGlzcGxheSgpKSk7CisgICAgICAgIH0KKyNlbmRp
ZgorCisjaWYgVVNFKFdQRV9SRU5ERVJFUikKKyAgICAgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxh
eUxpYldQRT4oZGlzcGxheSkpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVRygiQ3JlYXRpbmcgV1BF
IHNoYXJlZCBFR0wgZGlzcGxheSIpOworICAgICAgICAgICAgaWYgKHNob3VsZEFkb3B0UmVmKQor
ICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQTEFZKGdz
dF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURp
c3BsYXlMaWJXUEU+KGRpc3BsYXkpLmVnbERpc3BsYXkoKSkpKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNw
bGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlMaWJX
UEU+KGRpc3BsYXkpLmVnbERpc3BsYXkoKSkpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAg
ICBBU1NFUlQobV9nbERpc3BsYXkpOworICAgIH0KKworICAgIC8vIEVHTCBhbmQgR0xYIGFyZSBt
dXR1YWxseSBleGNsdXNpdmUsIG5vIG5lZWQgZm9yIGlmZGVmcyBoZXJlLgorICAgIEdzdEdMUGxh
dGZvcm0gZ2xQbGF0Zm9ybSA9IGNvbnRleHQtPmlzRUdMQ29udGV4dCgpID8gR1NUX0dMX1BMQVRG
T1JNX0VHTCA6IEdTVF9HTF9QTEFURk9STV9HTFg7CisKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAg
IEdzdEdMQVBJIGdsQVBJID0gR1NUX0dMX0FQSV9HTEVTMjsKKyNlbGlmIFVTRShPUEVOR0wpCisg
ICAgR3N0R0xBUEkgZ2xBUEkgPSBHU1RfR0xfQVBJX09QRU5HTDsKKyNlbHNlCisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wg
Y29udGV4dEhhbmRsZSA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIEFTU0VSVChj
b250ZXh0SGFuZGxlKTsKKworICAgIGlmIChzaG91bGRBZG9wdFJlZikKKyAgICAgICAgbV9nbENv
bnRleHQgPSBhZG9wdEdSZWYoZ3N0X2dsX2NvbnRleHRfbmV3X3dyYXBwZWQobV9nbERpc3BsYXku
Z2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3VpbnRwdHI+KGNvbnRleHRIYW5kbGUpLCBnbFBsYXRm
b3JtLCBnbEFQSSkpOworICAgIGVsc2UKKyAgICAgICAgbV9nbENvbnRleHQgPSBnc3RfZ2xfY29u
dGV4dF9uZXdfd3JhcHBlZChtX2dsRGlzcGxheS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxndWlu
dHB0cj4oY29udGV4dEhhbmRsZSksIGdsUGxhdGZvcm0sIGdsQVBJKTsKKworICAgIC8vIEFjdGl2
YXRlIGFuZCBmaWxsIHRoZSBHU3RyZWFtZXIgd3JhcHBlZCBjb250ZXh0IHdpdGggdGhlIFdlYmtp
dCdzIHNoYXJlZCBvbmUuCisgICAgYXV0byogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250
ZXh0OjpjdXJyZW50KCk7CisgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKGdzdF9nbF9jb250ZXh0X2FjdGl2YXRlKG1fZ2xDb250ZXh0LmdldCgpLCBUUlVFKSkgewor
ICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIGlmICghZ3N0X2ds
X2NvbnRleHRfZmlsbF9pbmZvKG1fZ2xDb250ZXh0LmdldCgpLCAmZXJyb3Iub3V0UHRyKCkpKQor
ICAgICAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0byBmaWxsIGluIEdTdHJlYW1lciBjb250
ZXh0OiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgZ3N0X2dsX2NvbnRleHRfYWN0aXZh
dGUobV9nbENvbnRleHQuZ2V0KCksIEZBTFNFKTsKKyAgICB9IGVsc2UKKyAgICAgICAgR1NUX1dB
Uk5JTkcoIkZhaWxlZCB0byBhY3RpdmF0ZSBHU3RyZWFtZXIgY29udGV4dCAlIiBHU1RfUFRSX0ZP
Uk1BVCwgbV9nbENvbnRleHQuZ2V0KCkpOworICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQp
CisgICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cit9
CisKIGJvb2wgd2ViS2l0R0xWaWRlb1NpbmtQcm9iZVBsYXRmb3JtKCkKIHsKICAgICBhdXRvJiBz
aGFyZWREaXNwbGF5ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRp
bmcoKTsKLSAgICBHTENvbnRleHQqIHNoYXJlZENvbnRleHQgPSBzaGFyZWREaXNwbGF5LnNoYXJp
bmdHTENvbnRleHQoKTsKKyAgICBhdXRvKiBzaGFyZWRDb250ZXh0ID0gc2hhcmVkRGlzcGxheS5z
aGFyaW5nR0xDb250ZXh0KCk7CiAgICAgaWYgKCFzaGFyZWRDb250ZXh0KSB7CiAgICAgICAgIEdT
VF9XQVJOSU5HKCJXZWJLaXQgc2hhcmVkIEdMIGNvbnRleHQgaXMgbm90IGF2YWlsYWJsZS4iKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJldHVybiBpc0dTdHJlYW1lclBs
dWdpbkF2YWlsYWJsZSgiYXBwIikgJiYgaXNHU3RyZWFtZXJQbHVnaW5BdmFpbGFibGUoIm9wZW5n
bCIpOworICAgIGlmICghKGlzR1N0cmVhbWVyUGx1Z2luQXZhaWxhYmxlKCJhcHAiKSAmJiBpc0dT
dHJlYW1lclBsdWdpbkF2YWlsYWJsZSgib3BlbmdsIikpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoIXNoYXJlZENvbnRleHQtPndyYXBwZWRHTENvbnRleHQoKSkKKyAgICAgICAg
c2hhcmVkQ29udGV4dC0+c2V0V3JhcHBlZEdMQ29udGV4dChtYWtlVW5pcXVlPEdzdFdyYXBwZWRH
TENvbnRleHQ+KHNoYXJlZERpc3BsYXksIHNoYXJlZENvbnRleHQpKTsKKworICAgIHJldHVybiB0
cnVlOwogfQogCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389794</attachid>
            <date>2020-02-05 04:46:12 -0800</date>
            <delta_ts>2020-02-11 09:55:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200626-20200205134611.patch</filename>
            <type>text/plain</type>
            <size>14235</size>
            <attacher name="Víctor M. Jáquez L.">vjaquez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1Nzg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGMwN2ZjYTFiZWVkYzg0
NThjY2MwZTM5YjE1OWIyZWM5MjE0MzczMi4uZWQzY2NmNTdiNmI3NzVlODJkMDg5YTEzNGQyMDU0
M2I2NGMzYjdmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDIwLTAyLTA0ICBWw61j
dG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgIDx2amFxdWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAg
W0dMXVtHU3RyZWFtZXJdIEluc3RhbnRpYXRlIEdzdEdMQ29udGV4dCB3aGVuIHRoZSBzaGFyZWQg
R0xDb250ZXh0IGlzIGNyZWF0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMDYyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJpZ2h0IG5vdyBvbmUgR3N0R0xDb250ZXh0IGlzIGNyZWF0ZWQgcGVyIHZp
ZGVvIHRhZywgd2hpY2ggaXMgYQorICAgICAgICB3cmFwcGVyIG9mIHRoZSBHTCBzaGFyZWQgY29u
dGV4dC4gRXZlcnkgdGltZSB0aGlzIHdyYXBwZXIgaXMKKyAgICAgICAgY3JlYXRlZCB0aGUgR0wg
Y29udGV4dCBoYXMgdG8gYmUgY3VycmVudCBpbiBvcmRlciB0byBpbml0aWFsaXplCisgICAgICAg
IHRoZSB3cmFwcGVyJ3MgaW50ZXJuYWwgc3RhdGUuCisKKyAgICAgICAgQSBiZXR0ZXIgYXBwcm9h
Y2ggaXMgdG8gaGF2ZSBvbmx5IG9uZSBHc3RHTENvbnRleHQgcGVyIEdMIGNvbnRleHQsCisgICAg
ICAgIGFuZCBpbnN0YW50aWF0ZSBpdCB3aGVuIHRoZSBHTCBjb250ZXh0IGlzIGNyZWF0ZWQgYW5k
IGN1cnJlbnQuIEFuZAorICAgICAgICB0aGlzIHNpbmdsZSBHc3RHTENvbnRleHQgaXMgdXNlZCBp
biBhbGwgdGhlIHZpZGVvIHBsYXllcnMgaW5zaWRlCisgICAgICAgIHRoZSBwYWdlLgorCisgICAg
ICAgIFdyYXBwZWRHTENvbnRleHQgYWJzdHJhY3QgY2xhc3MgaXMgYWRkZWQgaW50bworICAgICAg
ICBXZWJDb3JlOjpHTENvbnRleHQuIFRoaXMgY2xhc3Mgd2lsbCBzdG9yZSBhbnkgd3JhcHBlciBv
ZiB0aGF0IEdMCisgICAgICAgIGNvbnRleHQuIFRoZSB3cmFwcGVyIGlzIGFjY2Vzc2VkIHRocm91
Z2ggYQorICAgICAgICBzZXR0ZXIvZ2V0dGVyLiBXZWJDb3JlOjpHTENvbnRleHQgd2lsbCBrZWVw
IHRoZSB3cmFwcGVyLCBzbyBpdAorICAgICAgICB3b24ndCBuZWVkIHRvIGJlIHJlY3JlYXRlZCBl
dmVyeSB0aW1lIGl0IGlzIHJlcXVpcmVkLgorCisgICAgICAgIFdyYXBwZWRHTENvbnRleHQgY2xh
c3MgaXMgaW1wbGVtZW50ZWQgYXMgR3N0V3JhcHBlZEdMQ29udGV4dCwKKyAgICAgICAgd2hpY2gg
c3RvcmVzIHRoZSBHc3RHTENvbnRleHQsIHdyYXBwaW5nIHRoZSBzaGFyZWQgY29udGV4dC4gVGhl
CisgICAgICAgIHdyYXBwZWQgY29udGV4dCBpcyBpbnN0YW50aWF0ZWQgYW5kIGFzc29jaWF0ZWQg
d2l0aCB0aGUgR0wgY29udGV4dAorICAgICAgICB3aGVuIHByb2JpbmcgdGhlIHBsYXRmb3JtLgor
CisgICAgICAgIEZpbmFsbHksIHRoZSB3cmFwcGVyIGNsYXNzIGlzIHJldHJpZXZlZCB0aHJvdWdo
CisgICAgICAgIFdlYkNvcmU6OkdMQ29udGV4dC4gR3N0V3JhcHBlZEdMQ29udGV4dCBhbHNvIGhl
bGQgYm90aAorICAgICAgICBHc3RHTERpc3BsYXkgYW5kIEdzdEdMQ29udGV4dCwgc28gdGhleSBh
cmUgbGF0ZXIgc2V0IGFzIHByaXZhdGUKKyAgICAgICAgdmFyaWFibGVzIG9mIHZpZGVvIHNpbmsu
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHJlcXVpcmVkLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR0xDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpHTENvbnRleHQ6OnNldFdy
YXBwZWRHTENvbnRleHQpOiBzZXR0ZXIgZm9yCisgICAgICAgIFdyYXBwZWRHTENvbnRleHQuCisg
ICAgICAgIChXZWJDb3JlOjpHTENvbnRleHQ6OndyYXBwZWRHTENvbnRleHQgY29uc3QpOiBnZXR0
ZXIgZm9yCisgICAgICAgIFdyYXBwZWRHTENvbnRleHQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKEdzdFdy
YXBwZWRHTENvbnRleHQ6OmdzdEdMQ29udGV4dCk6IGdldHRlciBmb3IgR3N0R0xDb250ZXh0Lgor
ICAgICAgICAoR3N0V3JhcHBlZEdMQ29udGV4dDo6Z3N0R0xEaXNwbGF5KTogZ2V0dGVyIGZvciBH
c3RHTERpc3BsYXkuCisgICAgICAgIChlbnN1cmVHc3RHTENvbnRleHQpOiBzZXRzIEdzdEdMY29u
dGV4dCBhbmQgR3N0R0xkaXNwbGF5IGZyb20KKyAgICAgICAgV3JhcHBlZEdMQ29udGV4dCB0byB2
aWRlbyBzaW5rIHByaXZhdGUgdmFyaWFibGVzLgorICAgICAgICAoR3N0V3JhcHBlZEdMQ29udGV4
dDo6R3N0V3JhcHBlZEdMQ29udGV4dCk6IEdTdHJlYW1lcgorICAgICAgICBpbXBsZW1lbnRhdGlv
biBmb3IgV3JhcHBlZEdMQ29udGV4dC4KKyAgICAgICAgKHdlYktpdEdMVmlkZW9TaW5rUHJvYmVQ
bGF0Zm9ybSk6IGluc3RhbnRpYXRlcworICAgICAgICBHc3RXYXJwcGVyR0xDb250ZXh0IGdpdmVu
IHRoZSBwbGF0Zm9ybSdzIHNoYXJlZCBjb250ZXh0LgorCiAyMDIwLTAyLTAxICBEYXJpbiBBZGxl
ciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXBsYWNlIFJHQkEzMiB0eXBlZGVmIHdp
dGggYSBjbGFzcyB0byBpbXByb3ZlIHR5cGUgc2FmZXR5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dMQ29udGV4dC5oCmluZGV4IDg5MGZjMjk0YmM0N2RkMTI1YzhiZTdhZDlk
MDE1N2RmNzhmODAwZDguLjM0MGEwNmQzMmM5OTZlNGE3NzYyMjA5MDkyOGQ0NGI1NmI4OGI5MmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5oCkBAIC04
Miw2ICs4MiwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dEdMIHBsYXRmb3JtQ29udGV4dCgpID0gMDsKICNlbmRpZgogCisgICAgY2xhc3MgV3JhcHBlZEdM
Q29udGV4dCB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5XcmFwcGVkR0xDb250ZXh0
KCkgPSBkZWZhdWx0OworICAgIH07CisKKyAgICB2b2lkIHNldFdyYXBwZWRHTENvbnRleHQoc3Rk
Ojp1bmlxdWVfcHRyPFdyYXBwZWRHTENvbnRleHQ+IHdyYXBwZWRDb250ZXh0KSB7IG1fd3JhcHBl
ZEdsQ29udGV4dCA9IFdURk1vdmUod3JhcHBlZENvbnRleHQpOyB9OworICAgIFdyYXBwZWRHTENv
bnRleHQqIHdyYXBwZWRHTENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3dyYXBwZWRHbENvbnRl
eHQuZ2V0KCk7IH0KKwogI2lmIFBMQVRGT1JNKFgxMSkKIHByaXZhdGU6CiAgICAgc3RhdGljIHZv
aWQgYWRkQWN0aXZlQ29udGV4dChHTENvbnRleHQqKTsKQEAgLTk0LDYgKzEwMiw3IEBAIHByb3Rl
Y3RlZDoKIAogICAgIFBsYXRmb3JtRGlzcGxheSYgbV9kaXNwbGF5OwogICAgIHVuc2lnbmVkIG1f
dmVyc2lvbiB7IDAgfTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V3JhcHBlZEdMQ29udGV4dD4gbV93
cmFwcGVkR2xDb250ZXh0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5r
R1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9HTFZpZGVvU2lua0dTdHJlYW1lci5jcHAKaW5kZXggMzY3NjM3Nzg5NjUwZWI3NjZhOWI1MzVi
YzIzMTI1MzAxYTEyODI5Zi4uNThmMGE3OTlkMTVkODA2ZTM5YmEzOTQzNjMwZDA2MGQzZDgxMjNm
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwCkBAIC01OCw2ICs1OCwx
NyBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAorY2xhc3MgR3N0V3JhcHBlZEdMQ29u
dGV4dCA6IHB1YmxpYyBHTENvbnRleHQ6OldyYXBwZWRHTENvbnRleHQgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEdzdFdyYXBwZWRHTENvbnRleHQoUGxhdGZv
cm1EaXNwbGF5JiwgR0xDb250ZXh0Kik7CisgICAgR1JlZlB0cjxHc3RHTENvbnRleHQ+IGdzdEdM
Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xDb250ZXh0OyB9CisgICAgR1JlZlB0cjxHc3RH
TERpc3BsYXk+IGdzdEdMRGlzcGxheSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xEaXNwbGF5OyB9Citw
cml2YXRlOgorICAgIEdSZWZQdHI8R3N0R0xDb250ZXh0PiBtX2dsQ29udGV4dDsKKyAgICBHUmVm
UHRyPEdzdEdMRGlzcGxheT4gbV9nbERpc3BsYXk7Cit9OworCiBlbnVtIHsKICAgICBQUk9QXzAs
CiAgICAgUFJPUF9TVEFUUywKQEAgLTE0OCw1MyArMTU5LDYgQEAgc3RhdGljIGJvb2wgZW5zdXJl
R3N0R0xDb250ZXh0KFdlYktpdEdMVmlkZW9TaW5rKiBzaW5rKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAogICAgIGF1dG8mIHNoYXJlZERpc3BsYXkgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERp
c3BsYXlGb3JDb21wb3NpdGluZygpOwotCi0gICAgLy8gVGhlIGZsb2F0aW5nIHJlZiByZW1vdmFs
IHN1cHBvcnQgd2FzIGFkZGVkIGluIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVn
LmNnaT9pZD03NDMwNjIuCi0gICAgYm9vbCBzaG91bGRBZG9wdFJlZiA9IHdlYmtpdEdzdENoZWNr
VmVyc2lvbigxLCAxNCwgMCk7Ci0gICAgaWYgKCFwcml2LT5nbERpc3BsYXkpIHsKLSNpZiBQTEFU
Rk9STShYMTEpCi0jaWYgVVNFKEdMWCkKLSAgICAgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheVgx
MT4oc2hhcmVkRGlzcGxheSkpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2luaywg
IkNyZWF0aW5nIFgxMSBzaGFyZWQgR0wgZGlzcGxheSIpOwotICAgICAgICAgICAgaWYgKHNob3Vs
ZEFkb3B0UmVmKQotICAgICAgICAgICAgICAgIHByaXYtPmdsRGlzcGxheSA9IGFkb3B0R1JlZihH
U1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV94MTFfbmV3X3dpdGhfZGlzcGxheShkb3duY2Fz
dDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLm5hdGl2ZSgpKSkpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByaXYtPmdsRGlzcGxheSA9IEdTVF9HTF9ESVNQ
TEFZKGdzdF9nbF9kaXNwbGF5X3gxMV9uZXdfd2l0aF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3Jt
RGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkubmF0aXZlKCkpKTsKLSAgICAgICAgfQotI2VsaWYg
VVNFKEVHTCkKLSAgICAgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheVgxMT4oc2hhcmVkRGlzcGxh
eSkpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2luaywgIkNyZWF0aW5nIFgxMSBz
aGFyZWQgRUdMIGRpc3BsYXkiKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRBZG9wdFJlZikKLSAg
ICAgICAgICAgICAgICBwcml2LT5nbERpc3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVko
Z3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3Jt
RGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSkpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHByaXYtPmdsRGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZKGdz
dF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURp
c3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpOwotICAgICAgICB9Ci0jZW5k
aWYKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0FZTEFORCkKLSAgICAgICAgaWYgKGlzPFBsYXRm
b3JtRGlzcGxheVdheWxhbmQ+KHNoYXJlZERpc3BsYXkpKSB7Ci0gICAgICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHNpbmssICJDcmVhdGluZyBXYXlsYW5kIHNoYXJlZCBkaXNwbGF5Iik7Ci0gICAg
ICAgICAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCi0gICAgICAgICAgICAgICAgcHJpdi0+Z2xEaXNw
bGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0
aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlXYXlsYW5kPihzaGFyZWREaXNw
bGF5KS5lZ2xEaXNwbGF5KCkpKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
cHJpdi0+Z2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193
aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVdheWxhbmQ+KHNoYXJlZERp
c3BsYXkpLmVnbERpc3BsYXkoKSkpOwotICAgICAgICB9Ci0jZW5kaWYKLQotI2lmIFVTRShXUEVf
UkVOREVSRVIpCi0gICAgICAgIGlmIChpczxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJlZERp
c3BsYXkpKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNpbmssICJDcmVhdGluZyBX
UEUgc2hhcmVkIEVHTCBkaXNwbGF5Iik7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkQWRvcHRSZWYp
Ci0gICAgICAgICAgICAgICAgcHJpdi0+Z2xEaXNwbGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQ
TEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0
Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcml2LT5nbERpc3BsYXkgPSBHU1RfR0xfRElT
UExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxh
dGZvcm1EaXNwbGF5TGliV1BFPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsKLSAgICAg
ICAgfQotI2VuZGlmCi0KLSAgICAgICAgQVNTRVJUKHByaXYtPmdsRGlzcGxheSk7Ci0gICAgfQot
CiAgICAgR0xDb250ZXh0KiBzaGFyZWRDb250ZXh0ID0gc2hhcmVkRGlzcGxheS5zaGFyaW5nR0xD
b250ZXh0KCk7CiAgICAgaWYgKCFzaGFyZWRDb250ZXh0KSB7CiAgICAgICAgIEdTVF9FTEVNRU5U
X0VSUk9SKEdTVF9FTEVNRU5UX0NBU1Qoc2luayksIFJFU09VUkNFLCBOT1RfRk9VTkQsICgoIldl
YktpdCBzaGFyZWQgR0wgY29udGV4dCB1bmF2YWlsYWJsZSIpKSwKQEAgLTIwMiwzOCArMTY2LDE2
IEBAIHN0YXRpYyBib29sIGVuc3VyZUdzdEdMQ29udGV4dChXZWJLaXRHTFZpZGVvU2luayogc2lu
aykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIC8vIEVHTCBhbmQgR0xYIGFy
ZSBtdXR1YWxseSBleGNsdXNpdmUsIG5vIG5lZWQgZm9yIGlmZGVmcyBoZXJlLgotICAgIEdzdEdM
UGxhdGZvcm0gZ2xQbGF0Zm9ybSA9IHNoYXJlZENvbnRleHQtPmlzRUdMQ29udGV4dCgpID8gR1NU
X0dMX1BMQVRGT1JNX0VHTCA6IEdTVF9HTF9QTEFURk9STV9HTFg7Ci0KLSNpZiBVU0UoT1BFTkdM
X0VTKQotICAgIEdzdEdMQVBJIGdsQVBJID0gR1NUX0dMX0FQSV9HTEVTMjsKLSNlbGlmIFVTRShP
UEVOR0wpCi0gICAgR3N0R0xBUEkgZ2xBUEkgPSBHU1RfR0xfQVBJX09QRU5HTDsKLSNlbHNlCi0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLQotICAgIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0R0wgY29udGV4dEhhbmRsZSA9IHNoYXJlZENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
OwotICAgIGlmICghY29udGV4dEhhbmRsZSkKKyAgICBhdXRvIHdyYXBwZWRHTENvbnRleHQgPSBz
aGFyZWRDb250ZXh0LT53cmFwcGVkR0xDb250ZXh0KCk7CisgICAgaWYgKCF3cmFwcGVkR0xDb250
ZXh0KSB7CisgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKEdTVF9FTEVNRU5UX0NBU1Qoc2luayks
IFJFU09VUkNFLCBOT1RfRk9VTkQsICgoIldlYktpdCBzaGFyZWQgR0wgd3JhcHBlcmQgY29udGV4
dCB1bmF2YWlsYWJsZSIpKSwKKyAgICAgICAgICAgICgiVGhlIFdlYktpdCBzaGFyZWQgR0wgd3Jh
cHBlZCBjb250ZXh0IHNvbWVob3cgZGlzYXBwZWFyZWQuIFZpZGVvIHRleHR1cmVzIHJlbmRlcmlu
ZyB3aWxsIGZhaWwuIikpOwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgaWYg
KHNob3VsZEFkb3B0UmVmKQotICAgICAgICBwcml2LT5nbENvbnRleHQgPSBhZG9wdEdSZWYoZ3N0
X2dsX2NvbnRleHRfbmV3X3dyYXBwZWQocHJpdi0+Z2xEaXNwbGF5LmdldCgpLCByZWludGVycHJl
dF9jYXN0PGd1aW50cHRyPihjb250ZXh0SGFuZGxlKSwgZ2xQbGF0Zm9ybSwgZ2xBUEkpKTsKLSAg
ICBlbHNlCi0gICAgICAgIHByaXYtPmdsQ29udGV4dCA9IGdzdF9nbF9jb250ZXh0X25ld193cmFw
cGVkKHByaXYtPmdsRGlzcGxheS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxndWludHB0cj4oY29u
dGV4dEhhbmRsZSksIGdsUGxhdGZvcm0sIGdsQVBJKTsKLQotICAgIC8vIEFjdGl2YXRlIGFuZCBm
aWxsIHRoZSBHU3RyZWFtZXIgd3JhcHBlZCBjb250ZXh0IHdpdGggdGhlIFdlYmtpdCdzIHNoYXJl
ZCBvbmUuCi0gICAgYXV0byogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJy
ZW50KCk7Ci0gICAgc2hhcmVkQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYg
KGdzdF9nbF9jb250ZXh0X2FjdGl2YXRlKHByaXYtPmdsQ29udGV4dC5nZXQoKSwgVFJVRSkpIHsK
LSAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOwotICAgICAgICBpZiAoIWdzdF9n
bF9jb250ZXh0X2ZpbGxfaW5mbyhwcml2LT5nbENvbnRleHQuZ2V0KCksICZlcnJvci5vdXRQdHIo
KSkpCi0gICAgICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIGZpbGwgaW4gR1N0cmVhbWVy
IGNvbnRleHQ6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOwotICAgICAgICBnc3RfZ2xfY29udGV4dF9h
Y3RpdmF0ZShwcml2LT5nbENvbnRleHQuZ2V0KCksIEZBTFNFKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0byBhY3RpdmF0ZSBHU3RyZWFtZXIgY29udGV4dCAlIiBH
U1RfUFRSX0ZPUk1BVCwgcHJpdi0+Z2xDb250ZXh0LmdldCgpKTsKLSAgICBpZiAocHJldmlvdXNB
Y3RpdmVDb250ZXh0KQotICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGF1dG8qIGdzdFdyYXBwZWRHTENvbnRleHQgPSBzdGF0aWNfY2FzdDxH
c3RXcmFwcGVkR0xDb250ZXh0Kj4od3JhcHBlZEdMQ29udGV4dCk7CisgICAgcHJpdi0+Z2xDb250
ZXh0ID0gZ3N0V3JhcHBlZEdMQ29udGV4dC0+Z3N0R0xDb250ZXh0KCk7CisgICAgcHJpdi0+Z2xE
aXNwbGF5ID0gZ3N0V3JhcHBlZEdMQ29udGV4dC0+Z3N0R0xEaXNwbGF5KCk7CiAKICAgICByZXR1
cm4gdHJ1ZTsKIH0KQEAgLTM3NCwxNiArMzE2LDEwMyBAQCB2b2lkIHdlYktpdEdMVmlkZW9TaW5r
U2V0TWVkaWFQbGF5ZXJQcml2YXRlKFdlYktpdEdMVmlkZW9TaW5rKiBzaW5rLCBNZWRpYVBsYXll
cgogICAgIH0sIHBsYXllciwgbnVsbHB0cik7CiB9CiAKK0dzdFdyYXBwZWRHTENvbnRleHQ6Okdz
dFdyYXBwZWRHTENvbnRleHQoUGxhdGZvcm1EaXNwbGF5JiBkaXNwbGF5LCBHTENvbnRleHQqIGNv
bnRleHQpCit7CisgICAgLy8gVGhlIGZsb2F0aW5nIHJlZiByZW1vdmFsIHN1cHBvcnQgd2FzIGFk
ZGVkIGluIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDMwNjIu
CisgICAgYm9vbCBzaG91bGRBZG9wdFJlZiA9IHdlYmtpdEdzdENoZWNrVmVyc2lvbigxLCAxNCwg
MCk7CisgICAgaWYgKCFtX2dsRGlzcGxheSkgeworI2lmIFBMQVRGT1JNKFgxMSkKKyNpZiBVU0Uo
R0xYKQorICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5WDExPihkaXNwbGF5KSkgeworICAg
ICAgICAgICAgR1NUX0RFQlVHKCJDcmVhdGluZyBYMTEgc2hhcmVkIEdMIGRpc3BsYXkiKTsKKyAg
ICAgICAgICAgIGlmIChzaG91bGRBZG9wdFJlZikKKyAgICAgICAgICAgICAgICBtX2dsRGlzcGxh
eSA9IGFkb3B0R1JlZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV94MTFfbmV3X3dpdGhf
ZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KGRpc3BsYXkpLm5hdGl2ZSgpKSkp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gR1NUX0dM
X0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfeDExX25ld193aXRoX2Rpc3BsYXkoZG93bmNhc3Q8UGxh
dGZvcm1EaXNwbGF5WDExPihkaXNwbGF5KS5uYXRpdmUoKSkpOworICAgICAgICB9CisjZWxpZiBV
U0UoRUdMKQorICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5
KSkgeworICAgICAgICAgICAgR1NUX0RFQlVHKCJDcmVhdGluZyBYMTEgc2hhcmVkIEVHTCBkaXNw
bGF5Iik7CisgICAgICAgICAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCisgICAgICAgICAgICAgICAg
bV9nbERpc3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWds
X25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVgxMT4oZGlzcGxh
eSkuZWdsRGlzcGxheSgpKSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1f
Z2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2Vn
bF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVgxMT4oZGlzcGxheSkuZWdsRGlzcGxh
eSgpKSk7CisgICAgICAgIH0KKyNlbmRpZgorI2VuZGlmCisKKyNpZiBQTEFURk9STShXQVlMQU5E
KQorICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5V2F5bGFuZD4oZGlzcGxheSkpIHsKKyAg
ICAgICAgICAgIEdTVF9ERUJVRygiQ3JlYXRpbmcgV2F5bGFuZCBzaGFyZWQgZGlzcGxheSIpOwor
ICAgICAgICAgICAgaWYgKHNob3VsZEFkb3B0UmVmKQorICAgICAgICAgICAgICAgIG1fZ2xEaXNw
bGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0
aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlXYXlsYW5kPihkaXNwbGF5KS5l
Z2xEaXNwbGF5KCkpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9nbERp
c3BsYXkgPSBHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rp
c3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5V2F5bGFuZD4oZGlzcGxheSkuZWdsRGlzcGxh
eSgpKSk7CisgICAgICAgIH0KKyNlbmRpZgorCisjaWYgVVNFKFdQRV9SRU5ERVJFUikKKyAgICAg
ICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheUxpYldQRT4oZGlzcGxheSkpIHsKKyAgICAgICAgICAg
IEdTVF9ERUJVRygiQ3JlYXRpbmcgV1BFIHNoYXJlZCBFR0wgZGlzcGxheSIpOworICAgICAgICAg
ICAgaWYgKHNob3VsZEFkb3B0UmVmKQorICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gYWRv
cHRHUmVmKEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlz
cGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KGRpc3BsYXkpLmVnbERpc3BsYXko
KSkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IEdT
VF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3du
Y2FzdDxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KGRpc3BsYXkpLmVnbERpc3BsYXkoKSkpOworICAg
ICAgICB9CisjZW5kaWYKKworICAgICAgICBBU1NFUlQobV9nbERpc3BsYXkpOworICAgIH0KKwor
ICAgIC8vIEVHTCBhbmQgR0xYIGFyZSBtdXR1YWxseSBleGNsdXNpdmUsIG5vIG5lZWQgZm9yIGlm
ZGVmcyBoZXJlLgorICAgIEdzdEdMUGxhdGZvcm0gZ2xQbGF0Zm9ybSA9IGNvbnRleHQtPmlzRUdM
Q29udGV4dCgpID8gR1NUX0dMX1BMQVRGT1JNX0VHTCA6IEdTVF9HTF9QTEFURk9STV9HTFg7CisK
KyNpZiBVU0UoT1BFTkdMX0VTKQorICAgIEdzdEdMQVBJIGdsQVBJID0gR1NUX0dMX0FQSV9HTEVT
MjsKKyNlbGlmIFVTRShPUEVOR0wpCisgICAgR3N0R0xBUEkgZ2xBUEkgPSBHU1RfR0xfQVBJX09Q
RU5HTDsKKyNlbHNlCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKworICAgIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgY29udGV4dEhhbmRsZSA9IGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpOworICAgIEFTU0VSVChjb250ZXh0SGFuZGxlKTsKKworICAgIGlmIChzaG91bGRB
ZG9wdFJlZikKKyAgICAgICAgbV9nbENvbnRleHQgPSBhZG9wdEdSZWYoZ3N0X2dsX2NvbnRleHRf
bmV3X3dyYXBwZWQobV9nbERpc3BsYXkuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3VpbnRwdHI+
KGNvbnRleHRIYW5kbGUpLCBnbFBsYXRmb3JtLCBnbEFQSSkpOworICAgIGVsc2UKKyAgICAgICAg
bV9nbENvbnRleHQgPSBnc3RfZ2xfY29udGV4dF9uZXdfd3JhcHBlZChtX2dsRGlzcGxheS5nZXQo
KSwgcmVpbnRlcnByZXRfY2FzdDxndWludHB0cj4oY29udGV4dEhhbmRsZSksIGdsUGxhdGZvcm0s
IGdsQVBJKTsKKworICAgIC8vIEFjdGl2YXRlIGFuZCBmaWxsIHRoZSBHU3RyZWFtZXIgd3JhcHBl
ZCBjb250ZXh0IHdpdGggdGhlIFdlYmtpdCdzIHNoYXJlZCBvbmUuCisgICAgYXV0byogcHJldmlv
dXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7CisgICAgY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKGdzdF9nbF9jb250ZXh0X2FjdGl2YXRlKG1fZ2xD
b250ZXh0LmdldCgpLCBUUlVFKSkgeworICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJy
b3I7CisgICAgICAgIGlmICghZ3N0X2dsX2NvbnRleHRfZmlsbF9pbmZvKG1fZ2xDb250ZXh0Lmdl
dCgpLCAmZXJyb3Iub3V0UHRyKCkpKQorICAgICAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0
byBmaWxsIGluIEdTdHJlYW1lciBjb250ZXh0OiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKyAgICAg
ICAgZ3N0X2dsX2NvbnRleHRfYWN0aXZhdGUobV9nbENvbnRleHQuZ2V0KCksIEZBTFNFKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0byBhY3RpdmF0ZSBHU3RyZWFt
ZXIgY29udGV4dCAlIiBHU1RfUFRSX0ZPUk1BVCwgbV9nbENvbnRleHQuZ2V0KCkpOworICAgIGlm
IChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCisgICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisKIGJvb2wgd2ViS2l0R0xWaWRlb1NpbmtQcm9iZVBs
YXRmb3JtKCkKIHsKICAgICBhdXRvJiBzaGFyZWREaXNwbGF5ID0gUGxhdGZvcm1EaXNwbGF5Ojpz
aGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKTsKLSAgICBHTENvbnRleHQqIHNoYXJlZENvbnRl
eHQgPSBzaGFyZWREaXNwbGF5LnNoYXJpbmdHTENvbnRleHQoKTsKKyAgICBhdXRvKiBzaGFyZWRD
b250ZXh0ID0gc2hhcmVkRGlzcGxheS5zaGFyaW5nR0xDb250ZXh0KCk7CiAgICAgaWYgKCFzaGFy
ZWRDb250ZXh0KSB7CiAgICAgICAgIEdTVF9XQVJOSU5HKCJXZWJLaXQgc2hhcmVkIEdMIGNvbnRl
eHQgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAot
ICAgIHJldHVybiBpc0dTdHJlYW1lclBsdWdpbkF2YWlsYWJsZSgiYXBwIikgJiYgaXNHU3RyZWFt
ZXJQbHVnaW5BdmFpbGFibGUoIm9wZW5nbCIpOworICAgIGlmICghKGlzR1N0cmVhbWVyUGx1Z2lu
QXZhaWxhYmxlKCJhcHAiKSAmJiBpc0dTdHJlYW1lclBsdWdpbkF2YWlsYWJsZSgib3BlbmdsIikp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXNoYXJlZENvbnRleHQtPndyYXBw
ZWRHTENvbnRleHQoKSkKKyAgICAgICAgc2hhcmVkQ29udGV4dC0+c2V0V3JhcHBlZEdMQ29udGV4
dChtYWtlVW5pcXVlPEdzdFdyYXBwZWRHTENvbnRleHQ+KHNoYXJlZERpc3BsYXksIHNoYXJlZENv
bnRleHQpKTsKKworICAgIHJldHVybiB0cnVlOwogfQogCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390380</attachid>
            <date>2020-02-11 09:56:03 -0800</date>
            <delta_ts>2020-02-18 08:03:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200626-20200211185601.patch</filename>
            <type>text/plain</type>
            <size>15051</size>
            <attacher name="Víctor M. Jáquez L.">vjaquez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2Mjk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzkxNjNkNDkyYjY1MzM5
OTczNTgzZGQ1NTE2NjgxZmNhZTgyMmIyMi4uMzExOWZhOTg2NDljYWNiNjM3MDU2ZTk3MTg2ODI5
NTc2ODVkOTgyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDIwLTAyLTEwICBWw61j
dG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgIDx2amFxdWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAg
W0dMXVtHU3RyZWFtZXJdIEluc3RhbnRpYXRlIEdzdEdMQ29udGV4dCB3aGVuIHRoZSBzaGFyZWQg
R0xDb250ZXh0IGlzIGNyZWF0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMDYyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJpZ2h0IG5vdyBvbmUgR3N0R0xDb250ZXh0IGlzIGNyZWF0ZWQgcGVyIHZp
ZGVvIHRhZywgd2hpY2ggaXMgYQorICAgICAgICB3cmFwcGVyIG9mIHRoZSBHTCBzaGFyZWQgY29u
dGV4dC4gRXZlcnkgdGltZSB0aGlzIHdyYXBwZXIgaXMKKyAgICAgICAgY3JlYXRlZCB0aGUgR0wg
Y29udGV4dCBoYXMgdG8gYmUgY3VycmVudCBpbiBvcmRlciB0byBpbml0aWFsaXplCisgICAgICAg
IHRoZSB3cmFwcGVyJ3MgaW50ZXJuYWwgc3RhdGUuCisKKyAgICAgICAgQSBiZXR0ZXIgYXBwcm9h
Y2ggaXMgdG8gaGF2ZSBvbmx5IG9uZSBHc3RHTENvbnRleHQgcGVyIEdMIGNvbnRleHQsCisgICAg
ICAgIGFuZCBpbnN0YW50aWF0ZSBpdCB3aGVuIHRoZSBHTCBjb250ZXh0IGlzIGNyZWF0ZWQgYW5k
IGN1cnJlbnQuIEFuZAorICAgICAgICB0aGlzIHNpbmdsZSBHc3RHTENvbnRleHQgaXMgdXNlZCBp
biBhbGwgdGhlIHZpZGVvIHBsYXllcnMgaW5zaWRlCisgICAgICAgIHRoZSBwYWdlLgorCisgICAg
ICAgIFdyYXBwZWRHTENvbnRleHQgYWJzdHJhY3QgY2xhc3MgaXMgYWRkZWQgaW50bworICAgICAg
ICBXZWJDb3JlOjpHTENvbnRleHQuIFRoaXMgY2xhc3Mgd2lsbCBhZGQgYSBnZW5lcmljIHdyYXBw
ZXIgb2YgdGhhdAorICAgICAgICBHTCBjb250ZXh0LiBUaGUgd3JhcHBlciBpcyBhY2Nlc3NlZCB0
aHJvdWdoIGEKKyAgICAgICAgZ2V0dGVyLiBXZWJDb3JlOjpHTENvbnRleHQgd2lsbCBrZWVwIHRo
ZSB3cmFwcGVyLCBzbyBpdCB3b24ndCBuZWVkCisgICAgICAgIHRvIGJlIHJlY3JlYXRlZCBldmVy
eSB0aW1lIGl0IGlzIHJlcXVpcmVkLgorCisgICAgICAgIFdyYXBwZWRHTENvbnRleHQgY2xhc3Mg
aXMgaW1wbGVtZW50ZWQgYXMgR3N0V3JhcHBlZEdMQ29udGV4dCwKKyAgICAgICAgd2hpY2ggc3Rv
cmVzIHRoZSBHc3RHTENvbnRleHQsIHdyYXBwaW5nIHRoZSBzaGFyZWQgY29udGV4dC4gVGhlCisg
ICAgICAgIHdyYXBwZWQgY29udGV4dCBpcyBpbnN0YW50aWF0ZWQgYW5kIGFzc29jaWF0ZWQgd2l0
aCB0aGUgR0wgY29udGV4dAorICAgICAgICB3aGVuIHByb2JpbmcgdGhlIHBsYXRmb3JtLgorCisg
ICAgICAgIEZpbmFsbHksIHRoZSB3cmFwcGVyIGNsYXNzIGlzIHJldHJpZXZlZCB0aHJvdWdoCisg
ICAgICAgIFdlYkNvcmU6OkdMQ29udGV4dC4gR3N0V3JhcHBlZEdMQ29udGV4dCBhbHNvIGhlbGQg
Ym90aAorICAgICAgICBHc3RHTERpc3BsYXkgYW5kIEdzdEdMQ29udGV4dCwgc28gdGhleSBhcmUg
bGF0ZXIgc2V0IGFzIHByaXZhdGUKKyAgICAgICAgdmFyaWFibGVzIG9mIHZpZGVvIHNpbmsuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzIHJlcXVpcmVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvR0xDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpHTENvbnRleHQ6OnNldFdyYXBw
ZWRHTENvbnRleHQpOiBzZXR0ZXIgZm9yCisgICAgICAgIFdyYXBwZWRHTENvbnRleHQuCisgICAg
ICAgIChXZWJDb3JlOjpHTENvbnRleHQ6OndyYXBwZWRHTENvbnRleHQgY29uc3QpOiBnZXR0ZXIg
Zm9yCisgICAgICAgIFdyYXBwZWRHTENvbnRleHQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKEdzdFdyYXBw
ZWRHTENvbnRleHQ6OmdzdEdMQ29udGV4dCk6IGdldHRlciBmb3IgR3N0R0xDb250ZXh0LgorICAg
ICAgICAoR3N0V3JhcHBlZEdMQ29udGV4dDo6Z3N0R0xEaXNwbGF5KTogZ2V0dGVyIGZvciBHc3RH
TERpc3BsYXkuCisgICAgICAgIChlbnN1cmVHc3RHTENvbnRleHQpOiBzZXRzIEdzdEdMY29udGV4
dCBhbmQgR3N0R0xkaXNwbGF5IGZyb20KKyAgICAgICAgV3JhcHBlZEdMQ29udGV4dCB0byB2aWRl
byBzaW5rIHByaXZhdGUgdmFyaWFibGVzLgorICAgICAgICAoR3N0V3JhcHBlZEdMQ29udGV4dDo6
R3N0V3JhcHBlZEdMQ29udGV4dCk6IEdTdHJlYW1lcgorICAgICAgICBpbXBsZW1lbnRhdGlvbiBm
b3IgV3JhcHBlZEdMQ29udGV4dC4KKyAgICAgICAgKHdlYktpdEdMVmlkZW9TaW5rUHJvYmVQbGF0
Zm9ybSk6IGluc3RhbnRpYXRlcworICAgICAgICBHc3RXYXJwcGVyR0xDb250ZXh0IGdpdmVuIHRo
ZSBwbGF0Zm9ybSdzIHNoYXJlZCBjb250ZXh0LgorCiAyMDIwLTAxLTMwICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbV1BFXSBBZGQgaW5pdGlh
bCBzdXBwb3J0IGZvciByZW5kZXJpbmcgc2Nyb2xsYmFycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAKaW5kZXggYjIxNzk4OGI5OTBlMWEwNmEzYzFm
N2Q3MjFjYTY1OTE1NTY4MDlmZi4uOTIzMDFmNGYyMzRlODhmM2ZkOWQxNDNkZDk4ZWQzMThhYjAx
Y2MzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQu
Y3BwCkBAIC0xMzQsNiArMTM0LDkgQEAgR0xDb250ZXh0Ojp+R0xDb250ZXh0KCkKIHsKICAgICBp
ZiAodGhpcyA9PSBjdXJyZW50Q29udGV4dCgpLT5jb250ZXh0KCkpCiAgICAgICAgIGN1cnJlbnRD
b250ZXh0KCktPnNldENvbnRleHQobnVsbHB0cik7CisKKyAgICBpZiAobV93cmFwcGVkR2xDb250
ZXh0LmdldCgpKQorICAgICAgICBtX3dyYXBwZWRHbENvbnRleHQtPmRpZERlc3Ryb3lHTENvbnRl
eHQoKTsKIH0KIAogYm9vbCBHTENvbnRleHQ6Om1ha2VDb250ZXh0Q3VycmVudCgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5oCmluZGV4IDg5MGZjMjk0YmM0
N2RkMTI1YzhiZTdhZDlkMDE1N2RmNzhmODAwZDguLmI0NWZhYTEwNzE5MDhmMmQyMzk1Nzk4YjUw
N2RiN2E3OThmY2MzNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dMQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dM
Q29udGV4dC5oCkBAIC04Miw2ICs4MiwxNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dEdMIHBsYXRmb3JtQ29udGV4dCgpID0gMDsKICNlbmRpZgogCisgICAg
Y2xhc3MgV3JhcHBlZEdMQ29udGV4dCB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkRGVzdHJveUdMQ29udGV4dCgpID0gMDsKKyAgICAgICAgdmlydHVhbCB+V3JhcHBlZEdM
Q29udGV4dCgpID0gZGVmYXVsdDsKKyAgICB9OworCisgICAgdm9pZCBhZGRXcmFwcGVkR0xDb250
ZXh0KHN0ZDo6dW5pcXVlX3B0cjxXcmFwcGVkR0xDb250ZXh0PiB3cmFwcGVkQ29udGV4dCkgeyBt
X3dyYXBwZWRHbENvbnRleHQgPSBXVEZNb3ZlKHdyYXBwZWRDb250ZXh0KTsgfTsKKyAgICBXcmFw
cGVkR0xDb250ZXh0KiB3cmFwcGVkR0xDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV93cmFwcGVk
R2xDb250ZXh0LmdldCgpOyB9CisKICNpZiBQTEFURk9STShYMTEpCiBwcml2YXRlOgogICAgIHN0
YXRpYyB2b2lkIGFkZEFjdGl2ZUNvbnRleHQoR0xDb250ZXh0Kik7CkBAIC05NCw2ICsxMDMsNyBA
QCBwcm90ZWN0ZWQ6CiAKICAgICBQbGF0Zm9ybURpc3BsYXkmIG1fZGlzcGxheTsKICAgICB1bnNp
Z25lZCBtX3ZlcnNpb24geyAwIH07CisgICAgc3RkOjp1bmlxdWVfcHRyPFdyYXBwZWRHTENvbnRl
eHQ+IG1fd3JhcHBlZEdsQ29udGV4dDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZp
ZGVvU2lua0dTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwCmluZGV4IDM2NzYzNzc4OTY1MGViNzY2
YTliNTM1YmMyMzEyNTMwMWExMjgyOWYuLjVkNDEyMTE5ZTY5YTI2OTFjMGVhZWRmMzY3ZjM0NjVm
YmY5ODgxMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9HTFZpZGVvU2lua0dTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNwcApAQCAtNTgs
NiArNTgsMTggQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK2NsYXNzIEdzdFdyYXBw
ZWRHTENvbnRleHQgZmluYWwgOiBwdWJsaWMgR0xDb250ZXh0OjpXcmFwcGVkR0xDb250ZXh0IHsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBHc3RXcmFwcGVkR0xD
b250ZXh0KFBsYXRmb3JtRGlzcGxheSYsIEdMQ29udGV4dCopOworICAgIHZvaWQgZGlkRGVzdHJv
eUdMQ29udGV4dCgpIG92ZXJyaWRlIHsgfTsKKyAgICBHUmVmUHRyPEdzdEdMQ29udGV4dD4gZ3N0
R0xDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9nbENvbnRleHQ7IH0KKyAgICBHUmVmUHRyPEdz
dEdMRGlzcGxheT4gZ3N0R0xEaXNwbGF5KCkgY29uc3QgeyByZXR1cm4gbV9nbERpc3BsYXk7IH0K
K3ByaXZhdGU6CisgICAgR1JlZlB0cjxHc3RHTENvbnRleHQ+IG1fZ2xDb250ZXh0OworICAgIEdS
ZWZQdHI8R3N0R0xEaXNwbGF5PiBtX2dsRGlzcGxheTsKK307CisKIGVudW0gewogICAgIFBST1Bf
MCwKICAgICBQUk9QX1NUQVRTLApAQCAtMTQ4LDkyICsxNjAsMjMgQEAgc3RhdGljIGJvb2wgZW5z
dXJlR3N0R0xDb250ZXh0KFdlYktpdEdMVmlkZW9TaW5rKiBzaW5rKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIGF1dG8mIHNoYXJlZERpc3BsYXkgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJl
ZERpc3BsYXlGb3JDb21wb3NpdGluZygpOwotCi0gICAgLy8gVGhlIGZsb2F0aW5nIHJlZiByZW1v
dmFsIHN1cHBvcnQgd2FzIGFkZGVkIGluIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3df
YnVnLmNnaT9pZD03NDMwNjIuCi0gICAgYm9vbCBzaG91bGRBZG9wdFJlZiA9IHdlYmtpdEdzdENo
ZWNrVmVyc2lvbigxLCAxNCwgMCk7Ci0gICAgaWYgKCFwcml2LT5nbERpc3BsYXkpIHsKLSNpZiBQ
TEFURk9STShYMTEpCi0jaWYgVVNFKEdMWCkKLSAgICAgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxh
eVgxMT4oc2hhcmVkRGlzcGxheSkpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2lu
aywgIkNyZWF0aW5nIFgxMSBzaGFyZWQgR0wgZGlzcGxheSIpOwotICAgICAgICAgICAgaWYgKHNo
b3VsZEFkb3B0UmVmKQotICAgICAgICAgICAgICAgIHByaXYtPmdsRGlzcGxheSA9IGFkb3B0R1Jl
ZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV94MTFfbmV3X3dpdGhfZGlzcGxheShkb3du
Y2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLm5hdGl2ZSgpKSkpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByaXYtPmdsRGlzcGxheSA9IEdTVF9HTF9E
SVNQTEFZKGdzdF9nbF9kaXNwbGF5X3gxMV9uZXdfd2l0aF9kaXNwbGF5KGRvd25jYXN0PFBsYXRm
b3JtRGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkubmF0aXZlKCkpKTsKLSAgICAgICAgfQotI2Vs
aWYgVVNFKEVHTCkKLSAgICAgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheVgxMT4oc2hhcmVkRGlz
cGxheSkpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2luaywgIkNyZWF0aW5nIFgx
MSBzaGFyZWQgRUdMIGRpc3BsYXkiKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRBZG9wdFJlZikK
LSAgICAgICAgICAgICAgICBwcml2LT5nbERpc3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BM
QVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRm
b3JtRGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSkpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHByaXYtPmdsRGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZ
KGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9y
bURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpOwotICAgICAgICB9Ci0j
ZW5kaWYKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0FZTEFORCkKLSAgICAgICAgaWYgKGlzPFBs
YXRmb3JtRGlzcGxheVdheWxhbmQ+KHNoYXJlZERpc3BsYXkpKSB7Ci0gICAgICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKHNpbmssICJDcmVhdGluZyBXYXlsYW5kIHNoYXJlZCBkaXNwbGF5Iik7Ci0g
ICAgICAgICAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCi0gICAgICAgICAgICAgICAgcHJpdi0+Z2xE
aXNwbGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdf
d2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlXYXlsYW5kPihzaGFyZWRE
aXNwbGF5KS5lZ2xEaXNwbGF5KCkpKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgcHJpdi0+Z2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25l
d193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVdheWxhbmQ+KHNoYXJl
ZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpOwotICAgICAgICB9Ci0jZW5kaWYKLQotI2lmIFVTRShX
UEVfUkVOREVSRVIpCi0gICAgICAgIGlmIChpczxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJl
ZERpc3BsYXkpKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNpbmssICJDcmVhdGlu
ZyBXUEUgc2hhcmVkIEVHTCBkaXNwbGF5Iik7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkQWRvcHRS
ZWYpCi0gICAgICAgICAgICAgICAgcHJpdi0+Z2xEaXNwbGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9E
SVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQ
bGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcml2LT5nbERpc3BsYXkgPSBHU1RfR0xf
RElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8
UGxhdGZvcm1EaXNwbGF5TGliV1BFPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsKLSAg
ICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgQVNTRVJUKHByaXYtPmdsRGlzcGxheSk7Ci0gICAg
fQotCiAgICAgR0xDb250ZXh0KiBzaGFyZWRDb250ZXh0ID0gc2hhcmVkRGlzcGxheS5zaGFyaW5n
R0xDb250ZXh0KCk7CiAgICAgaWYgKCFzaGFyZWRDb250ZXh0KSB7CiAgICAgICAgIEdTVF9FTEVN
RU5UX0VSUk9SKEdTVF9FTEVNRU5UX0NBU1Qoc2luayksIFJFU09VUkNFLCBOT1RfRk9VTkQsICgo
IldlYktpdCBzaGFyZWQgR0wgY29udGV4dCB1bmF2YWlsYWJsZSIpKSwKLSAgICAgICAgICAgICgi
VGhlIFdlYktpdCBzaGFyZWQgR0wgY29udGV4dCBzb21laG93IGRpc2FwcGVhcmVkLiBWaWRlbyB0
ZXh0dXJlcyByZW5kZXJpbmcgd2lsbCBmYWlsLiIpKTsKKyAgICAgICAgICAgICgiVGhlIFdlYktp
dCBzaGFyZWQgR0wgY29udGV4dCBzb21laG93IGRpc2FwcGVhcmVkLiBWaWRlbyB0ZXh0dXJlIHJl
bmRlcmluZyB3aWxsIGZhaWwuIikpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgLy8gRUdMIGFuZCBHTFggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgbm8gbmVlZCBmb3IgaWZk
ZWZzIGhlcmUuCi0gICAgR3N0R0xQbGF0Zm9ybSBnbFBsYXRmb3JtID0gc2hhcmVkQ29udGV4dC0+
aXNFR0xDb250ZXh0KCkgPyBHU1RfR0xfUExBVEZPUk1fRUdMIDogR1NUX0dMX1BMQVRGT1JNX0dM
WDsKLQotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgR3N0R0xBUEkgZ2xBUEkgPSBHU1RfR0xfQVBJ
X0dMRVMyOwotI2VsaWYgVVNFKE9QRU5HTCkKLSAgICBHc3RHTEFQSSBnbEFQSSA9IEdTVF9HTF9B
UElfT1BFTkdMOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotCi0g
ICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBjb250ZXh0SGFuZGxlID0gc2hhcmVkQ29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0SGFuZGxlKQorICAgIGF1dG8g
d3JhcHBlZEdMQ29udGV4dCA9IHNoYXJlZENvbnRleHQtPndyYXBwZWRHTENvbnRleHQoKTsKKyAg
ICBpZiAoIXdyYXBwZWRHTENvbnRleHQpIHsKKyAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IoR1NU
X0VMRU1FTlRfQ0FTVChzaW5rKSwgUkVTT1VSQ0UsIE5PVF9GT1VORCwgKCgiV2ViS2l0IHNoYXJl
ZCBHTCB3cmFwcGVkIGNvbnRleHQgdW5hdmFpbGFibGUiKSksCisgICAgICAgICAgICAoIlRoZSBX
ZWJLaXQgc2hhcmVkIEdMIHdyYXBwZWQgY29udGV4dCBzb21laG93IGRpc2FwcGVhcmVkLiBWaWRl
byB0ZXh0dXJlIHJlbmRlcmluZyB3aWxsIGZhaWwuIikpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQogCi0gICAgaWYgKHNob3VsZEFkb3B0UmVmKQotICAgICAgICBwcml2LT5nbENvbnRl
eHQgPSBhZG9wdEdSZWYoZ3N0X2dsX2NvbnRleHRfbmV3X3dyYXBwZWQocHJpdi0+Z2xEaXNwbGF5
LmdldCgpLCByZWludGVycHJldF9jYXN0PGd1aW50cHRyPihjb250ZXh0SGFuZGxlKSwgZ2xQbGF0
Zm9ybSwgZ2xBUEkpKTsKLSAgICBlbHNlCi0gICAgICAgIHByaXYtPmdsQ29udGV4dCA9IGdzdF9n
bF9jb250ZXh0X25ld193cmFwcGVkKHByaXYtPmdsRGlzcGxheS5nZXQoKSwgcmVpbnRlcnByZXRf
Y2FzdDxndWludHB0cj4oY29udGV4dEhhbmRsZSksIGdsUGxhdGZvcm0sIGdsQVBJKTsKLQotICAg
IC8vIEFjdGl2YXRlIGFuZCBmaWxsIHRoZSBHU3RyZWFtZXIgd3JhcHBlZCBjb250ZXh0IHdpdGgg
dGhlIFdlYmtpdCdzIHNoYXJlZCBvbmUuCi0gICAgYXV0byogcHJldmlvdXNBY3RpdmVDb250ZXh0
ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7Ci0gICAgc2hhcmVkQ29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgaWYgKGdzdF9nbF9jb250ZXh0X2FjdGl2YXRlKHByaXYtPmdsQ29udGV4
dC5nZXQoKSwgVFJVRSkpIHsKLSAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOwot
ICAgICAgICBpZiAoIWdzdF9nbF9jb250ZXh0X2ZpbGxfaW5mbyhwcml2LT5nbENvbnRleHQuZ2V0
KCksICZlcnJvci5vdXRQdHIoKSkpCi0gICAgICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRv
IGZpbGwgaW4gR1N0cmVhbWVyIGNvbnRleHQ6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOwotICAgICAg
ICBnc3RfZ2xfY29udGV4dF9hY3RpdmF0ZShwcml2LT5nbENvbnRleHQuZ2V0KCksIEZBTFNFKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0byBhY3RpdmF0ZSBHU3Ry
ZWFtZXIgY29udGV4dCAlIiBHU1RfUFRSX0ZPUk1BVCwgcHJpdi0+Z2xDb250ZXh0LmdldCgpKTsK
LSAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQotICAgICAgICBwcmV2aW91c0FjdGl2ZUNv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGF1dG8qIGdzdFdyYXBwZWRHTENvbnRl
eHQgPSBzdGF0aWNfY2FzdDxHc3RXcmFwcGVkR0xDb250ZXh0Kj4od3JhcHBlZEdMQ29udGV4dCk7
CisgICAgcHJpdi0+Z2xDb250ZXh0ID0gZ3N0V3JhcHBlZEdMQ29udGV4dC0+Z3N0R0xDb250ZXh0
KCk7CisgICAgcHJpdi0+Z2xEaXNwbGF5ID0gZ3N0V3JhcHBlZEdMQ29udGV4dC0+Z3N0R0xEaXNw
bGF5KCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM3NCwxNiArMzE3LDEwMyBAQCB2b2lk
IHdlYktpdEdMVmlkZW9TaW5rU2V0TWVkaWFQbGF5ZXJQcml2YXRlKFdlYktpdEdMVmlkZW9TaW5r
KiBzaW5rLCBNZWRpYVBsYXllcgogICAgIH0sIHBsYXllciwgbnVsbHB0cik7CiB9CiAKK0dzdFdy
YXBwZWRHTENvbnRleHQ6OkdzdFdyYXBwZWRHTENvbnRleHQoUGxhdGZvcm1EaXNwbGF5JiBkaXNw
bGF5LCBHTENvbnRleHQqIGNvbnRleHQpCit7CisgICAgLy8gVGhlIGZsb2F0aW5nIHJlZiByZW1v
dmFsIHN1cHBvcnQgd2FzIGFkZGVkIGluIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3df
YnVnLmNnaT9pZD03NDMwNjIuCisgICAgYm9vbCBzaG91bGRBZG9wdFJlZiA9IHdlYmtpdEdzdENo
ZWNrVmVyc2lvbigxLCAxNCwgMCk7CisgICAgaWYgKCFtX2dsRGlzcGxheSkgeworI2lmIFBMQVRG
T1JNKFgxMSkKKyNpZiBVU0UoR0xYKQorICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5WDEx
PihkaXNwbGF5KSkgeworICAgICAgICAgICAgR1NUX0RFQlVHKCJDcmVhdGluZyBYMTEgc2hhcmVk
IEdMIGRpc3BsYXkiKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRBZG9wdFJlZikKKyAgICAgICAg
ICAgICAgICBtX2dsRGlzcGxheSA9IGFkb3B0R1JlZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlz
cGxheV94MTFfbmV3X3dpdGhfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KGRp
c3BsYXkpLm5hdGl2ZSgpKSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1f
Z2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfeDExX25ld193aXRoX2Rp
c3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihkaXNwbGF5KS5uYXRpdmUoKSkpOwor
ICAgICAgICB9CisjZWxpZiBVU0UoRUdMKQorICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5
WDExPihzaGFyZWREaXNwbGF5KSkgeworICAgICAgICAgICAgR1NUX0RFQlVHKCJDcmVhdGluZyBY
MTEgc2hhcmVkIEVHTCBkaXNwbGF5Iik7CisgICAgICAgICAgICBpZiAoc2hvdWxkQWRvcHRSZWYp
CisgICAgICAgICAgICAgICAgbV9nbERpc3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVko
Z3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3Jt
RGlzcGxheVgxMT4oZGlzcGxheSkuZWdsRGlzcGxheSgpKSkpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3Bs
YXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVgxMT4o
ZGlzcGxheSkuZWdsRGlzcGxheSgpKSk7CisgICAgICAgIH0KKyNlbmRpZgorI2VuZGlmCisKKyNp
ZiBQTEFURk9STShXQVlMQU5EKQorICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5V2F5bGFu
ZD4oZGlzcGxheSkpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVRygiQ3JlYXRpbmcgV2F5bGFuZCBz
aGFyZWQgZGlzcGxheSIpOworICAgICAgICAgICAgaWYgKHNob3VsZEFkb3B0UmVmKQorICAgICAg
ICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9k
aXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlX
YXlsYW5kPihkaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKSk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbV9nbERpc3BsYXkgPSBHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9l
Z2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5V2F5bGFuZD4o
ZGlzcGxheSkuZWdsRGlzcGxheSgpKSk7CisgICAgICAgIH0KKyNlbmRpZgorCisjaWYgVVNFKFdQ
RV9SRU5ERVJFUikKKyAgICAgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheUxpYldQRT4oZGlzcGxh
eSkpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVRygiQ3JlYXRpbmcgV1BFIHNoYXJlZCBFR0wgZGlz
cGxheSIpOworICAgICAgICAgICAgaWYgKHNob3VsZEFkb3B0UmVmKQorICAgICAgICAgICAgICAg
IG1fZ2xEaXNwbGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2Vn
bF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KGRp
c3BsYXkpLmVnbERpc3BsYXkoKSkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBtX2dsRGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0
aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KGRpc3BsYXkpLmVn
bERpc3BsYXkoKSkpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBBU1NFUlQobV9nbERp
c3BsYXkpOworICAgIH0KKworICAgIC8vIEVHTCBhbmQgR0xYIGFyZSBtdXR1YWxseSBleGNsdXNp
dmUsIG5vIG5lZWQgZm9yIGlmZGVmcyBoZXJlLgorICAgIEdzdEdMUGxhdGZvcm0gZ2xQbGF0Zm9y
bSA9IGNvbnRleHQtPmlzRUdMQ29udGV4dCgpID8gR1NUX0dMX1BMQVRGT1JNX0VHTCA6IEdTVF9H
TF9QTEFURk9STV9HTFg7CisKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgIEdzdEdMQVBJIGdsQVBJ
ID0gR1NUX0dMX0FQSV9HTEVTMjsKKyNlbGlmIFVTRShPUEVOR0wpCisgICAgR3N0R0xBUEkgZ2xB
UEkgPSBHU1RfR0xfQVBJX09QRU5HTDsKKyNlbHNlCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisjZW5kaWYKKworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgY29udGV4dEhhbmRsZSA9
IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIEFTU0VSVChjb250ZXh0SGFuZGxlKTsK
KworICAgIGlmIChzaG91bGRBZG9wdFJlZikKKyAgICAgICAgbV9nbENvbnRleHQgPSBhZG9wdEdS
ZWYoZ3N0X2dsX2NvbnRleHRfbmV3X3dyYXBwZWQobV9nbERpc3BsYXkuZ2V0KCksIHJlaW50ZXJw
cmV0X2Nhc3Q8Z3VpbnRwdHI+KGNvbnRleHRIYW5kbGUpLCBnbFBsYXRmb3JtLCBnbEFQSSkpOwor
ICAgIGVsc2UKKyAgICAgICAgbV9nbENvbnRleHQgPSBnc3RfZ2xfY29udGV4dF9uZXdfd3JhcHBl
ZChtX2dsRGlzcGxheS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxndWludHB0cj4oY29udGV4dEhh
bmRsZSksIGdsUGxhdGZvcm0sIGdsQVBJKTsKKworICAgIC8vIEFjdGl2YXRlIGFuZCBmaWxsIHRo
ZSBHU3RyZWFtZXIgd3JhcHBlZCBjb250ZXh0IHdpdGggdGhlIFdlYmtpdCdzIHNoYXJlZCBvbmUu
CisgICAgYXV0byogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7
CisgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKGdzdF9nbF9jb250
ZXh0X2FjdGl2YXRlKG1fZ2xDb250ZXh0LmdldCgpLCBUUlVFKSkgeworICAgICAgICBHVW5pcXVl
T3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIGlmICghZ3N0X2dsX2NvbnRleHRfZmlsbF9p
bmZvKG1fZ2xDb250ZXh0LmdldCgpLCAmZXJyb3Iub3V0UHRyKCkpKQorICAgICAgICAgICAgR1NU
X1dBUk5JTkcoIkZhaWxlZCB0byBmaWxsIGluIEdTdHJlYW1lciBjb250ZXh0OiAlcyIsIGVycm9y
LT5tZXNzYWdlKTsKKyAgICAgICAgZ3N0X2dsX2NvbnRleHRfYWN0aXZhdGUobV9nbENvbnRleHQu
Z2V0KCksIEZBTFNFKTsKKyAgICB9IGVsc2UKKyAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0
byBhY3RpdmF0ZSBHU3RyZWFtZXIgY29udGV4dCAlIiBHU1RfUFRSX0ZPUk1BVCwgbV9nbENvbnRl
eHQuZ2V0KCkpOworICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCisgICAgICAgIHByZXZp
b3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisKIGJvb2wgd2ViS2l0
R0xWaWRlb1NpbmtQcm9iZVBsYXRmb3JtKCkKIHsKICAgICBhdXRvJiBzaGFyZWREaXNwbGF5ID0g
UGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKTsKLSAgICBHTENv
bnRleHQqIHNoYXJlZENvbnRleHQgPSBzaGFyZWREaXNwbGF5LnNoYXJpbmdHTENvbnRleHQoKTsK
KyAgICBhdXRvKiBzaGFyZWRDb250ZXh0ID0gc2hhcmVkRGlzcGxheS5zaGFyaW5nR0xDb250ZXh0
KCk7CiAgICAgaWYgKCFzaGFyZWRDb250ZXh0KSB7CiAgICAgICAgIEdTVF9XQVJOSU5HKCJXZWJL
aXQgc2hhcmVkIEdMIGNvbnRleHQgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIAotICAgIHJldHVybiBpc0dTdHJlYW1lclBsdWdpbkF2YWlsYWJsZSgi
YXBwIikgJiYgaXNHU3RyZWFtZXJQbHVnaW5BdmFpbGFibGUoIm9wZW5nbCIpOworICAgIGlmICgh
KGlzR1N0cmVhbWVyUGx1Z2luQXZhaWxhYmxlKCJhcHAiKSAmJiBpc0dTdHJlYW1lclBsdWdpbkF2
YWlsYWJsZSgib3BlbmdsIikpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXNo
YXJlZENvbnRleHQtPndyYXBwZWRHTENvbnRleHQoKSkKKyAgICAgICAgc2hhcmVkQ29udGV4dC0+
YWRkV3JhcHBlZEdMQ29udGV4dChtYWtlVW5pcXVlPEdzdFdyYXBwZWRHTENvbnRleHQ+KHNoYXJl
ZERpc3BsYXksIHNoYXJlZENvbnRleHQpKTsKKworICAgIHJldHVybiB0cnVlOwogfQogCiAjZW5k
aWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391045</attachid>
            <date>2020-02-18 08:03:28 -0800</date>
            <delta_ts>2020-02-18 09:07:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200626-20200218170326.patch</filename>
            <type>text/plain</type>
            <size>22312</size>
            <attacher name="Víctor M. Jáquez L.">vjaquez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2ODI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGJiNjQ2NjUxODNkNzMy
N2E3NzBkY2E3ZjliMWE2OWNiOGE1MDM4Ni4uYTlhNGRmOGRjMTU2MTkyZTM3MjEzNDhlM2I3YjQ3
N2FkMzVlMDgwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDIwLTAyLTE3ICBWw61j
dG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgIDx2amFxdWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAg
W0dMXVtHU3RyZWFtZXJdIEluc3RhbnRpYXRlIEdzdEdMQ29udGV4dCB3aGVuIHRoZSBzaGFyZWQg
R0xDb250ZXh0IGlzIGNyZWF0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMDYyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJpZ2h0IG5vdyBvbmUgR3N0R0xDb250ZXh0IGlzIGNyZWF0ZWQgcGVyIHZp
ZGVvIHRhZywgd2hpY2ggaXMgYQorICAgICAgICB3cmFwcGVyIG9mIHRoZSBHTCBzaGFyZWQgY29u
dGV4dC4gRXZlcnkgdGltZSB0aGlzIHdyYXBwZXIgaXMKKyAgICAgICAgY3JlYXRlZCB0aGUgR0wg
Y29udGV4dCBoYXMgdG8gYmUgY3VycmVudCBpbiBvcmRlciB0byBpbml0aWFsaXplCisgICAgICAg
IHRoZSB3cmFwcGVyJ3MgaW50ZXJuYWwgc3RhdGUuCisKKyAgICAgICAgQSBiZXR0ZXIgYXBwcm9h
Y2ggd291bGQgYmUgdG8gaGF2ZSBhIHNpbmdsZSBHc3RHTENvbnRleHQgcGVyIEdMCisgICAgICAg
IGNvbnRleHQsIHRvIGluc3RhbnRpYXRlIGl0IHdoZW4gdGhlIEdMIGNvbnRleHQgaXMgY3JlYXRl
ZCBhbmQKKyAgICAgICAgY3VycmVudC4gVGhpcyBHc3RHTENvbnRleHQgd291bGQgYmUgdXNlZCBm
b3IgYWxsIHBsYXllcnMgaW4gdGhlCisgICAgICAgIHBhZ2UuCisKKyAgICAgICAgR0xDb250ZXh0
R1N0cmVhbWVyIGlzIGNsYXNzIGluc3RhbnRpYXRlZCBhcyBzaW5nbGV0b24gYnkKKyAgICAgICAg
UGxhdGZvcm1EaXNwbGF5LiBXaGVuIHRoZSBtZWRpYSBwbGF5ZXIgcmVxdWVzdCBmb3IgdGhlCisg
ICAgICAgIEdMQ29udGV4dEdTdHJlYW1lciBhIEdMIGNvbnRleHQgaXMgY3JlYXRlZCwgaWYgaXQg
d2Fzbid0IGJlZm9yZSwKKyAgICAgICAgYW5kIHdyYXBzIGl0LiBUaGUgY2xhc3MgaGFzIHR3byBn
ZXR0ZXJzLCBvbmUgZm9yIEdzdEdMQ29udGV4dAorICAgICAgICBvYmplY3QsIGFuZCBvdGhlciBm
b3IgR3N0R0xEaXNwbGF5LiBCb3RoIGFyZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUKKyAgICAgICAg
aW50ZXJuYWwgR1N0cmVhbWVyIEdMIGNvbnRleHQgaW4gdGhlIG11bHRpbWVkaWEgcGlwZWxpbmUu
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHJlcXVpcmVkLgorCisgICAgICAgICogcGxhdGZvcm0v
R1N0cmVhbWVyLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlz
cGxheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXk6OmdsR3N0cmVhbWVy
Q29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5Lmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMQ29udGV4dEdTdHJlYW1l
ci5jcHA6IEFkZGVkLgorICAgICAgICAoR0xDb250ZXh0R1N0cmVhbWVyOjpjcmVhdGUpOgorICAg
ICAgICAoR0xDb250ZXh0R1N0cmVhbWVyOjpHTENvbnRleHRHU3RyZWFtZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTENvbnRleHRHU3RyZWFtZXIuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpHTENvbnRleHRHU3RyZWFtZXI6OmdldENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6R0xDb250ZXh0R1N0cmVhbWVyOjpnZXREaXNwbGF5KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwOgor
ICAgICAgICAocmVxdWVzdEdMQ29udGV4dCk6CisgICAgICAgICh3ZWJLaXRHTFZpZGVvU2lua0No
YW5nZVN0YXRlKToKKyAgICAgICAgKHdlYktpdEdMVmlkZW9TaW5rUHJvYmVQbGF0Zm9ybSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5oOgorCiAyMDIwLTAyLTE4ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+
CiAKICAgICAgICAgW0xGQ11bVHJlZUJ1aWxkaW5nXSBUYWtlIGNyZWF0ZUxpbmVCcmVha0JveCdz
IHJldHVybiB2YWx1ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVh
bWVyLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCmluZGV4
IGVmYTVlNzU2OTUyMjc2MmRkOGFlYzdjZWJlMzM0YWE4MTk3ODVmZjYuLjYwMjM4OTZhZmY4OTU0
Zjg1YjMyMDRkMGQ3YTA5NjYwY2VhZjQ5NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0dTdHJlYW1lci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3Ry
ZWFtZXIuY21ha2UKQEAgLTExNyw2ICsxMTcsNyBAQCBpZiAoRU5BQkxFX1ZJREVPKQogICAgICAg
ICAgICAgJHtHU1RSRUFNRVJfR0xfTElCUkFSSUVTfQogICAgICAgICApCiAgICAgICAgIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0dMQ29udGV4dEdTdHJlYW1lci5jcHAKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9WaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXIuY3BwCiAgICAgICAgICkK
ICAgICBlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1EaXNwbGF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BsYXRmb3JtRGlzcGxheS5jcHAKaW5kZXggMTU2ZTVhYTJiNzM1ZGY2MWExYzE5NjZlZGIzMzZi
NWRjMTllMGZiYi4uOTQwZDIxNmJjYWZiZmQ3M2IxYzgxM2ExYzEzNDIxZGEzZjMyNzAyNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3Bs
YXkuY3BwCkBAIC03Miw2ICs3MiwxMCBAQAogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVJfR0wpCisjaW5j
bHVkZSAiR0xDb250ZXh0R1N0cmVhbWVyLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1EaXNwbGF5PiBQbGF0Zm9ybURpc3BsYXk6OmNy
ZWF0ZVBsYXRmb3JtRGlzcGxheSgpCkBAIC0yNDksNCArMjUzLDE0IEBAIHZvaWQgUGxhdGZvcm1E
aXNwbGF5OjpzaHV0RG93bkVnbERpc3BsYXlzKCkKIAogI2VuZGlmIC8vIFVTRShFR0wpCiAKKyNp
ZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVJfR0wpCitHTENvbnRleHRHU3RyZWFtZXIq
IFBsYXRmb3JtRGlzcGxheTo6Z2xHc3RyZWFtZXJDb250ZXh0KCkKK3sKKyAgICBpZiAoIW1fZ3N0
R0xDb250ZXh0KQorICAgICAgICBtX2dzdEdMQ29udGV4dCA9IEdMQ29udGV4dEdTdHJlYW1lcjo6
Y3JlYXRlKCk7CisgICAgcmV0dXJuIG1fZ3N0R0xDb250ZXh0LmdldCgpOworfQorI2VuZGlmCisK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuaAppbmRleCA1ZDZhYjVhZmU1ZDQyYWUwZmY2YjQ4
NjcyODZiYjIyM2E1Njc2MmYxLi5kMzU4MDVlMDIxY2Q0OWNhNWI4ZmEzNzk1MjNhOGRkYjJmYTM1
NDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9y
bURpc3BsYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9y
bURpc3BsYXkuaApAQCAtMzcsNiArMzcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEdMQ29udGV4dDsKIAorY2xhc3MgR0xEaXNwbGF5R1N0cmVhbWVyOworY2xhc3MgR0xDb250ZXh0
R1N0cmVhbWVyOworCiBjbGFzcyBQbGF0Zm9ybURpc3BsYXkgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFBsYXRmb3JtRGlzcGxheSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgpAQCAtNzEsNiArNzQsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNodXREb3duRWds
RGlzcGxheXMoKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVS
X0dMKQorICAgIFdFQkNPUkVfRVhQT1JUIEdMQ29udGV4dEdTdHJlYW1lciogZ2xHc3RyZWFtZXJD
b250ZXh0KCk7CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIGVudW0gY2xhc3MgTmF0aXZlRGlz
cGxheU93bmVkIHsgTm8sIFllcyB9OwogICAgIGV4cGxpY2l0IFBsYXRmb3JtRGlzcGxheShOYXRp
dmVEaXNwbGF5T3duZWQpOwpAQCAtOTksNiArMTA2LDExIEBAIHByaXZhdGU6CiAgICAgaW50IG1f
ZWdsTWFqb3JWZXJzaW9uIHsgMCB9OwogICAgIGludCBtX2VnbE1pbm9yVmVyc2lvbiB7IDAgfTsK
ICNlbmRpZgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSX0dMKQorICAgIHN0
ZDo6dW5pcXVlX3B0cjxHTENvbnRleHRHU3RyZWFtZXI+IG1fZ3N0R0xDb250ZXh0OworI2VuZGlm
CisKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTENvbnRleHRHU3RyZWFtZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMQ29udGV4dEdTdHJl
YW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg3NWJkMjVlMjcwOGU4ZGM1ZTc5MmRhOTQzODJhZDUxYzhh
NTczOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9HTENvbnRleHRHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsMTM0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiR0xDb250ZXh0R1N0cmVhbWVyLmgiCisKKyNpZiBFTkFCTEUoVklERU8pICYmIFVTRShH
U1RSRUFNRVJfR0wpCisKKyNpbmNsdWRlICJHTENvbnRleHQuaCIKKworI2lmIFVTRShHTFgpCisj
aW5jbHVkZSAiR0xDb250ZXh0R0xYLmgiCisjaW5jbHVkZSA8Z3N0L2dsL3gxMS9nc3RnbGRpc3Bs
YXlfeDExLmg+CisjZW5kaWYKKworI2lmIFVTRShFR0wpCisjaW5jbHVkZSAiR0xDb250ZXh0RUdM
LmgiCisjaW5jbHVkZSA8Z3N0L2dsL2VnbC9nc3RnbGRpc3BsYXlfZWdsLmg+CisjZW5kaWYKKwor
I2lmIFBMQVRGT1JNKFgxMSkKKyNpbmNsdWRlICJQbGF0Zm9ybURpc3BsYXlYMTEuaCIKKyNlbmRp
ZgorCisjaWYgUExBVEZPUk0oV0FZTEFORCkKKyNpbmNsdWRlICJQbGF0Zm9ybURpc3BsYXlXYXls
YW5kLmgiCisjZW5kaWYKKworI2lmIFVTRShXUEVfUkVOREVSRVIpCisjaW5jbHVkZSAiUGxhdGZv
cm1EaXNwbGF5TGliV1BFLmgiCisjZW5kaWYKKworI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQ
SQorI2luY2x1ZGUgPGdzdC9nbC9nbC5oPgorI3VuZGVmIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0R1N0
cmVhbWVyPiBHTENvbnRleHRHU3RyZWFtZXI6OmNyZWF0ZSgpCit7CisgICAgYXV0byYgc2hhcmVk
RGlzcGxheSA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCk7
CisgICAgYXV0byogc2hhcmVkQ29udGV4dCA9IHNoYXJlZERpc3BsYXkuc2hhcmluZ0dMQ29udGV4
dCgpOworICAgIGlmICghc2hhcmVkQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHRHU3RyZWFtZXI+KG5ldyBHTENvbnRl
eHRHU3RyZWFtZXIoc2hhcmVkRGlzcGxheSwgc2hhcmVkQ29udGV4dCkpOworfQorCitHTENvbnRl
eHRHU3RyZWFtZXI6OkdMQ29udGV4dEdTdHJlYW1lcihQbGF0Zm9ybURpc3BsYXkmIHNoYXJlZERp
c3BsYXksIEdMQ29udGV4dCogc2hhcmVkQ29udGV4dCkKK3sKKyAgICBib29sIHNob3VsZEFkb3B0
UmVmID0gd2Via2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDE0LCAwKTsKKworI2lmIFBMQVRGT1JNKFgx
MSkKKyNpZiBVU0UoR0xYKQorICAgIGlmIChpczxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERp
c3BsYXkpKSB7CisgICAgICAgIGlmIChzaG91bGRBZG9wdFJlZikKKyAgICAgICAgICAgIG1fZGlz
cGxheSA9IGFkb3B0R1JlZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV94MTFfbmV3X3dp
dGhfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLm5h
dGl2ZSgpKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Rpc3BsYXkgPSBHU1RfR0xf
RElTUExBWShnc3RfZ2xfZGlzcGxheV94MTFfbmV3X3dpdGhfZGlzcGxheShkb3duY2FzdDxQbGF0
Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLm5hdGl2ZSgpKSk7CisgICAgfQorI2VsaWYg
VVNFKEVHTCkKKyAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KSkg
eworICAgICAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCisgICAgICAgICAgICBtX2Rpc3BsYXkgPSBh
ZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9k
aXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkuZWdsRGlz
cGxheSgpKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Rpc3BsYXkgPSBHU1RfR0xf
RElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8
UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsKKyAgICB9
CisjZW5kaWYgLy8gVVNFKEdMWCkgb3IgVVNFKEVHTCkKKyNlbGlmIFBMQVRGT1JNKFdBWUxBTkQp
CisgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheVdheWxhbmQ+KHNoYXJlZERpc3BsYXkpKSB7Cisg
ICAgICAgIGlmIChzaG91bGRBZG9wdFJlZikKKyAgICAgICAgICAgIG1fZGlzcGxheSA9IGFkb3B0
R1JlZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3Bs
YXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5V2F5bGFuZD4oc2hhcmVkRGlzcGxheSkuZWdsRGlz
cGxheSgpKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Rpc3BsYXkgPSBHU1RfR0xf
RElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8
UGxhdGZvcm1EaXNwbGF5V2F5bGFuZD4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSk7Cisg
ICAgfQorI2VsaWYgVVNFKFdQRV9SRU5ERVJFUikKKyAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5
TGliV1BFPihzaGFyZWREaXNwbGF5KSkgeworICAgICAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCisg
ICAgICAgICAgICBtX2Rpc3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rp
c3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheUxp
YldQRT4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtX2Rpc3BsYXkgPSBHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3
X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5TGliV1BFPihzaGFyZWRE
aXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsKKyAgICB9CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworI2VuZGlmIC8vIFBMQVRGT1JNKFgxMSkgb3IgUExBVEZPUk0oV0FZTEFORCkgb3Ig
VVNFKFdQRV9SRU5ERVJFUikKKworICAgIEdzdEdMUGxhdGZvcm0gZ2xQbGF0Zm9ybSA9IHNoYXJl
ZENvbnRleHQtPmlzRUdMQ29udGV4dCgpID8gR1NUX0dMX1BMQVRGT1JNX0VHTCA6IEdTVF9HTF9Q
TEFURk9STV9HTFg7CisKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgIEdzdEdMQVBJIGdsQVBJID0g
R1NUX0dMX0FQSV9HTEVTMjsKKyNlbGlmIFVTRShPUEVOR0wpCisgICAgR3N0R0xBUEkgZ2xBUEkg
PSBHU1RfR0xfQVBJX09QRU5HTDsKKyNlbHNlCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisj
ZW5kaWYKKworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgY29udGV4dEhhbmRsZSA9IHNo
YXJlZENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIEFTU0VSVChjb250ZXh0SGFuZGxl
KTsKKworICAgIGlmIChzaG91bGRBZG9wdFJlZikKKyAgICAgICAgbV9jb250ZXh0ID0gYWRvcHRH
UmVmKGdzdF9nbF9jb250ZXh0X25ld193cmFwcGVkKG1fZGlzcGxheS5nZXQoKSwgcmVpbnRlcnBy
ZXRfY2FzdDxndWludHB0cj4oY29udGV4dEhhbmRsZSksIGdsUGxhdGZvcm0sIGdsQVBJKSk7Cisg
ICAgZWxzZQorICAgICAgICBtX2NvbnRleHQgPSBnc3RfZ2xfY29udGV4dF9uZXdfd3JhcHBlZCht
X2Rpc3BsYXkuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3VpbnRwdHI+KGNvbnRleHRIYW5kbGUp
LCBnbFBsYXRmb3JtLCBnbEFQSSk7CisKKyAgICAvLyBBY3RpdmF0ZSBhbmQgZmlsbCB0aGUgR1N0
cmVhbWVyIHdyYXBwZWQgY29udGV4dCB3aXRoIHRoZSBXZWJraXQncyBzaGFyZWQgb25lLgorICAg
IGF1dG8qIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworICAg
IHNoYXJlZENvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChnc3RfZ2xfY29u
dGV4dF9hY3RpdmF0ZShtX2NvbnRleHQuZ2V0KCksIFRSVUUpKSB7CisgICAgICAgIEdVbmlxdWVP
dXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgaWYgKCFnc3RfZ2xfY29udGV4dF9maWxsX2lu
Zm8obV9jb250ZXh0LmdldCgpLCAmZXJyb3Iub3V0UHRyKCkpKQorICAgICAgICAgICAgR1NUX1dB
Uk5JTkcoIkZhaWxlZCB0byBmaWxsIGluIEdTdHJlYW1lciBjb250ZXh0OiAlcyIsIGVycm9yLT5t
ZXNzYWdlKTsKKyAgICAgICAgZ3N0X2dsX2NvbnRleHRfYWN0aXZhdGUobV9jb250ZXh0LmdldCgp
LCBGQUxTRSk7CisgICAgfSBlbHNlCisgICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gYWN0
aXZhdGUgR1N0cmVhbWVyIGNvbnRleHQgJSIgR1NUX1BUUl9GT1JNQVQsIG1fY29udGV4dC5nZXQo
KSk7CisgICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKKyAgICAgICAgcHJldmlvdXNBY3Rp
dmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShW
SURFTykgJiYgVVNFKEdTVFJFQU1FUl9HTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTENvbnRleHRHU3RyZWFtZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTENvbnRleHRHU3RyZWFtZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wYzBmYzAxMDI4ZGMwYjdmNDI1NTE2Yzg1YzJmZTY4MmNjMTkyZWY1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0dMQ29udGV4dEdTdHJlYW1lci5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiAgQ29weXJpZ2h0
IChDKSAyMDIwIElnYWxpYSwgUy5MCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUl9HTCkKKwor
I2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgorI2luY2x1ZGUgIlBsYXRmb3JtRGlzcGxheS5o
IgorCit0eXBlZGVmIHN0cnVjdCBfR3N0R0xDb250ZXh0IEdzdEdMQ29udGV4dDsKK3R5cGVkZWYg
c3RydWN0IF9Hc3RHTERpc3BsYXkgR3N0R0xEaXNwbGF5OworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEdMQ29udGV4dEdTdHJlYW1lciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEdMQ29udGV4dEdTdHJl
YW1lcj4gY3JlYXRlKCk7CisgICAgR1JlZlB0cjxHc3RHTENvbnRleHQ+IGdldENvbnRleHQoKSB7
IHJldHVybiBtX2NvbnRleHQ7IH0KKyAgICBHUmVmUHRyPEdzdEdMRGlzcGxheT4gZ2V0RGlzcGxh
eSgpIHsgcmV0dXJuIG1fZGlzcGxheTsgfQorCitwcml2YXRlOgorICAgIEdMQ29udGV4dEdTdHJl
YW1lcihQbGF0Zm9ybURpc3BsYXkmIHNoYXJlZERpc3BsYXksIEdMQ29udGV4dCAqIHNoYXJlZENv
bnRleHQpOworCisgICAgR1JlZlB0cjxHc3RHTENvbnRleHQ+IG1fY29udGV4dDsKKyAgICBHUmVm
UHRyPEdzdEdMRGlzcGxheT4gbV9kaXNwbGF5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSX0dMKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9T
aW5rR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9HTFZpZGVvU2lua0dTdHJlYW1lci5jcHAKaW5kZXggMzY3NjM3Nzg5NjUwZWI3NjZhOWI1
MzViYzIzMTI1MzAxYTEyODI5Zi4uNGRmYTRkYTFlYjQyZDExOGFjNmRiZjExOTQ1YTZmZTdiYjc4
ZmI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwCkBAIC0yMiwzNCAr
MjIsMTMgQEAKIAogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUl9HTCkKIAotI2lu
Y2x1ZGUgIkdMQ29udGV4dC5oIgorI2luY2x1ZGUgIkdMQ29udGV4dEdTdHJlYW1lci5oIgogI2lu
Y2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5oIgorCiAjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+CiAjaW5jbHVkZSA8
d3RmL2dsaWIvV1RGR1R5cGUuaD4KIAotI2lmIFVTRShHTFgpCi0jaW5jbHVkZSAiR0xDb250ZXh0
R0xYLmgiCi0jaW5jbHVkZSA8Z3N0L2dsL3gxMS9nc3RnbGRpc3BsYXlfeDExLmg+Ci0jZW5kaWYK
LQotI2lmIFVTRShFR0wpCi0jaW5jbHVkZSAiR0xDb250ZXh0RUdMLmgiCi0jaW5jbHVkZSA8Z3N0
L2dsL2VnbC9nc3RnbGRpc3BsYXlfZWdsLmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFgxMSkK
LSNpbmNsdWRlICJQbGF0Zm9ybURpc3BsYXlYMTEuaCIKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0o
V0FZTEFORCkKLSNpbmNsdWRlICJQbGF0Zm9ybURpc3BsYXlXYXlsYW5kLmgiCi0jZW5kaWYKLQot
I2lmIFVTRShXUEVfUkVOREVSRVIpCi0jaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5TGliV1BFLmgi
Ci0jZW5kaWYKLQogLy8gZ3N0Z2xhcGkuaCBtYXkgaW5jbHVkZSBlZ2xwbGF0Zm9ybS5oIGFuZCBp
dCBpbmNsdWRlcyBYLmgsIHdoaWNoCiAvLyBkZWZpbmVzIE5vbmUsIGJyZWFraW5nIE1lZGlhUGxh
eWVyOjpOb25lIGVudW0KICNpZiBQTEFURk9STShYMTEpICYmIEdTVF9HTF9IQVZFX1BMQVRGT1JN
X0VHTApAQCAtNjYsOCArNDUsNiBAQCBlbnVtIHsKIAogc3RydWN0IF9XZWJLaXRHTFZpZGVvU2lu
a1ByaXZhdGUgewogICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gYXBwU2luazsKLSAgICBHUmVmUHRy
PEdzdEdMQ29udGV4dD4gZ2xDb250ZXh0OwotICAgIEdSZWZQdHI8R3N0R0xEaXNwbGF5PiBnbERp
c3BsYXk7CiAgICAgR1JlZlB0cjxHc3RDb250ZXh0PiBnbERpc3BsYXlFbGVtZW50Q29udGV4dDsK
ICAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGdsQXBwRWxlbWVudENvbnRleHQ7CiAgICAgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBtZWRpYVBsYXllclByaXZhdGU7CkBAIC0xNDAsMTEzICsx
MTcsMTMgQEAgdm9pZCB3ZWJLaXRHTFZpZGVvU2lua0ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkK
ICAgICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1MsIGZpbmFsaXplLCAob2JqZWN0KSk7
CiB9CiAKLXN0YXRpYyBib29sIGVuc3VyZUdzdEdMQ29udGV4dChXZWJLaXRHTFZpZGVvU2luayog
c2luaykKK0dSZWZQdHI8R3N0Q29udGV4dD4gcmVxdWVzdEdMQ29udGV4dChjb25zdCBjaGFyKiBj
b250ZXh0VHlwZSkKIHsKLSAgICBXZWJLaXRHTFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5r
LT5wcml2OwotCi0gICAgaWYgKHByaXYtPmdsQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBhdXRvJiBzaGFyZWREaXNwbGF5ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNw
bGF5Rm9yQ29tcG9zaXRpbmcoKTsKLQotICAgIC8vIFRoZSBmbG9hdGluZyByZWYgcmVtb3ZhbCBz
dXBwb3J0IHdhcyBhZGRlZCBpbiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzQzMDYyLgotICAgIGJvb2wgc2hvdWxkQWRvcHRSZWYgPSB3ZWJraXRHc3RDaGVja1Zl
cnNpb24oMSwgMTQsIDApOwotICAgIGlmICghcHJpdi0+Z2xEaXNwbGF5KSB7Ci0jaWYgUExBVEZP
Uk0oWDExKQotI2lmIFVTRShHTFgpCi0gICAgICAgIGlmIChpczxQbGF0Zm9ybURpc3BsYXlYMTE+
KHNoYXJlZERpc3BsYXkpKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNpbmssICJD
cmVhdGluZyBYMTEgc2hhcmVkIEdMIGRpc3BsYXkiKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRB
ZG9wdFJlZikKLSAgICAgICAgICAgICAgICBwcml2LT5nbERpc3BsYXkgPSBhZG9wdEdSZWYoR1NU
X0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfeDExX25ld193aXRoX2Rpc3BsYXkoZG93bmNhc3Q8
UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5uYXRpdmUoKSkpKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcml2LT5nbERpc3BsYXkgPSBHU1RfR0xfRElTUExB
WShnc3RfZ2xfZGlzcGxheV94MTFfbmV3X3dpdGhfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURp
c3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLm5hdGl2ZSgpKSk7Ci0gICAgICAgIH0KLSNlbGlmIFVT
RShFR0wpCi0gICAgICAgIGlmIChpczxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkp
KSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNpbmssICJDcmVhdGluZyBYMTEgc2hh
cmVkIEVHTCBkaXNwbGF5Iik7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCi0gICAg
ICAgICAgICAgICAgcHJpdi0+Z2xEaXNwbGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQTEFZKGdz
dF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURp
c3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBwcml2LT5nbERpc3BsYXkgPSBHU1RfR0xfRElTUExBWShnc3Rf
Z2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNw
bGF5WDExPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsKLSAgICAgICAgfQotI2VuZGlm
Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFdBWUxBTkQpCi0gICAgICAgIGlmIChpczxQbGF0Zm9y
bURpc3BsYXlXYXlsYW5kPihzaGFyZWREaXNwbGF5KSkgewotICAgICAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChzaW5rLCAiQ3JlYXRpbmcgV2F5bGFuZCBzaGFyZWQgZGlzcGxheSIpOwotICAgICAg
ICAgICAgaWYgKHNob3VsZEFkb3B0UmVmKQotICAgICAgICAgICAgICAgIHByaXYtPmdsRGlzcGxh
eSA9IGFkb3B0R1JlZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhf
ZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5V2F5bGFuZD4oc2hhcmVkRGlzcGxh
eSkuZWdsRGlzcGxheSgpKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHBy
aXYtPmdsRGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0
aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlXYXlsYW5kPihzaGFyZWREaXNw
bGF5KS5lZ2xEaXNwbGF5KCkpKTsKLSAgICAgICAgfQotI2VuZGlmCi0KLSNpZiBVU0UoV1BFX1JF
TkRFUkVSKQotICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5TGliV1BFPihzaGFyZWREaXNw
bGF5KSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzaW5rLCAiQ3JlYXRpbmcgV1BF
IHNoYXJlZCBFR0wgZGlzcGxheSIpOwotICAgICAgICAgICAgaWYgKHNob3VsZEFkb3B0UmVmKQot
ICAgICAgICAgICAgICAgIHByaXYtPmdsRGlzcGxheSA9IGFkb3B0R1JlZihHU1RfR0xfRElTUExB
WShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZv
cm1EaXNwbGF5TGliV1BFPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKSk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcHJpdi0+Z2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BM
QVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRm
b3JtRGlzcGxheUxpYldQRT4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSk7Ci0gICAgICAg
IH0KLSNlbmRpZgotCi0gICAgICAgIEFTU0VSVChwcml2LT5nbERpc3BsYXkpOwotICAgIH0KLQot
ICAgIEdMQ29udGV4dCogc2hhcmVkQ29udGV4dCA9IHNoYXJlZERpc3BsYXkuc2hhcmluZ0dMQ29u
dGV4dCgpOwotICAgIGlmICghc2hhcmVkQ29udGV4dCkgewotICAgICAgICBHU1RfRUxFTUVOVF9F
UlJPUihHU1RfRUxFTUVOVF9DQVNUKHNpbmspLCBSRVNPVVJDRSwgTk9UX0ZPVU5ELCAoKCJXZWJL
aXQgc2hhcmVkIEdMIGNvbnRleHQgdW5hdmFpbGFibGUiKSksCi0gICAgICAgICAgICAoIlRoZSBX
ZWJLaXQgc2hhcmVkIEdMIGNvbnRleHQgc29tZWhvdyBkaXNhcHBlYXJlZC4gVmlkZW8gdGV4dHVy
ZXMgcmVuZGVyaW5nIHdpbGwgZmFpbC4iKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICAvLyBFR0wgYW5kIEdMWCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLCBubyBuZWVkIGZv
ciBpZmRlZnMgaGVyZS4KLSAgICBHc3RHTFBsYXRmb3JtIGdsUGxhdGZvcm0gPSBzaGFyZWRDb250
ZXh0LT5pc0VHTENvbnRleHQoKSA/IEdTVF9HTF9QTEFURk9STV9FR0wgOiBHU1RfR0xfUExBVEZP
Uk1fR0xYOwotCi0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICBHc3RHTEFQSSBnbEFQSSA9IEdTVF9H
TF9BUElfR0xFUzI7Ci0jZWxpZiBVU0UoT1BFTkdMKQotICAgIEdzdEdMQVBJIGdsQVBJID0gR1NU
X0dMX0FQSV9PUEVOR0w7Ci0jZWxzZQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlm
Ci0KLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIGNvbnRleHRIYW5kbGUgPSBzaGFyZWRD
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHRIYW5kbGUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzaG91bGRBZG9wdFJlZikKLSAgICAgICAgcHJp
di0+Z2xDb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9nbF9jb250ZXh0X25ld193cmFwcGVkKHByaXYt
PmdsRGlzcGxheS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxndWludHB0cj4oY29udGV4dEhhbmRs
ZSksIGdsUGxhdGZvcm0sIGdsQVBJKSk7Ci0gICAgZWxzZQotICAgICAgICBwcml2LT5nbENvbnRl
eHQgPSBnc3RfZ2xfY29udGV4dF9uZXdfd3JhcHBlZChwcml2LT5nbERpc3BsYXkuZ2V0KCksIHJl
aW50ZXJwcmV0X2Nhc3Q8Z3VpbnRwdHI+KGNvbnRleHRIYW5kbGUpLCBnbFBsYXRmb3JtLCBnbEFQ
SSk7Ci0KLSAgICAvLyBBY3RpdmF0ZSBhbmQgZmlsbCB0aGUgR1N0cmVhbWVyIHdyYXBwZWQgY29u
dGV4dCB3aXRoIHRoZSBXZWJraXQncyBzaGFyZWQgb25lLgotICAgIGF1dG8qIHByZXZpb3VzQWN0
aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOwotICAgIHNoYXJlZENvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChnc3RfZ2xfY29udGV4dF9hY3RpdmF0ZShwcml2
LT5nbENvbnRleHQuZ2V0KCksIFRSVUUpKSB7Ci0gICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9y
PiBlcnJvcjsKLSAgICAgICAgaWYgKCFnc3RfZ2xfY29udGV4dF9maWxsX2luZm8ocHJpdi0+Z2xD
b250ZXh0LmdldCgpLCAmZXJyb3Iub3V0UHRyKCkpKQotICAgICAgICAgICAgR1NUX1dBUk5JTkco
IkZhaWxlZCB0byBmaWxsIGluIEdTdHJlYW1lciBjb250ZXh0OiAlcyIsIGVycm9yLT5tZXNzYWdl
KTsKLSAgICAgICAgZ3N0X2dsX2NvbnRleHRfYWN0aXZhdGUocHJpdi0+Z2xDb250ZXh0LmdldCgp
LCBGQUxTRSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gYWN0
aXZhdGUgR1N0cmVhbWVyIGNvbnRleHQgJSIgR1NUX1BUUl9GT1JNQVQsIHByaXYtPmdsQ29udGV4
dC5nZXQoKSk7Ci0gICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKLSAgICAgICAgcHJldmlv
dXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1HUmVmUHRyPEdzdENvbnRleHQ+IHJlcXVlc3RHTENvbnRleHQoV2ViS2l0R0xWaWRl
b1NpbmsqIHNpbmssIGNvbnN0IGNoYXIqIGNvbnRleHRUeXBlKQotewotICAgIFdlYktpdEdMVmlk
ZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnByaXY7Ci0gICAgaWYgKCFlbnN1cmVHc3RHTENv
bnRleHQoc2luaykpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8qIGdsR3N0Q29u
dGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuZ2xH
c3RyZWFtZXJDb250ZXh0KCk7CiAKICAgICBpZiAoIWdfc3RyY21wMChjb250ZXh0VHlwZSwgR1NU
X0dMX0RJU1BMQVlfQ09OVEVYVF9UWVBFKSkgewogICAgICAgICBHc3RDb250ZXh0KiBkaXNwbGF5
Q29udGV4dCA9IGdzdF9jb250ZXh0X25ldyhHU1RfR0xfRElTUExBWV9DT05URVhUX1RZUEUsIFRS
VUUpOwotICAgICAgICBnc3RfY29udGV4dF9zZXRfZ2xfZGlzcGxheShkaXNwbGF5Q29udGV4dCwg
cHJpdi0+Z2xEaXNwbGF5LmdldCgpKTsKKyAgICAgICAgZ3N0X2NvbnRleHRfc2V0X2dsX2Rpc3Bs
YXkoZGlzcGxheUNvbnRleHQsIGdsR3N0Q29udGV4dC0+Z2V0RGlzcGxheSgpLmdldCgpKTsKICAg
ICAgICAgcmV0dXJuIGFkb3B0R1JlZihkaXNwbGF5Q29udGV4dCk7CiAgICAgfQogCkBAIC0yNTQs
OSArMTMxLDkgQEAgR1JlZlB0cjxHc3RDb250ZXh0PiByZXF1ZXN0R0xDb250ZXh0KFdlYktpdEdM
VmlkZW9TaW5rKiBzaW5rLCBjb25zdCBjaGFyKiBjb250ZXgKICAgICAgICAgR3N0Q29udGV4dCog
YXBwQ29udGV4dCA9IGdzdF9jb250ZXh0X25ldygiZ3N0LmdsLmFwcF9jb250ZXh0IiwgVFJVRSk7
CiAgICAgICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X2NvbnRleHRfd3JpdGFibGVf
c3RydWN0dXJlKGFwcENvbnRleHQpOwogI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDEyLCAwKQot
ICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChzdHJ1Y3R1cmUsICJjb250ZXh0IiwgR1NUX1RZUEVf
R0xfQ09OVEVYVCwgcHJpdi0+Z2xDb250ZXh0LmdldCgpLCBudWxscHRyKTsKKyAgICAgICAgZ3N0
X3N0cnVjdHVyZV9zZXQoc3RydWN0dXJlLCAiY29udGV4dCIsIEdTVF9UWVBFX0dMX0NPTlRFWFQs
IGdsR3N0Q29udGV4dC0+Z2V0Q29udGV4dCgpLmdldCgpLCBudWxscHRyKTsKICNlbHNlCi0gICAg
ICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHN0cnVjdHVyZSwgImNvbnRleHQiLCBHU1RfR0xfVFlQRV9D
T05URVhULCBwcml2LT5nbENvbnRleHQuZ2V0KCksIG51bGxwdHIpOworICAgICAgICBnc3Rfc3Ry
dWN0dXJlX3NldChzdHJ1Y3R1cmUsICJjb250ZXh0IiwgR1NUX0dMX1RZUEVfQ09OVEVYVCwgZ2xH
c3RDb250ZXh0LT5nZXRDb250ZXh0KCkuZ2V0KCksIG51bGxwdHIpOwogI2VuZGlmCiAgICAgICAg
IHJldHVybiBhZG9wdEdSZWYoYXBwQ29udGV4dCk7CiAgICAgfQpAQCAtMjc4LDEzICsxNTUsMTMg
QEAgc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktpdEdMVmlkZW9TaW5rQ2hhbmdlU3Rh
dGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3MKICAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVB
RFlfVE9fUkVBRFk6CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDog
ewogICAgICAgICBpZiAoIXByaXYtPmdsRGlzcGxheUVsZW1lbnRDb250ZXh0KQotICAgICAgICAg
ICAgcHJpdi0+Z2xEaXNwbGF5RWxlbWVudENvbnRleHQgPSByZXF1ZXN0R0xDb250ZXh0KHNpbmss
IEdTVF9HTF9ESVNQTEFZX0NPTlRFWFRfVFlQRSk7CisgICAgICAgICAgICBwcml2LT5nbERpc3Bs
YXlFbGVtZW50Q29udGV4dCA9IHJlcXVlc3RHTENvbnRleHQoR1NUX0dMX0RJU1BMQVlfQ09OVEVY
VF9UWVBFKTsKIAogICAgICAgICBpZiAocHJpdi0+Z2xEaXNwbGF5RWxlbWVudENvbnRleHQpCiAg
ICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVF9DQVNUKHNpbmsp
LCBwcml2LT5nbERpc3BsYXlFbGVtZW50Q29udGV4dC5nZXQoKSk7CiAKICAgICAgICAgaWYgKCFw
cml2LT5nbEFwcEVsZW1lbnRDb250ZXh0KQotICAgICAgICAgICAgcHJpdi0+Z2xBcHBFbGVtZW50
Q29udGV4dCA9IHJlcXVlc3RHTENvbnRleHQoc2luaywgImdzdC5nbC5hcHBfY29udGV4dCIpOwor
ICAgICAgICAgICAgcHJpdi0+Z2xBcHBFbGVtZW50Q29udGV4dCA9IHJlcXVlc3RHTENvbnRleHQo
ImdzdC5nbC5hcHBfY29udGV4dCIpOwogCiAgICAgICAgIGlmIChwcml2LT5nbEFwcEVsZW1lbnRD
b250ZXh0KQogICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlRf
Q0FTVChzaW5rKSwgcHJpdi0+Z2xBcHBFbGVtZW50Q29udGV4dC5nZXQoKSk7CkBAIC0zNzYsOSAr
MjUzLDggQEAgdm9pZCB3ZWJLaXRHTFZpZGVvU2lua1NldE1lZGlhUGxheWVyUHJpdmF0ZShXZWJL
aXRHTFZpZGVvU2luayogc2luaywgTWVkaWFQbGF5ZXIKIAogYm9vbCB3ZWJLaXRHTFZpZGVvU2lu
a1Byb2JlUGxhdGZvcm0oKQogewotICAgIGF1dG8mIHNoYXJlZERpc3BsYXkgPSBQbGF0Zm9ybURp
c3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpOwotICAgIEdMQ29udGV4dCogc2hh
cmVkQ29udGV4dCA9IHNoYXJlZERpc3BsYXkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAgIGlmICgh
c2hhcmVkQ29udGV4dCkgeworICAgIGF1dG8qIGdzdEdMQ29udGV4dCA9IFBsYXRmb3JtRGlzcGxh
eTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuZ2xHc3RyZWFtZXJDb250ZXh0KCk7Cisg
ICAgaWYgKCFnc3RHTENvbnRleHQpIHsKICAgICAgICAgR1NUX1dBUk5JTkcoIldlYktpdCBzaGFy
ZWQgR0wgY29udGV4dCBpcyBub3QgYXZhaWxhYmxlLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCmlu
ZGV4IDUyMWIyMGQxMWNjOGRkOTRiZTI4NGQ3NDY5OWNkMjcxN2I0ZTA1NDUuLmFiZWI4NTdhN2Zk
ZTU0YTI3OWVmYzVkNTg4ZThkMzJjNjllZGYyYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKQEAgLTgyLDggKzgyLDYgQEAgdHlwZWRlZiBzdHJ1Y3Qg
X0dzdE1wZWd0c1NlY3Rpb24gR3N0TXBlZ3RzU2VjdGlvbjsKIAogdHlwZWRlZiBzdHJ1Y3QgX0dz
dFN0cmVhbVZvbHVtZSBHc3RTdHJlYW1Wb2x1bWU7CiB0eXBlZGVmIHN0cnVjdCBfR3N0VmlkZW9J
bmZvIEdzdFZpZGVvSW5mbzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RHTENvbnRleHQgR3N0R0xDb250
ZXh0OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEdMRGlzcGxheSBHc3RHTERpc3BsYXk7CiAKICNpZiBV
U0UoV1BFX1ZJREVPX1BMQU5FX0RJU1BMQVlfRE1BQlVGKQogc3RydWN0IHdwZV92aWRlb19wbGFu
ZV9kaXNwbGF5X2RtYWJ1Zl9zb3VyY2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391054</attachid>
            <date>2020-02-18 09:08:00 -0800</date>
            <delta_ts>2020-02-24 07:25:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200626-20200218180758.patch</filename>
            <type>text/plain</type>
            <size>22211</size>
            <attacher name="Víctor M. Jáquez L.">vjaquez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2ODI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGJiNjQ2NjUxODNkNzMy
N2E3NzBkY2E3ZjliMWE2OWNiOGE1MDM4Ni4uYTlhNGRmOGRjMTU2MTkyZTM3MjEzNDhlM2I3YjQ3
N2FkMzVlMDgwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDIwLTAyLTE3ICBWw61j
dG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgIDx2amFxdWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAg
W0dMXVtHU3RyZWFtZXJdIEluc3RhbnRpYXRlIEdzdEdMQ29udGV4dCB3aGVuIHRoZSBzaGFyZWQg
R0xDb250ZXh0IGlzIGNyZWF0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMDYyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJpZ2h0IG5vdyBvbmUgR3N0R0xDb250ZXh0IGlzIGNyZWF0ZWQgcGVyIHZp
ZGVvIHRhZywgd2hpY2ggaXMgYQorICAgICAgICB3cmFwcGVyIG9mIHRoZSBHTCBzaGFyZWQgY29u
dGV4dC4gRXZlcnkgdGltZSB0aGlzIHdyYXBwZXIgaXMKKyAgICAgICAgY3JlYXRlZCB0aGUgR0wg
Y29udGV4dCBoYXMgdG8gYmUgY3VycmVudCBpbiBvcmRlciB0byBpbml0aWFsaXplCisgICAgICAg
IHRoZSB3cmFwcGVyJ3MgaW50ZXJuYWwgc3RhdGUuCisKKyAgICAgICAgQSBiZXR0ZXIgYXBwcm9h
Y2ggd291bGQgYmUgdG8gaGF2ZSBhIHNpbmdsZSBHc3RHTENvbnRleHQgcGVyIEdMCisgICAgICAg
IGNvbnRleHQsIHRvIGluc3RhbnRpYXRlIGl0IHdoZW4gdGhlIEdMIGNvbnRleHQgaXMgY3JlYXRl
ZCBhbmQKKyAgICAgICAgY3VycmVudC4gVGhpcyBHc3RHTENvbnRleHQgd291bGQgYmUgdXNlZCBm
b3IgYWxsIHBsYXllcnMgaW4gdGhlCisgICAgICAgIHBhZ2UuCisKKyAgICAgICAgR0xDb250ZXh0
R1N0cmVhbWVyIGlzIGNsYXNzIGluc3RhbnRpYXRlZCBhcyBzaW5nbGV0b24gYnkKKyAgICAgICAg
UGxhdGZvcm1EaXNwbGF5LiBXaGVuIHRoZSBtZWRpYSBwbGF5ZXIgcmVxdWVzdCBmb3IgdGhlCisg
ICAgICAgIEdMQ29udGV4dEdTdHJlYW1lciBhIEdMIGNvbnRleHQgaXMgY3JlYXRlZCwgaWYgaXQg
d2Fzbid0IGJlZm9yZSwKKyAgICAgICAgYW5kIHdyYXBzIGl0LiBUaGUgY2xhc3MgaGFzIHR3byBn
ZXR0ZXJzLCBvbmUgZm9yIEdzdEdMQ29udGV4dAorICAgICAgICBvYmplY3QsIGFuZCBvdGhlciBm
b3IgR3N0R0xEaXNwbGF5LiBCb3RoIGFyZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUKKyAgICAgICAg
aW50ZXJuYWwgR1N0cmVhbWVyIEdMIGNvbnRleHQgaW4gdGhlIG11bHRpbWVkaWEgcGlwZWxpbmUu
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHJlcXVpcmVkLgorCisgICAgICAgICogcGxhdGZvcm0v
R1N0cmVhbWVyLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlz
cGxheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXk6OmdsR3N0cmVhbWVy
Q29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5Lmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMQ29udGV4dEdTdHJlYW1l
ci5jcHA6IEFkZGVkLgorICAgICAgICAoR0xDb250ZXh0R1N0cmVhbWVyOjpjcmVhdGUpOgorICAg
ICAgICAoR0xDb250ZXh0R1N0cmVhbWVyOjpHTENvbnRleHRHU3RyZWFtZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTENvbnRleHRHU3RyZWFtZXIuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpHTENvbnRleHRHU3RyZWFtZXI6OmdldENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6R0xDb250ZXh0R1N0cmVhbWVyOjpnZXREaXNwbGF5KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwOgor
ICAgICAgICAocmVxdWVzdEdMQ29udGV4dCk6CisgICAgICAgICh3ZWJLaXRHTFZpZGVvU2lua0No
YW5nZVN0YXRlKToKKyAgICAgICAgKHdlYktpdEdMVmlkZW9TaW5rUHJvYmVQbGF0Zm9ybSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5oOgorCiAyMDIwLTAyLTE4ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+
CiAKICAgICAgICAgW0xGQ11bVHJlZUJ1aWxkaW5nXSBUYWtlIGNyZWF0ZUxpbmVCcmVha0JveCdz
IHJldHVybiB2YWx1ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVh
bWVyLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCmluZGV4
IGVmYTVlNzU2OTUyMjc2MmRkOGFlYzdjZWJlMzM0YWE4MTk3ODVmZjYuLjYwMjM4OTZhZmY4OTU0
Zjg1YjMyMDRkMGQ3YTA5NjYwY2VhZjQ5NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0dTdHJlYW1lci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3Ry
ZWFtZXIuY21ha2UKQEAgLTExNyw2ICsxMTcsNyBAQCBpZiAoRU5BQkxFX1ZJREVPKQogICAgICAg
ICAgICAgJHtHU1RSRUFNRVJfR0xfTElCUkFSSUVTfQogICAgICAgICApCiAgICAgICAgIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0dMQ29udGV4dEdTdHJlYW1lci5jcHAKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9WaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXIuY3BwCiAgICAgICAgICkK
ICAgICBlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1EaXNwbGF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BsYXRmb3JtRGlzcGxheS5jcHAKaW5kZXggMTU2ZTVhYTJiNzM1ZGY2MWExYzE5NjZlZGIzMzZi
NWRjMTllMGZiYi4uOTQwZDIxNmJjYWZiZmQ3M2IxYzgxM2ExYzEzNDIxZGEzZjMyNzAyNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3Bs
YXkuY3BwCkBAIC03Miw2ICs3MiwxMCBAQAogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVJfR0wpCisjaW5j
bHVkZSAiR0xDb250ZXh0R1N0cmVhbWVyLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1EaXNwbGF5PiBQbGF0Zm9ybURpc3BsYXk6OmNy
ZWF0ZVBsYXRmb3JtRGlzcGxheSgpCkBAIC0yNDksNCArMjUzLDE0IEBAIHZvaWQgUGxhdGZvcm1E
aXNwbGF5OjpzaHV0RG93bkVnbERpc3BsYXlzKCkKIAogI2VuZGlmIC8vIFVTRShFR0wpCiAKKyNp
ZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVJfR0wpCitHTENvbnRleHRHU3RyZWFtZXIq
IFBsYXRmb3JtRGlzcGxheTo6Z2xHc3RyZWFtZXJDb250ZXh0KCkKK3sKKyAgICBpZiAoIW1fZ3N0
R0xDb250ZXh0KQorICAgICAgICBtX2dzdEdMQ29udGV4dCA9IEdMQ29udGV4dEdTdHJlYW1lcjo6
Y3JlYXRlKCk7CisgICAgcmV0dXJuIG1fZ3N0R0xDb250ZXh0LmdldCgpOworfQorI2VuZGlmCisK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuaAppbmRleCA1ZDZhYjVhZmU1ZDQyYWUwZmY2YjQ4
NjcyODZiYjIyM2E1Njc2MmYxLi5kMzU4MDVlMDIxY2Q0OWNhNWI4ZmEzNzk1MjNhOGRkYjJmYTM1
NDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9y
bURpc3BsYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9y
bURpc3BsYXkuaApAQCAtMzcsNiArMzcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEdMQ29udGV4dDsKIAorY2xhc3MgR0xEaXNwbGF5R1N0cmVhbWVyOworY2xhc3MgR0xDb250ZXh0
R1N0cmVhbWVyOworCiBjbGFzcyBQbGF0Zm9ybURpc3BsYXkgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFBsYXRmb3JtRGlzcGxheSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgpAQCAtNzEsNiArNzQsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNodXREb3duRWds
RGlzcGxheXMoKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVS
X0dMKQorICAgIFdFQkNPUkVfRVhQT1JUIEdMQ29udGV4dEdTdHJlYW1lciogZ2xHc3RyZWFtZXJD
b250ZXh0KCk7CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIGVudW0gY2xhc3MgTmF0aXZlRGlz
cGxheU93bmVkIHsgTm8sIFllcyB9OwogICAgIGV4cGxpY2l0IFBsYXRmb3JtRGlzcGxheShOYXRp
dmVEaXNwbGF5T3duZWQpOwpAQCAtOTksNiArMTA2LDExIEBAIHByaXZhdGU6CiAgICAgaW50IG1f
ZWdsTWFqb3JWZXJzaW9uIHsgMCB9OwogICAgIGludCBtX2VnbE1pbm9yVmVyc2lvbiB7IDAgfTsK
ICNlbmRpZgorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSX0dMKQorICAgIHN0
ZDo6dW5pcXVlX3B0cjxHTENvbnRleHRHU3RyZWFtZXI+IG1fZ3N0R0xDb250ZXh0OworI2VuZGlm
CisKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTENvbnRleHRHU3RyZWFtZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMQ29udGV4dEdTdHJl
YW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYmFkZjY0OGUyYjdkZGEyNGI1MGYyZDU1MDc1ODE5ZjdmYjM3
MDZlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9HTENvbnRleHRHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsMTM2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiR0xDb250ZXh0R1N0cmVhbWVyLmgiCisKKyNpZiBFTkFCTEUoVklERU8pICYmIFVTRShH
U1RSRUFNRVJfR0wpCisKKyNpbmNsdWRlICJHTENvbnRleHQuaCIKKworI2lmIFVTRShHTFgpCisj
aW5jbHVkZSAiR0xDb250ZXh0R0xYLmgiCisjaW5jbHVkZSA8Z3N0L2dsL3gxMS9nc3RnbGRpc3Bs
YXlfeDExLmg+CisjZW5kaWYKKworI2lmIFVTRShFR0wpCisjaW5jbHVkZSAiR0xDb250ZXh0RUdM
LmgiCisjaW5jbHVkZSA8Z3N0L2dsL2VnbC9nc3RnbGRpc3BsYXlfZWdsLmg+CisjZW5kaWYKKwor
I2lmIFBMQVRGT1JNKFgxMSkKKyNpbmNsdWRlICJQbGF0Zm9ybURpc3BsYXlYMTEuaCIKKyNlbmRp
ZgorCisjaWYgUExBVEZPUk0oV0FZTEFORCkKKyNpbmNsdWRlICJQbGF0Zm9ybURpc3BsYXlXYXls
YW5kLmgiCisjZW5kaWYKKworI2lmIFVTRShXUEVfUkVOREVSRVIpCisjaW5jbHVkZSAiUGxhdGZv
cm1EaXNwbGF5TGliV1BFLmgiCisjZW5kaWYKKworI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQ
SQorI2luY2x1ZGUgPGdzdC9nbC9nbC5oPgorI3VuZGVmIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0R1N0
cmVhbWVyPiBHTENvbnRleHRHU3RyZWFtZXI6OmNyZWF0ZSgpCit7CisgICAgYXV0byYgc2hhcmVk
RGlzcGxheSA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCk7
CisgICAgYXV0byogc2hhcmVkQ29udGV4dCA9IHNoYXJlZERpc3BsYXkuc2hhcmluZ0dMQ29udGV4
dCgpOworICAgIGlmICghc2hhcmVkQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHRHU3RyZWFtZXI+KG5ldyBHTENvbnRl
eHRHU3RyZWFtZXIoc2hhcmVkRGlzcGxheSwgc2hhcmVkQ29udGV4dCkpOworfQorCitHTENvbnRl
eHRHU3RyZWFtZXI6OkdMQ29udGV4dEdTdHJlYW1lcihQbGF0Zm9ybURpc3BsYXkmIHNoYXJlZERp
c3BsYXksIEdMQ29udGV4dCogc2hhcmVkQ29udGV4dCkKK3sKKyAgICBib29sIHNob3VsZEFkb3B0
UmVmID0gd2Via2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDE0LCAwKTsKKworI2lmIFBMQVRGT1JNKFgx
MSkKKyNpZiBVU0UoR0xYKQorICAgIGlmIChpczxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERp
c3BsYXkpKSB7CisgICAgICAgIGlmIChzaG91bGRBZG9wdFJlZikKKyAgICAgICAgICAgIG1fZGlz
cGxheSA9IGFkb3B0R1JlZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV94MTFfbmV3X3dp
dGhfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLm5h
dGl2ZSgpKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Rpc3BsYXkgPSBHU1RfR0xf
RElTUExBWShnc3RfZ2xfZGlzcGxheV94MTFfbmV3X3dpdGhfZGlzcGxheShkb3duY2FzdDxQbGF0
Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLm5hdGl2ZSgpKSk7CisgICAgfQorI2VsaWYg
VVNFKEVHTCkKKyAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KSkg
eworICAgICAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCisgICAgICAgICAgICBtX2Rpc3BsYXkgPSBh
ZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9k
aXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkuZWdsRGlz
cGxheSgpKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Rpc3BsYXkgPSBHU1RfR0xf
RElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8
UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsKKyAgICB9
CisjZW5kaWYKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0FZTEFORCkKKyAgICBpZiAoaXM8UGxh
dGZvcm1EaXNwbGF5V2F5bGFuZD4oc2hhcmVkRGlzcGxheSkpIHsKKyAgICAgICAgaWYgKHNob3Vs
ZEFkb3B0UmVmKQorICAgICAgICAgICAgbV9kaXNwbGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQ
TEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0
Zm9ybURpc3BsYXlXYXlsYW5kPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fZGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9k
aXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlX
YXlsYW5kPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsKKyAgICB9CisjZW5kaWYKKwor
I2lmIFVTRShXUEVfUkVOREVSRVIpCisgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheUxpYldQRT4o
c2hhcmVkRGlzcGxheSkpIHsKKyAgICAgICAgaWYgKHNob3VsZEFkb3B0UmVmKQorICAgICAgICAg
ICAgbV9kaXNwbGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2Vn
bF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNo
YXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bV9kaXNwbGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2Vn
bF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheUxpYldQRT4oc2hhcmVkRGlzcGxheSku
ZWdsRGlzcGxheSgpKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBHc3RHTFBsYXRmb3JtIGdsUGxh
dGZvcm0gPSBzaGFyZWRDb250ZXh0LT5pc0VHTENvbnRleHQoKSA/IEdTVF9HTF9QTEFURk9STV9F
R0wgOiBHU1RfR0xfUExBVEZPUk1fR0xYOworCisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICBHc3RH
TEFQSSBnbEFQSSA9IEdTVF9HTF9BUElfR0xFUzI7CisjZWxpZiBVU0UoT1BFTkdMKQorICAgIEdz
dEdMQVBJIGdsQVBJID0gR1NUX0dMX0FQSV9PUEVOR0w7CisjZWxzZQorICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworI2VuZGlmCisKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIGNvbnRl
eHRIYW5kbGUgPSBzaGFyZWRDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBBU1NFUlQo
Y29udGV4dEhhbmRsZSk7CisKKyAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCisgICAgICAgIG1fY29u
dGV4dCA9IGFkb3B0R1JlZihnc3RfZ2xfY29udGV4dF9uZXdfd3JhcHBlZChtX2Rpc3BsYXkuZ2V0
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3VpbnRwdHI+KGNvbnRleHRIYW5kbGUpLCBnbFBsYXRmb3Jt
LCBnbEFQSSkpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0ID0gZ3N0X2dsX2NvbnRleHRf
bmV3X3dyYXBwZWQobV9kaXNwbGF5LmdldCgpLCByZWludGVycHJldF9jYXN0PGd1aW50cHRyPihj
b250ZXh0SGFuZGxlKSwgZ2xQbGF0Zm9ybSwgZ2xBUEkpOworCisgICAgLy8gQWN0aXZhdGUgYW5k
IGZpbGwgdGhlIEdTdHJlYW1lciB3cmFwcGVkIGNvbnRleHQgd2l0aCB0aGUgV2Via2l0J3Mgc2hh
cmVkIG9uZS4KKyAgICBhdXRvKiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1
cnJlbnQoKTsKKyAgICBzaGFyZWRDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoZ3N0X2dsX2NvbnRleHRfYWN0aXZhdGUobV9jb250ZXh0LmdldCgpLCBUUlVFKSkgeworICAg
ICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIGlmICghZ3N0X2dsX2Nv
bnRleHRfZmlsbF9pbmZvKG1fY29udGV4dC5nZXQoKSwgJmVycm9yLm91dFB0cigpKSkKKyAgICAg
ICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gZmlsbCBpbiBHU3RyZWFtZXIgY29udGV4dDog
JXMiLCBlcnJvci0+bWVzc2FnZSk7CisgICAgICAgIGdzdF9nbF9jb250ZXh0X2FjdGl2YXRlKG1f
Y29udGV4dC5nZXQoKSwgRkFMU0UpOworICAgIH0gZWxzZQorICAgICAgICBHU1RfV0FSTklORygi
RmFpbGVkIHRvIGFjdGl2YXRlIEdTdHJlYW1lciBjb250ZXh0ICUiIEdTVF9QVFJfRk9STUFULCBt
X2NvbnRleHQuZ2V0KCkpOworICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCisgICAgICAg
IHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisKKyNlbmRp
ZiAvLyBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVJfR0wpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR0xDb250ZXh0R1N0cmVhbWVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR0xDb250ZXh0
R1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGMwZmMwMTAyOGRjMGI3ZjQyNTUxNmM4NWMyZmU2ODJj
YzE5MmVmNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9HTENvbnRleHRHU3RyZWFtZXIuaApAQCAtMCwwICsxLDQ4IEBACisvKgor
ICogIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEsIFMuTAorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RS
RUFNRVJfR0wpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybURpc3BsYXkuaCIKKwordHlwZWRlZiBzdHJ1Y3QgX0dzdEdMQ29udGV4dCBHc3RHTENvbnRl
eHQ7Cit0eXBlZGVmIHN0cnVjdCBfR3N0R0xEaXNwbGF5IEdzdEdMRGlzcGxheTsKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBHTENvbnRleHRHU3RyZWFtZXIgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxH
TENvbnRleHRHU3RyZWFtZXI+IGNyZWF0ZSgpOworICAgIEdSZWZQdHI8R3N0R0xDb250ZXh0PiBn
ZXRDb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CisgICAgR1JlZlB0cjxHc3RHTERpc3Bs
YXk+IGdldERpc3BsYXkoKSB7IHJldHVybiBtX2Rpc3BsYXk7IH0KKworcHJpdmF0ZToKKyAgICBH
TENvbnRleHRHU3RyZWFtZXIoUGxhdGZvcm1EaXNwbGF5JiBzaGFyZWREaXNwbGF5LCBHTENvbnRl
eHQgKiBzaGFyZWRDb250ZXh0KTsKKworICAgIEdSZWZQdHI8R3N0R0xDb250ZXh0PiBtX2NvbnRl
eHQ7CisgICAgR1JlZlB0cjxHc3RHTERpc3BsYXk+IG1fZGlzcGxheTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1F
Ul9HTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9HTFZpZGVvU2lua0dTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwCmluZGV4IDM2NzYzNzc4
OTY1MGViNzY2YTliNTM1YmMyMzEyNTMwMWExMjgyOWYuLjRkZmE0ZGExZWI0MmQxMThhYzZkYmYx
MTk0NWE2ZmU3YmI3OGZiODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9HTFZpZGVvU2lua0dTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNw
cApAQCAtMjIsMzQgKzIyLDEzIEBACiAKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFN
RVJfR0wpCiAKLSNpbmNsdWRlICJHTENvbnRleHQuaCIKKyNpbmNsdWRlICJHTENvbnRleHRHU3Ry
ZWFtZXIuaCIKICNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKICNpbmNsdWRlICJNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIuaCIKKwogI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc2luay5o
PgogI2luY2x1ZGUgPHd0Zi9nbGliL1dURkdUeXBlLmg+CiAKLSNpZiBVU0UoR0xYKQotI2luY2x1
ZGUgIkdMQ29udGV4dEdMWC5oIgotI2luY2x1ZGUgPGdzdC9nbC94MTEvZ3N0Z2xkaXNwbGF5X3gx
MS5oPgotI2VuZGlmCi0KLSNpZiBVU0UoRUdMKQotI2luY2x1ZGUgIkdMQ29udGV4dEVHTC5oIgot
I2luY2x1ZGUgPGdzdC9nbC9lZ2wvZ3N0Z2xkaXNwbGF5X2VnbC5oPgotI2VuZGlmCi0KLSNpZiBQ
TEFURk9STShYMTEpCi0jaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5WDExLmgiCi0jZW5kaWYKLQot
I2lmIFBMQVRGT1JNKFdBWUxBTkQpCi0jaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5V2F5bGFuZC5o
IgotI2VuZGlmCi0KLSNpZiBVU0UoV1BFX1JFTkRFUkVSKQotI2luY2x1ZGUgIlBsYXRmb3JtRGlz
cGxheUxpYldQRS5oIgotI2VuZGlmCi0KIC8vIGdzdGdsYXBpLmggbWF5IGluY2x1ZGUgZWdscGxh
dGZvcm0uaCBhbmQgaXQgaW5jbHVkZXMgWC5oLCB3aGljaAogLy8gZGVmaW5lcyBOb25lLCBicmVh
a2luZyBNZWRpYVBsYXllcjo6Tm9uZSBlbnVtCiAjaWYgUExBVEZPUk0oWDExKSAmJiBHU1RfR0xf
SEFWRV9QTEFURk9STV9FR0wKQEAgLTY2LDggKzQ1LDYgQEAgZW51bSB7CiAKIHN0cnVjdCBfV2Vi
S2l0R0xWaWRlb1NpbmtQcml2YXRlIHsKICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGFwcFNpbms7
Ci0gICAgR1JlZlB0cjxHc3RHTENvbnRleHQ+IGdsQ29udGV4dDsKLSAgICBHUmVmUHRyPEdzdEdM
RGlzcGxheT4gZ2xEaXNwbGF5OwogICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gZ2xEaXNwbGF5RWxl
bWVudENvbnRleHQ7CiAgICAgR1JlZlB0cjxHc3RDb250ZXh0PiBnbEFwcEVsZW1lbnRDb250ZXh0
OwogICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogbWVkaWFQbGF5ZXJQcml2YXRlOwpA
QCAtMTQwLDExMyArMTE3LDEzIEBAIHZvaWQgd2ViS2l0R0xWaWRlb1NpbmtGaW5hbGl6ZShHT2Jq
ZWN0KiBvYmplY3QpCiAgICAgR1NUX0NBTExfUEFSRU5UKEdfT0JKRUNUX0NMQVNTLCBmaW5hbGl6
ZSwgKG9iamVjdCkpOwogfQogCi1zdGF0aWMgYm9vbCBlbnN1cmVHc3RHTENvbnRleHQoV2ViS2l0
R0xWaWRlb1NpbmsqIHNpbmspCitHUmVmUHRyPEdzdENvbnRleHQ+IHJlcXVlc3RHTENvbnRleHQo
Y29uc3QgY2hhciogY29udGV4dFR5cGUpCiB7Ci0gICAgV2ViS2l0R0xWaWRlb1NpbmtQcml2YXRl
KiBwcml2ID0gc2luay0+cHJpdjsKLQotICAgIGlmIChwcml2LT5nbENvbnRleHQpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgYXV0byYgc2hhcmVkRGlzcGxheSA9IFBsYXRmb3JtRGlzcGxh
eTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCk7Ci0KLSAgICAvLyBUaGUgZmxvYXRpbmcg
cmVmIHJlbW92YWwgc3VwcG9ydCB3YXMgYWRkZWQgaW4gaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5v
cmcvc2hvd19idWcuY2dpP2lkPTc0MzA2Mi4KLSAgICBib29sIHNob3VsZEFkb3B0UmVmID0gd2Vi
a2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDE0LCAwKTsKLSAgICBpZiAoIXByaXYtPmdsRGlzcGxheSkg
ewotI2lmIFBMQVRGT1JNKFgxMSkKLSNpZiBVU0UoR0xYKQotICAgICAgICBpZiAoaXM8UGxhdGZv
cm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChzaW5rLCAiQ3JlYXRpbmcgWDExIHNoYXJlZCBHTCBkaXNwbGF5Iik7Ci0gICAgICAgICAg
ICBpZiAoc2hvdWxkQWRvcHRSZWYpCi0gICAgICAgICAgICAgICAgcHJpdi0+Z2xEaXNwbGF5ID0g
YWRvcHRHUmVmKEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X3gxMV9uZXdfd2l0aF9kaXNw
bGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkubmF0aXZlKCkp
KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcHJpdi0+Z2xEaXNwbGF5ID0g
R1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfeDExX25ld193aXRoX2Rpc3BsYXkoZG93bmNh
c3Q8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5uYXRpdmUoKSkpOwotICAgICAg
ICB9Ci0jZWxpZiBVU0UoRUdMKQotICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5WDExPihz
aGFyZWREaXNwbGF5KSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzaW5rLCAiQ3Jl
YXRpbmcgWDExIHNoYXJlZCBFR0wgZGlzcGxheSIpOwotICAgICAgICAgICAgaWYgKHNob3VsZEFk
b3B0UmVmKQotICAgICAgICAgICAgICAgIHByaXYtPmdsRGlzcGxheSA9IGFkb3B0R1JlZihHU1Rf
R0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNh
c3Q8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKSk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcHJpdi0+Z2xEaXNwbGF5ID0gR1NUX0dM
X0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0
PFBsYXRmb3JtRGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSk7Ci0gICAg
ICAgIH0KLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXQVlMQU5EKQotICAgICAgICBp
ZiAoaXM8UGxhdGZvcm1EaXNwbGF5V2F5bGFuZD4oc2hhcmVkRGlzcGxheSkpIHsKLSAgICAgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2luaywgIkNyZWF0aW5nIFdheWxhbmQgc2hhcmVkIGRpc3Bs
YXkiKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRBZG9wdFJlZikKLSAgICAgICAgICAgICAgICBw
cml2LT5nbERpc3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlf
ZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVdheWxhbmQ+
KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBwcml2LT5nbERpc3BsYXkgPSBHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxh
eV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5V2F5bGFu
ZD4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSk7Ci0gICAgICAgIH0KLSNlbmRpZgotCi0j
aWYgVVNFKFdQRV9SRU5ERVJFUikKLSAgICAgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheUxpYldQ
RT4oc2hhcmVkRGlzcGxheSkpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2luaywg
IkNyZWF0aW5nIFdQRSBzaGFyZWQgRUdMIGRpc3BsYXkiKTsKLSAgICAgICAgICAgIGlmIChzaG91
bGRBZG9wdFJlZikKLSAgICAgICAgICAgICAgICBwcml2LT5nbERpc3BsYXkgPSBhZG9wdEdSZWYo
R1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRv
d25jYXN0PFBsYXRmb3JtRGlzcGxheUxpYldQRT4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgp
KSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByaXYtPmdsRGlzcGxheSA9
IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShk
b3duY2FzdDxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXko
KSkpOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBBU1NFUlQocHJpdi0+Z2xEaXNwbGF5
KTsKLSAgICB9Ci0KLSAgICBHTENvbnRleHQqIHNoYXJlZENvbnRleHQgPSBzaGFyZWREaXNwbGF5
LnNoYXJpbmdHTENvbnRleHQoKTsKLSAgICBpZiAoIXNoYXJlZENvbnRleHQpIHsKLSAgICAgICAg
R1NUX0VMRU1FTlRfRVJST1IoR1NUX0VMRU1FTlRfQ0FTVChzaW5rKSwgUkVTT1VSQ0UsIE5PVF9G
T1VORCwgKCgiV2ViS2l0IHNoYXJlZCBHTCBjb250ZXh0IHVuYXZhaWxhYmxlIikpLAotICAgICAg
ICAgICAgKCJUaGUgV2ViS2l0IHNoYXJlZCBHTCBjb250ZXh0IHNvbWVob3cgZGlzYXBwZWFyZWQu
IFZpZGVvIHRleHR1cmVzIHJlbmRlcmluZyB3aWxsIGZhaWwuIikpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gRUdMIGFuZCBHTFggYXJlIG11dHVhbGx5IGV4Y2x1c2l2
ZSwgbm8gbmVlZCBmb3IgaWZkZWZzIGhlcmUuCi0gICAgR3N0R0xQbGF0Zm9ybSBnbFBsYXRmb3Jt
ID0gc2hhcmVkQ29udGV4dC0+aXNFR0xDb250ZXh0KCkgPyBHU1RfR0xfUExBVEZPUk1fRUdMIDog
R1NUX0dMX1BMQVRGT1JNX0dMWDsKLQotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgR3N0R0xBUEkg
Z2xBUEkgPSBHU1RfR0xfQVBJX0dMRVMyOwotI2VsaWYgVVNFKE9QRU5HTCkKLSAgICBHc3RHTEFQ
SSBnbEFQSSA9IEdTVF9HTF9BUElfT1BFTkdMOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSNlbmRpZgotCi0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBjb250ZXh0SGFu
ZGxlID0gc2hhcmVkQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0
SGFuZGxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoc2hvdWxkQWRvcHRSZWYp
Ci0gICAgICAgIHByaXYtPmdsQ29udGV4dCA9IGFkb3B0R1JlZihnc3RfZ2xfY29udGV4dF9uZXdf
d3JhcHBlZChwcml2LT5nbERpc3BsYXkuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3VpbnRwdHI+
KGNvbnRleHRIYW5kbGUpLCBnbFBsYXRmb3JtLCBnbEFQSSkpOwotICAgIGVsc2UKLSAgICAgICAg
cHJpdi0+Z2xDb250ZXh0ID0gZ3N0X2dsX2NvbnRleHRfbmV3X3dyYXBwZWQocHJpdi0+Z2xEaXNw
bGF5LmdldCgpLCByZWludGVycHJldF9jYXN0PGd1aW50cHRyPihjb250ZXh0SGFuZGxlKSwgZ2xQ
bGF0Zm9ybSwgZ2xBUEkpOwotCi0gICAgLy8gQWN0aXZhdGUgYW5kIGZpbGwgdGhlIEdTdHJlYW1l
ciB3cmFwcGVkIGNvbnRleHQgd2l0aCB0aGUgV2Via2l0J3Mgc2hhcmVkIG9uZS4KLSAgICBhdXRv
KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKLSAgICBzaGFy
ZWRDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBpZiAoZ3N0X2dsX2NvbnRleHRf
YWN0aXZhdGUocHJpdi0+Z2xDb250ZXh0LmdldCgpLCBUUlVFKSkgewotICAgICAgICBHVW5pcXVl
T3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgIGlmICghZ3N0X2dsX2NvbnRleHRfZmlsbF9p
bmZvKHByaXYtPmdsQ29udGV4dC5nZXQoKSwgJmVycm9yLm91dFB0cigpKSkKLSAgICAgICAgICAg
IEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gZmlsbCBpbiBHU3RyZWFtZXIgY29udGV4dDogJXMiLCBl
cnJvci0+bWVzc2FnZSk7Ci0gICAgICAgIGdzdF9nbF9jb250ZXh0X2FjdGl2YXRlKHByaXYtPmds
Q29udGV4dC5nZXQoKSwgRkFMU0UpOwotICAgIH0gZWxzZQotICAgICAgICBHU1RfV0FSTklORygi
RmFpbGVkIHRvIGFjdGl2YXRlIEdTdHJlYW1lciBjb250ZXh0ICUiIEdTVF9QVFJfRk9STUFULCBw
cml2LT5nbENvbnRleHQuZ2V0KCkpOwotICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCi0g
ICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotR1JlZlB0cjxHc3RDb250ZXh0PiByZXF1ZXN0R0xDb250ZXh0
KFdlYktpdEdMVmlkZW9TaW5rKiBzaW5rLCBjb25zdCBjaGFyKiBjb250ZXh0VHlwZSkKLXsKLSAg
ICBXZWJLaXRHTFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5wcml2OwotICAgIGlmICgh
ZW5zdXJlR3N0R0xDb250ZXh0KHNpbmspKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBh
dXRvKiBnbEdzdENvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21w
b3NpdGluZygpLmdsR3N0cmVhbWVyQ29udGV4dCgpOwogCiAgICAgaWYgKCFnX3N0cmNtcDAoY29u
dGV4dFR5cGUsIEdTVF9HTF9ESVNQTEFZX0NPTlRFWFRfVFlQRSkpIHsKICAgICAgICAgR3N0Q29u
dGV4dCogZGlzcGxheUNvbnRleHQgPSBnc3RfY29udGV4dF9uZXcoR1NUX0dMX0RJU1BMQVlfQ09O
VEVYVF9UWVBFLCBUUlVFKTsKLSAgICAgICAgZ3N0X2NvbnRleHRfc2V0X2dsX2Rpc3BsYXkoZGlz
cGxheUNvbnRleHQsIHByaXYtPmdsRGlzcGxheS5nZXQoKSk7CisgICAgICAgIGdzdF9jb250ZXh0
X3NldF9nbF9kaXNwbGF5KGRpc3BsYXlDb250ZXh0LCBnbEdzdENvbnRleHQtPmdldERpc3BsYXko
KS5nZXQoKSk7CiAgICAgICAgIHJldHVybiBhZG9wdEdSZWYoZGlzcGxheUNvbnRleHQpOwogICAg
IH0KIApAQCAtMjU0LDkgKzEzMSw5IEBAIEdSZWZQdHI8R3N0Q29udGV4dD4gcmVxdWVzdEdMQ29u
dGV4dChXZWJLaXRHTFZpZGVvU2luayogc2luaywgY29uc3QgY2hhciogY29udGV4CiAgICAgICAg
IEdzdENvbnRleHQqIGFwcENvbnRleHQgPSBnc3RfY29udGV4dF9uZXcoImdzdC5nbC5hcHBfY29u
dGV4dCIsIFRSVUUpOwogICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9jb250
ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShhcHBDb250ZXh0KTsKICNpZiBHU1RfQ0hFQ0tfVkVSU0lP
TigxLCAxMiwgMCkKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoc3RydWN0dXJlLCAiY29udGV4
dCIsIEdTVF9UWVBFX0dMX0NPTlRFWFQsIHByaXYtPmdsQ29udGV4dC5nZXQoKSwgbnVsbHB0cik7
CisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHN0cnVjdHVyZSwgImNvbnRleHQiLCBHU1RfVFlQ
RV9HTF9DT05URVhULCBnbEdzdENvbnRleHQtPmdldENvbnRleHQoKS5nZXQoKSwgbnVsbHB0cik7
CiAjZWxzZQotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChzdHJ1Y3R1cmUsICJjb250ZXh0Iiwg
R1NUX0dMX1RZUEVfQ09OVEVYVCwgcHJpdi0+Z2xDb250ZXh0LmdldCgpLCBudWxscHRyKTsKKyAg
ICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoc3RydWN0dXJlLCAiY29udGV4dCIsIEdTVF9HTF9UWVBF
X0NPTlRFWFQsIGdsR3N0Q29udGV4dC0+Z2V0Q29udGV4dCgpLmdldCgpLCBudWxscHRyKTsKICNl
bmRpZgogICAgICAgICByZXR1cm4gYWRvcHRHUmVmKGFwcENvbnRleHQpOwogICAgIH0KQEAgLTI3
OCwxMyArMTU1LDEzIEBAIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRHTFZpZGVv
U2lua0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzCiAgICAgY2FzZSBHU1RfU1RB
VEVfQ0hBTkdFX1JFQURZX1RPX1JFQURZOgogICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFE
WV9UT19QQVVTRUQ6IHsKICAgICAgICAgaWYgKCFwcml2LT5nbERpc3BsYXlFbGVtZW50Q29udGV4
dCkKLSAgICAgICAgICAgIHByaXYtPmdsRGlzcGxheUVsZW1lbnRDb250ZXh0ID0gcmVxdWVzdEdM
Q29udGV4dChzaW5rLCBHU1RfR0xfRElTUExBWV9DT05URVhUX1RZUEUpOworICAgICAgICAgICAg
cHJpdi0+Z2xEaXNwbGF5RWxlbWVudENvbnRleHQgPSByZXF1ZXN0R0xDb250ZXh0KEdTVF9HTF9E
SVNQTEFZX0NPTlRFWFRfVFlQRSk7CiAKICAgICAgICAgaWYgKHByaXYtPmdsRGlzcGxheUVsZW1l
bnRDb250ZXh0KQogICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1F
TlRfQ0FTVChzaW5rKSwgcHJpdi0+Z2xEaXNwbGF5RWxlbWVudENvbnRleHQuZ2V0KCkpOwogCiAg
ICAgICAgIGlmICghcHJpdi0+Z2xBcHBFbGVtZW50Q29udGV4dCkKLSAgICAgICAgICAgIHByaXYt
PmdsQXBwRWxlbWVudENvbnRleHQgPSByZXF1ZXN0R0xDb250ZXh0KHNpbmssICJnc3QuZ2wuYXBw
X2NvbnRleHQiKTsKKyAgICAgICAgICAgIHByaXYtPmdsQXBwRWxlbWVudENvbnRleHQgPSByZXF1
ZXN0R0xDb250ZXh0KCJnc3QuZ2wuYXBwX2NvbnRleHQiKTsKIAogICAgICAgICBpZiAocHJpdi0+
Z2xBcHBFbGVtZW50Q29udGV4dCkKICAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0
KEdTVF9FTEVNRU5UX0NBU1Qoc2luayksIHByaXYtPmdsQXBwRWxlbWVudENvbnRleHQuZ2V0KCkp
OwpAQCAtMzc2LDkgKzI1Myw4IEBAIHZvaWQgd2ViS2l0R0xWaWRlb1NpbmtTZXRNZWRpYVBsYXll
clByaXZhdGUoV2ViS2l0R0xWaWRlb1NpbmsqIHNpbmssIE1lZGlhUGxheWVyCiAKIGJvb2wgd2Vi
S2l0R0xWaWRlb1NpbmtQcm9iZVBsYXRmb3JtKCkKIHsKLSAgICBhdXRvJiBzaGFyZWREaXNwbGF5
ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKTsKLSAgICBH
TENvbnRleHQqIHNoYXJlZENvbnRleHQgPSBzaGFyZWREaXNwbGF5LnNoYXJpbmdHTENvbnRleHQo
KTsKLSAgICBpZiAoIXNoYXJlZENvbnRleHQpIHsKKyAgICBhdXRvKiBnc3RHTENvbnRleHQgPSBQ
bGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLmdsR3N0cmVhbWVy
Q29udGV4dCgpOworICAgIGlmICghZ3N0R0xDb250ZXh0KSB7CiAgICAgICAgIEdTVF9XQVJOSU5H
KCJXZWJLaXQgc2hhcmVkIEdMIGNvbnRleHQgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIuaAppbmRleCA1MjFiMjBkMTFjYzhkZDk0YmUyODRkNzQ2OTljZDI3MTdiNGUwNTQ1
Li5hYmViODU3YTdmZGU1NGEyNzllZmM1ZDU4OGU4ZDMyYzY5ZWRmMmE4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC04Miw4ICs4Miw2IEBAIHR5
cGVkZWYgc3RydWN0IF9Hc3RNcGVndHNTZWN0aW9uIEdzdE1wZWd0c1NlY3Rpb247CiAKIHR5cGVk
ZWYgc3RydWN0IF9Hc3RTdHJlYW1Wb2x1bWUgR3N0U3RyZWFtVm9sdW1lOwogdHlwZWRlZiBzdHJ1
Y3QgX0dzdFZpZGVvSW5mbyBHc3RWaWRlb0luZm87Ci10eXBlZGVmIHN0cnVjdCBfR3N0R0xDb250
ZXh0IEdzdEdMQ29udGV4dDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RHTERpc3BsYXkgR3N0R0xEaXNw
bGF5OwogCiAjaWYgVVNFKFdQRV9WSURFT19QTEFORV9ESVNQTEFZX0RNQUJVRikKIHN0cnVjdCB3
cGVfdmlkZW9fcGxhbmVfZGlzcGxheV9kbWFidWZfc291cmNlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391535</attachid>
            <date>2020-02-24 07:25:11 -0800</date>
            <delta_ts>2020-02-25 08:58:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200626-20200224162510.patch</filename>
            <type>text/plain</type>
            <size>20381</size>
            <attacher name="Víctor M. Jáquez L.">vjaquez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3MjAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDAxNGFiODk5OWQ2ZDcy
YWM1NGYzYzgwNTMyMDNkMDU4ODM3ODc3Yy4uY2I1NzM5NDBlOTg1ZTU4NWU1NmJmNTQ3OGY2YTM4
YzE0MDViMzUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDIwLTAyLTI0ICBWw61j
dG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgIDx2amFxdWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAg
W0dMXVtHU3RyZWFtZXJdIEluc3RhbnRpYXRlIEdzdEdMQ29udGV4dCB3aGVuIHRoZSBzaGFyZWQg
R0xDb250ZXh0IGlzIGNyZWF0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMDYyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBHc3RHTENvbnRleHQgYW5kIEdzdEdMRGlzcGxh
eSBhcyBwYXJ0IG9mCisgICAgICAgIFBsYXRmb3JtRGlzcGxheS4KKworICAgICAgICBSaWdodCBu
b3cgb25lIEdzdEdMQ29udGV4dCBpcyBjcmVhdGVkIHBlciB2aWRlbyB0YWcsIHdoaWNoIGlzIGEK
KyAgICAgICAgd3JhcHBlciBvZiB0aGUgR0wgc2hhcmVkIGNvbnRleHQuIEV2ZXJ5IHRpbWUgdGhp
cyB3cmFwcGVyIGlzCisgICAgICAgIGNyZWF0ZWQgdGhlIEdMIGNvbnRleHQgaGFzIHRvIGJlIGN1
cnJlbnQgaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZQorICAgICAgICB0aGUgd3JhcHBlcidzIGludGVy
bmFsIHN0YXRlLgorCisgICAgICAgIEEgYmV0dGVyIGFwcHJvYWNoIHdvdWxkIGJlIHRvIGhhdmUg
YSBzaW5nbGUgR3N0R0xDb250ZXh0IHBlciBHTAorICAgICAgICBjb250ZXh0LCB0byBpbnN0YW50
aWF0ZSBpdCB3aGVuIHRoZSBHTCBjb250ZXh0IGlzIGNyZWF0ZWQgYW5kCisgICAgICAgIGN1cnJl
bnQuIFRoaXMgR3N0R0xDb250ZXh0IHdvdWxkIGJlIHVzZWQgZm9yIGFsbCBtZWRpYSBwbGF5ZXJz
LgorCisgICAgICAgIEdzdEdMQ29udGV4dCBhbmQgR3N0R0xEaXNwbGF5IGFyZSBpbnN0YW50aWF0
ZWQgYXMgc2luZ2xldG9ucyBieQorICAgICAgICBQbGF0Zm9ybURpc3BsYXkuIFdoZW4gdGhlIG1l
ZGlhIHBsYXllciByZXF1ZXN0IGZvciB0aGUKKyAgICAgICAgR3N0R0xDb250ZXh0IGEgR0wgY29u
dGV4dCBpcyBpbnN0YW50aWF0ZWQsIGlmIGl0IHdhc24ndCBiZWZvcmUsCisgICAgICAgIGFuZCB3
cmFwcyBpdC4gUGxhdGZvcm1EaXNwbGF5IGFkZHMgdHdvIGdldHRlcnMsIG9uZSBmb3IKKyAgICAg
ICAgR3N0R0xDb250ZXh0IG9iamVjdCwgYW5kIG90aGVyIGZvciBHc3RHTERpc3BsYXkuIEJvdGgg
YXJlIHVzZWQgdG8KKyAgICAgICAgY29uZmlndXJlIHRoZSBpbnRlcm5hbCBHU3RyZWFtZXIgR0wg
Y29udGV4dCBpbiB0aGUgbXVsdGltZWRpYQorICAgICAgICBwaXBlbGluZS4KKworICAgICAgICBO
byBuZXcgdGVzdHMgYXJlIG5lZWRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL0dTdHJlYW1lci5j
bWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5Ojp+UGxhdGZvcm1EaXNwbGF5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheTo6dGVybWluYXRlRUdMRGlzcGxheSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXk6OmRlc3Ryb3lHc3RHTENvbnRleHQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZpZGVvU2lua0dTdHJlYW1lci5jcHA6Cisg
ICAgICAgIChyZXF1ZXN0R0xDb250ZXh0KToKKyAgICAgICAgKHdlYktpdEdMVmlkZW9TaW5rQ2hh
bmdlU3RhdGUpOgorICAgICAgICAod2ViS2l0R0xWaWRlb1NpbmtQcm9iZVBsYXRmb3JtKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1BsYXRmb3Jt
RGlzcGxheUdTdHJlYW1lci5jcHA6IEFkZGVkLgorICAgICAgICAoY3JlYXRlR3N0R0xEaXNwbGF5
KToKKyAgICAgICAgKHNpbmtJZkZsb2F0aW5nKToKKyAgICAgICAgKFBsYXRmb3JtRGlzcGxheTo6
dHJ5RW5zdXJlR3N0R0xDb250ZXh0KToKKyAgICAgICAgKFBsYXRmb3JtRGlzcGxheTo6ZGVzdHJv
eUdzdEdMQ29udGV4dCk6CisgICAgICAgIChQbGF0Zm9ybURpc3BsYXk6OnNoYXJpbmdHc3RHTERp
c3BsYXkpOgorICAgICAgICAoUGxhdGZvcm1EaXNwbGF5OjpzaGFyaW5nR3N0R0xDb250ZXh0KToK
KwogMjAyMC0wMi0yNCAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW0dTdHJlYW1lcl1bV1BFXSBBZGQgR3N0R0xNZW1vcnlFR0wgc3VwcG9ydCBmb3Ig
dGhlIHZpZGVvLXBsYW5lLWRpc3BsYXkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0dTdHJlYW1lci5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5j
bWFrZQppbmRleCBlZmE1ZTc1Njk1MjI3NjJkZDhhZWM3Y2ViZTMzNGFhODE5Nzg1ZmY2Li44OTUx
Y2IxZTZiMzhlZTdmNzcyYWRjYWNmYWU0MTFkYTYyNGY4MTUyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vR1N0cmVhbWVyLmNtYWtlCkBAIC0xMTcsNiArMTE3LDcgQEAgaWYgKEVOQUJMRV9WSURF
TykKICAgICAgICAgICAgICR7R1NUUkVBTUVSX0dMX0xJQlJBUklFU30KICAgICAgICAgKQogICAg
ICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9QbGF0Zm9ybURpc3BsYXlHU3RyZWFtZXIuY3BwCiAgICAgICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVy
LmNwcAogICAgICAgICApCiAgICAgZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCmluZGV4IDE1NmU1YWEyYjczNWRm
NjFhMWMxOTY2ZWRiMzM2YjVkYzE5ZTBmYmIuLjU4MTNhNGZhYzVlZmQwMTM2OWRkMjc4MzA5ZTZh
YjljMzkxYTkzMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BsYXRmb3JtRGlzcGxheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1EaXNwbGF5LmNwcApAQCAtMTUzLDYgKzE1Myw3IEBAIFBsYXRmb3JtRGlzcGxh
eTo6flBsYXRmb3JtRGlzcGxheSgpCiAjaWYgVVNFKEVHTCkKICAgICBBU1NFUlQobV9lZ2xEaXNw
bGF5ID09IEVHTF9OT19ESVNQTEFZKTsKICNlbmRpZgorICAgIGRlc3Ryb3lHc3RHTENvbnRleHQo
KTsKICAgICBpZiAoc19zaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcgPT0gdGhpcykKICAgICAg
ICAgc19zaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcgPSBudWxscHRyOwogfQpAQCAtMjMxLDYg
KzIzMiw3IEBAIHZvaWQgUGxhdGZvcm1EaXNwbGF5Ojppbml0aWFsaXplRUdMRGlzcGxheSgpCiAK
IHZvaWQgUGxhdGZvcm1EaXNwbGF5Ojp0ZXJtaW5hdGVFR0xEaXNwbGF5KCkKIHsKKyAgICBkZXN0
cm95R3N0R0xDb250ZXh0KCk7CiAgICAgbV9zaGFyaW5nR0xDb250ZXh0ID0gbnVsbHB0cjsKICAg
ICBBU1NFUlQobV9lZ2xEaXNwbGF5SW5pdGlhbGl6ZWQpOwogICAgIGlmIChtX2VnbERpc3BsYXkg
PT0gRUdMX05PX0RJU1BMQVkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BsYXRmb3JtRGlzcGxheS5oCmluZGV4IDVkNmFiNWFmZTVkNDJhZTBmZjZiNDg2NzI4NmJi
MjIzYTU2NzYyZjEuLjBhOGMxYzQ3OGYwOTQwMWQ1YmJlYTQ1ODc3NTY0NDA2ZmRkZGIwMzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxh
eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxh
eS5oCkBAIC0zMyw2ICszMywxMSBAQAogdHlwZWRlZiB2b2lkICpFR0xEaXNwbGF5OwogI2VuZGlm
CiAKKyNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVJfR0wpCit0eXBlZGVmIHN0cnVj
dCBfR3N0R0xDb250ZXh0IEdzdEdMQ29udGV4dDsKK3R5cGVkZWYgc3RydWN0IF9Hc3RHTERpc3Bs
YXkgR3N0R0xEaXNwbGF5OworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
R0xDb250ZXh0OwpAQCAtNzEsNiArNzYsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNo
dXREb3duRWdsRGlzcGxheXMoKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0Uo
R1NUUkVBTUVSX0dMKQorICAgIFdFQkNPUkVfRVhQT1JUIEdzdEdMRGlzcGxheSogc2hhcmluZ0dz
dEdMRGlzcGxheSgpOworICAgIFdFQkNPUkVfRVhQT1JUIEdzdEdMQ29udGV4dCogc2hhcmluZ0dz
dEdMQ29udGV4dCgpOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBlbnVtIGNsYXNzIE5hdGl2
ZURpc3BsYXlPd25lZCB7IE5vLCBZZXMgfTsKICAgICBleHBsaWNpdCBQbGF0Zm9ybURpc3BsYXko
TmF0aXZlRGlzcGxheU93bmVkKTsKQEAgLTk5LDYgKzEwOSwxNiBAQCBwcml2YXRlOgogICAgIGlu
dCBtX2VnbE1ham9yVmVyc2lvbiB7IDAgfTsKICAgICBpbnQgbV9lZ2xNaW5vclZlcnNpb24geyAw
IH07CiAjZW5kaWYKKworI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUl9HTCkKKyAg
ICBib29sIHRyeUVuc3VyZUdzdEdMQ29udGV4dCgpOworICAgIHZvaWQgZGVzdHJveUdzdEdMQ29u
dGV4dCgpOworCisgICAgR3N0R0xEaXNwbGF5KiBtX2dzdEdMRGlzcGxheTsKKyAgICBHc3RHTENv
bnRleHQqIG1fZ3N0R0xDb250ZXh0OworI2Vsc2UKKyAgICB2b2lkIGRlc3Ryb3lHc3RHTENvbnRl
eHQoKSB7IH07CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZpZGVvU2lu
a0dTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwCmluZGV4IDM2NzYzNzc4OTY1MGViNzY2YTliNTM1
YmMyMzEyNTMwMWExMjgyOWYuLjBiMWYyNzZkMzg0OWQ1ZGJkMDJjZTU0YjcxODM1ODY5M2RkZTdh
NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9HTFZpZGVvU2lua0dTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNwcApAQCAtMjIsMzQgKzIy
LDEzIEBACiAKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVJfR0wpCiAKLSNpbmNs
dWRlICJHTENvbnRleHQuaCIKICNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKICNpbmNsdWRl
ICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybURpc3Bs
YXkuaCIKKwogI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc2luay5oPgogI2luY2x1ZGUgPHd0Zi9n
bGliL1dURkdUeXBlLmg+CiAKLSNpZiBVU0UoR0xYKQotI2luY2x1ZGUgIkdMQ29udGV4dEdMWC5o
IgotI2luY2x1ZGUgPGdzdC9nbC94MTEvZ3N0Z2xkaXNwbGF5X3gxMS5oPgotI2VuZGlmCi0KLSNp
ZiBVU0UoRUdMKQotI2luY2x1ZGUgIkdMQ29udGV4dEVHTC5oIgotI2luY2x1ZGUgPGdzdC9nbC9l
Z2wvZ3N0Z2xkaXNwbGF5X2VnbC5oPgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShYMTEpCi0jaW5j
bHVkZSAiUGxhdGZvcm1EaXNwbGF5WDExLmgiCi0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFdBWUxB
TkQpCi0jaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5V2F5bGFuZC5oIgotI2VuZGlmCi0KLSNpZiBV
U0UoV1BFX1JFTkRFUkVSKQotI2luY2x1ZGUgIlBsYXRmb3JtRGlzcGxheUxpYldQRS5oIgotI2Vu
ZGlmCi0KIC8vIGdzdGdsYXBpLmggbWF5IGluY2x1ZGUgZWdscGxhdGZvcm0uaCBhbmQgaXQgaW5j
bHVkZXMgWC5oLCB3aGljaAogLy8gZGVmaW5lcyBOb25lLCBicmVha2luZyBNZWRpYVBsYXllcjo6
Tm9uZSBlbnVtCiAjaWYgUExBVEZPUk0oWDExKSAmJiBHU1RfR0xfSEFWRV9QTEFURk9STV9FR0wK
QEAgLTY2LDggKzQ1LDYgQEAgZW51bSB7CiAKIHN0cnVjdCBfV2ViS2l0R0xWaWRlb1NpbmtQcml2
YXRlIHsKICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGFwcFNpbms7Ci0gICAgR1JlZlB0cjxHc3RH
TENvbnRleHQ+IGdsQ29udGV4dDsKLSAgICBHUmVmUHRyPEdzdEdMRGlzcGxheT4gZ2xEaXNwbGF5
OwogICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gZ2xEaXNwbGF5RWxlbWVudENvbnRleHQ7CiAgICAg
R1JlZlB0cjxHc3RDb250ZXh0PiBnbEFwcEVsZW1lbnRDb250ZXh0OwogICAgIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lciogbWVkaWFQbGF5ZXJQcml2YXRlOwpAQCAtMTQwLDExMyArMTE3LDE1
IEBAIHZvaWQgd2ViS2l0R0xWaWRlb1NpbmtGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiAgICAg
R1NUX0NBTExfUEFSRU5UKEdfT0JKRUNUX0NMQVNTLCBmaW5hbGl6ZSwgKG9iamVjdCkpOwogfQog
Ci1zdGF0aWMgYm9vbCBlbnN1cmVHc3RHTENvbnRleHQoV2ViS2l0R0xWaWRlb1NpbmsqIHNpbmsp
CitHUmVmUHRyPEdzdENvbnRleHQ+IHJlcXVlc3RHTENvbnRleHQoY29uc3QgY2hhciogY29udGV4
dFR5cGUpCiB7Ci0gICAgV2ViS2l0R0xWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gc2luay0+cHJp
djsKLQotICAgIGlmIChwcml2LT5nbENvbnRleHQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCiAg
ICAgYXV0byYgc2hhcmVkRGlzcGxheSA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZv
ckNvbXBvc2l0aW5nKCk7Ci0KLSAgICAvLyBUaGUgZmxvYXRpbmcgcmVmIHJlbW92YWwgc3VwcG9y
dCB3YXMgYWRkZWQgaW4gaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lk
PTc0MzA2Mi4KLSAgICBib29sIHNob3VsZEFkb3B0UmVmID0gd2Via2l0R3N0Q2hlY2tWZXJzaW9u
KDEsIDE0LCAwKTsKLSAgICBpZiAoIXByaXYtPmdsRGlzcGxheSkgewotI2lmIFBMQVRGT1JNKFgx
MSkKLSNpZiBVU0UoR0xYKQotICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFy
ZWREaXNwbGF5KSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzaW5rLCAiQ3JlYXRp
bmcgWDExIHNoYXJlZCBHTCBkaXNwbGF5Iik7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkQWRvcHRS
ZWYpCi0gICAgICAgICAgICAgICAgcHJpdi0+Z2xEaXNwbGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9E
SVNQTEFZKGdzdF9nbF9kaXNwbGF5X3gxMV9uZXdfd2l0aF9kaXNwbGF5KGRvd25jYXN0PFBsYXRm
b3JtRGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkubmF0aXZlKCkpKSk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgcHJpdi0+Z2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0
X2dsX2Rpc3BsYXlfeDExX25ld193aXRoX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5
WDExPihzaGFyZWREaXNwbGF5KS5uYXRpdmUoKSkpOwotICAgICAgICB9Ci0jZWxpZiBVU0UoRUdM
KQotICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KSkgewot
ICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzaW5rLCAiQ3JlYXRpbmcgWDExIHNoYXJlZCBF
R0wgZGlzcGxheSIpOwotICAgICAgICAgICAgaWYgKHNob3VsZEFkb3B0UmVmKQotICAgICAgICAg
ICAgICAgIHByaXYtPmdsRGlzcGxheSA9IGFkb3B0R1JlZihHU1RfR0xfRElTUExBWShnc3RfZ2xf
ZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5
WDExPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKSk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgcHJpdi0+Z2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rp
c3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVgx
MT4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSk7Ci0gICAgICAgIH0KLSNlbmRpZgotI2Vu
ZGlmCi0KLSNpZiBQTEFURk9STShXQVlMQU5EKQotICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNw
bGF5V2F5bGFuZD4oc2hhcmVkRGlzcGxheSkpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpF
Q1Qoc2luaywgIkNyZWF0aW5nIFdheWxhbmQgc2hhcmVkIGRpc3BsYXkiKTsKLSAgICAgICAgICAg
IGlmIChzaG91bGRBZG9wdFJlZikKLSAgICAgICAgICAgICAgICBwcml2LT5nbERpc3BsYXkgPSBh
ZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9k
aXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVdheWxhbmQ+KHNoYXJlZERpc3BsYXkpLmVn
bERpc3BsYXkoKSkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcml2LT5n
bERpc3BsYXkgPSBHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWds
X2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5V2F5bGFuZD4oc2hhcmVkRGlzcGxheSku
ZWdsRGlzcGxheSgpKSk7Ci0gICAgICAgIH0KLSNlbmRpZgotCi0jaWYgVVNFKFdQRV9SRU5ERVJF
UikKLSAgICAgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheUxpYldQRT4oc2hhcmVkRGlzcGxheSkp
IHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2luaywgIkNyZWF0aW5nIFdQRSBzaGFy
ZWQgRUdMIGRpc3BsYXkiKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRBZG9wdFJlZikKLSAgICAg
ICAgICAgICAgICBwcml2LT5nbERpc3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVkoZ3N0
X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlz
cGxheUxpYldQRT4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSkpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHByaXYtPmdsRGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZKGdz
dF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURp
c3BsYXlMaWJXUEU+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpOwotICAgICAgICB9Ci0j
ZW5kaWYKLQotICAgICAgICBBU1NFUlQocHJpdi0+Z2xEaXNwbGF5KTsKLSAgICB9Ci0KLSAgICBH
TENvbnRleHQqIHNoYXJlZENvbnRleHQgPSBzaGFyZWREaXNwbGF5LnNoYXJpbmdHTENvbnRleHQo
KTsKLSAgICBpZiAoIXNoYXJlZENvbnRleHQpIHsKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1Io
R1NUX0VMRU1FTlRfQ0FTVChzaW5rKSwgUkVTT1VSQ0UsIE5PVF9GT1VORCwgKCgiV2ViS2l0IHNo
YXJlZCBHTCBjb250ZXh0IHVuYXZhaWxhYmxlIikpLAotICAgICAgICAgICAgKCJUaGUgV2ViS2l0
IHNoYXJlZCBHTCBjb250ZXh0IHNvbWVob3cgZGlzYXBwZWFyZWQuIFZpZGVvIHRleHR1cmVzIHJl
bmRlcmluZyB3aWxsIGZhaWwuIikpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgLy8gRUdMIGFuZCBHTFggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgbm8gbmVlZCBmb3IgaWZk
ZWZzIGhlcmUuCi0gICAgR3N0R0xQbGF0Zm9ybSBnbFBsYXRmb3JtID0gc2hhcmVkQ29udGV4dC0+
aXNFR0xDb250ZXh0KCkgPyBHU1RfR0xfUExBVEZPUk1fRUdMIDogR1NUX0dMX1BMQVRGT1JNX0dM
WDsKLQotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgR3N0R0xBUEkgZ2xBUEkgPSBHU1RfR0xfQVBJ
X0dMRVMyOwotI2VsaWYgVVNFKE9QRU5HTCkKLSAgICBHc3RHTEFQSSBnbEFQSSA9IEdTVF9HTF9B
UElfT1BFTkdMOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotCi0g
ICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBjb250ZXh0SGFuZGxlID0gc2hhcmVkQ29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0SGFuZGxlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCi0gICAgICAgIHByaXYtPmds
Q29udGV4dCA9IGFkb3B0R1JlZihnc3RfZ2xfY29udGV4dF9uZXdfd3JhcHBlZChwcml2LT5nbERp
c3BsYXkuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3VpbnRwdHI+KGNvbnRleHRIYW5kbGUpLCBn
bFBsYXRmb3JtLCBnbEFQSSkpOwotICAgIGVsc2UKLSAgICAgICAgcHJpdi0+Z2xDb250ZXh0ID0g
Z3N0X2dsX2NvbnRleHRfbmV3X3dyYXBwZWQocHJpdi0+Z2xEaXNwbGF5LmdldCgpLCByZWludGVy
cHJldF9jYXN0PGd1aW50cHRyPihjb250ZXh0SGFuZGxlKSwgZ2xQbGF0Zm9ybSwgZ2xBUEkpOwot
Ci0gICAgLy8gQWN0aXZhdGUgYW5kIGZpbGwgdGhlIEdTdHJlYW1lciB3cmFwcGVkIGNvbnRleHQg
d2l0aCB0aGUgV2Via2l0J3Mgc2hhcmVkIG9uZS4KLSAgICBhdXRvKiBwcmV2aW91c0FjdGl2ZUNv
bnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKLSAgICBzaGFyZWRDb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBpZiAoZ3N0X2dsX2NvbnRleHRfYWN0aXZhdGUocHJpdi0+Z2xD
b250ZXh0LmdldCgpLCBUUlVFKSkgewotICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJy
b3I7Ci0gICAgICAgIGlmICghZ3N0X2dsX2NvbnRleHRfZmlsbF9pbmZvKHByaXYtPmdsQ29udGV4
dC5nZXQoKSwgJmVycm9yLm91dFB0cigpKSkKLSAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJGYWls
ZWQgdG8gZmlsbCBpbiBHU3RyZWFtZXIgY29udGV4dDogJXMiLCBlcnJvci0+bWVzc2FnZSk7Ci0g
ICAgICAgIGdzdF9nbF9jb250ZXh0X2FjdGl2YXRlKHByaXYtPmdsQ29udGV4dC5nZXQoKSwgRkFM
U0UpOwotICAgIH0gZWxzZQotICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIGFjdGl2YXRl
IEdTdHJlYW1lciBjb250ZXh0ICUiIEdTVF9QVFJfRk9STUFULCBwcml2LT5nbENvbnRleHQuZ2V0
KCkpOwotICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCi0gICAgICAgIHByZXZpb3VzQWN0
aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotR1JlZlB0cjxHc3RDb250ZXh0PiByZXF1ZXN0R0xDb250ZXh0KFdlYktpdEdMVmlkZW9TaW5r
KiBzaW5rLCBjb25zdCBjaGFyKiBjb250ZXh0VHlwZSkKLXsKLSAgICBXZWJLaXRHTFZpZGVvU2lu
a1ByaXZhdGUqIHByaXYgPSBzaW5rLT5wcml2OwotICAgIGlmICghZW5zdXJlR3N0R0xDb250ZXh0
KHNpbmspKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBHUmVmUHRyPEdzdEdMRGlzcGxh
eT4gc2hhcmVkR0xEaXNwbGF5ID0gc2hhcmVkRGlzcGxheS5zaGFyaW5nR3N0R0xEaXNwbGF5KCk7
CisgICAgR1JlZlB0cjxHc3RHTENvbnRleHQ+IHNoYXJlZEdMQ29udGV4dCA9IHNoYXJlZERpc3Bs
YXkuc2hhcmluZ0dzdEdMQ29udGV4dCgpOwogCiAgICAgaWYgKCFnX3N0cmNtcDAoY29udGV4dFR5
cGUsIEdTVF9HTF9ESVNQTEFZX0NPTlRFWFRfVFlQRSkpIHsKICAgICAgICAgR3N0Q29udGV4dCog
ZGlzcGxheUNvbnRleHQgPSBnc3RfY29udGV4dF9uZXcoR1NUX0dMX0RJU1BMQVlfQ09OVEVYVF9U
WVBFLCBUUlVFKTsKLSAgICAgICAgZ3N0X2NvbnRleHRfc2V0X2dsX2Rpc3BsYXkoZGlzcGxheUNv
bnRleHQsIHByaXYtPmdsRGlzcGxheS5nZXQoKSk7CisgICAgICAgIGdzdF9jb250ZXh0X3NldF9n
bF9kaXNwbGF5KGRpc3BsYXlDb250ZXh0LCBzaGFyZWRHTERpc3BsYXkuZ2V0KCkpOwogICAgICAg
ICByZXR1cm4gYWRvcHRHUmVmKGRpc3BsYXlDb250ZXh0KTsKICAgICB9CiAKQEAgLTI1NCw5ICsx
MzMsOSBAQCBHUmVmUHRyPEdzdENvbnRleHQ+IHJlcXVlc3RHTENvbnRleHQoV2ViS2l0R0xWaWRl
b1NpbmsqIHNpbmssIGNvbnN0IGNoYXIqIGNvbnRleAogICAgICAgICBHc3RDb250ZXh0KiBhcHBD
b250ZXh0ID0gZ3N0X2NvbnRleHRfbmV3KCJnc3QuZ2wuYXBwX2NvbnRleHQiLCBUUlVFKTsKICAg
ICAgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfY29udGV4dF93cml0YWJsZV9zdHJ1
Y3R1cmUoYXBwQ29udGV4dCk7CiAjaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTIsIDApCi0gICAg
ICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHN0cnVjdHVyZSwgImNvbnRleHQiLCBHU1RfVFlQRV9HTF9D
T05URVhULCBwcml2LT5nbENvbnRleHQuZ2V0KCksIG51bGxwdHIpOworICAgICAgICBnc3Rfc3Ry
dWN0dXJlX3NldChzdHJ1Y3R1cmUsICJjb250ZXh0IiwgR1NUX1RZUEVfR0xfQ09OVEVYVCwgc2hh
cmVkR0xDb250ZXh0LmdldCgpLCBudWxscHRyKTsKICNlbHNlCi0gICAgICAgIGdzdF9zdHJ1Y3R1
cmVfc2V0KHN0cnVjdHVyZSwgImNvbnRleHQiLCBHU1RfR0xfVFlQRV9DT05URVhULCBwcml2LT5n
bENvbnRleHQuZ2V0KCksIG51bGxwdHIpOworICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChzdHJ1
Y3R1cmUsICJjb250ZXh0IiwgR1NUX0dMX1RZUEVfQ09OVEVYVCwgc2hhcmVkR0xDb250ZXh0Lmdl
dCgpLCBudWxscHRyKTsKICNlbmRpZgogICAgICAgICByZXR1cm4gYWRvcHRHUmVmKGFwcENvbnRl
eHQpOwogICAgIH0KQEAgLTI3OCwxMyArMTU3LDEzIEBAIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJl
dHVybiB3ZWJLaXRHTFZpZGVvU2lua0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdz
CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1JFQURZOgogICAgIGNhc2UgR1NU
X1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6IHsKICAgICAgICAgaWYgKCFwcml2LT5nbERp
c3BsYXlFbGVtZW50Q29udGV4dCkKLSAgICAgICAgICAgIHByaXYtPmdsRGlzcGxheUVsZW1lbnRD
b250ZXh0ID0gcmVxdWVzdEdMQ29udGV4dChzaW5rLCBHU1RfR0xfRElTUExBWV9DT05URVhUX1RZ
UEUpOworICAgICAgICAgICAgcHJpdi0+Z2xEaXNwbGF5RWxlbWVudENvbnRleHQgPSByZXF1ZXN0
R0xDb250ZXh0KEdTVF9HTF9ESVNQTEFZX0NPTlRFWFRfVFlQRSk7CiAKICAgICAgICAgaWYgKHBy
aXYtPmdsRGlzcGxheUVsZW1lbnRDb250ZXh0KQogICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0
X2NvbnRleHQoR1NUX0VMRU1FTlRfQ0FTVChzaW5rKSwgcHJpdi0+Z2xEaXNwbGF5RWxlbWVudENv
bnRleHQuZ2V0KCkpOwogCiAgICAgICAgIGlmICghcHJpdi0+Z2xBcHBFbGVtZW50Q29udGV4dCkK
LSAgICAgICAgICAgIHByaXYtPmdsQXBwRWxlbWVudENvbnRleHQgPSByZXF1ZXN0R0xDb250ZXh0
KHNpbmssICJnc3QuZ2wuYXBwX2NvbnRleHQiKTsKKyAgICAgICAgICAgIHByaXYtPmdsQXBwRWxl
bWVudENvbnRleHQgPSByZXF1ZXN0R0xDb250ZXh0KCJnc3QuZ2wuYXBwX2NvbnRleHQiKTsKIAog
ICAgICAgICBpZiAocHJpdi0+Z2xBcHBFbGVtZW50Q29udGV4dCkKICAgICAgICAgICAgIGdzdF9l
bGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UX0NBU1Qoc2luayksIHByaXYtPmdsQXBwRWxl
bWVudENvbnRleHQuZ2V0KCkpOwpAQCAtMzc2LDkgKzI1NSw3IEBAIHZvaWQgd2ViS2l0R0xWaWRl
b1NpbmtTZXRNZWRpYVBsYXllclByaXZhdGUoV2ViS2l0R0xWaWRlb1NpbmsqIHNpbmssIE1lZGlh
UGxheWVyCiAKIGJvb2wgd2ViS2l0R0xWaWRlb1NpbmtQcm9iZVBsYXRmb3JtKCkKIHsKLSAgICBh
dXRvJiBzaGFyZWREaXNwbGF5ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29t
cG9zaXRpbmcoKTsKLSAgICBHTENvbnRleHQqIHNoYXJlZENvbnRleHQgPSBzaGFyZWREaXNwbGF5
LnNoYXJpbmdHTENvbnRleHQoKTsKLSAgICBpZiAoIXNoYXJlZENvbnRleHQpIHsKKyAgICBpZiAo
IVBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dz
dEdMQ29udGV4dCgpKSB7CiAgICAgICAgIEdTVF9XQVJOSU5HKCJXZWJLaXQgc2hhcmVkIEdMIGNv
bnRleHQgaXMgbm90IGF2YWlsYWJsZS4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAppbmRleCA1MjFi
MjBkMTFjYzhkZDk0YmUyODRkNzQ2OTljZDI3MTdiNGUwNTQ1Li5hYmViODU3YTdmZGU1NGEyNzll
ZmM1ZDU4OGU4ZDMyYzY5ZWRmMmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5oCkBAIC04Miw4ICs4Miw2IEBAIHR5cGVkZWYgc3RydWN0IF9Hc3RNcGVn
dHNTZWN0aW9uIEdzdE1wZWd0c1NlY3Rpb247CiAKIHR5cGVkZWYgc3RydWN0IF9Hc3RTdHJlYW1W
b2x1bWUgR3N0U3RyZWFtVm9sdW1lOwogdHlwZWRlZiBzdHJ1Y3QgX0dzdFZpZGVvSW5mbyBHc3RW
aWRlb0luZm87Ci10eXBlZGVmIHN0cnVjdCBfR3N0R0xDb250ZXh0IEdzdEdMQ29udGV4dDsKLXR5
cGVkZWYgc3RydWN0IF9Hc3RHTERpc3BsYXkgR3N0R0xEaXNwbGF5OwogCiAjaWYgVVNFKFdQRV9W
SURFT19QTEFORV9ESVNQTEFZX0RNQUJVRikKIHN0cnVjdCB3cGVfdmlkZW9fcGxhbmVfZGlzcGxh
eV9kbWFidWZfc291cmNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1BsYXRmb3JtRGlzcGxheUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvUGxhdGZvcm1EaXNwbGF5R1N0cmVhbWVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kZWUxMDJhM2Y3NTliZjEwOGNlY2ZkNWFhMGQ5MDRiYWI1MWUzOTg0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL1BsYXRmb3JtRGlzcGxheUdTdHJlYW1lci5jcHAKQEAgLTAsMCArMSwxNTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTAorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybURpc3BsYXkuaCIKKworI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5o
IgorCisjaWYgVVNFKEdMWCkKKyNpbmNsdWRlICJHTENvbnRleHRHTFguaCIKKyNpbmNsdWRlIDxn
c3QvZ2wveDExL2dzdGdsZGlzcGxheV94MTEuaD4KKyNlbmRpZgorCisjaWYgVVNFKEVHTCkKKyNp
bmNsdWRlICJHTENvbnRleHRFR0wuaCIKKyNpbmNsdWRlIDxnc3QvZ2wvZWdsL2dzdGdsZGlzcGxh
eV9lZ2wuaD4KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oWDExKQorI2luY2x1ZGUgIlBsYXRmb3Jt
RGlzcGxheVgxMS5oIgorI2VuZGlmCisKKyNpZiBQTEFURk9STShXQVlMQU5EKQorI2luY2x1ZGUg
IlBsYXRmb3JtRGlzcGxheVdheWxhbmQuaCIKKyNlbmRpZgorCisjaWYgVVNFKFdQRV9SRU5ERVJF
UikKKyNpbmNsdWRlICJQbGF0Zm9ybURpc3BsYXlMaWJXUEUuaCIKKyNlbmRpZgorCisjZGVmaW5l
IEdTVF9VU0VfVU5TVEFCTEVfQVBJCisjaW5jbHVkZSA8Z3N0L2dsL2dsLmg+CisjdW5kZWYgR1NU
X1VTRV9VTlNUQUJMRV9BUEkKKworR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJraXRfbWVk
aWFfcGxheWVyX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9tZWRpYV9w
bGF5ZXJfZGVidWcKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRpYyBHc3RHTERp
c3BsYXkqIGNyZWF0ZUdzdEdMRGlzcGxheShQbGF0Zm9ybURpc3BsYXkmIHNoYXJlZERpc3BsYXkp
Cit7CisjaWYgVVNFKFdQRV9SRU5ERVJFUikKKyAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5TGli
V1BFPihzaGFyZWREaXNwbGF5KSkKKyAgICAgICAgcmV0dXJuIEdTVF9HTF9ESVNQTEFZKGdzdF9n
bF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3Bs
YXlMaWJXUEU+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpOworI2VuZGlmCisKKyNpZiBQ
TEFURk9STShYMTEpCisjaWYgVVNFKEdMWCkKKyAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5WDEx
PihzaGFyZWREaXNwbGF5KSkKKyAgICAgICAgcmV0dXJuIEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9k
aXNwbGF5X3gxMV9uZXdfd2l0aF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVgxMT4o
c2hhcmVkRGlzcGxheSkubmF0aXZlKCkpKTsKKyNlbGlmIFVTRShFR0wpCisgICAgaWYgKGlzPFBs
YXRmb3JtRGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkpCisgICAgICAgIHJldHVybiBHU1RfR0xf
RElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8
UGxhdGZvbURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpOworI2VuZGlm
CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdBWUxBTkQpCisgICAgaWYgKGlzPFBsYXRmb3JtRGlz
cGxheVdheWxhbmQ+KHNoYXJlZERpc3BsYXkpKQorICAgICAgICByZXR1cm4gR1NUX0dMX0RJU1BM
QVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRm
b3JtRGlzcGxheVdheWxhbmQ+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpOworI2VuZGlm
CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworLy8gR3N0R0xEaXNwbGF5IGFuZCBHc3RHTENv
bnRleHQgaGF2ZSB0byBiZSByZWYgJiBzaW5rZWQgc2luY2UgR1N0cmVhbWVyIDEuMTQKK3N0YXRp
YyBpbmxpbmUgdm9pZCBzaW5rSWZGbG9hdGluZyhncG9pbnRlciBvYmplY3QpCit7CisgICAgaWYg
KGdfb2JqZWN0X2lzX2Zsb2F0aW5nKG9iamVjdCkpCisgICAgICAgIGdzdF9vYmplY3RfcmVmX3Np
bmsob2JqZWN0KTsKK30KKworYm9vbCBQbGF0Zm9ybURpc3BsYXk6OnRyeUVuc3VyZUdzdEdMQ29u
dGV4dCgpCit7CisgICAgaWYgKG1fZ3N0R0xDb250ZXh0KQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworI2lmIFVTRShPUEVOR0xfRVMpCisgICAgR3N0R0xBUEkgZ2xBUEkgPSBHU1RfR0xfQVBJX0dM
RVMyOworI2VsaWYgVVNFKE9QRU5HTCkKKyAgICBHc3RHTEFQSSBnbEFQSSA9IEdTVF9HTF9BUElf
T1BFTkdMOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKworICAgIGF1dG8qIHNo
YXJlZENvbnRleHQgPSBzaGFyaW5nR0xDb250ZXh0KCk7CisgICAgaWYgKCFzaGFyZWRDb250ZXh0
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBj
b250ZXh0SGFuZGxlID0gc2hhcmVkQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgaWYg
KCFjb250ZXh0SGFuZGxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2dzdEdMRGlz
cGxheSA9IGNyZWF0ZUdzdEdMRGlzcGxheSgqdGhpcyk7CisgICAgaWYgKCFtX2dzdEdMRGlzcGxh
eSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHNpbmtJZkZsb2F0aW5nKG1fZ3N0R0xEaXNw
bGF5KTsKKworICAgIEdzdEdMUGxhdGZvcm0gZ2xQbGF0Zm9ybSA9IHNoYXJlZENvbnRleHQtPmlz
RUdMQ29udGV4dCgpID8gR1NUX0dMX1BMQVRGT1JNX0VHTCA6IEdTVF9HTF9QTEFURk9STV9HTFg7
CisgICAgbV9nc3RHTENvbnRleHQgPSBnc3RfZ2xfY29udGV4dF9uZXdfd3JhcHBlZChtX2dzdEdM
RGlzcGxheSwgcmVpbnRlcnByZXRfY2FzdDxndWludHB0cj4oY29udGV4dEhhbmRsZSksIGdsUGxh
dGZvcm0sIGdsQVBJKTsKKyAgICBzaW5rSWZGbG9hdGluZyhtX2dzdEdMQ29udGV4dCk7CisKKyAg
ICAvLyBBY3RpdmF0ZSBhbmQgZmlsbCB0aGUgR1N0cmVhbWVyIHdyYXBwZWQgY29udGV4dCB3aXRo
IHRoZSBXZWJraXQncyBzaGFyZWQgb25lLgorICAgIGF1dG8qIHByZXZpb3VzQWN0aXZlQ29udGV4
dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworICAgIHNoYXJlZENvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmIChnc3RfZ2xfY29udGV4dF9hY3RpdmF0ZShtX2dzdEdMQ29udGV4
dCwgVFJVRSkpIHsKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgICAg
ICBpZiAoIWdzdF9nbF9jb250ZXh0X2ZpbGxfaW5mbyhtX2dzdEdMQ29udGV4dCwgJmVycm9yLm91
dFB0cigpKSkKKyAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gZmlsbCBpbiBHU3Ry
ZWFtZXIgY29udGV4dDogJXMiLCBlcnJvci0+bWVzc2FnZSk7CisgICAgfSBlbHNlCisgICAgICAg
IEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gYWN0aXZhdGUgR1N0cmVhbWVyIGNvbnRleHQgJSIgR1NU
X1BUUl9GT1JNQVQsIG1fZ3N0R0xDb250ZXh0KTsKKyAgICBpZiAocHJldmlvdXNBY3RpdmVDb250
ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGxhdGZvcm1EaXNwbGF5OjpkZXN0cm95
R3N0R0xDb250ZXh0KCkKK3sKKyAgICBpZiAobV9nc3RHTERpc3BsYXkpIHsKKyAgICAgICAgZ3N0
X29iamVjdF91bnJlZihtX2dzdEdMRGlzcGxheSk7CisgICAgICAgIG1fZ3N0R0xEaXNwbGF5ID0g
bnVsbHB0cjsKKyAgICB9CisgICAgaWYgKG1fZ3N0R0xDb250ZXh0KSB7CisgICAgICAgIGdzdF9v
YmplY3RfdW5yZWYobV9nc3RHTENvbnRleHQpOworICAgICAgICBtX2dzdEdMQ29udGV4dCA9IG51
bGxwdHI7CisgICAgfQorfQorCitHc3RHTERpc3BsYXkqIFBsYXRmb3JtRGlzcGxheTo6c2hhcmlu
Z0dzdEdMRGlzcGxheSgpCit7CisgICAgaWYgKCF0cnlFbnN1cmVHc3RHTENvbnRleHQoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1fZ3N0R0xEaXNwbGF5OworfQorCitH
c3RHTENvbnRleHQqIFBsYXRmb3JtRGlzcGxheTo6c2hhcmluZ0dzdEdMQ29udGV4dCgpCit7Cisg
ICAgaWYgKCF0cnlFbnN1cmVHc3RHTENvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgcmV0dXJuIG1fZ3N0R0xDb250ZXh0OworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391657</attachid>
            <date>2020-02-25 08:58:25 -0800</date>
            <delta_ts>2020-02-26 03:30:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200626-20200225175824.patch</filename>
            <type>text/plain</type>
            <size>19844</size>
            <attacher name="Víctor M. Jáquez L.">vjaquez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3MzAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2U0OTNiY2UyYjUwYzJk
OWZmMTI1YzQxNDJhODIxNzJkN2VhNDIzNC4uYzhhNGRmNmNlZWQxZmUxYTU4YTA5MWJlOWM1MjJm
YjNkZGJhMWY3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDIwLTAyLTI1ICBWw61j
dG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgIDx2amFxdWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAg
W0dMXVtHU3RyZWFtZXJdIEluc3RhbnRpYXRlIEdzdEdMQ29udGV4dCB3aGVuIHRoZSBzaGFyZWQg
R0xDb250ZXh0IGlzIGNyZWF0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMDYyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBHc3RHTENvbnRleHQgYW5kIEdzdEdMRGlzcGxh
eSBhcyBwYXJ0IG9mCisgICAgICAgIFBsYXRmb3JtRGlzcGxheS4KKworICAgICAgICBSaWdodCBu
b3cgb25lIEdzdEdMQ29udGV4dCBpcyBjcmVhdGVkIHBlciB2aWRlbyB0YWcsIHdoaWNoIGlzIGEK
KyAgICAgICAgd3JhcHBlciBvZiB0aGUgR0wgc2hhcmVkIGNvbnRleHQuIEV2ZXJ5IHRpbWUgdGhp
cyB3cmFwcGVyIGlzCisgICAgICAgIGNyZWF0ZWQgdGhlIEdMIGNvbnRleHQgaGFzIHRvIGJlIGN1
cnJlbnQgaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZQorICAgICAgICB0aGUgd3JhcHBlcidzIGludGVy
bmFsIHN0YXRlLgorCisgICAgICAgIEEgYmV0dGVyIGFwcHJvYWNoIHdvdWxkIGJlIHRvIGhhdmUg
YSBzaW5nbGUgR3N0R0xDb250ZXh0IHBlciBHTAorICAgICAgICBjb250ZXh0LCB0byBpbnN0YW50
aWF0ZSBpdCB3aGVuIHRoZSBHTCBjb250ZXh0IGlzIGNyZWF0ZWQgYW5kCisgICAgICAgIGN1cnJl
bnQuIFRoaXMgR3N0R0xDb250ZXh0IHdvdWxkIGJlIHVzZWQgZm9yIGFsbCBtZWRpYSBwbGF5ZXJz
LgorCisgICAgICAgIEdzdEdMQ29udGV4dCBhbmQgR3N0R0xEaXNwbGF5IGFyZSBpbnN0YW50aWF0
ZWQgYXMgc2luZ2xldG9ucyBieQorICAgICAgICBQbGF0Zm9ybURpc3BsYXkuIFdoZW4gdGhlIG1l
ZGlhIHBsYXllciByZXF1ZXN0IGZvciB0aGUKKyAgICAgICAgR3N0R0xDb250ZXh0IGEgR0wgY29u
dGV4dCBpcyBpbnN0YW50aWF0ZWQsIGlmIGl0IHdhc24ndCBiZWZvcmUsCisgICAgICAgIGFuZCB3
cmFwcyBpdC4gUGxhdGZvcm1EaXNwbGF5IGFkZHMgdHdvIGdldHRlcnMsIG9uZSBmb3IKKyAgICAg
ICAgR3N0R0xDb250ZXh0IG9iamVjdCwgYW5kIG90aGVyIGZvciBHc3RHTERpc3BsYXkuIEJvdGgg
YXJlIHVzZWQgdG8KKyAgICAgICAgY29uZmlndXJlIHRoZSBpbnRlcm5hbCBHU3RyZWFtZXIgR0wg
Y29udGV4dCBpbiB0aGUgbXVsdGltZWRpYQorICAgICAgICBwaXBlbGluZS4KKworICAgICAgICBO
byBuZXcgdGVzdHMgYXJlIG5lZWRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL0dTdHJlYW1lci5j
bWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5Ojp0ZXJtaW5hdGVFR0xEaXNwbGF5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwOgor
ICAgICAgICAocmVxdWVzdEdMQ29udGV4dCk6CisgICAgICAgICh3ZWJLaXRHTFZpZGVvU2lua0No
YW5nZVN0YXRlKToKKyAgICAgICAgKHdlYktpdEdMVmlkZW9TaW5rUHJvYmVQbGF0Zm9ybSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9QbGF0Zm9y
bURpc3BsYXlHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKGNyZWF0ZUdzdEdMRGlzcGxh
eSk6CisgICAgICAgIChQbGF0Zm9ybURpc3BsYXk6OnRyeUVuc3VyZUdzdEdMQ29udGV4dCk6Cisg
ICAgICAgIChQbGF0Zm9ybURpc3BsYXk6OmdzdEdMRGlzcGxheSBjb25zdCk6CisgICAgICAgIChQ
bGF0Zm9ybURpc3BsYXk6OmdzdEdMQ29udGV4dCBjb25zdCk6CisKIDIwMjAtMDItMjUgIENhcmxv
cyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEFk
ZCBzdXBwb3J0IGZvciByZW5kZXJpbmcgc2xpZGVyIHRpY2tzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9HU3RyZWFtZXIuY21ha2UKaW5kZXggZWZhNWU3NTY5NTIyNzYyZGQ4YWVjN2NlYmUzMzRhYTgx
OTc4NWZmNi4uODk1MWNiMWU2YjM4ZWU3Zjc3MmFkY2FjZmFlNDExZGE2MjRmODE1MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQpAQCAtMTE3LDYgKzExNyw3IEBAIGlm
IChFTkFCTEVfVklERU8pCiAgICAgICAgICAgICAke0dTVFJFQU1FUl9HTF9MSUJSQVJJRVN9CiAg
ICAgICAgICkKICAgICAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvUGxhdGZvcm1EaXNwbGF5R1N0cmVhbWVyLmNw
cAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVGV4dHVyZUNv
cGllckdTdHJlYW1lci5jcHAKICAgICAgICAgKQogICAgIGVuZGlmICgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAppbmRleCAx
NTZlNWFhMmI3MzVkZjYxYTFjMTk2NmVkYjMzNmI1ZGMxOWUwZmJiLi45YTVhMWI2NDc1OTQ2Yjli
ZmI4YTAyZWQyNzlkNzM1ZTQyYWYxZTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKQEAgLTIzMSw2ICsyMzEsMTAgQEAg
dm9pZCBQbGF0Zm9ybURpc3BsYXk6OmluaXRpYWxpemVFR0xEaXNwbGF5KCkKIAogdm9pZCBQbGF0
Zm9ybURpc3BsYXk6OnRlcm1pbmF0ZUVHTERpc3BsYXkoKQogeworI2lmIEVOQUJMRShWSURFTykg
JiYgVVNFKEdTVFJFQU1FUl9HTCkKKyAgICBtX2dzdEdMRGlzcGxheSA9IG51bGxwdHI7CisgICAg
bV9nc3RHTENvbnRleHQgPSBudWxscHRyOworI2VuZGlmCiAgICAgbV9zaGFyaW5nR0xDb250ZXh0
ID0gbnVsbHB0cjsKICAgICBBU1NFUlQobV9lZ2xEaXNwbGF5SW5pdGlhbGl6ZWQpOwogICAgIGlm
IChtX2VnbERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCmluZGV4IDVkNmFiNWFmZTVkNDJh
ZTBmZjZiNDg2NzI4NmJiMjIzYTU2NzYyZjEuLmU0ZjIzNzk4NTliZTgwMGE0NmQ4ZmI0OGIxYzk1
MTI3NWZiNDNlMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BsYXRmb3JtRGlzcGxheS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BsYXRmb3JtRGlzcGxheS5oCkBAIC0zMyw2ICszMywxMyBAQAogdHlwZWRlZiB2b2lkICpFR0xE
aXNwbGF5OwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVJfR0wp
CisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorCit0eXBlZGVmIHN0cnVjdCBfR3N0R0xD
b250ZXh0IEdzdEdMQ29udGV4dDsKK3R5cGVkZWYgc3RydWN0IF9Hc3RHTERpc3BsYXkgR3N0R0xE
aXNwbGF5OworI2VuZGlmIC8vIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUl9HTCkKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHTENvbnRleHQ7CkBAIC03MSw2ICs3OCwxMSBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2h1dERvd25FZ2xEaXNwbGF5cygpOwogI2VuZGlm
CiAKKyNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVJfR0wpCisgICAgR3N0R0xEaXNw
bGF5KiBnc3RHTERpc3BsYXkoKSBjb25zdDsKKyAgICBHc3RHTENvbnRleHQqIGdzdEdMQ29udGV4
dCgpIGNvbnN0OworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBlbnVtIGNsYXNzIE5hdGl2ZURp
c3BsYXlPd25lZCB7IE5vLCBZZXMgfTsKICAgICBleHBsaWNpdCBQbGF0Zm9ybURpc3BsYXkoTmF0
aXZlRGlzcGxheU93bmVkKTsKQEAgLTk5LDYgKzExMSwxMyBAQCBwcml2YXRlOgogICAgIGludCBt
X2VnbE1ham9yVmVyc2lvbiB7IDAgfTsKICAgICBpbnQgbV9lZ2xNaW5vclZlcnNpb24geyAwIH07
CiAjZW5kaWYKKworI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUl9HTCkKKyAgICBi
b29sIHRyeUVuc3VyZUdzdEdMQ29udGV4dCgpOworCisgICAgR1JlZlB0cjxHc3RHTERpc3BsYXk+
IG1fZ3N0R0xEaXNwbGF5OworICAgIEdSZWZQdHI8R3N0R0xDb250ZXh0PiBtX2dzdEdMQ29udGV4
dDsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVh
bWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZp
ZGVvU2lua0dTdHJlYW1lci5jcHAKaW5kZXggMzY3NjM3Nzg5NjUwZWI3NjZhOWI1MzViYzIzMTI1
MzAxYTEyODI5Zi4uNmMxYTlhNjI5NTI4OTUzZjNhM2MyMTZiNmNkODY2NmUyNzJhYzg5YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlk
ZW9TaW5rR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwCkBAIC0yMiwzNCArMjIsMTMgQEAK
IAogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUl9HTCkKIAotI2luY2x1ZGUgIkdM
Q29udGV4dC5oIgogI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgogI2luY2x1ZGUgIk1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtRGlzcGxheS5oIgor
CiAjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvV1RG
R1R5cGUuaD4KIAotI2lmIFVTRShHTFgpCi0jaW5jbHVkZSAiR0xDb250ZXh0R0xYLmgiCi0jaW5j
bHVkZSA8Z3N0L2dsL3gxMS9nc3RnbGRpc3BsYXlfeDExLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShF
R0wpCi0jaW5jbHVkZSAiR0xDb250ZXh0RUdMLmgiCi0jaW5jbHVkZSA8Z3N0L2dsL2VnbC9nc3Rn
bGRpc3BsYXlfZWdsLmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFgxMSkKLSNpbmNsdWRlICJQ
bGF0Zm9ybURpc3BsYXlYMTEuaCIKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0FZTEFORCkKLSNp
bmNsdWRlICJQbGF0Zm9ybURpc3BsYXlXYXlsYW5kLmgiCi0jZW5kaWYKLQotI2lmIFVTRShXUEVf
UkVOREVSRVIpCi0jaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5TGliV1BFLmgiCi0jZW5kaWYKLQog
Ly8gZ3N0Z2xhcGkuaCBtYXkgaW5jbHVkZSBlZ2xwbGF0Zm9ybS5oIGFuZCBpdCBpbmNsdWRlcyBY
LmgsIHdoaWNoCiAvLyBkZWZpbmVzIE5vbmUsIGJyZWFraW5nIE1lZGlhUGxheWVyOjpOb25lIGVu
dW0KICNpZiBQTEFURk9STShYMTEpICYmIEdTVF9HTF9IQVZFX1BMQVRGT1JNX0VHTApAQCAtNjYs
OCArNDUsNiBAQCBlbnVtIHsKIAogc3RydWN0IF9XZWJLaXRHTFZpZGVvU2lua1ByaXZhdGUgewog
ICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gYXBwU2luazsKLSAgICBHUmVmUHRyPEdzdEdMQ29udGV4
dD4gZ2xDb250ZXh0OwotICAgIEdSZWZQdHI8R3N0R0xEaXNwbGF5PiBnbERpc3BsYXk7CiAgICAg
R1JlZlB0cjxHc3RDb250ZXh0PiBnbERpc3BsYXlFbGVtZW50Q29udGV4dDsKICAgICBHUmVmUHRy
PEdzdENvbnRleHQ+IGdsQXBwRWxlbWVudENvbnRleHQ7CiAgICAgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyKiBtZWRpYVBsYXllclByaXZhdGU7CkBAIC0xNDAsMTEzICsxMTcsMTYgQEAgdm9p
ZCB3ZWJLaXRHTFZpZGVvU2lua0ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKICAgICBHU1RfQ0FM
TF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1MsIGZpbmFsaXplLCAob2JqZWN0KSk7CiB9CiAKLXN0YXRp
YyBib29sIGVuc3VyZUdzdEdMQ29udGV4dChXZWJLaXRHTFZpZGVvU2luayogc2luaykKK0dSZWZQ
dHI8R3N0Q29udGV4dD4gcmVxdWVzdEdMQ29udGV4dChjb25zdCBjaGFyKiBjb250ZXh0VHlwZSkK
IHsKLSAgICBXZWJLaXRHTFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5wcml2OwotCi0g
ICAgaWYgKHByaXYtPmdsQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KICAgICBhdXRv
JiBzaGFyZWREaXNwbGF5ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9z
aXRpbmcoKTsKLQotICAgIC8vIFRoZSBmbG9hdGluZyByZWYgcmVtb3ZhbCBzdXBwb3J0IHdhcyBh
ZGRlZCBpbiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQzMDYy
LgotICAgIGJvb2wgc2hvdWxkQWRvcHRSZWYgPSB3ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwgMTQs
IDApOwotICAgIGlmICghcHJpdi0+Z2xEaXNwbGF5KSB7Ci0jaWYgUExBVEZPUk0oWDExKQotI2lm
IFVTRShHTFgpCi0gICAgICAgIGlmIChpczxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3Bs
YXkpKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNpbmssICJDcmVhdGluZyBYMTEg
c2hhcmVkIEdMIGRpc3BsYXkiKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRBZG9wdFJlZikKLSAg
ICAgICAgICAgICAgICBwcml2LT5nbERpc3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVko
Z3N0X2dsX2Rpc3BsYXlfeDExX25ld193aXRoX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNw
bGF5WDExPihzaGFyZWREaXNwbGF5KS5uYXRpdmUoKSkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBwcml2LT5nbERpc3BsYXkgPSBHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlz
cGxheV94MTFfbmV3X3dpdGhfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNo
YXJlZERpc3BsYXkpLm5hdGl2ZSgpKSk7Ci0gICAgICAgIH0KLSNlbGlmIFVTRShFR0wpCi0gICAg
ICAgIGlmIChpczxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpKSB7Ci0gICAgICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHNpbmssICJDcmVhdGluZyBYMTEgc2hhcmVkIEVHTCBkaXNw
bGF5Iik7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCi0gICAgICAgICAgICAgICAg
cHJpdi0+Z2xEaXNwbGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5
X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNo
YXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBwcml2LT5nbERpc3BsYXkgPSBHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9l
Z2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFy
ZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsKLSAgICAgICAgfQotI2VuZGlmCi0jZW5kaWYKLQot
I2lmIFBMQVRGT1JNKFdBWUxBTkQpCi0gICAgICAgIGlmIChpczxQbGF0Zm9ybURpc3BsYXlXYXls
YW5kPihzaGFyZWREaXNwbGF5KSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzaW5r
LCAiQ3JlYXRpbmcgV2F5bGFuZCBzaGFyZWQgZGlzcGxheSIpOwotICAgICAgICAgICAgaWYgKHNo
b3VsZEFkb3B0UmVmKQotICAgICAgICAgICAgICAgIHByaXYtPmdsRGlzcGxheSA9IGFkb3B0R1Jl
ZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXko
ZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5V2F5bGFuZD4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxh
eSgpKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByaXYtPmdsRGlzcGxh
eSA9IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxh
eShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlXYXlsYW5kPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNw
bGF5KCkpKTsKLSAgICAgICAgfQotI2VuZGlmCi0KLSNpZiBVU0UoV1BFX1JFTkRFUkVSKQotICAg
ICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5TGliV1BFPihzaGFyZWREaXNwbGF5KSkgewotICAg
ICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzaW5rLCAiQ3JlYXRpbmcgV1BFIHNoYXJlZCBFR0wg
ZGlzcGxheSIpOwotICAgICAgICAgICAgaWYgKHNob3VsZEFkb3B0UmVmKQotICAgICAgICAgICAg
ICAgIHByaXYtPmdsRGlzcGxheSA9IGFkb3B0R1JlZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlz
cGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5TGli
V1BFPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKSk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgcHJpdi0+Z2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rp
c3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheUxp
YldQRT4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSk7Ci0gICAgICAgIH0KLSNlbmRpZgot
Ci0gICAgICAgIEFTU0VSVChwcml2LT5nbERpc3BsYXkpOwotICAgIH0KLQotICAgIEdMQ29udGV4
dCogc2hhcmVkQ29udGV4dCA9IHNoYXJlZERpc3BsYXkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAg
IGlmICghc2hhcmVkQ29udGV4dCkgewotICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUihHU1RfRUxF
TUVOVF9DQVNUKHNpbmspLCBSRVNPVVJDRSwgTk9UX0ZPVU5ELCAoKCJXZWJLaXQgc2hhcmVkIEdM
IGNvbnRleHQgdW5hdmFpbGFibGUiKSksCi0gICAgICAgICAgICAoIlRoZSBXZWJLaXQgc2hhcmVk
IEdMIGNvbnRleHQgc29tZWhvdyBkaXNhcHBlYXJlZC4gVmlkZW8gdGV4dHVyZXMgcmVuZGVyaW5n
IHdpbGwgZmFpbC4iKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBF
R0wgYW5kIEdMWCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLCBubyBuZWVkIGZvciBpZmRlZnMgaGVy
ZS4KLSAgICBHc3RHTFBsYXRmb3JtIGdsUGxhdGZvcm0gPSBzaGFyZWRDb250ZXh0LT5pc0VHTENv
bnRleHQoKSA/IEdTVF9HTF9QTEFURk9STV9FR0wgOiBHU1RfR0xfUExBVEZPUk1fR0xYOwotCi0j
aWYgVVNFKE9QRU5HTF9FUykKLSAgICBHc3RHTEFQSSBnbEFQSSA9IEdTVF9HTF9BUElfR0xFUzI7
Ci0jZWxpZiBVU0UoT1BFTkdMKQotICAgIEdzdEdMQVBJIGdsQVBJID0gR1NUX0dMX0FQSV9PUEVO
R0w7Ci0jZWxzZQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0KLSAgICBQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dEdMIGNvbnRleHRIYW5kbGUgPSBzaGFyZWRDb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHRIYW5kbGUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmIChzaG91bGRBZG9wdFJlZikKLSAgICAgICAgcHJpdi0+Z2xDb250ZXh0
ID0gYWRvcHRHUmVmKGdzdF9nbF9jb250ZXh0X25ld193cmFwcGVkKHByaXYtPmdsRGlzcGxheS5n
ZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxndWludHB0cj4oY29udGV4dEhhbmRsZSksIGdsUGxhdGZv
cm0sIGdsQVBJKSk7Ci0gICAgZWxzZQotICAgICAgICBwcml2LT5nbENvbnRleHQgPSBnc3RfZ2xf
Y29udGV4dF9uZXdfd3JhcHBlZChwcml2LT5nbERpc3BsYXkuZ2V0KCksIHJlaW50ZXJwcmV0X2Nh
c3Q8Z3VpbnRwdHI+KGNvbnRleHRIYW5kbGUpLCBnbFBsYXRmb3JtLCBnbEFQSSk7Ci0KLSAgICAv
LyBBY3RpdmF0ZSBhbmQgZmlsbCB0aGUgR1N0cmVhbWVyIHdyYXBwZWQgY29udGV4dCB3aXRoIHRo
ZSBXZWJraXQncyBzaGFyZWQgb25lLgotICAgIGF1dG8qIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9
IEdMQ29udGV4dDo6Y3VycmVudCgpOwotICAgIHNoYXJlZENvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGlmIChnc3RfZ2xfY29udGV4dF9hY3RpdmF0ZShwcml2LT5nbENvbnRleHQu
Z2V0KCksIFRSVUUpKSB7Ci0gICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAg
ICAgICAgaWYgKCFnc3RfZ2xfY29udGV4dF9maWxsX2luZm8ocHJpdi0+Z2xDb250ZXh0LmdldCgp
LCAmZXJyb3Iub3V0UHRyKCkpKQotICAgICAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0byBm
aWxsIGluIEdTdHJlYW1lciBjb250ZXh0OiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKLSAgICAgICAg
Z3N0X2dsX2NvbnRleHRfYWN0aXZhdGUocHJpdi0+Z2xDb250ZXh0LmdldCgpLCBGQUxTRSk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gYWN0aXZhdGUgR1N0cmVh
bWVyIGNvbnRleHQgJSIgR1NUX1BUUl9GT1JNQVQsIHByaXYtPmdsQ29udGV4dC5nZXQoKSk7Ci0g
ICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKLSAgICAgICAgcHJldmlvdXNBY3RpdmVDb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1HUmVm
UHRyPEdzdENvbnRleHQ+IHJlcXVlc3RHTENvbnRleHQoV2ViS2l0R0xWaWRlb1NpbmsqIHNpbmss
IGNvbnN0IGNoYXIqIGNvbnRleHRUeXBlKQotewotICAgIFdlYktpdEdMVmlkZW9TaW5rUHJpdmF0
ZSogcHJpdiA9IHNpbmstPnByaXY7Ci0gICAgaWYgKCFlbnN1cmVHc3RHTENvbnRleHQoc2luaykp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8qIGdzdEdMRGlzcGxheSA9IHNoYXJl
ZERpc3BsYXkuZ3N0R0xEaXNwbGF5KCk7CisgICAgYXV0byogZ3N0R0xDb250ZXh0ID0gc2hhcmVk
RGlzcGxheS5nc3RHTENvbnRleHQoKTsKKyAgICBBU1NFUlQoZ3N0R0xEaXNwbGF5ICYmIGdzdEdM
Q29udGV4dCk7CiAKICAgICBpZiAoIWdfc3RyY21wMChjb250ZXh0VHlwZSwgR1NUX0dMX0RJU1BM
QVlfQ09OVEVYVF9UWVBFKSkgewogICAgICAgICBHc3RDb250ZXh0KiBkaXNwbGF5Q29udGV4dCA9
IGdzdF9jb250ZXh0X25ldyhHU1RfR0xfRElTUExBWV9DT05URVhUX1RZUEUsIFRSVUUpOwotICAg
ICAgICBnc3RfY29udGV4dF9zZXRfZ2xfZGlzcGxheShkaXNwbGF5Q29udGV4dCwgcHJpdi0+Z2xE
aXNwbGF5LmdldCgpKTsKKyAgICAgICAgZ3N0X2NvbnRleHRfc2V0X2dsX2Rpc3BsYXkoZGlzcGxh
eUNvbnRleHQsIGdzdEdMRGlzcGxheSk7CiAgICAgICAgIHJldHVybiBhZG9wdEdSZWYoZGlzcGxh
eUNvbnRleHQpOwogICAgIH0KIApAQCAtMjU0LDkgKzEzNCw5IEBAIEdSZWZQdHI8R3N0Q29udGV4
dD4gcmVxdWVzdEdMQ29udGV4dChXZWJLaXRHTFZpZGVvU2luayogc2luaywgY29uc3QgY2hhciog
Y29udGV4CiAgICAgICAgIEdzdENvbnRleHQqIGFwcENvbnRleHQgPSBnc3RfY29udGV4dF9uZXco
ImdzdC5nbC5hcHBfY29udGV4dCIsIFRSVUUpOwogICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGdzdF9jb250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShhcHBDb250ZXh0KTsKICNpZiBH
U1RfQ0hFQ0tfVkVSU0lPTigxLCAxMiwgMCkKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoc3Ry
dWN0dXJlLCAiY29udGV4dCIsIEdTVF9UWVBFX0dMX0NPTlRFWFQsIHByaXYtPmdsQ29udGV4dC5n
ZXQoKSwgbnVsbHB0cik7CisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHN0cnVjdHVyZSwgImNv
bnRleHQiLCBHU1RfVFlQRV9HTF9DT05URVhULCBnc3RHTENvbnRleHQsIG51bGxwdHIpOwogI2Vs
c2UKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoc3RydWN0dXJlLCAiY29udGV4dCIsIEdTVF9H
TF9UWVBFX0NPTlRFWFQsIHByaXYtPmdsQ29udGV4dC5nZXQoKSwgbnVsbHB0cik7CisgICAgICAg
IGdzdF9zdHJ1Y3R1cmVfc2V0KHN0cnVjdHVyZSwgImNvbnRleHQiLCBHU1RfR0xfVFlQRV9DT05U
RVhULCBnc3RHTENvbnRleHQsIG51bGxwdHIpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiBhZG9w
dEdSZWYoYXBwQ29udGV4dCk7CiAgICAgfQpAQCAtMjc4LDEzICsxNTgsMTMgQEAgc3RhdGljIEdz
dFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktpdEdMVmlkZW9TaW5rQ2hhbmdlU3RhdGUoR3N0RWxlbWVu
dCogZWxlbWVudCwgR3MKICAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUkVBRFk6
CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDogewogICAgICAgICBp
ZiAoIXByaXYtPmdsRGlzcGxheUVsZW1lbnRDb250ZXh0KQotICAgICAgICAgICAgcHJpdi0+Z2xE
aXNwbGF5RWxlbWVudENvbnRleHQgPSByZXF1ZXN0R0xDb250ZXh0KHNpbmssIEdTVF9HTF9ESVNQ
TEFZX0NPTlRFWFRfVFlQRSk7CisgICAgICAgICAgICBwcml2LT5nbERpc3BsYXlFbGVtZW50Q29u
dGV4dCA9IHJlcXVlc3RHTENvbnRleHQoR1NUX0dMX0RJU1BMQVlfQ09OVEVYVF9UWVBFKTsKIAog
ICAgICAgICBpZiAocHJpdi0+Z2xEaXNwbGF5RWxlbWVudENvbnRleHQpCiAgICAgICAgICAgICBn
c3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVF9DQVNUKHNpbmspLCBwcml2LT5nbERp
c3BsYXlFbGVtZW50Q29udGV4dC5nZXQoKSk7CiAKICAgICAgICAgaWYgKCFwcml2LT5nbEFwcEVs
ZW1lbnRDb250ZXh0KQotICAgICAgICAgICAgcHJpdi0+Z2xBcHBFbGVtZW50Q29udGV4dCA9IHJl
cXVlc3RHTENvbnRleHQoc2luaywgImdzdC5nbC5hcHBfY29udGV4dCIpOworICAgICAgICAgICAg
cHJpdi0+Z2xBcHBFbGVtZW50Q29udGV4dCA9IHJlcXVlc3RHTENvbnRleHQoImdzdC5nbC5hcHBf
Y29udGV4dCIpOwogCiAgICAgICAgIGlmIChwcml2LT5nbEFwcEVsZW1lbnRDb250ZXh0KQogICAg
ICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlRfQ0FTVChzaW5rKSwg
cHJpdi0+Z2xBcHBFbGVtZW50Q29udGV4dC5nZXQoKSk7CkBAIC0zNzYsOSArMjU2LDcgQEAgdm9p
ZCB3ZWJLaXRHTFZpZGVvU2lua1NldE1lZGlhUGxheWVyUHJpdmF0ZShXZWJLaXRHTFZpZGVvU2lu
ayogc2luaywgTWVkaWFQbGF5ZXIKIAogYm9vbCB3ZWJLaXRHTFZpZGVvU2lua1Byb2JlUGxhdGZv
cm0oKQogewotICAgIGF1dG8mIHNoYXJlZERpc3BsYXkgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJl
ZERpc3BsYXlGb3JDb21wb3NpdGluZygpOwotICAgIEdMQ29udGV4dCogc2hhcmVkQ29udGV4dCA9
IHNoYXJlZERpc3BsYXkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAgIGlmICghc2hhcmVkQ29udGV4
dCkgeworICAgIGlmICghUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRp
bmcoKS5nc3RHTENvbnRleHQoKSkgewogICAgICAgICBHU1RfV0FSTklORygiV2ViS2l0IHNoYXJl
ZCBHTCBjb250ZXh0IGlzIG5vdCBhdmFpbGFibGUuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5k
ZXggNTIxYjIwZDExY2M4ZGQ5NGJlMjg0ZDc0Njk5Y2QyNzE3YjRlMDU0NS4uYWJlYjg1N2E3ZmRl
NTRhMjc5ZWZjNWQ1ODhlOGQzMmM2OWVkZjJhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIuaApAQCAtODIsOCArODIsNiBAQCB0eXBlZGVmIHN0cnVjdCBf
R3N0TXBlZ3RzU2VjdGlvbiBHc3RNcGVndHNTZWN0aW9uOwogCiB0eXBlZGVmIHN0cnVjdCBfR3N0
U3RyZWFtVm9sdW1lIEdzdFN0cmVhbVZvbHVtZTsKIHR5cGVkZWYgc3RydWN0IF9Hc3RWaWRlb0lu
Zm8gR3N0VmlkZW9JbmZvOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEdMQ29udGV4dCBHc3RHTENvbnRl
eHQ7Ci10eXBlZGVmIHN0cnVjdCBfR3N0R0xEaXNwbGF5IEdzdEdMRGlzcGxheTsKIAogI2lmIFVT
RShXUEVfVklERU9fUExBTkVfRElTUExBWV9ETUFCVUYpCiBzdHJ1Y3Qgd3BlX3ZpZGVvX3BsYW5l
X2Rpc3BsYXlfZG1hYnVmX3NvdXJjZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9QbGF0Zm9ybURpc3BsYXlHU3RyZWFtZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1BsYXRmb3JtRGlzcGxheUdT
dHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2ExYjAwMTBhMDVlYzI4ZjI5YmY0MWRiZTk1YjgyZDJj
ZjNlZmQ4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9QbGF0Zm9ybURpc3BsYXlHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsMTQ0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5LmgiCisKKyNpbmNsdWRlICJHU3RyZWFtZXJD
b21tb24uaCIKKworI2lmIFVTRShHTFgpCisjaW5jbHVkZSAiR0xDb250ZXh0R0xYLmgiCisjaW5j
bHVkZSA8Z3N0L2dsL3gxMS9nc3RnbGRpc3BsYXlfeDExLmg+CisjZW5kaWYKKworI2lmIFVTRShF
R0wpCisjaW5jbHVkZSAiR0xDb250ZXh0RUdMLmgiCisjaW5jbHVkZSA8Z3N0L2dsL2VnbC9nc3Rn
bGRpc3BsYXlfZWdsLmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFgxMSkKKyNpbmNsdWRlICJQ
bGF0Zm9ybURpc3BsYXlYMTEuaCIKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0FZTEFORCkKKyNp
bmNsdWRlICJQbGF0Zm9ybURpc3BsYXlXYXlsYW5kLmgiCisjZW5kaWYKKworI2lmIFVTRShXUEVf
UkVOREVSRVIpCisjaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5TGliV1BFLmgiCisjZW5kaWYKKwor
I2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2luY2x1ZGUgPGdzdC9nbC9nbC5oPgorI3Vu
ZGVmIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Vi
a2l0X21lZGlhX3BsYXllcl9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRf
bWVkaWFfcGxheWVyX2RlYnVnCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMg
R3N0R0xEaXNwbGF5KiBjcmVhdGVHc3RHTERpc3BsYXkoUGxhdGZvcm1EaXNwbGF5JiBzaGFyZWRE
aXNwbGF5KQoreworI2lmIFVTRShXUEVfUkVOREVSRVIpCisgICAgaWYgKGlzPFBsYXRmb3JtRGlz
cGxheUxpYldQRT4oc2hhcmVkRGlzcGxheSkpCisgICAgICAgIHJldHVybiBHU1RfR0xfRElTUExB
WShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZv
cm1EaXNwbGF5TGliV1BFPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsKKyNlbmRpZgor
CisjaWYgUExBVEZPUk0oWDExKQorI2lmIFVTRShHTFgpCisgICAgaWYgKGlzPFBsYXRmb3JtRGlz
cGxheVgxMT4oc2hhcmVkRGlzcGxheSkpCisgICAgICAgIHJldHVybiBHU1RfR0xfRElTUExBWShn
c3RfZ2xfZGlzcGxheV94MTFfbmV3X3dpdGhfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3Bs
YXlYMTE+KHNoYXJlZERpc3BsYXkpLm5hdGl2ZSgpKSk7CisjZWxpZiBVU0UoRUdMKQorICAgIGlm
IChpczxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpKQorICAgICAgICByZXR1cm4g
R1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRv
d25jYXN0PFBsYXRmb21EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsK
KyNlbmRpZgorI2VuZGlmCisKKyNpZiBQTEFURk9STShXQVlMQU5EKQorICAgIGlmIChpczxQbGF0
Zm9ybURpc3BsYXlXYXlsYW5kPihzaGFyZWREaXNwbGF5KSkKKyAgICAgICAgcmV0dXJuIEdTVF9H
TF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2Fz
dDxQbGF0Zm9ybURpc3BsYXlXYXlsYW5kPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsK
KyNlbmRpZgorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2Jvb2wgUGxhdGZvcm1EaXNwbGF5
Ojp0cnlFbnN1cmVHc3RHTENvbnRleHQoKQoreworICAgIGlmIChtX2dzdEdMRGlzcGxheSAmJiBt
X2dzdEdMQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyNpZiBVU0UoT1BFTkdMX0VT
KQorICAgIEdzdEdMQVBJIGdsQVBJID0gR1NUX0dMX0FQSV9HTEVTMjsKKyNlbGlmIFVTRShPUEVO
R0wpCisgICAgR3N0R0xBUEkgZ2xBUEkgPSBHU1RfR0xfQVBJX09QRU5HTDsKKyNlbHNlCisgICAg
cmV0dXJuIGZhbHNlOworI2VuZGlmCisKKyAgICBhdXRvKiBzaGFyZWRDb250ZXh0ID0gc2hhcmlu
Z0dMQ29udGV4dCgpOworICAgIGlmICghc2hhcmVkQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgY29udGV4dEhhbmRsZSA9IHNoYXJl
ZENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIGlmICghY29udGV4dEhhbmRsZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBzaG91bGRBZG9wdFJlZiA9IHdlYmtpdEdz
dENoZWNrVmVyc2lvbigxLCAxNCwgMCk7CisKKyAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCisgICAg
ICAgIG1fZ3N0R0xEaXNwbGF5ID0gYWRvcHRHUmVmKGNyZWF0ZUdzdEdMRGlzcGxheSgqdGhpcykp
OworICAgIGVsc2UKKyAgICAgICAgbV9nc3RHTERpc3BsYXkgPSBjcmVhdGVHc3RHTERpc3BsYXko
KnRoaXMpOworICAgIGlmICghbV9nc3RHTERpc3BsYXkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIEdzdEdMUGxhdGZvcm0gZ2xQbGF0Zm9ybSA9IHNoYXJlZENvbnRleHQtPmlzRUdMQ29u
dGV4dCgpID8gR1NUX0dMX1BMQVRGT1JNX0VHTCA6IEdTVF9HTF9QTEFURk9STV9HTFg7CisKKyAg
ICBpZiAoc2hvdWxkQWRvcHRSZWYpCisgICAgICAgIG1fZ3N0R0xDb250ZXh0ID0gYWRvcHRHUmVm
KGdzdF9nbF9jb250ZXh0X25ld193cmFwcGVkKG1fZ3N0R0xEaXNwbGF5LmdldCgpLCByZWludGVy
cHJldF9jYXN0PGd1aW50cHRyPihjb250ZXh0SGFuZGxlKSwgZ2xQbGF0Zm9ybSwgZ2xBUEkpKTsK
KyAgICBlbHNlCisgICAgICAgIG1fZ3N0R0xDb250ZXh0ID0gZ3N0X2dsX2NvbnRleHRfbmV3X3dy
YXBwZWQobV9nc3RHTERpc3BsYXkuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3VpbnRwdHI+KGNv
bnRleHRIYW5kbGUpLCBnbFBsYXRmb3JtLCBnbEFQSSk7CisKKyAgICAvLyBBY3RpdmF0ZSBhbmQg
ZmlsbCB0aGUgR1N0cmVhbWVyIHdyYXBwZWQgY29udGV4dCB3aXRoIHRoZSBXZWJraXQncyBzaGFy
ZWQgb25lLgorICAgIGF1dG8qIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3Vy
cmVudCgpOworICAgIHNoYXJlZENvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
IChnc3RfZ2xfY29udGV4dF9hY3RpdmF0ZShtX2dzdEdMQ29udGV4dC5nZXQoKSwgVFJVRSkpIHsK
KyAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgICAgICBpZiAoIWdzdF9n
bF9jb250ZXh0X2ZpbGxfaW5mbyhtX2dzdEdMQ29udGV4dC5nZXQoKSwgJmVycm9yLm91dFB0cigp
KSkKKyAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gZmlsbCBpbiBHU3RyZWFtZXIg
Y29udGV4dDogJXMiLCBlcnJvci0+bWVzc2FnZSk7CisgICAgfSBlbHNlCisgICAgICAgIEdTVF9X
QVJOSU5HKCJGYWlsZWQgdG8gYWN0aXZhdGUgR1N0cmVhbWVyIGNvbnRleHQgJSIgR1NUX1BUUl9G
T1JNQVQsIG1fZ3N0R0xDb250ZXh0LmdldCgpKTsKKyAgICBpZiAocHJldmlvdXNBY3RpdmVDb250
ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dzdEdMRGlzcGxheSogUGxhdGZvcm1EaXNwbGF5
Ojpnc3RHTERpc3BsYXkoKSBjb25zdAoreworICAgIGlmICghY29uc3RfY2FzdDxQbGF0Zm9ybURp
c3BsYXkqPih0aGlzKS0+dHJ5RW5zdXJlR3N0R0xDb250ZXh0KCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIHJldHVybiBtX2dzdEdMRGlzcGxheS5nZXQoKTsKK30KKworR3N0R0xDb250
ZXh0KiBQbGF0Zm9ybURpc3BsYXk6OmdzdEdMQ29udGV4dCgpIGNvbnN0Cit7CisgICAgaWYgKCFj
b25zdF9jYXN0PFBsYXRmb3JtRGlzcGxheSo+KHRoaXMpLT50cnlFbnN1cmVHc3RHTENvbnRleHQo
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1fZ3N0R0xDb250ZXh0Lmdl
dCgpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391733</attachid>
            <date>2020-02-26 03:30:48 -0800</date>
            <delta_ts>2020-02-26 04:35:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200626-20200226123046.patch</filename>
            <type>text/plain</type>
            <size>19845</size>
            <attacher name="Víctor M. Jáquez L.">vjaquez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3NDE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjk0MzE3NGVkZDRiZTk5
NTIyNWEzMWRlMDY5MDM5ZWNmNDdmNDczNi4uMDI2YjNjNWQ2ZGM5ZmJmOWQ4NzU4NTFiNmQ3YTM3
Yjc4ZDNkYjAxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDIwLTAyLTI2ICBWw61j
dG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgIDx2amFxdWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAg
W0dMXVtHU3RyZWFtZXJdIEluc3RhbnRpYXRlIEdzdEdMQ29udGV4dCB3aGVuIHRoZSBzaGFyZWQg
R0xDb250ZXh0IGlzIGNyZWF0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMDYyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBHc3RHTENvbnRleHQgYW5kIEdzdEdMRGlzcGxh
eSBhcyBwYXJ0IG9mCisgICAgICAgIFBsYXRmb3JtRGlzcGxheS4KKworICAgICAgICBSaWdodCBu
b3cgb25lIEdzdEdMQ29udGV4dCBpcyBjcmVhdGVkIHBlciB2aWRlbyB0YWcsIHdoaWNoIGlzIGEK
KyAgICAgICAgd3JhcHBlciBvZiB0aGUgR0wgc2hhcmVkIGNvbnRleHQuIEV2ZXJ5IHRpbWUgdGhp
cyB3cmFwcGVyIGlzCisgICAgICAgIGNyZWF0ZWQgdGhlIEdMIGNvbnRleHQgaGFzIHRvIGJlIGN1
cnJlbnQgaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZQorICAgICAgICB0aGUgd3JhcHBlcidzIGludGVy
bmFsIHN0YXRlLgorCisgICAgICAgIEEgYmV0dGVyIGFwcHJvYWNoIHdvdWxkIGJlIHRvIGhhdmUg
YSBzaW5nbGUgR3N0R0xDb250ZXh0IHBlciBHTAorICAgICAgICBjb250ZXh0LCB0byBpbnN0YW50
aWF0ZSBpdCB3aGVuIHRoZSBHTCBjb250ZXh0IGlzIGNyZWF0ZWQgYW5kCisgICAgICAgIGN1cnJl
bnQuIFRoaXMgR3N0R0xDb250ZXh0IHdvdWxkIGJlIHVzZWQgZm9yIGFsbCBtZWRpYSBwbGF5ZXJz
LgorCisgICAgICAgIEdzdEdMQ29udGV4dCBhbmQgR3N0R0xEaXNwbGF5IGFyZSBpbnN0YW50aWF0
ZWQgYXMgc2luZ2xldG9ucyBieQorICAgICAgICBQbGF0Zm9ybURpc3BsYXkuIFdoZW4gdGhlIG1l
ZGlhIHBsYXllciByZXF1ZXN0IGZvciB0aGUKKyAgICAgICAgR3N0R0xDb250ZXh0IGEgR0wgY29u
dGV4dCBpcyBpbnN0YW50aWF0ZWQsIGlmIGl0IHdhc24ndCBiZWZvcmUsCisgICAgICAgIGFuZCB3
cmFwcyBpdC4gUGxhdGZvcm1EaXNwbGF5IGFkZHMgdHdvIGdldHRlcnMsIG9uZSBmb3IKKyAgICAg
ICAgR3N0R0xDb250ZXh0IG9iamVjdCwgYW5kIG90aGVyIGZvciBHc3RHTERpc3BsYXkuIEJvdGgg
YXJlIHVzZWQgdG8KKyAgICAgICAgY29uZmlndXJlIHRoZSBpbnRlcm5hbCBHU3RyZWFtZXIgR0wg
Y29udGV4dCBpbiB0aGUgbXVsdGltZWRpYQorICAgICAgICBwaXBlbGluZS4KKworICAgICAgICBO
byBuZXcgdGVzdHMgYXJlIG5lZWRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL0dTdHJlYW1lci5j
bWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5Ojp0ZXJtaW5hdGVFR0xEaXNwbGF5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwOgor
ICAgICAgICAocmVxdWVzdEdMQ29udGV4dCk6CisgICAgICAgICh3ZWJLaXRHTFZpZGVvU2lua0No
YW5nZVN0YXRlKToKKyAgICAgICAgKHdlYktpdEdMVmlkZW9TaW5rUHJvYmVQbGF0Zm9ybSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9QbGF0Zm9y
bURpc3BsYXlHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKGNyZWF0ZUdzdEdMRGlzcGxh
eSk6CisgICAgICAgIChQbGF0Zm9ybURpc3BsYXk6OnRyeUVuc3VyZUdzdEdMQ29udGV4dCk6Cisg
ICAgICAgIChQbGF0Zm9ybURpc3BsYXk6OmdzdEdMRGlzcGxheSBjb25zdCk6CisgICAgICAgIChQ
bGF0Zm9ybURpc3BsYXk6OmdzdEdMQ29udGV4dCBjb25zdCk6CisKIDIwMjAtMDItMjYgIE1hcmsg
TGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEN1c3RvbSBlbGVtZW50IGNhY2hp
bmcgc2hvdWxkIGJlIGF3YXJlIG9mIGRpZmZlcmVudCB3b3JsZHMuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9HU3RyZWFtZXIuY21ha2UKaW5kZXggZWZhNWU3NTY5NTIyNzYyZGQ4YWVjN2NlYmUzMzRh
YTgxOTc4NWZmNi4uODk1MWNiMWU2YjM4ZWU3Zjc3MmFkY2FjZmFlNDExZGE2MjRmODE1MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQpAQCAtMTE3LDYgKzExNyw3IEBA
IGlmIChFTkFCTEVfVklERU8pCiAgICAgICAgICAgICAke0dTVFJFQU1FUl9HTF9MSUJSQVJJRVN9
CiAgICAgICAgICkKICAgICAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvUGxhdGZvcm1EaXNwbGF5R1N0cmVhbWVy
LmNwcAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvVGV4dHVy
ZUNvcGllckdTdHJlYW1lci5jcHAKICAgICAgICAgKQogICAgIGVuZGlmICgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAppbmRl
eCAxNTZlNWFhMmI3MzVkZjYxYTFjMTk2NmVkYjMzNmI1ZGMxOWUwZmJiLi45YTVhMWI2NDc1OTQ2
YjliZmI4YTAyZWQyNzlkNzM1ZTQyYWYxZTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKQEAgLTIzMSw2ICsyMzEsMTAg
QEAgdm9pZCBQbGF0Zm9ybURpc3BsYXk6OmluaXRpYWxpemVFR0xEaXNwbGF5KCkKIAogdm9pZCBQ
bGF0Zm9ybURpc3BsYXk6OnRlcm1pbmF0ZUVHTERpc3BsYXkoKQogeworI2lmIEVOQUJMRShWSURF
TykgJiYgVVNFKEdTVFJFQU1FUl9HTCkKKyAgICBtX2dzdEdMRGlzcGxheSA9IG51bGxwdHI7Cisg
ICAgbV9nc3RHTENvbnRleHQgPSBudWxscHRyOworI2VuZGlmCiAgICAgbV9zaGFyaW5nR0xDb250
ZXh0ID0gbnVsbHB0cjsKICAgICBBU1NFUlQobV9lZ2xEaXNwbGF5SW5pdGlhbGl6ZWQpOwogICAg
IGlmIChtX2VnbERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCmluZGV4IDVkNmFiNWFmZTVk
NDJhZTBmZjZiNDg2NzI4NmJiMjIzYTU2NzYyZjEuLjc0NzA0YmY0YTYxOTMwM2IzYTdhYjdiZGMy
NDQ1ZjJmNjFhYjcwNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BsYXRmb3JtRGlzcGxheS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BsYXRmb3JtRGlzcGxheS5oCkBAIC0zMyw2ICszMywxMyBAQAogdHlwZWRlZiB2b2lkICpF
R0xEaXNwbGF5OwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVJf
R0wpCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorCit0eXBlZGVmIHN0cnVjdCBfR3N0
R0xDb250ZXh0IEdzdEdMQ29udGV4dDsKK3R5cGVkZWYgc3RydWN0IF9Hc3RHTERpc3BsYXkgR3N0
R0xEaXNwbGF5OworI2VuZGlmIC8vIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUl9HTCkK
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHTENvbnRleHQ7CkBAIC03MSw2ICs3OCwx
MSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2h1dERvd25FZ2xEaXNwbGF5cygpOwogI2Vu
ZGlmCiAKKyNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVJfR0wpCisgICAgR3N0R0xE
aXNwbGF5KiBnc3RHTERpc3BsYXkoKSBjb25zdDsKKyAgICBHc3RHTENvbnRleHQqIGdzdEdMQ29u
dGV4dCgpIGNvbnN0OworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBlbnVtIGNsYXNzIE5hdGl2
ZURpc3BsYXlPd25lZCB7IE5vLCBZZXMgfTsKICAgICBleHBsaWNpdCBQbGF0Zm9ybURpc3BsYXko
TmF0aXZlRGlzcGxheU93bmVkKTsKQEAgLTk5LDYgKzExMSwxMyBAQCBwcml2YXRlOgogICAgIGlu
dCBtX2VnbE1ham9yVmVyc2lvbiB7IDAgfTsKICAgICBpbnQgbV9lZ2xNaW5vclZlcnNpb24geyAw
IH07CiAjZW5kaWYKKworI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUl9HTCkKKyAg
ICBib29sIHRyeUVuc3VyZUdzdEdMQ29udGV4dCgpIGNvbnN0OworCisgICAgbXV0YWJsZSBHUmVm
UHRyPEdzdEdMRGlzcGxheT4gbV9nc3RHTERpc3BsYXk7CisgICAgbXV0YWJsZSBHUmVmUHRyPEdz
dEdMQ29udGV4dD4gbV9nc3RHTENvbnRleHQ7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9HTFZpZGVvU2lua0dTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwCmluZGV4IDM2NzYz
Nzc4OTY1MGViNzY2YTliNTM1YmMyMzEyNTMwMWExMjgyOWYuLjZjMWE5YTYyOTUyODk1M2YzYTNj
MjE2YjZjZDg2NjZlMjcyYWM4OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HTFZpZGVvU2lua0dTdHJlYW1lci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVy
LmNwcApAQCAtMjIsMzQgKzIyLDEzIEBACiAKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RS
RUFNRVJfR0wpCiAKLSNpbmNsdWRlICJHTENvbnRleHQuaCIKICNpbmNsdWRlICJHU3RyZWFtZXJD
b21tb24uaCIKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybURpc3BsYXkuaCIKKwogI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc2luay5o
PgogI2luY2x1ZGUgPHd0Zi9nbGliL1dURkdUeXBlLmg+CiAKLSNpZiBVU0UoR0xYKQotI2luY2x1
ZGUgIkdMQ29udGV4dEdMWC5oIgotI2luY2x1ZGUgPGdzdC9nbC94MTEvZ3N0Z2xkaXNwbGF5X3gx
MS5oPgotI2VuZGlmCi0KLSNpZiBVU0UoRUdMKQotI2luY2x1ZGUgIkdMQ29udGV4dEVHTC5oIgot
I2luY2x1ZGUgPGdzdC9nbC9lZ2wvZ3N0Z2xkaXNwbGF5X2VnbC5oPgotI2VuZGlmCi0KLSNpZiBQ
TEFURk9STShYMTEpCi0jaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5WDExLmgiCi0jZW5kaWYKLQot
I2lmIFBMQVRGT1JNKFdBWUxBTkQpCi0jaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5V2F5bGFuZC5o
IgotI2VuZGlmCi0KLSNpZiBVU0UoV1BFX1JFTkRFUkVSKQotI2luY2x1ZGUgIlBsYXRmb3JtRGlz
cGxheUxpYldQRS5oIgotI2VuZGlmCi0KIC8vIGdzdGdsYXBpLmggbWF5IGluY2x1ZGUgZWdscGxh
dGZvcm0uaCBhbmQgaXQgaW5jbHVkZXMgWC5oLCB3aGljaAogLy8gZGVmaW5lcyBOb25lLCBicmVh
a2luZyBNZWRpYVBsYXllcjo6Tm9uZSBlbnVtCiAjaWYgUExBVEZPUk0oWDExKSAmJiBHU1RfR0xf
SEFWRV9QTEFURk9STV9FR0wKQEAgLTY2LDggKzQ1LDYgQEAgZW51bSB7CiAKIHN0cnVjdCBfV2Vi
S2l0R0xWaWRlb1NpbmtQcml2YXRlIHsKICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGFwcFNpbms7
Ci0gICAgR1JlZlB0cjxHc3RHTENvbnRleHQ+IGdsQ29udGV4dDsKLSAgICBHUmVmUHRyPEdzdEdM
RGlzcGxheT4gZ2xEaXNwbGF5OwogICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gZ2xEaXNwbGF5RWxl
bWVudENvbnRleHQ7CiAgICAgR1JlZlB0cjxHc3RDb250ZXh0PiBnbEFwcEVsZW1lbnRDb250ZXh0
OwogICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogbWVkaWFQbGF5ZXJQcml2YXRlOwpA
QCAtMTQwLDExMyArMTE3LDE2IEBAIHZvaWQgd2ViS2l0R0xWaWRlb1NpbmtGaW5hbGl6ZShHT2Jq
ZWN0KiBvYmplY3QpCiAgICAgR1NUX0NBTExfUEFSRU5UKEdfT0JKRUNUX0NMQVNTLCBmaW5hbGl6
ZSwgKG9iamVjdCkpOwogfQogCi1zdGF0aWMgYm9vbCBlbnN1cmVHc3RHTENvbnRleHQoV2ViS2l0
R0xWaWRlb1NpbmsqIHNpbmspCitHUmVmUHRyPEdzdENvbnRleHQ+IHJlcXVlc3RHTENvbnRleHQo
Y29uc3QgY2hhciogY29udGV4dFR5cGUpCiB7Ci0gICAgV2ViS2l0R0xWaWRlb1NpbmtQcml2YXRl
KiBwcml2ID0gc2luay0+cHJpdjsKLQotICAgIGlmIChwcml2LT5nbENvbnRleHQpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCiAgICAgYXV0byYgc2hhcmVkRGlzcGxheSA9IFBsYXRmb3JtRGlzcGxh
eTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCk7Ci0KLSAgICAvLyBUaGUgZmxvYXRpbmcg
cmVmIHJlbW92YWwgc3VwcG9ydCB3YXMgYWRkZWQgaW4gaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5v
cmcvc2hvd19idWcuY2dpP2lkPTc0MzA2Mi4KLSAgICBib29sIHNob3VsZEFkb3B0UmVmID0gd2Vi
a2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDE0LCAwKTsKLSAgICBpZiAoIXByaXYtPmdsRGlzcGxheSkg
ewotI2lmIFBMQVRGT1JNKFgxMSkKLSNpZiBVU0UoR0xYKQotICAgICAgICBpZiAoaXM8UGxhdGZv
cm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChzaW5rLCAiQ3JlYXRpbmcgWDExIHNoYXJlZCBHTCBkaXNwbGF5Iik7Ci0gICAgICAgICAg
ICBpZiAoc2hvdWxkQWRvcHRSZWYpCi0gICAgICAgICAgICAgICAgcHJpdi0+Z2xEaXNwbGF5ID0g
YWRvcHRHUmVmKEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X3gxMV9uZXdfd2l0aF9kaXNw
bGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkubmF0aXZlKCkp
KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcHJpdi0+Z2xEaXNwbGF5ID0g
R1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfeDExX25ld193aXRoX2Rpc3BsYXkoZG93bmNh
c3Q8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5uYXRpdmUoKSkpOwotICAgICAg
ICB9Ci0jZWxpZiBVU0UoRUdMKQotICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5WDExPihz
aGFyZWREaXNwbGF5KSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzaW5rLCAiQ3Jl
YXRpbmcgWDExIHNoYXJlZCBFR0wgZGlzcGxheSIpOwotICAgICAgICAgICAgaWYgKHNob3VsZEFk
b3B0UmVmKQotICAgICAgICAgICAgICAgIHByaXYtPmdsRGlzcGxheSA9IGFkb3B0R1JlZihHU1Rf
R0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNh
c3Q8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKSk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcHJpdi0+Z2xEaXNwbGF5ID0gR1NUX0dM
X0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0
PFBsYXRmb3JtRGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSk7Ci0gICAg
ICAgIH0KLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXQVlMQU5EKQotICAgICAgICBp
ZiAoaXM8UGxhdGZvcm1EaXNwbGF5V2F5bGFuZD4oc2hhcmVkRGlzcGxheSkpIHsKLSAgICAgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2luaywgIkNyZWF0aW5nIFdheWxhbmQgc2hhcmVkIGRpc3Bs
YXkiKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRBZG9wdFJlZikKLSAgICAgICAgICAgICAgICBw
cml2LT5nbERpc3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlf
ZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVdheWxhbmQ+
KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBwcml2LT5nbERpc3BsYXkgPSBHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxh
eV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5V2F5bGFu
ZD4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSk7Ci0gICAgICAgIH0KLSNlbmRpZgotCi0j
aWYgVVNFKFdQRV9SRU5ERVJFUikKLSAgICAgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheUxpYldQ
RT4oc2hhcmVkRGlzcGxheSkpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2luaywg
IkNyZWF0aW5nIFdQRSBzaGFyZWQgRUdMIGRpc3BsYXkiKTsKLSAgICAgICAgICAgIGlmIChzaG91
bGRBZG9wdFJlZikKLSAgICAgICAgICAgICAgICBwcml2LT5nbERpc3BsYXkgPSBhZG9wdEdSZWYo
R1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRv
d25jYXN0PFBsYXRmb3JtRGlzcGxheUxpYldQRT4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgp
KSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByaXYtPmdsRGlzcGxheSA9
IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShk
b3duY2FzdDxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXko
KSkpOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBBU1NFUlQocHJpdi0+Z2xEaXNwbGF5
KTsKLSAgICB9Ci0KLSAgICBHTENvbnRleHQqIHNoYXJlZENvbnRleHQgPSBzaGFyZWREaXNwbGF5
LnNoYXJpbmdHTENvbnRleHQoKTsKLSAgICBpZiAoIXNoYXJlZENvbnRleHQpIHsKLSAgICAgICAg
R1NUX0VMRU1FTlRfRVJST1IoR1NUX0VMRU1FTlRfQ0FTVChzaW5rKSwgUkVTT1VSQ0UsIE5PVF9G
T1VORCwgKCgiV2ViS2l0IHNoYXJlZCBHTCBjb250ZXh0IHVuYXZhaWxhYmxlIikpLAotICAgICAg
ICAgICAgKCJUaGUgV2ViS2l0IHNoYXJlZCBHTCBjb250ZXh0IHNvbWVob3cgZGlzYXBwZWFyZWQu
IFZpZGVvIHRleHR1cmVzIHJlbmRlcmluZyB3aWxsIGZhaWwuIikpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gRUdMIGFuZCBHTFggYXJlIG11dHVhbGx5IGV4Y2x1c2l2
ZSwgbm8gbmVlZCBmb3IgaWZkZWZzIGhlcmUuCi0gICAgR3N0R0xQbGF0Zm9ybSBnbFBsYXRmb3Jt
ID0gc2hhcmVkQ29udGV4dC0+aXNFR0xDb250ZXh0KCkgPyBHU1RfR0xfUExBVEZPUk1fRUdMIDog
R1NUX0dMX1BMQVRGT1JNX0dMWDsKLQotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgR3N0R0xBUEkg
Z2xBUEkgPSBHU1RfR0xfQVBJX0dMRVMyOwotI2VsaWYgVVNFKE9QRU5HTCkKLSAgICBHc3RHTEFQ
SSBnbEFQSSA9IEdTVF9HTF9BUElfT1BFTkdMOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSNlbmRpZgotCi0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBjb250ZXh0SGFu
ZGxlID0gc2hhcmVkQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0
SGFuZGxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoc2hvdWxkQWRvcHRSZWYp
Ci0gICAgICAgIHByaXYtPmdsQ29udGV4dCA9IGFkb3B0R1JlZihnc3RfZ2xfY29udGV4dF9uZXdf
d3JhcHBlZChwcml2LT5nbERpc3BsYXkuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3VpbnRwdHI+
KGNvbnRleHRIYW5kbGUpLCBnbFBsYXRmb3JtLCBnbEFQSSkpOwotICAgIGVsc2UKLSAgICAgICAg
cHJpdi0+Z2xDb250ZXh0ID0gZ3N0X2dsX2NvbnRleHRfbmV3X3dyYXBwZWQocHJpdi0+Z2xEaXNw
bGF5LmdldCgpLCByZWludGVycHJldF9jYXN0PGd1aW50cHRyPihjb250ZXh0SGFuZGxlKSwgZ2xQ
bGF0Zm9ybSwgZ2xBUEkpOwotCi0gICAgLy8gQWN0aXZhdGUgYW5kIGZpbGwgdGhlIEdTdHJlYW1l
ciB3cmFwcGVkIGNvbnRleHQgd2l0aCB0aGUgV2Via2l0J3Mgc2hhcmVkIG9uZS4KLSAgICBhdXRv
KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKLSAgICBzaGFy
ZWRDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBpZiAoZ3N0X2dsX2NvbnRleHRf
YWN0aXZhdGUocHJpdi0+Z2xDb250ZXh0LmdldCgpLCBUUlVFKSkgewotICAgICAgICBHVW5pcXVl
T3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgIGlmICghZ3N0X2dsX2NvbnRleHRfZmlsbF9p
bmZvKHByaXYtPmdsQ29udGV4dC5nZXQoKSwgJmVycm9yLm91dFB0cigpKSkKLSAgICAgICAgICAg
IEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gZmlsbCBpbiBHU3RyZWFtZXIgY29udGV4dDogJXMiLCBl
cnJvci0+bWVzc2FnZSk7Ci0gICAgICAgIGdzdF9nbF9jb250ZXh0X2FjdGl2YXRlKHByaXYtPmds
Q29udGV4dC5nZXQoKSwgRkFMU0UpOwotICAgIH0gZWxzZQotICAgICAgICBHU1RfV0FSTklORygi
RmFpbGVkIHRvIGFjdGl2YXRlIEdTdHJlYW1lciBjb250ZXh0ICUiIEdTVF9QVFJfRk9STUFULCBw
cml2LT5nbENvbnRleHQuZ2V0KCkpOwotICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCi0g
ICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotR1JlZlB0cjxHc3RDb250ZXh0PiByZXF1ZXN0R0xDb250ZXh0
KFdlYktpdEdMVmlkZW9TaW5rKiBzaW5rLCBjb25zdCBjaGFyKiBjb250ZXh0VHlwZSkKLXsKLSAg
ICBXZWJLaXRHTFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5wcml2OwotICAgIGlmICgh
ZW5zdXJlR3N0R0xDb250ZXh0KHNpbmspKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBh
dXRvKiBnc3RHTERpc3BsYXkgPSBzaGFyZWREaXNwbGF5LmdzdEdMRGlzcGxheSgpOworICAgIGF1
dG8qIGdzdEdMQ29udGV4dCA9IHNoYXJlZERpc3BsYXkuZ3N0R0xDb250ZXh0KCk7CisgICAgQVNT
RVJUKGdzdEdMRGlzcGxheSAmJiBnc3RHTENvbnRleHQpOwogCiAgICAgaWYgKCFnX3N0cmNtcDAo
Y29udGV4dFR5cGUsIEdTVF9HTF9ESVNQTEFZX0NPTlRFWFRfVFlQRSkpIHsKICAgICAgICAgR3N0
Q29udGV4dCogZGlzcGxheUNvbnRleHQgPSBnc3RfY29udGV4dF9uZXcoR1NUX0dMX0RJU1BMQVlf
Q09OVEVYVF9UWVBFLCBUUlVFKTsKLSAgICAgICAgZ3N0X2NvbnRleHRfc2V0X2dsX2Rpc3BsYXko
ZGlzcGxheUNvbnRleHQsIHByaXYtPmdsRGlzcGxheS5nZXQoKSk7CisgICAgICAgIGdzdF9jb250
ZXh0X3NldF9nbF9kaXNwbGF5KGRpc3BsYXlDb250ZXh0LCBnc3RHTERpc3BsYXkpOwogICAgICAg
ICByZXR1cm4gYWRvcHRHUmVmKGRpc3BsYXlDb250ZXh0KTsKICAgICB9CiAKQEAgLTI1NCw5ICsx
MzQsOSBAQCBHUmVmUHRyPEdzdENvbnRleHQ+IHJlcXVlc3RHTENvbnRleHQoV2ViS2l0R0xWaWRl
b1NpbmsqIHNpbmssIGNvbnN0IGNoYXIqIGNvbnRleAogICAgICAgICBHc3RDb250ZXh0KiBhcHBD
b250ZXh0ID0gZ3N0X2NvbnRleHRfbmV3KCJnc3QuZ2wuYXBwX2NvbnRleHQiLCBUUlVFKTsKICAg
ICAgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfY29udGV4dF93cml0YWJsZV9zdHJ1
Y3R1cmUoYXBwQ29udGV4dCk7CiAjaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTIsIDApCi0gICAg
ICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHN0cnVjdHVyZSwgImNvbnRleHQiLCBHU1RfVFlQRV9HTF9D
T05URVhULCBwcml2LT5nbENvbnRleHQuZ2V0KCksIG51bGxwdHIpOworICAgICAgICBnc3Rfc3Ry
dWN0dXJlX3NldChzdHJ1Y3R1cmUsICJjb250ZXh0IiwgR1NUX1RZUEVfR0xfQ09OVEVYVCwgZ3N0
R0xDb250ZXh0LCBudWxscHRyKTsKICNlbHNlCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHN0
cnVjdHVyZSwgImNvbnRleHQiLCBHU1RfR0xfVFlQRV9DT05URVhULCBwcml2LT5nbENvbnRleHQu
Z2V0KCksIG51bGxwdHIpOworICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChzdHJ1Y3R1cmUsICJj
b250ZXh0IiwgR1NUX0dMX1RZUEVfQ09OVEVYVCwgZ3N0R0xDb250ZXh0LCBudWxscHRyKTsKICNl
bmRpZgogICAgICAgICByZXR1cm4gYWRvcHRHUmVmKGFwcENvbnRleHQpOwogICAgIH0KQEAgLTI3
OCwxMyArMTU4LDEzIEBAIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRHTFZpZGVv
U2lua0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzCiAgICAgY2FzZSBHU1RfU1RB
VEVfQ0hBTkdFX1JFQURZX1RPX1JFQURZOgogICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFE
WV9UT19QQVVTRUQ6IHsKICAgICAgICAgaWYgKCFwcml2LT5nbERpc3BsYXlFbGVtZW50Q29udGV4
dCkKLSAgICAgICAgICAgIHByaXYtPmdsRGlzcGxheUVsZW1lbnRDb250ZXh0ID0gcmVxdWVzdEdM
Q29udGV4dChzaW5rLCBHU1RfR0xfRElTUExBWV9DT05URVhUX1RZUEUpOworICAgICAgICAgICAg
cHJpdi0+Z2xEaXNwbGF5RWxlbWVudENvbnRleHQgPSByZXF1ZXN0R0xDb250ZXh0KEdTVF9HTF9E
SVNQTEFZX0NPTlRFWFRfVFlQRSk7CiAKICAgICAgICAgaWYgKHByaXYtPmdsRGlzcGxheUVsZW1l
bnRDb250ZXh0KQogICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1F
TlRfQ0FTVChzaW5rKSwgcHJpdi0+Z2xEaXNwbGF5RWxlbWVudENvbnRleHQuZ2V0KCkpOwogCiAg
ICAgICAgIGlmICghcHJpdi0+Z2xBcHBFbGVtZW50Q29udGV4dCkKLSAgICAgICAgICAgIHByaXYt
PmdsQXBwRWxlbWVudENvbnRleHQgPSByZXF1ZXN0R0xDb250ZXh0KHNpbmssICJnc3QuZ2wuYXBw
X2NvbnRleHQiKTsKKyAgICAgICAgICAgIHByaXYtPmdsQXBwRWxlbWVudENvbnRleHQgPSByZXF1
ZXN0R0xDb250ZXh0KCJnc3QuZ2wuYXBwX2NvbnRleHQiKTsKIAogICAgICAgICBpZiAocHJpdi0+
Z2xBcHBFbGVtZW50Q29udGV4dCkKICAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0
KEdTVF9FTEVNRU5UX0NBU1Qoc2luayksIHByaXYtPmdsQXBwRWxlbWVudENvbnRleHQuZ2V0KCkp
OwpAQCAtMzc2LDkgKzI1Niw3IEBAIHZvaWQgd2ViS2l0R0xWaWRlb1NpbmtTZXRNZWRpYVBsYXll
clByaXZhdGUoV2ViS2l0R0xWaWRlb1NpbmsqIHNpbmssIE1lZGlhUGxheWVyCiAKIGJvb2wgd2Vi
S2l0R0xWaWRlb1NpbmtQcm9iZVBsYXRmb3JtKCkKIHsKLSAgICBhdXRvJiBzaGFyZWREaXNwbGF5
ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKTsKLSAgICBH
TENvbnRleHQqIHNoYXJlZENvbnRleHQgPSBzaGFyZWREaXNwbGF5LnNoYXJpbmdHTENvbnRleHQo
KTsKLSAgICBpZiAoIXNoYXJlZENvbnRleHQpIHsKKyAgICBpZiAoIVBsYXRmb3JtRGlzcGxheTo6
c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuZ3N0R0xDb250ZXh0KCkpIHsKICAgICAgICAg
R1NUX1dBUk5JTkcoIldlYktpdCBzaGFyZWQgR0wgY29udGV4dCBpcyBub3QgYXZhaWxhYmxlLiIp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IDUyMWIyMGQxMWNjOGRkOTRiZTI4NGQ3NDY5OWNk
MjcxN2I0ZTA1NDUuLmFiZWI4NTdhN2ZkZTU0YTI3OWVmYzVkNTg4ZThkMzJjNjllZGYyYTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKQEAgLTgyLDgg
KzgyLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgX0dzdE1wZWd0c1NlY3Rpb24gR3N0TXBlZ3RzU2VjdGlv
bjsKIAogdHlwZWRlZiBzdHJ1Y3QgX0dzdFN0cmVhbVZvbHVtZSBHc3RTdHJlYW1Wb2x1bWU7CiB0
eXBlZGVmIHN0cnVjdCBfR3N0VmlkZW9JbmZvIEdzdFZpZGVvSW5mbzsKLXR5cGVkZWYgc3RydWN0
IF9Hc3RHTENvbnRleHQgR3N0R0xDb250ZXh0OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEdMRGlzcGxh
eSBHc3RHTERpc3BsYXk7CiAKICNpZiBVU0UoV1BFX1ZJREVPX1BMQU5FX0RJU1BMQVlfRE1BQlVG
KQogc3RydWN0IHdwZV92aWRlb19wbGFuZV9kaXNwbGF5X2RtYWJ1Zl9zb3VyY2U7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvUGxhdGZvcm1E
aXNwbGF5R1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9QbGF0Zm9ybURpc3BsYXlHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiMGMxODY4
NDA4YWYzNTg2MDU4OGRiMjJhZTYyMWU1Yzk4OWVkMmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvUGxhdGZvcm1EaXNwbGF5R1N0
cmVhbWVyLmNwcApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBJ
Z2FsaWEgUy5MCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
aW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtRGlzcGxheS5o
IgorCisjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisKKyNpZiBVU0UoR0xYKQorI2luY2x1
ZGUgIkdMQ29udGV4dEdMWC5oIgorI2luY2x1ZGUgPGdzdC9nbC94MTEvZ3N0Z2xkaXNwbGF5X3gx
MS5oPgorI2VuZGlmCisKKyNpZiBVU0UoRUdMKQorI2luY2x1ZGUgIkdMQ29udGV4dEVHTC5oIgor
I2luY2x1ZGUgPGdzdC9nbC9lZ2wvZ3N0Z2xkaXNwbGF5X2VnbC5oPgorI2VuZGlmCisKKyNpZiBQ
TEFURk9STShYMTEpCisjaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5WDExLmgiCisjZW5kaWYKKwor
I2lmIFBMQVRGT1JNKFdBWUxBTkQpCisjaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5V2F5bGFuZC5o
IgorI2VuZGlmCisKKyNpZiBVU0UoV1BFX1JFTkRFUkVSKQorI2luY2x1ZGUgIlBsYXRmb3JtRGlz
cGxheUxpYldQRS5oIgorI2VuZGlmCisKKyNkZWZpbmUgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNp
bmNsdWRlIDxnc3QvZ2wvZ2wuaD4KKyN1bmRlZiBHU1RfVVNFX1VOU1RBQkxFX0FQSQorCitHU1Rf
REVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtpdF9tZWRpYV9wbGF5ZXJfZGVidWcpOworI2RlZmlu
ZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X21lZGlhX3BsYXllcl9kZWJ1ZworCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworc3RhdGljIEdzdEdMRGlzcGxheSogY3JlYXRlR3N0R0xEaXNwbGF5
KGNvbnN0IFBsYXRmb3JtRGlzcGxheSYgc2hhcmVkRGlzcGxheSkKK3sKKyNpZiBVU0UoV1BFX1JF
TkRFUkVSKQorICAgIGlmIChpczxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJlZERpc3BsYXkp
KQorICAgICAgICByZXR1cm4gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193
aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheUxpYldQRT4oc2hhcmVkRGlz
cGxheSkuZWdsRGlzcGxheSgpKSk7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFgxMSkKKyNpZiBV
U0UoR0xYKQorICAgIGlmIChpczxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpKQor
ICAgICAgICByZXR1cm4gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfeDExX25ld193aXRo
X2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5uYXRp
dmUoKSkpOworI2VsaWYgVVNFKEVHTCkKKyAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5WDExPihz
aGFyZWREaXNwbGF5KSkKKyAgICAgICAgcmV0dXJuIEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNw
bGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9tRGlzcGxheVgxMT4o
c2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSk7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgUExB
VEZPUk0oV0FZTEFORCkKKyAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5V2F5bGFuZD4oc2hhcmVk
RGlzcGxheSkpCisgICAgICAgIHJldHVybiBHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9l
Z2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5V2F5bGFuZD4o
c2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSk7CisjZW5kaWYKKworICAgIHJldHVybiBudWxs
cHRyOworfQorCitib29sIFBsYXRmb3JtRGlzcGxheTo6dHJ5RW5zdXJlR3N0R0xDb250ZXh0KCkg
Y29uc3QKK3sKKyAgICBpZiAobV9nc3RHTERpc3BsYXkgJiYgbV9nc3RHTENvbnRleHQpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICBHc3RHTEFQSSBnbEFQ
SSA9IEdTVF9HTF9BUElfR0xFUzI7CisjZWxpZiBVU0UoT1BFTkdMKQorICAgIEdzdEdMQVBJIGds
QVBJID0gR1NUX0dMX0FQSV9PUEVOR0w7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRp
ZgorCisgICAgYXV0byogc2hhcmVkQ29udGV4dCA9IGNvbnN0X2Nhc3Q8UGxhdGZvcm1EaXNwbGF5
Kj4odGhpcyktPnNoYXJpbmdHTENvbnRleHQoKTsKKyAgICBpZiAoIXNoYXJlZENvbnRleHQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIGNvbnRl
eHRIYW5kbGUgPSBzaGFyZWRDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBpZiAoIWNv
bnRleHRIYW5kbGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgc2hvdWxkQWRv
cHRSZWYgPSB3ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwgMTQsIDApOworCisgICAgaWYgKHNob3Vs
ZEFkb3B0UmVmKQorICAgICAgICBtX2dzdEdMRGlzcGxheSA9IGFkb3B0R1JlZihjcmVhdGVHc3RH
TERpc3BsYXkoKnRoaXMpKTsKKyAgICBlbHNlCisgICAgICAgIG1fZ3N0R0xEaXNwbGF5ID0gY3Jl
YXRlR3N0R0xEaXNwbGF5KCp0aGlzKTsKKyAgICBpZiAoIW1fZ3N0R0xEaXNwbGF5KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBHc3RHTFBsYXRmb3JtIGdsUGxhdGZvcm0gPSBzaGFyZWRD
b250ZXh0LT5pc0VHTENvbnRleHQoKSA/IEdTVF9HTF9QTEFURk9STV9FR0wgOiBHU1RfR0xfUExB
VEZPUk1fR0xYOworCisgICAgaWYgKHNob3VsZEFkb3B0UmVmKQorICAgICAgICBtX2dzdEdMQ29u
dGV4dCA9IGFkb3B0R1JlZihnc3RfZ2xfY29udGV4dF9uZXdfd3JhcHBlZChtX2dzdEdMRGlzcGxh
eS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxndWludHB0cj4oY29udGV4dEhhbmRsZSksIGdsUGxh
dGZvcm0sIGdsQVBJKSk7CisgICAgZWxzZQorICAgICAgICBtX2dzdEdMQ29udGV4dCA9IGdzdF9n
bF9jb250ZXh0X25ld193cmFwcGVkKG1fZ3N0R0xEaXNwbGF5LmdldCgpLCByZWludGVycHJldF9j
YXN0PGd1aW50cHRyPihjb250ZXh0SGFuZGxlKSwgZ2xQbGF0Zm9ybSwgZ2xBUEkpOworCisgICAg
Ly8gQWN0aXZhdGUgYW5kIGZpbGwgdGhlIEdTdHJlYW1lciB3cmFwcGVkIGNvbnRleHQgd2l0aCB0
aGUgV2Via2l0J3Mgc2hhcmVkIG9uZS4KKyAgICBhdXRvKiBwcmV2aW91c0FjdGl2ZUNvbnRleHQg
PSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKKyAgICBzaGFyZWRDb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoZ3N0X2dsX2NvbnRleHRfYWN0aXZhdGUobV9nc3RHTENvbnRleHQu
Z2V0KCksIFRSVUUpKSB7CisgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAg
ICAgICAgaWYgKCFnc3RfZ2xfY29udGV4dF9maWxsX2luZm8obV9nc3RHTENvbnRleHQuZ2V0KCks
ICZlcnJvci5vdXRQdHIoKSkpCisgICAgICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIGZp
bGwgaW4gR1N0cmVhbWVyIGNvbnRleHQ6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgIH0gZWxz
ZQorICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIGFjdGl2YXRlIEdTdHJlYW1lciBjb250
ZXh0ICUiIEdTVF9QVFJfRk9STUFULCBtX2dzdEdMQ29udGV4dC5nZXQoKSk7CisgICAgaWYgKHBy
ZXZpb3VzQWN0aXZlQ29udGV4dCkKKyAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitHc3RHTERpc3BsYXkq
IFBsYXRmb3JtRGlzcGxheTo6Z3N0R0xEaXNwbGF5KCkgY29uc3QKK3sKKyAgICBpZiAoIXRyeUVu
c3VyZUdzdEdMQ29udGV4dCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
bV9nc3RHTERpc3BsYXkuZ2V0KCk7Cit9CisKK0dzdEdMQ29udGV4dCogUGxhdGZvcm1EaXNwbGF5
Ojpnc3RHTENvbnRleHQoKSBjb25zdAoreworICAgIGlmICghdHJ5RW5zdXJlR3N0R0xDb250ZXh0
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtX2dzdEdMQ29udGV4dC5n
ZXQoKTsKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>