<?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>118331</bug_id>
          
          <creation_ts>2013-07-02 15:45:06 -0700</creation_ts>
          <short_desc>Adding Nix files in Source/Platform to trunk</short_desc>
          <delta_ts>2013-10-29 16:02:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>117658</blocked>
    
    <blocked>118367</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Thiago de Barros Lacerda">thiago.lacerda</reporter>
          <assigned_to name="Hugo Parente Lima">hugo.lima</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>hugo.lima</cc>
    
    <cc>jer.noble</cc>
    
    <cc>lauro.neto</cc>
    
    <cc>marcelo.lira</cc>
    
    <cc>nick.diego</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>905607</commentid>
    <comment_count>0</comment_count>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-07-02 15:45:06 -0700</bug_when>
    <thetext>All Nix related files that are located under Source/Platform are being added, without any cmake files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>905613</commentid>
    <comment_count>1</comment_count>
      <attachid>205952</attachid>
    <who name="Thiago de Barros Lacerda">thiago.lacerda</who>
    <bug_when>2013-07-02 15:49:01 -0700</bug_when>
    <thetext>Created attachment 205952
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>905948</commentid>
    <comment_count>2</comment_count>
      <attachid>206015</attachid>
    <who name="Marcelo Lira">marcelo.lira</who>
    <bug_when>2013-07-03 11:54:56 -0700</bug_when>
    <thetext>Created attachment 206015
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>905949</commentid>
    <comment_count>3</comment_count>
      <attachid>206016</attachid>
    <who name="Marcelo Lira">marcelo.lira</who>
    <bug_when>2013-07-03 11:56:52 -0700</bug_when>
    <thetext>Created attachment 206016
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926777</commentid>
    <comment_count>4</comment_count>
    <who name="Hugo Parente Lima">hugo.lima</who>
    <bug_when>2013-09-09 10:34:12 -0700</bug_when>
    <thetext>This patch is out dated, I&apos;m going to rebase/update it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926833</commentid>
    <comment_count>5</comment_count>
      <attachid>211064</attachid>
    <who name="Hugo Parente Lima">hugo.lima</who>
    <bug_when>2013-09-09 12:16:34 -0700</bug_when>
    <thetext>Created attachment 211064
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927339</commentid>
    <comment_count>6</comment_count>
      <attachid>211064</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-09-10 09:46:42 -0700</bug_when>
    <thetext>Comment on attachment 211064
Patch

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

&gt; Source/Platform/nix/public/Vector.h:187
&gt; +/*
&gt; + * Copyright (C) 2009 Google Inc. All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions are
&gt; + * met:
&gt; + *
&gt; + *     * Redistributions of source code must retain the above copyright
&gt; + * notice, this list of conditions and the following disclaimer.
&gt; + *     * Redistributions in binary form must reproduce the above
&gt; + * copyright notice, this list of conditions and the following disclaimer
&gt; + * in the documentation and/or other materials provided with the
&gt; + * distribution.
&gt; + *     * Neither the name of Google Inc. nor the names of its
&gt; + * contributors may be used to endorse or promote products derived from
&gt; + * this software without specific prior written permission.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
&gt; + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
&gt; + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
&gt; + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
&gt; + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
&gt; + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
&gt; + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
&gt; + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
&gt; + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
&gt; + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +
&gt; +#ifndef Nix_Vector_h
&gt; +#define Nix_Vector_h
&gt; +
&gt; +#include &quot;Common.h&quot;
&gt; +
&gt; +#include &lt;algorithm&gt;
&gt; +#include &lt;cassert&gt;
&gt; +
&gt; +namespace Nix {
&gt; +
&gt; +// A simple vector class.
&gt; +//
&gt; +// Sample usage:
&gt; +//
&gt; +//   void Foo(WebVector&lt;int&gt;&amp; result)
&gt; +//   {
&gt; +//       WebVector&lt;int&gt; data(10);
&gt; +//       for (size_t i = 0; i &lt; data.size(); ++i)
&gt; +//           data[i] = ...
&gt; +//       result.swap(data);
&gt; +//   }
&gt; +//
&gt; +// It is also possible to assign from other types of random access
&gt; +// containers:
&gt; +//
&gt; +//   void Foo(const std::vector&lt;std::string&gt;&amp; input)
&gt; +//   {
&gt; +//       WebVector&lt;WebCString&gt; cstrings = input;
&gt; +//       ...
&gt; +//   }
&gt; +//
&gt; +template &lt;typename T&gt;
&gt; +class Vector {
&gt; +public:
&gt; +    typedef T ValueType;
&gt; +
&gt; +    ~Vector()
&gt; +    {
&gt; +        destroy();
&gt; +    }
&gt; +
&gt; +    explicit Vector(size_t size = 0)
&gt; +    {
&gt; +        initialize(size);
&gt; +    }
&gt; +
&gt; +    Vector(const Vector&lt;T&gt;&amp; other)
&gt; +    {
&gt; +        initializeFrom(other.m_ptr, other.m_size);
&gt; +    }
&gt; +
&gt; +    template &lt;typename C&gt;
&gt; +    Vector(const C&amp; other)
&gt; +    {
&gt; +        initializeFrom(other.size() ? &amp;other[0] : 0, other.size());
&gt; +    }
&gt; +
&gt; +    Vector&amp; operator=(const Vector&amp; other)
&gt; +    {
&gt; +        if (this != &amp;other)
&gt; +            assign(other);
&gt; +        return *this;
&gt; +    }
&gt; +
&gt; +    template &lt;typename C&gt;
&gt; +    Vector&lt;T&gt;&amp; operator=(const C&amp; other)
&gt; +    {
&gt; +        if (this != reinterpret_cast&lt;const Vector&lt;T&gt;*&gt;(&amp;other))
&gt; +            assign(other);
&gt; +        return *this;
&gt; +    }
&gt; +
&gt; +    template &lt;typename C&gt;
&gt; +    void assign(const C&amp; other)
&gt; +    {
&gt; +        assign(other.size() ? &amp;other[0] : 0, other.size());
&gt; +    }
&gt; +
&gt; +    template &lt;typename U&gt;
&gt; +    void assign(const U* values, size_t size)
&gt; +    {
&gt; +        destroy();
&gt; +        initializeFrom(values, size);
&gt; +    }
&gt; +
&gt; +    size_t size() const { return m_size; }
&gt; +    bool isEmpty() const { return !m_size; }
&gt; +
&gt; +    T&amp; operator[](size_t i)
&gt; +    {
&gt; +        assert(i &lt; m_size);
&gt; +        return m_ptr[i];
&gt; +    }
&gt; +    const T&amp; operator[](size_t i) const
&gt; +    {
&gt; +        assert(i &lt; m_size);
&gt; +        return m_ptr[i];
&gt; +    }
&gt; +
&gt; +    bool contains(const T&amp; value) const
&gt; +    {
&gt; +        for (size_t i = 0; i &lt; m_size; i++) {
&gt; +            if (m_ptr[i] == value)
&gt; +                return true;
&gt; +        }
&gt; +        return false;
&gt; +    }
&gt; +
&gt; +    T* data() { return m_ptr; }
&gt; +    const T* data() const { return m_ptr; }
&gt; +
&gt; +    void swap(Vector&lt;T&gt;&amp; other)
&gt; +    {
&gt; +        std::swap(m_ptr, other.m_ptr);
&gt; +        std::swap(m_size, other.m_size);
&gt; +    }
&gt; +
&gt; +private:
&gt; +    void initialize(size_t size)
&gt; +    {
&gt; +        m_size = size;
&gt; +        if (!m_size)
&gt; +            m_ptr = 0;
&gt; +        else {
&gt; +            m_ptr = static_cast&lt;T*&gt;(::operator new(sizeof(T) * m_size));
&gt; +            for (size_t i = 0; i &lt; m_size; ++i)
&gt; +                new (&amp;m_ptr[i]) T();
&gt; +        }
&gt; +    }
&gt; +
&gt; +    template &lt;typename U&gt;
&gt; +    void initializeFrom(const U* values, size_t size)
&gt; +    {
&gt; +        m_size = size;
&gt; +        if (!m_size)
&gt; +            m_ptr = 0;
&gt; +        else {
&gt; +            m_ptr = static_cast&lt;T*&gt;(::operator new(sizeof(T) * m_size));
&gt; +            for (size_t i = 0; i &lt; m_size; ++i)
&gt; +                new (&amp;m_ptr[i]) T(values[i]);
&gt; +        }
&gt; +    }
&gt; +
&gt; +    void destroy()
&gt; +    {
&gt; +        for (size_t i = 0; i &lt; m_size; ++i)
&gt; +            m_ptr[i].~T();
&gt; +        ::operator delete(m_ptr);
&gt; +    }
&gt; +
&gt; +    T* m_ptr;
&gt; +    size_t m_size;
&gt; +};
&gt; +
&gt; +} // namespace Nix
&gt; +
&gt; +#endif

What&apos;s this? We don&apos;t need another Vector class with the same header file name as Vector.h from WTF.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927368</commentid>
    <comment_count>7</comment_count>
    <who name="Hugo Parente Lima">hugo.lima</who>
    <bug_when>2013-09-10 10:17:59 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 211064 [details])
&gt; [...]
&gt; What&apos;s this? We don&apos;t need another Vector class with the same header file name as Vector.h from WTF.

Hi,

This vector class is part of the Nix::Platform API, this API is used to let the applications implement the backends usually found inside WebCore on other ports, i.e. Nix doesn&apos;t have a WebAudio implementation, the application using Nix must provide one.

So, the Vector.h is used by the application using Nix when using some Nix::Platform API methods, it was there because we can&apos;t export WTF to the API. You could imagine it as our QVector if we were the Qt port.

Now things that can be improved:

The current implementation was written by Chromium guys on WebKit-Chromium era, we may do two things about it:

 - Write it as a thin wrapper around WTF::Vector to avoid having yet another implementation of a Vector.
 - Use std::vector, however the decision of using std types on our API wasn&apos;t concluded yet.

Has some time since I touched these files, I&apos;ll check the code using this Vector class to see how it&apos;s used and what can be done to simplify the things up, then and post here, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927403</commentid>
    <comment_count>8</comment_count>
    <who name="Hugo Parente Lima">hugo.lima</who>
    <bug_when>2013-09-10 11:58:14 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; Now things that can be improved:
&gt; 
&gt; The current implementation was written by Chromium guys on WebKit-Chromium era, we may do two things about it:
&gt; 
&gt;  - Write it as a thin wrapper around WTF::Vector to avoid having yet another implementation of a Vector.
&gt;  - Use std::vector, however the decision of using std types on our API wasn&apos;t concluded yet.
&gt; 
&gt; Has some time since I touched these files, I&apos;ll check the code using this Vector class to see how it&apos;s used and what can be done to simplify the things up, then and post here, thanks.

I took a look at the code using Nix::Vector, there are no good reasons to create yet another Vector class, in other words, I&apos;m going to update it to use std::vector instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927408</commentid>
    <comment_count>9</comment_count>
      <attachid>211220</attachid>
    <who name="Hugo Parente Lima">hugo.lima</who>
    <bug_when>2013-09-10 12:08:48 -0700</bug_when>
    <thetext>Created attachment 211220
Patch

Using std::vector on public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>934091</commentid>
    <comment_count>10</comment_count>
      <attachid>211220</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-09-27 14:29:44 -0700</bug_when>
    <thetext>Comment on attachment 211220
Patch

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

&gt; Source/Platform/nix/public/AudioBus.h:2
&gt; + * Copyright (C) 2010, Google Inc. All rights reserved.

Is this correct?

&gt; Source/Platform/nix/public/AudioBus.h:57
&gt; +    // initialize() allocates memory of the given length for the given number of channels.
&gt; +    NIX_EXPORT void initialize(unsigned numberOfChannels, size_t length, double sampleRate);
&gt; +
&gt; +    // resizeSmaller() can only be called after initialize() with a new length &lt;= the initialization length.
&gt; +    // The data stored in the bus will remain undisturbed.
&gt; +    NIX_EXPORT void resizeSmaller(size_t newLength);
&gt; +
&gt; +    // reset() releases the memory allocated from initialize().
&gt; +    NIX_EXPORT void reset();

The names are not great. The fast that you need comments indicates that.
    resizeSmaller -&gt; shrink

Maybe you should design your API in a way that does not impose calling certain methods in a certain order.

&gt; Source/Platform/nix/public/AudioBus.h:74
&gt; +    AudioBusPrivate* m_d;

This is an awful name.

&gt; Source/Platform/nix/public/AudioDevice.h:2
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.

Correct?

&gt; Source/Platform/nix/public/AudioDevice.h:44
&gt; +        virtual void render(const std::vector&lt;float*&gt;&amp; /*sourceData*/, const std::vector&lt;float*&gt;&amp; /*destinationData*/, size_t /*numberOfFrames*/) { }
&gt; +
&gt; +    protected:
&gt; +        virtual ~RenderCallback() { }

Why not make those pure virtual?

&gt; Source/Platform/nix/public/Color.h:43
&gt; +    RGBA32 rgba;

probably best encapsulate this? If only for debugging?

You could also make Color immutable, which would make design easier.

&gt; Source/Platform/nix/public/Color.h:56
&gt; +    Color(int r, int g, int b, int a = 255)
&gt; +        : rgba(std::max(0, std::min(a, 255)) &lt;&lt; 24 | std::max(0, std::min(r, 255)) &lt;&lt; 16 | std::max(0, std::min(g, 255)) &lt;&lt; 8 | std::max(0, std::min(b, 255)))

int -&gt; unsigned char?

&quot;std::max(0, std::min(a, 255)&quot; should be in a utility function.

&gt; Source/Platform/nix/public/Data.h:2
&gt; + * Copyright (C) 2009 Google Inc. All rights reserved.

Uh?

&gt; Source/Platform/nix/public/Data.h:45
&gt; +// WARNING: It is not safe to pass a Nix::Data across threads!!!

Typically, ADT are defined the other way around. Nothing is thread safe by default, and you document when something is safe.

&gt; Source/Platform/nix/public/Data.h:63
&gt; +    template &lt;int N&gt;
&gt; +    Data(const char (&amp;data)[N]) : m_private(0)
&gt; +    {
&gt; +        assign(data, N - 1);
&gt; +    }
&gt; +

This is odd. It means you expect data buffers to be zero terminated.
The type is also char and not unsigned char.

Is Data a bastardized StringImpl or a raw buffer?

&gt; Source/Platform/nix/public/Data.h:72
&gt; +    NIX_EXPORT void reset();

reset() on a buffer? You mean clear()?

&gt; Source/Platform/nix/public/Data.h:74
&gt; +    NIX_EXPORT void assign(const Data&amp;);
&gt; +    NIX_EXPORT void assign(const char* data, size_t);

Those two are odd. How do they differ from C++&apos;s operator=?

&gt; Source/Platform/nix/public/FFTFrame.h:48
&gt; +    virtual void doFFT(const float*) { }
&gt; +    virtual void doInverseFFT(float*) { }
&gt; +    virtual void multiply(const FFTFrame&amp;) { }
&gt; +
&gt; +    virtual unsigned frequencyDomainSampleCount() const { return 0; }
&gt; +    // After multiplication and transform operations, the data is scaled
&gt; +    // to take in account the scale used internally in WebKit, originally
&gt; +    // from Mac&apos;s vecLib.
&gt; +    // After multiplication: Planar data is scaled by 0.5.
&gt; +    // After direct transform: Planar data is scaled by 2.0.
&gt; +    // After inverse transform: Time domain data is scaled by 1.0/(2* FFT size).
&gt; +    virtual float* realData() const { return 0; }
&gt; +    virtual float* imagData() const { return 0; }

Wouldn&apos;t it make more sense to have those pure virtual?

&gt; Source/Platform/nix/public/Gamepad.h:1
&gt; +// Copyright (C) 2011, Google Inc. All rights reserved.

Uh?

The whole copyright is also not following the usual style.

&gt; Source/Platform/nix/public/Gamepad.h:54
&gt; +    unsigned long long timestamp;

long sucks :)

uint64_t or double? :)

&gt; Source/Platform/nix/public/Gamepads.h:1
&gt; +// Copyright (C) 2011, Google Inc. All rights reserved.

Style + your own copyright.

&gt; Source/Platform/nix/public/Gamepads.h:34
&gt; +        : length(0) { }

mixed style.

&gt; Source/Platform/nix/public/Platform.h:2
&gt; + * Copyright (C) 2012 Google Inc. All rights reserved.

uh

&gt; Source/Platform/nix/public/Platform.h:65
&gt; +    // FFTFrame

no &quot;-------------------------------------------------------------&quot;?

&gt; Source/Platform/nix/public/Rect.h:2
&gt; +#ifndef Nix_Rect_h
&gt; +#define Nix_Rect_h

No copyright?

&gt; Source/Platform/nix/public/Size.h:2
&gt; + * Copyright (C) 2009 Google Inc. All rights reserved.

Uh

&gt; Source/Platform/nix/public/ThemeEngine.h:2
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.

Uh?

&gt; Source/Platform/nix/src/DefaultWebThemeEngine.cpp:43
&gt; +const double BGColor1 = 0xF6 / 256.0;
&gt; +const double BGColor2 = 0xDE / 256.0;
&gt; +const double BorderColor = 0xA4 / 256.0;
&gt; +const double BorderOnHoverColor = 0x7A / 256.0;
&gt; +const double CheckColor = 0x66 / 256.0;
&gt; +const double TextFieldDarkBorderColor = 0x9A / 256.0;
&gt; +const double TextFieldLightBorderColor = 0xEE / 256.0;

Dividing colors by 256??? Not 255?

&gt; Source/Platform/nix/src/DefaultWebThemeEngine.h:1
&gt; +#ifndef DefaultWebThemeEngine_h

No copyright for this file?

&gt; Source/Platform/nix/src/DefaultWebThemeEngine.h:8
&gt; +class DefaultWebThemeEngine : public ThemeEngine {

Missing override everywhere.
Shouldn&apos;t this class be final?

&gt; Source/Platform/nix/src/Platform.cpp:48
&gt; +static WTF::OwnPtr&lt;EmptyPlatform&gt; s_emptyPlatform = WTF::adoptPtr(new EmptyPlatform());
&gt; +
&gt; +static Platform* s_platform = s_emptyPlatform.get();

Not NeverDestroyed?

&gt; Source/WebCore/platform/audio/nix/AudioBusNix.cpp:2
&gt; + * Copyright (C) 2010, Google Inc. All rights reserved.

Uh?

&gt; Source/WebCore/platform/audio/nix/AudioBusNix.cpp:56
&gt; +    // FIXME: the sampleRate parameter is ignored. It should be removed from the API.

What about doing that now?

&gt; Source/WebCore/platform/audio/nix/AudioBusNix.cpp:71
&gt; +    // FIXME: the sampleRate parameter is ignored. It should be removed from the API.

ditto.

&gt; Source/WebCore/platform/audio/nix/AudioDestinationNix.cpp:2
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.

Uh?

&gt; Source/WebCore/platform/audio/nix/AudioDestinationNix.h:2
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.

uh?

&gt; Source/WebCore/platform/audio/nix/AudioDestinationNix.h:44
&gt; +// An AudioDestination using Chromium&apos;s audio system

?

&gt; Source/WebCore/platform/audio/nix/AudioDestinationNix.h:46
&gt; +class AudioDestinationNix : public AudioDestination, public Nix::AudioDevice::RenderCallback, public AudioSourceProvider {

Missing override in the implementation.

&gt; Source/WebCore/platform/audio/nix/FFTFrameNix.cpp:2
&gt; + * Copyright (C) 2013-2013 Nokia Corporation and/or its subsidiary(-ies).

2013-2013? :)

&gt; Source/WebCore/platform/nix/support/AudioBusNix.cpp:2
&gt; + * Copyright (C) 2010, Google Inc. All rights reserved.

Uh?

&gt; Source/WebCore/platform/nix/support/AudioBusNix.cpp:58
&gt; +    if (m_d)
&gt; +        delete m_d;
&gt; +    m_d = new AudioBusPrivate(WebCore::AudioBus::create(numberOfChannels, length));

This looks awful. Why not used STL&apos;s smart pointers?

&gt; Tools/Scripts/webkitpy/style/checker.py:197
&gt; +      # name clash with other files, e.g. Canvas_h, Vector_h, etc.

Vector_h?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940842</commentid>
    <comment_count>11</comment_count>
    <who name="Hugo Parente Lima">hugo.lima</who>
    <bug_when>2013-10-17 10:58:47 -0700</bug_when>
    <thetext>Thanks for the review and sorry for the delay. Most of the (bizarre) things pointed by you were already fixed, but I&apos;ll wait a bit to send a new version of this patch, I&apos;m going to do it when I get time to put some love on this WebAudio Platform API that nowadays is a blind copy of the one used by Chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943669</commentid>
    <comment_count>12</comment_count>
      <attachid>215193</attachid>
    <who name="Hugo Parente Lima">hugo.lima</who>
    <bug_when>2013-10-25 11:12:11 -0700</bug_when>
    <thetext>Created attachment 215193
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944593</commentid>
    <comment_count>13</comment_count>
      <attachid>215422</attachid>
    <who name="Hugo Parente Lima">hugo.lima</who>
    <bug_when>2013-10-29 13:59:58 -0700</bug_when>
    <thetext>Created attachment 215422
Patch

Removed a FIXME and some useless copy ctors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944596</commentid>
    <comment_count>14</comment_count>
      <attachid>215193</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-10-29 14:01:31 -0700</bug_when>
    <thetext>Comment on attachment 215193
Patch

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

&gt; Source/Platform/nix/public/Color.h:54
&gt; +        : m_argb(fixValue(a) &lt;&lt; 24 | fixValue(r) &lt;&lt; 16 | fixValue(g) &lt;&lt; 8 | fixValue(b))

I think the function name fixValue() is not good.

&gt; Source/Platform/nix/public/Common.h:29
&gt; +// Exported symbols need to be annotated with NIX_EXPORT

Missing period.
This comment does not really add much.

&gt; Source/Platform/nix/public/Gamepads.h:46
&gt; +    unsigned length;
&gt; +
&gt; +    // Gamepad data for N separate gamepad devices.
&gt; +    Gamepad items[itemsLengthCap];

No need to enforce object consistency through encapsulation here?

&gt; Source/Platform/nix/public/MediaPlayer.h:54
&gt; +    MediaPlayer(MediaPlayerClient* client)
&gt; +        : m_playerClient(client)
&gt; +    {
&gt; +    }
&gt; +
&gt; +    virtual ~MediaPlayer()
&gt; +    {
&gt; +        delete m_playerClient;

The object ownership is awful here. You should take advantage of smart pointers.

&gt; Source/Platform/nix/public/MultiChannelPCMData.h:54
&gt; +    void* m_data;

I think this class could benefit from a better design. The ownership of m_data is odd.

&gt; Source/Platform/nix/src/DefaultWebThemeEngine.cpp:276
&gt; +// These values have been copied from RenderThemeChromiumSkia.cpp

Period.

&gt; Source/Platform/nix/src/DefaultWebThemeEngine.cpp:288
&gt; +    return progressAnimationInterval * progressAnimationFrames * 2; // &quot;2&quot; for back and forth;

Remove the tail semicolon, add a period.

&gt; Source/Platform/nix/src/DefaultWebThemeEngine.cpp:335
&gt; +    // Background

Period.

&gt; Source/Platform/nix/src/DefaultWebThemeEngine.cpp:339
&gt; +    // Meter

Period.

&gt; Source/WebCore/platform/audio/nix/AudioBusNix.cpp:55
&gt; +    FILE* file = fopen(absoluteFilename.utf8().data(), &quot;rb&quot;);

You should not necessarily encode to utf8, but to the filesystem encoding.

On Mac there are methods to do the conversion. I cannot think of an easy way on Linux.

&gt; Source/WebCore/platform/audio/nix/AudioBusNix.cpp:62
&gt; +    fseek(file, 0, SEEK_END);
&gt; +    WTF::Vector&lt;char&gt; fileContents;
&gt; +    fileContents.resize(ftell(file));
&gt; +    rewind(file);

This seems like a bad idea. Shouldn&apos;t you get the file size from the inode instead?

&gt; Source/WebCore/platform/audio/nix/AudioDestinationNix.h:54
&gt; +    virtual bool isPlaying() OVERRIDE { return m_isPlaying; }
&gt; +
&gt; +    virtual float sampleRate() const OVERRIDE { return m_sampleRate; }

I am not a fan of putting virtual function&apos;s implementation in header files.

&gt; Source/WebCore/platform/audio/nix/FFTFrameNix.cpp:58
&gt; +FFTFrame::~FFTFrame()
&gt; +{
&gt; +}

You don&apos;t need this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944637</commentid>
    <comment_count>15</comment_count>
      <attachid>215435</attachid>
    <who name="Hugo Parente Lima">hugo.lima</who>
    <bug_when>2013-10-29 15:08:32 -0700</bug_when>
    <thetext>Created attachment 215435
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944642</commentid>
    <comment_count>16</comment_count>
    <who name="Hugo Parente Lima">hugo.lima</who>
    <bug_when>2013-10-29 15:17:38 -0700</bug_when>
    <thetext>Thanks very much for the review!

(In reply to comment #14)
&gt; (From update of attachment 215193 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=215193&amp;action=review
&gt; 
&gt; &gt; Source/Platform/nix/public/Color.h:54
&gt; &gt; +        : m_argb(fixValue(a) &lt;&lt; 24 | fixValue(r) &lt;&lt; 16 | fixValue(g) &lt;&lt; 8 | fixValue(b))
&gt; 
&gt; I think the function name fixValue() is not good.

boundValue :-)
 
&gt; &gt; Source/Platform/nix/public/Common.h:29
&gt; &gt; +// Exported symbols need to be annotated with NIX_EXPORT
&gt; 
&gt; Missing period.
&gt; This comment does not really add much.

Comment removed.
 
&gt; &gt; Source/Platform/nix/public/Gamepads.h:46
&gt; &gt; +    unsigned length;
&gt; &gt; +
&gt; &gt; +    // Gamepad data for N separate gamepad devices.
&gt; &gt; +    Gamepad items[itemsLengthCap];
&gt; 
&gt; No need to enforce object consistency through encapsulation here?

You are right, but we don&apos;t plan to touch much on this gamepad API/code, the gamepad code on WebKit itself has some odd stuff like the fixed value of gamepads, using long long instead of uint64, etc. i.e. it&apos;s not worth to spend time on it right now.
 
&gt; &gt; Source/Platform/nix/public/MediaPlayer.h:54
&gt; &gt; +    MediaPlayer(MediaPlayerClient* client)
&gt; &gt; +        : m_playerClient(client)
&gt; &gt; +    {
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    virtual ~MediaPlayer()
&gt; &gt; +    {
&gt; &gt; +        delete m_playerClient;
&gt; 
&gt; The object ownership is awful here. You should take advantage of smart pointers.

done.
 
&gt; &gt; Source/Platform/nix/public/MultiChannelPCMData.h:54
&gt; &gt; +    void* m_data;
&gt; 
&gt; I think this class could benefit from a better design. The ownership of m_data is odd.
&gt; 
&gt; &gt; Source/Platform/nix/src/DefaultWebThemeEngine.cpp:276
&gt; &gt; +// These values have been copied from RenderThemeChromiumSkia.cpp
&gt; 
&gt; Period.

done.
 
&gt; &gt; Source/Platform/nix/src/DefaultWebThemeEngine.cpp:288
&gt; &gt; +    return progressAnimationInterval * progressAnimationFrames * 2; // &quot;2&quot; for back and forth;
&gt; 
&gt; Remove the tail semicolon, add a period.

done.
 
&gt; &gt; Source/Platform/nix/src/DefaultWebThemeEngine.cpp:335
&gt; &gt; +    // Background
&gt; 
&gt; Period.

done.
 
&gt; &gt; Source/Platform/nix/src/DefaultWebThemeEngine.cpp:339
&gt; &gt; +    // Meter
&gt; 
&gt; Period.

done.
 
&gt; &gt; Source/WebCore/platform/audio/nix/AudioBusNix.cpp:55
&gt; &gt; +    FILE* file = fopen(absoluteFilename.utf8().data(), &quot;rb&quot;);
&gt; 
&gt; You should not necessarily encode to utf8, but to the filesystem encoding.
&gt; 
&gt; On Mac there are methods to do the conversion. I cannot think of an easy way on Linux.

I put a FIXME just as a reminder, but the file names handled here comes from WebKit itself and I don&apos;t believe WebKit has resource files in their codebase with encodings different from ascii.
 
&gt; &gt; Source/WebCore/platform/audio/nix/AudioBusNix.cpp:62
&gt; &gt; +    fseek(file, 0, SEEK_END);
&gt; &gt; +    WTF::Vector&lt;char&gt; fileContents;
&gt; &gt; +    fileContents.resize(ftell(file));
&gt; &gt; +    rewind(file);
&gt; 
&gt; This seems like a bad idea. Shouldn&apos;t you get the file size from the inode instead?

done.
 
&gt; &gt; Source/WebCore/platform/audio/nix/AudioDestinationNix.h:54
&gt; &gt; +    virtual bool isPlaying() OVERRIDE { return m_isPlaying; }
&gt; &gt; +
&gt; &gt; +    virtual float sampleRate() const OVERRIDE { return m_sampleRate; }
&gt; 
&gt; I am not a fan of putting virtual function&apos;s implementation in header files.
&gt; 
&gt; &gt; Source/WebCore/platform/audio/nix/FFTFrameNix.cpp:58
&gt; &gt; +FFTFrame::~FFTFrame()
&gt; &gt; +{
&gt; &gt; +}
&gt; 
&gt; You don&apos;t need this.

The destructor is declared on FFTFrame.h, a file shared by all ports with a different implementation for each port, so if I don&apos;t define it I&apos;ll get a linker error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944657</commentid>
    <comment_count>17</comment_count>
      <attachid>215435</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-29 16:02:09 -0700</bug_when>
    <thetext>Comment on attachment 215435
Patch

Clearing flags on attachment: 215435

Committed r158235: &lt;http://trac.webkit.org/changeset/158235&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944659</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-29 16:02:13 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>205952</attachid>
            <date>2013-07-02 15:49:01 -0700</date>
            <delta_ts>2013-07-03 11:54:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118331-20130702194655.patch</filename>
            <type>text/plain</type>
            <size>72059</size>
            <attacher name="Thiago de Barros Lacerda">thiago.lacerda</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUyMjk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBlY2I4NTg4N2RmMjc4
ZWEwOGU4ODM1ZjBlYjI4MTJkMmExZTE3MzNkLi4wNzdhMzFkMmYzOTQ1MjVhN2JiNzExOTJmNjA1
MWI3MzNkN2NhOThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTcgQEAKKzIwMTMtMDctMDIg
IFRoaWFnbyBkZSBCYXJyb3MgTGFjZXJkYSAgPHRoaWFnby5sYWNlcmRhQG9wZW5ib3NzYS5vcmc+
CisKKyAgICAgICAgQWRkaW5nIE5peCBmaWxlcyBpbiBTb3VyY2UvUGxhdGZvcm0gdG8gdHJ1bmsK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODMzMQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogbml4L3B1
YmxpYy9QbGF0Zm9ybS5oOiBBZGRlZC4KKyAgICAgICAgKiBuaXgvcHVibGljL1dlYkF1ZGlvQnVz
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJBdWRpb0J1czo6V2ViQXVkaW9CdXMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJBdWRpb0J1czo6fldlYkF1ZGlvQnVzKToKKyAgICAgICAgKiBu
aXgvcHVibGljL1dlYkF1ZGlvRGV2aWNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJB
dWRpb0RldmljZTo6UmVuZGVyQ2FsbGJhY2s6OnJlbmRlcik6CisgICAgICAgIChXZWJLaXQ6Oldl
YkF1ZGlvRGV2aWNlOjpSZW5kZXJDYWxsYmFjazo6flJlbmRlckNhbGxiYWNrKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQXVkaW9EZXZpY2U6On5XZWJBdWRpb0RldmljZSk6CisgICAgICAgICogbml4
L3B1YmxpYy9XZWJDYW52YXMuaDogQWRkZWQuCisgICAgICAgICogbml4L3B1YmxpYy9XZWJDb2xv
ci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29sb3I6OldlYkNvbG9yKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29sb3I6Om9wZXJhdG9yIFJHQkEzMik6CisgICAgICAgIChXZWJLaXQ6
OldlYkNvbG9yOjpyKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29sb3I6OmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb2xvcjo6Yik6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbG9yOjphKToKKyAg
ICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yIT0p
OgorICAgICAgICAqIG5peC9wdWJsaWMvV2ViQ29tbW9uLmg6IEFkZGVkLgorICAgICAgICAqIG5p
eC9wdWJsaWMvV2ViRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YTo6fldl
YkRhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJEYXRhOjpXZWJEYXRhKToKKyAgICAgICAgKFdl
YktpdDo6V2ViRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YTo6aXNF
bXB0eSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGE6OmlzTnVsbCk6CisgICAgICAgICogbml4
L3B1YmxpYy9XZWJGRlRGcmFtZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViRkZURnJh
bWU6On5XZWJGRlRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZGVEZyYW1lOjpkb0ZGVCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkZGVEZyYW1lOjpkb0ludmVyc2VGRlQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJGRlRGcmFtZTo6bXVsdGlwbHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJGRlRG
cmFtZTo6ZnJlcXVlbmN5RG9tYWluU2FtcGxlQ291bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJG
RlRGcmFtZTo6cmVhbERhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJGRlRGcmFtZTo6aW1hZ0Rh
dGEpOgorICAgICAgICAqIG5peC9wdWJsaWMvV2ViR2FtZXBhZC5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViR2FtZXBhZDo6V2ViR2FtZXBhZCk6CisgICAgICAgICogbml4L3B1YmxpYy9X
ZWJHYW1lcGFkcy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViR2FtZXBhZHM6OldlYkdh
bWVwYWRzKToKKyAgICAgICAgKiBuaXgvcHVibGljL1dlYlJlY3QuaDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYlJlY3Q6OldlYlJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZWN0Ojpv
cGVyYXRvcj0pOgorICAgICAgICAqIG5peC9wdWJsaWMvV2ViU2l6ZS5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViU2l6ZTo6aXNFbXB0eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNpemU6
OldlYlNpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJTaXplOjpvcGVyYXRvcj0pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJTaXplOjpvcGVyYXRvciBXZWJDb3JlOjpJbnRTaXplKToKKyAgICAgICAg
KFdlYktpdDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yIT0pOgorICAg
ICAgICAqIG5peC9wdWJsaWMvV2ViVGhlbWVFbmdpbmUuaDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlRoZW1lRW5naW5lOjpNZXRlckV4dHJhUGFyYW1zOjp2YWx1ZVJhdGlvKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVGhlbWVFbmdpbmU6OmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJUaGVtZUVuZ2luZTo6ZXh0cmFRdWlya3NTdHlsZVNoZWV0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVGhlbWVFbmdpbmU6OmV4dHJhUGx1Z0luc1N0eWxlU2hlZXQpOgor
ICAgICAgICAqIG5peC9wdWJsaWMvV2ViVmVjdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJWZWN0b3I6On5XZWJWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJWZWN0b3I6Oldl
YlZlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZlY3Rvcjo6b3BlcmF0b3I9KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmVjdG9yOjphc3NpZ24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWZWN0
b3I6OnNpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWZWN0b3I6OmlzRW1wdHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWZWN0b3I6Om9wZXJhdG9yW10pOgorICAgICAgICAoV2ViS2l0OjpXZWJW
ZWN0b3I6OmNvbnRhaW5zKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmVjdG9yOjpkYXRhKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmVjdG9yOjpzd2FwKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmVj
dG9yOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmVjdG9yOjppbml0aWFsaXpl
RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZlY3Rvcjo6ZGVzdHJveSk6CisgICAgICAgICog
bml4L3NyYy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6RGVmYXVsdFdlYlRoZW1lRW5naW5lOjphY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Ip
OgorICAgICAgICAoV2ViS2l0OjpEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmFjdGl2ZVNlbGVjdGlv
bkZvcmVncm91bmRDb2xvcik6CisgICAgICAgIChXZWJLaXQ6OkRlZmF1bHRXZWJUaGVtZUVuZ2lu
ZTo6aW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViS2l0OjpE
ZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKToK
KyAgICAgICAgKFdlYktpdDo6RGVmYXVsdFdlYlRoZW1lRW5naW5lOjphY3RpdmVMaXN0Qm94U2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYktpdDo6RGVmYXVsdFdlYlRoZW1l
RW5naW5lOjphY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKToKKyAgICAgICAg
KFdlYktpdDo6RGVmYXVsdFdlYlRoZW1lRW5naW5lOjppbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViS2l0OjpEZWZhdWx0V2ViVGhlbWVFbmdpbmU6
OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcik6CisgICAgICAgIChXZWJL
aXQ6OkRlZmF1bHRXZWJUaGVtZUVuZ2luZTo6YWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9y
KToKKyAgICAgICAgKFdlYktpdDo6RGVmYXVsdFdlYlRoZW1lRW5naW5lOjppbmFjdGl2ZVRleHRT
ZWFyY2hIaWdobGlnaHRDb2xvcik6CisgICAgICAgIChXZWJLaXQ6OkRlZmF1bHRXZWJUaGVtZUVu
Z2luZTo6Zm9jdXNSaW5nQ29sb3IpOgorICAgICAgICAoV2ViS2l0OjpEZWZhdWx0V2ViVGhlbWVF
bmdpbmU6OnRhcEhpZ2hsaWdodENvbG9yKToKKyAgICAgICAgKFdlYktpdDo6Z3JhZGllbnRGaWxs
KToKKyAgICAgICAgKFdlYktpdDo6c2V0dXBCb3JkZXIpOgorICAgICAgICAoV2ViS2l0OjpEZWZh
dWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYktpdDo6RGVmYXVs
dFdlYlRoZW1lRW5naW5lOjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChXZWJLaXQ6OkRlZmF1
bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRUZXh0QXJlYSk6CisgICAgICAgIChXZWJLaXQ6OkRlZmF1
bHRXZWJUaGVtZUVuZ2luZTo6Z2V0Q2hlY2tib3hTaXplKToKKyAgICAgICAgKFdlYktpdDo6RGVm
YXVsdFdlYlRoZW1lRW5naW5lOjpwYWludENoZWNrYm94KToKKyAgICAgICAgKFdlYktpdDo6RGVm
YXVsdFdlYlRoZW1lRW5naW5lOjpnZXRSYWRpb1NpemUpOgorICAgICAgICAoV2ViS2l0OjpEZWZh
dWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50UmFkaW8pOgorICAgICAgICAoV2ViS2l0OjpEZWZhdWx0
V2ViVGhlbWVFbmdpbmU6OmdldE1lbnVMaXN0UGFkZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkRl
ZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChXZWJLaXQ6OkRl
ZmF1bHRXZWJUaGVtZUVuZ2luZTo6Z2V0UHJvZ3Jlc3NCYXJTaXplKToKKyAgICAgICAgKFdlYktp
dDo6RGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludFByb2dyZXNzQmFyKToKKyAgICAgICAgKFdl
YktpdDo6RGVmYXVsdFdlYlRoZW1lRW5naW5lOjpnZXRBbmltYXRpb25SZXBlYXRJbnRlcnZhbEZv
clByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYktpdDo6RGVmYXVsdFdlYlRoZW1lRW5naW5lOjpn
ZXRBbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYktpdDo6RGVm
YXVsdFdlYlRoZW1lRW5naW5lOjpnZXRJbm5lclNwaW5CdXR0b25QYWRkaW5nKToKKyAgICAgICAg
KFdlYktpdDo6RGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludElubmVyU3BpbkJ1dHRvbik6Cisg
ICAgICAgIChXZWJLaXQ6OkRlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRNZXRlcik6CisgICAg
ICAgIChXZWJLaXQ6OkRlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRTbGlkZXJUcmFjayk6Cisg
ICAgICAgIChXZWJLaXQ6OkRlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRTbGlkZXJUaHVtYik6
CisgICAgICAgICogbml4L3NyYy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUuaDogQWRkZWQuCisgICAg
ICAgICogbml4L3NyYy9QbGF0Zm9ybS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpFbXB0
eVBsYXRmb3JtOjp+RW1wdHlQbGF0Zm9ybSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXRmb3JtOjpp
bml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6UGxhdGZvcm06OnNodXRkb3duKToKKyAgICAg
ICAgKFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQpOgorICAgICAgICAoV2ViS2l0OjpQbGF0Zm9y
bTo6dGhlbWVFbmdpbmUpOgorCiAyMDEzLTA2LTE0ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtA
aWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIEdUSyBidWlsZCBmaXguCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9QbGF0Zm9ybS5oIGIvU291cmNlL1BsYXRm
b3JtL25peC9wdWJsaWMvUGxhdGZvcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYjI1N2E1ZjJmMjEyMTU4OWQw
MzFkYWQzZTkwNzhjMzEwMjZlZmM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3Jt
L25peC9wdWJsaWMvUGxhdGZvcm0uaApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQbGF0Zm9ybV9o
CisjZGVmaW5lIFBsYXRmb3JtX2gKKworI2luY2x1ZGUgIldlYkF1ZGlvRGV2aWNlLmgiCisjaW5j
bHVkZSAiV2ViRGF0YS5oIgorI2luY2x1ZGUgIldlYkdhbWVwYWRzLmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBXZWJBdWRpb0J1czsKK2NsYXNzIFdlYkZGVEZyYW1lOworY2xhc3Mg
V2ViVGhlbWVFbmdpbmU7CisKK2NsYXNzIFdFQktJVF9FWFBPUlQgUGxhdGZvcm0geworcHVibGlj
OgorCisgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgdm9pZCBpbml0aWFsaXplKFBsYXRmb3JtKik7
CisgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgdm9pZCBzaHV0ZG93bigpOworICAgIFdFQktJVF9F
WFBPUlQgc3RhdGljIFBsYXRmb3JtKiBjdXJyZW50KCk7CisKKyAgICAvLyBBdWRpbyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
ICAgIHZpcnR1YWwgZG91YmxlIGF1ZGlvSGFyZHdhcmVTYW1wbGVSYXRlKCkgeyByZXR1cm4gMDsg
fQorICAgIHZpcnR1YWwgc2l6ZV90IGF1ZGlvSGFyZHdhcmVCdWZmZXJTaXplKCkgeyByZXR1cm4g
MDsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgYXVkaW9IYXJkd2FyZU91dHB1dENoYW5uZWxzKCkg
eyByZXR1cm4gMDsgfQorCisgICAgLy8gQ3JlYXRlcyBhIGRldmljZSBmb3IgYXVkaW8gSS9PLgor
ICAgIC8vIFBhc3MgaW4gKG51bWJlck9mSW5wdXRDaGFubmVscyA+IDApIGlmIGxpdmUvbG9jYWwg
YXVkaW8gaW5wdXQgaXMgZGVzaXJlZC4KKyAgICB2aXJ0dWFsIFdlYkF1ZGlvRGV2aWNlKiBjcmVh
dGVBdWRpb0RldmljZShzaXplX3QgLypidWZmZXJTaXplKi8sIHVuc2lnbmVkIC8qbnVtYmVyT2ZJ
bnB1dENoYW5uZWxzKi8sIHVuc2lnbmVkIC8qbnVtYmVyT2ZDaGFubmVscyovLCBkb3VibGUgLypz
YW1wbGVSYXRlKi8sIFdlYkF1ZGlvRGV2aWNlOjpSZW5kZXJDYWxsYmFjayopIHsgcmV0dXJuIDA7
IH0KKworCisgICAgLy8gR2FtZXBhZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgdmlydHVhbCB2b2lkIHNhbXBsZUdhbWVw
YWRzKFdlYkdhbWVwYWRzJiBpbnRvKSB7IGludG8ubGVuZ3RoID0gMDsgfQorCisKKyAgICAvLyBG
RlRGcmFtZQorICAgIHZpcnR1YWwgV2ViRkZURnJhbWUqIGNyZWF0ZUZGVEZyYW1lKHVuc2lnbmVk
IC8qZmZ0c2l6ZSovKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBXZWJGRlRGcmFtZSogY3Jl
YXRlRkZURnJhbWUoY29uc3QgV2ViRkZURnJhbWUqIC8qZnJhbWUqLykgeyByZXR1cm4gMDsgfQor
CisgICAgLy8gUmVzb3VyY2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUmV0dXJucyBhIGJsb2Igb2YgZGF0YSBjb3Jy
ZXNwb25kaW5nIHRvIHRoZSBuYW1lZCByZXNvdXJjZS4KKyAgICB2aXJ0dWFsIFdlYkRhdGEgbG9h
ZFJlc291cmNlKGNvbnN0IGNoYXIqIC8qbmFtZSovKSB7IHJldHVybiBXZWJEYXRhKCk7IH0KKwor
ICAgIC8vIERlY29kZXMgdGhlIGluLW1lbW9yeSBhdWRpbyBmaWxlIGRhdGEgYW5kIHJldHVybnMg
dGhlIGxpbmVhciBQQ00gYXVkaW8gZGF0YSBpbiB0aGUgZGVzdGluYXRpb25CdXMuCisgICAgLy8g
QSBzYW1wbGUtcmF0ZSBjb252ZXJzaW9uIHRvIHNhbXBsZVJhdGUgd2lsbCBvY2N1ciBpZiB0aGUg
ZmlsZSBkYXRhIGlzIGF0IGEgZGlmZmVyZW50IHNhbXBsZS1yYXRlLgorICAgIC8vIFJldHVybnMg
dHJ1ZSBvbiBzdWNjZXNzLgorICAgIHZpcnR1YWwgYm9vbCBsb2FkQXVkaW9SZXNvdXJjZShXZWJB
dWRpb0J1cyogLypkZXN0aW5hdGlvbkJ1cyovLCBjb25zdCBjaGFyKiAvKmF1ZGlvRmlsZURhdGEq
Lywgc2l6ZV90IC8qZGF0YVNpemUqLywgZG91YmxlIC8qc2FtcGxlUmF0ZSovKSB7IHJldHVybiBm
YWxzZTsgfQorCisgICAgLy8gVGhlbWUgZW5naW5lCisgICAgdmlydHVhbCBXZWJUaGVtZUVuZ2lu
ZSogdGhlbWVFbmdpbmUoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgflBsYXRmb3JtKCkg
eyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9XZWJBdWRpb0J1cy5oIGIvU291cmNlL1BsYXRmb3Jt
L25peC9wdWJsaWMvV2ViQXVkaW9CdXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xN2IyNTQ0NGViN2ViZTJmNjRk
MmNjYjBmNmM2NTY5OWQ2ZTFjMjY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3Jt
L25peC9wdWJsaWMvV2ViQXVkaW9CdXMuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXZWJBdWRpb0J1c19oCisjZGVmaW5lIFdlYkF1ZGlvQnVzX2gKKworI2luY2x1ZGUg
IldlYkNvbW1vbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEF1ZGlvQnVzOyB9CisK
KyNpZmRlZiBCVUlMRElOR19OSVhfXworbmFtZXNwYWNlIFdURiB7IHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBjbGFzcyBQYXNzUmVmUHRyOyB9CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYkF1ZGlvQnVzUHJpdmF0ZTsKKworLy8gQSBjb250YWluZXIgZm9yIG11bHRpLWNo
YW5uZWwgbGluZWFyIFBDTSBhdWRpbyBkYXRhLgorLy8KKy8vIFdBUk5JTkc6IEl0IGlzIG5vdCBz
YWZlIHRvIHBhc3MgYSBXZWJBdWRpb0J1cyBhY3Jvc3MgdGhyZWFkcyEhIQorLy8KK2NsYXNzIFdl
YkF1ZGlvQnVzIHsKK3B1YmxpYzoKKyAgICBXZWJBdWRpb0J1cygpIDogbV9kKDApIHsgfQorICAg
IH5XZWJBdWRpb0J1cygpIHsgcmVzZXQoKTsgfQorCisgICAgLy8gaW5pdGlhbGl6ZSgpIGFsbG9j
YXRlcyBtZW1vcnkgb2YgdGhlIGdpdmVuIGxlbmd0aCBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBj
aGFubmVscy4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgaW5pdGlhbGl6ZSh1bnNpZ25lZCBudW1i
ZXJPZkNoYW5uZWxzLCBzaXplX3QgbGVuZ3RoLCBkb3VibGUgc2FtcGxlUmF0ZSk7CisKKyAgICAv
LyByZXNpemVTbWFsbGVyKCkgY2FuIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGluaXRpYWxpemUoKSB3
aXRoIGEgbmV3IGxlbmd0aCA8PSB0aGUgaW5pdGlhbGl6YXRpb24gbGVuZ3RoLgorICAgIC8vIFRo
ZSBkYXRhIHN0b3JlZCBpbiB0aGUgYnVzIHdpbGwgcmVtYWluIHVuZGlzdHVyYmVkLgorICAgIFdF
QktJVF9FWFBPUlQgdm9pZCByZXNpemVTbWFsbGVyKHNpemVfdCBuZXdMZW5ndGgpOworCisgICAg
Ly8gcmVzZXQoKSByZWxlYXNlcyB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmcm9tIGluaXRpYWxpemUo
KS4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKKworICAgIFdFQktJVF9FWFBPUlQg
dW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscygpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgc2l6
ZV90IGxlbmd0aCgpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgZG91YmxlIHNhbXBsZVJhdGUo
KSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgZmxvYXQqIGNoYW5uZWxEYXRhKHVuc2lnbmVk
IGNoYW5uZWxJbmRleCk7CisKKyNpZmRlZiBCVUlMRElOR19OSVhfXworICAgIFdURjo6UGFzc1Jl
ZlB0cjxXZWJDb3JlOjpBdWRpb0J1cz4gYXVkaW9CdXMoKTsKKyNlbmRpZgorCitwcml2YXRlOgor
ICAgIC8vIERpc2FsbG93IGNvcHkgYW5kIGFzc2lnbi4KKyAgICBXZWJBdWRpb0J1cyhjb25zdCBX
ZWJBdWRpb0J1cyYpOworICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFdlYkF1ZGlvQnVzJik7CisK
KyAgICBXZWJBdWRpb0J1c1ByaXZhdGUqIG1fZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gV2ViQXVkaW9CdXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3Jt
L25peC9wdWJsaWMvV2ViQXVkaW9EZXZpY2UuaCBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGlj
L1dlYkF1ZGlvRGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzA0NTEzNjE0YTBlYTNlMzA4NWI0ZmFhNGVj
MzM1NWYyZGI1YzY1MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVi
bGljL1dlYkF1ZGlvRGV2aWNlLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQXVkaW9E
ZXZpY2VfaAorI2RlZmluZSBXZWJBdWRpb0RldmljZV9oCisKKyNpbmNsdWRlICJXZWJWZWN0b3Iu
aCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIEFic3RyYWN0IGludGVyZmFjZSB0byB0aGUg
Q2hyb21pdW0gYXVkaW8gc3lzdGVtLgorCitjbGFzcyBXZWJBdWRpb0RldmljZSB7CitwdWJsaWM6
CisgICAgY2xhc3MgUmVuZGVyQ2FsbGJhY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVh
bCB2b2lkIHJlbmRlcihjb25zdCBXZWJWZWN0b3I8ZmxvYXQqPiYgLypzb3VyY2VEYXRhKi8sIGNv
bnN0IFdlYlZlY3RvcjxmbG9hdCo+JiAvKmRlc3RpbmF0aW9uRGF0YSovLCBzaXplX3QgLypudW1i
ZXJPZkZyYW1lcyovKSB7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCB+UmVu
ZGVyQ2FsbGJhY2soKSB7IH0KKyAgICB9OworCisgICAgdmlydHVhbCB+V2ViQXVkaW9EZXZpY2Uo
KSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c3RvcCgpID0gMDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBzYW1wbGVSYXRlKCkgPSAwOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJBdWRpb0RldmljZV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9XZWJDYW52YXMuaCBiL1NvdXJjZS9Q
bGF0Zm9ybS9uaXgvcHVibGljL1dlYkNhbnZhcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4YzYxYWI5YTI0ZGUw
ZTAzMGY2MTc5MGYwMTNlODUxN2I2YTQwNGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxh
dGZvcm0vbml4L3B1YmxpYy9XZWJDYW52YXMuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogIENv
cHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZm5kZWYgV2ViQ2FudmFzX2gKKyNkZWZpbmUg
V2ViQ2FudmFzX2gKKworI2luY2x1ZGUgPGNhaXJvL2NhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgewordHlwZWRlZiBjYWlyb190IFdlYkNhbnZhczsKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9XZWJDb2xvci5oIGIvU291cmNlL1BsYXRmb3Jt
L25peC9wdWJsaWMvV2ViQ29sb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YjVhOTkwMzRiMmJmZGRmM2JkMDNl
MTkzMDc0MWM2MjFhNTk4MzI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL25p
eC9wdWJsaWMvV2ViQ29sb3IuaApAQCAtMCwwICsxLDk4IEBACisvKgorICogIENvcHlyaWdodCAo
QykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyovCisKKyNpZm5kZWYgV2ViQ29sb3JfaAorI2RlZmluZSBXZWJDb2xvcl9o
CisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit0eXBlZGVm
IHVuc2lnbmVkIFJHQkEzMjsgLy8gUkdCQSBxdWFkcnVwbGV0CisKK3N0cnVjdCBXZWJDb2xvciB7
CisgICAgc3RhdGljIGNvbnN0IFJHQkEzMiBibGFjayA9IDB4RkYwMDAwMDA7CisgICAgc3RhdGlj
IGNvbnN0IFJHQkEzMiB3aGl0ZSA9IDB4RkZGRkZGRkY7CisgICAgc3RhdGljIGNvbnN0IFJHQkEz
MiBkYXJrR3JheSA9IDB4RkY4MDgwODA7CisgICAgc3RhdGljIGNvbnN0IFJHQkEzMiBncmF5ID0g
MHhGRkEwQTBBMDsKKyAgICBzdGF0aWMgY29uc3QgUkdCQTMyIGxpZ2h0R3JheSA9IDB4RkZDMEMw
QzA7CisgICAgc3RhdGljIGNvbnN0IFJHQkEzMiB0cmFuc3BhcmVudCA9IDB4MDAwMDAwMDA7CisK
KyAgICBSR0JBMzIgcmdiYTsKKworICAgIFdlYkNvbG9yKCkKKyAgICAgICAgOiByZ2JhKFdlYkNv
bG9yOjpibGFjaykKKyAgICB7CisgICAgfQorCisgICAgV2ViQ29sb3IoUkdCQTMyIHJnYmEpCisg
ICAgICAgIDogcmdiYShyZ2JhKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJDb2xvcihpbnQgciwg
aW50IGcsIGludCBiLCBpbnQgYSA9IDI1NSkKKyAgICAgICAgOiByZ2JhKHN0ZDo6bWF4KDAsIHN0
ZDo6bWluKGEsIDI1NSkpIDw8IDI0IHwgc3RkOjptYXgoMCwgc3RkOjptaW4ociwgMjU1KSkgPDwg
MTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUpKSA8PCA4IHwgc3RkOjptYXgoMCwgc3Rk
OjptaW4oYiwgMjU1KSkpCisgICAgeworICAgIH0KKworICAgIG9wZXJhdG9yIFJHQkEzMigpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gcmdiYTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBj
aGFyIHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChyZ2JhICYgMHgwMEZGMDAwMCkg
Pj4gMTY7CisgICAgfQorCisgICAgdW5zaWduZWQgY2hhciBnKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiAocmdiYSAmIDB4MDAwMEZGMDApID4+IDg7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgY2hhciBiKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAocmdiYSAmIDB4MDAwMDAw
RkYpOworICAgIH0KKworICAgIHVuc2lnbmVkIGNoYXIgYSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gKHJnYmEgJiAweEZGMDAwMDAwKSA+PiAyNDsKKyAgICB9Cit9OworCitpbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYkNvbG9yJiBhLCBjb25zdCBXZWJDb2xvciYgYikKK3sK
KyAgICByZXR1cm4gYS5yZ2JhID09IGIucmdiYTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBXZWJDb2xvciYgYSwgY29uc3QgV2ViQ29sb3ImIGIpCit7CisgICAgcmV0dXJuICEo
YSA9PSBiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViQ29tbW9uLmggYi9Tb3VyY2UvUGxhdGZv
cm0vbml4L3B1YmxpYy9XZWJDb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MzhkNzNjNzJjZTYwZjgyMGMy
ZWIxMzkwYTFkMWI3MWQwM2VhZGJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3Jt
L25peC9wdWJsaWMvV2ViQ29tbW9uLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQ29tbW9u
X2gKKyNkZWZpbmUgV2ViQ29tbW9uX2gKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEV4
cG9ydGVkIHN5bWJvbHMgbmVlZCB0byBiZSBhbm5vdGF0ZWQgd2l0aCBXRUJLSVRfRVhQT1JUCisj
ZGVmaW5lIFdFQktJVF9FWFBPUlQgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIp
KSkKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEJhc2ljIHR5cGVzCisjaW5jbHVkZSA8
c3RkZGVmLmg+IC8vIEZvciBzaXplX3QKKworbmFtZXNwYWNlIFdlYktpdCB7CisvLyBVVEYtMTYg
Y2hhcmFjdGVyIHR5cGUKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgV2ViVUNoYXI7Cit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4
L3B1YmxpYy9XZWJEYXRhLmggYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9XZWJEYXRhLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMzAxOWNkM2FmMTUyODJlMTYzOWY1M2FlYjVjM2JhODFlNjE5NjQ0NAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1dlYkRhdGEuaApAQCAt
MCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgV2ViRGF0YV9oCisjZGVmaW5lIFdlYkRhdGFfaAorCisjaW5j
bHVkZSAiV2ViQ29tbW9uLmgiCisKKyNpZmRlZiBCVUlMRElOR19OSVhfXworbmFtZXNwYWNlIFdl
YkNvcmUgeyBjbGFzcyBTaGFyZWRCdWZmZXI7IH0KK25hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1JlZlB0cjsgfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBXZWJEYXRhUHJpdmF0ZTsKKworLy8gQSBjb250YWluZXIgZm9yIHJhdyBi
eXRlcy4gSXQgaXMgaW5leHBlbnNpdmUgdG8gY29weSBhIFdlYkRhdGEgb2JqZWN0LgorLy8KKy8v
IFdBUk5JTkc6IEl0IGlzIG5vdCBzYWZlIHRvIHBhc3MgYSBXZWJEYXRhIGFjcm9zcyB0aHJlYWRz
ISEhCisvLworY2xhc3MgV2ViRGF0YSB7CitwdWJsaWM6CisgICAgfldlYkRhdGEoKSB7IHJlc2V0
KCk7IH0KKworICAgIFdlYkRhdGEoKSA6IG1fcHJpdmF0ZSgwKSB7IH0KKworICAgIFdlYkRhdGEo
Y29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpIDogbV9wcml2YXRlKDApCisgICAgeworICAg
ICAgICBhc3NpZ24oZGF0YSwgc2l6ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGludCBOPgor
ICAgIFdlYkRhdGEoY29uc3QgY2hhciAoJmRhdGEpW05dKSA6IG1fcHJpdmF0ZSgwKQorICAgIHsK
KyAgICAgICAgYXNzaWduKGRhdGEsIE4gLSAxKTsKKyAgICB9CisKKyAgICBXZWJEYXRhKGNvbnN0
IFdlYkRhdGEmIGQpIDogbV9wcml2YXRlKDApIHsgYXNzaWduKGQpOyB9CisKKyAgICBXZWJEYXRh
JiBvcGVyYXRvcj0oY29uc3QgV2ViRGF0YSYgZCkKKyAgICB7CisgICAgICAgIGFzc2lnbihkKTsK
KyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBy
ZXNldCgpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViRGF0YSYpOwor
ICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90KTsK
KworICAgIFdFQktJVF9FWFBPUlQgc2l6ZV90IHNpemUoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQ
T1JUIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdDsKKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuICFzaXplKCk7IH0KKyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFt
X3ByaXZhdGU7IH0KKworI2lmZGVmIEJVSUxESU5HX05JWF9fCisgICAgV2ViRGF0YShjb25zdCBX
VEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYpOworICAgIFdlYkRhdGEmIG9w
ZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYpOwor
ICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+KCkgY29u
c3Q7CisjZWxzZQorICAgIHRlbXBsYXRlIDxjbGFzcyBDPgorICAgIFdlYkRhdGEoY29uc3QgQyYg
YykgOiBtX3ByaXZhdGUoMCkKKyAgICB7CisgICAgICAgIGFzc2lnbihjLmRhdGEoKSwgYy5zaXpl
KCkpOworICAgIH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBDPgorICAgIFdlYkRhdGEmIG9wZXJh
dG9yPShjb25zdCBDJiBjKQorICAgIHsKKyAgICAgICAgYXNzaWduKGMuZGF0YSgpLCBjLnNpemUo
KSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisjZW5kaWYKKworcHJpdmF0ZToKKyAg
ICB2b2lkIGFzc2lnbihXZWJEYXRhUHJpdmF0ZSopOworICAgIFdlYkRhdGFQcml2YXRlKiBtX3By
aXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9XZWJGRlRGcmFtZS5oIGIvU291cmNlL1BsYXRm
b3JtL25peC9wdWJsaWMvV2ViRkZURnJhbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NTMzMTBiZWY5YzA0ZjEw
Yzg5ODM5NTUwNmEwYzBhNmU0YTMyOTYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRm
b3JtL25peC9wdWJsaWMvV2ViRkZURnJhbWUuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisjaWZuZGVmIFdlYkZGVEZyYW1lX2gKKyNkZWZpbmUgV2ViRkZURnJhbWVf
aAorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQXVkaW9CdXM7CisKK2NsYXNzIFdl
YkZGVEZyYW1lIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJGRlRGcmFtZSgpIHsgfQorCisg
ICAgdmlydHVhbCB2b2lkIGRvRkZUKGNvbnN0IGZsb2F0KikgeyB9CisgICAgdmlydHVhbCB2b2lk
IGRvSW52ZXJzZUZGVChmbG9hdCopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBtdWx0aXBseShjb25z
dCBXZWJGRlRGcmFtZSYpIHsgfQorCisgICAgdmlydHVhbCB1bnNpZ25lZCBmcmVxdWVuY3lEb21h
aW5TYW1wbGVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICAvLyBBZnRlciBtdWx0aXBs
aWNhdGlvbiBhbmQgdHJhbnNmb3JtIG9wZXJhdGlvbnMsIHRoZSBkYXRhIGlzIHNjYWxlZAorICAg
IC8vIHRvIHRha2UgaW4gYWNjb3VudCB0aGUgc2NhbGUgdXNlZCBpbnRlcm5hbGx5IGluIFdlYktp
dCwgb3JpZ2luYWxseQorICAgIC8vIGZyb20gTWFjJ3MgdmVjTGliLgorICAgIC8vIEFmdGVyIG11
bHRpcGxpY2F0aW9uOiBQbGFuYXIgZGF0YSBpcyBzY2FsZWQgYnkgMC41LgorICAgIC8vIEFmdGVy
IGRpcmVjdCB0cmFuc2Zvcm06IFBsYW5hciBkYXRhIGlzIHNjYWxlZCBieSAyLjAuCisgICAgLy8g
QWZ0ZXIgaW52ZXJzZSB0cmFuc2Zvcm06IFRpbWUgZG9tYWluIGRhdGEgaXMgc2NhbGVkIGJ5IDEu
MC8oMiogRkZUIHNpemUpLgorICAgIHZpcnR1YWwgZmxvYXQqIHJlYWxEYXRhKCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgZmxvYXQqIGltYWdEYXRhKCkgY29uc3QgeyByZXR1cm4g
MDsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViR2FtZXBhZC5oIGIvU291cmNlL1BsYXRmb3Jt
L25peC9wdWJsaWMvV2ViR2FtZXBhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ1NWRmMTU2OTMzOWI0MDJmOTI2
ZGU5NGJjZDczNmY5YmJlNjAyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0v
bml4L3B1YmxpYy9XZWJHYW1lcGFkLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXZWJHYW1lcGFkX2gKKyNkZWZpbmUgV2ViR2FtZXBhZF9oCisKKyNpbmNsdWRlICJX
ZWJDb21tb24uaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkdhbWVwYWQgewor
cHVibGljOgorICAgIHN0YXRpYyBjb25zdCBzaXplX3QgaWRMZW5ndGhDYXAgPSAxMjg7CisgICAg
c3RhdGljIGNvbnN0IHNpemVfdCBheGVzTGVuZ3RoQ2FwID0gMTY7CisgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBidXR0b25zTGVuZ3RoQ2FwID0gMzI7CisKKyAgICBXZWJHYW1lcGFkKCkKKyAgICAg
ICAgOiBjb25uZWN0ZWQoZmFsc2UpCisgICAgICAgICwgdGltZXN0YW1wKDApCisgICAgICAgICwg
YXhlc0xlbmd0aCgwKQorICAgICAgICAsIGJ1dHRvbnNMZW5ndGgoMCkKKyAgICB7CisgICAgICAg
IGlkWzBdID0gMDsKKyAgICB9CisKKyAgICAvLyBJcyB0aGVyZSBhIGdhbWVwYWQgY29ubmVjdGVk
IGF0IHRoaXMgaW5kZXg/CisgICAgYm9vbCBjb25uZWN0ZWQ7CisKKyAgICAvLyBEZXZpY2UgaWRl
bnRpZmllciAoYmFzZWQgb24gbWFudWZhY3R1cmVyLCBtb2RlbCwgZXRjLikuCisgICAgV2ViVUNo
YXIgaWRbaWRMZW5ndGhDYXBdOworCisgICAgLy8gTW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIHZh
bHVlIHJlZmVycmluZyB0byB3aGVuIHRoZSBkYXRhIHdlcmUgbGFzdAorICAgIC8vIHVwZGF0ZWQu
CisgICAgdW5zaWduZWQgbG9uZyBsb25nIHRpbWVzdGFtcDsKKworICAgIC8vIE51bWJlciBvZiB2
YWxpZCBlbnRyaWVzIGluIHRoZSBheGVzIGFycmF5LgorICAgIHVuc2lnbmVkIGF4ZXNMZW5ndGg7
CisKKyAgICAvLyBOb3JtYWxpemVkIHZhbHVlcyByZXByZXNlbnRpbmcgYXhlcywgaW4gdGhlIHJh
bmdlIFstMS4uMV0uCisgICAgZmxvYXQgYXhlc1theGVzTGVuZ3RoQ2FwXTsKKworICAgIC8vIE51
bWJlciBvZiB2YWxpZCBlbnRyaWVzIGluIHRoZSBidXR0b25zIGFycmF5LgorICAgIHVuc2lnbmVk
IGJ1dHRvbnNMZW5ndGg7CisKKyAgICAvLyBOb3JtYWxpemVkIHZhbHVlcyByZXByZXNlbnRpbmcg
YnV0dG9ucywgaW4gdGhlIHJhbmdlIFswLi4xXS4KKyAgICBmbG9hdCBidXR0b25zW2J1dHRvbnNM
ZW5ndGhDYXBdOworfTsKKworfQorCisjZW5kaWYgLy8gV2ViR2FtZXBhZF9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9XZWJHYW1lcGFkcy5oIGIvU291cmNlL1BsYXRm
b3JtL25peC9wdWJsaWMvV2ViR2FtZXBhZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MTljYTQ5MjZkMjUxNmFi
ZTg2M2RlNGJhYzA4YjExZTQ5MjJiZjY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRm
b3JtL25peC9wdWJsaWMvV2ViR2FtZXBhZHMuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAq
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisg
KiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFdlYkdhbWVwYWRzX2gKKyNkZWZpbmUgV2ViR2FtZXBhZHNfaAorCisjaW5j
bHVkZSAiV2ViR2FtZXBhZC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViR2Ft
ZXBhZHMgeworcHVibGljOgorICAgIFdlYkdhbWVwYWRzKCkKKyAgICAgICAgOiBsZW5ndGgoMCkg
eyB9CisKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGl0ZW1zTGVuZ3RoQ2FwID0gNDsKKworICAg
IC8vIE51bWJlciBvZiB2YWxpZCBlbnRyaWVzIGluIHRoZSBpdGVtcyBhcnJheS4KKyAgICB1bnNp
Z25lZCBsZW5ndGg7CisKKyAgICAvLyBHYW1lcGFkIGRhdGEgZm9yIE4gc2VwYXJhdGUgZ2FtZXBh
ZCBkZXZpY2VzLgorICAgIFdlYkdhbWVwYWQgaXRlbXNbaXRlbXNMZW5ndGhDYXBdOworfTsKKwor
fQorCisjZW5kaWYgLy8gV2ViR2FtZXBhZHNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3Jt
L25peC9wdWJsaWMvV2ViUmVjdC5oIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViUmVj
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjY1ZjkyZmMzM2VlOGMyNzhlOGI2Njk3ODI0NzFlMDVkNzMyNGQxNmQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9XZWJSZWN0LmgK
QEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBXZWJSZWN0
X2gKKyNkZWZpbmUgV2ViUmVjdF9oCisKKyNpZmRlZiBCVUlMRElOR19OSVhfXworI2luY2x1ZGUg
IkludFJlY3QuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUmVj
dCB7CitwdWJsaWM6CisgICAgaW50IHg7CisgICAgaW50IHk7CisgICAgaW50IHdpZHRoOworICAg
IGludCBoZWlnaHQ7CisKKyAgICBXZWJSZWN0KGNvbnN0IFdlYlJlY3QmIHIpCisgICAgICAgIDog
eChyLngpCisgICAgICAgICwgeShyLnkpCisgICAgICAgICwgd2lkdGgoci53aWR0aCkKKyAgICAg
ICAgLCBoZWlnaHQoci5oZWlnaHQpCisgICAgeworICAgIH0KKworI2lmZGVmIEJVSUxESU5HX05J
WF9fCisgICAgV2ViUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByKQorICAgICAgICA6IHgo
ci54KCkpCisgICAgICAgICwgeShyLnkoKSkKKyAgICAgICAgLCB3aWR0aChyLndpZHRoKCkpCisg
ICAgICAgICwgaGVpZ2h0KHIuaGVpZ2h0KCkpCisgICAgeworICAgIH0KKworICAgIFdlYlJlY3Qm
IG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByKQorICAgIHsKKyAgICAgICAgeCA9
IHIueCgpOworICAgICAgICB5ID0gci55KCk7CisgICAgICAgIHdpZHRoID0gci53aWR0aCgpOwor
ICAgICAgICBoZWlnaHQgPSByLmhlaWdodCgpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
fQorI2VuZGlmCit9OworCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9u
aXgvcHVibGljL1dlYlNpemUuaCBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1dlYlNpemUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41MDRlZjVhMjUwMDY3ZWE5OTc5ODNjOTQxYWNmZDhhOTQxZjc1OWNlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViU2l6ZS5oCkBA
IC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNpemVfaAorI2RlZmluZSBXZWJTaXplX2gKKworI2lm
ZGVmIEJVSUxESU5HX05JWF9fCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2VuZGlmCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitzdHJ1Y3QgV2ViU2l6ZSB7CisgICAgaW50IHdpZHRoOworICAgIGlu
dCBoZWlnaHQ7CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiB3aWR0aCA8PSAw
IHx8IGhlaWdodCA8PSAwOyB9CisKKyAgICBXZWJTaXplKCkKKyAgICAgICAgOiB3aWR0aCgwKQor
ICAgICAgICAsIGhlaWdodCgwKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJTaXplKGludCB3aWR0
aCwgaW50IGhlaWdodCkKKyAgICAgICAgOiB3aWR0aCh3aWR0aCkKKyAgICAgICAgLCBoZWlnaHQo
aGVpZ2h0KQorICAgIHsKKyAgICB9CisKKyNpZmRlZiBCVUlMRElOR19OSVhfXworICAgIFdlYlNp
emUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcykKKyAgICAgICAgOiB3aWR0aChzLndpZHRoKCkp
CisgICAgICAgICwgaGVpZ2h0KHMuaGVpZ2h0KCkpCisgICAgeworICAgIH0KKworICAgIFdlYlNp
emUmIG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzKQorICAgIHsKKyAgICAgICAg
d2lkdGggPSBzLndpZHRoKCk7CisgICAgICAgIGhlaWdodCA9IHMuaGVpZ2h0KCk7CisgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBvcGVyYXRvciBXZWJDb3JlOjpJbnRTaXplKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpJbnRTaXplKHdpZHRoLCBoZWln
aHQpOworICAgIH0KKyNlbmRpZgorfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBX
ZWJTaXplJiBhLCBjb25zdCBXZWJTaXplJiBiKQoreworICAgIHJldHVybiBhLndpZHRoID09IGIu
d2lkdGggJiYgYS5oZWlnaHQgPT0gYi5oZWlnaHQ7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9y
IT0oY29uc3QgV2ViU2l6ZSYgYSwgY29uc3QgV2ViU2l6ZSYgYikKK3sKKyAgICByZXR1cm4gIShh
ID09IGIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9XZWJUaGVtZUVuZ2luZS5oIGIvU291cmNlL1Bs
YXRmb3JtL25peC9wdWJsaWMvV2ViVGhlbWVFbmdpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MTE1NTdjNzJj
NDFlZDdjY2M5OWNkOTM0NTVkNGM3M2UyYzMxMTM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1BsYXRmb3JtL25peC9wdWJsaWMvV2ViVGhlbWVFbmdpbmUuaApAQCAtMCwwICsxLDE1OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgV2ViVGhlbWVFbmdpbmVfaAorI2RlZmluZSBXZWJUaGVtZUVuZ2luZV9oCisKKyNpbmNs
dWRlICJXZWJDYW52YXMuaCIKKyNpbmNsdWRlICJXZWJDb2xvci5oIgorI2luY2x1ZGUgIldlYlNp
emUuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlJlY3Q7CisKK2NsYXNzIFdl
YlRoZW1lRW5naW5lIHsKK3B1YmxpYzoKKyAgICAvLyBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUg
YXNzb2NpYXRlZCBQYXJ0LgorICAgIGVudW0gU3RhdGUgeworICAgICAgICBTdGF0ZURpc2FibGVk
LAorICAgICAgICBTdGF0ZUhvdmVyLAorICAgICAgICBTdGF0ZU5vcm1hbCwKKyAgICAgICAgU3Rh
dGVQcmVzc2VkCisgICAgfTsKKworICAgIC8vIEV4dHJhIHBhcmFtZXRlcnMgZm9yIGRyYXdpbmcg
dGhlIFBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVHJhY2sgYW5kCisgICAgLy8gUGFydFNjcm9sbGJh
clZlcnRpY2FsVHJhY2suCisgICAgc3RydWN0IFNjcm9sbGJhclRyYWNrRXh0cmFQYXJhbXMgewor
ICAgICAgICAvLyBUaGUgYm91bmRzIG9mIHRoZSBlbnRpcmUgdHJhY2ssIGFzIG9wcG9zZWQgdG8g
dGhlIHBhcnQgYmVpbmcgcGFpbnRlZC4KKyAgICAgICAgaW50IHRyYWNrWDsKKyAgICAgICAgaW50
IHRyYWNrWTsKKyAgICAgICAgaW50IHRyYWNrV2lkdGg7CisgICAgICAgIGludCB0cmFja0hlaWdo
dDsKKyAgICB9OworCisgICAgLy8gRXh0cmEgcGFyYW1ldGVycyBmb3IgUGFydENoZWNrYm94LCBQ
YXJ0UHVzaEJ1dHRvbiBhbmQgUGFydFJhZGlvLgorICAgIHN0cnVjdCBCdXR0b25FeHRyYVBhcmFt
cyB7CisgICAgICAgIGJvb2wgY2hlY2tlZDsKKyAgICAgICAgYm9vbCBpbmRldGVybWluYXRlOyAv
LyBXaGV0aGVyIHRoZSBidXR0b24gc3RhdGUgaXMgaW5kZXRlcm1pbmF0ZS4KKyAgICAgICAgYm9v
bCBpc0RlZmF1bHQ7IC8vIFdoZXRoZXIgdGhlIGJ1dHRvbiBpcyBkZWZhdWx0IGJ1dHRvbi4KKyAg
ICAgICAgYm9vbCBoYXNCb3JkZXI7CisgICAgICAgIFdlYkNvbG9yIGJhY2tncm91bmRDb2xvcjsK
KyAgICB9OworCisgICAgLy8gRXh0cmEgcGFyYW1ldGVycyBmb3IgUGFydE1lbnVMaXN0CisgICAg
c3RydWN0IE1lbnVMaXN0RXh0cmFQYXJhbXMgeworICAgICAgICBib29sIGhhc0JvcmRlcjsKKyAg
ICAgICAgYm9vbCBoYXNCb3JkZXJSYWRpdXM7CisgICAgICAgIGludCBhcnJvd1g7CisgICAgICAg
IGludCBhcnJvd1k7CisgICAgICAgIFdlYkNvbG9yIGJhY2tncm91bmRDb2xvcjsKKyAgICB9Owor
CisgICAgLy8gRXh0cmEgcGFyYW1ldGVycyBmb3IgUGFydFNsaWRlclRyYWNrIGFuZCBQYXJ0U2xp
ZGVyVGh1bWIKKyAgICBzdHJ1Y3QgU2xpZGVyRXh0cmFQYXJhbXMgeworICAgICAgICBib29sIHZl
cnRpY2FsOworICAgICAgICBib29sIGluRHJhZzsKKyAgICB9OworCisgICAgLy8gRXh0cmEgcGFy
YW1ldGVycyBmb3IgUGFydElubmVyU3BpbkJ1dHRvbgorICAgIHN0cnVjdCBJbm5lclNwaW5CdXR0
b25FeHRyYVBhcmFtcyB7CisgICAgICAgIGJvb2wgc3BpblVwOworICAgICAgICBib29sIHJlYWRP
bmx5OworICAgIH07CisKKyAgICAvLyBFeHRyYSBwYXJhbWV0ZXJzIGZvciBQYXJ0UHJvZ3Jlc3NC
YXIKKyAgICBzdHJ1Y3QgUHJvZ3Jlc3NCYXJFeHRyYVBhcmFtcyB7CisgICAgICAgIGJvb2wgaXNE
ZXRlcm1pbmF0ZTsKKyAgICAgICAgZG91YmxlIHBvc2l0aW9uOworICAgICAgICBkb3VibGUgYW5p
bWF0aW9uUHJvZ3Jlc3M7CisgICAgICAgIGRvdWJsZSBhbmltYXRpb25TdGFydFRpbWU7CisgICAg
fTsKKworICAgIHN0cnVjdCBNZXRlckV4dHJhUGFyYW1zIHsKKyAgICAgICAgZG91YmxlIG1pbjsK
KyAgICAgICAgZG91YmxlIG1heDsKKyAgICAgICAgZG91YmxlIHZhbHVlOworICAgICAgICBkb3Vi
bGUgbG93OworICAgICAgICBkb3VibGUgaGlnaDsKKyAgICAgICAgZG91YmxlIG9wdGltdW07Cisg
ICAgICAgIGRvdWJsZSB2YWx1ZVJhdGlvKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKG1heCA8PSBtaW4pCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBy
ZXR1cm4gKHZhbHVlIC0gbWluKSAvIChtYXggLSBtaW4pOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpIGNvbnN0IHsg
cmV0dXJuICIiOyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBleHRyYVF1aXJrc1N0eWxlU2hl
ZXQoKSBjb25zdCB7IHJldHVybiAiIjsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZXh0cmFQ
bHVnSW5zU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuICIiOyB9CisKKyAgICAvLyBUZXh0IHNl
bGVjdGlvbiBjb2xvcnMuCisgICAgdmlydHVhbCBXZWJDb2xvciBhY3RpdmVTZWxlY3Rpb25CYWNr
Z3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBXZWJDb2xvciBhY3RpdmVTZWxl
Y3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBXZWJDb2xvciBp
bmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IFdlYkNvbG9yIGluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QgPSAwOwor
CisgICAgLy8gTGlzdCBib3ggc2VsZWN0aW9uIGNvbG9ycworICAgIHZpcnR1YWwgV2ViQ29sb3Ig
YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIFdlYkNvbG9yIGFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBXZWJDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBXZWJDb2xvciBpbmFjdGl2
ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0
dWFsIFdlYkNvbG9yIGFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIFdlYkNvbG9yIGluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkg
Y29uc3QgPSAwOworCisgICAgdmlydHVhbCBXZWJDb2xvciBmb2N1c1JpbmdDb2xvcigpIGNvbnN0
ID0gMDsKKworICAgIHZpcnR1YWwgV2ViQ29sb3IgdGFwSGlnaGxpZ2h0Q29sb3IoKSBjb25zdCA9
IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCdXR0b24oV2ViQ2FudmFzKiwgU3RhdGUsIGNv
bnN0IFdlYlJlY3QmLCBjb25zdCBCdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRUZXh0RmllbGQoV2ViQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFdlYlJl
Y3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBXZWJTaXplIGdldENoZWNrYm94U2l6ZSgpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDaGVja2JveChXZWJDYW52YXMqLCBTdGF0
ZSwgY29uc3QgV2ViUmVjdCYsIGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1zJikgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgV2ViU2l6ZSBnZXRSYWRpb1NpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHBhaW50UmFkaW8oV2ViQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFdlYlJlY3QmLCBjb25z
dCBCdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRU
ZXh0QXJlYShXZWJDYW52YXMqLCBTdGF0ZSwgY29uc3QgV2ViUmVjdCYpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0TWVudUxpc3RQYWRkaW5nKGludCYgcGFkZGluZ1RvcCwgaW50JiBw
YWRkaW5nTGVmdCwgaW50JiBwYWRkaW5nQm90dG9tLCBpbnQmIHBhZGRpbmdSaWdodCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludE1lbnVMaXN0KFdlYkNhbnZhcyosIFN0YXRlLCBj
b25zdCBXZWJSZWN0JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludFByb2dyZXNz
QmFyKFdlYkNhbnZhcyosIFN0YXRlLCBjb25zdCBXZWJSZWN0JiwgY29uc3QgUHJvZ3Jlc3NCYXJF
eHRyYVBhcmFtcyYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBnZXRBbmltYXRpb25S
ZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZG91
YmxlIGdldEFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGdldElubmVyU3BpbkJ1dHRvblBhZGRpbmcoaW50JiBwYWRkaW5nVG9wLCBp
bnQmIHBhZGRpbmdMZWZ0LCBpbnQmIHBhZGRpbmdCb3R0b20sIGludCYgcGFkZGluZ1JpZ2h0KSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50SW5uZXJTcGluQnV0dG9uKFdlYkNhbnZh
cyosIFN0YXRlLCBjb25zdCBXZWJSZWN0JiwgY29uc3QgSW5uZXJTcGluQnV0dG9uRXh0cmFQYXJh
bXMmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50TWV0ZXIoV2ViQ2FudmFzKiwg
U3RhdGUsIGNvbnN0IFdlYlJlY3QmLCBjb25zdCBNZXRlckV4dHJhUGFyYW1zJikgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBwYWludFNsaWRlclRyYWNrKFdlYkNhbnZhcyosIFN0YXRlLCBj
b25zdCBXZWJSZWN0JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludFNsaWRlclRo
dW1iKFdlYkNhbnZhcyosIFN0YXRlLCBjb25zdCBXZWJSZWN0JikgY29uc3QgPSAwOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRm
b3JtL25peC9wdWJsaWMvV2ViVmVjdG9yLmggYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9X
ZWJWZWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NDZiN2U2NzgzMWI3OTNhYWVjMmNhNmI1NDYxOTRmMTA0
ZDM1MTc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2Vi
VmVjdG9yLmgKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlZlY3Rvcl9oCisjZGVmaW5lIFdl
YlZlY3Rvcl9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKworI2luY2x1ZGUgPGFsZ29yaXRo
bT4KKyNpbmNsdWRlIDxjYXNzZXJ0PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gQSBzaW1w
bGUgdmVjdG9yIGNsYXNzLgorLy8KKy8vIFNhbXBsZSB1c2FnZToKKy8vCisvLyAgIHZvaWQgRm9v
KFdlYlZlY3RvcjxpbnQ+JiByZXN1bHQpCisvLyAgIHsKKy8vICAgICAgIFdlYlZlY3RvcjxpbnQ+
IGRhdGEoMTApOworLy8gICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXRhLnNpemUoKTsg
KytpKQorLy8gICAgICAgICAgIGRhdGFbaV0gPSAuLi4KKy8vICAgICAgIHJlc3VsdC5zd2FwKGRh
dGEpOworLy8gICB9CisvLworLy8gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBhc3NpZ24gZnJvbSBv
dGhlciB0eXBlcyBvZiByYW5kb20gYWNjZXNzCisvLyBjb250YWluZXJzOgorLy8KKy8vICAgdm9p
ZCBGb28oY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBpbnB1dCkKKy8vICAgeworLy8g
ICAgICAgV2ViVmVjdG9yPFdlYkNTdHJpbmc+IGNzdHJpbmdzID0gaW5wdXQ7CisvLyAgICAgICAu
Li4KKy8vICAgfQorLy8KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgV2ViVmVjdG9yIHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOworCisgICAgfldlYlZlY3RvcigpCisg
ICAgeworICAgICAgICBkZXN0cm95KCk7CisgICAgfQorCisgICAgZXhwbGljaXQgV2ViVmVjdG9y
KHNpemVfdCBzaXplID0gMCkKKyAgICB7CisgICAgICAgIGluaXRpYWxpemUoc2l6ZSk7CisgICAg
fQorCisgICAgV2ViVmVjdG9yKGNvbnN0IFdlYlZlY3RvcjxUPiYgb3RoZXIpCisgICAgeworICAg
ICAgICBpbml0aWFsaXplRnJvbShvdGhlci5tX3B0ciwgb3RoZXIubV9zaXplKTsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQz4KKyAgICBXZWJWZWN0b3IoY29uc3QgQyYgb3RoZXIp
CisgICAgeworICAgICAgICBpbml0aWFsaXplRnJvbShvdGhlci5zaXplKCkgPyAmb3RoZXJbMF0g
OiAwLCBvdGhlci5zaXplKCkpOworICAgIH0KKworICAgIFdlYlZlY3RvciYgb3BlcmF0b3I9KGNv
bnN0IFdlYlZlY3RvciYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAodGhpcyAhPSAmb3RoZXIp
CisgICAgICAgICAgICBhc3NpZ24ob3RoZXIpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
fQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEM+CisgICAgV2ViVmVjdG9yPFQ+JiBvcGVyYXRv
cj0oY29uc3QgQyYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAodGhpcyAhPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IFdlYlZlY3RvcjxUPio+KCZvdGhlcikpCisgICAgICAgICAgICBhc3NpZ24o
b3RoZXIpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEM+CisgICAgdm9pZCBhc3NpZ24oY29uc3QgQyYgb3RoZXIpCisgICAgeworICAgICAg
ICBhc3NpZ24ob3RoZXIuc2l6ZSgpID8gJm90aGVyWzBdIDogMCwgb3RoZXIuc2l6ZSgpKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICB2b2lkIGFzc2lnbihjb25zdCBV
KiB2YWx1ZXMsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgZGVzdHJveSgpOworICAgICAg
ICBpbml0aWFsaXplRnJvbSh2YWx1ZXMsIHNpemUpOworICAgIH0KKworICAgIHNpemVfdCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gIW1fc2l6ZTsgfQorCisgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkKKyAgICB7Cisg
ICAgICAgIGFzc2VydChpIDwgbV9zaXplKTsKKyAgICAgICAgcmV0dXJuIG1fcHRyW2ldOworICAg
IH0KKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdAorICAgIHsKKyAgICAg
ICAgYXNzZXJ0KGkgPCBtX3NpemUpOworICAgICAgICByZXR1cm4gbV9wdHJbaV07CisgICAgfQor
CisgICAgYm9vbCBjb250YWlucyhjb25zdCBUJiB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zaXplOyBpKyspIHsKKyAgICAgICAgICAgIGlmICht
X3B0cltpXSA9PSB2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVCogZGF0YSgpIHsgcmV0dXJu
IG1fcHRyOyB9CisgICAgY29uc3QgVCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CisK
KyAgICB2b2lkIHN3YXAoV2ViVmVjdG9yPFQ+JiBvdGhlcikKKyAgICB7CisgICAgICAgIHN0ZDo6
c3dhcChtX3B0ciwgb3RoZXIubV9wdHIpOworICAgICAgICBzdGQ6OnN3YXAobV9zaXplLCBvdGhl
ci5tX3NpemUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGluaXRpYWxpemUoc2l6ZV90
IHNpemUpCisgICAgeworICAgICAgICBtX3NpemUgPSBzaXplOworICAgICAgICBpZiAoIW1fc2l6
ZSkKKyAgICAgICAgICAgIG1fcHRyID0gMDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBt
X3B0ciA9IHN0YXRpY19jYXN0PFQqPig6Om9wZXJhdG9yIG5ldyhzaXplb2YoVCkgKiBtX3NpemUp
KTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zaXplOyArK2kpCisgICAg
ICAgICAgICAgICAgbmV3ICgmbV9wdHJbaV0pIFQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHZvaWQgaW5pdGlhbGl6ZUZyb20oY29uc3QgVSog
dmFsdWVzLCBzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIG1fc2l6ZSA9IHNpemU7CisgICAg
ICAgIGlmICghbV9zaXplKQorICAgICAgICAgICAgbV9wdHIgPSAwOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIG1fcHRyID0gc3RhdGljX2Nhc3Q8VCo+KDo6b3BlcmF0b3IgbmV3KHNpemVv
ZihUKSAqIG1fc2l6ZSkpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Np
emU7ICsraSkKKyAgICAgICAgICAgICAgICBuZXcgKCZtX3B0cltpXSkgVCh2YWx1ZXNbaV0pOwor
ICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBkZXN0cm95KCkKKyAgICB7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zaXplOyArK2kpCisgICAgICAgICAgICBtX3B0cltpXS5+
VCgpOworICAgICAgICA6Om9wZXJhdG9yIGRlbGV0ZShtX3B0cik7CisgICAgfQorCisgICAgVCog
bV9wdHI7CisgICAgc2l6ZV90IG1fc2l6ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL0RlZmF1bHRXZWJU
aGVtZUVuZ2luZS5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3NyYy9EZWZhdWx0V2ViVGhlbWVF
bmdpbmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5MmRiODVhNDU3NmJlNWM2ZmE4YmRiOTIzZWM0ZGMyZjM4
NTMwODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3NyYy9EZWZhdWx0
V2ViVGhlbWVFbmdpbmUuY3BwCkBAIC0wLDAgKzEsMzcxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkRlZmF1bHRXZWJUaGVtZUVu
Z2luZS5oIgorCisjaW5jbHVkZSAicHVibGljL1dlYkNvbG9yLmgiCisjaW5jbHVkZSAicHVibGlj
L1dlYlJlY3QuaCIKKyNpbmNsdWRlICJwdWJsaWMvV2ViU2l6ZS5oIgorI2luY2x1ZGUgPGFsZ29y
aXRobT4KKyNpbmNsdWRlIDxjYWlyby9jYWlyby5oPgorI2luY2x1ZGUgPGNtYXRoPgorCitjb25z
dCBkb3VibGUgQkdDb2xvcjEgPSAweEY2IC8gMjU2LjA7Citjb25zdCBkb3VibGUgQkdDb2xvcjIg
PSAweERFIC8gMjU2LjA7Citjb25zdCBkb3VibGUgQm9yZGVyQ29sb3IgPSAweEE0IC8gMjU2LjA7
Citjb25zdCBkb3VibGUgQm9yZGVyT25Ib3ZlckNvbG9yID0gMHg3QSAvIDI1Ni4wOworY29uc3Qg
ZG91YmxlIENoZWNrQ29sb3IgPSAweDY2IC8gMjU2LjA7Citjb25zdCBkb3VibGUgVGV4dEZpZWxk
RGFya0JvcmRlckNvbG9yID0gMHg5QSAvIDI1Ni4wOworY29uc3QgZG91YmxlIFRleHRGaWVsZExp
Z2h0Qm9yZGVyQ29sb3IgPSAweEVFIC8gMjU2LjA7CisKK2NvbnN0IGludCBNZW51TGlzdEJvcmRl
ciA9IDU7Citjb25zdCBpbnQgTWVudUxpc3RBcnJvd1NpemUgPSA2OworCitjb25zdCBpbnQgSW5u
ZXJTcGluQnV0dG9uQm9yZGVyID0gMzsKK2NvbnN0IGludCBJbm5lclNwaW5CdXR0b25BcnJvd1Np
emUgPSAyOworCitjb25zdCBXZWJLaXQ6OlJHQkEzMiBUYXBIaWdoTGlnaHRDb2xvciA9IDB4NjYw
MDAwMDA7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJDb2xvciBEZWZhdWx0V2ViVGhlbWVF
bmdpbmU6OmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFdlYkNvbG9yKDAsIDAsIDI1NSk7Cit9CisKK1dlYkNvbG9yIERlZmF1bHRXZWJUaGVtZUVu
Z2luZTo6YWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gV2ViQ29sb3I6OndoaXRlOworfQorCitXZWJDb2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6
OmluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
V2ViQ29sb3IoMTc2LCAxNzYsIDE3Nik7Cit9CisKK1dlYkNvbG9yIERlZmF1bHRXZWJUaGVtZUVu
Z2luZTo6aW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJl
dHVybiBXZWJDb2xvcjo6YmxhY2s7Cit9CisKK1dlYkNvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2lu
ZTo6YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOworfQorCitXZWJDb2xvciBE
ZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3IoKSBjb25zdAoreworICAgIHJldHVybiBhY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3Io
KTsKK30KKworV2ViQ29sb3IgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjppbmFjdGl2ZUxpc3RCb3hT
ZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBpbmFjdGl2ZVNl
bGVjdGlvbkJhY2tncm91bmRDb2xvcigpOworfQorCitXZWJDb2xvciBEZWZhdWx0V2ViVGhlbWVF
bmdpbmU6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7Cit9CisKK1dl
YkNvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6YWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENv
bG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViQ29sb3IoMjU1LCAxNTAsIDUwKTsgLy8gT3Jh
bmdlLgorfQorCitXZWJDb2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmluYWN0aXZlVGV4dFNl
YXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViQ29sb3IoMjU1LCAy
NTUsIDApOyAvLyBZZWxsb3cuCit9CisKK1dlYkNvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6
Zm9jdXNSaW5nQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBXZWJDb2xvcjo6YmxhY2s7Cit9
CisKK1dlYkNvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6dGFwSGlnaGxpZ2h0Q29sb3IoKSBj
b25zdAoreworICAgIHJldHVybiBUYXBIaWdoTGlnaHRDb2xvcjsKK30KKworc3RhdGljIHZvaWQg
Z3JhZGllbnRGaWxsKGNhaXJvX3QqIGNhaXJvLCBkb3VibGUgeVN0YXJ0LCBkb3VibGUgeUxlbmd0
aCwgYm9vbCBpbnZlcnRlZCA9IGZhbHNlKQoreworICAgIGRvdWJsZSBncmFkU3RhcnRDb2xvciA9
IEJHQ29sb3IxOworICAgIGRvdWJsZSBncmFkRW5kQ29sb3IgPSBCR0NvbG9yMjsKKyAgICBpZiAo
aW52ZXJ0ZWQpCisgICAgICAgIHN0ZDo6c3dhcChncmFkU3RhcnRDb2xvciwgZ3JhZEVuZENvbG9y
KTsKKworICAgIGNhaXJvX3BhdHRlcm5fdCogZ3JhZGllbnQgPSBjYWlyb19wYXR0ZXJuX2NyZWF0
ZV9saW5lYXIoMCwgeVN0YXJ0LCAwLCB5U3RhcnQgKyB5TGVuZ3RoKTsKKyAgICBjYWlyb19wYXR0
ZXJuX2FkZF9jb2xvcl9zdG9wX3JnYihncmFkaWVudCwgMCwgZ3JhZFN0YXJ0Q29sb3IsIGdyYWRT
dGFydENvbG9yLCBncmFkU3RhcnRDb2xvcik7CisgICAgY2Fpcm9fcGF0dGVybl9hZGRfY29sb3Jf
c3RvcF9yZ2IoZ3JhZGllbnQsIDEsIGdyYWRFbmRDb2xvciwgZ3JhZEVuZENvbG9yLCBncmFkRW5k
Q29sb3IpOworICAgIGNhaXJvX3NldF9zb3VyY2UoY2Fpcm8sIGdyYWRpZW50KTsKKyAgICBjYWly
b19maWxsKGNhaXJvKTsKKyAgICBjYWlyb19wYXR0ZXJuX2Rlc3Ryb3koZ3JhZGllbnQpOworfQor
CitzdGF0aWMgdm9pZCBzZXR1cEJvcmRlcihjYWlyb190ICogY2Fpcm8sIFdlYlRoZW1lRW5naW5l
OjpTdGF0ZSBzdGF0ZSkKK3sKKyAgICBkb3VibGUgYm9yZGVyQ29sb3IgPSBzdGF0ZSA9PSBXZWJU
aGVtZUVuZ2luZTo6U3RhdGVIb3ZlciA/IEJvcmRlck9uSG92ZXJDb2xvciA6IEJvcmRlckNvbG9y
OworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhaXJvLCBib3JkZXJDb2xvciwgYm9yZGVyQ29s
b3IsIGJvcmRlckNvbG9yKTsKKyAgICBjYWlyb19zZXRfbGluZV93aWR0aChjYWlybywgMSk7Cit9
CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludEJ1dHRvbihXZWJDYW52YXMqIGNh
bnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFdlYlJlY3QmIHJlY3QsIGNvbnN0IEJ1dHRvbkV4dHJh
UGFyYW1zJikgY29uc3QKK3sKKyAgICBjYWlyb19zYXZlKGNhbnZhcyk7CisgICAgc2V0dXBCb3Jk
ZXIoY2FudmFzLCBzdGF0ZSk7CisgICAgLy8gQ2Fpcm8gdXNlcyBhIGNvb3JkaW5hdGUgc3lzdGVt
IG5vdCBiYXNlZCBvbiBwaXhlbCBjb29yZGluYXRlcywgc28KKyAgICAvLyB3ZSBuZWVkIHRvIGFk
ZCAgMC41IHRvIHggYW5kIHkgY29vcmQgb3IgdGhlIGxpbmUgd2lsbCBzdGF5IGJldHdlZW4KKyAg
ICAvLyB0d28gcGl4ZWxzIGluc3RlYWQgb2YgaW4gdGhlIG1pZGRsZSBvZiBhIHBpeGVsLgorICAg
IGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCArIDAuNSwgcmVjdC55ICsgMC41LCByZWN0
LndpZHRoLCByZWN0LmhlaWdodCk7CisgICAgY2Fpcm9fc3Ryb2tlX3ByZXNlcnZlKGNhbnZhcyk7
CisKKyAgICBncmFkaWVudEZpbGwoY2FudmFzLCByZWN0LnksIHJlY3QuaGVpZ2h0LCBzdGF0ZSA9
PSBTdGF0ZVByZXNzZWQpOworICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsKK30KKwordm9pZCBE
ZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50VGV4dEZpZWxkKFdlYkNhbnZhcyogY2FudmFzLCBT
dGF0ZSwgY29uc3QgV2ViUmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBjYWlyb19zYXZlKGNhbnZh
cyk7CisKKyAgICBjb25zdCBkb3VibGUgbGluZVdpZHRoID0gMjsKKyAgICBjb25zdCBkb3VibGUg
Y29ycmVjdGlvbiA9IGxpbmVXaWR0aCAvIDIuMDsKKworICAgIGNhaXJvX3NldF9saW5lX3dpZHRo
KGNhbnZhcywgbGluZVdpZHRoKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMsIFRl
eHRGaWVsZERhcmtCb3JkZXJDb2xvciwgVGV4dEZpZWxkRGFya0JvcmRlckNvbG9yLCBUZXh0Rmll
bGREYXJrQm9yZGVyQ29sb3IpOworICAgIGNhaXJvX21vdmVfdG8oY2FudmFzLCByZWN0LnggKyBj
b3JyZWN0aW9uLCByZWN0LnkgKyBjb3JyZWN0aW9uICsgcmVjdC5oZWlnaHQpOworICAgIGNhaXJv
X3JlbF9saW5lX3RvKGNhbnZhcywgMCwgLXJlY3QuaGVpZ2h0KTsKKyAgICBjYWlyb19yZWxfbGlu
ZV90byhjYW52YXMsIHJlY3Qud2lkdGgsIDApOworICAgIGNhaXJvX3N0cm9rZShjYW52YXMpOwor
CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2FudmFzLCBUZXh0RmllbGRMaWdodEJvcmRlckNv
bG9yLCBUZXh0RmllbGRMaWdodEJvcmRlckNvbG9yLCBUZXh0RmllbGRMaWdodEJvcmRlckNvbG9y
KTsKKyAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgY29ycmVjdGlvbiArIHJlY3Qu
d2lkdGgsIHJlY3QueSArIGNvcnJlY3Rpb24pOworICAgIGNhaXJvX3JlbF9saW5lX3RvKGNhbnZh
cywgMCwgcmVjdC5oZWlnaHQpOworICAgIGNhaXJvX3JlbF9saW5lX3RvKGNhbnZhcywgLXJlY3Qu
d2lkdGgsIDApOworICAgIGNhaXJvX3N0cm9rZShjYW52YXMpOworCisgICAgY2Fpcm9fcmVzdG9y
ZShjYW52YXMpOworfQorCit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRUZXh0QXJl
YShXZWJDYW52YXMqIGNhbnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFdlYlJlY3QmIHJlY3QpIGNv
bnN0Cit7CisgICAgcGFpbnRUZXh0RmllbGQoY2FudmFzLCBzdGF0ZSwgcmVjdCk7Cit9CisKK1dl
YlNpemUgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpnZXRDaGVja2JveFNpemUoKSBjb25zdAorewor
ICAgIHJldHVybiBXZWJTaXplKDEzLCAxMyk7Cit9CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5n
aW5lOjpwYWludENoZWNrYm94KFdlYkNhbnZhcyogY2FudmFzLCBTdGF0ZSBzdGF0ZSwgY29uc3Qg
V2ViUmVjdCYgcmVjdCwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMmIHBhcmFtKSBjb25zdAorewor
ICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKKyAgICBzZXR1cEJvcmRlcihjYW52YXMsIHN0YXRlKTsK
KyAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LnggKyAwLjUsIHJlY3QueSArIDAuNSwg
cmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOworICAgIGNhaXJvX3N0cm9rZV9wcmVzZXJ2ZShjYW52
YXMpOworCisgICAgZ3JhZGllbnRGaWxsKGNhbnZhcywgcmVjdC55LCByZWN0LmhlaWdodCwgc3Rh
dGUgPT0gU3RhdGVQcmVzc2VkKTsKKworICAgIGlmIChwYXJhbS5jaGVja2VkKSB7CisgICAgICAg
IGNvbnN0IGRvdWJsZSBib3JkZXIgPSAzOworICAgICAgICBjYWlyb19zZXRfbGluZV93aWR0aChj
YW52YXMsIDIpOworICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMsIENoZWNrQ29s
b3IsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IpOworICAgICAgICBjYWlyb19tb3ZlX3RvKGNhbnZh
cywgcmVjdC54ICsgMC41ICsgYm9yZGVyLCByZWN0LnkgKyAwLjUgKyByZWN0LmhlaWdodCAtIGJv
cmRlcik7CisgICAgICAgIGNhaXJvX3JlbF9saW5lX3RvKGNhbnZhcywgcmVjdC53aWR0aCAtIGJv
cmRlciAqIDIsIC1yZWN0LmhlaWdodCArIGJvcmRlciAqIDIpOworICAgICAgICBjYWlyb19tb3Zl
X3RvKGNhbnZhcywgcmVjdC54ICsgMC41ICsgYm9yZGVyLCByZWN0LnkgKyAwLjUgKyBib3JkZXIp
OworICAgICAgICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIHJlY3Qud2lkdGggLSBib3JkZXIg
KiAyLCByZWN0LmhlaWdodCAtIGJvcmRlciAqIDIpOworICAgICAgICBjYWlyb19zdHJva2UoY2Fu
dmFzKTsKKyAgICB9CisKKyAgICBjYWlyb19yZXN0b3JlKGNhbnZhcyk7Cit9CisKK1dlYlNpemUg
RGVmYXVsdFdlYlRoZW1lRW5naW5lOjpnZXRSYWRpb1NpemUoKSBjb25zdAoreworICAgIHJldHVy
biBXZWJTaXplKDEzLCAxMyk7Cit9CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWlu
dFJhZGlvKFdlYkNhbnZhcyogY2FudmFzLCBTdGF0ZSBzdGF0ZSwgY29uc3QgV2ViUmVjdCYgcmVj
dCwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMmIHBhcmFtKSBjb25zdAoreworICAgIGNhaXJvX3Nh
dmUoY2FudmFzKTsKKyAgICBzZXR1cEJvcmRlcihjYW52YXMsIHN0YXRlKTsKKyAgICBjYWlyb19h
cmMoY2FudmFzLCByZWN0LnggKyByZWN0LndpZHRoIC8gMi4wLCByZWN0LnkgKyByZWN0LmhlaWdo
dCAvIDIuMCwgcmVjdC53aWR0aCAvIDIuMCwgMCwgMiAqIE1fUEkpOworICAgIGNhaXJvX3N0cm9r
ZV9wcmVzZXJ2ZShjYW52YXMpOworCisgICAgZ3JhZGllbnRGaWxsKGNhbnZhcywgcmVjdC55LCBy
ZWN0LmhlaWdodCk7CisKKyAgICBpZiAocGFyYW0uY2hlY2tlZCkgeworICAgICAgICBjYWlyb19z
ZXRfc291cmNlX3JnYihjYW52YXMsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IsIENoZWNrQ29sb3Ip
OworICAgICAgICBjYWlyb19hcmMoY2FudmFzLCByZWN0LnggKyByZWN0LndpZHRoIC8gMi4wLCBy
ZWN0LnkgKyByZWN0LmhlaWdodCAvIDIuMCwgcmVjdC53aWR0aCAvIDQuMCwgMCwgMiAqIE1fUEkp
OworICAgICAgICBjYWlyb19maWxsKGNhbnZhcyk7CisgICAgfQorICAgIGNhaXJvX3Jlc3RvcmUo
Y2FudmFzKTsKK30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmdldE1lbnVMaXN0UGFk
ZGluZyhpbnQmIHBhZGRpbmdUb3AsIGludCYgcGFkZGluZ0xlZnQsIGludCYgcGFkZGluZ0JvdHRv
bSwgaW50JiBwYWRkaW5nUmlnaHQpIGNvbnN0Cit7CisgICAgcGFkZGluZ1RvcCA9IE1lbnVMaXN0
Qm9yZGVyOworICAgIHBhZGRpbmdMZWZ0ID0gTWVudUxpc3RCb3JkZXI7CisgICAgcGFkZGluZ0Jv
dHRvbSA9IE1lbnVMaXN0Qm9yZGVyOworICAgIHBhZGRpbmdSaWdodCA9IDIgKiBNZW51TGlzdEJv
cmRlciArIE1lbnVMaXN0QXJyb3dTaXplOworfQorCit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2lu
ZTo6cGFpbnRNZW51TGlzdChXZWJDYW52YXMqIGNhbnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFdl
YlJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOworICAgIHNldHVw
Qm9yZGVyKGNhbnZhcywgc3RhdGUpOworICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3Qu
eCArIDAuNSwgcmVjdC55ICsgMC41LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7CisgICAgY2Fp
cm9fc3Ryb2tlX3ByZXNlcnZlKGNhbnZhcyk7CisKKyAgICBncmFkaWVudEZpbGwoY2FudmFzLCBy
ZWN0LnksIHJlY3QuaGVpZ2h0LCBzdGF0ZSA9PSBTdGF0ZVByZXNzZWQpOworCisgICAgY2Fpcm9f
bW92ZV90byhjYW52YXMsIHJlY3QueCArIHJlY3Qud2lkdGggLSBNZW51TGlzdEFycm93U2l6ZSAt
IE1lbnVMaXN0Qm9yZGVyLCByZWN0LnkgKyAxICsgcmVjdC5oZWlnaHQgLyAyIC0gTWVudUxpc3RB
cnJvd1NpemUgLyAyKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMsIENoZWNrQ29s
b3IsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IpOworICAgIGNhaXJvX3JlbF9saW5lX3RvKGNhbnZh
cywgTWVudUxpc3RBcnJvd1NpemUsIDApOworICAgIGNhaXJvX3JlbF9saW5lX3RvKGNhbnZhcywg
LU1lbnVMaXN0QXJyb3dTaXplIC8gMiwgTWVudUxpc3RBcnJvd1NpemUpOworICAgIGNhaXJvX2Ns
b3NlX3BhdGgoY2FudmFzKTsKKyAgICBjYWlyb19maWxsKGNhbnZhcyk7CisKKyAgICBjYWlyb19y
ZXN0b3JlKGNhbnZhcyk7Cit9CisKK1dlYlNpemUgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpnZXRQ
cm9ncmVzc0JhclNpemUoKSBjb25zdAoreworICAgIHJldHVybiBXZWJTaXplKDIwMDAsIDMwMCk7
Cit9CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludFByb2dyZXNzQmFyKFdlYkNh
bnZhcyogY2FudmFzLCBTdGF0ZSBzdGF0ZSwgY29uc3QgV2ViUmVjdCYgcmVjdCwgY29uc3QgUHJv
Z3Jlc3NCYXJFeHRyYVBhcmFtcyYgcGFyYW1zKSBjb25zdAoreworICAgIGNhaXJvX3NhdmUoY2Fu
dmFzKTsKKworICAgIGlmIChwYXJhbXMuaXNEZXRlcm1pbmF0ZSkgeworICAgICAgICAvLyBCYWNr
Z3JvdW5kCisgICAgICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUpOworICAgICAgICBjYWly
b19yZWN0YW5nbGUoY2FudmFzLCByZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWln
aHQpOworICAgICAgICBjYWlyb19maWxsKGNhbnZhcyk7CisgICAgICAgIC8vIFByb2dyZXNzCisg
ICAgICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRo
ICogcGFyYW1zLnBvc2l0aW9uLCByZWN0LmhlaWdodCk7CisgICAgICAgIGdyYWRpZW50RmlsbChj
YW52YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNhaXJv
X3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRoLCByZWN0LmhlaWdo
dCk7CisgICAgICAgIGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQsIHRy
dWUpOworICAgIH0KKworICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsKK30KKworLy8gVGhlc2Ug
dmFsdWVzIGhhdmUgYmVlbiBjb3BpZWQgZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAK
K3N0YXRpYyBjb25zdCBpbnQgcHJvZ3Jlc3NBY3Rpdml0eUJsb2NrcyA9IDU7CitzdGF0aWMgY29u
c3QgaW50IHByb2dyZXNzQW5pbWF0aW9uRnJhbWVzID0gMTA7CitzdGF0aWMgY29uc3QgZG91Ymxl
IHByb2dyZXNzQW5pbWF0aW9uSW50ZXJ2YWwgPSAwLjEyNTsKKworZG91YmxlIERlZmF1bHRXZWJU
aGVtZUVuZ2luZTo6Z2V0QW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHByb2dyZXNzQW5pbWF0aW9uSW50ZXJ2YWw7Cit9CisKK2RvdWJs
ZSBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmdldEFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NC
YXIoKSBjb25zdAoreworICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbkludGVydmFsICogcHJv
Z3Jlc3NBbmltYXRpb25GcmFtZXMgKiAyOyAvLyAiMiIgZm9yIGJhY2sgYW5kIGZvcnRoOworfQor
Cit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6Z2V0SW5uZXJTcGluQnV0dG9uUGFkZGluZyhp
bnQmIHBhZGRpbmdUb3AsIGludCYgcGFkZGluZ0xlZnQsIGludCYgcGFkZGluZ0JvdHRvbSwgaW50
JiBwYWRkaW5nUmlnaHQpIGNvbnN0Cit7CisgICAgcGFkZGluZ1RvcCA9IElubmVyU3BpbkJ1dHRv
bkJvcmRlcjsKKyAgICBwYWRkaW5nTGVmdCA9IElubmVyU3BpbkJ1dHRvbkJvcmRlcjsKKyAgICBw
YWRkaW5nQm90dG9tID0gSW5uZXJTcGluQnV0dG9uQm9yZGVyOworICAgIHBhZGRpbmdSaWdodCA9
IDIgKiBJbm5lclNwaW5CdXR0b25Cb3JkZXIgKyBJbm5lclNwaW5CdXR0b25BcnJvd1NpemU7Cit9
CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludElubmVyU3BpbkJ1dHRvbihXZWJD
YW52YXMqIGNhbnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFdlYlJlY3QmIHJlY3QsIGNvbnN0IElu
bmVyU3BpbkJ1dHRvbkV4dHJhUGFyYW1zJiBwYXJhbSkgY29uc3QKK3sKKyAgICBkb3VibGUgcmVj
dEhhbGZIZWlnaHQgPSByZWN0LmhlaWdodCAvIDI7CisKKyAgICBjYWlyb19zYXZlKGNhbnZhcyk7
CisgICAgc2V0dXBCb3JkZXIoY2FudmFzLCBzdGF0ZSk7CisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNh
bnZhcywgcmVjdC54ICsgMC41LCByZWN0LnkgKyAxLjUsIHJlY3Qud2lkdGgsIHJlY3RIYWxmSGVp
Z2h0KTsKKyAgICBjYWlyb19zdHJva2VfcHJlc2VydmUoY2FudmFzKTsKKworICAgIGdyYWRpZW50
RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdEhhbGZIZWlnaHQsIHN0YXRlID09IFN0YXRlUHJlc3Nl
ZCAmJiBwYXJhbS5zcGluVXApOworCisgICAgc2V0dXBCb3JkZXIoY2FudmFzLCBzdGF0ZSk7Cisg
ICAgY2Fpcm9fcmVjdGFuZ2xlKGNhbnZhcywgcmVjdC54ICsgMC41LCByZWN0LnkgKyAwLjUgKyBy
ZWN0SGFsZkhlaWdodCwgcmVjdC53aWR0aCwgcmVjdEhhbGZIZWlnaHQpOworICAgIGNhaXJvX3N0
cm9rZV9wcmVzZXJ2ZShjYW52YXMpOworCisgICAgZ3JhZGllbnRGaWxsKGNhbnZhcywgcmVjdC55
ICsgcmVjdEhhbGZIZWlnaHQsIHJlY3RIYWxmSGVpZ2h0LCBzdGF0ZSA9PSBTdGF0ZVByZXNzZWQg
JiYgIXBhcmFtLnNwaW5VcCk7CisKKyAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54ICsg
cmVjdC53aWR0aCAtIElubmVyU3BpbkJ1dHRvbkFycm93U2l6ZSAtIElubmVyU3BpbkJ1dHRvbkJv
cmRlciAqIDIsIHJlY3QueSArIHJlY3RIYWxmSGVpZ2h0ICsgcmVjdC5oZWlnaHQgLyA0IC0gSW5u
ZXJTcGluQnV0dG9uQXJyb3dTaXplICsgMS41KTsKKyAgICBjYWlyb19zZXRfc291cmNlX3JnYihj
YW52YXMsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IpOworICAgIGNhaXJvX3Jl
bF9saW5lX3RvKGNhbnZhcywgTWVudUxpc3RBcnJvd1NpemUsIDApOworICAgIGNhaXJvX3JlbF9s
aW5lX3RvKGNhbnZhcywgLU1lbnVMaXN0QXJyb3dTaXplIC8gMiwgTWVudUxpc3RBcnJvd1NpemUp
OworICAgIGNhaXJvX2Nsb3NlX3BhdGgoY2FudmFzKTsKKworICAgIGNhaXJvX21vdmVfdG8oY2Fu
dmFzLCByZWN0LnggKyByZWN0LndpZHRoIC0gSW5uZXJTcGluQnV0dG9uQXJyb3dTaXplIC0gSW5u
ZXJTcGluQnV0dG9uQm9yZGVyICogMiwgcmVjdC55ICsgcmVjdC5oZWlnaHQgLyA0ICsgSW5uZXJT
cGluQnV0dG9uQXJyb3dTaXplKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMsIENo
ZWNrQ29sb3IsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IpOworICAgIGNhaXJvX3JlbF9saW5lX3Rv
KGNhbnZhcywgTWVudUxpc3RBcnJvd1NpemUsIDApOworICAgIGNhaXJvX3JlbF9saW5lX3RvKGNh
bnZhcywgLU1lbnVMaXN0QXJyb3dTaXplIC8gMiwgLU1lbnVMaXN0QXJyb3dTaXplKTsKKyAgICBj
YWlyb19jbG9zZV9wYXRoKGNhbnZhcyk7CisKKyAgICBjYWlyb19maWxsKGNhbnZhcyk7Cit9CisK
K3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludE1ldGVyKFdlYkNhbnZhcyogY2FudmFz
LCBTdGF0ZSBzdGF0ZSwgY29uc3QgV2ViUmVjdCYgcmVjdCwgY29uc3QgTWV0ZXJFeHRyYVBhcmFt
cyYgcGFyYW1zKSBjb25zdAoreworICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKKworICAgIC8vIEJh
Y2tncm91bmQKKyAgICBzZXR1cEJvcmRlcihjYW52YXMsIHN0YXRlKTsKKyAgICBjYWlyb19yZWN0
YW5nbGUoY2FudmFzLCByZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOwor
ICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsKKyAgICAvLyBNZXRlcgorICAgIGNhaXJvX3JlY3Rhbmds
ZShjYW52YXMsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRoICogcGFyYW1zLnZhbHVlUmF0aW8o
KSwgcmVjdC5oZWlnaHQpOworICAgIGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5o
ZWlnaHQpOworCisgICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOworfQorCitjb25zdCBpbnQgU2xp
ZGVyVHJhY2tIZWlnaHQgPSA2OworCit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRT
bGlkZXJUcmFjayhXZWJDYW52YXMqIGNhbnZhcywgU3RhdGUsIGNvbnN0IFdlYlJlY3QmIHJlY3Qp
IGNvbnN0Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOworICAgIGNhaXJvX3JlY3RhbmdsZShj
YW52YXMsIHJlY3QueCwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0IC0gU2xpZGVyVHJhY2tIZWlnaHQp
IC8gMi4wLCByZWN0LndpZHRoLCBTbGlkZXJUcmFja0hlaWdodCk7CisgICAgZ3JhZGllbnRGaWxs
KGNhbnZhcywgcmVjdC55LCByZWN0LmhlaWdodCwgdHJ1ZSk7CisgICAgY2Fpcm9fcmVzdG9yZShj
YW52YXMpOworfQorCit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRTbGlkZXJUaHVt
YihXZWJDYW52YXMqIGNhbnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFdlYlJlY3QmIHJlY3QpIGNv
bnN0Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOworICAgIHNldHVwQm9yZGVyKGNhbnZhcywg
c3RhdGUpOworICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVjdC55LCByZWN0
LndpZHRoLCByZWN0LmhlaWdodCk7CisgICAgY2Fpcm9fc3Ryb2tlX3ByZXNlcnZlKGNhbnZhcyk7
CisgICAgZ3JhZGllbnRGaWxsKGNhbnZhcywgcmVjdC55LCByZWN0LmhlaWdodCwgc3RhdGUgPT0g
U3RhdGVQcmVzc2VkKTsKKyAgICBjYWlyb19yZXN0b3JlKGNhbnZhcyk7Cit9CisKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL0RlZmF1bHRXZWJUaGVtZUVuZ2luZS5oIGIv
U291cmNlL1BsYXRmb3JtL25peC9zcmMvRGVmYXVsdFdlYlRoZW1lRW5naW5lLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uN2MzN2JiOTFkYzc2ZmFmZGZkNzU5ZGM5ZmE1ZGJkNWY1NDFhMTM5MAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL0RlZmF1bHRXZWJUaGVtZUVuZ2luZS5oCkBA
IC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgRGVmYXVsdFdl
YlRoZW1lRW5naW5lX2gKKyNkZWZpbmUgRGVmYXVsdFdlYlRoZW1lRW5naW5lX2gKKworI2luY2x1
ZGUgInB1YmxpYy9XZWJUaGVtZUVuZ2luZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgRGVmYXVsdFdlYlRoZW1lRW5naW5lIDogcHVibGljIFdlYlRoZW1lRW5naW5lIHsKK3B1Ymxp
YzoKKyAgICAvLyBUZXh0IHNlbGVjdGlvbiBjb2xvcnMuCisgICAgdmlydHVhbCBXZWJDb2xvciBh
Y3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYkNv
bG9yIGFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwg
V2ViQ29sb3IgaW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFdlYkNvbG9yIGluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7
CisKKyAgICAvLyBMaXN0IGJveCBzZWxlY3Rpb24gY29sb3JzCisgICAgdmlydHVhbCBXZWJDb2xv
ciBhY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmly
dHVhbCBXZWJDb2xvciBhY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29u
c3Q7CisgICAgdmlydHVhbCBXZWJDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYkNvbG9yIGluYWN0aXZlTGlzdEJveFNl
bGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OworCisgICAgdmlydHVhbCBXZWJDb2xvciBh
Y3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYkNv
bG9yIGluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3Q7CisKKyAgICB2aXJ0
dWFsIFdlYkNvbG9yIGZvY3VzUmluZ0NvbG9yKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIFdlYkNv
bG9yIHRhcEhpZ2hsaWdodENvbG9yKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRC
dXR0b24oV2ViQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFdlYlJlY3QmLCBjb25zdCBCdXR0b25FeHRy
YVBhcmFtcyYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYWludFRleHRGaWVsZChXZWJDYW52
YXMqLCBTdGF0ZSwgY29uc3QgV2ViUmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYWlu
dFRleHRBcmVhKFdlYkNhbnZhcyosIFN0YXRlLCBjb25zdCBXZWJSZWN0JikgY29uc3Q7CisgICAg
dmlydHVhbCBXZWJTaXplIGdldENoZWNrYm94U2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBwYWludENoZWNrYm94KFdlYkNhbnZhcyosIFN0YXRlLCBjb25zdCBXZWJSZWN0JiwgY29uc3Qg
QnV0dG9uRXh0cmFQYXJhbXMmKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYlNpemUgZ2V0UmFkaW9T
aXplKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBhaW50UmFkaW8oV2ViQ2FudmFzKiwgU3Rh
dGUsIGNvbnN0IFdlYlJlY3QmLCBjb25zdCBCdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBwYWludE1lbnVMaXN0KFdlYkNhbnZhcyAqLCBTdGF0ZSwgY29uc3QgV2Vi
UmVjdCAmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0TWVudUxpc3RQYWRkaW5nKGludCYg
cGFkZGluZ1RvcCwgaW50JiBwYWRkaW5nTGVmdCwgaW50JiBwYWRkaW5nQm90dG9tLCBpbnQmIHBh
ZGRpbmdSaWdodCkgY29uc3Q7CisgICAgdmlydHVhbCBXZWJTaXplIGdldFByb2dyZXNzQmFyU2l6
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYWludFByb2dyZXNzQmFyKFdlYkNhbnZhcyos
IFN0YXRlLCBjb25zdCBXZWJSZWN0JiwgY29uc3QgUHJvZ3Jlc3NCYXJFeHRyYVBhcmFtcyYpIGNv
bnN0OworICAgIHZpcnR1YWwgZG91YmxlIGdldEFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJv
Z3Jlc3NCYXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBnZXRBbmltYXRpb25EdXJhdGlv
bkZvclByb2dyZXNzQmFyKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBhaW50SW5uZXJTcGlu
QnV0dG9uKFdlYkNhbnZhcyAqLCBTdGF0ZSwgY29uc3QgV2ViUmVjdCAmLCBjb25zdCBJbm5lclNw
aW5CdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBnZXRJbm5lclNw
aW5CdXR0b25QYWRkaW5nKGludCYgcGFkZGluZ1RvcCwgaW50JiBwYWRkaW5nTGVmdCwgaW50JiBw
YWRkaW5nQm90dG9tLCBpbnQmIHBhZGRpbmdSaWdodCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHBhaW50TWV0ZXIoV2ViQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFdlYlJlY3QmLCBjb25zdCBNZXRl
ckV4dHJhUGFyYW1zJikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBhaW50U2xpZGVyVHJhY2so
V2ViQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFdlYlJlY3QmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRTbGlkZXJUaHVtYihXZWJDYW52YXMqLCBTdGF0ZSwgY29uc3QgV2ViUmVjdCYpIGNv
bnN0OworfTsKKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3Ny
Yy9QbGF0Zm9ybS5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3NyYy9QbGF0Zm9ybS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNGQ0MmZkZGE4NTI3YmEzMWVhZmM3MDNkOTUyY2E5NjUxMjI5M2VkNAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL1BsYXRmb3JtLmNwcApAQCAtMCww
ICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJwdWJs
aWMvUGxhdGZvcm0uaCIKKworI2luY2x1ZGUgIkRlZmF1bHRXZWJUaGVtZUVuZ2luZS5oIgorCisj
aW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBFbXB0eVBsYXRmb3JtIDogcHVibGljIFBsYXRmb3Jt
IHsKK3B1YmxpYzoKKyAgICB+RW1wdHlQbGF0Zm9ybSgpIHsgfQorfTsKK3N0YXRpYyBXVEY6Ok93
blB0cjxFbXB0eVBsYXRmb3JtPiBzX2VtcHR5UGxhdGZvcm0gPSBXVEY6OmFkb3B0UHRyKG5ldyBF
bXB0eVBsYXRmb3JtKCkpOworCitzdGF0aWMgUGxhdGZvcm0qIHNfcGxhdGZvcm0gPSBzX2VtcHR5
UGxhdGZvcm0uZ2V0KCk7CisKK3ZvaWQgUGxhdGZvcm06OmluaXRpYWxpemUoUGxhdGZvcm0qIHBs
YXRmb3JtKQoreworICAgIHNfcGxhdGZvcm0gPSBwbGF0Zm9ybTsKK30KKwordm9pZCBQbGF0Zm9y
bTo6c2h1dGRvd24oKQoreworICAgIHNfcGxhdGZvcm0gPSAwOworfQorCitQbGF0Zm9ybSogUGxh
dGZvcm06OmN1cnJlbnQoKQoreworICAgIHJldHVybiBzX3BsYXRmb3JtOworfQorCitXZWJUaGVt
ZUVuZ2luZSogUGxhdGZvcm06OnRoZW1lRW5naW5lKCkKK3sKKyAgICBzdGF0aWMgRGVmYXVsdFdl
YlRoZW1lRW5naW5lIHRoZW1lOworICAgIHJldHVybiAmdGhlbWU7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206015</attachid>
            <date>2013-07-03 11:54:56 -0700</date>
            <delta_ts>2013-07-03 11:56:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118331-20130703155253.patch</filename>
            <type>text/plain</type>
            <size>100694</size>
            <attacher name="Marcelo Lira">marcelo.lira</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUyMjk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBlY2I4NTg4N2RmMjc4
ZWEwOGU4ODM1ZjBlYjI4MTJkMmExZTE3MzNkLi44MzY2ODRhZDYyOTIyODZjMThjZDI3YTkwMjg0
ZDBmYWRmNDYwODJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTcgQEAKKzIwMTMtMDctMDMg
IE1hcmNlbG8gTGlyYSAgPG1hcmNlbG8ubGlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIEFk
ZGluZyBOaXggZmlsZXMgaW4gU291cmNlL1BsYXRmb3JtIHRvIHRydW5rCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTgzMzEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG5peC9wdWJsaWMvUGxhdGZvcm0u
aDogQWRkZWQuCisgICAgICAgICogbml4L3B1YmxpYy9XZWJBdWRpb0J1cy5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2ViQXVkaW9CdXM6OldlYkF1ZGlvQnVzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQXVkaW9CdXM6On5XZWJBdWRpb0J1cyk6CisgICAgICAgICogbml4L3B1YmxpYy9XZWJB
dWRpb0RldmljZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQXVkaW9EZXZpY2U6OlJl
bmRlckNhbGxiYWNrOjpyZW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdWRpb0RldmljZTo6
UmVuZGVyQ2FsbGJhY2s6On5SZW5kZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1
ZGlvRGV2aWNlOjp+V2ViQXVkaW9EZXZpY2UpOgorICAgICAgICAqIG5peC9wdWJsaWMvV2ViQ2Fu
dmFzLmg6IEFkZGVkLgorICAgICAgICAqIG5peC9wdWJsaWMvV2ViQ29sb3IuaDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYkNvbG9yOjpXZWJDb2xvcik6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNvbG9yOjpvcGVyYXRvciBSR0JBMzIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb2xvcjo6cik6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvbG9yOjpnKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29s
b3I6OmIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb2xvcjo6YSk6CisgICAgICAgIChXZWJLaXQ6
Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViS2l0OjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBu
aXgvcHVibGljL1dlYkNvbW1vbi5oOiBBZGRlZC4KKyAgICAgICAgKiBuaXgvcHVibGljL1dlYkRh
dGEuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkRhdGE6On5XZWJEYXRhKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRGF0YTo6V2ViRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGE6
Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGE6OmlzRW1wdHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJEYXRhOjppc051bGwpOgorICAgICAgICAqIG5peC9wdWJsaWMvV2ViRkZU
RnJhbWUuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkZGVEZyYW1lOjp+V2ViRkZURnJh
bWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJGRlRGcmFtZTo6ZG9GRlQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGRlRGcmFtZTo6ZG9JbnZlcnNlRkZUKToKKyAgICAgICAgKFdlYktpdDo6V2ViRkZU
RnJhbWU6Om11bHRpcGx5KToKKyAgICAgICAgKFdlYktpdDo6V2ViRkZURnJhbWU6OmZyZXF1ZW5j
eURvbWFpblNhbXBsZUNvdW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViRkZURnJhbWU6OnJlYWxE
YXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViRkZURnJhbWU6OmltYWdEYXRhKToKKyAgICAgICAg
KiBuaXgvcHVibGljL1dlYkdhbWVwYWQuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkdh
bWVwYWQ6OldlYkdhbWVwYWQpOgorICAgICAgICAqIG5peC9wdWJsaWMvV2ViR2FtZXBhZHMuaDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkdhbWVwYWRzOjpXZWJHYW1lcGFkcyk6CisgICAg
ICAgICogbml4L3B1YmxpYy9XZWJSZWN0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJS
ZWN0OjpXZWJSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVjdDo6b3BlcmF0b3I9KToKKyAg
ICAgICAgKiBuaXgvcHVibGljL1dlYlNpemUuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlNpemU6OmlzRW1wdHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJTaXplOjpXZWJTaXplKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViU2l6ZTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
U2l6ZTo6b3BlcmF0b3IgV2ViQ29yZTo6SW50U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoV2ViS2l0OjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBuaXgvcHVi
bGljL1dlYlRoZW1lRW5naW5lLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJUaGVtZUVu
Z2luZTo6TWV0ZXJFeHRyYVBhcmFtczo6dmFsdWVSYXRpbyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlRoZW1lRW5naW5lOjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViVGhlbWVFbmdpbmU6OmV4dHJhUXVpcmtzU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlRoZW1lRW5naW5lOjpleHRyYVBsdWdJbnNTdHlsZVNoZWV0KToKKyAgICAgICAgKiBuaXgv
cHVibGljL1dlYlZlY3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmVjdG9yOjp+
V2ViVmVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmVjdG9yOjpXZWJWZWN0b3IpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWZWN0b3I6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZlY3Rvcjo6YXNzaWduKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmVjdG9yOjpzaXplKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmVjdG9yOjppc0VtcHR5KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VmVjdG9yOjpvcGVyYXRvcltdKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmVjdG9yOjpjb250YWlu
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZlY3Rvcjo6ZGF0YSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZlY3Rvcjo6c3dhcCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZlY3Rvcjo6aW5pdGlhbGl6
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZlY3Rvcjo6aW5pdGlhbGl6ZUZyb20pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWZWN0b3I6OmRlc3Ryb3kpOgorICAgICAgICAqIG5peC9zcmMvRGVmYXVs
dFdlYlRoZW1lRW5naW5lLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkRlZmF1bHRXZWJU
aGVtZUVuZ2luZTo6YWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdl
YktpdDo6RGVmYXVsdFdlYlRoZW1lRW5naW5lOjphY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3IpOgorICAgICAgICAoV2ViS2l0OjpEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmluYWN0aXZlU2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYktpdDo6RGVmYXVsdFdlYlRoZW1l
RW5naW5lOjppbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcik6CisgICAgICAgIChXZWJL
aXQ6OkRlZmF1bHRXZWJUaGVtZUVuZ2luZTo6YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcik6CisgICAgICAgIChXZWJLaXQ6OkRlZmF1bHRXZWJUaGVtZUVuZ2luZTo6YWN0aXZl
TGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcik6CisgICAgICAgIChXZWJLaXQ6OkRlZmF1
bHRXZWJUaGVtZUVuZ2luZTo6aW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9y
KToKKyAgICAgICAgKFdlYktpdDo6RGVmYXVsdFdlYlRoZW1lRW5naW5lOjppbmFjdGl2ZUxpc3RC
b3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViS2l0OjpEZWZhdWx0V2Vi
VGhlbWVFbmdpbmU6OmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcik6CisgICAgICAgIChX
ZWJLaXQ6OkRlZmF1bHRXZWJUaGVtZUVuZ2luZTo6aW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0
Q29sb3IpOgorICAgICAgICAoV2ViS2l0OjpEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmZvY3VzUmlu
Z0NvbG9yKToKKyAgICAgICAgKFdlYktpdDo6RGVmYXVsdFdlYlRoZW1lRW5naW5lOjp0YXBIaWdo
bGlnaHRDb2xvcik6CisgICAgICAgIChXZWJLaXQ6OmdyYWRpZW50RmlsbCk6CisgICAgICAgIChX
ZWJLaXQ6OnNldHVwQm9yZGVyKToKKyAgICAgICAgKFdlYktpdDo6RGVmYXVsdFdlYlRoZW1lRW5n
aW5lOjpwYWludEJ1dHRvbik6CisgICAgICAgIChXZWJLaXQ6OkRlZmF1bHRXZWJUaGVtZUVuZ2lu
ZTo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViS2l0OjpEZWZhdWx0V2ViVGhlbWVFbmdp
bmU6OnBhaW50VGV4dEFyZWEpOgorICAgICAgICAoV2ViS2l0OjpEZWZhdWx0V2ViVGhlbWVFbmdp
bmU6OmdldENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OkRlZmF1bHRXZWJUaGVtZUVu
Z2luZTo6cGFpbnRDaGVja2JveCk6CisgICAgICAgIChXZWJLaXQ6OkRlZmF1bHRXZWJUaGVtZUVu
Z2luZTo6Z2V0UmFkaW9TaXplKToKKyAgICAgICAgKFdlYktpdDo6RGVmYXVsdFdlYlRoZW1lRW5n
aW5lOjpwYWludFJhZGlvKToKKyAgICAgICAgKFdlYktpdDo6RGVmYXVsdFdlYlRoZW1lRW5naW5l
OjpnZXRNZW51TGlzdFBhZGRpbmcpOgorICAgICAgICAoV2ViS2l0OjpEZWZhdWx0V2ViVGhlbWVF
bmdpbmU6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViS2l0OjpEZWZhdWx0V2ViVGhlbWVF
bmdpbmU6OmdldFByb2dyZXNzQmFyU2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OkRlZmF1bHRXZWJU
aGVtZUVuZ2luZTo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJLaXQ6OkRlZmF1bHRX
ZWJUaGVtZUVuZ2luZTo6Z2V0QW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0Jhcik6
CisgICAgICAgIChXZWJLaXQ6OkRlZmF1bHRXZWJUaGVtZUVuZ2luZTo6Z2V0QW5pbWF0aW9uRHVy
YXRpb25Gb3JQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJLaXQ6OkRlZmF1bHRXZWJUaGVtZUVu
Z2luZTo6Z2V0SW5uZXJTcGluQnV0dG9uUGFkZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkRlZmF1
bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRJbm5lclNwaW5CdXR0b24pOgorICAgICAgICAoV2ViS2l0
OjpEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50TWV0ZXIpOgorICAgICAgICAoV2ViS2l0OjpE
ZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViS2l0
OjpEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAqIG5p
eC9zcmMvRGVmYXVsdFdlYlRoZW1lRW5naW5lLmg6IEFkZGVkLgorICAgICAgICAqIG5peC9zcmMv
UGxhdGZvcm0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6RW1wdHlQbGF0Zm9ybTo6fkVt
cHR5UGxhdGZvcm0pOgorICAgICAgICAoV2ViS2l0OjpQbGF0Zm9ybTo6aW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsYXRmb3JtOjpzaHV0ZG93bik6CisgICAgICAgIChXZWJLaXQ6OlBs
YXRmb3JtOjpjdXJyZW50KToKKyAgICAgICAgKFdlYktpdDo6UGxhdGZvcm06OnRoZW1lRW5naW5l
KToKKwogMjAxMy0wNi0xNCAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCBHVEsgYnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDM1YzlhODI4
MjBiMWZkMDdiOThhNTE1YTFiYjYzZGY4MWE3OGQ2MTAuLjM0N2NmYTRjNWM0MWIyZGM1MWUzNWVl
YjI4YzU2ODEwNDY0NjdmMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAxMy0wNy0w
MyAgTWFyY2VsbyBMaXJhICA8bWFyY2Vsby5saXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAg
QWRkaW5nIE5peCBmaWxlcyBpbiBTb3VyY2UvUGxhdGZvcm0gdG8gdHJ1bmsKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODMzMQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEp
LgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbml4L0F1ZGlvQnVzTml4LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVBdWRpb0ZpbGVEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvQnVzOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVCdXNGcm9tSW5NZW1vcnlBdWRpb0ZpbGUpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlv
L25peC9BdWRpb0Rlc3RpbmF0aW9uTml4LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpB
dWRpb0Rlc3RpbmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5h
dGlvbk5peDo6QXVkaW9EZXN0aW5hdGlvbk5peCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rl
c3RpbmF0aW9uTml4Ojp+QXVkaW9EZXN0aW5hdGlvbk5peCk6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb0Rlc3RpbmF0aW9uTml4OjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3Rp
bmF0aW9uTml4OjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb246Omhh
cmR3YXJlU2FtcGxlUmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uOjpt
YXhDaGFubmVsQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbk5peDo6
cmVuZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25OaXg6OnByb3ZpZGVJ
bnB1dCk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbml4L0F1ZGlvRGVzdGluYXRpb25OaXgu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uTml4Ojppc1BsYXlp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbk5peDo6c2FtcGxlUmF0ZSk6
CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbml4L0ZGVEZyYW1lTml4LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6RkZURnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6
RkZURnJhbWU6On5GRlRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6bXVsdGlw
bHkpOgorICAgICAgICAoV2ViQ29yZTo6RkZURnJhbWU6OmRvRkZUKToKKyAgICAgICAgKFdlYkNv
cmU6OkZGVEZyYW1lOjpkb0ludmVyc2VGRlQpOgorICAgICAgICAoV2ViQ29yZTo6RkZURnJhbWU6
OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6RkZURnJhbWU6OmNsZWFudXApOgorICAg
ICAgICAoV2ViQ29yZTo6RkZURnJhbWU6OnNjYWxlUGxhbmFyRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpGRlRGcmFtZTo6cmVhbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RkZURnJhbWU6Omlt
YWdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uaXgvc3VwcG9ydC9XZWJBdWRpb0J1cy5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJBdWRpb0J1c1ByaXZhdGU6OldlYkF1ZGlvQnVz
UHJpdmF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1ZGlvQnVzOjppbml0aWFsaXplKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQXVkaW9CdXM6OnJlc2l6ZVNtYWxsZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJBdWRpb0J1czo6cmVzZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdWRpb0J1czo6
bnVtYmVyT2ZDaGFubmVscyk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1ZGlvQnVzOjpsZW5ndGgp
OgorICAgICAgICAoV2ViS2l0OjpXZWJBdWRpb0J1czo6c2FtcGxlUmF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkF1ZGlvQnVzOjpjaGFubmVsRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1
ZGlvQnVzOjphdWRpb0J1cyk6CisgICAgICAgICogcGxhdGZvcm0vbml4L3N1cHBvcnQvV2ViRGF0
YS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJEYXRhOjpyZXNldCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkRhdGE6OmFzc2lnbik6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGE6OnNp
emUpOgorICAgICAgICAoV2ViS2l0OjpXZWJEYXRhOjpkYXRhKToKKyAgICAgICAgKFdlYktpdDo6
V2ViRGF0YTo6V2ViRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGE6Om9wZXJhdG9yPSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGE6Om9wZXJhdG9yIFBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPik6CisKIDIwMTMtMDctMDIgIHBlYXZvQG91dGxvb2suY29tICA8cGVhdm9Ab3V0bG9vay5j
b20+CiAKICAgICAgICAgW0N1cmxdIENyYXNoIGFmdGVyIGRvd25sb2FkLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvUGxhdGZvcm0uaCBiL1NvdXJjZS9QbGF0Zm9ybS9u
aXgvcHVibGljL1BsYXRmb3JtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWIyNTdhNWYyZjIxMjE1ODlkMDMxZGFk
M2U5MDc4YzMxMDI2ZWZjOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgv
cHVibGljL1BsYXRmb3JtLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGxhdGZvcm1faAorI2Rl
ZmluZSBQbGF0Zm9ybV9oCisKKyNpbmNsdWRlICJXZWJBdWRpb0RldmljZS5oIgorI2luY2x1ZGUg
IldlYkRhdGEuaCIKKyNpbmNsdWRlICJXZWJHYW1lcGFkcy5oIgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgV2ViQXVkaW9CdXM7CitjbGFzcyBXZWJGRlRGcmFtZTsKK2NsYXNzIFdlYlRo
ZW1lRW5naW5lOworCitjbGFzcyBXRUJLSVRfRVhQT1JUIFBsYXRmb3JtIHsKK3B1YmxpYzoKKwor
ICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShQbGF0Zm9ybSopOworICAg
IFdFQktJVF9FWFBPUlQgc3RhdGljIHZvaWQgc2h1dGRvd24oKTsKKyAgICBXRUJLSVRfRVhQT1JU
IHN0YXRpYyBQbGF0Zm9ybSogY3VycmVudCgpOworCisgICAgLy8gQXVkaW8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB2
aXJ0dWFsIGRvdWJsZSBhdWRpb0hhcmR3YXJlU2FtcGxlUmF0ZSgpIHsgcmV0dXJuIDA7IH0KKyAg
ICB2aXJ0dWFsIHNpemVfdCBhdWRpb0hhcmR3YXJlQnVmZmVyU2l6ZSgpIHsgcmV0dXJuIDA7IH0K
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIGF1ZGlvSGFyZHdhcmVPdXRwdXRDaGFubmVscygpIHsgcmV0
dXJuIDA7IH0KKworICAgIC8vIENyZWF0ZXMgYSBkZXZpY2UgZm9yIGF1ZGlvIEkvTy4KKyAgICAv
LyBQYXNzIGluIChudW1iZXJPZklucHV0Q2hhbm5lbHMgPiAwKSBpZiBsaXZlL2xvY2FsIGF1ZGlv
IGlucHV0IGlzIGRlc2lyZWQuCisgICAgdmlydHVhbCBXZWJBdWRpb0RldmljZSogY3JlYXRlQXVk
aW9EZXZpY2Uoc2l6ZV90IC8qYnVmZmVyU2l6ZSovLCB1bnNpZ25lZCAvKm51bWJlck9mSW5wdXRD
aGFubmVscyovLCB1bnNpZ25lZCAvKm51bWJlck9mQ2hhbm5lbHMqLywgZG91YmxlIC8qc2FtcGxl
UmF0ZSovLCBXZWJBdWRpb0RldmljZTo6UmVuZGVyQ2FsbGJhY2sqKSB7IHJldHVybiAwOyB9CisK
KworICAgIC8vIEdhbWVwYWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHZpcnR1YWwgdm9pZCBzYW1wbGVHYW1lcGFkcyhX
ZWJHYW1lcGFkcyYgaW50bykgeyBpbnRvLmxlbmd0aCA9IDA7IH0KKworCisgICAgLy8gRkZURnJh
bWUKKyAgICB2aXJ0dWFsIFdlYkZGVEZyYW1lKiBjcmVhdGVGRlRGcmFtZSh1bnNpZ25lZCAvKmZm
dHNpemUqLykgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgV2ViRkZURnJhbWUqIGNyZWF0ZUZG
VEZyYW1lKGNvbnN0IFdlYkZGVEZyYW1lKiAvKmZyYW1lKi8pIHsgcmV0dXJuIDA7IH0KKworICAg
IC8vIFJlc291cmNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFJldHVybnMgYSBibG9iIG9mIGRhdGEgY29ycmVzcG9u
ZGluZyB0byB0aGUgbmFtZWQgcmVzb3VyY2UuCisgICAgdmlydHVhbCBXZWJEYXRhIGxvYWRSZXNv
dXJjZShjb25zdCBjaGFyKiAvKm5hbWUqLykgeyByZXR1cm4gV2ViRGF0YSgpOyB9CisKKyAgICAv
LyBEZWNvZGVzIHRoZSBpbi1tZW1vcnkgYXVkaW8gZmlsZSBkYXRhIGFuZCByZXR1cm5zIHRoZSBs
aW5lYXIgUENNIGF1ZGlvIGRhdGEgaW4gdGhlIGRlc3RpbmF0aW9uQnVzLgorICAgIC8vIEEgc2Ft
cGxlLXJhdGUgY29udmVyc2lvbiB0byBzYW1wbGVSYXRlIHdpbGwgb2NjdXIgaWYgdGhlIGZpbGUg
ZGF0YSBpcyBhdCBhIGRpZmZlcmVudCBzYW1wbGUtcmF0ZS4KKyAgICAvLyBSZXR1cm5zIHRydWUg
b24gc3VjY2Vzcy4KKyAgICB2aXJ0dWFsIGJvb2wgbG9hZEF1ZGlvUmVzb3VyY2UoV2ViQXVkaW9C
dXMqIC8qZGVzdGluYXRpb25CdXMqLywgY29uc3QgY2hhciogLyphdWRpb0ZpbGVEYXRhKi8sIHNp
emVfdCAvKmRhdGFTaXplKi8sIGRvdWJsZSAvKnNhbXBsZVJhdGUqLykgeyByZXR1cm4gZmFsc2U7
IH0KKworICAgIC8vIFRoZW1lIGVuZ2luZQorICAgIHZpcnR1YWwgV2ViVGhlbWVFbmdpbmUqIHRo
ZW1lRW5naW5lKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5QbGF0Zm9ybSgpIHsgfQor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1BsYXRmb3JtL25peC9wdWJsaWMvV2ViQXVkaW9CdXMuaCBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgv
cHVibGljL1dlYkF1ZGlvQnVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTdiMjU0NDRlYjdlYmUyZjY0ZDJjY2Iw
ZjZjNjU2OTlkNmUxYzI2NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgv
cHVibGljL1dlYkF1ZGlvQnVzLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgV2ViQXVkaW9CdXNfaAorI2RlZmluZSBXZWJBdWRpb0J1c19oCisKKyNpbmNsdWRlICJXZWJD
b21tb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBBdWRpb0J1czsgfQorCisjaWZk
ZWYgQlVJTERJTkdfTklYX18KK25hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
Y2xhc3MgUGFzc1JlZlB0cjsgfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBXZWJBdWRpb0J1c1ByaXZhdGU7CisKKy8vIEEgY29udGFpbmVyIGZvciBtdWx0aS1jaGFubmVs
IGxpbmVhciBQQ00gYXVkaW8gZGF0YS4KKy8vCisvLyBXQVJOSU5HOiBJdCBpcyBub3Qgc2FmZSB0
byBwYXNzIGEgV2ViQXVkaW9CdXMgYWNyb3NzIHRocmVhZHMhISEKKy8vCitjbGFzcyBXZWJBdWRp
b0J1cyB7CitwdWJsaWM6CisgICAgV2ViQXVkaW9CdXMoKSA6IG1fZCgwKSB7IH0KKyAgICB+V2Vi
QXVkaW9CdXMoKSB7IHJlc2V0KCk7IH0KKworICAgIC8vIGluaXRpYWxpemUoKSBhbGxvY2F0ZXMg
bWVtb3J5IG9mIHRoZSBnaXZlbiBsZW5ndGggZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YgY2hhbm5l
bHMuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGluaXRpYWxpemUodW5zaWduZWQgbnVtYmVyT2ZD
aGFubmVscywgc2l6ZV90IGxlbmd0aCwgZG91YmxlIHNhbXBsZVJhdGUpOworCisgICAgLy8gcmVz
aXplU21hbGxlcigpIGNhbiBvbmx5IGJlIGNhbGxlZCBhZnRlciBpbml0aWFsaXplKCkgd2l0aCBh
IG5ldyBsZW5ndGggPD0gdGhlIGluaXRpYWxpemF0aW9uIGxlbmd0aC4KKyAgICAvLyBUaGUgZGF0
YSBzdG9yZWQgaW4gdGhlIGJ1cyB3aWxsIHJlbWFpbiB1bmRpc3R1cmJlZC4KKyAgICBXRUJLSVRf
RVhQT1JUIHZvaWQgcmVzaXplU21hbGxlcihzaXplX3QgbmV3TGVuZ3RoKTsKKworICAgIC8vIHJl
c2V0KCkgcmVsZWFzZXMgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgZnJvbSBpbml0aWFsaXplKCkuCisg
ICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7CisKKyAgICBXRUJLSVRfRVhQT1JUIHVuc2ln
bmVkIG51bWJlck9mQ2hhbm5lbHMoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIHNpemVfdCBs
ZW5ndGgoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIGRvdWJsZSBzYW1wbGVSYXRlKCkgY29u
c3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIGZsb2F0KiBjaGFubmVsRGF0YSh1bnNpZ25lZCBjaGFu
bmVsSW5kZXgpOworCisjaWZkZWYgQlVJTERJTkdfTklYX18KKyAgICBXVEY6OlBhc3NSZWZQdHI8
V2ViQ29yZTo6QXVkaW9CdXM+IGF1ZGlvQnVzKCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICAv
LyBEaXNhbGxvdyBjb3B5IGFuZCBhc3NpZ24uCisgICAgV2ViQXVkaW9CdXMoY29uc3QgV2ViQXVk
aW9CdXMmKTsKKyAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBXZWJBdWRpb0J1cyYpOworCisgICAg
V2ViQXVkaW9CdXNQcml2YXRlKiBtX2Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIFdlYkF1ZGlvQnVzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgv
cHVibGljL1dlYkF1ZGlvRGV2aWNlLmggYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9XZWJB
dWRpb0RldmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMwNDUxMzYxNGEwZWEzZTMwODViNGZhYTRlYzMzNTVm
MmRiNWM2NTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9X
ZWJBdWRpb0RldmljZS5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkF1ZGlvRGV2aWNl
X2gKKyNkZWZpbmUgV2ViQXVkaW9EZXZpY2VfaAorCisjaW5jbHVkZSAiV2ViVmVjdG9yLmgiCisK
K25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBBYnN0cmFjdCBpbnRlcmZhY2UgdG8gdGhlIENocm9t
aXVtIGF1ZGlvIHN5c3RlbS4KKworY2xhc3MgV2ViQXVkaW9EZXZpY2UgeworcHVibGljOgorICAg
IGNsYXNzIFJlbmRlckNhbGxiYWNrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgdm9p
ZCByZW5kZXIoY29uc3QgV2ViVmVjdG9yPGZsb2F0Kj4mIC8qc291cmNlRGF0YSovLCBjb25zdCBX
ZWJWZWN0b3I8ZmxvYXQqPiYgLypkZXN0aW5hdGlvbkRhdGEqLywgc2l6ZV90IC8qbnVtYmVyT2ZG
cmFtZXMqLykgeyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgflJlbmRlckNh
bGxiYWNrKCkgeyB9CisgICAgfTsKKworICAgIHZpcnR1YWwgfldlYkF1ZGlvRGV2aWNlKCkgeyB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3Ao
KSA9IDA7CisgICAgdmlydHVhbCBkb3VibGUgc2FtcGxlUmF0ZSgpID0gMDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViQXVkaW9EZXZpY2VfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViQ2FudmFzLmggYi9Tb3VyY2UvUGxhdGZv
cm0vbml4L3B1YmxpYy9XZWJDYW52YXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOGM2MWFiOWEyNGRlMGUwMzBm
NjE3OTBmMDEzZTg1MTdiNmE0MDRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3Jt
L25peC9wdWJsaWMvV2ViQ2FudmFzLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqICBDb3B5cmln
aHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIFdlYkNhbnZhc19oCisjZGVmaW5lIFdlYkNh
bnZhc19oCisKKyNpbmNsdWRlIDxjYWlyby9jYWlyby5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
K3R5cGVkZWYgY2Fpcm9fdCBXZWJDYW52YXM7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViQ29sb3IuaCBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgv
cHVibGljL1dlYkNvbG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWI1YTk5MDM0YjJiZmRkZjNiZDAzZTE5MzA3
NDFjNjIxYTU5ODMyOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVi
bGljL1dlYkNvbG9yLmgKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisqLworCisjaWZuZGVmIFdlYkNvbG9yX2gKKyNkZWZpbmUgV2ViQ29sb3JfaAorCisj
aW5jbHVkZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordHlwZWRlZiB1bnNp
Z25lZCBSR0JBMzI7IC8vIFJHQkEgcXVhZHJ1cGxldAorCitzdHJ1Y3QgV2ViQ29sb3IgeworICAg
IHN0YXRpYyBjb25zdCBSR0JBMzIgYmxhY2sgPSAweEZGMDAwMDAwOworICAgIHN0YXRpYyBjb25z
dCBSR0JBMzIgd2hpdGUgPSAweEZGRkZGRkZGOworICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgZGFy
a0dyYXkgPSAweEZGODA4MDgwOworICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgZ3JheSA9IDB4RkZB
MEEwQTA7CisgICAgc3RhdGljIGNvbnN0IFJHQkEzMiBsaWdodEdyYXkgPSAweEZGQzBDMEMwOwor
ICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgdHJhbnNwYXJlbnQgPSAweDAwMDAwMDAwOworCisgICAg
UkdCQTMyIHJnYmE7CisKKyAgICBXZWJDb2xvcigpCisgICAgICAgIDogcmdiYShXZWJDb2xvcjo6
YmxhY2spCisgICAgeworICAgIH0KKworICAgIFdlYkNvbG9yKFJHQkEzMiByZ2JhKQorICAgICAg
ICA6IHJnYmEocmdiYSkKKyAgICB7CisgICAgfQorCisgICAgV2ViQ29sb3IoaW50IHIsIGludCBn
LCBpbnQgYiwgaW50IGEgPSAyNTUpCisgICAgICAgIDogcmdiYShzdGQ6Om1heCgwLCBzdGQ6Om1p
bihhLCAyNTUpKSA8PCAyNCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKHIsIDI1NSkpIDw8IDE2IHwg
c3RkOjptYXgoMCwgc3RkOjptaW4oZywgMjU1KSkgPDwgOCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWlu
KGIsIDI1NSkpKQorICAgIHsKKyAgICB9CisKKyAgICBvcGVyYXRvciBSR0JBMzIoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHJnYmE7CisgICAgfQorCisgICAgdW5zaWduZWQgY2hhciBy
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAocmdiYSAmIDB4MDBGRjAwMDApID4+IDE2
OworICAgIH0KKworICAgIHVuc2lnbmVkIGNoYXIgZygpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gKHJnYmEgJiAweDAwMDBGRjAwKSA+PiA4OworICAgIH0KKworICAgIHVuc2lnbmVkIGNo
YXIgYigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKHJnYmEgJiAweDAwMDAwMEZGKTsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCBjaGFyIGEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIChyZ2JhICYgMHhGRjAwMDAwMCkgPj4gMjQ7CisgICAgfQorfTsKKworaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBXZWJDb2xvciYgYSwgY29uc3QgV2ViQ29sb3ImIGIpCit7CisgICAg
cmV0dXJuIGEucmdiYSA9PSBiLnJnYmE7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29u
c3QgV2ViQ29sb3ImIGEsIGNvbnN0IFdlYkNvbG9yJiBiKQoreworICAgIHJldHVybiAhKGEgPT0g
Yik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1dlYkNvbW1vbi5oIGIvU291cmNlL1BsYXRmb3JtL25p
eC9wdWJsaWMvV2ViQ29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDM4ZDczYzcyY2U2MGY4MjBjMmViMTM5
MGExZDFiNzFkMDNlYWRiZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgv
cHVibGljL1dlYkNvbW1vbi5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNvbW1vbl9oCisj
ZGVmaW5lIFdlYkNvbW1vbl9oCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBFeHBvcnRl
ZCBzeW1ib2xzIG5lZWQgdG8gYmUgYW5ub3RhdGVkIHdpdGggV0VCS0lUX0VYUE9SVAorI2RlZmlu
ZSBXRUJLSVRfRVhQT1JUIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpCisK
Ky8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBCYXNpYyB0eXBlcworI2luY2x1ZGUgPHN0ZGRl
Zi5oPiAvLyBGb3Igc2l6ZV90CisKK25hbWVzcGFjZSBXZWJLaXQgeworLy8gVVRGLTE2IGNoYXJh
Y3RlciB0eXBlCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFdlYlVDaGFyOworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJs
aWMvV2ViRGF0YS5oIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViRGF0YS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjMwMTljZDNhZjE1MjgyZTE2MzlmNTNhZWI1YzNiYTgxZTYxOTY0NDQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9XZWJEYXRhLmgKQEAgLTAsMCAr
MSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdlYkRhdGFfaAorI2RlZmluZSBXZWJEYXRhX2gKKworI2luY2x1ZGUg
IldlYkNvbW1vbi5oIgorCisjaWZkZWYgQlVJTERJTkdfTklYX18KK25hbWVzcGFjZSBXZWJDb3Jl
IHsgY2xhc3MgU2hhcmVkQnVmZmVyOyB9CituYW1lc3BhY2UgV1RGIHsgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IGNsYXNzIFBhc3NSZWZQdHI7IH0KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgV2ViRGF0YVByaXZhdGU7CisKKy8vIEEgY29udGFpbmVyIGZvciByYXcgYnl0ZXMu
IEl0IGlzIGluZXhwZW5zaXZlIHRvIGNvcHkgYSBXZWJEYXRhIG9iamVjdC4KKy8vCisvLyBXQVJO
SU5HOiBJdCBpcyBub3Qgc2FmZSB0byBwYXNzIGEgV2ViRGF0YSBhY3Jvc3MgdGhyZWFkcyEhIQor
Ly8KK2NsYXNzIFdlYkRhdGEgeworcHVibGljOgorICAgIH5XZWJEYXRhKCkgeyByZXNldCgpOyB9
CisKKyAgICBXZWJEYXRhKCkgOiBtX3ByaXZhdGUoMCkgeyB9CisKKyAgICBXZWJEYXRhKGNvbnN0
IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKSA6IG1fcHJpdmF0ZSgwKQorICAgIHsKKyAgICAgICAg
YXNzaWduKGRhdGEsIHNpemUpOworICAgIH0KKworICAgIHRlbXBsYXRlIDxpbnQgTj4KKyAgICBX
ZWJEYXRhKGNvbnN0IGNoYXIgKCZkYXRhKVtOXSkgOiBtX3ByaXZhdGUoMCkKKyAgICB7CisgICAg
ICAgIGFzc2lnbihkYXRhLCBOIC0gMSk7CisgICAgfQorCisgICAgV2ViRGF0YShjb25zdCBXZWJE
YXRhJiBkKSA6IG1fcHJpdmF0ZSgwKSB7IGFzc2lnbihkKTsgfQorCisgICAgV2ViRGF0YSYgb3Bl
cmF0b3I9KGNvbnN0IFdlYkRhdGEmIGQpCisgICAgeworICAgICAgICBhc3NpZ24oZCk7CisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQo
KTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXNzaWduKGNvbnN0IFdlYkRhdGEmKTsKKyAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgYXNzaWduKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCk7CisKKyAg
ICBXRUJLSVRfRVhQT1JUIHNpemVfdCBzaXplKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCBj
b25zdCBjaGFyKiBkYXRhKCkgY29uc3Q7CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiAhc2l6ZSgpOyB9CisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9wcml2
YXRlOyB9CisKKyNpZmRlZiBCVUlMRElOR19OSVhfXworICAgIFdlYkRhdGEoY29uc3QgV1RGOjpQ
YXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mKTsKKyAgICBXZWJEYXRhJiBvcGVyYXRv
cj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mKTsKKyAgICBv
cGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPigpIGNvbnN0Owor
I2Vsc2UKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQz4KKyAgICBXZWJEYXRhKGNvbnN0IEMmIGMpIDog
bV9wcml2YXRlKDApCisgICAgeworICAgICAgICBhc3NpZ24oYy5kYXRhKCksIGMuc2l6ZSgpKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQz4KKyAgICBXZWJEYXRhJiBvcGVyYXRvcj0o
Y29uc3QgQyYgYykKKyAgICB7CisgICAgICAgIGFzc2lnbihjLmRhdGEoKSwgYy5zaXplKCkpOwor
ICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgdm9p
ZCBhc3NpZ24oV2ViRGF0YVByaXZhdGUqKTsKKyAgICBXZWJEYXRhUHJpdmF0ZSogbV9wcml2YXRl
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViRkZURnJhbWUuaCBiL1NvdXJjZS9QbGF0Zm9ybS9u
aXgvcHVibGljL1dlYkZGVEZyYW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTUzMzEwYmVmOWMwNGYxMGM4OTgz
OTU1MDZhMGMwYTZlNGEzMjk2MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9u
aXgvcHVibGljL1dlYkZGVEZyYW1lLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcyku
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworI2lmbmRlZiBXZWJGRlRGcmFtZV9oCisjZGVmaW5lIFdlYkZGVEZyYW1lX2gKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkF1ZGlvQnVzOworCitjbGFzcyBXZWJGRlRG
cmFtZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViRkZURnJhbWUoKSB7IH0KKworICAgIHZp
cnR1YWwgdm9pZCBkb0ZGVChjb25zdCBmbG9hdCopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkb0lu
dmVyc2VGRlQoZmxvYXQqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbXVsdGlwbHkoY29uc3QgV2Vi
RkZURnJhbWUmKSB7IH0KKworICAgIHZpcnR1YWwgdW5zaWduZWQgZnJlcXVlbmN5RG9tYWluU2Ft
cGxlQ291bnQoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgLy8gQWZ0ZXIgbXVsdGlwbGljYXRp
b24gYW5kIHRyYW5zZm9ybSBvcGVyYXRpb25zLCB0aGUgZGF0YSBpcyBzY2FsZWQKKyAgICAvLyB0
byB0YWtlIGluIGFjY291bnQgdGhlIHNjYWxlIHVzZWQgaW50ZXJuYWxseSBpbiBXZWJLaXQsIG9y
aWdpbmFsbHkKKyAgICAvLyBmcm9tIE1hYydzIHZlY0xpYi4KKyAgICAvLyBBZnRlciBtdWx0aXBs
aWNhdGlvbjogUGxhbmFyIGRhdGEgaXMgc2NhbGVkIGJ5IDAuNS4KKyAgICAvLyBBZnRlciBkaXJl
Y3QgdHJhbnNmb3JtOiBQbGFuYXIgZGF0YSBpcyBzY2FsZWQgYnkgMi4wLgorICAgIC8vIEFmdGVy
IGludmVyc2UgdHJhbnNmb3JtOiBUaW1lIGRvbWFpbiBkYXRhIGlzIHNjYWxlZCBieSAxLjAvKDIq
IEZGVCBzaXplKS4KKyAgICB2aXJ0dWFsIGZsb2F0KiByZWFsRGF0YSgpIGNvbnN0IHsgcmV0dXJu
IDA7IH0KKyAgICB2aXJ0dWFsIGZsb2F0KiBpbWFnRGF0YSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9QbGF0Zm9ybS9uaXgvcHVibGljL1dlYkdhbWVwYWQuaCBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgv
cHVibGljL1dlYkdhbWVwYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NTVkZjE1NjkzMzliNDAyZjkyNmRlOTRi
Y2Q3MzZmOWJiZTYwMmI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL25peC9w
dWJsaWMvV2ViR2FtZXBhZC5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
KyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICovCisKKyNpZm5k
ZWYgV2ViR2FtZXBhZF9oCisjZGVmaW5lIFdlYkdhbWVwYWRfaAorCisjaW5jbHVkZSAiV2ViQ29t
bW9uLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJHYW1lcGFkIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGlkTGVuZ3RoQ2FwID0gMTI4OworICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgYXhlc0xlbmd0aENhcCA9IDE2OworICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgYnV0dG9uc0xlbmd0aENhcCA9IDMyOworCisgICAgV2ViR2FtZXBhZCgpCisgICAgICAgIDog
Y29ubmVjdGVkKGZhbHNlKQorICAgICAgICAsIHRpbWVzdGFtcCgwKQorICAgICAgICAsIGF4ZXNM
ZW5ndGgoMCkKKyAgICAgICAgLCBidXR0b25zTGVuZ3RoKDApCisgICAgeworICAgICAgICBpZFsw
XSA9IDA7CisgICAgfQorCisgICAgLy8gSXMgdGhlcmUgYSBnYW1lcGFkIGNvbm5lY3RlZCBhdCB0
aGlzIGluZGV4PworICAgIGJvb2wgY29ubmVjdGVkOworCisgICAgLy8gRGV2aWNlIGlkZW50aWZp
ZXIgKGJhc2VkIG9uIG1hbnVmYWN0dXJlciwgbW9kZWwsIGV0Yy4pLgorICAgIFdlYlVDaGFyIGlk
W2lkTGVuZ3RoQ2FwXTsKKworICAgIC8vIE1vbm90b25pY2FsbHkgaW5jcmVhc2luZyB2YWx1ZSBy
ZWZlcnJpbmcgdG8gd2hlbiB0aGUgZGF0YSB3ZXJlIGxhc3QKKyAgICAvLyB1cGRhdGVkLgorICAg
IHVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lc3RhbXA7CisKKyAgICAvLyBOdW1iZXIgb2YgdmFsaWQg
ZW50cmllcyBpbiB0aGUgYXhlcyBhcnJheS4KKyAgICB1bnNpZ25lZCBheGVzTGVuZ3RoOworCisg
ICAgLy8gTm9ybWFsaXplZCB2YWx1ZXMgcmVwcmVzZW50aW5nIGF4ZXMsIGluIHRoZSByYW5nZSBb
LTEuLjFdLgorICAgIGZsb2F0IGF4ZXNbYXhlc0xlbmd0aENhcF07CisKKyAgICAvLyBOdW1iZXIg
b2YgdmFsaWQgZW50cmllcyBpbiB0aGUgYnV0dG9ucyBhcnJheS4KKyAgICB1bnNpZ25lZCBidXR0
b25zTGVuZ3RoOworCisgICAgLy8gTm9ybWFsaXplZCB2YWx1ZXMgcmVwcmVzZW50aW5nIGJ1dHRv
bnMsIGluIHRoZSByYW5nZSBbMC4uMV0uCisgICAgZmxvYXQgYnV0dG9uc1tidXR0b25zTGVuZ3Ro
Q2FwXTsKK307CisKK30KKworI2VuZGlmIC8vIFdlYkdhbWVwYWRfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViR2FtZXBhZHMuaCBiL1NvdXJjZS9QbGF0Zm9ybS9u
aXgvcHVibGljL1dlYkdhbWVwYWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjE5Y2E0OTI2ZDI1MTZhYmU4NjNk
ZTRiYWMwOGIxMWU0OTIyYmY2OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9u
aXgvcHVibGljL1dlYkdhbWVwYWRzLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXZWJHYW1lcGFkc19oCisjZGVmaW5lIFdlYkdhbWVwYWRzX2gKKworI2luY2x1ZGUg
IldlYkdhbWVwYWQuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkdhbWVwYWRz
IHsKK3B1YmxpYzoKKyAgICBXZWJHYW1lcGFkcygpCisgICAgICAgIDogbGVuZ3RoKDApIHsgfQor
CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBpdGVtc0xlbmd0aENhcCA9IDQ7CisKKyAgICAvLyBO
dW1iZXIgb2YgdmFsaWQgZW50cmllcyBpbiB0aGUgaXRlbXMgYXJyYXkuCisgICAgdW5zaWduZWQg
bGVuZ3RoOworCisgICAgLy8gR2FtZXBhZCBkYXRhIGZvciBOIHNlcGFyYXRlIGdhbWVwYWQgZGV2
aWNlcy4KKyAgICBXZWJHYW1lcGFkIGl0ZW1zW2l0ZW1zTGVuZ3RoQ2FwXTsKK307CisKK30KKwor
I2VuZGlmIC8vIFdlYkdhbWVwYWRzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgv
cHVibGljL1dlYlJlY3QuaCBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1dlYlJlY3QuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42NWY5MmZjMzNlZThjMjc4ZThiNjY5NzgyNDcxZTA1ZDczMjRkMTZkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViUmVjdC5oCkBAIC0w
LDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgV2ViUmVjdF9oCisj
ZGVmaW5lIFdlYlJlY3RfaAorCisjaWZkZWYgQlVJTERJTkdfTklYX18KKyNpbmNsdWRlICJJbnRS
ZWN0LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlJlY3Qgewor
cHVibGljOgorICAgIGludCB4OworICAgIGludCB5OworICAgIGludCB3aWR0aDsKKyAgICBpbnQg
aGVpZ2h0OworCisgICAgV2ViUmVjdChjb25zdCBXZWJSZWN0JiByKQorICAgICAgICA6IHgoci54
KQorICAgICAgICAsIHkoci55KQorICAgICAgICAsIHdpZHRoKHIud2lkdGgpCisgICAgICAgICwg
aGVpZ2h0KHIuaGVpZ2h0KQorICAgIHsKKyAgICB9CisKKyNpZmRlZiBCVUlMRElOR19OSVhfXwor
ICAgIFdlYlJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcikKKyAgICAgICAgOiB4KHIueCgp
KQorICAgICAgICAsIHkoci55KCkpCisgICAgICAgICwgd2lkdGgoci53aWR0aCgpKQorICAgICAg
ICAsIGhlaWdodChyLmhlaWdodCgpKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJSZWN0JiBvcGVy
YXRvcj0oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcikKKyAgICB7CisgICAgICAgIHggPSByLngo
KTsKKyAgICAgICAgeSA9IHIueSgpOworICAgICAgICB3aWR0aCA9IHIud2lkdGgoKTsKKyAgICAg
ICAgaGVpZ2h0ID0gci5oZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyNl
bmRpZgorfTsKKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1
YmxpYy9XZWJTaXplLmggYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9XZWJTaXplLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNTA0ZWY1YTI1MDA2N2VhOTk3OTgzYzk0MWFjZmQ4YTk0MWY3NTljZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1dlYlNpemUuaApAQCAtMCww
ICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBXZWJTaXplX2gKKyNkZWZpbmUgV2ViU2l6ZV9oCisKKyNpZmRlZiBC
VUlMRElOR19OSVhfXworI2luY2x1ZGUgIkludFNpemUuaCIKKyNlbmRpZgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworc3RydWN0IFdlYlNpemUgeworICAgIGludCB3aWR0aDsKKyAgICBpbnQgaGVp
Z2h0OworCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gd2lkdGggPD0gMCB8fCBo
ZWlnaHQgPD0gMDsgfQorCisgICAgV2ViU2l6ZSgpCisgICAgICAgIDogd2lkdGgoMCkKKyAgICAg
ICAgLCBoZWlnaHQoMCkKKyAgICB7CisgICAgfQorCisgICAgV2ViU2l6ZShpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpCisgICAgICAgIDogd2lkdGgod2lkdGgpCisgICAgICAgICwgaGVpZ2h0KGhlaWdo
dCkKKyAgICB7CisgICAgfQorCisjaWZkZWYgQlVJTERJTkdfTklYX18KKyAgICBXZWJTaXplKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIHMpCisgICAgICAgIDogd2lkdGgocy53aWR0aCgpKQorICAg
ICAgICAsIGhlaWdodChzLmhlaWdodCgpKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJTaXplJiBv
cGVyYXRvcj0oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcykKKyAgICB7CisgICAgICAgIHdpZHRo
ID0gcy53aWR0aCgpOworICAgICAgICBoZWlnaHQgPSBzLmhlaWdodCgpOworICAgICAgICByZXR1
cm4gKnRoaXM7CisgICAgfQorCisgICAgb3BlcmF0b3IgV2ViQ29yZTo6SW50U2l6ZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gV2ViQ29yZTo6SW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsK
KyAgICB9CisjZW5kaWYKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgV2ViU2l6
ZSYgYSwgY29uc3QgV2ViU2l6ZSYgYikKK3sKKyAgICByZXR1cm4gYS53aWR0aCA9PSBiLndpZHRo
ICYmIGEuaGVpZ2h0ID09IGIuaGVpZ2h0OworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IFdlYlNpemUmIGEsIGNvbnN0IFdlYlNpemUmIGIpCit7CisgICAgcmV0dXJuICEoYSA9PSBi
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViVGhlbWVFbmdpbmUuaCBiL1NvdXJjZS9QbGF0Zm9y
bS9uaXgvcHVibGljL1dlYlRoZW1lRW5naW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTExNTU3YzcyYzQxZWQ3
Y2NjOTljZDkzNDU1ZDRjNzNlMmMzMTEzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0
Zm9ybS9uaXgvcHVibGljL1dlYlRoZW1lRW5naW5lLmgKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFdlYlRoZW1lRW5naW5lX2gKKyNkZWZpbmUgV2ViVGhlbWVFbmdpbmVfaAorCisjaW5jbHVkZSAi
V2ViQ2FudmFzLmgiCisjaW5jbHVkZSAiV2ViQ29sb3IuaCIKKyNpbmNsdWRlICJXZWJTaXplLmgi
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJSZWN0OworCitjbGFzcyBXZWJUaGVt
ZUVuZ2luZSB7CitwdWJsaWM6CisgICAgLy8gVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGFzc29j
aWF0ZWQgUGFydC4KKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgU3RhdGVEaXNhYmxlZCwKKyAg
ICAgICAgU3RhdGVIb3ZlciwKKyAgICAgICAgU3RhdGVOb3JtYWwsCisgICAgICAgIFN0YXRlUHJl
c3NlZAorICAgIH07CisKKyAgICAvLyBFeHRyYSBwYXJhbWV0ZXJzIGZvciBkcmF3aW5nIHRoZSBQ
YXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRyYWNrIGFuZAorICAgIC8vIFBhcnRTY3JvbGxiYXJWZXJ0
aWNhbFRyYWNrLgorICAgIHN0cnVjdCBTY3JvbGxiYXJUcmFja0V4dHJhUGFyYW1zIHsKKyAgICAg
ICAgLy8gVGhlIGJvdW5kcyBvZiB0aGUgZW50aXJlIHRyYWNrLCBhcyBvcHBvc2VkIHRvIHRoZSBw
YXJ0IGJlaW5nIHBhaW50ZWQuCisgICAgICAgIGludCB0cmFja1g7CisgICAgICAgIGludCB0cmFj
a1k7CisgICAgICAgIGludCB0cmFja1dpZHRoOworICAgICAgICBpbnQgdHJhY2tIZWlnaHQ7Cisg
ICAgfTsKKworICAgIC8vIEV4dHJhIHBhcmFtZXRlcnMgZm9yIFBhcnRDaGVja2JveCwgUGFydFB1
c2hCdXR0b24gYW5kIFBhcnRSYWRpby4KKyAgICBzdHJ1Y3QgQnV0dG9uRXh0cmFQYXJhbXMgewor
ICAgICAgICBib29sIGNoZWNrZWQ7CisgICAgICAgIGJvb2wgaW5kZXRlcm1pbmF0ZTsgLy8gV2hl
dGhlciB0aGUgYnV0dG9uIHN0YXRlIGlzIGluZGV0ZXJtaW5hdGUuCisgICAgICAgIGJvb2wgaXNE
ZWZhdWx0OyAvLyBXaGV0aGVyIHRoZSBidXR0b24gaXMgZGVmYXVsdCBidXR0b24uCisgICAgICAg
IGJvb2wgaGFzQm9yZGVyOworICAgICAgICBXZWJDb2xvciBiYWNrZ3JvdW5kQ29sb3I7CisgICAg
fTsKKworICAgIC8vIEV4dHJhIHBhcmFtZXRlcnMgZm9yIFBhcnRNZW51TGlzdAorICAgIHN0cnVj
dCBNZW51TGlzdEV4dHJhUGFyYW1zIHsKKyAgICAgICAgYm9vbCBoYXNCb3JkZXI7CisgICAgICAg
IGJvb2wgaGFzQm9yZGVyUmFkaXVzOworICAgICAgICBpbnQgYXJyb3dYOworICAgICAgICBpbnQg
YXJyb3dZOworICAgICAgICBXZWJDb2xvciBiYWNrZ3JvdW5kQ29sb3I7CisgICAgfTsKKworICAg
IC8vIEV4dHJhIHBhcmFtZXRlcnMgZm9yIFBhcnRTbGlkZXJUcmFjayBhbmQgUGFydFNsaWRlclRo
dW1iCisgICAgc3RydWN0IFNsaWRlckV4dHJhUGFyYW1zIHsKKyAgICAgICAgYm9vbCB2ZXJ0aWNh
bDsKKyAgICAgICAgYm9vbCBpbkRyYWc7CisgICAgfTsKKworICAgIC8vIEV4dHJhIHBhcmFtZXRl
cnMgZm9yIFBhcnRJbm5lclNwaW5CdXR0b24KKyAgICBzdHJ1Y3QgSW5uZXJTcGluQnV0dG9uRXh0
cmFQYXJhbXMgeworICAgICAgICBib29sIHNwaW5VcDsKKyAgICAgICAgYm9vbCByZWFkT25seTsK
KyAgICB9OworCisgICAgLy8gRXh0cmEgcGFyYW1ldGVycyBmb3IgUGFydFByb2dyZXNzQmFyCisg
ICAgc3RydWN0IFByb2dyZXNzQmFyRXh0cmFQYXJhbXMgeworICAgICAgICBib29sIGlzRGV0ZXJt
aW5hdGU7CisgICAgICAgIGRvdWJsZSBwb3NpdGlvbjsKKyAgICAgICAgZG91YmxlIGFuaW1hdGlv
blByb2dyZXNzOworICAgICAgICBkb3VibGUgYW5pbWF0aW9uU3RhcnRUaW1lOworICAgIH07CisK
KyAgICBzdHJ1Y3QgTWV0ZXJFeHRyYVBhcmFtcyB7CisgICAgICAgIGRvdWJsZSBtaW47CisgICAg
ICAgIGRvdWJsZSBtYXg7CisgICAgICAgIGRvdWJsZSB2YWx1ZTsKKyAgICAgICAgZG91YmxlIGxv
dzsKKyAgICAgICAgZG91YmxlIGhpZ2g7CisgICAgICAgIGRvdWJsZSBvcHRpbXVtOworICAgICAg
ICBkb3VibGUgdmFsdWVSYXRpbygpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICht
YXggPD0gbWluKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJu
ICh2YWx1ZSAtIG1pbikgLyAobWF4IC0gbWluKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIGV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVy
biAiIjsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZXh0cmFRdWlya3NTdHlsZVNoZWV0KCkg
Y29uc3QgeyByZXR1cm4gIiI7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGV4dHJhUGx1Z0lu
c1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiAiIjsgfQorCisgICAgLy8gVGV4dCBzZWxlY3Rp
b24gY29sb3JzLgorICAgIHZpcnR1YWwgV2ViQ29sb3IgYWN0aXZlU2VsZWN0aW9uQmFja2dyb3Vu
ZENvbG9yKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgV2ViQ29sb3IgYWN0aXZlU2VsZWN0aW9u
Rm9yZWdyb3VuZENvbG9yKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgV2ViQ29sb3IgaW5hY3Rp
dmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBXZWJD
b2xvciBpbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKKworICAg
IC8vIExpc3QgYm94IHNlbGVjdGlvbiBjb2xvcnMKKyAgICB2aXJ0dWFsIFdlYkNvbG9yIGFjdGl2
ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBXZWJDb2xvciBhY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgV2ViQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgV2ViQ29sb3IgaW5hY3RpdmVMaXN0
Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBX
ZWJDb2xvciBhY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBXZWJDb2xvciBpbmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0
ID0gMDsKKworICAgIHZpcnR1YWwgV2ViQ29sb3IgZm9jdXNSaW5nQ29sb3IoKSBjb25zdCA9IDA7
CisKKyAgICB2aXJ0dWFsIFdlYkNvbG9yIHRhcEhpZ2hsaWdodENvbG9yKCkgY29uc3QgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIHBhaW50QnV0dG9uKFdlYkNhbnZhcyosIFN0YXRlLCBjb25zdCBX
ZWJSZWN0JiwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMmKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHBhaW50VGV4dEZpZWxkKFdlYkNhbnZhcyosIFN0YXRlLCBjb25zdCBXZWJSZWN0Jikg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgV2ViU2l6ZSBnZXRDaGVja2JveFNpemUoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q2hlY2tib3goV2ViQ2FudmFzKiwgU3RhdGUsIGNv
bnN0IFdlYlJlY3QmLCBjb25zdCBCdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIFdlYlNpemUgZ2V0UmFkaW9TaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBwYWludFJhZGlvKFdlYkNhbnZhcyosIFN0YXRlLCBjb25zdCBXZWJSZWN0JiwgY29uc3QgQnV0
dG9uRXh0cmFQYXJhbXMmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50VGV4dEFy
ZWEoV2ViQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFdlYlJlY3QmKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGdldE1lbnVMaXN0UGFkZGluZyhpbnQmIHBhZGRpbmdUb3AsIGludCYgcGFkZGlu
Z0xlZnQsIGludCYgcGFkZGluZ0JvdHRvbSwgaW50JiBwYWRkaW5nUmlnaHQpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRNZW51TGlzdChXZWJDYW52YXMqLCBTdGF0ZSwgY29uc3Qg
V2ViUmVjdCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRQcm9ncmVzc0JhcihX
ZWJDYW52YXMqLCBTdGF0ZSwgY29uc3QgV2ViUmVjdCYsIGNvbnN0IFByb2dyZXNzQmFyRXh0cmFQ
YXJhbXMmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBkb3VibGUgZ2V0QW5pbWF0aW9uUmVwZWF0
SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBn
ZXRBbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBnZXRJbm5lclNwaW5CdXR0b25QYWRkaW5nKGludCYgcGFkZGluZ1RvcCwgaW50JiBw
YWRkaW5nTGVmdCwgaW50JiBwYWRkaW5nQm90dG9tLCBpbnQmIHBhZGRpbmdSaWdodCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludElubmVyU3BpbkJ1dHRvbihXZWJDYW52YXMqLCBT
dGF0ZSwgY29uc3QgV2ViUmVjdCYsIGNvbnN0IElubmVyU3BpbkJ1dHRvbkV4dHJhUGFyYW1zJikg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludE1ldGVyKFdlYkNhbnZhcyosIFN0YXRl
LCBjb25zdCBXZWJSZWN0JiwgY29uc3QgTWV0ZXJFeHRyYVBhcmFtcyYpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRTbGlkZXJUcmFjayhXZWJDYW52YXMqLCBTdGF0ZSwgY29uc3Qg
V2ViUmVjdCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTbGlkZXJUaHVtYihX
ZWJDYW52YXMqLCBTdGF0ZSwgY29uc3QgV2ViUmVjdCYpIGNvbnN0ID0gMDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9u
aXgvcHVibGljL1dlYlZlY3Rvci5oIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViVmVj
dG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNDQ2YjdlNjc4MzFiNzkzYWFlYzJjYTZiNTQ2MTk0ZjEwNGQzNTE3
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1dlYlZlY3Rv
ci5oCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJWZWN0b3JfaAorI2RlZmluZSBXZWJWZWN0
b3JfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+Cisj
aW5jbHVkZSA8Y2Fzc2VydD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIEEgc2ltcGxlIHZl
Y3RvciBjbGFzcy4KKy8vCisvLyBTYW1wbGUgdXNhZ2U6CisvLworLy8gICB2b2lkIEZvbyhXZWJW
ZWN0b3I8aW50PiYgcmVzdWx0KQorLy8gICB7CisvLyAgICAgICBXZWJWZWN0b3I8aW50PiBkYXRh
KDEwKTsKKy8vICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGF0YS5zaXplKCk7ICsraSkK
Ky8vICAgICAgICAgICBkYXRhW2ldID0gLi4uCisvLyAgICAgICByZXN1bHQuc3dhcChkYXRhKTsK
Ky8vICAgfQorLy8KKy8vIEl0IGlzIGFsc28gcG9zc2libGUgdG8gYXNzaWduIGZyb20gb3RoZXIg
dHlwZXMgb2YgcmFuZG9tIGFjY2VzcworLy8gY29udGFpbmVyczoKKy8vCisvLyAgIHZvaWQgRm9v
KGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgaW5wdXQpCisvLyAgIHsKKy8vICAgICAg
IFdlYlZlY3RvcjxXZWJDU3RyaW5nPiBjc3RyaW5ncyA9IGlucHV0OworLy8gICAgICAgLi4uCisv
LyAgIH0KKy8vCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIFdlYlZlY3RvciB7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKKworICAgIH5XZWJWZWN0b3IoKQorICAgIHsK
KyAgICAgICAgZGVzdHJveSgpOworICAgIH0KKworICAgIGV4cGxpY2l0IFdlYlZlY3RvcihzaXpl
X3Qgc2l6ZSA9IDApCisgICAgeworICAgICAgICBpbml0aWFsaXplKHNpemUpOworICAgIH0KKwor
ICAgIFdlYlZlY3Rvcihjb25zdCBXZWJWZWN0b3I8VD4mIG90aGVyKQorICAgIHsKKyAgICAgICAg
aW5pdGlhbGl6ZUZyb20ob3RoZXIubV9wdHIsIG90aGVyLm1fc2l6ZSk7CisgICAgfQorCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEM+CisgICAgV2ViVmVjdG9yKGNvbnN0IEMmIG90aGVyKQorICAg
IHsKKyAgICAgICAgaW5pdGlhbGl6ZUZyb20ob3RoZXIuc2l6ZSgpID8gJm90aGVyWzBdIDogMCwg
b3RoZXIuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBXZWJWZWN0b3ImIG9wZXJhdG9yPShjb25zdCBX
ZWJWZWN0b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMgIT0gJm90aGVyKQorICAg
ICAgICAgICAgYXNzaWduKG90aGVyKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDPgorICAgIFdlYlZlY3RvcjxUPiYgb3BlcmF0b3I9KGNv
bnN0IEMmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMgIT0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBXZWJWZWN0b3I8VD4qPigmb3RoZXIpKQorICAgICAgICAgICAgYXNzaWduKG90aGVy
KTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBDPgorICAgIHZvaWQgYXNzaWduKGNvbnN0IEMmIG90aGVyKQorICAgIHsKKyAgICAgICAgYXNz
aWduKG90aGVyLnNpemUoKSA/ICZvdGhlclswXSA6IDAsIG90aGVyLnNpemUoKSk7CisgICAgfQor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgdm9pZCBhc3NpZ24oY29uc3QgVSogdmFs
dWVzLCBzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgaW5p
dGlhbGl6ZUZyb20odmFsdWVzLCBzaXplKTsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJu
ICFtX3NpemU7IH0KKworICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpCisgICAgeworICAgICAg
ICBhc3NlcnQoaSA8IG1fc2l6ZSk7CisgICAgICAgIHJldHVybiBtX3B0cltpXTsKKyAgICB9Cisg
ICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIGFz
c2VydChpIDwgbV9zaXplKTsKKyAgICAgICAgcmV0dXJuIG1fcHRyW2ldOworICAgIH0KKworICAg
IGJvb2wgY29udGFpbnMoY29uc3QgVCYgdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBpZiAobV9wdHJb
aV0gPT0gdmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFQqIGRhdGEoKSB7IHJldHVybiBtX3B0
cjsgfQorICAgIGNvbnN0IFQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQorCisgICAg
dm9pZCBzd2FwKFdlYlZlY3RvcjxUPiYgb3RoZXIpCisgICAgeworICAgICAgICBzdGQ6OnN3YXAo
bV9wdHIsIG90aGVyLm1fcHRyKTsKKyAgICAgICAgc3RkOjpzd2FwKG1fc2l6ZSwgb3RoZXIubV9z
aXplKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXplKHNpemVfdCBzaXpl
KQorICAgIHsKKyAgICAgICAgbV9zaXplID0gc2l6ZTsKKyAgICAgICAgaWYgKCFtX3NpemUpCisg
ICAgICAgICAgICBtX3B0ciA9IDA7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9wdHIg
PSBzdGF0aWNfY2FzdDxUKj4oOjpvcGVyYXRvciBuZXcoc2l6ZW9mKFQpICogbV9zaXplKSk7Cisg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQorICAgICAgICAg
ICAgICAgIG5ldyAoJm1fcHRyW2ldKSBUKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVT4KKyAgICB2b2lkIGluaXRpYWxpemVGcm9tKGNvbnN0IFUqIHZhbHVl
cywgc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBtX3NpemUgPSBzaXplOworICAgICAgICBp
ZiAoIW1fc2l6ZSkKKyAgICAgICAgICAgIG1fcHRyID0gMDsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBtX3B0ciA9IHN0YXRpY19jYXN0PFQqPig6Om9wZXJhdG9yIG5ldyhzaXplb2YoVCkg
KiBtX3NpemUpKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zaXplOyAr
K2kpCisgICAgICAgICAgICAgICAgbmV3ICgmbV9wdHJbaV0pIFQodmFsdWVzW2ldKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZvaWQgZGVzdHJveSgpCisgICAgeworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQorICAgICAgICAgICAgbV9wdHJbaV0uflQoKTsK
KyAgICAgICAgOjpvcGVyYXRvciBkZWxldGUobV9wdHIpOworICAgIH0KKworICAgIFQqIG1fcHRy
OworICAgIHNpemVfdCBtX3NpemU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3NyYy9EZWZhdWx0V2ViVGhlbWVF
bmdpbmUuY3BwIGIvU291cmNlL1BsYXRmb3JtL25peC9zcmMvRGVmYXVsdFdlYlRoZW1lRW5naW5l
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mOTJkYjg1YTQ1NzZiZTVjNmZhOGJkYjkyM2VjNGRjMmYzODUzMDg3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL25peC9zcmMvRGVmYXVsdFdlYlRo
ZW1lRW5naW5lLmNwcApAQCAtMCwwICsxLDM3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJEZWZhdWx0V2ViVGhlbWVFbmdpbmUu
aCIKKworI2luY2x1ZGUgInB1YmxpYy9XZWJDb2xvci5oIgorI2luY2x1ZGUgInB1YmxpYy9XZWJS
ZWN0LmgiCisjaW5jbHVkZSAicHVibGljL1dlYlNpemUuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+
CisjaW5jbHVkZSA8Y2Fpcm8vY2Fpcm8uaD4KKyNpbmNsdWRlIDxjbWF0aD4KKworY29uc3QgZG91
YmxlIEJHQ29sb3IxID0gMHhGNiAvIDI1Ni4wOworY29uc3QgZG91YmxlIEJHQ29sb3IyID0gMHhE
RSAvIDI1Ni4wOworY29uc3QgZG91YmxlIEJvcmRlckNvbG9yID0gMHhBNCAvIDI1Ni4wOworY29u
c3QgZG91YmxlIEJvcmRlck9uSG92ZXJDb2xvciA9IDB4N0EgLyAyNTYuMDsKK2NvbnN0IGRvdWJs
ZSBDaGVja0NvbG9yID0gMHg2NiAvIDI1Ni4wOworY29uc3QgZG91YmxlIFRleHRGaWVsZERhcmtC
b3JkZXJDb2xvciA9IDB4OUEgLyAyNTYuMDsKK2NvbnN0IGRvdWJsZSBUZXh0RmllbGRMaWdodEJv
cmRlckNvbG9yID0gMHhFRSAvIDI1Ni4wOworCitjb25zdCBpbnQgTWVudUxpc3RCb3JkZXIgPSA1
OworY29uc3QgaW50IE1lbnVMaXN0QXJyb3dTaXplID0gNjsKKworY29uc3QgaW50IElubmVyU3Bp
bkJ1dHRvbkJvcmRlciA9IDM7Citjb25zdCBpbnQgSW5uZXJTcGluQnV0dG9uQXJyb3dTaXplID0g
MjsKKworY29uc3QgV2ViS2l0OjpSR0JBMzIgVGFwSGlnaExpZ2h0Q29sb3IgPSAweDY2MDAwMDAw
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViQ29sb3IgRGVmYXVsdFdlYlRoZW1lRW5naW5l
OjphY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBX
ZWJDb2xvcigwLCAwLCAyNTUpOworfQorCitXZWJDb2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6
OmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdl
YkNvbG9yOjp3aGl0ZTsKK30KKworV2ViQ29sb3IgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjppbmFj
dGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkNv
bG9yKDE3NiwgMTc2LCAxNzYpOworfQorCitXZWJDb2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6
OmluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
V2ViQ29sb3I6OmJsYWNrOworfQorCitXZWJDb2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmFj
dGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVy
biBhY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsKK30KKworV2ViQ29sb3IgRGVmYXVs
dFdlYlRoZW1lRW5naW5lOjphY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7Cit9
CisKK1dlYkNvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6aW5hY3RpdmVMaXN0Qm94U2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5hY3RpdmVTZWxlY3Rp
b25CYWNrZ3JvdW5kQ29sb3IoKTsKK30KKworV2ViQ29sb3IgRGVmYXVsdFdlYlRoZW1lRW5naW5l
OjppbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAg
IHJldHVybiBpbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpOworfQorCitXZWJDb2xv
ciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkNvbG9yKDI1NSwgMTUwLCA1MCk7IC8vIE9yYW5nZS4K
K30KKworV2ViQ29sb3IgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjppbmFjdGl2ZVRleHRTZWFyY2hI
aWdobGlnaHRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkNvbG9yKDI1NSwgMjU1LCAw
KTsgLy8gWWVsbG93LgorfQorCitXZWJDb2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmZvY3Vz
UmluZ0NvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViQ29sb3I6OmJsYWNrOworfQorCitX
ZWJDb2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnRhcEhpZ2hsaWdodENvbG9yKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gVGFwSGlnaExpZ2h0Q29sb3I7Cit9CisKK3N0YXRpYyB2b2lkIGdyYWRp
ZW50RmlsbChjYWlyb190KiBjYWlybywgZG91YmxlIHlTdGFydCwgZG91YmxlIHlMZW5ndGgsIGJv
b2wgaW52ZXJ0ZWQgPSBmYWxzZSkKK3sKKyAgICBkb3VibGUgZ3JhZFN0YXJ0Q29sb3IgPSBCR0Nv
bG9yMTsKKyAgICBkb3VibGUgZ3JhZEVuZENvbG9yID0gQkdDb2xvcjI7CisgICAgaWYgKGludmVy
dGVkKQorICAgICAgICBzdGQ6OnN3YXAoZ3JhZFN0YXJ0Q29sb3IsIGdyYWRFbmRDb2xvcik7CisK
KyAgICBjYWlyb19wYXR0ZXJuX3QqIGdyYWRpZW50ID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVfbGlu
ZWFyKDAsIHlTdGFydCwgMCwgeVN0YXJ0ICsgeUxlbmd0aCk7CisgICAgY2Fpcm9fcGF0dGVybl9h
ZGRfY29sb3Jfc3RvcF9yZ2IoZ3JhZGllbnQsIDAsIGdyYWRTdGFydENvbG9yLCBncmFkU3RhcnRD
b2xvciwgZ3JhZFN0YXJ0Q29sb3IpOworICAgIGNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3Bf
cmdiKGdyYWRpZW50LCAxLCBncmFkRW5kQ29sb3IsIGdyYWRFbmRDb2xvciwgZ3JhZEVuZENvbG9y
KTsKKyAgICBjYWlyb19zZXRfc291cmNlKGNhaXJvLCBncmFkaWVudCk7CisgICAgY2Fpcm9fZmls
bChjYWlybyk7CisgICAgY2Fpcm9fcGF0dGVybl9kZXN0cm95KGdyYWRpZW50KTsKK30KKworc3Rh
dGljIHZvaWQgc2V0dXBCb3JkZXIoY2Fpcm9fdCAqIGNhaXJvLCBXZWJUaGVtZUVuZ2luZTo6U3Rh
dGUgc3RhdGUpCit7CisgICAgZG91YmxlIGJvcmRlckNvbG9yID0gc3RhdGUgPT0gV2ViVGhlbWVF
bmdpbmU6OlN0YXRlSG92ZXIgPyBCb3JkZXJPbkhvdmVyQ29sb3IgOiBCb3JkZXJDb2xvcjsKKyAg
ICBjYWlyb19zZXRfc291cmNlX3JnYihjYWlybywgYm9yZGVyQ29sb3IsIGJvcmRlckNvbG9yLCBi
b3JkZXJDb2xvcik7CisgICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGgoY2Fpcm8sIDEpOworfQorCit2
b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRCdXR0b24oV2ViQ2FudmFzKiBjYW52YXMs
IFN0YXRlIHN0YXRlLCBjb25zdCBXZWJSZWN0JiByZWN0LCBjb25zdCBCdXR0b25FeHRyYVBhcmFt
cyYpIGNvbnN0Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOworICAgIHNldHVwQm9yZGVyKGNh
bnZhcywgc3RhdGUpOworICAgIC8vIENhaXJvIHVzZXMgYSBjb29yZGluYXRlIHN5c3RlbSBub3Qg
YmFzZWQgb24gcGl4ZWwgY29vcmRpbmF0ZXMsIHNvCisgICAgLy8gd2UgbmVlZCB0byBhZGQgIDAu
NSB0byB4IGFuZCB5IGNvb3JkIG9yIHRoZSBsaW5lIHdpbGwgc3RheSBiZXR3ZWVuCisgICAgLy8g
dHdvIHBpeGVscyBpbnN0ZWFkIG9mIGluIHRoZSBtaWRkbGUgb2YgYSBwaXhlbC4KKyAgICBjYWly
b19yZWN0YW5nbGUoY2FudmFzLCByZWN0LnggKyAwLjUsIHJlY3QueSArIDAuNSwgcmVjdC53aWR0
aCwgcmVjdC5oZWlnaHQpOworICAgIGNhaXJvX3N0cm9rZV9wcmVzZXJ2ZShjYW52YXMpOworCisg
ICAgZ3JhZGllbnRGaWxsKGNhbnZhcywgcmVjdC55LCByZWN0LmhlaWdodCwgc3RhdGUgPT0gU3Rh
dGVQcmVzc2VkKTsKKyAgICBjYWlyb19yZXN0b3JlKGNhbnZhcyk7Cit9CisKK3ZvaWQgRGVmYXVs
dFdlYlRoZW1lRW5naW5lOjpwYWludFRleHRGaWVsZChXZWJDYW52YXMqIGNhbnZhcywgU3RhdGUs
IGNvbnN0IFdlYlJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOwor
CisgICAgY29uc3QgZG91YmxlIGxpbmVXaWR0aCA9IDI7CisgICAgY29uc3QgZG91YmxlIGNvcnJl
Y3Rpb24gPSBsaW5lV2lkdGggLyAyLjA7CisKKyAgICBjYWlyb19zZXRfbGluZV93aWR0aChjYW52
YXMsIGxpbmVXaWR0aCk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2FudmFzLCBUZXh0Rmll
bGREYXJrQm9yZGVyQ29sb3IsIFRleHRGaWVsZERhcmtCb3JkZXJDb2xvciwgVGV4dEZpZWxkRGFy
a0JvcmRlckNvbG9yKTsKKyAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgY29ycmVj
dGlvbiwgcmVjdC55ICsgY29ycmVjdGlvbiArIHJlY3QuaGVpZ2h0KTsKKyAgICBjYWlyb19yZWxf
bGluZV90byhjYW52YXMsIDAsIC1yZWN0LmhlaWdodCk7CisgICAgY2Fpcm9fcmVsX2xpbmVfdG8o
Y2FudmFzLCByZWN0LndpZHRoLCAwKTsKKyAgICBjYWlyb19zdHJva2UoY2FudmFzKTsKKworICAg
IGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhbnZhcywgVGV4dEZpZWxkTGlnaHRCb3JkZXJDb2xvciwg
VGV4dEZpZWxkTGlnaHRCb3JkZXJDb2xvciwgVGV4dEZpZWxkTGlnaHRCb3JkZXJDb2xvcik7Cisg
ICAgY2Fpcm9fbW92ZV90byhjYW52YXMsIHJlY3QueCArIGNvcnJlY3Rpb24gKyByZWN0LndpZHRo
LCByZWN0LnkgKyBjb3JyZWN0aW9uKTsKKyAgICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIDAs
IHJlY3QuaGVpZ2h0KTsKKyAgICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIC1yZWN0LndpZHRo
LCAwKTsKKyAgICBjYWlyb19zdHJva2UoY2FudmFzKTsKKworICAgIGNhaXJvX3Jlc3RvcmUoY2Fu
dmFzKTsKK30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50VGV4dEFyZWEoV2Vi
Q2FudmFzKiBjYW52YXMsIFN0YXRlIHN0YXRlLCBjb25zdCBXZWJSZWN0JiByZWN0KSBjb25zdAor
eworICAgIHBhaW50VGV4dEZpZWxkKGNhbnZhcywgc3RhdGUsIHJlY3QpOworfQorCitXZWJTaXpl
IERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6Z2V0Q2hlY2tib3hTaXplKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gV2ViU2l6ZSgxMywgMTMpOworfQorCit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6
cGFpbnRDaGVja2JveChXZWJDYW52YXMqIGNhbnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFdlYlJl
Y3QmIHJlY3QsIGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1zJiBwYXJhbSkgY29uc3QKK3sKKyAgICBj
YWlyb19zYXZlKGNhbnZhcyk7CisgICAgc2V0dXBCb3JkZXIoY2FudmFzLCBzdGF0ZSk7CisgICAg
Y2Fpcm9fcmVjdGFuZ2xlKGNhbnZhcywgcmVjdC54ICsgMC41LCByZWN0LnkgKyAwLjUsIHJlY3Qu
d2lkdGgsIHJlY3QuaGVpZ2h0KTsKKyAgICBjYWlyb19zdHJva2VfcHJlc2VydmUoY2FudmFzKTsK
KworICAgIGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQsIHN0YXRlID09
IFN0YXRlUHJlc3NlZCk7CisKKyAgICBpZiAocGFyYW0uY2hlY2tlZCkgeworICAgICAgICBjb25z
dCBkb3VibGUgYm9yZGVyID0gMzsKKyAgICAgICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGgoY2FudmFz
LCAyKTsKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2FudmFzLCBDaGVja0NvbG9yLCBD
aGVja0NvbG9yLCBDaGVja0NvbG9yKTsKKyAgICAgICAgY2Fpcm9fbW92ZV90byhjYW52YXMsIHJl
Y3QueCArIDAuNSArIGJvcmRlciwgcmVjdC55ICsgMC41ICsgcmVjdC5oZWlnaHQgLSBib3JkZXIp
OworICAgICAgICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIHJlY3Qud2lkdGggLSBib3JkZXIg
KiAyLCAtcmVjdC5oZWlnaHQgKyBib3JkZXIgKiAyKTsKKyAgICAgICAgY2Fpcm9fbW92ZV90byhj
YW52YXMsIHJlY3QueCArIDAuNSArIGJvcmRlciwgcmVjdC55ICsgMC41ICsgYm9yZGVyKTsKKyAg
ICAgICAgY2Fpcm9fcmVsX2xpbmVfdG8oY2FudmFzLCByZWN0LndpZHRoIC0gYm9yZGVyICogMiwg
cmVjdC5oZWlnaHQgLSBib3JkZXIgKiAyKTsKKyAgICAgICAgY2Fpcm9fc3Ryb2tlKGNhbnZhcyk7
CisgICAgfQorCisgICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOworfQorCitXZWJTaXplIERlZmF1
bHRXZWJUaGVtZUVuZ2luZTo6Z2V0UmFkaW9TaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2Vi
U2l6ZSgxMywgMTMpOworfQorCit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRSYWRp
byhXZWJDYW52YXMqIGNhbnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFdlYlJlY3QmIHJlY3QsIGNv
bnN0IEJ1dHRvbkV4dHJhUGFyYW1zJiBwYXJhbSkgY29uc3QKK3sKKyAgICBjYWlyb19zYXZlKGNh
bnZhcyk7CisgICAgc2V0dXBCb3JkZXIoY2FudmFzLCBzdGF0ZSk7CisgICAgY2Fpcm9fYXJjKGNh
bnZhcywgcmVjdC54ICsgcmVjdC53aWR0aCAvIDIuMCwgcmVjdC55ICsgcmVjdC5oZWlnaHQgLyAy
LjAsIHJlY3Qud2lkdGggLyAyLjAsIDAsIDIgKiBNX1BJKTsKKyAgICBjYWlyb19zdHJva2VfcHJl
c2VydmUoY2FudmFzKTsKKworICAgIGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5o
ZWlnaHQpOworCisgICAgaWYgKHBhcmFtLmNoZWNrZWQpIHsKKyAgICAgICAgY2Fpcm9fc2V0X3Nv
dXJjZV9yZ2IoY2FudmFzLCBDaGVja0NvbG9yLCBDaGVja0NvbG9yLCBDaGVja0NvbG9yKTsKKyAg
ICAgICAgY2Fpcm9fYXJjKGNhbnZhcywgcmVjdC54ICsgcmVjdC53aWR0aCAvIDIuMCwgcmVjdC55
ICsgcmVjdC5oZWlnaHQgLyAyLjAsIHJlY3Qud2lkdGggLyA0LjAsIDAsIDIgKiBNX1BJKTsKKyAg
ICAgICAgY2Fpcm9fZmlsbChjYW52YXMpOworICAgIH0KKyAgICBjYWlyb19yZXN0b3JlKGNhbnZh
cyk7Cit9CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpnZXRNZW51TGlzdFBhZGRpbmco
aW50JiBwYWRkaW5nVG9wLCBpbnQmIHBhZGRpbmdMZWZ0LCBpbnQmIHBhZGRpbmdCb3R0b20sIGlu
dCYgcGFkZGluZ1JpZ2h0KSBjb25zdAoreworICAgIHBhZGRpbmdUb3AgPSBNZW51TGlzdEJvcmRl
cjsKKyAgICBwYWRkaW5nTGVmdCA9IE1lbnVMaXN0Qm9yZGVyOworICAgIHBhZGRpbmdCb3R0b20g
PSBNZW51TGlzdEJvcmRlcjsKKyAgICBwYWRkaW5nUmlnaHQgPSAyICogTWVudUxpc3RCb3JkZXIg
KyBNZW51TGlzdEFycm93U2l6ZTsKK30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBh
aW50TWVudUxpc3QoV2ViQ2FudmFzKiBjYW52YXMsIFN0YXRlIHN0YXRlLCBjb25zdCBXZWJSZWN0
JiByZWN0KSBjb25zdAoreworICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKKyAgICBzZXR1cEJvcmRl
cihjYW52YXMsIHN0YXRlKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LnggKyAw
LjUsIHJlY3QueSArIDAuNSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOworICAgIGNhaXJvX3N0
cm9rZV9wcmVzZXJ2ZShjYW52YXMpOworCisgICAgZ3JhZGllbnRGaWxsKGNhbnZhcywgcmVjdC55
LCByZWN0LmhlaWdodCwgc3RhdGUgPT0gU3RhdGVQcmVzc2VkKTsKKworICAgIGNhaXJvX21vdmVf
dG8oY2FudmFzLCByZWN0LnggKyByZWN0LndpZHRoIC0gTWVudUxpc3RBcnJvd1NpemUgLSBNZW51
TGlzdEJvcmRlciwgcmVjdC55ICsgMSArIHJlY3QuaGVpZ2h0IC8gMiAtIE1lbnVMaXN0QXJyb3dT
aXplIC8gMik7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2FudmFzLCBDaGVja0NvbG9yLCBD
aGVja0NvbG9yLCBDaGVja0NvbG9yKTsKKyAgICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIE1l
bnVMaXN0QXJyb3dTaXplLCAwKTsKKyAgICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIC1NZW51
TGlzdEFycm93U2l6ZSAvIDIsIE1lbnVMaXN0QXJyb3dTaXplKTsKKyAgICBjYWlyb19jbG9zZV9w
YXRoKGNhbnZhcyk7CisgICAgY2Fpcm9fZmlsbChjYW52YXMpOworCisgICAgY2Fpcm9fcmVzdG9y
ZShjYW52YXMpOworfQorCitXZWJTaXplIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6Z2V0UHJvZ3Jl
c3NCYXJTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViU2l6ZSgyMDAwLCAzMDApOworfQor
Cit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRQcm9ncmVzc0JhcihXZWJDYW52YXMq
IGNhbnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFdlYlJlY3QmIHJlY3QsIGNvbnN0IFByb2dyZXNz
QmFyRXh0cmFQYXJhbXMmIHBhcmFtcykgY29uc3QKK3sKKyAgICBjYWlyb19zYXZlKGNhbnZhcyk7
CisKKyAgICBpZiAocGFyYW1zLmlzRGV0ZXJtaW5hdGUpIHsKKyAgICAgICAgLy8gQmFja2dyb3Vu
ZAorICAgICAgICBzZXR1cEJvcmRlcihjYW52YXMsIHN0YXRlKTsKKyAgICAgICAgY2Fpcm9fcmVj
dGFuZ2xlKGNhbnZhcywgcmVjdC54LCByZWN0LnksIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTsK
KyAgICAgICAgY2Fpcm9fZmlsbChjYW52YXMpOworICAgICAgICAvLyBQcm9ncmVzcworICAgICAg
ICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCAqIHBh
cmFtcy5wb3NpdGlvbiwgcmVjdC5oZWlnaHQpOworICAgICAgICBncmFkaWVudEZpbGwoY2FudmFz
LCByZWN0LnksIHJlY3QuaGVpZ2h0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBjYWlyb19yZWN0
YW5nbGUoY2FudmFzLCByZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOwor
ICAgICAgICBncmFkaWVudEZpbGwoY2FudmFzLCByZWN0LnksIHJlY3QuaGVpZ2h0LCB0cnVlKTsK
KyAgICB9CisKKyAgICBjYWlyb19yZXN0b3JlKGNhbnZhcyk7Cit9CisKKy8vIFRoZXNlIHZhbHVl
cyBoYXZlIGJlZW4gY29waWVkIGZyb20gUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwCitzdGF0
aWMgY29uc3QgaW50IHByb2dyZXNzQWN0aXZpdHlCbG9ja3MgPSA1Oworc3RhdGljIGNvbnN0IGlu
dCBwcm9ncmVzc0FuaW1hdGlvbkZyYW1lcyA9IDEwOworc3RhdGljIGNvbnN0IGRvdWJsZSBwcm9n
cmVzc0FuaW1hdGlvbkludGVydmFsID0gMC4xMjU7CisKK2RvdWJsZSBEZWZhdWx0V2ViVGhlbWVF
bmdpbmU6OmdldEFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoKSBjb25zdAor
eworICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbkludGVydmFsOworfQorCitkb3VibGUgRGVm
YXVsdFdlYlRoZW1lRW5naW5lOjpnZXRBbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gcHJvZ3Jlc3NBbmltYXRpb25JbnRlcnZhbCAqIHByb2dyZXNz
QW5pbWF0aW9uRnJhbWVzICogMjsgLy8gIjIiIGZvciBiYWNrIGFuZCBmb3J0aDsKK30KKwordm9p
ZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmdldElubmVyU3BpbkJ1dHRvblBhZGRpbmcoaW50JiBw
YWRkaW5nVG9wLCBpbnQmIHBhZGRpbmdMZWZ0LCBpbnQmIHBhZGRpbmdCb3R0b20sIGludCYgcGFk
ZGluZ1JpZ2h0KSBjb25zdAoreworICAgIHBhZGRpbmdUb3AgPSBJbm5lclNwaW5CdXR0b25Cb3Jk
ZXI7CisgICAgcGFkZGluZ0xlZnQgPSBJbm5lclNwaW5CdXR0b25Cb3JkZXI7CisgICAgcGFkZGlu
Z0JvdHRvbSA9IElubmVyU3BpbkJ1dHRvbkJvcmRlcjsKKyAgICBwYWRkaW5nUmlnaHQgPSAyICog
SW5uZXJTcGluQnV0dG9uQm9yZGVyICsgSW5uZXJTcGluQnV0dG9uQXJyb3dTaXplOworfQorCit2
b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRJbm5lclNwaW5CdXR0b24oV2ViQ2FudmFz
KiBjYW52YXMsIFN0YXRlIHN0YXRlLCBjb25zdCBXZWJSZWN0JiByZWN0LCBjb25zdCBJbm5lclNw
aW5CdXR0b25FeHRyYVBhcmFtcyYgcGFyYW0pIGNvbnN0Cit7CisgICAgZG91YmxlIHJlY3RIYWxm
SGVpZ2h0ID0gcmVjdC5oZWlnaHQgLyAyOworCisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOworICAg
IHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUpOworICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMs
IHJlY3QueCArIDAuNSwgcmVjdC55ICsgMS41LCByZWN0LndpZHRoLCByZWN0SGFsZkhlaWdodCk7
CisgICAgY2Fpcm9fc3Ryb2tlX3ByZXNlcnZlKGNhbnZhcyk7CisKKyAgICBncmFkaWVudEZpbGwo
Y2FudmFzLCByZWN0LnksIHJlY3RIYWxmSGVpZ2h0LCBzdGF0ZSA9PSBTdGF0ZVByZXNzZWQgJiYg
cGFyYW0uc3BpblVwKTsKKworICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUpOworICAgIGNh
aXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCArIDAuNSwgcmVjdC55ICsgMC41ICsgcmVjdEhh
bGZIZWlnaHQsIHJlY3Qud2lkdGgsIHJlY3RIYWxmSGVpZ2h0KTsKKyAgICBjYWlyb19zdHJva2Vf
cHJlc2VydmUoY2FudmFzKTsKKworICAgIGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSArIHJl
Y3RIYWxmSGVpZ2h0LCByZWN0SGFsZkhlaWdodCwgc3RhdGUgPT0gU3RhdGVQcmVzc2VkICYmICFw
YXJhbS5zcGluVXApOworCisgICAgY2Fpcm9fbW92ZV90byhjYW52YXMsIHJlY3QueCArIHJlY3Qu
d2lkdGggLSBJbm5lclNwaW5CdXR0b25BcnJvd1NpemUgLSBJbm5lclNwaW5CdXR0b25Cb3JkZXIg
KiAyLCByZWN0LnkgKyByZWN0SGFsZkhlaWdodCArIHJlY3QuaGVpZ2h0IC8gNCAtIElubmVyU3Bp
bkJ1dHRvbkFycm93U2l6ZSArIDEuNSk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2FudmFz
LCBDaGVja0NvbG9yLCBDaGVja0NvbG9yLCBDaGVja0NvbG9yKTsKKyAgICBjYWlyb19yZWxfbGlu
ZV90byhjYW52YXMsIE1lbnVMaXN0QXJyb3dTaXplLCAwKTsKKyAgICBjYWlyb19yZWxfbGluZV90
byhjYW52YXMsIC1NZW51TGlzdEFycm93U2l6ZSAvIDIsIE1lbnVMaXN0QXJyb3dTaXplKTsKKyAg
ICBjYWlyb19jbG9zZV9wYXRoKGNhbnZhcyk7CisKKyAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywg
cmVjdC54ICsgcmVjdC53aWR0aCAtIElubmVyU3BpbkJ1dHRvbkFycm93U2l6ZSAtIElubmVyU3Bp
bkJ1dHRvbkJvcmRlciAqIDIsIHJlY3QueSArIHJlY3QuaGVpZ2h0IC8gNCArIElubmVyU3BpbkJ1
dHRvbkFycm93U2l6ZSk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2FudmFzLCBDaGVja0Nv
bG9yLCBDaGVja0NvbG9yLCBDaGVja0NvbG9yKTsKKyAgICBjYWlyb19yZWxfbGluZV90byhjYW52
YXMsIE1lbnVMaXN0QXJyb3dTaXplLCAwKTsKKyAgICBjYWlyb19yZWxfbGluZV90byhjYW52YXMs
IC1NZW51TGlzdEFycm93U2l6ZSAvIDIsIC1NZW51TGlzdEFycm93U2l6ZSk7CisgICAgY2Fpcm9f
Y2xvc2VfcGF0aChjYW52YXMpOworCisgICAgY2Fpcm9fZmlsbChjYW52YXMpOworfQorCit2b2lk
IERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRNZXRlcihXZWJDYW52YXMqIGNhbnZhcywgU3Rh
dGUgc3RhdGUsIGNvbnN0IFdlYlJlY3QmIHJlY3QsIGNvbnN0IE1ldGVyRXh0cmFQYXJhbXMmIHBh
cmFtcykgY29uc3QKK3sKKyAgICBjYWlyb19zYXZlKGNhbnZhcyk7CisKKyAgICAvLyBCYWNrZ3Jv
dW5kCisgICAgc2V0dXBCb3JkZXIoY2FudmFzLCBzdGF0ZSk7CisgICAgY2Fpcm9fcmVjdGFuZ2xl
KGNhbnZhcywgcmVjdC54LCByZWN0LnksIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTsKKyAgICBj
YWlyb19maWxsKGNhbnZhcyk7CisgICAgLy8gTWV0ZXIKKyAgICBjYWlyb19yZWN0YW5nbGUoY2Fu
dmFzLCByZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCAqIHBhcmFtcy52YWx1ZVJhdGlvKCksIHJl
Y3QuaGVpZ2h0KTsKKyAgICBncmFkaWVudEZpbGwoY2FudmFzLCByZWN0LnksIHJlY3QuaGVpZ2h0
KTsKKworICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsKK30KKworY29uc3QgaW50IFNsaWRlclRy
YWNrSGVpZ2h0ID0gNjsKKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50U2xpZGVy
VHJhY2soV2ViQ2FudmFzKiBjYW52YXMsIFN0YXRlLCBjb25zdCBXZWJSZWN0JiByZWN0KSBjb25z
dAoreworICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFz
LCByZWN0LngsIHJlY3QueSArIChyZWN0LmhlaWdodCAtIFNsaWRlclRyYWNrSGVpZ2h0KSAvIDIu
MCwgcmVjdC53aWR0aCwgU2xpZGVyVHJhY2tIZWlnaHQpOworICAgIGdyYWRpZW50RmlsbChjYW52
YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQsIHRydWUpOworICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFz
KTsKK30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50U2xpZGVyVGh1bWIoV2Vi
Q2FudmFzKiBjYW52YXMsIFN0YXRlIHN0YXRlLCBjb25zdCBXZWJSZWN0JiByZWN0KSBjb25zdAor
eworICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKKyAgICBzZXR1cEJvcmRlcihjYW52YXMsIHN0YXRl
KTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LngsIHJlY3QueSwgcmVjdC53aWR0
aCwgcmVjdC5oZWlnaHQpOworICAgIGNhaXJvX3N0cm9rZV9wcmVzZXJ2ZShjYW52YXMpOworICAg
IGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQsIHN0YXRlID09IFN0YXRl
UHJlc3NlZCk7CisgICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOworfQorCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvUGxhdGZvcm0vbml4L3NyYy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUuaCBiL1NvdXJj
ZS9QbGF0Zm9ybS9uaXgvc3JjL0RlZmF1bHRXZWJUaGVtZUVuZ2luZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdj
MzdiYjkxZGM3NmZhZmRmZDc1OWRjOWZhNWRiZDVmNTQxYTEzOTAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vbml4L3NyYy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUuaApAQCAtMCww
ICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIERlZmF1bHRXZWJUaGVt
ZUVuZ2luZV9oCisjZGVmaW5lIERlZmF1bHRXZWJUaGVtZUVuZ2luZV9oCisKKyNpbmNsdWRlICJw
dWJsaWMvV2ViVGhlbWVFbmdpbmUuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIERl
ZmF1bHRXZWJUaGVtZUVuZ2luZSA6IHB1YmxpYyBXZWJUaGVtZUVuZ2luZSB7CitwdWJsaWM6Cisg
ICAgLy8gVGV4dCBzZWxlY3Rpb24gY29sb3JzLgorICAgIHZpcnR1YWwgV2ViQ29sb3IgYWN0aXZl
U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBXZWJDb2xvciBh
Y3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYkNv
bG9yIGluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVh
bCBXZWJDb2xvciBpbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OworCisg
ICAgLy8gTGlzdCBib3ggc2VsZWN0aW9uIGNvbG9ycworICAgIHZpcnR1YWwgV2ViQ29sb3IgYWN0
aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwg
V2ViQ29sb3IgYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Owor
ICAgIHZpcnR1YWwgV2ViQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENv
bG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBXZWJDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rp
b25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKworICAgIHZpcnR1YWwgV2ViQ29sb3IgYWN0aXZl
VGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBXZWJDb2xvciBp
bmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0OworCisgICAgdmlydHVhbCBX
ZWJDb2xvciBmb2N1c1JpbmdDb2xvcigpIGNvbnN0OworCisgICAgdmlydHVhbCBXZWJDb2xvciB0
YXBIaWdobGlnaHRDb2xvcigpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIHBhaW50QnV0dG9u
KFdlYkNhbnZhcyosIFN0YXRlLCBjb25zdCBXZWJSZWN0JiwgY29uc3QgQnV0dG9uRXh0cmFQYXJh
bXMmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUZXh0RmllbGQoV2ViQ2FudmFzKiwg
U3RhdGUsIGNvbnN0IFdlYlJlY3QmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUZXh0
QXJlYShXZWJDYW52YXMqLCBTdGF0ZSwgY29uc3QgV2ViUmVjdCYpIGNvbnN0OworICAgIHZpcnR1
YWwgV2ViU2l6ZSBnZXRDaGVja2JveFNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDaGVja2JveChXZWJDYW52YXMqLCBTdGF0ZSwgY29uc3QgV2ViUmVjdCYsIGNvbnN0IEJ1dHRv
bkV4dHJhUGFyYW1zJikgY29uc3Q7CisgICAgdmlydHVhbCBXZWJTaXplIGdldFJhZGlvU2l6ZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYWludFJhZGlvKFdlYkNhbnZhcyosIFN0YXRlLCBj
b25zdCBXZWJSZWN0JiwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMmKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRNZW51TGlzdChXZWJDYW52YXMgKiwgU3RhdGUsIGNvbnN0IFdlYlJlY3Qg
JikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGdldE1lbnVMaXN0UGFkZGluZyhpbnQmIHBhZGRp
bmdUb3AsIGludCYgcGFkZGluZ0xlZnQsIGludCYgcGFkZGluZ0JvdHRvbSwgaW50JiBwYWRkaW5n
UmlnaHQpIGNvbnN0OworICAgIHZpcnR1YWwgV2ViU2l6ZSBnZXRQcm9ncmVzc0JhclNpemUoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRQcm9ncmVzc0JhcihXZWJDYW52YXMqLCBTdGF0
ZSwgY29uc3QgV2ViUmVjdCYsIGNvbnN0IFByb2dyZXNzQmFyRXh0cmFQYXJhbXMmKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGRvdWJsZSBnZXRBbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNz
QmFyKCkgY29uc3Q7CisgICAgdmlydHVhbCBkb3VibGUgZ2V0QW5pbWF0aW9uRHVyYXRpb25Gb3JQ
cm9ncmVzc0JhcigpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYWludElubmVyU3BpbkJ1dHRv
bihXZWJDYW52YXMgKiwgU3RhdGUsIGNvbnN0IFdlYlJlY3QgJiwgY29uc3QgSW5uZXJTcGluQnV0
dG9uRXh0cmFQYXJhbXMmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5uZXJTcGluQnV0
dG9uUGFkZGluZyhpbnQmIHBhZGRpbmdUb3AsIGludCYgcGFkZGluZ0xlZnQsIGludCYgcGFkZGlu
Z0JvdHRvbSwgaW50JiBwYWRkaW5nUmlnaHQpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYWlu
dE1ldGVyKFdlYkNhbnZhcyosIFN0YXRlLCBjb25zdCBXZWJSZWN0JiwgY29uc3QgTWV0ZXJFeHRy
YVBhcmFtcyYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYWludFNsaWRlclRyYWNrKFdlYkNh
bnZhcyosIFN0YXRlLCBjb25zdCBXZWJSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBh
aW50U2xpZGVyVGh1bWIoV2ViQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFdlYlJlY3QmKSBjb25zdDsK
K307CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9zcmMvUGxh
dGZvcm0uY3BwIGIvU291cmNlL1BsYXRmb3JtL25peC9zcmMvUGxhdGZvcm0uY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjRkNDJmZGRhODUyN2JhMzFlYWZjNzAzZDk1MmNhOTY1MTIyOTNlZDQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3NyYy9QbGF0Zm9ybS5jcHAKQEAgLTAsMCArMSw3
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicHVibGljL1Bs
YXRmb3JtLmgiCisKKyNpbmNsdWRlICJEZWZhdWx0V2ViVGhlbWVFbmdpbmUuaCIKKworI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgRW1wdHlQbGF0Zm9ybSA6IHB1YmxpYyBQbGF0Zm9ybSB7Citw
dWJsaWM6CisgICAgfkVtcHR5UGxhdGZvcm0oKSB7IH0KK307CitzdGF0aWMgV1RGOjpPd25QdHI8
RW1wdHlQbGF0Zm9ybT4gc19lbXB0eVBsYXRmb3JtID0gV1RGOjphZG9wdFB0cihuZXcgRW1wdHlQ
bGF0Zm9ybSgpKTsKKworc3RhdGljIFBsYXRmb3JtKiBzX3BsYXRmb3JtID0gc19lbXB0eVBsYXRm
b3JtLmdldCgpOworCit2b2lkIFBsYXRmb3JtOjppbml0aWFsaXplKFBsYXRmb3JtKiBwbGF0Zm9y
bSkKK3sKKyAgICBzX3BsYXRmb3JtID0gcGxhdGZvcm07Cit9CisKK3ZvaWQgUGxhdGZvcm06OnNo
dXRkb3duKCkKK3sKKyAgICBzX3BsYXRmb3JtID0gMDsKK30KKworUGxhdGZvcm0qIFBsYXRmb3Jt
OjpjdXJyZW50KCkKK3sKKyAgICByZXR1cm4gc19wbGF0Zm9ybTsKK30KKworV2ViVGhlbWVFbmdp
bmUqIFBsYXRmb3JtOjp0aGVtZUVuZ2luZSgpCit7CisgICAgc3RhdGljIERlZmF1bHRXZWJUaGVt
ZUVuZ2luZSB0aGVtZTsKKyAgICByZXR1cm4gJnRoZW1lOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL25peC9BdWRp
b0J1c05peC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9uaXgvQXVkaW9CdXNO
aXguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmRhZjdlMTg5OTQxZTliNzJiZWMxZDdjN2Q4OGEyNjc4NjI3ZTIz
ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9uaXgv
QXVkaW9CdXNOaXguY3BwCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiQXVkaW9CdXMu
aCIKKworI2luY2x1ZGUgIkF1ZGlvRmlsZVJlYWRlci5oIgorI2luY2x1ZGUgPHB1YmxpYy9QbGF0
Zm9ybS5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJBdWRpb0J1cy5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFz
c1JlZlB0cjxBdWRpb0J1cz4gZGVjb2RlQXVkaW9GaWxlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBz
aXplX3Qgc2l6ZSwgZG91YmxlIHNhbXBsZVJhdGUpCit7CisgICAgV2ViS2l0OjpXZWJBdWRpb0J1
cyB3ZWJBdWRpb0J1czsKKyAgICBpZiAoV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5sb2Fk
QXVkaW9SZXNvdXJjZSgmd2ViQXVkaW9CdXMsIGRhdGEsIHNpemUsIHNhbXBsZVJhdGUpKQorICAg
ICAgICByZXR1cm4gd2ViQXVkaW9CdXMuYXVkaW9CdXMoKTsKKyAgICByZXR1cm4gUGFzc1JlZlB0
cjxBdWRpb0J1cz4oKTsKK30KKworUGFzc1JlZlB0cjxBdWRpb0J1cz4gQXVkaW9CdXM6OmxvYWRQ
bGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIGZsb2F0IHNhbXBsZVJhdGUpCit7Cisg
ICAgU3RyaW5nIGFic29sdXRlRmlsZW5hbWUobWFrZVN0cmluZyhEQVRBX0RJUiwgIi93ZWJhdWRp
by9yZXNvdXJjZXMvIiwgbmFtZSwgIi53YXYiKSk7CisgICAgY29uc3QgV2ViS2l0OjpXZWJEYXRh
JiByZXNvdXJjZSA9IFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+bG9hZFJlc291cmNlKGFi
c29sdXRlRmlsZW5hbWUudXRmOCgpLmRhdGEoKSk7CisKKyAgICBpZiAocmVzb3VyY2UuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxBdWRpb0J1cz4oKTsKKworICAgIC8vIEZJ
WE1FOiB0aGUgc2FtcGxlUmF0ZSBwYXJhbWV0ZXIgaXMgaWdub3JlZC4gSXQgc2hvdWxkIGJlIHJl
bW92ZWQgZnJvbSB0aGUgQVBJLgorICAgIFJlZlB0cjxBdWRpb0J1cz4gYXVkaW9CdXMgPSBkZWNv
ZGVBdWRpb0ZpbGVEYXRhKHJlc291cmNlLmRhdGEoKSwgcmVzb3VyY2Uuc2l6ZSgpLCBzYW1wbGVS
YXRlKTsKKworICAgIGlmICghYXVkaW9CdXMuZ2V0KCkpCisgICAgICAgIHJldHVybiBQYXNzUmVm
UHRyPEF1ZGlvQnVzPigpOworCisgICAgLy8gSWYgdGhlIGJ1cyBpcyBhbHJlYWR5IGF0IHRoZSBy
ZXF1ZXN0ZWQgc2FtcGxlLXJhdGUgdGhlbiByZXR1cm4gYXMgaXMuCisgICAgaWYgKGF1ZGlvQnVz
LT5zYW1wbGVSYXRlKCkgPT0gc2FtcGxlUmF0ZSkKKyAgICAgICAgcmV0dXJuIGF1ZGlvQnVzLnJl
bGVhc2UoKTsKKworICAgIHJldHVybiBBdWRpb0J1czo6Y3JlYXRlQnlTYW1wbGVSYXRlQ29udmVy
dGluZyhhdWRpb0J1cy5nZXQoKSwgZmFsc2UsIHNhbXBsZVJhdGUpOworfQorCitQYXNzUmVmUHRy
PEF1ZGlvQnVzPiBjcmVhdGVCdXNGcm9tSW5NZW1vcnlBdWRpb0ZpbGUoY29uc3Qgdm9pZCogZGF0
YSwgc2l6ZV90IGRhdGFTaXplLCBib29sIG1peFRvTW9ubywgZmxvYXQgc2FtcGxlUmF0ZSkKK3sK
KyAgICAvLyBGSVhNRTogdGhlIHNhbXBsZVJhdGUgcGFyYW1ldGVyIGlzIGlnbm9yZWQuIEl0IHNo
b3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIEFQSS4KKyAgICBSZWZQdHI8QXVkaW9CdXM+IGF1ZGlv
QnVzID0gZGVjb2RlQXVkaW9GaWxlRGF0YShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSks
IGRhdGFTaXplLCBzYW1wbGVSYXRlKTsKKyAgICBpZiAoIWF1ZGlvQnVzLmdldCgpKQorICAgICAg
ICByZXR1cm4gUGFzc1JlZlB0cjxBdWRpb0J1cz4oKTsKKworICAgIC8vIElmIHRoZSBidXMgbmVl
ZHMgbm8gY29udmVyc2lvbiB0aGVuIHJldHVybiBhcyBpcy4KKyAgICBpZiAoKCFtaXhUb01vbm8g
fHwgYXVkaW9CdXMtPm51bWJlck9mQ2hhbm5lbHMoKSA9PSAxKSAmJiBhdWRpb0J1cy0+c2FtcGxl
UmF0ZSgpID09IHNhbXBsZVJhdGUpCisgICAgICAgIHJldHVybiBhdWRpb0J1cy5yZWxlYXNlKCk7
CisKKyAgICByZXR1cm4gQXVkaW9CdXM6OmNyZWF0ZUJ5U2FtcGxlUmF0ZUNvbnZlcnRpbmcoYXVk
aW9CdXMuZ2V0KCksIG1peFRvTW9ubywgc2FtcGxlUmF0ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9uaXgvQXVkaW9EZXN0aW5hdGlvbk5peC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9uaXgvQXVkaW9EZXN0aW5hdGlvbk5peC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNWRlMjE3ZWEwMDY0ZGY5MGI4MWI2N2VjMTMxNjdlMGRjMDM2MzE4NwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL25peC9BdWRpb0Rl
c3RpbmF0aW9uTml4LmNwcApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uTml4
LmgiCisKKyNpbmNsdWRlICJBdWRpb0ZJRk8uaCIKKyNpbmNsdWRlICJBdWRpb1B1bGxGSUZPLmgi
CisjaW5jbHVkZSA8cHVibGljL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Ly8gQnVmZmVyIHNpemUgYXQgd2hpY2ggdGhlIHdlYiBhdWRpbyBlbmdpbmUgd2lsbCByZW5kZXIu
Citjb25zdCB1bnNpZ25lZCByZW5kZXJCdWZmZXJTaXplID0gMTI4OworCisvLyBTaXplIG9mIHRo
ZSBGSUZPCitjb25zdCBzaXplX3QgZmlmb1NpemUgPSA4MTkyOworCisvLyBGYWN0b3J5IG1ldGhv
ZDogQ2hyb21pdW0taW1wbGVtZW50YXRpb24KK1Bhc3NPd25QdHI8QXVkaW9EZXN0aW5hdGlvbj4g
QXVkaW9EZXN0aW5hdGlvbjo6Y3JlYXRlKEF1ZGlvSU9DYWxsYmFjayYgY2FsbGJhY2ssIGNvbnN0
IFN0cmluZyYgaW5wdXREZXZpY2VJZCwgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCB1
bnNpZ25lZCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBmbG9hdCBzYW1wbGVSYXRlKQoreworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgQXVkaW9EZXN0aW5hdGlvbk5peChjYWxsYmFjaywgaW5wdXRE
ZXZpY2VJZCwgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBz
YW1wbGVSYXRlKSk7Cit9CisKK0F1ZGlvRGVzdGluYXRpb25OaXg6OkF1ZGlvRGVzdGluYXRpb25O
aXgoQXVkaW9JT0NhbGxiYWNrJiBjYWxsYmFjaywgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgbnVt
YmVyT2ZJbnB1dENoYW5uZWxzLCB1bnNpZ25lZCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBmbG9h
dCBzYW1wbGVSYXRlKQorICAgIDogbV9jYWxsYmFjayhjYWxsYmFjaykKKyAgICAsIG1fbnVtYmVy
T2ZPdXRwdXRDaGFubmVscyhudW1iZXJPZk91dHB1dENoYW5uZWxzKQorICAgICwgbV9pbnB1dEJ1
cyhBdWRpb0J1czo6Y3JlYXRlKG51bWJlck9mSW5wdXRDaGFubmVscywgcmVuZGVyQnVmZmVyU2l6
ZSkpCisgICAgLCBtX3JlbmRlckJ1cyhBdWRpb0J1czo6Y3JlYXRlKG51bWJlck9mT3V0cHV0Q2hh
bm5lbHMsIHJlbmRlckJ1ZmZlclNpemUsIGZhbHNlKSkKKyAgICAsIG1fc2FtcGxlUmF0ZShzYW1w
bGVSYXRlKQorICAgICwgbV9pc1BsYXlpbmcoZmFsc2UpCit7CisgICAgLy8gVXNlIHRoZSBvcHRp
bWFsIGJ1ZmZlciBzaXplIHJlY29tbWVuZGVkIGJ5IHRoZSBhdWRpbyBiYWNrZW5kLgorICAgIG1f
Y2FsbGJhY2tCdWZmZXJTaXplID0gV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5hdWRpb0hh
cmR3YXJlQnVmZmVyU2l6ZSgpOworCisgICAgLy8gUXVpY2sgZXhpdCBpZiB0aGUgcmVxdWVzdGVk
IHNpemUgaXMgdG9vIGxhcmdlLgorICAgIEFTU0VSVChtX2NhbGxiYWNrQnVmZmVyU2l6ZSArIHJl
bmRlckJ1ZmZlclNpemUgPD0gZmlmb1NpemUpOworICAgIGlmIChtX2NhbGxiYWNrQnVmZmVyU2l6
ZSArIHJlbmRlckJ1ZmZlclNpemUgPiBmaWZvU2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9hdWRpb0RldmljZSA9IGFkb3B0UHRyKFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3Jl
YXRlQXVkaW9EZXZpY2UobV9jYWxsYmFja0J1ZmZlclNpemUsIG51bWJlck9mSW5wdXRDaGFubmVs
cywgbnVtYmVyT2ZPdXRwdXRDaGFubmVscywgc2FtcGxlUmF0ZSwgdGhpcykpOworICAgIEFTU0VS
VChtX2F1ZGlvRGV2aWNlKTsKKworICAgIC8vIENyZWF0ZSBhIEZJRk8gdG8gaGFuZGxlIHRoZSBw
b3NzaWJpbGl0eSBvZiB0aGUgY2FsbGJhY2sgc2l6ZQorICAgIC8vIG5vdCBiZWluZyBhIG11bHRp
cGxlIG9mIHRoZSByZW5kZXIgc2l6ZS4gSWYgdGhlIEZJRk8gYWxyZWFkeQorICAgIC8vIGNvbnRh
aW5zIGVub3VnaCBkYXRhLCB0aGUgZGF0YSB3aWxsIGJlIHByb3ZpZGVkIGRpcmVjdGx5LgorICAg
IC8vIE90aGVyd2lzZSwgdGhlIEZJRk8gd2lsbCBjYWxsIHRoZSBwcm92aWRlciBlbm91Z2ggdGlt
ZXMgdG8KKyAgICAvLyBzYXRpc2Z5IHRoZSByZXF1ZXN0IGZvciBkYXRhLgorICAgIG1fZmlmbyA9
IGFkb3B0UHRyKG5ldyBBdWRpb1B1bGxGSUZPKCp0aGlzLCBudW1iZXJPZk91dHB1dENoYW5uZWxz
LCBmaWZvU2l6ZSwgcmVuZGVyQnVmZmVyU2l6ZSkpOworCisgICAgLy8gSW5wdXQgYnVmZmVyaW5n
LgorICAgIG1faW5wdXRGaWZvID0gYWRvcHRQdHIobmV3IEF1ZGlvRklGTyhudW1iZXJPZklucHV0
Q2hhbm5lbHMsIGZpZm9TaXplKSk7CisKKyAgICAvLyBJZiB0aGUgY2FsbGJhY2sgc2l6ZSBkb2Vz
IG5vdCBtYXRjaCB0aGUgcmVuZGVyIHNpemUsIHRoZW4gd2UgbmVlZCB0byBidWZmZXIgc29tZQor
ICAgIC8vIGV4dHJhIHNpbGVuY2UgZm9yIHRoZSBpbnB1dC4gT3RoZXJ3aXNlLCB3ZSBjYW4gb3Zl
ci1jb25zdW1lIHRoZSBpbnB1dCBGSUZPLgorICAgIGlmIChtX2NhbGxiYWNrQnVmZmVyU2l6ZSAh
PSByZW5kZXJCdWZmZXJTaXplKSB7CisgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgbXVsdGktY2hh
bm5lbCBpbnB1dCBhbmQgZG9uJ3QgaGFyZC1jb2RlIHRvIHN0ZXJlby4KKyAgICAgICAgUmVmUHRy
PEF1ZGlvQnVzPiBzaWxlbmNlID0gQXVkaW9CdXM6OmNyZWF0ZSgyLCByZW5kZXJCdWZmZXJTaXpl
KTsKKyAgICAgICAgbV9pbnB1dEZpZm8tPnB1c2goc2lsZW5jZS5nZXQoKSk7CisgICAgfQorfQor
CitBdWRpb0Rlc3RpbmF0aW9uTml4Ojp+QXVkaW9EZXN0aW5hdGlvbk5peCgpCit7CisgICAgc3Rv
cCgpOworfQorCit2b2lkIEF1ZGlvRGVzdGluYXRpb25OaXg6OnN0YXJ0KCkKK3sKKyAgICBpZiAo
IW1faXNQbGF5aW5nICYmIG1fYXVkaW9EZXZpY2UpIHsKKyAgICAgICAgbV9hdWRpb0RldmljZS0+
c3RhcnQoKTsKKyAgICAgICAgbV9pc1BsYXlpbmcgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBB
dWRpb0Rlc3RpbmF0aW9uTml4OjpzdG9wKCkKK3sKKyAgICBpZiAobV9pc1BsYXlpbmcgJiYgbV9h
dWRpb0RldmljZSkgeworICAgICAgICBtX2F1ZGlvRGV2aWNlLT5zdG9wKCk7CisgICAgICAgIG1f
aXNQbGF5aW5nID0gZmFsc2U7CisgICAgfQorfQorCitmbG9hdCBBdWRpb0Rlc3RpbmF0aW9uOjpo
YXJkd2FyZVNhbXBsZVJhdGUoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oV2Vi
S2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5hdWRpb0hhcmR3YXJlU2FtcGxlUmF0ZSgpKTsKK30K
KwordW5zaWduZWQgbG9uZyBBdWRpb0Rlc3RpbmF0aW9uOjptYXhDaGFubmVsQ291bnQoKQorewor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgp
LT5hdWRpb0hhcmR3YXJlT3V0cHV0Q2hhbm5lbHMoKSk7Cit9CisKK3ZvaWQgQXVkaW9EZXN0aW5h
dGlvbk5peDo6cmVuZGVyKGNvbnN0IFdlYktpdDo6V2ViVmVjdG9yPGZsb2F0Kj4mIHNvdXJjZURh
dGEsIGNvbnN0IFdlYktpdDo6V2ViVmVjdG9yPGZsb2F0Kj4mIGF1ZGlvRGF0YSwgc2l6ZV90IG51
bWJlck9mRnJhbWVzKQoreworICAgIGJvb2wgaXNOdW1iZXJPZkNoYW5uZWxzR29vZCA9IGF1ZGlv
RGF0YS5zaXplKCkgPT0gbV9udW1iZXJPZk91dHB1dENoYW5uZWxzOworICAgIGlmICghaXNOdW1i
ZXJPZkNoYW5uZWxzR29vZCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGJvb2wgaXNCdWZmZXJTaXplR29vZCA9IG51bWJlck9m
RnJhbWVzID09IG1fY2FsbGJhY2tCdWZmZXJTaXplOworICAgIGlmICghaXNCdWZmZXJTaXplR29v
ZCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIEJ1ZmZlciBvcHRpb25hbCBsaXZlIGlucHV0LgorICAgIGlmIChzb3VyY2VE
YXRhLnNpemUoKSA+PSAyKSB7CisgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgbXVsdGktY2hhbm5l
bCBpbnB1dCBhbmQgZG9uJ3QgaGFyZC1jb2RlIHRvIHN0ZXJlby4KKyAgICAgICAgUmVmUHRyPEF1
ZGlvQnVzPiB3cmFwcGVyQnVzID0gQXVkaW9CdXM6OmNyZWF0ZSgyLCBudW1iZXJPZkZyYW1lcywg
ZmFsc2UpOworICAgICAgICB3cmFwcGVyQnVzLT5zZXRDaGFubmVsTWVtb3J5KDAsIHNvdXJjZURh
dGFbMF0sIG51bWJlck9mRnJhbWVzKTsKKyAgICAgICAgd3JhcHBlckJ1cy0+c2V0Q2hhbm5lbE1l
bW9yeSgxLCBzb3VyY2VEYXRhWzFdLCBudW1iZXJPZkZyYW1lcyk7CisgICAgICAgIG1faW5wdXRG
aWZvLT5wdXNoKHdyYXBwZXJCdXMuZ2V0KCkpOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX251bWJlck9mT3V0cHV0Q2hhbm5lbHM7ICsraSkKKyAgICAgICAgbV9yZW5k
ZXJCdXMtPnNldENoYW5uZWxNZW1vcnkoaSwgYXVkaW9EYXRhW2ldLCBudW1iZXJPZkZyYW1lcyk7
CisKKyAgICBtX2ZpZm8tPmNvbnN1bWUobV9yZW5kZXJCdXMuZ2V0KCksIG51bWJlck9mRnJhbWVz
KTsKK30KKwordm9pZCBBdWRpb0Rlc3RpbmF0aW9uTml4Ojpwcm92aWRlSW5wdXQoQXVkaW9CdXMq
IGJ1cywgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICBSZWZQdHI8QXVkaW9CdXM+IHNv
dXJjZUJ1czsKKyAgICBpZiAobV9pbnB1dEZpZm8tPmZyYW1lc0luRmlmbygpID49IGZyYW1lc1Rv
UHJvY2VzcykgeworICAgICAgICBtX2lucHV0Rmlmby0+Y29uc3VtZShtX2lucHV0QnVzLmdldCgp
LCBmcmFtZXNUb1Byb2Nlc3MpOworICAgICAgICBzb3VyY2VCdXMgPSBtX2lucHV0QnVzOworICAg
IH0KKworICAgIG1fY2FsbGJhY2sucmVuZGVyKHNvdXJjZUJ1cy5nZXQoKSwgYnVzLCBmcmFtZXNU
b1Byb2Nlc3MpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
bml4L0F1ZGlvRGVzdGluYXRpb25OaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L25peC9BdWRpb0Rlc3RpbmF0aW9uTml4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTY1NmY1YzA0NzM2YjUzYzgw
ZDJiM2EyYjc5ZGQ0N2YzOGE0ZWZlNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL25peC9BdWRpb0Rlc3RpbmF0aW9uTml4LmgKQEAgLTAsMCArMSw3OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQXVkaW9EZXN0aW5hdGlvbk5peF9oCisjZGVmaW5lIEF1ZGlvRGVzdGluYXRp
b25OaXhfaAorCisjaW5jbHVkZSAiQXVkaW9CdXMuaCIKKyNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0
aW9uLmgiCisjaW5jbHVkZSAiQXVkaW9JT0NhbGxiYWNrLmgiCisjaW5jbHVkZSAiQXVkaW9Tb3Vy
Y2VQcm92aWRlci5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJBdWRpb0RldmljZS5oPgorI2luY2x1
ZGUgPHB1YmxpYy9XZWJWZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBB
dWRpb0ZJRk87CitjbGFzcyBBdWRpb1B1bGxGSUZPOworCisvLyBBbiBBdWRpb0Rlc3RpbmF0aW9u
IHVzaW5nIENocm9taXVtJ3MgYXVkaW8gc3lzdGVtCisKK2NsYXNzIEF1ZGlvRGVzdGluYXRpb25O
aXggOiBwdWJsaWMgQXVkaW9EZXN0aW5hdGlvbiwgcHVibGljIFdlYktpdDo6V2ViQXVkaW9EZXZp
Y2U6OlJlbmRlckNhbGxiYWNrLCBwdWJsaWMgQXVkaW9Tb3VyY2VQcm92aWRlciB7CitwdWJsaWM6
CisgICAgQXVkaW9EZXN0aW5hdGlvbk5peChBdWRpb0lPQ2FsbGJhY2smLCBjb25zdCBTdHJpbmcm
IGlucHV0RGV2aWNlSWQsIHVuc2lnbmVkIG51bWJlck9mSW5wdXRDaGFubmVscywgdW5zaWduZWQg
bnVtYmVyT2ZPdXRwdXRDaGFubmVscywgZmxvYXQgc2FtcGxlUmF0ZSk7CisgICAgdmlydHVhbCB+
QXVkaW9EZXN0aW5hdGlvbk5peCgpOworCisgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCk7CisgICAg
dmlydHVhbCB2b2lkIHN0b3AoKTsKKyAgICBib29sIGlzUGxheWluZygpIHsgcmV0dXJuIG1faXNQ
bGF5aW5nOyB9CisKKyAgICBmbG9hdCBzYW1wbGVSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9zYW1w
bGVSYXRlOyB9CisKKyAgICAvLyBXZWJLaXQ6OldlYkF1ZGlvRGV2aWNlOjpSZW5kZXJDYWxsYmFj
aworICAgIHZpcnR1YWwgdm9pZCByZW5kZXIoY29uc3QgV2ViS2l0OjpXZWJWZWN0b3I8ZmxvYXQq
PiYgc291cmNlRGF0YSwgY29uc3QgV2ViS2l0OjpXZWJWZWN0b3I8ZmxvYXQqPiYgYXVkaW9EYXRh
LCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMpOworCisgICAgLy8gV2ViQ29yZTo6QXVkaW9Tb3VyY2VQ
cm92aWRlcgorICAgIHZpcnR1YWwgdm9pZCBwcm92aWRlSW5wdXQoQXVkaW9CdXMqLCBzaXplX3Qg
ZnJhbWVzVG9Qcm9jZXNzKTsKKworcHJpdmF0ZToKKyAgICBBdWRpb0lPQ2FsbGJhY2smIG1fY2Fs
bGJhY2s7CisgICAgdW5zaWduZWQgbV9udW1iZXJPZk91dHB1dENoYW5uZWxzOworICAgIFJlZlB0
cjxBdWRpb0J1cz4gbV9pbnB1dEJ1czsKKyAgICBSZWZQdHI8QXVkaW9CdXM+IG1fcmVuZGVyQnVz
OworICAgIGZsb2F0IG1fc2FtcGxlUmF0ZTsKKyAgICBib29sIG1faXNQbGF5aW5nOworICAgIE93
blB0cjxXZWJLaXQ6OldlYkF1ZGlvRGV2aWNlPiBtX2F1ZGlvRGV2aWNlOworICAgIHNpemVfdCBt
X2NhbGxiYWNrQnVmZmVyU2l6ZTsKKworICAgIE93blB0cjxBdWRpb0ZJRk8+IG1faW5wdXRGaWZv
OworICAgIE93blB0cjxBdWRpb1B1bGxGSUZPPiBtX2ZpZm87Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBBdWRpb0Rlc3RpbmF0aW9uTml4X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL25peC9GRlRGcmFtZU5peC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9uaXgvRkZURnJhbWVOaXguY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljg1YzY4NjU5OGY3ZTJiZjQ1MjViYzZjZGM0OTI2ZWJmN2UxMjk0N2IKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9uaXgvRkZURnJhbWVOaXguY3BwCkBA
IC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorI2luY2x1ZGUgIkZGVEZyYW1lLmgiCisKKyNp
bmNsdWRlICJWZWN0b3JNYXRoLmgiCisjaW5jbHVkZSA8cHVibGljL1BsYXRmb3JtLmg+CisjaW5j
bHVkZSA8cHVibGljL1dlYkZGVEZyYW1lLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitG
RlRGcmFtZTo6RkZURnJhbWUodW5zaWduZWQgZmZ0U2l6ZSkKKyAgICA6IG1fRkZUU2l6ZShmZnRT
aXplKQorICAgICwgbV9sb2cyRkZUU2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4obG9nMihmZnRT
aXplKSkpCit7CisgICAgbV9mZnRGcmFtZSA9IGFkb3B0UHRyKFdlYktpdDo6UGxhdGZvcm06OmN1
cnJlbnQoKS0+Y3JlYXRlRkZURnJhbWUoZmZ0U2l6ZSkpOworfQorCitGRlRGcmFtZTo6RkZURnJh
bWUoY29uc3QgRkZURnJhbWUmIGZyYW1lKQorICAgIDogbV9GRlRTaXplKGZyYW1lLm1fRkZUU2l6
ZSkKKyAgICAsIG1fbG9nMkZGVFNpemUoZnJhbWUubV9sb2cyRkZUU2l6ZSkKK3sKKyAgICBtX2Zm
dEZyYW1lID0gYWRvcHRQdHIoV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jcmVhdGVGRlRG
cmFtZShmcmFtZS5tX2ZmdEZyYW1lLmdldCgpKSk7Cit9CisKK0ZGVEZyYW1lOjp+RkZURnJhbWUo
KQoreworICAgIG1fZmZ0RnJhbWUucmVsZWFzZSgpOworfQorCit2b2lkIEZGVEZyYW1lOjptdWx0
aXBseShjb25zdCBGRlRGcmFtZSYgZnJhbWUpCit7CisgICAgaWYgKCFtX2ZmdEZyYW1lKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2ZmdEZyYW1lLT5tdWx0aXBseSgqZnJhbWUubV9mZnRGcmFt
ZSk7CisKKyAgICAvLyBTY2FsZSBhY2NvdW50cyB0aGUgcGVjdWxpYXIgc2NhbGluZyBvZiB2ZWNM
aWIgb24gdGhlIE1hYy4KKyAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIHJpZ2h0IHNjYWxpbmcgYWxs
IHRoZSB3YXkgYmFjayB0byBpbnZlcnNlIEZGVC4KKyAgICAvLyBGSVhNRTogaWYgd2UgY2hhbmdl
IHRoZSBzY2FsaW5nIG9uIHRoZSBNYWMgdGhlbiB0aGlzIHNjYWxlCisgICAgLy8gZmFjdG9yIHdp
bGwgbmVlZCB0byBjaGFuZ2UgdG9vLgorICAgIHNjYWxlUGxhbmFyRGF0YSgwLjVmKTsKK30KKwor
Ly8gUHJvdmlkZXMgdGltZSBkb21haW4gc2FtcGxlcyBpbiBhcmd1bWVudCAiZGF0YSIuIEZyYW1l
IHdpbGwgc3RvcmUgdGhlIHRyYW5zZm9ybWVkIGRhdGEuCit2b2lkIEZGVEZyYW1lOjpkb0ZGVChj
b25zdCBmbG9hdCogZGF0YSkKK3sKKyAgICBpZiAoIW1fZmZ0RnJhbWUpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fZmZ0RnJhbWUtPmRvRkZUKGRhdGEpOworCisgICAgc2NhbGVQbGFuYXJEYXRh
KDIuMGYpOworfQorCisvLyBDYWxjdWxhdGVzIGludmVyc2UgdHJhbnNmb3JtIGZyb20gdGhlIHN0
b3JlZCBkYXRhLCBwdXR0aW5nIHRoZSByZXN1bHRzIGluIGFyZ3VtZW50ICdkYXRhJy4KK3ZvaWQg
RkZURnJhbWU6OmRvSW52ZXJzZUZGVChmbG9hdCogZGF0YSkKK3sKKyAgICBpZiAoIW1fZmZ0RnJh
bWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZmZ0RnJhbWUtPmRvSW52ZXJzZUZGVChkYXRh
KTsKKworICAgIC8vIFNjYWxlIHNvIHRoYXQgYSBmb3J3YXJkIHRoZW4gaW52ZXJzZSBGRlQgeWll
bGRzIGV4YWN0bHkgdGhlIG9yaWdpbmFsIGRhdGEuCisgICAgY29uc3QgZmxvYXQgc2NhbGUgPSAx
LjAgLyAoMiAqIG1fRkZUU2l6ZSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fRkZU
U2l6ZTsgKytpKQorICAgICAgICBkYXRhW2ldID0gc2NhbGUgKiBkYXRhW2ldOworfQorCit2b2lk
IEZGVEZyYW1lOjppbml0aWFsaXplKCkKK3sKK30KKwordm9pZCBGRlRGcmFtZTo6Y2xlYW51cCgp
Cit7Cit9CisKK3ZvaWQgRkZURnJhbWU6OnNjYWxlUGxhbmFyRGF0YShmbG9hdCBzY2FsZSkKK3sK
KyAgICBmbG9hdCogcmVhbFAgPSBtX2ZmdEZyYW1lLT5yZWFsRGF0YSgpOworICAgIGZsb2F0KiBp
bWFnUCA9IG1fZmZ0RnJhbWUtPmltYWdEYXRhKCk7CisKKyAgICBjb25zdCB1bnNpZ25lZCBmcmFt
ZXNUb1Byb2Nlc3MgPSBtX2ZmdEZyYW1lLT5mcmVxdWVuY3lEb21haW5TYW1wbGVDb3VudCgpOwor
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYW1lc1RvUHJvY2VzczsgKytpKSB7Cisg
ICAgICAgIHJlYWxQW2ldICo9IHNjYWxlOworICAgICAgICBpbWFnUFtpXSAqPSBzY2FsZTsKKyAg
ICB9Cit9CisKK2Zsb2F0KiBGRlRGcmFtZTo6cmVhbERhdGEoKSBjb25zdAoreworICAgIGlmICgh
bV9mZnRGcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gY29uc3RfY2FzdDxm
bG9hdCo+KG1fZmZ0RnJhbWUtPnJlYWxEYXRhKCkpOworfQorCitmbG9hdCogRkZURnJhbWU6Omlt
YWdEYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZmZ0RnJhbWUpCisgICAgICAgIHJldHVybiAw
OworCisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8ZmxvYXQqPihtX2ZmdEZyYW1lLT5pbWFnRGF0YSgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9B
VURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9zdXBwb3J0L1dl
YkF1ZGlvQnVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9zdXBwb3J0L1dlYkF1
ZGlvQnVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNjEyMGRkYzkyNDBiZGUxMjFhMWNjNDdiNThjZGNiOGUx
YmI0ODNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L3N1
cHBvcnQvV2ViQXVkaW9CdXMuY3BwCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJBdWRpb0J1cy5oPgorCisjaWYg
RU5BQkxFKFdFQl9BVURJTykKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgorI2Vsc2UKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK2NsYXNzIEF1ZGlvQnVzIHsKK307Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisjZW5kaWYKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFdlYkF1ZGlvQnVzUHJpdmF0ZSB7CitwdWJsaWM6CisgICAgV2ViQXVkaW9CdXNQ
cml2YXRlKFBhc3NSZWZQdHI8V2ViQ29yZTo6QXVkaW9CdXM+IGF1ZGlvQnVzKQorICAgICAgICA6
IG1fYXVkaW9CdXMoYXVkaW9CdXMpCisgICAgeyB9CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6QXVk
aW9CdXM+IG1fYXVkaW9CdXM7Cit9OworCit2b2lkIFdlYkF1ZGlvQnVzOjppbml0aWFsaXplKHVu
c2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBsZW5ndGgsIGRvdWJsZSBzYW1wbGVSYXRl
KQoreworI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAgaWYgKG1fZCkKKyAgICAgICAgZGVsZXRl
IG1fZDsKKyAgICBtX2QgPSBuZXcgV2ViQXVkaW9CdXNQcml2YXRlKFdlYkNvcmU6OkF1ZGlvQnVz
OjpjcmVhdGUobnVtYmVyT2ZDaGFubmVscywgbGVuZ3RoKSk7CisgICAgbV9kLT5tX2F1ZGlvQnVz
LT5zZXRTYW1wbGVSYXRlKHNhbXBsZVJhdGUpOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYkF1ZGlvQnVzOjpyZXNpemVTbWFsbGVyKHNpemVf
dCBuZXdMZW5ndGgpCit7CisjaWYgRU5BQkxFKFdFQl9BVURJTykKKyAgICBBU1NFUlQobV9kKTsK
KyAgICBpZiAobV9kKSB7CisgICAgICAgIEFTU0VSVChuZXdMZW5ndGggPD0gbGVuZ3RoKCkpOwor
ICAgICAgICBtX2QtPm1fYXVkaW9CdXMtPnJlc2l6ZVNtYWxsZXIobmV3TGVuZ3RoKTsKKyAgICB9
CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKK3ZvaWQgV2Vi
QXVkaW9CdXM6OnJlc2V0KCkKK3sKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIGRlbGV0ZSBt
X2Q7CisgICAgbV9kID0gMDsKKyNlbHNlCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5k
aWYKK30KKwordW5zaWduZWQgV2ViQXVkaW9CdXM6Om51bWJlck9mQ2hhbm5lbHMoKSBjb25zdAor
eworI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAgaWYgKCFtX2QpCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBtX2QtPm1fYXVkaW9CdXMtPm51bWJlck9mQ2hhbm5lbHMoKTsKKyNlbHNl
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKwor
c2l6ZV90IFdlYkF1ZGlvQnVzOjpsZW5ndGgoKSBjb25zdAoreworI2lmIEVOQUJMRShXRUJfQVVE
SU8pCisgICAgaWYgKCFtX2QpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2QtPm1f
YXVkaW9CdXMtPmxlbmd0aCgpOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gMDsKKyNlbmRpZgorfQorCitkb3VibGUgV2ViQXVkaW9CdXM6OnNhbXBsZVJhdGUo
KSBjb25zdAoreworI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAgaWYgKCFtX2QpCisgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiBtX2QtPm1fYXVkaW9CdXMtPnNhbXBsZVJhdGUoKTsKKyNl
bHNlCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30K
KworZmxvYXQqIFdlYkF1ZGlvQnVzOjpjaGFubmVsRGF0YSh1bnNpZ25lZCBjaGFubmVsSW5kZXgp
Cit7CisjaWYgRU5BQkxFKFdFQl9BVURJTykKKyAgICBpZiAoIW1fZCkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgQVNTRVJUKGNoYW5uZWxJbmRleCA8IG51bWJlck9mQ2hhbm5lbHMoKSk7CisgICAg
cmV0dXJuIG1fZC0+bV9hdWRpb0J1cy0+Y2hhbm5lbChjaGFubmVsSW5kZXgpLT5tdXRhYmxlRGF0
YSgpOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKKyNl
bmRpZgorfQorCitQYXNzUmVmUHRyPEF1ZGlvQnVzPiBXZWJBdWRpb0J1czo6YXVkaW9CdXMoKQor
eworI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAgcmV0dXJuIG1fZC0+bV9hdWRpb0J1czsKKyNl
bHNlCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CisjZW5k
aWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uaXgvc3VwcG9ydC9XZWJEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25peC9zdXBwb3J0L1dlYkRhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzYmM2MjdhZTZjOTk4NGY3
MmI3OTc3ZDhmNWQyYzkxN2U5ODAzMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uaXgvc3VwcG9ydC9XZWJEYXRhLmNwcApAQCAtMCwwICsxLDEwMyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViRGF0YS5oPgorCisjaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgV2ViRGF0YVByaXZhdGUgOiBwdWJsaWMgU2hhcmVkQnVmZmVyIHsK
K307CisKK3ZvaWQgV2ViRGF0YTo6cmVzZXQoKQoreworICAgIGlmIChtX3ByaXZhdGUpIHsKKyAg
ICAgICAgbV9wcml2YXRlLT5kZXJlZigpOworICAgICAgICBtX3ByaXZhdGUgPSAwOworICAgIH0K
K30KKwordm9pZCBXZWJEYXRhOjphc3NpZ24oY29uc3QgV2ViRGF0YSYgb3RoZXIpCit7CisgICAg
V2ViRGF0YVByaXZhdGUqIHAgPSBjb25zdF9jYXN0PFdlYkRhdGFQcml2YXRlKj4ob3RoZXIubV9w
cml2YXRlKTsKKyAgICBpZiAocCkKKyAgICAgICAgcC0+cmVmKCk7CisgICAgYXNzaWduKHApOwor
fQorCit2b2lkIFdlYkRhdGE6OmFzc2lnbihjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkK
K3sKKyAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViRGF0YVByaXZhdGUqPigKKyAgICAgICAgU2hh
cmVkQnVmZmVyOjpjcmVhdGUoZGF0YSwgc2l6ZSkubGVha1JlZigpKSk7Cit9CisKK3NpemVfdCBX
ZWJEYXRhOjpzaXplKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8V2ViRGF0YVByaXZhdGUqPihtX3ByaXZhdGUp
LT5zaXplKCk7Cit9CisKK2NvbnN0IGNoYXIqIFdlYkRhdGE6OmRhdGEoKSBjb25zdAoreworICAg
IGlmICghbV9wcml2YXRlKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY29uc3RfY2Fz
dDxXZWJEYXRhUHJpdmF0ZSo+KG1fcHJpdmF0ZSktPmRhdGEoKTsKK30KKworV2ViRGF0YTo6V2Vi
RGF0YShjb25zdCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mIGJ1ZmZlcikKKyAgICA6IG1fcHJp
dmF0ZShzdGF0aWNfY2FzdDxXZWJEYXRhUHJpdmF0ZSo+KGJ1ZmZlci5sZWFrUmVmKCkpKQorewor
fQorCitXZWJEYXRhJiBXZWJEYXRhOjpvcGVyYXRvcj0oY29uc3QgUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+JiBidWZmZXIpCit7CisgICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkRhdGFQcml2YXRl
Kj4oYnVmZmVyLmxlYWtSZWYoKSkpOworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViRGF0YTo6
b3BlcmF0b3IgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+KGNvbnN0X2Nhc3Q8V2ViRGF0YVByaXZhdGUqPihtX3By
aXZhdGUpKTsKK30KKwordm9pZCBXZWJEYXRhOjphc3NpZ24oV2ViRGF0YVByaXZhdGUqIHApCit7
CisgICAgLy8gcCBpcyBhbHJlYWR5IHJlZidkIGZvciB1cyBieSB0aGUgY2FsbGVyCisgICAgaWYg
KG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5kZXJlZigpOworICAgIG1fcHJpdmF0ZSA9
IHA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206016</attachid>
            <date>2013-07-03 11:56:52 -0700</date>
            <delta_ts>2013-09-09 12:16:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118331-20130703155449.patch</filename>
            <type>text/plain</type>
            <size>100708</size>
            <attacher name="Marcelo Lira">marcelo.lira</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUyMjk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBlY2I4NTg4N2RmMjc4
ZWEwOGU4ODM1ZjBlYjI4MTJkMmExZTE3MzNkLi5mOGNiNjU4ZDRiYjcyYjMwNWJlMDAyYjFkZDJj
MzU1Y2FhZWM1ZGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTcgQEAKKzIwMTMtMDctMDMg
IFRoaWFnbyBkZSBCYXJyb3MgTGFjZXJkYSAgPHRoaWFnby5sYWNlcmRhQG9wZW5ib3NzYS5vcmc+
CisKKyAgICAgICAgQWRkaW5nIE5peCBmaWxlcyBpbiBTb3VyY2UvUGxhdGZvcm0gdG8gdHJ1bmsK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODMzMQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogbml4L3B1
YmxpYy9QbGF0Zm9ybS5oOiBBZGRlZC4KKyAgICAgICAgKiBuaXgvcHVibGljL1dlYkF1ZGlvQnVz
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJBdWRpb0J1czo6V2ViQXVkaW9CdXMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJBdWRpb0J1czo6fldlYkF1ZGlvQnVzKToKKyAgICAgICAgKiBu
aXgvcHVibGljL1dlYkF1ZGlvRGV2aWNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJB
dWRpb0RldmljZTo6UmVuZGVyQ2FsbGJhY2s6OnJlbmRlcik6CisgICAgICAgIChXZWJLaXQ6Oldl
YkF1ZGlvRGV2aWNlOjpSZW5kZXJDYWxsYmFjazo6flJlbmRlckNhbGxiYWNrKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQXVkaW9EZXZpY2U6On5XZWJBdWRpb0RldmljZSk6CisgICAgICAgICogbml4
L3B1YmxpYy9XZWJDYW52YXMuaDogQWRkZWQuCisgICAgICAgICogbml4L3B1YmxpYy9XZWJDb2xv
ci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29sb3I6OldlYkNvbG9yKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29sb3I6Om9wZXJhdG9yIFJHQkEzMik6CisgICAgICAgIChXZWJLaXQ6
OldlYkNvbG9yOjpyKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29sb3I6OmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb2xvcjo6Yik6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbG9yOjphKToKKyAg
ICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yIT0p
OgorICAgICAgICAqIG5peC9wdWJsaWMvV2ViQ29tbW9uLmg6IEFkZGVkLgorICAgICAgICAqIG5p
eC9wdWJsaWMvV2ViRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YTo6fldl
YkRhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJEYXRhOjpXZWJEYXRhKToKKyAgICAgICAgKFdl
YktpdDo6V2ViRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YTo6aXNF
bXB0eSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGE6OmlzTnVsbCk6CisgICAgICAgICogbml4
L3B1YmxpYy9XZWJGRlRGcmFtZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViRkZURnJh
bWU6On5XZWJGRlRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZGVEZyYW1lOjpkb0ZGVCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkZGVEZyYW1lOjpkb0ludmVyc2VGRlQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJGRlRGcmFtZTo6bXVsdGlwbHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJGRlRG
cmFtZTo6ZnJlcXVlbmN5RG9tYWluU2FtcGxlQ291bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJG
RlRGcmFtZTo6cmVhbERhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJGRlRGcmFtZTo6aW1hZ0Rh
dGEpOgorICAgICAgICAqIG5peC9wdWJsaWMvV2ViR2FtZXBhZC5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViR2FtZXBhZDo6V2ViR2FtZXBhZCk6CisgICAgICAgICogbml4L3B1YmxpYy9X
ZWJHYW1lcGFkcy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViR2FtZXBhZHM6OldlYkdh
bWVwYWRzKToKKyAgICAgICAgKiBuaXgvcHVibGljL1dlYlJlY3QuaDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OldlYlJlY3Q6OldlYlJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZWN0Ojpv
cGVyYXRvcj0pOgorICAgICAgICAqIG5peC9wdWJsaWMvV2ViU2l6ZS5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViU2l6ZTo6aXNFbXB0eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNpemU6
OldlYlNpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJTaXplOjpvcGVyYXRvcj0pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJTaXplOjpvcGVyYXRvciBXZWJDb3JlOjpJbnRTaXplKToKKyAgICAgICAg
KFdlYktpdDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yIT0pOgorICAg
ICAgICAqIG5peC9wdWJsaWMvV2ViVGhlbWVFbmdpbmUuaDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlRoZW1lRW5naW5lOjpNZXRlckV4dHJhUGFyYW1zOjp2YWx1ZVJhdGlvKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVGhlbWVFbmdpbmU6OmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJUaGVtZUVuZ2luZTo6ZXh0cmFRdWlya3NTdHlsZVNoZWV0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVGhlbWVFbmdpbmU6OmV4dHJhUGx1Z0luc1N0eWxlU2hlZXQpOgor
ICAgICAgICAqIG5peC9wdWJsaWMvV2ViVmVjdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJWZWN0b3I6On5XZWJWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJWZWN0b3I6Oldl
YlZlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZlY3Rvcjo6b3BlcmF0b3I9KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmVjdG9yOjphc3NpZ24pOgorICAgICAgICAoV2ViS2l0OjpXZWJWZWN0
b3I6OnNpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWZWN0b3I6OmlzRW1wdHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWZWN0b3I6Om9wZXJhdG9yW10pOgorICAgICAgICAoV2ViS2l0OjpXZWJW
ZWN0b3I6OmNvbnRhaW5zKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmVjdG9yOjpkYXRhKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmVjdG9yOjpzd2FwKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmVj
dG9yOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmVjdG9yOjppbml0aWFsaXpl
RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZlY3Rvcjo6ZGVzdHJveSk6CisgICAgICAgICog
bml4L3NyYy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6RGVmYXVsdFdlYlRoZW1lRW5naW5lOjphY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Ip
OgorICAgICAgICAoV2ViS2l0OjpEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmFjdGl2ZVNlbGVjdGlv
bkZvcmVncm91bmRDb2xvcik6CisgICAgICAgIChXZWJLaXQ6OkRlZmF1bHRXZWJUaGVtZUVuZ2lu
ZTo6aW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViS2l0OjpE
ZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKToK
KyAgICAgICAgKFdlYktpdDo6RGVmYXVsdFdlYlRoZW1lRW5naW5lOjphY3RpdmVMaXN0Qm94U2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYktpdDo6RGVmYXVsdFdlYlRoZW1l
RW5naW5lOjphY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKToKKyAgICAgICAg
KFdlYktpdDo6RGVmYXVsdFdlYlRoZW1lRW5naW5lOjppbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViS2l0OjpEZWZhdWx0V2ViVGhlbWVFbmdpbmU6
OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcik6CisgICAgICAgIChXZWJL
aXQ6OkRlZmF1bHRXZWJUaGVtZUVuZ2luZTo6YWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9y
KToKKyAgICAgICAgKFdlYktpdDo6RGVmYXVsdFdlYlRoZW1lRW5naW5lOjppbmFjdGl2ZVRleHRT
ZWFyY2hIaWdobGlnaHRDb2xvcik6CisgICAgICAgIChXZWJLaXQ6OkRlZmF1bHRXZWJUaGVtZUVu
Z2luZTo6Zm9jdXNSaW5nQ29sb3IpOgorICAgICAgICAoV2ViS2l0OjpEZWZhdWx0V2ViVGhlbWVF
bmdpbmU6OnRhcEhpZ2hsaWdodENvbG9yKToKKyAgICAgICAgKFdlYktpdDo6Z3JhZGllbnRGaWxs
KToKKyAgICAgICAgKFdlYktpdDo6c2V0dXBCb3JkZXIpOgorICAgICAgICAoV2ViS2l0OjpEZWZh
dWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYktpdDo6RGVmYXVs
dFdlYlRoZW1lRW5naW5lOjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChXZWJLaXQ6OkRlZmF1
bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRUZXh0QXJlYSk6CisgICAgICAgIChXZWJLaXQ6OkRlZmF1
bHRXZWJUaGVtZUVuZ2luZTo6Z2V0Q2hlY2tib3hTaXplKToKKyAgICAgICAgKFdlYktpdDo6RGVm
YXVsdFdlYlRoZW1lRW5naW5lOjpwYWludENoZWNrYm94KToKKyAgICAgICAgKFdlYktpdDo6RGVm
YXVsdFdlYlRoZW1lRW5naW5lOjpnZXRSYWRpb1NpemUpOgorICAgICAgICAoV2ViS2l0OjpEZWZh
dWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50UmFkaW8pOgorICAgICAgICAoV2ViS2l0OjpEZWZhdWx0
V2ViVGhlbWVFbmdpbmU6OmdldE1lbnVMaXN0UGFkZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkRl
ZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChXZWJLaXQ6OkRl
ZmF1bHRXZWJUaGVtZUVuZ2luZTo6Z2V0UHJvZ3Jlc3NCYXJTaXplKToKKyAgICAgICAgKFdlYktp
dDo6RGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludFByb2dyZXNzQmFyKToKKyAgICAgICAgKFdl
YktpdDo6RGVmYXVsdFdlYlRoZW1lRW5naW5lOjpnZXRBbmltYXRpb25SZXBlYXRJbnRlcnZhbEZv
clByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYktpdDo6RGVmYXVsdFdlYlRoZW1lRW5naW5lOjpn
ZXRBbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYktpdDo6RGVm
YXVsdFdlYlRoZW1lRW5naW5lOjpnZXRJbm5lclNwaW5CdXR0b25QYWRkaW5nKToKKyAgICAgICAg
KFdlYktpdDo6RGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludElubmVyU3BpbkJ1dHRvbik6Cisg
ICAgICAgIChXZWJLaXQ6OkRlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRNZXRlcik6CisgICAg
ICAgIChXZWJLaXQ6OkRlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRTbGlkZXJUcmFjayk6Cisg
ICAgICAgIChXZWJLaXQ6OkRlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRTbGlkZXJUaHVtYik6
CisgICAgICAgICogbml4L3NyYy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUuaDogQWRkZWQuCisgICAg
ICAgICogbml4L3NyYy9QbGF0Zm9ybS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpFbXB0
eVBsYXRmb3JtOjp+RW1wdHlQbGF0Zm9ybSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXRmb3JtOjpp
bml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6UGxhdGZvcm06OnNodXRkb3duKToKKyAgICAg
ICAgKFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQpOgorICAgICAgICAoV2ViS2l0OjpQbGF0Zm9y
bTo6dGhlbWVFbmdpbmUpOgorCiAyMDEzLTA2LTE0ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtA
aWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIEdUSyBidWlsZCBmaXguCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggMzVjOWE4MjgyMGIxZmQwN2I5OGE1MTVhMWJiNjNkZjgxYTc4ZDYxMC4uMzQ3Y2ZhNGM1
YzQxYjJkYzUxZTM1ZWViMjhjNTY4MTA0NjQ2N2YyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5
IEBACisyMDEzLTA3LTAzICBNYXJjZWxvIExpcmEgIDxtYXJjZWxvLmxpcmFAb3BlbmJvc3NhLm9y
Zz4KKworICAgICAgICBBZGRpbmcgTml4IGZpbGVzIGluIFNvdXJjZS9QbGF0Zm9ybSB0byB0cnVu
aworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4MzMx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9uaXgvQXVkaW9CdXNO
aXguY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRlY29kZUF1ZGlvRmlsZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9CdXM6OmxvYWRQbGF0Zm9ybVJlc291cmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUJ1c0Zyb21Jbk1lbW9yeUF1ZGlvRmlsZSk6CisgICAgICAgICog
cGxhdGZvcm0vYXVkaW8vbml4L0F1ZGlvRGVzdGluYXRpb25OaXguY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb0Rlc3RpbmF0aW9uTml4OjpBdWRpb0Rlc3RpbmF0aW9uTml4KToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvRGVzdGluYXRpb25OaXg6On5BdWRpb0Rlc3RpbmF0aW9uTml4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25OaXg6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvRGVzdGluYXRpb25OaXg6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9E
ZXN0aW5hdGlvbjo6aGFyZHdhcmVTYW1wbGVSYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
RGVzdGluYXRpb246Om1heENoYW5uZWxDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rl
c3RpbmF0aW9uTml4OjpyZW5kZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlv
bk5peDo6cHJvdmlkZUlucHV0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9uaXgvQXVkaW9E
ZXN0aW5hdGlvbk5peC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRp
b25OaXg6OmlzUGxheWluZyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uTml4
OjpzYW1wbGVSYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9uaXgvRkZURnJhbWVOaXgu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZGVEZyYW1lOjpGRlRGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6fkZGVEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZG
VEZyYW1lOjptdWx0aXBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6ZG9GRlQpOgor
ICAgICAgICAoV2ViQ29yZTo6RkZURnJhbWU6OmRvSW52ZXJzZUZGVCk6CisgICAgICAgIChXZWJD
b3JlOjpGRlRGcmFtZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6
Y2xlYW51cCk6CisgICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6c2NhbGVQbGFuYXJEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkZGVEZyYW1lOjpyZWFsRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpGRlRGcmFtZTo6aW1hZ0RhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL25peC9zdXBwb3J0L1dl
YkF1ZGlvQnVzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkF1ZGlvQnVzUHJpdmF0
ZTo6V2ViQXVkaW9CdXNQcml2YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXVkaW9CdXM6Omlu
aXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdWRpb0J1czo6cmVzaXplU21hbGxlcik6
CisgICAgICAgIChXZWJLaXQ6OldlYkF1ZGlvQnVzOjpyZXNldCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkF1ZGlvQnVzOjpudW1iZXJPZkNoYW5uZWxzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXVk
aW9CdXM6Omxlbmd0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1ZGlvQnVzOjpzYW1wbGVSYXRl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQXVkaW9CdXM6OmNoYW5uZWxEYXRhKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQXVkaW9CdXM6OmF1ZGlvQnVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uaXgv
c3VwcG9ydC9XZWJEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkRhdGE6OnJl
c2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YTo6YXNzaWduKToKKyAgICAgICAgKFdlYktp
dDo6V2ViRGF0YTo6c2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGE6OmRhdGEpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJEYXRhOjpXZWJEYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0
YTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YTo6b3BlcmF0b3IgUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+KToKKwogMjAxMy0wNy0wMiAgcGVhdm9Ab3V0bG9vay5jb20gIDxw
ZWF2b0BvdXRsb29rLmNvbT4KIAogICAgICAgICBbQ3VybF0gQ3Jhc2ggYWZ0ZXIgZG93bmxvYWQu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9QbGF0Zm9ybS5oIGIvU291
cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvUGxhdGZvcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYjI1N2E1ZjJm
MjEyMTU4OWQwMzFkYWQzZTkwNzhjMzEwMjZlZmM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1BsYXRmb3JtL25peC9wdWJsaWMvUGxhdGZvcm0uaApAQCAtMCwwICsxLDg3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQ
bGF0Zm9ybV9oCisjZGVmaW5lIFBsYXRmb3JtX2gKKworI2luY2x1ZGUgIldlYkF1ZGlvRGV2aWNl
LmgiCisjaW5jbHVkZSAiV2ViRGF0YS5oIgorI2luY2x1ZGUgIldlYkdhbWVwYWRzLmgiCisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJBdWRpb0J1czsKK2NsYXNzIFdlYkZGVEZyYW1l
OworY2xhc3MgV2ViVGhlbWVFbmdpbmU7CisKK2NsYXNzIFdFQktJVF9FWFBPUlQgUGxhdGZvcm0g
eworcHVibGljOgorCisgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgdm9pZCBpbml0aWFsaXplKFBs
YXRmb3JtKik7CisgICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgdm9pZCBzaHV0ZG93bigpOworICAg
IFdFQktJVF9FWFBPUlQgc3RhdGljIFBsYXRmb3JtKiBjdXJyZW50KCk7CisKKyAgICAvLyBBdWRp
byAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICAgIHZpcnR1YWwgZG91YmxlIGF1ZGlvSGFyZHdhcmVTYW1wbGVSYXRlKCkgeyBy
ZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgc2l6ZV90IGF1ZGlvSGFyZHdhcmVCdWZmZXJTaXplKCkg
eyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgYXVkaW9IYXJkd2FyZU91dHB1dENo
YW5uZWxzKCkgeyByZXR1cm4gMDsgfQorCisgICAgLy8gQ3JlYXRlcyBhIGRldmljZSBmb3IgYXVk
aW8gSS9PLgorICAgIC8vIFBhc3MgaW4gKG51bWJlck9mSW5wdXRDaGFubmVscyA+IDApIGlmIGxp
dmUvbG9jYWwgYXVkaW8gaW5wdXQgaXMgZGVzaXJlZC4KKyAgICB2aXJ0dWFsIFdlYkF1ZGlvRGV2
aWNlKiBjcmVhdGVBdWRpb0RldmljZShzaXplX3QgLypidWZmZXJTaXplKi8sIHVuc2lnbmVkIC8q
bnVtYmVyT2ZJbnB1dENoYW5uZWxzKi8sIHVuc2lnbmVkIC8qbnVtYmVyT2ZDaGFubmVscyovLCBk
b3VibGUgLypzYW1wbGVSYXRlKi8sIFdlYkF1ZGlvRGV2aWNlOjpSZW5kZXJDYWxsYmFjayopIHsg
cmV0dXJuIDA7IH0KKworCisgICAgLy8gR2FtZXBhZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgdmlydHVhbCB2b2lkIHNh
bXBsZUdhbWVwYWRzKFdlYkdhbWVwYWRzJiBpbnRvKSB7IGludG8ubGVuZ3RoID0gMDsgfQorCisK
KyAgICAvLyBGRlRGcmFtZQorICAgIHZpcnR1YWwgV2ViRkZURnJhbWUqIGNyZWF0ZUZGVEZyYW1l
KHVuc2lnbmVkIC8qZmZ0c2l6ZSovKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBXZWJGRlRG
cmFtZSogY3JlYXRlRkZURnJhbWUoY29uc3QgV2ViRkZURnJhbWUqIC8qZnJhbWUqLykgeyByZXR1
cm4gMDsgfQorCisgICAgLy8gUmVzb3VyY2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUmV0dXJucyBhIGJsb2Igb2Yg
ZGF0YSBjb3JyZXNwb25kaW5nIHRvIHRoZSBuYW1lZCByZXNvdXJjZS4KKyAgICB2aXJ0dWFsIFdl
YkRhdGEgbG9hZFJlc291cmNlKGNvbnN0IGNoYXIqIC8qbmFtZSovKSB7IHJldHVybiBXZWJEYXRh
KCk7IH0KKworICAgIC8vIERlY29kZXMgdGhlIGluLW1lbW9yeSBhdWRpbyBmaWxlIGRhdGEgYW5k
IHJldHVybnMgdGhlIGxpbmVhciBQQ00gYXVkaW8gZGF0YSBpbiB0aGUgZGVzdGluYXRpb25CdXMu
CisgICAgLy8gQSBzYW1wbGUtcmF0ZSBjb252ZXJzaW9uIHRvIHNhbXBsZVJhdGUgd2lsbCBvY2N1
ciBpZiB0aGUgZmlsZSBkYXRhIGlzIGF0IGEgZGlmZmVyZW50IHNhbXBsZS1yYXRlLgorICAgIC8v
IFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLgorICAgIHZpcnR1YWwgYm9vbCBsb2FkQXVkaW9SZXNv
dXJjZShXZWJBdWRpb0J1cyogLypkZXN0aW5hdGlvbkJ1cyovLCBjb25zdCBjaGFyKiAvKmF1ZGlv
RmlsZURhdGEqLywgc2l6ZV90IC8qZGF0YVNpemUqLywgZG91YmxlIC8qc2FtcGxlUmF0ZSovKSB7
IHJldHVybiBmYWxzZTsgfQorCisgICAgLy8gVGhlbWUgZW5naW5lCisgICAgdmlydHVhbCBXZWJU
aGVtZUVuZ2luZSogdGhlbWVFbmdpbmUoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgflBs
YXRmb3JtKCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9XZWJBdWRpb0J1cy5oIGIvU291cmNl
L1BsYXRmb3JtL25peC9wdWJsaWMvV2ViQXVkaW9CdXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xN2IyNTQ0NGVi
N2ViZTJmNjRkMmNjYjBmNmM2NTY5OWQ2ZTFjMjY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1BsYXRmb3JtL25peC9wdWJsaWMvV2ViQXVkaW9CdXMuaApAQCAtMCwwICsxLDc5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBXZWJBdWRpb0J1c19oCisjZGVmaW5lIFdlYkF1ZGlvQnVzX2gKKwor
I2luY2x1ZGUgIldlYkNvbW1vbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEF1ZGlv
QnVzOyB9CisKKyNpZmRlZiBCVUlMRElOR19OSVhfXworbmFtZXNwYWNlIFdURiB7IHRlbXBsYXRl
IDx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzUmVmUHRyOyB9CisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIFdlYkF1ZGlvQnVzUHJpdmF0ZTsKKworLy8gQSBjb250YWluZXIgZm9y
IG11bHRpLWNoYW5uZWwgbGluZWFyIFBDTSBhdWRpbyBkYXRhLgorLy8KKy8vIFdBUk5JTkc6IEl0
IGlzIG5vdCBzYWZlIHRvIHBhc3MgYSBXZWJBdWRpb0J1cyBhY3Jvc3MgdGhyZWFkcyEhIQorLy8K
K2NsYXNzIFdlYkF1ZGlvQnVzIHsKK3B1YmxpYzoKKyAgICBXZWJBdWRpb0J1cygpIDogbV9kKDAp
IHsgfQorICAgIH5XZWJBdWRpb0J1cygpIHsgcmVzZXQoKTsgfQorCisgICAgLy8gaW5pdGlhbGl6
ZSgpIGFsbG9jYXRlcyBtZW1vcnkgb2YgdGhlIGdpdmVuIGxlbmd0aCBmb3IgdGhlIGdpdmVuIG51
bWJlciBvZiBjaGFubmVscy4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgaW5pdGlhbGl6ZSh1bnNp
Z25lZCBudW1iZXJPZkNoYW5uZWxzLCBzaXplX3QgbGVuZ3RoLCBkb3VibGUgc2FtcGxlUmF0ZSk7
CisKKyAgICAvLyByZXNpemVTbWFsbGVyKCkgY2FuIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGluaXRp
YWxpemUoKSB3aXRoIGEgbmV3IGxlbmd0aCA8PSB0aGUgaW5pdGlhbGl6YXRpb24gbGVuZ3RoLgor
ICAgIC8vIFRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgYnVzIHdpbGwgcmVtYWluIHVuZGlzdHVyYmVk
LgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNpemVTbWFsbGVyKHNpemVfdCBuZXdMZW5ndGgp
OworCisgICAgLy8gcmVzZXQoKSByZWxlYXNlcyB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmcm9tIGlu
aXRpYWxpemUoKS4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKKworICAgIFdFQktJ
VF9FWFBPUlQgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscygpIGNvbnN0OworICAgIFdFQktJVF9F
WFBPUlQgc2l6ZV90IGxlbmd0aCgpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgZG91YmxlIHNh
bXBsZVJhdGUoKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgZmxvYXQqIGNoYW5uZWxEYXRh
KHVuc2lnbmVkIGNoYW5uZWxJbmRleCk7CisKKyNpZmRlZiBCVUlMRElOR19OSVhfXworICAgIFdU
Rjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpBdWRpb0J1cz4gYXVkaW9CdXMoKTsKKyNlbmRpZgorCitw
cml2YXRlOgorICAgIC8vIERpc2FsbG93IGNvcHkgYW5kIGFzc2lnbi4KKyAgICBXZWJBdWRpb0J1
cyhjb25zdCBXZWJBdWRpb0J1cyYpOworICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFdlYkF1ZGlv
QnVzJik7CisKKyAgICBXZWJBdWRpb0J1c1ByaXZhdGUqIG1fZDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViQXVkaW9CdXNfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1BsYXRmb3JtL25peC9wdWJsaWMvV2ViQXVkaW9EZXZpY2UuaCBiL1NvdXJjZS9QbGF0Zm9ybS9u
aXgvcHVibGljL1dlYkF1ZGlvRGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzA0NTEzNjE0YTBlYTNlMzA4
NWI0ZmFhNGVjMzM1NWYyZGI1YzY1MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9y
bS9uaXgvcHVibGljL1dlYkF1ZGlvRGV2aWNlLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
V2ViQXVkaW9EZXZpY2VfaAorI2RlZmluZSBXZWJBdWRpb0RldmljZV9oCisKKyNpbmNsdWRlICJX
ZWJWZWN0b3IuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIEFic3RyYWN0IGludGVyZmFj
ZSB0byB0aGUgQ2hyb21pdW0gYXVkaW8gc3lzdGVtLgorCitjbGFzcyBXZWJBdWRpb0RldmljZSB7
CitwdWJsaWM6CisgICAgY2xhc3MgUmVuZGVyQ2FsbGJhY2sgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHJlbmRlcihjb25zdCBXZWJWZWN0b3I8ZmxvYXQqPiYgLypzb3VyY2VE
YXRhKi8sIGNvbnN0IFdlYlZlY3RvcjxmbG9hdCo+JiAvKmRlc3RpbmF0aW9uRGF0YSovLCBzaXpl
X3QgLypudW1iZXJPZkZyYW1lcyovKSB7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmly
dHVhbCB+UmVuZGVyQ2FsbGJhY2soKSB7IH0KKyAgICB9OworCisgICAgdmlydHVhbCB+V2ViQXVk
aW9EZXZpY2UoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc3RvcCgpID0gMDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBzYW1wbGVSYXRlKCkgPSAw
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJBdWRpb0Rldmlj
ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9XZWJDYW52YXMuaCBi
L1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1dlYkNhbnZhcy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4YzYx
YWI5YTI0ZGUwZTAzMGY2MTc5MGYwMTNlODUxN2I2YTQwNGQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9XZWJDYW52YXMuaApAQCAtMCwwICsxLDM1IEBACisv
KgorICogIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZm5kZWYgV2ViQ2FudmFzX2gK
KyNkZWZpbmUgV2ViQ2FudmFzX2gKKworI2luY2x1ZGUgPGNhaXJvL2NhaXJvLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgewordHlwZWRlZiBjYWlyb190IFdlYkNhbnZhczsKK30KKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9XZWJDb2xvci5oIGIvU291cmNl
L1BsYXRmb3JtL25peC9wdWJsaWMvV2ViQ29sb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YjVhOTkwMzRiMmJm
ZGRmM2JkMDNlMTkzMDc0MWM2MjFhNTk4MzI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Bs
YXRmb3JtL25peC9wdWJsaWMvV2ViQ29sb3IuaApAQCAtMCwwICsxLDk4IEBACisvKgorICogIENv
cHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZm5kZWYgV2ViQ29sb3JfaAorI2RlZmluZSBX
ZWJDb2xvcl9oCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
Cit0eXBlZGVmIHVuc2lnbmVkIFJHQkEzMjsgLy8gUkdCQSBxdWFkcnVwbGV0CisKK3N0cnVjdCBX
ZWJDb2xvciB7CisgICAgc3RhdGljIGNvbnN0IFJHQkEzMiBibGFjayA9IDB4RkYwMDAwMDA7Cisg
ICAgc3RhdGljIGNvbnN0IFJHQkEzMiB3aGl0ZSA9IDB4RkZGRkZGRkY7CisgICAgc3RhdGljIGNv
bnN0IFJHQkEzMiBkYXJrR3JheSA9IDB4RkY4MDgwODA7CisgICAgc3RhdGljIGNvbnN0IFJHQkEz
MiBncmF5ID0gMHhGRkEwQTBBMDsKKyAgICBzdGF0aWMgY29uc3QgUkdCQTMyIGxpZ2h0R3JheSA9
IDB4RkZDMEMwQzA7CisgICAgc3RhdGljIGNvbnN0IFJHQkEzMiB0cmFuc3BhcmVudCA9IDB4MDAw
MDAwMDA7CisKKyAgICBSR0JBMzIgcmdiYTsKKworICAgIFdlYkNvbG9yKCkKKyAgICAgICAgOiBy
Z2JhKFdlYkNvbG9yOjpibGFjaykKKyAgICB7CisgICAgfQorCisgICAgV2ViQ29sb3IoUkdCQTMy
IHJnYmEpCisgICAgICAgIDogcmdiYShyZ2JhKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJDb2xv
cihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSA9IDI1NSkKKyAgICAgICAgOiByZ2JhKHN0ZDo6
bWF4KDAsIHN0ZDo6bWluKGEsIDI1NSkpIDw8IDI0IHwgc3RkOjptYXgoMCwgc3RkOjptaW4ociwg
MjU1KSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUpKSA8PCA4IHwgc3RkOjpt
YXgoMCwgc3RkOjptaW4oYiwgMjU1KSkpCisgICAgeworICAgIH0KKworICAgIG9wZXJhdG9yIFJH
QkEzMigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmdiYTsKKyAgICB9CisKKyAgICB1
bnNpZ25lZCBjaGFyIHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChyZ2JhICYgMHgw
MEZGMDAwMCkgPj4gMTY7CisgICAgfQorCisgICAgdW5zaWduZWQgY2hhciBnKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAocmdiYSAmIDB4MDAwMEZGMDApID4+IDg7CisgICAgfQorCisg
ICAgdW5zaWduZWQgY2hhciBiKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAocmdiYSAm
IDB4MDAwMDAwRkYpOworICAgIH0KKworICAgIHVuc2lnbmVkIGNoYXIgYSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gKHJnYmEgJiAweEZGMDAwMDAwKSA+PiAyNDsKKyAgICB9Cit9Owor
CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYkNvbG9yJiBhLCBjb25zdCBXZWJDb2xv
ciYgYikKK3sKKyAgICByZXR1cm4gYS5yZ2JhID09IGIucmdiYTsKK30KKworaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBXZWJDb2xvciYgYSwgY29uc3QgV2ViQ29sb3ImIGIpCit7CisgICAg
cmV0dXJuICEoYSA9PSBiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViQ29tbW9uLmggYi9Tb3Vy
Y2UvUGxhdGZvcm0vbml4L3B1YmxpYy9XZWJDb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MzhkNzNjNzJj
ZTYwZjgyMGMyZWIxMzkwYTFkMWI3MWQwM2VhZGJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1BsYXRmb3JtL25peC9wdWJsaWMvV2ViQ29tbW9uLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
V2ViQ29tbW9uX2gKKyNkZWZpbmUgV2ViQ29tbW9uX2gKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKy8vIEV4cG9ydGVkIHN5bWJvbHMgbmVlZCB0byBiZSBhbm5vdGF0ZWQgd2l0aCBXRUJLSVRf
RVhQT1JUCisjZGVmaW5lIFdFQktJVF9FWFBPUlQgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgi
ZGVmYXVsdCIpKSkKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEJhc2ljIHR5cGVzCisj
aW5jbHVkZSA8c3RkZGVmLmg+IC8vIEZvciBzaXplX3QKKworbmFtZXNwYWNlIFdlYktpdCB7Cisv
LyBVVEYtMTYgY2hhcmFjdGVyIHR5cGUKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgV2ViVUNoYXI7
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxh
dGZvcm0vbml4L3B1YmxpYy9XZWJEYXRhLmggYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9X
ZWJEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMzAxOWNkM2FmMTUyODJlMTYzOWY1M2FlYjVjM2JhODFlNjE5
NjQ0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1dlYkRh
dGEuaApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViRGF0YV9oCisjZGVmaW5lIFdlYkRhdGFf
aAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisKKyNpZmRlZiBCVUlMRElOR19OSVhfXworbmFt
ZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBTaGFyZWRCdWZmZXI7IH0KK25hbWVzcGFjZSBXVEYgeyB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1JlZlB0cjsgfQorI2VuZGlmCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJEYXRhUHJpdmF0ZTsKKworLy8gQSBjb250YWluZXIg
Zm9yIHJhdyBieXRlcy4gSXQgaXMgaW5leHBlbnNpdmUgdG8gY29weSBhIFdlYkRhdGEgb2JqZWN0
LgorLy8KKy8vIFdBUk5JTkc6IEl0IGlzIG5vdCBzYWZlIHRvIHBhc3MgYSBXZWJEYXRhIGFjcm9z
cyB0aHJlYWRzISEhCisvLworY2xhc3MgV2ViRGF0YSB7CitwdWJsaWM6CisgICAgfldlYkRhdGEo
KSB7IHJlc2V0KCk7IH0KKworICAgIFdlYkRhdGEoKSA6IG1fcHJpdmF0ZSgwKSB7IH0KKworICAg
IFdlYkRhdGEoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpIDogbV9wcml2YXRlKDApCisg
ICAgeworICAgICAgICBhc3NpZ24oZGF0YSwgc2l6ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGUg
PGludCBOPgorICAgIFdlYkRhdGEoY29uc3QgY2hhciAoJmRhdGEpW05dKSA6IG1fcHJpdmF0ZSgw
KQorICAgIHsKKyAgICAgICAgYXNzaWduKGRhdGEsIE4gLSAxKTsKKyAgICB9CisKKyAgICBXZWJE
YXRhKGNvbnN0IFdlYkRhdGEmIGQpIDogbV9wcml2YXRlKDApIHsgYXNzaWduKGQpOyB9CisKKyAg
ICBXZWJEYXRhJiBvcGVyYXRvcj0oY29uc3QgV2ViRGF0YSYgZCkKKyAgICB7CisgICAgICAgIGFz
c2lnbihkKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIFdFQktJVF9FWFBP
UlQgdm9pZCByZXNldCgpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgV2Vi
RGF0YSYpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgY2hhciogZGF0YSwg
c2l6ZV90KTsKKworICAgIFdFQktJVF9FWFBPUlQgc2l6ZV90IHNpemUoKSBjb25zdDsKKyAgICBX
RUJLSVRfRVhQT1JUIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdDsKKworICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7IH0KKyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsg
cmV0dXJuICFtX3ByaXZhdGU7IH0KKworI2lmZGVmIEJVSUxESU5HX05JWF9fCisgICAgV2ViRGF0
YShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYpOworICAgIFdl
YkRhdGEmIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVm
ZmVyPiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI+KCkgY29uc3Q7CisjZWxzZQorICAgIHRlbXBsYXRlIDxjbGFzcyBDPgorICAgIFdlYkRhdGEo
Y29uc3QgQyYgYykgOiBtX3ByaXZhdGUoMCkKKyAgICB7CisgICAgICAgIGFzc2lnbihjLmRhdGEo
KSwgYy5zaXplKCkpOworICAgIH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBDPgorICAgIFdlYkRh
dGEmIG9wZXJhdG9yPShjb25zdCBDJiBjKQorICAgIHsKKyAgICAgICAgYXNzaWduKGMuZGF0YSgp
LCBjLnNpemUoKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisjZW5kaWYKKworcHJp
dmF0ZToKKyAgICB2b2lkIGFzc2lnbihXZWJEYXRhUHJpdmF0ZSopOworICAgIFdlYkRhdGFQcml2
YXRlKiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9XZWJGRlRGcmFtZS5oIGIvU291
cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViRkZURnJhbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NTMzMTBi
ZWY5YzA0ZjEwYzg5ODM5NTUwNmEwYzBhNmU0YTMyOTYyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViRkZURnJhbWUuaApAQCAtMCwwICsxLDUzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIFdlYkZGVEZyYW1lX2gKKyNkZWZpbmUgV2Vi
RkZURnJhbWVfaAorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQXVkaW9CdXM7CisK
K2NsYXNzIFdlYkZGVEZyYW1lIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJGRlRGcmFtZSgp
IHsgfQorCisgICAgdmlydHVhbCB2b2lkIGRvRkZUKGNvbnN0IGZsb2F0KikgeyB9CisgICAgdmly
dHVhbCB2b2lkIGRvSW52ZXJzZUZGVChmbG9hdCopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBtdWx0
aXBseShjb25zdCBXZWJGRlRGcmFtZSYpIHsgfQorCisgICAgdmlydHVhbCB1bnNpZ25lZCBmcmVx
dWVuY3lEb21haW5TYW1wbGVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICAvLyBBZnRl
ciBtdWx0aXBsaWNhdGlvbiBhbmQgdHJhbnNmb3JtIG9wZXJhdGlvbnMsIHRoZSBkYXRhIGlzIHNj
YWxlZAorICAgIC8vIHRvIHRha2UgaW4gYWNjb3VudCB0aGUgc2NhbGUgdXNlZCBpbnRlcm5hbGx5
IGluIFdlYktpdCwgb3JpZ2luYWxseQorICAgIC8vIGZyb20gTWFjJ3MgdmVjTGliLgorICAgIC8v
IEFmdGVyIG11bHRpcGxpY2F0aW9uOiBQbGFuYXIgZGF0YSBpcyBzY2FsZWQgYnkgMC41LgorICAg
IC8vIEFmdGVyIGRpcmVjdCB0cmFuc2Zvcm06IFBsYW5hciBkYXRhIGlzIHNjYWxlZCBieSAyLjAu
CisgICAgLy8gQWZ0ZXIgaW52ZXJzZSB0cmFuc2Zvcm06IFRpbWUgZG9tYWluIGRhdGEgaXMgc2Nh
bGVkIGJ5IDEuMC8oMiogRkZUIHNpemUpLgorICAgIHZpcnR1YWwgZmxvYXQqIHJlYWxEYXRhKCkg
Y29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgZmxvYXQqIGltYWdEYXRhKCkgY29uc3Qg
eyByZXR1cm4gMDsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViR2FtZXBhZC5oIGIvU291cmNl
L1BsYXRmb3JtL25peC9wdWJsaWMvV2ViR2FtZXBhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ1NWRmMTU2OTMz
OWI0MDJmOTI2ZGU5NGJjZDczNmY5YmJlNjAyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
UGxhdGZvcm0vbml4L3B1YmxpYy9XZWJHYW1lcGFkLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBXZWJHYW1lcGFkX2gKKyNkZWZpbmUgV2ViR2FtZXBhZF9oCisKKyNp
bmNsdWRlICJXZWJDb21tb24uaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkdh
bWVwYWQgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBzaXplX3QgaWRMZW5ndGhDYXAgPSAx
Mjg7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBheGVzTGVuZ3RoQ2FwID0gMTY7CisgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBidXR0b25zTGVuZ3RoQ2FwID0gMzI7CisKKyAgICBXZWJHYW1lcGFk
KCkKKyAgICAgICAgOiBjb25uZWN0ZWQoZmFsc2UpCisgICAgICAgICwgdGltZXN0YW1wKDApCisg
ICAgICAgICwgYXhlc0xlbmd0aCgwKQorICAgICAgICAsIGJ1dHRvbnNMZW5ndGgoMCkKKyAgICB7
CisgICAgICAgIGlkWzBdID0gMDsKKyAgICB9CisKKyAgICAvLyBJcyB0aGVyZSBhIGdhbWVwYWQg
Y29ubmVjdGVkIGF0IHRoaXMgaW5kZXg/CisgICAgYm9vbCBjb25uZWN0ZWQ7CisKKyAgICAvLyBE
ZXZpY2UgaWRlbnRpZmllciAoYmFzZWQgb24gbWFudWZhY3R1cmVyLCBtb2RlbCwgZXRjLikuCisg
ICAgV2ViVUNoYXIgaWRbaWRMZW5ndGhDYXBdOworCisgICAgLy8gTW9ub3RvbmljYWxseSBpbmNy
ZWFzaW5nIHZhbHVlIHJlZmVycmluZyB0byB3aGVuIHRoZSBkYXRhIHdlcmUgbGFzdAorICAgIC8v
IHVwZGF0ZWQuCisgICAgdW5zaWduZWQgbG9uZyBsb25nIHRpbWVzdGFtcDsKKworICAgIC8vIE51
bWJlciBvZiB2YWxpZCBlbnRyaWVzIGluIHRoZSBheGVzIGFycmF5LgorICAgIHVuc2lnbmVkIGF4
ZXNMZW5ndGg7CisKKyAgICAvLyBOb3JtYWxpemVkIHZhbHVlcyByZXByZXNlbnRpbmcgYXhlcywg
aW4gdGhlIHJhbmdlIFstMS4uMV0uCisgICAgZmxvYXQgYXhlc1theGVzTGVuZ3RoQ2FwXTsKKwor
ICAgIC8vIE51bWJlciBvZiB2YWxpZCBlbnRyaWVzIGluIHRoZSBidXR0b25zIGFycmF5LgorICAg
IHVuc2lnbmVkIGJ1dHRvbnNMZW5ndGg7CisKKyAgICAvLyBOb3JtYWxpemVkIHZhbHVlcyByZXBy
ZXNlbnRpbmcgYnV0dG9ucywgaW4gdGhlIHJhbmdlIFswLi4xXS4KKyAgICBmbG9hdCBidXR0b25z
W2J1dHRvbnNMZW5ndGhDYXBdOworfTsKKworfQorCisjZW5kaWYgLy8gV2ViR2FtZXBhZF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9XZWJHYW1lcGFkcy5oIGIvU291
cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViR2FtZXBhZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MTljYTQ5
MjZkMjUxNmFiZTg2M2RlNGJhYzA4YjExZTQ5MjJiZjY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViR2FtZXBhZHMuaApAQCAtMCwwICsxLDQ5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkdhbWVwYWRzX2gKKyNkZWZpbmUgV2ViR2FtZXBhZHNf
aAorCisjaW5jbHVkZSAiV2ViR2FtZXBhZC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV2ViR2FtZXBhZHMgeworcHVibGljOgorICAgIFdlYkdhbWVwYWRzKCkKKyAgICAgICAgOiBs
ZW5ndGgoMCkgeyB9CisKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGl0ZW1zTGVuZ3RoQ2FwID0g
NDsKKworICAgIC8vIE51bWJlciBvZiB2YWxpZCBlbnRyaWVzIGluIHRoZSBpdGVtcyBhcnJheS4K
KyAgICB1bnNpZ25lZCBsZW5ndGg7CisKKyAgICAvLyBHYW1lcGFkIGRhdGEgZm9yIE4gc2VwYXJh
dGUgZ2FtZXBhZCBkZXZpY2VzLgorICAgIFdlYkdhbWVwYWQgaXRlbXNbaXRlbXNMZW5ndGhDYXBd
OworfTsKKworfQorCisjZW5kaWYgLy8gV2ViR2FtZXBhZHNfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1BsYXRmb3JtL25peC9wdWJsaWMvV2ViUmVjdC5oIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJs
aWMvV2ViUmVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1ZjkyZmMzM2VlOGMyNzhlOGI2Njk3ODI0NzFlMDVk
NzMyNGQxNmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9X
ZWJSZWN0LmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRl
ZiBXZWJSZWN0X2gKKyNkZWZpbmUgV2ViUmVjdF9oCisKKyNpZmRlZiBCVUlMRElOR19OSVhfXwor
I2luY2x1ZGUgIkludFJlY3QuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV2ViUmVjdCB7CitwdWJsaWM6CisgICAgaW50IHg7CisgICAgaW50IHk7CisgICAgaW50IHdp
ZHRoOworICAgIGludCBoZWlnaHQ7CisKKyAgICBXZWJSZWN0KGNvbnN0IFdlYlJlY3QmIHIpCisg
ICAgICAgIDogeChyLngpCisgICAgICAgICwgeShyLnkpCisgICAgICAgICwgd2lkdGgoci53aWR0
aCkKKyAgICAgICAgLCBoZWlnaHQoci5oZWlnaHQpCisgICAgeworICAgIH0KKworI2lmZGVmIEJV
SUxESU5HX05JWF9fCisgICAgV2ViUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByKQorICAg
ICAgICA6IHgoci54KCkpCisgICAgICAgICwgeShyLnkoKSkKKyAgICAgICAgLCB3aWR0aChyLndp
ZHRoKCkpCisgICAgICAgICwgaGVpZ2h0KHIuaGVpZ2h0KCkpCisgICAgeworICAgIH0KKworICAg
IFdlYlJlY3QmIG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByKQorICAgIHsKKyAg
ICAgICAgeCA9IHIueCgpOworICAgICAgICB5ID0gci55KCk7CisgICAgICAgIHdpZHRoID0gci53
aWR0aCgpOworICAgICAgICBoZWlnaHQgPSByLmhlaWdodCgpOworICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgfQorI2VuZGlmCit9OworCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9Q
bGF0Zm9ybS9uaXgvcHVibGljL1dlYlNpemUuaCBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGlj
L1dlYlNpemUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MDRlZjVhMjUwMDY3ZWE5OTc5ODNjOTQxYWNmZDhhOTQx
Zjc1OWNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2Vi
U2l6ZS5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNpemVfaAorI2RlZmluZSBXZWJTaXpl
X2gKKworI2lmZGVmIEJVSUxESU5HX05JWF9fCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1Y3QgV2ViU2l6ZSB7CisgICAgaW50IHdpZHRo
OworICAgIGludCBoZWlnaHQ7CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiB3
aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwOyB9CisKKyAgICBXZWJTaXplKCkKKyAgICAgICAgOiB3
aWR0aCgwKQorICAgICAgICAsIGhlaWdodCgwKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJTaXpl
KGludCB3aWR0aCwgaW50IGhlaWdodCkKKyAgICAgICAgOiB3aWR0aCh3aWR0aCkKKyAgICAgICAg
LCBoZWlnaHQoaGVpZ2h0KQorICAgIHsKKyAgICB9CisKKyNpZmRlZiBCVUlMRElOR19OSVhfXwor
ICAgIFdlYlNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcykKKyAgICAgICAgOiB3aWR0aChz
LndpZHRoKCkpCisgICAgICAgICwgaGVpZ2h0KHMuaGVpZ2h0KCkpCisgICAgeworICAgIH0KKwor
ICAgIFdlYlNpemUmIG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzKQorICAgIHsK
KyAgICAgICAgd2lkdGggPSBzLndpZHRoKCk7CisgICAgICAgIGhlaWdodCA9IHMuaGVpZ2h0KCk7
CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBvcGVyYXRvciBXZWJDb3JlOjpJ
bnRTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpJbnRTaXplKHdp
ZHRoLCBoZWlnaHQpOworICAgIH0KKyNlbmRpZgorfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBXZWJTaXplJiBhLCBjb25zdCBXZWJTaXplJiBiKQoreworICAgIHJldHVybiBhLndp
ZHRoID09IGIud2lkdGggJiYgYS5oZWlnaHQgPT0gYi5oZWlnaHQ7Cit9CisKK2lubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgV2ViU2l6ZSYgYSwgY29uc3QgV2ViU2l6ZSYgYikKK3sKKyAgICBy
ZXR1cm4gIShhID09IGIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9XZWJUaGVtZUVuZ2luZS5oIGIv
U291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViVGhlbWVFbmdpbmUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
MTE1NTdjNzJjNDFlZDdjY2M5OWNkOTM0NTVkNGM3M2UyYzMxMTM2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViVGhlbWVFbmdpbmUuaApAQCAtMCwwICsx
LDE1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgV2ViVGhlbWVFbmdpbmVfaAorI2RlZmluZSBXZWJUaGVtZUVuZ2luZV9o
CisKKyNpbmNsdWRlICJXZWJDYW52YXMuaCIKKyNpbmNsdWRlICJXZWJDb2xvci5oIgorI2luY2x1
ZGUgIldlYlNpemUuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlJlY3Q7CisK
K2NsYXNzIFdlYlRoZW1lRW5naW5lIHsKK3B1YmxpYzoKKyAgICAvLyBUaGUgY3VycmVudCBzdGF0
ZSBvZiB0aGUgYXNzb2NpYXRlZCBQYXJ0LgorICAgIGVudW0gU3RhdGUgeworICAgICAgICBTdGF0
ZURpc2FibGVkLAorICAgICAgICBTdGF0ZUhvdmVyLAorICAgICAgICBTdGF0ZU5vcm1hbCwKKyAg
ICAgICAgU3RhdGVQcmVzc2VkCisgICAgfTsKKworICAgIC8vIEV4dHJhIHBhcmFtZXRlcnMgZm9y
IGRyYXdpbmcgdGhlIFBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVHJhY2sgYW5kCisgICAgLy8gUGFy
dFNjcm9sbGJhclZlcnRpY2FsVHJhY2suCisgICAgc3RydWN0IFNjcm9sbGJhclRyYWNrRXh0cmFQ
YXJhbXMgeworICAgICAgICAvLyBUaGUgYm91bmRzIG9mIHRoZSBlbnRpcmUgdHJhY2ssIGFzIG9w
cG9zZWQgdG8gdGhlIHBhcnQgYmVpbmcgcGFpbnRlZC4KKyAgICAgICAgaW50IHRyYWNrWDsKKyAg
ICAgICAgaW50IHRyYWNrWTsKKyAgICAgICAgaW50IHRyYWNrV2lkdGg7CisgICAgICAgIGludCB0
cmFja0hlaWdodDsKKyAgICB9OworCisgICAgLy8gRXh0cmEgcGFyYW1ldGVycyBmb3IgUGFydENo
ZWNrYm94LCBQYXJ0UHVzaEJ1dHRvbiBhbmQgUGFydFJhZGlvLgorICAgIHN0cnVjdCBCdXR0b25F
eHRyYVBhcmFtcyB7CisgICAgICAgIGJvb2wgY2hlY2tlZDsKKyAgICAgICAgYm9vbCBpbmRldGVy
bWluYXRlOyAvLyBXaGV0aGVyIHRoZSBidXR0b24gc3RhdGUgaXMgaW5kZXRlcm1pbmF0ZS4KKyAg
ICAgICAgYm9vbCBpc0RlZmF1bHQ7IC8vIFdoZXRoZXIgdGhlIGJ1dHRvbiBpcyBkZWZhdWx0IGJ1
dHRvbi4KKyAgICAgICAgYm9vbCBoYXNCb3JkZXI7CisgICAgICAgIFdlYkNvbG9yIGJhY2tncm91
bmRDb2xvcjsKKyAgICB9OworCisgICAgLy8gRXh0cmEgcGFyYW1ldGVycyBmb3IgUGFydE1lbnVM
aXN0CisgICAgc3RydWN0IE1lbnVMaXN0RXh0cmFQYXJhbXMgeworICAgICAgICBib29sIGhhc0Jv
cmRlcjsKKyAgICAgICAgYm9vbCBoYXNCb3JkZXJSYWRpdXM7CisgICAgICAgIGludCBhcnJvd1g7
CisgICAgICAgIGludCBhcnJvd1k7CisgICAgICAgIFdlYkNvbG9yIGJhY2tncm91bmRDb2xvcjsK
KyAgICB9OworCisgICAgLy8gRXh0cmEgcGFyYW1ldGVycyBmb3IgUGFydFNsaWRlclRyYWNrIGFu
ZCBQYXJ0U2xpZGVyVGh1bWIKKyAgICBzdHJ1Y3QgU2xpZGVyRXh0cmFQYXJhbXMgeworICAgICAg
ICBib29sIHZlcnRpY2FsOworICAgICAgICBib29sIGluRHJhZzsKKyAgICB9OworCisgICAgLy8g
RXh0cmEgcGFyYW1ldGVycyBmb3IgUGFydElubmVyU3BpbkJ1dHRvbgorICAgIHN0cnVjdCBJbm5l
clNwaW5CdXR0b25FeHRyYVBhcmFtcyB7CisgICAgICAgIGJvb2wgc3BpblVwOworICAgICAgICBi
b29sIHJlYWRPbmx5OworICAgIH07CisKKyAgICAvLyBFeHRyYSBwYXJhbWV0ZXJzIGZvciBQYXJ0
UHJvZ3Jlc3NCYXIKKyAgICBzdHJ1Y3QgUHJvZ3Jlc3NCYXJFeHRyYVBhcmFtcyB7CisgICAgICAg
IGJvb2wgaXNEZXRlcm1pbmF0ZTsKKyAgICAgICAgZG91YmxlIHBvc2l0aW9uOworICAgICAgICBk
b3VibGUgYW5pbWF0aW9uUHJvZ3Jlc3M7CisgICAgICAgIGRvdWJsZSBhbmltYXRpb25TdGFydFRp
bWU7CisgICAgfTsKKworICAgIHN0cnVjdCBNZXRlckV4dHJhUGFyYW1zIHsKKyAgICAgICAgZG91
YmxlIG1pbjsKKyAgICAgICAgZG91YmxlIG1heDsKKyAgICAgICAgZG91YmxlIHZhbHVlOworICAg
ICAgICBkb3VibGUgbG93OworICAgICAgICBkb3VibGUgaGlnaDsKKyAgICAgICAgZG91YmxlIG9w
dGltdW07CisgICAgICAgIGRvdWJsZSB2YWx1ZVJhdGlvKCkgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKG1heCA8PSBtaW4pCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICByZXR1cm4gKHZhbHVlIC0gbWluKSAvIChtYXggLSBtaW4pOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIHZpcnR1YWwgY29uc3QgY2hhciogZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgp
IGNvbnN0IHsgcmV0dXJuICIiOyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBleHRyYVF1aXJr
c1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiAiIjsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogZXh0cmFQbHVnSW5zU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuICIiOyB9CisKKyAgICAv
LyBUZXh0IHNlbGVjdGlvbiBjb2xvcnMuCisgICAgdmlydHVhbCBXZWJDb2xvciBhY3RpdmVTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBXZWJDb2xvciBh
Y3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBX
ZWJDb2xvciBpbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIFdlYkNvbG9yIGluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29u
c3QgPSAwOworCisgICAgLy8gTGlzdCBib3ggc2VsZWN0aW9uIGNvbG9ycworICAgIHZpcnR1YWwg
V2ViQ29sb3IgYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIFdlYkNvbG9yIGFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5k
Q29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBXZWJDb2xvciBpbmFjdGl2ZUxpc3RCb3hT
ZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBXZWJDb2xv
ciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisK
KyAgICB2aXJ0dWFsIFdlYkNvbG9yIGFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIFdlYkNvbG9yIGluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdo
dENvbG9yKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBXZWJDb2xvciBmb2N1c1JpbmdDb2xv
cigpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgV2ViQ29sb3IgdGFwSGlnaGxpZ2h0Q29sb3Io
KSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCdXR0b24oV2ViQ2FudmFzKiwg
U3RhdGUsIGNvbnN0IFdlYlJlY3QmLCBjb25zdCBCdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUZXh0RmllbGQoV2ViQ2FudmFzKiwgU3RhdGUsIGNv
bnN0IFdlYlJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBXZWJTaXplIGdldENoZWNrYm94
U2l6ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDaGVja2JveChXZWJDYW52
YXMqLCBTdGF0ZSwgY29uc3QgV2ViUmVjdCYsIGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1zJikgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgV2ViU2l6ZSBnZXRSYWRpb1NpemUoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50UmFkaW8oV2ViQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFdlYlJl
Y3QmLCBjb25zdCBCdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRUZXh0QXJlYShXZWJDYW52YXMqLCBTdGF0ZSwgY29uc3QgV2ViUmVjdCYpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0TWVudUxpc3RQYWRkaW5nKGludCYgcGFkZGluZ1Rv
cCwgaW50JiBwYWRkaW5nTGVmdCwgaW50JiBwYWRkaW5nQm90dG9tLCBpbnQmIHBhZGRpbmdSaWdo
dCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludE1lbnVMaXN0KFdlYkNhbnZhcyos
IFN0YXRlLCBjb25zdCBXZWJSZWN0JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWlu
dFByb2dyZXNzQmFyKFdlYkNhbnZhcyosIFN0YXRlLCBjb25zdCBXZWJSZWN0JiwgY29uc3QgUHJv
Z3Jlc3NCYXJFeHRyYVBhcmFtcyYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBnZXRB
bmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgZG91YmxlIGdldEFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGdldElubmVyU3BpbkJ1dHRvblBhZGRpbmcoaW50JiBwYWRk
aW5nVG9wLCBpbnQmIHBhZGRpbmdMZWZ0LCBpbnQmIHBhZGRpbmdCb3R0b20sIGludCYgcGFkZGlu
Z1JpZ2h0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50SW5uZXJTcGluQnV0dG9u
KFdlYkNhbnZhcyosIFN0YXRlLCBjb25zdCBXZWJSZWN0JiwgY29uc3QgSW5uZXJTcGluQnV0dG9u
RXh0cmFQYXJhbXMmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50TWV0ZXIoV2Vi
Q2FudmFzKiwgU3RhdGUsIGNvbnN0IFdlYlJlY3QmLCBjb25zdCBNZXRlckV4dHJhUGFyYW1zJikg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludFNsaWRlclRyYWNrKFdlYkNhbnZhcyos
IFN0YXRlLCBjb25zdCBXZWJSZWN0JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWlu
dFNsaWRlclRodW1iKFdlYkNhbnZhcyosIFN0YXRlLCBjb25zdCBXZWJSZWN0JikgY29uc3QgPSAw
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViVmVjdG9yLmggYi9Tb3VyY2UvUGxhdGZvcm0vbml4
L3B1YmxpYy9XZWJWZWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NDZiN2U2NzgzMWI3OTNhYWVjMmNhNmI1
NDYxOTRmMTA0ZDM1MTc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL25peC9w
dWJsaWMvV2ViVmVjdG9yLmgKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlZlY3Rvcl9oCisj
ZGVmaW5lIFdlYlZlY3Rvcl9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKworI2luY2x1ZGUg
PGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjYXNzZXJ0PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Ly8gQSBzaW1wbGUgdmVjdG9yIGNsYXNzLgorLy8KKy8vIFNhbXBsZSB1c2FnZToKKy8vCisvLyAg
IHZvaWQgRm9vKFdlYlZlY3RvcjxpbnQ+JiByZXN1bHQpCisvLyAgIHsKKy8vICAgICAgIFdlYlZl
Y3RvcjxpbnQ+IGRhdGEoMTApOworLy8gICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXRh
LnNpemUoKTsgKytpKQorLy8gICAgICAgICAgIGRhdGFbaV0gPSAuLi4KKy8vICAgICAgIHJlc3Vs
dC5zd2FwKGRhdGEpOworLy8gICB9CisvLworLy8gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBhc3Np
Z24gZnJvbSBvdGhlciB0eXBlcyBvZiByYW5kb20gYWNjZXNzCisvLyBjb250YWluZXJzOgorLy8K
Ky8vICAgdm9pZCBGb28oY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBpbnB1dCkKKy8v
ICAgeworLy8gICAgICAgV2ViVmVjdG9yPFdlYkNTdHJpbmc+IGNzdHJpbmdzID0gaW5wdXQ7Cisv
LyAgICAgICAuLi4KKy8vICAgfQorLy8KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgV2Vi
VmVjdG9yIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOworCisgICAgfldlYlZl
Y3RvcigpCisgICAgeworICAgICAgICBkZXN0cm95KCk7CisgICAgfQorCisgICAgZXhwbGljaXQg
V2ViVmVjdG9yKHNpemVfdCBzaXplID0gMCkKKyAgICB7CisgICAgICAgIGluaXRpYWxpemUoc2l6
ZSk7CisgICAgfQorCisgICAgV2ViVmVjdG9yKGNvbnN0IFdlYlZlY3RvcjxUPiYgb3RoZXIpCisg
ICAgeworICAgICAgICBpbml0aWFsaXplRnJvbShvdGhlci5tX3B0ciwgb3RoZXIubV9zaXplKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQz4KKyAgICBXZWJWZWN0b3IoY29uc3Qg
QyYgb3RoZXIpCisgICAgeworICAgICAgICBpbml0aWFsaXplRnJvbShvdGhlci5zaXplKCkgPyAm
b3RoZXJbMF0gOiAwLCBvdGhlci5zaXplKCkpOworICAgIH0KKworICAgIFdlYlZlY3RvciYgb3Bl
cmF0b3I9KGNvbnN0IFdlYlZlY3RvciYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAodGhpcyAh
PSAmb3RoZXIpCisgICAgICAgICAgICBhc3NpZ24ob3RoZXIpOworICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEM+CisgICAgV2ViVmVjdG9yPFQ+
JiBvcGVyYXRvcj0oY29uc3QgQyYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAodGhpcyAhPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IFdlYlZlY3RvcjxUPio+KCZvdGhlcikpCisgICAgICAgICAg
ICBhc3NpZ24ob3RoZXIpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEM+CisgICAgdm9pZCBhc3NpZ24oY29uc3QgQyYgb3RoZXIpCisgICAg
eworICAgICAgICBhc3NpZ24ob3RoZXIuc2l6ZSgpID8gJm90aGVyWzBdIDogMCwgb3RoZXIuc2l6
ZSgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICB2b2lkIGFzc2ln
bihjb25zdCBVKiB2YWx1ZXMsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgZGVzdHJveSgp
OworICAgICAgICBpbml0aWFsaXplRnJvbSh2YWx1ZXMsIHNpemUpOworICAgIH0KKworICAgIHNp
emVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gIW1fc2l6ZTsgfQorCisgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkK
KyAgICB7CisgICAgICAgIGFzc2VydChpIDwgbV9zaXplKTsKKyAgICAgICAgcmV0dXJuIG1fcHRy
W2ldOworICAgIH0KKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdAorICAg
IHsKKyAgICAgICAgYXNzZXJ0KGkgPCBtX3NpemUpOworICAgICAgICByZXR1cm4gbV9wdHJbaV07
CisgICAgfQorCisgICAgYm9vbCBjb250YWlucyhjb25zdCBUJiB2YWx1ZSkgY29uc3QKKyAgICB7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zaXplOyBpKyspIHsKKyAgICAgICAg
ICAgIGlmIChtX3B0cltpXSA9PSB2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVCogZGF0YSgp
IHsgcmV0dXJuIG1fcHRyOyB9CisgICAgY29uc3QgVCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
cHRyOyB9CisKKyAgICB2b2lkIHN3YXAoV2ViVmVjdG9yPFQ+JiBvdGhlcikKKyAgICB7CisgICAg
ICAgIHN0ZDo6c3dhcChtX3B0ciwgb3RoZXIubV9wdHIpOworICAgICAgICBzdGQ6OnN3YXAobV9z
aXplLCBvdGhlci5tX3NpemUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGluaXRpYWxp
emUoc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBtX3NpemUgPSBzaXplOworICAgICAgICBp
ZiAoIW1fc2l6ZSkKKyAgICAgICAgICAgIG1fcHRyID0gMDsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBtX3B0ciA9IHN0YXRpY19jYXN0PFQqPig6Om9wZXJhdG9yIG5ldyhzaXplb2YoVCkg
KiBtX3NpemUpKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zaXplOyAr
K2kpCisgICAgICAgICAgICAgICAgbmV3ICgmbV9wdHJbaV0pIFQoKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHZvaWQgaW5pdGlhbGl6ZUZyb20o
Y29uc3QgVSogdmFsdWVzLCBzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIG1fc2l6ZSA9IHNp
emU7CisgICAgICAgIGlmICghbV9zaXplKQorICAgICAgICAgICAgbV9wdHIgPSAwOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIG1fcHRyID0gc3RhdGljX2Nhc3Q8VCo+KDo6b3BlcmF0b3Ig
bmV3KHNpemVvZihUKSAqIG1fc2l6ZSkpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3NpemU7ICsraSkKKyAgICAgICAgICAgICAgICBuZXcgKCZtX3B0cltpXSkgVCh2YWx1
ZXNbaV0pOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBkZXN0cm95KCkKKyAgICB7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zaXplOyArK2kpCisgICAgICAgICAgICBt
X3B0cltpXS5+VCgpOworICAgICAgICA6Om9wZXJhdG9yIGRlbGV0ZShtX3B0cik7CisgICAgfQor
CisgICAgVCogbV9wdHI7CisgICAgc2l6ZV90IG1fc2l6ZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL0Rl
ZmF1bHRXZWJUaGVtZUVuZ2luZS5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3NyYy9EZWZhdWx0
V2ViVGhlbWVFbmdpbmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5MmRiODVhNDU3NmJlNWM2ZmE4YmRiOTIz
ZWM0ZGMyZjM4NTMwODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3Ny
Yy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUuY3BwCkBAIC0wLDAgKzEsMzcxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkRlZmF1bHRX
ZWJUaGVtZUVuZ2luZS5oIgorCisjaW5jbHVkZSAicHVibGljL1dlYkNvbG9yLmgiCisjaW5jbHVk
ZSAicHVibGljL1dlYlJlY3QuaCIKKyNpbmNsdWRlICJwdWJsaWMvV2ViU2l6ZS5oIgorI2luY2x1
ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjYWlyby9jYWlyby5oPgorI2luY2x1ZGUgPGNtYXRo
PgorCitjb25zdCBkb3VibGUgQkdDb2xvcjEgPSAweEY2IC8gMjU2LjA7Citjb25zdCBkb3VibGUg
QkdDb2xvcjIgPSAweERFIC8gMjU2LjA7Citjb25zdCBkb3VibGUgQm9yZGVyQ29sb3IgPSAweEE0
IC8gMjU2LjA7Citjb25zdCBkb3VibGUgQm9yZGVyT25Ib3ZlckNvbG9yID0gMHg3QSAvIDI1Ni4w
OworY29uc3QgZG91YmxlIENoZWNrQ29sb3IgPSAweDY2IC8gMjU2LjA7Citjb25zdCBkb3VibGUg
VGV4dEZpZWxkRGFya0JvcmRlckNvbG9yID0gMHg5QSAvIDI1Ni4wOworY29uc3QgZG91YmxlIFRl
eHRGaWVsZExpZ2h0Qm9yZGVyQ29sb3IgPSAweEVFIC8gMjU2LjA7CisKK2NvbnN0IGludCBNZW51
TGlzdEJvcmRlciA9IDU7Citjb25zdCBpbnQgTWVudUxpc3RBcnJvd1NpemUgPSA2OworCitjb25z
dCBpbnQgSW5uZXJTcGluQnV0dG9uQm9yZGVyID0gMzsKK2NvbnN0IGludCBJbm5lclNwaW5CdXR0
b25BcnJvd1NpemUgPSAyOworCitjb25zdCBXZWJLaXQ6OlJHQkEzMiBUYXBIaWdoTGlnaHRDb2xv
ciA9IDB4NjYwMDAwMDA7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJDb2xvciBEZWZhdWx0
V2ViVGhlbWVFbmdpbmU6OmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIFdlYkNvbG9yKDAsIDAsIDI1NSk7Cit9CisKK1dlYkNvbG9yIERlZmF1bHRX
ZWJUaGVtZUVuZ2luZTo6YWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gV2ViQ29sb3I6OndoaXRlOworfQorCitXZWJDb2xvciBEZWZhdWx0V2ViVGhl
bWVFbmdpbmU6OmluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gV2ViQ29sb3IoMTc2LCAxNzYsIDE3Nik7Cit9CisKK1dlYkNvbG9yIERlZmF1bHRX
ZWJUaGVtZUVuZ2luZTo6aW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAor
eworICAgIHJldHVybiBXZWJDb2xvcjo6YmxhY2s7Cit9CisKK1dlYkNvbG9yIERlZmF1bHRXZWJU
aGVtZUVuZ2luZTo6YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOworfQorCitX
ZWJDb2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3Jl
Z3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBhY3RpdmVTZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3IoKTsKK30KKworV2ViQ29sb3IgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjppbmFjdGl2
ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBp
bmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOworfQorCitXZWJDb2xvciBEZWZhdWx0
V2ViVGhlbWVFbmdpbmU6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7
Cit9CisKK1dlYkNvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6YWN0aXZlVGV4dFNlYXJjaEhp
Z2hsaWdodENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViQ29sb3IoMjU1LCAxNTAsIDUw
KTsgLy8gT3JhbmdlLgorfQorCitXZWJDb2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmluYWN0
aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViQ29s
b3IoMjU1LCAyNTUsIDApOyAvLyBZZWxsb3cuCit9CisKK1dlYkNvbG9yIERlZmF1bHRXZWJUaGVt
ZUVuZ2luZTo6Zm9jdXNSaW5nQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBXZWJDb2xvcjo6
YmxhY2s7Cit9CisKK1dlYkNvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6dGFwSGlnaGxpZ2h0
Q29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBUYXBIaWdoTGlnaHRDb2xvcjsKK30KKworc3Rh
dGljIHZvaWQgZ3JhZGllbnRGaWxsKGNhaXJvX3QqIGNhaXJvLCBkb3VibGUgeVN0YXJ0LCBkb3Vi
bGUgeUxlbmd0aCwgYm9vbCBpbnZlcnRlZCA9IGZhbHNlKQoreworICAgIGRvdWJsZSBncmFkU3Rh
cnRDb2xvciA9IEJHQ29sb3IxOworICAgIGRvdWJsZSBncmFkRW5kQ29sb3IgPSBCR0NvbG9yMjsK
KyAgICBpZiAoaW52ZXJ0ZWQpCisgICAgICAgIHN0ZDo6c3dhcChncmFkU3RhcnRDb2xvciwgZ3Jh
ZEVuZENvbG9yKTsKKworICAgIGNhaXJvX3BhdHRlcm5fdCogZ3JhZGllbnQgPSBjYWlyb19wYXR0
ZXJuX2NyZWF0ZV9saW5lYXIoMCwgeVN0YXJ0LCAwLCB5U3RhcnQgKyB5TGVuZ3RoKTsKKyAgICBj
YWlyb19wYXR0ZXJuX2FkZF9jb2xvcl9zdG9wX3JnYihncmFkaWVudCwgMCwgZ3JhZFN0YXJ0Q29s
b3IsIGdyYWRTdGFydENvbG9yLCBncmFkU3RhcnRDb2xvcik7CisgICAgY2Fpcm9fcGF0dGVybl9h
ZGRfY29sb3Jfc3RvcF9yZ2IoZ3JhZGllbnQsIDEsIGdyYWRFbmRDb2xvciwgZ3JhZEVuZENvbG9y
LCBncmFkRW5kQ29sb3IpOworICAgIGNhaXJvX3NldF9zb3VyY2UoY2Fpcm8sIGdyYWRpZW50KTsK
KyAgICBjYWlyb19maWxsKGNhaXJvKTsKKyAgICBjYWlyb19wYXR0ZXJuX2Rlc3Ryb3koZ3JhZGll
bnQpOworfQorCitzdGF0aWMgdm9pZCBzZXR1cEJvcmRlcihjYWlyb190ICogY2Fpcm8sIFdlYlRo
ZW1lRW5naW5lOjpTdGF0ZSBzdGF0ZSkKK3sKKyAgICBkb3VibGUgYm9yZGVyQ29sb3IgPSBzdGF0
ZSA9PSBXZWJUaGVtZUVuZ2luZTo6U3RhdGVIb3ZlciA/IEJvcmRlck9uSG92ZXJDb2xvciA6IEJv
cmRlckNvbG9yOworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhaXJvLCBib3JkZXJDb2xvciwg
Ym9yZGVyQ29sb3IsIGJvcmRlckNvbG9yKTsKKyAgICBjYWlyb19zZXRfbGluZV93aWR0aChjYWly
bywgMSk7Cit9CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludEJ1dHRvbihXZWJD
YW52YXMqIGNhbnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFdlYlJlY3QmIHJlY3QsIGNvbnN0IEJ1
dHRvbkV4dHJhUGFyYW1zJikgY29uc3QKK3sKKyAgICBjYWlyb19zYXZlKGNhbnZhcyk7CisgICAg
c2V0dXBCb3JkZXIoY2FudmFzLCBzdGF0ZSk7CisgICAgLy8gQ2Fpcm8gdXNlcyBhIGNvb3JkaW5h
dGUgc3lzdGVtIG5vdCBiYXNlZCBvbiBwaXhlbCBjb29yZGluYXRlcywgc28KKyAgICAvLyB3ZSBu
ZWVkIHRvIGFkZCAgMC41IHRvIHggYW5kIHkgY29vcmQgb3IgdGhlIGxpbmUgd2lsbCBzdGF5IGJl
dHdlZW4KKyAgICAvLyB0d28gcGl4ZWxzIGluc3RlYWQgb2YgaW4gdGhlIG1pZGRsZSBvZiBhIHBp
eGVsLgorICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCArIDAuNSwgcmVjdC55ICsg
MC41LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7CisgICAgY2Fpcm9fc3Ryb2tlX3ByZXNlcnZl
KGNhbnZhcyk7CisKKyAgICBncmFkaWVudEZpbGwoY2FudmFzLCByZWN0LnksIHJlY3QuaGVpZ2h0
LCBzdGF0ZSA9PSBTdGF0ZVByZXNzZWQpOworICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsKK30K
Kwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50VGV4dEZpZWxkKFdlYkNhbnZhcyog
Y2FudmFzLCBTdGF0ZSwgY29uc3QgV2ViUmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBjYWlyb19z
YXZlKGNhbnZhcyk7CisKKyAgICBjb25zdCBkb3VibGUgbGluZVdpZHRoID0gMjsKKyAgICBjb25z
dCBkb3VibGUgY29ycmVjdGlvbiA9IGxpbmVXaWR0aCAvIDIuMDsKKworICAgIGNhaXJvX3NldF9s
aW5lX3dpZHRoKGNhbnZhcywgbGluZVdpZHRoKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3JnYihj
YW52YXMsIFRleHRGaWVsZERhcmtCb3JkZXJDb2xvciwgVGV4dEZpZWxkRGFya0JvcmRlckNvbG9y
LCBUZXh0RmllbGREYXJrQm9yZGVyQ29sb3IpOworICAgIGNhaXJvX21vdmVfdG8oY2FudmFzLCBy
ZWN0LnggKyBjb3JyZWN0aW9uLCByZWN0LnkgKyBjb3JyZWN0aW9uICsgcmVjdC5oZWlnaHQpOwor
ICAgIGNhaXJvX3JlbF9saW5lX3RvKGNhbnZhcywgMCwgLXJlY3QuaGVpZ2h0KTsKKyAgICBjYWly
b19yZWxfbGluZV90byhjYW52YXMsIHJlY3Qud2lkdGgsIDApOworICAgIGNhaXJvX3N0cm9rZShj
YW52YXMpOworCisgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2FudmFzLCBUZXh0RmllbGRMaWdo
dEJvcmRlckNvbG9yLCBUZXh0RmllbGRMaWdodEJvcmRlckNvbG9yLCBUZXh0RmllbGRMaWdodEJv
cmRlckNvbG9yKTsKKyAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgY29ycmVjdGlv
biArIHJlY3Qud2lkdGgsIHJlY3QueSArIGNvcnJlY3Rpb24pOworICAgIGNhaXJvX3JlbF9saW5l
X3RvKGNhbnZhcywgMCwgcmVjdC5oZWlnaHQpOworICAgIGNhaXJvX3JlbF9saW5lX3RvKGNhbnZh
cywgLXJlY3Qud2lkdGgsIDApOworICAgIGNhaXJvX3N0cm9rZShjYW52YXMpOworCisgICAgY2Fp
cm9fcmVzdG9yZShjYW52YXMpOworfQorCit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFp
bnRUZXh0QXJlYShXZWJDYW52YXMqIGNhbnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFdlYlJlY3Qm
IHJlY3QpIGNvbnN0Cit7CisgICAgcGFpbnRUZXh0RmllbGQoY2FudmFzLCBzdGF0ZSwgcmVjdCk7
Cit9CisKK1dlYlNpemUgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpnZXRDaGVja2JveFNpemUoKSBj
b25zdAoreworICAgIHJldHVybiBXZWJTaXplKDEzLCAxMyk7Cit9CisKK3ZvaWQgRGVmYXVsdFdl
YlRoZW1lRW5naW5lOjpwYWludENoZWNrYm94KFdlYkNhbnZhcyogY2FudmFzLCBTdGF0ZSBzdGF0
ZSwgY29uc3QgV2ViUmVjdCYgcmVjdCwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMmIHBhcmFtKSBj
b25zdAoreworICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKKyAgICBzZXR1cEJvcmRlcihjYW52YXMs
IHN0YXRlKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LnggKyAwLjUsIHJlY3Qu
eSArIDAuNSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOworICAgIGNhaXJvX3N0cm9rZV9wcmVz
ZXJ2ZShjYW52YXMpOworCisgICAgZ3JhZGllbnRGaWxsKGNhbnZhcywgcmVjdC55LCByZWN0Lmhl
aWdodCwgc3RhdGUgPT0gU3RhdGVQcmVzc2VkKTsKKworICAgIGlmIChwYXJhbS5jaGVja2VkKSB7
CisgICAgICAgIGNvbnN0IGRvdWJsZSBib3JkZXIgPSAzOworICAgICAgICBjYWlyb19zZXRfbGlu
ZV93aWR0aChjYW52YXMsIDIpOworICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMs
IENoZWNrQ29sb3IsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IpOworICAgICAgICBjYWlyb19tb3Zl
X3RvKGNhbnZhcywgcmVjdC54ICsgMC41ICsgYm9yZGVyLCByZWN0LnkgKyAwLjUgKyByZWN0Lmhl
aWdodCAtIGJvcmRlcik7CisgICAgICAgIGNhaXJvX3JlbF9saW5lX3RvKGNhbnZhcywgcmVjdC53
aWR0aCAtIGJvcmRlciAqIDIsIC1yZWN0LmhlaWdodCArIGJvcmRlciAqIDIpOworICAgICAgICBj
YWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgMC41ICsgYm9yZGVyLCByZWN0LnkgKyAwLjUg
KyBib3JkZXIpOworICAgICAgICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIHJlY3Qud2lkdGgg
LSBib3JkZXIgKiAyLCByZWN0LmhlaWdodCAtIGJvcmRlciAqIDIpOworICAgICAgICBjYWlyb19z
dHJva2UoY2FudmFzKTsKKyAgICB9CisKKyAgICBjYWlyb19yZXN0b3JlKGNhbnZhcyk7Cit9CisK
K1dlYlNpemUgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpnZXRSYWRpb1NpemUoKSBjb25zdAorewor
ICAgIHJldHVybiBXZWJTaXplKDEzLCAxMyk7Cit9CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5n
aW5lOjpwYWludFJhZGlvKFdlYkNhbnZhcyogY2FudmFzLCBTdGF0ZSBzdGF0ZSwgY29uc3QgV2Vi
UmVjdCYgcmVjdCwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMmIHBhcmFtKSBjb25zdAoreworICAg
IGNhaXJvX3NhdmUoY2FudmFzKTsKKyAgICBzZXR1cEJvcmRlcihjYW52YXMsIHN0YXRlKTsKKyAg
ICBjYWlyb19hcmMoY2FudmFzLCByZWN0LnggKyByZWN0LndpZHRoIC8gMi4wLCByZWN0LnkgKyBy
ZWN0LmhlaWdodCAvIDIuMCwgcmVjdC53aWR0aCAvIDIuMCwgMCwgMiAqIE1fUEkpOworICAgIGNh
aXJvX3N0cm9rZV9wcmVzZXJ2ZShjYW52YXMpOworCisgICAgZ3JhZGllbnRGaWxsKGNhbnZhcywg
cmVjdC55LCByZWN0LmhlaWdodCk7CisKKyAgICBpZiAocGFyYW0uY2hlY2tlZCkgeworICAgICAg
ICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IsIENo
ZWNrQ29sb3IpOworICAgICAgICBjYWlyb19hcmMoY2FudmFzLCByZWN0LnggKyByZWN0LndpZHRo
IC8gMi4wLCByZWN0LnkgKyByZWN0LmhlaWdodCAvIDIuMCwgcmVjdC53aWR0aCAvIDQuMCwgMCwg
MiAqIE1fUEkpOworICAgICAgICBjYWlyb19maWxsKGNhbnZhcyk7CisgICAgfQorICAgIGNhaXJv
X3Jlc3RvcmUoY2FudmFzKTsKK30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmdldE1l
bnVMaXN0UGFkZGluZyhpbnQmIHBhZGRpbmdUb3AsIGludCYgcGFkZGluZ0xlZnQsIGludCYgcGFk
ZGluZ0JvdHRvbSwgaW50JiBwYWRkaW5nUmlnaHQpIGNvbnN0Cit7CisgICAgcGFkZGluZ1RvcCA9
IE1lbnVMaXN0Qm9yZGVyOworICAgIHBhZGRpbmdMZWZ0ID0gTWVudUxpc3RCb3JkZXI7CisgICAg
cGFkZGluZ0JvdHRvbSA9IE1lbnVMaXN0Qm9yZGVyOworICAgIHBhZGRpbmdSaWdodCA9IDIgKiBN
ZW51TGlzdEJvcmRlciArIE1lbnVMaXN0QXJyb3dTaXplOworfQorCit2b2lkIERlZmF1bHRXZWJU
aGVtZUVuZ2luZTo6cGFpbnRNZW51TGlzdChXZWJDYW52YXMqIGNhbnZhcywgU3RhdGUgc3RhdGUs
IGNvbnN0IFdlYlJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOwor
ICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUpOworICAgIGNhaXJvX3JlY3RhbmdsZShjYW52
YXMsIHJlY3QueCArIDAuNSwgcmVjdC55ICsgMC41LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7
CisgICAgY2Fpcm9fc3Ryb2tlX3ByZXNlcnZlKGNhbnZhcyk7CisKKyAgICBncmFkaWVudEZpbGwo
Y2FudmFzLCByZWN0LnksIHJlY3QuaGVpZ2h0LCBzdGF0ZSA9PSBTdGF0ZVByZXNzZWQpOworCisg
ICAgY2Fpcm9fbW92ZV90byhjYW52YXMsIHJlY3QueCArIHJlY3Qud2lkdGggLSBNZW51TGlzdEFy
cm93U2l6ZSAtIE1lbnVMaXN0Qm9yZGVyLCByZWN0LnkgKyAxICsgcmVjdC5oZWlnaHQgLyAyIC0g
TWVudUxpc3RBcnJvd1NpemUgLyAyKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMs
IENoZWNrQ29sb3IsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IpOworICAgIGNhaXJvX3JlbF9saW5l
X3RvKGNhbnZhcywgTWVudUxpc3RBcnJvd1NpemUsIDApOworICAgIGNhaXJvX3JlbF9saW5lX3Rv
KGNhbnZhcywgLU1lbnVMaXN0QXJyb3dTaXplIC8gMiwgTWVudUxpc3RBcnJvd1NpemUpOworICAg
IGNhaXJvX2Nsb3NlX3BhdGgoY2FudmFzKTsKKyAgICBjYWlyb19maWxsKGNhbnZhcyk7CisKKyAg
ICBjYWlyb19yZXN0b3JlKGNhbnZhcyk7Cit9CisKK1dlYlNpemUgRGVmYXVsdFdlYlRoZW1lRW5n
aW5lOjpnZXRQcm9ncmVzc0JhclNpemUoKSBjb25zdAoreworICAgIHJldHVybiBXZWJTaXplKDIw
MDAsIDMwMCk7Cit9CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludFByb2dyZXNz
QmFyKFdlYkNhbnZhcyogY2FudmFzLCBTdGF0ZSBzdGF0ZSwgY29uc3QgV2ViUmVjdCYgcmVjdCwg
Y29uc3QgUHJvZ3Jlc3NCYXJFeHRyYVBhcmFtcyYgcGFyYW1zKSBjb25zdAoreworICAgIGNhaXJv
X3NhdmUoY2FudmFzKTsKKworICAgIGlmIChwYXJhbXMuaXNEZXRlcm1pbmF0ZSkgeworICAgICAg
ICAvLyBCYWNrZ3JvdW5kCisgICAgICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUpOworICAg
ICAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCwg
cmVjdC5oZWlnaHQpOworICAgICAgICBjYWlyb19maWxsKGNhbnZhcyk7CisgICAgICAgIC8vIFBy
b2dyZXNzCisgICAgICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVjdC55LCBy
ZWN0LndpZHRoICogcGFyYW1zLnBvc2l0aW9uLCByZWN0LmhlaWdodCk7CisgICAgICAgIGdyYWRp
ZW50RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRoLCBy
ZWN0LmhlaWdodCk7CisgICAgICAgIGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5o
ZWlnaHQsIHRydWUpOworICAgIH0KKworICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsKK30KKwor
Ly8gVGhlc2UgdmFsdWVzIGhhdmUgYmVlbiBjb3BpZWQgZnJvbSBSZW5kZXJUaGVtZUNocm9taXVt
U2tpYS5jcHAKK3N0YXRpYyBjb25zdCBpbnQgcHJvZ3Jlc3NBY3Rpdml0eUJsb2NrcyA9IDU7Citz
dGF0aWMgY29uc3QgaW50IHByb2dyZXNzQW5pbWF0aW9uRnJhbWVzID0gMTA7CitzdGF0aWMgY29u
c3QgZG91YmxlIHByb2dyZXNzQW5pbWF0aW9uSW50ZXJ2YWwgPSAwLjEyNTsKKworZG91YmxlIERl
ZmF1bHRXZWJUaGVtZUVuZ2luZTo6Z2V0QW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVz
c0JhcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHByb2dyZXNzQW5pbWF0aW9uSW50ZXJ2YWw7Cit9
CisKK2RvdWJsZSBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmdldEFuaW1hdGlvbkR1cmF0aW9uRm9y
UHJvZ3Jlc3NCYXIoKSBjb25zdAoreworICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbkludGVy
dmFsICogcHJvZ3Jlc3NBbmltYXRpb25GcmFtZXMgKiAyOyAvLyAiMiIgZm9yIGJhY2sgYW5kIGZv
cnRoOworfQorCit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6Z2V0SW5uZXJTcGluQnV0dG9u
UGFkZGluZyhpbnQmIHBhZGRpbmdUb3AsIGludCYgcGFkZGluZ0xlZnQsIGludCYgcGFkZGluZ0Jv
dHRvbSwgaW50JiBwYWRkaW5nUmlnaHQpIGNvbnN0Cit7CisgICAgcGFkZGluZ1RvcCA9IElubmVy
U3BpbkJ1dHRvbkJvcmRlcjsKKyAgICBwYWRkaW5nTGVmdCA9IElubmVyU3BpbkJ1dHRvbkJvcmRl
cjsKKyAgICBwYWRkaW5nQm90dG9tID0gSW5uZXJTcGluQnV0dG9uQm9yZGVyOworICAgIHBhZGRp
bmdSaWdodCA9IDIgKiBJbm5lclNwaW5CdXR0b25Cb3JkZXIgKyBJbm5lclNwaW5CdXR0b25BcnJv
d1NpemU7Cit9CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludElubmVyU3BpbkJ1
dHRvbihXZWJDYW52YXMqIGNhbnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFdlYlJlY3QmIHJlY3Qs
IGNvbnN0IElubmVyU3BpbkJ1dHRvbkV4dHJhUGFyYW1zJiBwYXJhbSkgY29uc3QKK3sKKyAgICBk
b3VibGUgcmVjdEhhbGZIZWlnaHQgPSByZWN0LmhlaWdodCAvIDI7CisKKyAgICBjYWlyb19zYXZl
KGNhbnZhcyk7CisgICAgc2V0dXBCb3JkZXIoY2FudmFzLCBzdGF0ZSk7CisgICAgY2Fpcm9fcmVj
dGFuZ2xlKGNhbnZhcywgcmVjdC54ICsgMC41LCByZWN0LnkgKyAxLjUsIHJlY3Qud2lkdGgsIHJl
Y3RIYWxmSGVpZ2h0KTsKKyAgICBjYWlyb19zdHJva2VfcHJlc2VydmUoY2FudmFzKTsKKworICAg
IGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdEhhbGZIZWlnaHQsIHN0YXRlID09IFN0
YXRlUHJlc3NlZCAmJiBwYXJhbS5zcGluVXApOworCisgICAgc2V0dXBCb3JkZXIoY2FudmFzLCBz
dGF0ZSk7CisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNhbnZhcywgcmVjdC54ICsgMC41LCByZWN0Lnkg
KyAwLjUgKyByZWN0SGFsZkhlaWdodCwgcmVjdC53aWR0aCwgcmVjdEhhbGZIZWlnaHQpOworICAg
IGNhaXJvX3N0cm9rZV9wcmVzZXJ2ZShjYW52YXMpOworCisgICAgZ3JhZGllbnRGaWxsKGNhbnZh
cywgcmVjdC55ICsgcmVjdEhhbGZIZWlnaHQsIHJlY3RIYWxmSGVpZ2h0LCBzdGF0ZSA9PSBTdGF0
ZVByZXNzZWQgJiYgIXBhcmFtLnNwaW5VcCk7CisKKyAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywg
cmVjdC54ICsgcmVjdC53aWR0aCAtIElubmVyU3BpbkJ1dHRvbkFycm93U2l6ZSAtIElubmVyU3Bp
bkJ1dHRvbkJvcmRlciAqIDIsIHJlY3QueSArIHJlY3RIYWxmSGVpZ2h0ICsgcmVjdC5oZWlnaHQg
LyA0IC0gSW5uZXJTcGluQnV0dG9uQXJyb3dTaXplICsgMS41KTsKKyAgICBjYWlyb19zZXRfc291
cmNlX3JnYihjYW52YXMsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IpOworICAg
IGNhaXJvX3JlbF9saW5lX3RvKGNhbnZhcywgTWVudUxpc3RBcnJvd1NpemUsIDApOworICAgIGNh
aXJvX3JlbF9saW5lX3RvKGNhbnZhcywgLU1lbnVMaXN0QXJyb3dTaXplIC8gMiwgTWVudUxpc3RB
cnJvd1NpemUpOworICAgIGNhaXJvX2Nsb3NlX3BhdGgoY2FudmFzKTsKKworICAgIGNhaXJvX21v
dmVfdG8oY2FudmFzLCByZWN0LnggKyByZWN0LndpZHRoIC0gSW5uZXJTcGluQnV0dG9uQXJyb3dT
aXplIC0gSW5uZXJTcGluQnV0dG9uQm9yZGVyICogMiwgcmVjdC55ICsgcmVjdC5oZWlnaHQgLyA0
ICsgSW5uZXJTcGluQnV0dG9uQXJyb3dTaXplKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3JnYihj
YW52YXMsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IpOworICAgIGNhaXJvX3Jl
bF9saW5lX3RvKGNhbnZhcywgTWVudUxpc3RBcnJvd1NpemUsIDApOworICAgIGNhaXJvX3JlbF9s
aW5lX3RvKGNhbnZhcywgLU1lbnVMaXN0QXJyb3dTaXplIC8gMiwgLU1lbnVMaXN0QXJyb3dTaXpl
KTsKKyAgICBjYWlyb19jbG9zZV9wYXRoKGNhbnZhcyk7CisKKyAgICBjYWlyb19maWxsKGNhbnZh
cyk7Cit9CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludE1ldGVyKFdlYkNhbnZh
cyogY2FudmFzLCBTdGF0ZSBzdGF0ZSwgY29uc3QgV2ViUmVjdCYgcmVjdCwgY29uc3QgTWV0ZXJF
eHRyYVBhcmFtcyYgcGFyYW1zKSBjb25zdAoreworICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKKwor
ICAgIC8vIEJhY2tncm91bmQKKyAgICBzZXR1cEJvcmRlcihjYW52YXMsIHN0YXRlKTsKKyAgICBj
YWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5o
ZWlnaHQpOworICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsKKyAgICAvLyBNZXRlcgorICAgIGNhaXJv
X3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRoICogcGFyYW1zLnZh
bHVlUmF0aW8oKSwgcmVjdC5oZWlnaHQpOworICAgIGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3Qu
eSwgcmVjdC5oZWlnaHQpOworCisgICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOworfQorCitjb25z
dCBpbnQgU2xpZGVyVHJhY2tIZWlnaHQgPSA2OworCit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2lu
ZTo6cGFpbnRTbGlkZXJUcmFjayhXZWJDYW52YXMqIGNhbnZhcywgU3RhdGUsIGNvbnN0IFdlYlJl
Y3QmIHJlY3QpIGNvbnN0Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOworICAgIGNhaXJvX3Jl
Y3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0IC0gU2xpZGVyVHJh
Y2tIZWlnaHQpIC8gMi4wLCByZWN0LndpZHRoLCBTbGlkZXJUcmFja0hlaWdodCk7CisgICAgZ3Jh
ZGllbnRGaWxsKGNhbnZhcywgcmVjdC55LCByZWN0LmhlaWdodCwgdHJ1ZSk7CisgICAgY2Fpcm9f
cmVzdG9yZShjYW52YXMpOworfQorCit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRT
bGlkZXJUaHVtYihXZWJDYW52YXMqIGNhbnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFdlYlJlY3Qm
IHJlY3QpIGNvbnN0Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOworICAgIHNldHVwQm9yZGVy
KGNhbnZhcywgc3RhdGUpOworICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVj
dC55LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7CisgICAgY2Fpcm9fc3Ryb2tlX3ByZXNlcnZl
KGNhbnZhcyk7CisgICAgZ3JhZGllbnRGaWxsKGNhbnZhcywgcmVjdC55LCByZWN0LmhlaWdodCwg
c3RhdGUgPT0gU3RhdGVQcmVzc2VkKTsKKyAgICBjYWlyb19yZXN0b3JlKGNhbnZhcyk7Cit9CisK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL0RlZmF1bHRXZWJUaGVtZUVu
Z2luZS5oIGIvU291cmNlL1BsYXRmb3JtL25peC9zcmMvRGVmYXVsdFdlYlRoZW1lRW5naW5lLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uN2MzN2JiOTFkYzc2ZmFmZGZkNzU5ZGM5ZmE1ZGJkNWY1NDFhMTM5MAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL0RlZmF1bHRXZWJUaGVtZUVu
Z2luZS5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYg
RGVmYXVsdFdlYlRoZW1lRW5naW5lX2gKKyNkZWZpbmUgRGVmYXVsdFdlYlRoZW1lRW5naW5lX2gK
KworI2luY2x1ZGUgInB1YmxpYy9XZWJUaGVtZUVuZ2luZS5oIgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgRGVmYXVsdFdlYlRoZW1lRW5naW5lIDogcHVibGljIFdlYlRoZW1lRW5naW5l
IHsKK3B1YmxpYzoKKyAgICAvLyBUZXh0IHNlbGVjdGlvbiBjb2xvcnMuCisgICAgdmlydHVhbCBX
ZWJDb2xvciBhY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIFdlYkNvbG9yIGFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OworICAg
IHZpcnR1YWwgV2ViQ29sb3IgaW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIFdlYkNvbG9yIGluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KCkgY29uc3Q7CisKKyAgICAvLyBMaXN0IGJveCBzZWxlY3Rpb24gY29sb3JzCisgICAgdmlydHVh
bCBXZWJDb2xvciBhY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7
CisgICAgdmlydHVhbCBXZWJDb2xvciBhY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENv
bG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBXZWJDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rp
b25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYkNvbG9yIGluYWN0aXZl
TGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OworCisgICAgdmlydHVhbCBX
ZWJDb2xvciBhY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIFdlYkNvbG9yIGluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3Q7CisK
KyAgICB2aXJ0dWFsIFdlYkNvbG9yIGZvY3VzUmluZ0NvbG9yKCkgY29uc3Q7CisKKyAgICB2aXJ0
dWFsIFdlYkNvbG9yIHRhcEhpZ2hsaWdodENvbG9yKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRCdXR0b24oV2ViQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFdlYlJlY3QmLCBjb25zdCBC
dXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYWludFRleHRGaWVs
ZChXZWJDYW52YXMqLCBTdGF0ZSwgY29uc3QgV2ViUmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBwYWludFRleHRBcmVhKFdlYkNhbnZhcyosIFN0YXRlLCBjb25zdCBXZWJSZWN0JikgY29u
c3Q7CisgICAgdmlydHVhbCBXZWJTaXplIGdldENoZWNrYm94U2l6ZSgpIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBwYWludENoZWNrYm94KFdlYkNhbnZhcyosIFN0YXRlLCBjb25zdCBXZWJSZWN0
JiwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMmKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYlNpemUg
Z2V0UmFkaW9TaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBhaW50UmFkaW8oV2ViQ2Fu
dmFzKiwgU3RhdGUsIGNvbnN0IFdlYlJlY3QmLCBjb25zdCBCdXR0b25FeHRyYVBhcmFtcyYpIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBwYWludE1lbnVMaXN0KFdlYkNhbnZhcyAqLCBTdGF0ZSwg
Y29uc3QgV2ViUmVjdCAmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0TWVudUxpc3RQYWRk
aW5nKGludCYgcGFkZGluZ1RvcCwgaW50JiBwYWRkaW5nTGVmdCwgaW50JiBwYWRkaW5nQm90dG9t
LCBpbnQmIHBhZGRpbmdSaWdodCkgY29uc3Q7CisgICAgdmlydHVhbCBXZWJTaXplIGdldFByb2dy
ZXNzQmFyU2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYWludFByb2dyZXNzQmFyKFdl
YkNhbnZhcyosIFN0YXRlLCBjb25zdCBXZWJSZWN0JiwgY29uc3QgUHJvZ3Jlc3NCYXJFeHRyYVBh
cmFtcyYpIGNvbnN0OworICAgIHZpcnR1YWwgZG91YmxlIGdldEFuaW1hdGlvblJlcGVhdEludGVy
dmFsRm9yUHJvZ3Jlc3NCYXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBnZXRBbmltYXRp
b25EdXJhdGlvbkZvclByb2dyZXNzQmFyKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBhaW50
SW5uZXJTcGluQnV0dG9uKFdlYkNhbnZhcyAqLCBTdGF0ZSwgY29uc3QgV2ViUmVjdCAmLCBjb25z
dCBJbm5lclNwaW5CdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBn
ZXRJbm5lclNwaW5CdXR0b25QYWRkaW5nKGludCYgcGFkZGluZ1RvcCwgaW50JiBwYWRkaW5nTGVm
dCwgaW50JiBwYWRkaW5nQm90dG9tLCBpbnQmIHBhZGRpbmdSaWdodCkgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIHBhaW50TWV0ZXIoV2ViQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFdlYlJlY3QmLCBj
b25zdCBNZXRlckV4dHJhUGFyYW1zJikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBhaW50U2xp
ZGVyVHJhY2soV2ViQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFdlYlJlY3QmKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRTbGlkZXJUaHVtYihXZWJDYW52YXMqLCBTdGF0ZSwgY29uc3QgV2Vi
UmVjdCYpIGNvbnN0OworfTsKKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZv
cm0vbml4L3NyYy9QbGF0Zm9ybS5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3NyYy9QbGF0Zm9y
bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNGQ0MmZkZGE4NTI3YmEzMWVhZmM3MDNkOTUyY2E5NjUxMjI5M2Vk
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL1BsYXRmb3JtLmNw
cApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJwdWJsaWMvUGxhdGZvcm0uaCIKKworI2luY2x1ZGUgIkRlZmF1bHRXZWJUaGVtZUVuZ2lu
ZS5oIgorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBFbXB0eVBsYXRmb3JtIDogcHVibGlj
IFBsYXRmb3JtIHsKK3B1YmxpYzoKKyAgICB+RW1wdHlQbGF0Zm9ybSgpIHsgfQorfTsKK3N0YXRp
YyBXVEY6Ok93blB0cjxFbXB0eVBsYXRmb3JtPiBzX2VtcHR5UGxhdGZvcm0gPSBXVEY6OmFkb3B0
UHRyKG5ldyBFbXB0eVBsYXRmb3JtKCkpOworCitzdGF0aWMgUGxhdGZvcm0qIHNfcGxhdGZvcm0g
PSBzX2VtcHR5UGxhdGZvcm0uZ2V0KCk7CisKK3ZvaWQgUGxhdGZvcm06OmluaXRpYWxpemUoUGxh
dGZvcm0qIHBsYXRmb3JtKQoreworICAgIHNfcGxhdGZvcm0gPSBwbGF0Zm9ybTsKK30KKwordm9p
ZCBQbGF0Zm9ybTo6c2h1dGRvd24oKQoreworICAgIHNfcGxhdGZvcm0gPSAwOworfQorCitQbGF0
Zm9ybSogUGxhdGZvcm06OmN1cnJlbnQoKQoreworICAgIHJldHVybiBzX3BsYXRmb3JtOworfQor
CitXZWJUaGVtZUVuZ2luZSogUGxhdGZvcm06OnRoZW1lRW5naW5lKCkKK3sKKyAgICBzdGF0aWMg
RGVmYXVsdFdlYlRoZW1lRW5naW5lIHRoZW1lOworICAgIHJldHVybiAmdGhlbWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vbml4L0F1ZGlvQnVzTml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L25peC9BdWRpb0J1c05peC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGFmN2UxODk5NDFlOWI3MmJlYzFkN2M3
ZDg4YTI2Nzg2MjdlMjNlMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL25peC9BdWRpb0J1c05peC5jcHAKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNs
dWRlICJBdWRpb0J1cy5oIgorCisjaW5jbHVkZSAiQXVkaW9GaWxlUmVhZGVyLmgiCisjaW5jbHVk
ZSA8cHVibGljL1BsYXRmb3JtLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYkF1ZGlvQnVzLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitQYXNzUmVmUHRyPEF1ZGlvQnVzPiBkZWNvZGVBdWRpb0ZpbGVEYXRhKGNvbnN0
IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplLCBkb3VibGUgc2FtcGxlUmF0ZSkKK3sKKyAgICBXZWJL
aXQ6OldlYkF1ZGlvQnVzIHdlYkF1ZGlvQnVzOworICAgIGlmIChXZWJLaXQ6OlBsYXRmb3JtOjpj
dXJyZW50KCktPmxvYWRBdWRpb1Jlc291cmNlKCZ3ZWJBdWRpb0J1cywgZGF0YSwgc2l6ZSwgc2Ft
cGxlUmF0ZSkpCisgICAgICAgIHJldHVybiB3ZWJBdWRpb0J1cy5hdWRpb0J1cygpOworICAgIHJl
dHVybiBQYXNzUmVmUHRyPEF1ZGlvQnVzPigpOworfQorCitQYXNzUmVmUHRyPEF1ZGlvQnVzPiBB
dWRpb0J1czo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSwgZmxvYXQgc2Ft
cGxlUmF0ZSkKK3sKKyAgICBTdHJpbmcgYWJzb2x1dGVGaWxlbmFtZShtYWtlU3RyaW5nKERBVEFf
RElSLCAiL3dlYmF1ZGlvL3Jlc291cmNlcy8iLCBuYW1lLCAiLndhdiIpKTsKKyAgICBjb25zdCBX
ZWJLaXQ6OldlYkRhdGEmIHJlc291cmNlID0gV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5s
b2FkUmVzb3VyY2UoYWJzb2x1dGVGaWxlbmFtZS51dGY4KCkuZGF0YSgpKTsKKworICAgIGlmIChy
ZXNvdXJjZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEF1ZGlvQnVzPigp
OworCisgICAgLy8gRklYTUU6IHRoZSBzYW1wbGVSYXRlIHBhcmFtZXRlciBpcyBpZ25vcmVkLiBJ
dCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBBUEkuCisgICAgUmVmUHRyPEF1ZGlvQnVzPiBh
dWRpb0J1cyA9IGRlY29kZUF1ZGlvRmlsZURhdGEocmVzb3VyY2UuZGF0YSgpLCByZXNvdXJjZS5z
aXplKCksIHNhbXBsZVJhdGUpOworCisgICAgaWYgKCFhdWRpb0J1cy5nZXQoKSkKKyAgICAgICAg
cmV0dXJuIFBhc3NSZWZQdHI8QXVkaW9CdXM+KCk7CisKKyAgICAvLyBJZiB0aGUgYnVzIGlzIGFs
cmVhZHkgYXQgdGhlIHJlcXVlc3RlZCBzYW1wbGUtcmF0ZSB0aGVuIHJldHVybiBhcyBpcy4KKyAg
ICBpZiAoYXVkaW9CdXMtPnNhbXBsZVJhdGUoKSA9PSBzYW1wbGVSYXRlKQorICAgICAgICByZXR1
cm4gYXVkaW9CdXMucmVsZWFzZSgpOworCisgICAgcmV0dXJuIEF1ZGlvQnVzOjpjcmVhdGVCeVNh
bXBsZVJhdGVDb252ZXJ0aW5nKGF1ZGlvQnVzLmdldCgpLCBmYWxzZSwgc2FtcGxlUmF0ZSk7Cit9
CisKK1Bhc3NSZWZQdHI8QXVkaW9CdXM+IGNyZWF0ZUJ1c0Zyb21Jbk1lbW9yeUF1ZGlvRmlsZShj
b25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUsIGJvb2wgbWl4VG9Nb25vLCBmbG9hdCBz
YW1wbGVSYXRlKQoreworICAgIC8vIEZJWE1FOiB0aGUgc2FtcGxlUmF0ZSBwYXJhbWV0ZXIgaXMg
aWdub3JlZC4gSXQgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSB0aGUgQVBJLgorICAgIFJlZlB0cjxB
dWRpb0J1cz4gYXVkaW9CdXMgPSBkZWNvZGVBdWRpb0ZpbGVEYXRhKHN0YXRpY19jYXN0PGNvbnN0
IGNoYXIqPihkYXRhKSwgZGF0YVNpemUsIHNhbXBsZVJhdGUpOworICAgIGlmICghYXVkaW9CdXMu
Z2V0KCkpCisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEF1ZGlvQnVzPigpOworCisgICAgLy8g
SWYgdGhlIGJ1cyBuZWVkcyBubyBjb252ZXJzaW9uIHRoZW4gcmV0dXJuIGFzIGlzLgorICAgIGlm
ICgoIW1peFRvTW9ubyB8fCBhdWRpb0J1cy0+bnVtYmVyT2ZDaGFubmVscygpID09IDEpICYmIGF1
ZGlvQnVzLT5zYW1wbGVSYXRlKCkgPT0gc2FtcGxlUmF0ZSkKKyAgICAgICAgcmV0dXJuIGF1ZGlv
QnVzLnJlbGVhc2UoKTsKKworICAgIHJldHVybiBBdWRpb0J1czo6Y3JlYXRlQnlTYW1wbGVSYXRl
Q29udmVydGluZyhhdWRpb0J1cy5nZXQoKSwgbWl4VG9Nb25vLCBzYW1wbGVSYXRlKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL25peC9BdWRpb0Rlc3RpbmF0
aW9uTml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL25peC9BdWRpb0Rlc3Rp
bmF0aW9uTml4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZGUyMTdlYTAwNjRkZjkwYjgxYjY3ZWMxMzE2N2Uw
ZGMwMzYzMTg3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vbml4L0F1ZGlvRGVzdGluYXRpb25OaXguY3BwCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkF1ZGlv
RGVzdGluYXRpb25OaXguaCIKKworI2luY2x1ZGUgIkF1ZGlvRklGTy5oIgorI2luY2x1ZGUgIkF1
ZGlvUHVsbEZJRk8uaCIKKyNpbmNsdWRlIDxwdWJsaWMvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisvLyBCdWZmZXIgc2l6ZSBhdCB3aGljaCB0aGUgd2ViIGF1ZGlvIGVuZ2lu
ZSB3aWxsIHJlbmRlci4KK2NvbnN0IHVuc2lnbmVkIHJlbmRlckJ1ZmZlclNpemUgPSAxMjg7CisK
Ky8vIFNpemUgb2YgdGhlIEZJRk8KK2NvbnN0IHNpemVfdCBmaWZvU2l6ZSA9IDgxOTI7CisKKy8v
IEZhY3RvcnkgbWV0aG9kOiBDaHJvbWl1bS1pbXBsZW1lbnRhdGlvbgorUGFzc093blB0cjxBdWRp
b0Rlc3RpbmF0aW9uPiBBdWRpb0Rlc3RpbmF0aW9uOjpjcmVhdGUoQXVkaW9JT0NhbGxiYWNrJiBj
YWxsYmFjaywgY29uc3QgU3RyaW5nJiBpbnB1dERldmljZUlkLCB1bnNpZ25lZCBudW1iZXJPZklu
cHV0Q2hhbm5lbHMsIHVuc2lnbmVkIG51bWJlck9mT3V0cHV0Q2hhbm5lbHMsIGZsb2F0IHNhbXBs
ZVJhdGUpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBBdWRpb0Rlc3RpbmF0aW9uTml4KGNh
bGxiYWNrLCBpbnB1dERldmljZUlkLCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIG51bWJlck9mT3V0
cHV0Q2hhbm5lbHMsIHNhbXBsZVJhdGUpKTsKK30KKworQXVkaW9EZXN0aW5hdGlvbk5peDo6QXVk
aW9EZXN0aW5hdGlvbk5peChBdWRpb0lPQ2FsbGJhY2smIGNhbGxiYWNrLCBjb25zdCBTdHJpbmcm
LCB1bnNpZ25lZCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIHVuc2lnbmVkIG51bWJlck9mT3V0cHV0
Q2hhbm5lbHMsIGZsb2F0IHNhbXBsZVJhdGUpCisgICAgOiBtX2NhbGxiYWNrKGNhbGxiYWNrKQor
ICAgICwgbV9udW1iZXJPZk91dHB1dENoYW5uZWxzKG51bWJlck9mT3V0cHV0Q2hhbm5lbHMpCisg
ICAgLCBtX2lucHV0QnVzKEF1ZGlvQnVzOjpjcmVhdGUobnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBy
ZW5kZXJCdWZmZXJTaXplKSkKKyAgICAsIG1fcmVuZGVyQnVzKEF1ZGlvQnVzOjpjcmVhdGUobnVt
YmVyT2ZPdXRwdXRDaGFubmVscywgcmVuZGVyQnVmZmVyU2l6ZSwgZmFsc2UpKQorICAgICwgbV9z
YW1wbGVSYXRlKHNhbXBsZVJhdGUpCisgICAgLCBtX2lzUGxheWluZyhmYWxzZSkKK3sKKyAgICAv
LyBVc2UgdGhlIG9wdGltYWwgYnVmZmVyIHNpemUgcmVjb21tZW5kZWQgYnkgdGhlIGF1ZGlvIGJh
Y2tlbmQuCisgICAgbV9jYWxsYmFja0J1ZmZlclNpemUgPSBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJy
ZW50KCktPmF1ZGlvSGFyZHdhcmVCdWZmZXJTaXplKCk7CisKKyAgICAvLyBRdWljayBleGl0IGlm
IHRoZSByZXF1ZXN0ZWQgc2l6ZSBpcyB0b28gbGFyZ2UuCisgICAgQVNTRVJUKG1fY2FsbGJhY2tC
dWZmZXJTaXplICsgcmVuZGVyQnVmZmVyU2l6ZSA8PSBmaWZvU2l6ZSk7CisgICAgaWYgKG1fY2Fs
bGJhY2tCdWZmZXJTaXplICsgcmVuZGVyQnVmZmVyU2l6ZSA+IGZpZm9TaXplKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2F1ZGlvRGV2aWNlID0gYWRvcHRQdHIoV2ViS2l0OjpQbGF0Zm9ybTo6
Y3VycmVudCgpLT5jcmVhdGVBdWRpb0RldmljZShtX2NhbGxiYWNrQnVmZmVyU2l6ZSwgbnVtYmVy
T2ZJbnB1dENoYW5uZWxzLCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBzYW1wbGVSYXRlLCB0aGlz
KSk7CisgICAgQVNTRVJUKG1fYXVkaW9EZXZpY2UpOworCisgICAgLy8gQ3JlYXRlIGEgRklGTyB0
byBoYW5kbGUgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZSBjYWxsYmFjayBzaXplCisgICAgLy8gbm90
IGJlaW5nIGEgbXVsdGlwbGUgb2YgdGhlIHJlbmRlciBzaXplLiBJZiB0aGUgRklGTyBhbHJlYWR5
CisgICAgLy8gY29udGFpbnMgZW5vdWdoIGRhdGEsIHRoZSBkYXRhIHdpbGwgYmUgcHJvdmlkZWQg
ZGlyZWN0bHkuCisgICAgLy8gT3RoZXJ3aXNlLCB0aGUgRklGTyB3aWxsIGNhbGwgdGhlIHByb3Zp
ZGVyIGVub3VnaCB0aW1lcyB0bworICAgIC8vIHNhdGlzZnkgdGhlIHJlcXVlc3QgZm9yIGRhdGEu
CisgICAgbV9maWZvID0gYWRvcHRQdHIobmV3IEF1ZGlvUHVsbEZJRk8oKnRoaXMsIG51bWJlck9m
T3V0cHV0Q2hhbm5lbHMsIGZpZm9TaXplLCByZW5kZXJCdWZmZXJTaXplKSk7CisKKyAgICAvLyBJ
bnB1dCBidWZmZXJpbmcuCisgICAgbV9pbnB1dEZpZm8gPSBhZG9wdFB0cihuZXcgQXVkaW9GSUZP
KG51bWJlck9mSW5wdXRDaGFubmVscywgZmlmb1NpemUpKTsKKworICAgIC8vIElmIHRoZSBjYWxs
YmFjayBzaXplIGRvZXMgbm90IG1hdGNoIHRoZSByZW5kZXIgc2l6ZSwgdGhlbiB3ZSBuZWVkIHRv
IGJ1ZmZlciBzb21lCisgICAgLy8gZXh0cmEgc2lsZW5jZSBmb3IgdGhlIGlucHV0LiBPdGhlcndp
c2UsIHdlIGNhbiBvdmVyLWNvbnN1bWUgdGhlIGlucHV0IEZJRk8uCisgICAgaWYgKG1fY2FsbGJh
Y2tCdWZmZXJTaXplICE9IHJlbmRlckJ1ZmZlclNpemUpIHsKKyAgICAgICAgLy8gRklYTUU6IGhh
bmRsZSBtdWx0aS1jaGFubmVsIGlucHV0IGFuZCBkb24ndCBoYXJkLWNvZGUgdG8gc3RlcmVvLgor
ICAgICAgICBSZWZQdHI8QXVkaW9CdXM+IHNpbGVuY2UgPSBBdWRpb0J1czo6Y3JlYXRlKDIsIHJl
bmRlckJ1ZmZlclNpemUpOworICAgICAgICBtX2lucHV0Rmlmby0+cHVzaChzaWxlbmNlLmdldCgp
KTsKKyAgICB9Cit9CisKK0F1ZGlvRGVzdGluYXRpb25OaXg6On5BdWRpb0Rlc3RpbmF0aW9uTml4
KCkKK3sKKyAgICBzdG9wKCk7Cit9CisKK3ZvaWQgQXVkaW9EZXN0aW5hdGlvbk5peDo6c3RhcnQo
KQoreworICAgIGlmICghbV9pc1BsYXlpbmcgJiYgbV9hdWRpb0RldmljZSkgeworICAgICAgICBt
X2F1ZGlvRGV2aWNlLT5zdGFydCgpOworICAgICAgICBtX2lzUGxheWluZyA9IHRydWU7CisgICAg
fQorfQorCit2b2lkIEF1ZGlvRGVzdGluYXRpb25OaXg6OnN0b3AoKQoreworICAgIGlmIChtX2lz
UGxheWluZyAmJiBtX2F1ZGlvRGV2aWNlKSB7CisgICAgICAgIG1fYXVkaW9EZXZpY2UtPnN0b3Ao
KTsKKyAgICAgICAgbV9pc1BsYXlpbmcgPSBmYWxzZTsKKyAgICB9Cit9CisKK2Zsb2F0IEF1ZGlv
RGVzdGluYXRpb246OmhhcmR3YXJlU2FtcGxlUmF0ZSgpCit7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGZsb2F0PihXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmF1ZGlvSGFyZHdhcmVTYW1w
bGVSYXRlKCkpOworfQorCit1bnNpZ25lZCBsb25nIEF1ZGlvRGVzdGluYXRpb246Om1heENoYW5u
ZWxDb3VudCgpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihXZWJLaXQ6OlBsYXRm
b3JtOjpjdXJyZW50KCktPmF1ZGlvSGFyZHdhcmVPdXRwdXRDaGFubmVscygpKTsKK30KKwordm9p
ZCBBdWRpb0Rlc3RpbmF0aW9uTml4OjpyZW5kZXIoY29uc3QgV2ViS2l0OjpXZWJWZWN0b3I8Zmxv
YXQqPiYgc291cmNlRGF0YSwgY29uc3QgV2ViS2l0OjpXZWJWZWN0b3I8ZmxvYXQqPiYgYXVkaW9E
YXRhLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMpCit7CisgICAgYm9vbCBpc051bWJlck9mQ2hhbm5l
bHNHb29kID0gYXVkaW9EYXRhLnNpemUoKSA9PSBtX251bWJlck9mT3V0cHV0Q2hhbm5lbHM7Cisg
ICAgaWYgKCFpc051bWJlck9mQ2hhbm5lbHNHb29kKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYm9vbCBpc0J1ZmZlclNpemVH
b29kID0gbnVtYmVyT2ZGcmFtZXMgPT0gbV9jYWxsYmFja0J1ZmZlclNpemU7CisgICAgaWYgKCFp
c0J1ZmZlclNpemVHb29kKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gQnVmZmVyIG9wdGlvbmFsIGxpdmUgaW5wdXQuCisg
ICAgaWYgKHNvdXJjZURhdGEuc2l6ZSgpID49IDIpIHsKKyAgICAgICAgLy8gRklYTUU6IGhhbmRs
ZSBtdWx0aS1jaGFubmVsIGlucHV0IGFuZCBkb24ndCBoYXJkLWNvZGUgdG8gc3RlcmVvLgorICAg
ICAgICBSZWZQdHI8QXVkaW9CdXM+IHdyYXBwZXJCdXMgPSBBdWRpb0J1czo6Y3JlYXRlKDIsIG51
bWJlck9mRnJhbWVzLCBmYWxzZSk7CisgICAgICAgIHdyYXBwZXJCdXMtPnNldENoYW5uZWxNZW1v
cnkoMCwgc291cmNlRGF0YVswXSwgbnVtYmVyT2ZGcmFtZXMpOworICAgICAgICB3cmFwcGVyQnVz
LT5zZXRDaGFubmVsTWVtb3J5KDEsIHNvdXJjZURhdGFbMV0sIG51bWJlck9mRnJhbWVzKTsKKyAg
ICAgICAgbV9pbnB1dEZpZm8tPnB1c2god3JhcHBlckJ1cy5nZXQoKSk7CisgICAgfQorCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbnVtYmVyT2ZPdXRwdXRDaGFubmVsczsgKytpKQor
ICAgICAgICBtX3JlbmRlckJ1cy0+c2V0Q2hhbm5lbE1lbW9yeShpLCBhdWRpb0RhdGFbaV0sIG51
bWJlck9mRnJhbWVzKTsKKworICAgIG1fZmlmby0+Y29uc3VtZShtX3JlbmRlckJ1cy5nZXQoKSwg
bnVtYmVyT2ZGcmFtZXMpOworfQorCit2b2lkIEF1ZGlvRGVzdGluYXRpb25OaXg6OnByb3ZpZGVJ
bnB1dChBdWRpb0J1cyogYnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQoreworICAgIFJlZlB0
cjxBdWRpb0J1cz4gc291cmNlQnVzOworICAgIGlmIChtX2lucHV0Rmlmby0+ZnJhbWVzSW5GaWZv
KCkgPj0gZnJhbWVzVG9Qcm9jZXNzKSB7CisgICAgICAgIG1faW5wdXRGaWZvLT5jb25zdW1lKG1f
aW5wdXRCdXMuZ2V0KCksIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIHNvdXJjZUJ1cyA9IG1f
aW5wdXRCdXM7CisgICAgfQorCisgICAgbV9jYWxsYmFjay5yZW5kZXIoc291cmNlQnVzLmdldCgp
LCBidXMsIGZyYW1lc1RvUHJvY2Vzcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9uaXgvQXVkaW9EZXN0aW5hdGlvbk5peC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vbml4L0F1ZGlvRGVzdGluYXRpb25OaXguaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNjU2
ZjVjMDQ3MzZiNTNjODBkMmIzYTJiNzlkZDQ3ZjM4YTRlZmU0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbml4L0F1ZGlvRGVzdGluYXRpb25OaXguaApA
QCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgor
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBdWRpb0Rlc3RpbmF0aW9uTml4X2gKKyNkZWZpbmUg
QXVkaW9EZXN0aW5hdGlvbk5peF9oCisKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgorI2luY2x1ZGUg
IkF1ZGlvRGVzdGluYXRpb24uaCIKKyNpbmNsdWRlICJBdWRpb0lPQ2FsbGJhY2suaCIKKyNpbmNs
dWRlICJBdWRpb1NvdXJjZVByb3ZpZGVyLmgiCisjaW5jbHVkZSA8cHVibGljL1dlYkF1ZGlvRGV2
aWNlLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEF1ZGlvRklGTzsKK2NsYXNzIEF1ZGlvUHVsbEZJRk87CisKKy8vIEFuIEF1
ZGlvRGVzdGluYXRpb24gdXNpbmcgQ2hyb21pdW0ncyBhdWRpbyBzeXN0ZW0KKworY2xhc3MgQXVk
aW9EZXN0aW5hdGlvbk5peCA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uLCBwdWJsaWMgV2ViS2l0
OjpXZWJBdWRpb0RldmljZTo6UmVuZGVyQ2FsbGJhY2ssIHB1YmxpYyBBdWRpb1NvdXJjZVByb3Zp
ZGVyIHsKK3B1YmxpYzoKKyAgICBBdWRpb0Rlc3RpbmF0aW9uTml4KEF1ZGlvSU9DYWxsYmFjayYs
IGNvbnN0IFN0cmluZyYgaW5wdXREZXZpY2VJZCwgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dENoYW5u
ZWxzLCB1bnNpZ25lZCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBmbG9hdCBzYW1wbGVSYXRlKTsK
KyAgICB2aXJ0dWFsIH5BdWRpb0Rlc3RpbmF0aW9uTml4KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
c3RhcnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOworICAgIGJvb2wgaXNQbGF5aW5nKCkg
eyByZXR1cm4gbV9pc1BsYXlpbmc7IH0KKworICAgIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCB7
IHJldHVybiBtX3NhbXBsZVJhdGU7IH0KKworICAgIC8vIFdlYktpdDo6V2ViQXVkaW9EZXZpY2U6
OlJlbmRlckNhbGxiYWNrCisgICAgdmlydHVhbCB2b2lkIHJlbmRlcihjb25zdCBXZWJLaXQ6Oldl
YlZlY3RvcjxmbG9hdCo+JiBzb3VyY2VEYXRhLCBjb25zdCBXZWJLaXQ6OldlYlZlY3RvcjxmbG9h
dCo+JiBhdWRpb0RhdGEsIHNpemVfdCBudW1iZXJPZkZyYW1lcyk7CisKKyAgICAvLyBXZWJDb3Jl
OjpBdWRpb1NvdXJjZVByb3ZpZGVyCisgICAgdmlydHVhbCB2b2lkIHByb3ZpZGVJbnB1dChBdWRp
b0J1cyosIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOworCitwcml2YXRlOgorICAgIEF1ZGlvSU9D
YWxsYmFjayYgbV9jYWxsYmFjazsKKyAgICB1bnNpZ25lZCBtX251bWJlck9mT3V0cHV0Q2hhbm5l
bHM7CisgICAgUmVmUHRyPEF1ZGlvQnVzPiBtX2lucHV0QnVzOworICAgIFJlZlB0cjxBdWRpb0J1
cz4gbV9yZW5kZXJCdXM7CisgICAgZmxvYXQgbV9zYW1wbGVSYXRlOworICAgIGJvb2wgbV9pc1Bs
YXlpbmc7CisgICAgT3duUHRyPFdlYktpdDo6V2ViQXVkaW9EZXZpY2U+IG1fYXVkaW9EZXZpY2U7
CisgICAgc2l6ZV90IG1fY2FsbGJhY2tCdWZmZXJTaXplOworCisgICAgT3duUHRyPEF1ZGlvRklG
Tz4gbV9pbnB1dEZpZm87CisgICAgT3duUHRyPEF1ZGlvUHVsbEZJRk8+IG1fZmlmbzsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEF1ZGlvRGVzdGluYXRpb25OaXhf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbml4L0ZGVEZyYW1l
Tml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL25peC9GRlRGcmFtZU5peC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uODVjNjg2NTk4ZjdlMmJmNDUyNWJjNmNkYzQ5MjZlYmY3ZTEyOTQ3Ygot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL25peC9GRlRG
cmFtZU5peC5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJT
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisjaW5jbHVkZSAiRkZU
RnJhbWUuaCIKKworI2luY2x1ZGUgIlZlY3Rvck1hdGguaCIKKyNpbmNsdWRlIDxwdWJsaWMvUGxh
dGZvcm0uaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViRkZURnJhbWUuaD4KKworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0ZGVEZyYW1lOjpGRlRGcmFtZSh1bnNpZ25lZCBmZnRTaXplKQorICAgIDog
bV9GRlRTaXplKGZmdFNpemUpCisgICAgLCBtX2xvZzJGRlRTaXplKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihsb2cyKGZmdFNpemUpKSkKK3sKKyAgICBtX2ZmdEZyYW1lID0gYWRvcHRQdHIoV2ViS2l0
OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jcmVhdGVGRlRGcmFtZShmZnRTaXplKSk7Cit9CisKK0ZG
VEZyYW1lOjpGRlRGcmFtZShjb25zdCBGRlRGcmFtZSYgZnJhbWUpCisgICAgOiBtX0ZGVFNpemUo
ZnJhbWUubV9GRlRTaXplKQorICAgICwgbV9sb2cyRkZUU2l6ZShmcmFtZS5tX2xvZzJGRlRTaXpl
KQoreworICAgIG1fZmZ0RnJhbWUgPSBhZG9wdFB0cihXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50
KCktPmNyZWF0ZUZGVEZyYW1lKGZyYW1lLm1fZmZ0RnJhbWUuZ2V0KCkpKTsKK30KKworRkZURnJh
bWU6On5GRlRGcmFtZSgpCit7CisgICAgbV9mZnRGcmFtZS5yZWxlYXNlKCk7Cit9CisKK3ZvaWQg
RkZURnJhbWU6Om11bHRpcGx5KGNvbnN0IEZGVEZyYW1lJiBmcmFtZSkKK3sKKyAgICBpZiAoIW1f
ZmZ0RnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZmZ0RnJhbWUtPm11bHRpcGx5KCpm
cmFtZS5tX2ZmdEZyYW1lKTsKKworICAgIC8vIFNjYWxlIGFjY291bnRzIHRoZSBwZWN1bGlhciBz
Y2FsaW5nIG9mIHZlY0xpYiBvbiB0aGUgTWFjLgorICAgIC8vIFRoaXMgZW5zdXJlcyB0aGUgcmln
aHQgc2NhbGluZyBhbGwgdGhlIHdheSBiYWNrIHRvIGludmVyc2UgRkZULgorICAgIC8vIEZJWE1F
OiBpZiB3ZSBjaGFuZ2UgdGhlIHNjYWxpbmcgb24gdGhlIE1hYyB0aGVuIHRoaXMgc2NhbGUKKyAg
ICAvLyBmYWN0b3Igd2lsbCBuZWVkIHRvIGNoYW5nZSB0b28uCisgICAgc2NhbGVQbGFuYXJEYXRh
KDAuNWYpOworfQorCisvLyBQcm92aWRlcyB0aW1lIGRvbWFpbiBzYW1wbGVzIGluIGFyZ3VtZW50
ICJkYXRhIi4gRnJhbWUgd2lsbCBzdG9yZSB0aGUgdHJhbnNmb3JtZWQgZGF0YS4KK3ZvaWQgRkZU
RnJhbWU6OmRvRkZUKGNvbnN0IGZsb2F0KiBkYXRhKQoreworICAgIGlmICghbV9mZnRGcmFtZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9mZnRGcmFtZS0+ZG9GRlQoZGF0YSk7CisKKyAgICBz
Y2FsZVBsYW5hckRhdGEoMi4wZik7Cit9CisKKy8vIENhbGN1bGF0ZXMgaW52ZXJzZSB0cmFuc2Zv
cm0gZnJvbSB0aGUgc3RvcmVkIGRhdGEsIHB1dHRpbmcgdGhlIHJlc3VsdHMgaW4gYXJndW1lbnQg
J2RhdGEnLgordm9pZCBGRlRGcmFtZTo6ZG9JbnZlcnNlRkZUKGZsb2F0KiBkYXRhKQoreworICAg
IGlmICghbV9mZnRGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9mZnRGcmFtZS0+ZG9J
bnZlcnNlRkZUKGRhdGEpOworCisgICAgLy8gU2NhbGUgc28gdGhhdCBhIGZvcndhcmQgdGhlbiBp
bnZlcnNlIEZGVCB5aWVsZHMgZXhhY3RseSB0aGUgb3JpZ2luYWwgZGF0YS4KKyAgICBjb25zdCBm
bG9hdCBzY2FsZSA9IDEuMCAvICgyICogbV9GRlRTaXplKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9GRlRTaXplOyArK2kpCisgICAgICAgIGRhdGFbaV0gPSBzY2FsZSAqIGRhdGFb
aV07Cit9CisKK3ZvaWQgRkZURnJhbWU6OmluaXRpYWxpemUoKQoreworfQorCit2b2lkIEZGVEZy
YW1lOjpjbGVhbnVwKCkKK3sKK30KKwordm9pZCBGRlRGcmFtZTo6c2NhbGVQbGFuYXJEYXRhKGZs
b2F0IHNjYWxlKQoreworICAgIGZsb2F0KiByZWFsUCA9IG1fZmZ0RnJhbWUtPnJlYWxEYXRhKCk7
CisgICAgZmxvYXQqIGltYWdQID0gbV9mZnRGcmFtZS0+aW1hZ0RhdGEoKTsKKworICAgIGNvbnN0
IHVuc2lnbmVkIGZyYW1lc1RvUHJvY2VzcyA9IG1fZmZ0RnJhbWUtPmZyZXF1ZW5jeURvbWFpblNh
bXBsZUNvdW50KCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhbWVzVG9Qcm9j
ZXNzOyArK2kpIHsKKyAgICAgICAgcmVhbFBbaV0gKj0gc2NhbGU7CisgICAgICAgIGltYWdQW2ld
ICo9IHNjYWxlOworICAgIH0KK30KKworZmxvYXQqIEZGVEZyYW1lOjpyZWFsRGF0YSgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX2ZmdEZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVy
biBjb25zdF9jYXN0PGZsb2F0Kj4obV9mZnRGcmFtZS0+cmVhbERhdGEoKSk7Cit9CisKK2Zsb2F0
KiBGRlRGcmFtZTo6aW1hZ0RhdGEoKSBjb25zdAoreworICAgIGlmICghbV9mZnRGcmFtZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gY29uc3RfY2FzdDxmbG9hdCo+KG1fZmZ0RnJh
bWUtPmltYWdEYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bml4L3N1cHBvcnQvV2ViQXVkaW9CdXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4
L3N1cHBvcnQvV2ViQXVkaW9CdXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2MTIwZGRjOTI0MGJkZTEyMWEx
Y2M0N2I1OGNkY2I4ZTFiYjQ4M2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uaXgvc3VwcG9ydC9XZWJBdWRpb0J1cy5jcHAKQEAgLTAsMCArMSwxNDcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8cHVibGljL1dlYkF1ZGlv
QnVzLmg+CisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisj
ZWxzZQorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQXVkaW9CdXMgeworfTsKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKyNlbmRpZgorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQXVkaW9CdXNQcml2YXRlIHsKK3B1YmxpYzoKKyAg
ICBXZWJBdWRpb0J1c1ByaXZhdGUoUGFzc1JlZlB0cjxXZWJDb3JlOjpBdWRpb0J1cz4gYXVkaW9C
dXMpCisgICAgICAgIDogbV9hdWRpb0J1cyhhdWRpb0J1cykKKyAgICB7IH0KKworICAgIFJlZlB0
cjxXZWJDb3JlOjpBdWRpb0J1cz4gbV9hdWRpb0J1czsKK307CisKK3ZvaWQgV2ViQXVkaW9CdXM6
OmluaXRpYWxpemUodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IGxlbmd0aCwgZG91
YmxlIHNhbXBsZVJhdGUpCit7CisjaWYgRU5BQkxFKFdFQl9BVURJTykKKyAgICBpZiAobV9kKQor
ICAgICAgICBkZWxldGUgbV9kOworICAgIG1fZCA9IG5ldyBXZWJBdWRpb0J1c1ByaXZhdGUoV2Vi
Q29yZTo6QXVkaW9CdXM6OmNyZWF0ZShudW1iZXJPZkNoYW5uZWxzLCBsZW5ndGgpKTsKKyAgICBt
X2QtPm1fYXVkaW9CdXMtPnNldFNhbXBsZVJhdGUoc2FtcGxlUmF0ZSk7CisjZWxzZQorICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViQXVkaW9CdXM6OnJlc2l6
ZVNtYWxsZXIoc2l6ZV90IG5ld0xlbmd0aCkKK3sKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAg
IEFTU0VSVChtX2QpOworICAgIGlmIChtX2QpIHsKKyAgICAgICAgQVNTRVJUKG5ld0xlbmd0aCA8
PSBsZW5ndGgoKSk7CisgICAgICAgIG1fZC0+bV9hdWRpb0J1cy0+cmVzaXplU21hbGxlcihuZXdM
ZW5ndGgpOworICAgIH0KKyNlbHNlCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYK
K30KKwordm9pZCBXZWJBdWRpb0J1czo6cmVzZXQoKQoreworI2lmIEVOQUJMRShXRUJfQVVESU8p
CisgICAgZGVsZXRlIG1fZDsKKyAgICBtX2QgPSAwOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyNlbmRpZgorfQorCit1bnNpZ25lZCBXZWJBdWRpb0J1czo6bnVtYmVyT2ZDaGFu
bmVscygpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFdFQl9BVURJTykKKyAgICBpZiAoIW1fZCkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fZC0+bV9hdWRpb0J1cy0+bnVtYmVyT2ZDaGFu
bmVscygpOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsK
KyNlbmRpZgorfQorCitzaXplX3QgV2ViQXVkaW9CdXM6Omxlbmd0aCgpIGNvbnN0Cit7CisjaWYg
RU5BQkxFKFdFQl9BVURJTykKKyAgICBpZiAoIW1fZCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIG1fZC0+bV9hdWRpb0J1cy0+bGVuZ3RoKCk7CisjZWxzZQorICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK2RvdWJsZSBXZWJBdWRpb0J1
czo6c2FtcGxlUmF0ZSgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFdFQl9BVURJTykKKyAgICBpZiAo
IW1fZCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fZC0+bV9hdWRpb0J1cy0+c2Ft
cGxlUmF0ZSgpOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
MDsKKyNlbmRpZgorfQorCitmbG9hdCogV2ViQXVkaW9CdXM6OmNoYW5uZWxEYXRhKHVuc2lnbmVk
IGNoYW5uZWxJbmRleCkKK3sKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIGlmICghbV9kKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBBU1NFUlQoY2hhbm5lbEluZGV4IDwgbnVtYmVyT2ZDaGFu
bmVscygpKTsKKyAgICByZXR1cm4gbV9kLT5tX2F1ZGlvQnVzLT5jaGFubmVsKGNoYW5uZWxJbmRl
eCktPm11dGFibGVEYXRhKCk7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiAwOworI2VuZGlmCit9CisKK1Bhc3NSZWZQdHI8QXVkaW9CdXM+IFdlYkF1ZGlvQnVz
OjphdWRpb0J1cygpCit7CisjaWYgRU5BQkxFKFdFQl9BVURJTykKKyAgICByZXR1cm4gbV9kLT5t
X2F1ZGlvQnVzOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9zdXBwb3J0L1dlYkRhdGEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbml4L3N1cHBvcnQvV2ViRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjNi
YzYyN2FlNmM5OTg0ZjcyYjc5NzdkOGY1ZDJjOTE3ZTk4MDMxZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9zdXBwb3J0L1dlYkRhdGEuY3BwCkBAIC0wLDAg
KzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJEYXRhLmg+
CisKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJEYXRhUHJpdmF0ZSA6IHB1YmxpYyBT
aGFyZWRCdWZmZXIgeworfTsKKwordm9pZCBXZWJEYXRhOjpyZXNldCgpCit7CisgICAgaWYgKG1f
cHJpdmF0ZSkgeworICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7CisgICAgICAgIG1fcHJpdmF0
ZSA9IDA7CisgICAgfQorfQorCit2b2lkIFdlYkRhdGE6OmFzc2lnbihjb25zdCBXZWJEYXRhJiBv
dGhlcikKK3sKKyAgICBXZWJEYXRhUHJpdmF0ZSogcCA9IGNvbnN0X2Nhc3Q8V2ViRGF0YVByaXZh
dGUqPihvdGhlci5tX3ByaXZhdGUpOworICAgIGlmIChwKQorICAgICAgICBwLT5yZWYoKTsKKyAg
ICBhc3NpZ24ocCk7Cit9CisKK3ZvaWQgV2ViRGF0YTo6YXNzaWduKGNvbnN0IGNoYXIqIGRhdGEs
IHNpemVfdCBzaXplKQoreworICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJEYXRhUHJpdmF0ZSo+
KAorICAgICAgICBTaGFyZWRCdWZmZXI6OmNyZWF0ZShkYXRhLCBzaXplKS5sZWFrUmVmKCkpKTsK
K30KKworc2l6ZV90IFdlYkRhdGE6OnNpemUoKSBjb25zdAoreworICAgIGlmICghbV9wcml2YXRl
KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxXZWJEYXRhUHJpdmF0
ZSo+KG1fcHJpdmF0ZSktPnNpemUoKTsKK30KKworY29uc3QgY2hhciogV2ViRGF0YTo6ZGF0YSgp
IGNvbnN0Cit7CisgICAgaWYgKCFtX3ByaXZhdGUpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBjb25zdF9jYXN0PFdlYkRhdGFQcml2YXRlKj4obV9wcml2YXRlKS0+ZGF0YSgpOworfQor
CitXZWJEYXRhOjpXZWJEYXRhKGNvbnN0IFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiYgYnVmZmVy
KQorICAgIDogbV9wcml2YXRlKHN0YXRpY19jYXN0PFdlYkRhdGFQcml2YXRlKj4oYnVmZmVyLmxl
YWtSZWYoKSkpCit7Cit9CisKK1dlYkRhdGEmIFdlYkRhdGE6Om9wZXJhdG9yPShjb25zdCBQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4mIGJ1ZmZlcikKK3sKKyAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8
V2ViRGF0YVByaXZhdGUqPihidWZmZXIubGVha1JlZigpKSk7CisgICAgcmV0dXJuICp0aGlzOwor
fQorCitXZWJEYXRhOjpvcGVyYXRvciBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4oKSBjb25zdAor
eworICAgIHJldHVybiBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4oY29uc3RfY2FzdDxXZWJEYXRh
UHJpdmF0ZSo+KG1fcHJpdmF0ZSkpOworfQorCit2b2lkIFdlYkRhdGE6OmFzc2lnbihXZWJEYXRh
UHJpdmF0ZSogcCkKK3sKKyAgICAvLyBwIGlzIGFscmVhZHkgcmVmJ2QgZm9yIHVzIGJ5IHRoZSBj
YWxsZXIKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7Cisg
ICAgbV9wcml2YXRlID0gcDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211064</attachid>
            <date>2013-09-09 12:16:34 -0700</date>
            <delta_ts>2013-09-10 12:08:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118331-20130909161813.patch</filename>
            <type>text/plain</type>
            <size>92327</size>
            <attacher name="Hugo Parente Lima">hugo.lima</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU1MzYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBlY2I4NTg4N2RmMjc4
ZWEwOGU4ODM1ZjBlYjI4MTJkMmExZTE3MzNkLi45OGM0YTExMjQ0OWEyZWQzYWJjZDc4MmYxMjlk
NDhlMGE4NTQwNzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMy0wOS0wOSAg
SHVnbyBQYXJlbnRlIExpbWEgIDxodWdvLmxpbWFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBB
ZGRpbmcgTml4IGZpbGVzIGluIFNvdXJjZS9QbGF0Zm9ybSB0byB0cnVuaworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4MzMxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGZpbGVzIHBhcnQgb2YgTml4
IHB1YmxpYyBBUEkgdXNlZCB0byBpbXBsZW1lbnQKKyAgICAgICAgYmFja2VuZHMgZm9yIHNvbWUg
V2ViS2l0IHN1YnN5c3RlbXMgb24gQXBwbGljYXRpb24gc2lkZS4KKworICAgICAgICAqIG5peC9w
dWJsaWMvQXVkaW9CdXMuaDogQWRkZWQuCisgICAgICAgICogbml4L3B1YmxpYy9BdWRpb0Rldmlj
ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBuaXgvcHVibGljL0NhbnZhcy5oOiBBZGRlZC4KKyAgICAg
ICAgKiBuaXgvcHVibGljL0NvbG9yLmg6IEFkZGVkLgorICAgICAgICAqIG5peC9wdWJsaWMvQ29t
bW9uLmg6IEFkZGVkLgorICAgICAgICAqIG5peC9wdWJsaWMvRGF0YS5oOiBBZGRlZC4KKyAgICAg
ICAgKiBuaXgvcHVibGljL0ZGVEZyYW1lLmg6IEFkZGVkLgorICAgICAgICAqIG5peC9wdWJsaWMv
R2FtZXBhZC5oOiBBZGRlZC4KKyAgICAgICAgKiBuaXgvcHVibGljL0dhbWVwYWRzLmg6IEFkZGVk
LgorICAgICAgICAqIG5peC9wdWJsaWMvUGxhdGZvcm0uaDogQWRkZWQuCisgICAgICAgICogbml4
L3B1YmxpYy9SZWN0Lmg6IEFkZGVkLgorICAgICAgICAqIG5peC9wdWJsaWMvU2l6ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBuaXgvcHVibGljL1RoZW1lRW5naW5lLmg6IEFkZGVkLgorICAgICAgICAq
IG5peC9wdWJsaWMvVmVjdG9yLmg6IEFkZGVkLgorICAgICAgICAqIG5peC9zcmMvRGVmYXVsdFdl
YlRoZW1lRW5naW5lLmNwcDogQWRkZWQuCisgICAgICAgICogbml4L3NyYy9EZWZhdWx0V2ViVGhl
bWVFbmdpbmUuaDogQWRkZWQuCisgICAgICAgICogbml4L3NyYy9QbGF0Zm9ybS5jcHA6IEFkZGVk
LgorCiAyMDEzLTA2LTE0ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkIEdUSyBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjU0YWFlOTQ0
NGViOTdiNzY3MGFjYzBjYjRmNTdmOWZmMWRmZjVlMC4uODk0Nzk2YzFmMTg1MDY3MWYxYjVhYTk0
MTE0MTAyZmYzMGM5Y2EyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEzLTA5LTA5
ICBIdWdvIFBhcmVudGUgTGltYSAgPGh1Z28ubGltYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAg
IEFkZGluZyBOaXggZmlsZXMgaW4gU291cmNlL1BsYXRmb3JtIHRvIHRydW5rCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTgzMzEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgTml4IFdlYkF1ZGlvIGlt
cGxlbWVudGF0aW9uIHRoYXQganVzdCBmb3J3YXJkIHNvbWUgY2FsbHMgdG8gb3VyIEFQSS4KKyAg
ICAgICAgVGhpcyBwYXRjaCBpcyBwYXJ0IG9mIHRoZSB1cHN0cmVhbSBwcm9jZXNzLCB0ZXN0cyB3
aWxsIGJlIGxhbmRlZCBieSBvdGhlciBwYXRjaGVzLgorCisgICAgICAgICogcGxhdGZvcm0vYXVk
aW8vbml4L0F1ZGlvQnVzTml4LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8v
bml4L0F1ZGlvRGVzdGluYXRpb25OaXguY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9h
dWRpby9uaXgvQXVkaW9EZXN0aW5hdGlvbk5peC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9hdWRpby9uaXgvRkZURnJhbWVOaXguY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9u
aXgvc3VwcG9ydC9BdWRpb0J1c05peC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25p
eC9zdXBwb3J0L0RhdGEuY3BwOiBBZGRlZC4KKwogMjAxMy0wOS0wOSAgTHVjaWFubyBXb2xmICA8
bHVjaWFuby53b2xmQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgTml4IHVwc3RyZWFtaW5nIC0g
QWRkaW5nIHN0dWJzIGFuZCBOaXggc3BlY2lmaWMgcGxhdGZvcm0gZmlsZXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0F1ZGlvQnVzLmggYi9Tb3VyY2UvUGxhdGZvcm0v
bml4L3B1YmxpYy9BdWRpb0J1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhYmIxYmYwZjE0YzBjNTQ0ODM1NDYy
OWJjOWY2MzIyZGM5OThkNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4
L3B1YmxpYy9BdWRpb0J1cy5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IE5peF9BdWRpb0J1c19oCisjZGVmaW5lIE5peF9BdWRpb0J1c19oCisKKyNpbmNsdWRlICJDb21t
b24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBBdWRpb0J1czsgfQorCisjaWZkZWYg
QlVJTERJTkdfTklYX18KK25hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xh
c3MgUGFzc1JlZlB0cjsgfQorI2VuZGlmCisKK25hbWVzcGFjZSBOaXggeworCitjbGFzcyBBdWRp
b0J1c1ByaXZhdGU7CisKKy8vIEEgY29udGFpbmVyIGZvciBtdWx0aS1jaGFubmVsIGxpbmVhciBQ
Q00gYXVkaW8gZGF0YS4KKy8vCisvLyBXQVJOSU5HOiBJdCBpcyBub3Qgc2FmZSB0byBwYXNzIGEg
QXVkaW9CdXMgYWNyb3NzIHRocmVhZHMhISEKKy8vCitjbGFzcyBBdWRpb0J1cyB7CitwdWJsaWM6
CisgICAgQXVkaW9CdXMoKSA6IG1fZCgwKSB7IH0KKyAgICB+QXVkaW9CdXMoKSB7IHJlc2V0KCk7
IH0KKworICAgIC8vIGluaXRpYWxpemUoKSBhbGxvY2F0ZXMgbWVtb3J5IG9mIHRoZSBnaXZlbiBs
ZW5ndGggZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YgY2hhbm5lbHMuCisgICAgTklYX0VYUE9SVCB2
b2lkIGluaXRpYWxpemUodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IGxlbmd0aCwg
ZG91YmxlIHNhbXBsZVJhdGUpOworCisgICAgLy8gcmVzaXplU21hbGxlcigpIGNhbiBvbmx5IGJl
IGNhbGxlZCBhZnRlciBpbml0aWFsaXplKCkgd2l0aCBhIG5ldyBsZW5ndGggPD0gdGhlIGluaXRp
YWxpemF0aW9uIGxlbmd0aC4KKyAgICAvLyBUaGUgZGF0YSBzdG9yZWQgaW4gdGhlIGJ1cyB3aWxs
IHJlbWFpbiB1bmRpc3R1cmJlZC4KKyAgICBOSVhfRVhQT1JUIHZvaWQgcmVzaXplU21hbGxlcihz
aXplX3QgbmV3TGVuZ3RoKTsKKworICAgIC8vIHJlc2V0KCkgcmVsZWFzZXMgdGhlIG1lbW9yeSBh
bGxvY2F0ZWQgZnJvbSBpbml0aWFsaXplKCkuCisgICAgTklYX0VYUE9SVCB2b2lkIHJlc2V0KCk7
CisKKyAgICBOSVhfRVhQT1JUIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMoKSBjb25zdDsKKyAg
ICBOSVhfRVhQT1JUIHNpemVfdCBsZW5ndGgoKSBjb25zdDsKKyAgICBOSVhfRVhQT1JUIGRvdWJs
ZSBzYW1wbGVSYXRlKCkgY29uc3Q7CisKKyAgICBOSVhfRVhQT1JUIGZsb2F0KiBjaGFubmVsRGF0
YSh1bnNpZ25lZCBjaGFubmVsSW5kZXgpOworCisjaWZkZWYgQlVJTERJTkdfTklYX18KKyAgICBX
VEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6QXVkaW9CdXM+IGF1ZGlvQnVzKCk7CisjZW5kaWYKKwor
cHJpdmF0ZToKKyAgICAvLyBEaXNhbGxvdyBjb3B5IGFuZCBhc3NpZ24uCisgICAgQXVkaW9CdXMo
Y29uc3QgQXVkaW9CdXMmKTsKKyAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBBdWRpb0J1cyYpOwor
CisgICAgQXVkaW9CdXNQcml2YXRlKiBtX2Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBOaXgKKwor
I2VuZGlmIC8vIE5peF9BdWRpb0J1c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4
L3B1YmxpYy9BdWRpb0RldmljZS5oIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvQXVkaW9E
ZXZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mYmZiOGRlZTE4Y2U0Y2E5ZWUxZTgzYjIxMmVhNmY2YjkzMTlm
ZjNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvQXVkaW9E
ZXZpY2UuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOaXhfQXVkaW9EZXZpY2VfaAorI2Rl
ZmluZSBOaXhfQXVkaW9EZXZpY2VfaAorCisjaW5jbHVkZSAiVmVjdG9yLmgiCisKK25hbWVzcGFj
ZSBOaXggeworCisvLyBBYnN0cmFjdCBpbnRlcmZhY2UgdG8gdGhlIENocm9taXVtIGF1ZGlvIHN5
c3RlbS4KKworY2xhc3MgQXVkaW9EZXZpY2UgeworcHVibGljOgorICAgIGNsYXNzIFJlbmRlckNh
bGxiYWNrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgdm9pZCByZW5kZXIoY29uc3Qg
VmVjdG9yPGZsb2F0Kj4mIC8qc291cmNlRGF0YSovLCBjb25zdCBWZWN0b3I8ZmxvYXQqPiYgLypk
ZXN0aW5hdGlvbkRhdGEqLywgc2l6ZV90IC8qbnVtYmVyT2ZGcmFtZXMqLykgeyB9CisKKyAgICBw
cm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgflJlbmRlckNhbGxiYWNrKCkgeyB9CisgICAgfTsK
KworICAgIHZpcnR1YWwgfkF1ZGlvRGV2aWNlKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc3Rh
cnQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7CisgICAgdmlydHVhbCBkb3Vi
bGUgc2FtcGxlUmF0ZSgpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIE5peAorCisjZW5kaWYg
Ly8gV2ViQXVkaW9EZXZpY2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJs
aWMvQ2FudmFzLmggYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9DYW52YXMuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zOTYzMjQ2MmI1MjQ3Y2RiN2FjNThmZGVhNzVkMjMzYTM5ZDVhNDI3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvQ2FudmFzLmgKQEAgLTAsMCArMSwz
NSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOaXhf
Q2FudmFzX2gKKyNkZWZpbmUgTml4X0NhbnZhc19oCisKKyNpbmNsdWRlIDxjYWlyby9jYWlyby5o
PgorCituYW1lc3BhY2UgTml4IHsKK3R5cGVkZWYgY2Fpcm9fdCBDYW52YXM7Cit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvQ29sb3IuaCBiL1NvdXJj
ZS9QbGF0Zm9ybS9uaXgvcHVibGljL0NvbG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDJkYTc4OGFlZDEyYjEy
Mzk1NjNjZWNmNzhiMjZlNTE1NzNmNjIwNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0
Zm9ybS9uaXgvcHVibGljL0NvbG9yLmgKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqICBDb3B5cmln
aHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOaXhfQ29sb3JfaAorI2RlZmluZSBOaXhf
Q29sb3JfaAorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgTml4IHsKKwordHlw
ZWRlZiB1bnNpZ25lZCBSR0JBMzI7IC8vIFJHQkEgcXVhZHJ1cGxldAorCitzdHJ1Y3QgQ29sb3Ig
eworICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgYmxhY2sgPSAweEZGMDAwMDAwOworICAgIHN0YXRp
YyBjb25zdCBSR0JBMzIgd2hpdGUgPSAweEZGRkZGRkZGOworICAgIHN0YXRpYyBjb25zdCBSR0JB
MzIgZGFya0dyYXkgPSAweEZGODA4MDgwOworICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgZ3JheSA9
IDB4RkZBMEEwQTA7CisgICAgc3RhdGljIGNvbnN0IFJHQkEzMiBsaWdodEdyYXkgPSAweEZGQzBD
MEMwOworICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgdHJhbnNwYXJlbnQgPSAweDAwMDAwMDAwOwor
CisgICAgUkdCQTMyIHJnYmE7CisKKyAgICBDb2xvcigpCisgICAgICAgIDogcmdiYShDb2xvcjo6
YmxhY2spCisgICAgeworICAgIH0KKworICAgIENvbG9yKFJHQkEzMiByZ2JhKQorICAgICAgICA6
IHJnYmEocmdiYSkKKyAgICB7CisgICAgfQorCisgICAgQ29sb3IoaW50IHIsIGludCBnLCBpbnQg
YiwgaW50IGEgPSAyNTUpCisgICAgICAgIDogcmdiYShzdGQ6Om1heCgwLCBzdGQ6Om1pbihhLCAy
NTUpKSA8PCAyNCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKHIsIDI1NSkpIDw8IDE2IHwgc3RkOjpt
YXgoMCwgc3RkOjptaW4oZywgMjU1KSkgPDwgOCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGIsIDI1
NSkpKQorICAgIHsKKyAgICB9CisKKyAgICBvcGVyYXRvciBSR0JBMzIoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIHJnYmE7CisgICAgfQorCisgICAgdW5zaWduZWQgY2hhciByKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAocmdiYSAmIDB4MDBGRjAwMDApID4+IDE2OworICAg
IH0KKworICAgIHVuc2lnbmVkIGNoYXIgZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
KHJnYmEgJiAweDAwMDBGRjAwKSA+PiA4OworICAgIH0KKworICAgIHVuc2lnbmVkIGNoYXIgYigp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKHJnYmEgJiAweDAwMDAwMEZGKTsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCBjaGFyIGEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChy
Z2JhICYgMHhGRjAwMDAwMCkgPj4gMjQ7CisgICAgfQorfTsKKworaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCit7CisgICAgcmV0dXJuIGEucmdi
YSA9PSBiLnJnYmE7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3ImIGEs
IGNvbnN0IENvbG9yJiBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIE5peAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVi
bGljL0NvbW1vbi5oIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvQ29tbW9uLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZDQ2NWNlMWM1NjRhN2M2NmUzOGMwNWUzZjkyNTk5NzVjN2NhMmE5MwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0NvbW1vbi5oCkBAIC0wLDAgKzEs
NDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIE5peF9Db21tb25faAorI2RlZmluZSBOaXhfQ29tbW9uX2gKKworLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIEV4cG9ydGVkIHN5bWJvbHMgbmVlZCB0byBiZSBhbm5vdGF0
ZWQgd2l0aCBOSVhfRVhQT1JUCisjZGVmaW5lIE5JWF9FWFBPUlQgX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSgiZGVmYXVsdCIpKSkKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEJhc2lj
IHR5cGVzCisjaW5jbHVkZSA8c3RkZGVmLmg+IC8vIEZvciBzaXplX3QKKworbmFtZXNwYWNlIE5p
eCB7CisvLyBVVEYtMTYgY2hhcmFjdGVyIHR5cGUKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgVUNo
YXI7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMv
RGF0YS5oIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvRGF0YS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMx
ZDcyZTg2NDM4NjI4NWRlODNiNjg5MDgyNThiZjZmMWQzMGFiNmEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9EYXRhLmgKQEAgLTAsMCArMSwxMDkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIE5peF9EYXRhX2gKKyNkZWZpbmUgTml4X0RhdGFfaAorCisjaW5jbHVkZSAiQ29tbW9uLmgi
CisKKyNpZmRlZiBCVUlMRElOR19OSVhfXworbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBTaGFy
ZWRCdWZmZXI7IH0KK25hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3Mg
UGFzc1JlZlB0cjsgfQorI2VuZGlmCisKK25hbWVzcGFjZSBOaXggeworCisvLyBBIGNvbnRhaW5l
ciBmb3IgcmF3IGJ5dGVzLiBJdCBpcyBpbmV4cGVuc2l2ZSB0byBjb3B5IGEgTml4OjpEYXRhIG9i
amVjdC4KKy8vCisvLyBXQVJOSU5HOiBJdCBpcyBub3Qgc2FmZSB0byBwYXNzIGEgTml4OjpEYXRh
IGFjcm9zcyB0aHJlYWRzISEhCisvLworY2xhc3MgRGF0YSB7CitwdWJsaWM6CisgICAgfkRhdGEo
KSB7IHJlc2V0KCk7IH0KKworICAgIERhdGEoKSA6IG1fcHJpdmF0ZSgwKSB7IH0KKworICAgIERh
dGEoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpIDogbV9wcml2YXRlKDApCisgICAgewor
ICAgICAgICBhc3NpZ24oZGF0YSwgc2l6ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGludCBO
PgorICAgIERhdGEoY29uc3QgY2hhciAoJmRhdGEpW05dKSA6IG1fcHJpdmF0ZSgwKQorICAgIHsK
KyAgICAgICAgYXNzaWduKGRhdGEsIE4gLSAxKTsKKyAgICB9CisKKyAgICBEYXRhKGNvbnN0IERh
dGEmIGQpIDogbV9wcml2YXRlKDApIHsgYXNzaWduKGQpOyB9CisKKyAgICBEYXRhJiBvcGVyYXRv
cj0oY29uc3QgRGF0YSYgZCkKKyAgICB7CisgICAgICAgIGFzc2lnbihkKTsKKyAgICAgICAgcmV0
dXJuICp0aGlzOworICAgIH0KKworICAgIE5JWF9FWFBPUlQgdm9pZCByZXNldCgpOworICAgIE5J
WF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgRGF0YSYpOworICAgIE5JWF9FWFBPUlQgdm9pZCBh
c3NpZ24oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90KTsKKworICAgIE5JWF9FWFBPUlQgc2l6ZV90
IHNpemUoKSBjb25zdDsKKyAgICBOSVhfRVhQT1JUIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdDsK
KworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7IH0KKyAgICBib29s
IGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7IH0KKworI2lmZGVmIEJVSUxESU5H
X05JWF9fCisgICAgRGF0YShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVm
ZmVyPiYpOworICAgIERhdGEmIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29y
ZTo6U2hhcmVkQnVmZmVyPiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI+KCkgY29uc3Q7CisjZWxzZQorICAgIHRlbXBsYXRlIDxjbGFzcyBDPgor
ICAgIERhdGEoY29uc3QgQyYgYykgOiBtX3ByaXZhdGUoMCkKKyAgICB7CisgICAgICAgIGFzc2ln
bihjLmRhdGEoKSwgYy5zaXplKCkpOworICAgIH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBDPgor
ICAgIERhdGEmIG9wZXJhdG9yPShjb25zdCBDJiBjKQorICAgIHsKKyAgICAgICAgYXNzaWduKGMu
ZGF0YSgpLCBjLnNpemUoKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisjZW5kaWYK
KworcHJpdmF0ZToKKyAgICBjbGFzcyBEYXRhUHJpdmF0ZTsKKyAgICB2b2lkIGFzc2lnbihEYXRh
UHJpdmF0ZSopOworICAgIERhdGFQcml2YXRlKiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBOaXgKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1Ymxp
Yy9GRlRGcmFtZS5oIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvRkZURnJhbWUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42OGRiNWIyNTM5MzIwNDljODUzODRhZjRiNDllMWZjNTg1NWZlZTY5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvRkZURnJhbWUuaApAQCAtMCww
ICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTMgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgTml4X0ZGVEZy
YW1lX2gKKyNkZWZpbmUgTml4X0ZGVEZyYW1lX2gKKworbmFtZXNwYWNlIE5peCB7CisKK2NsYXNz
IEF1ZGlvQnVzOworCitjbGFzcyBGRlRGcmFtZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+RkZU
RnJhbWUoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBkb0ZGVChjb25zdCBmbG9hdCopIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBkb0ludmVyc2VGRlQoZmxvYXQqKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgbXVsdGlwbHkoY29uc3QgRkZURnJhbWUmKSB7IH0KKworICAgIHZpcnR1YWwgdW5zaWduZWQg
ZnJlcXVlbmN5RG9tYWluU2FtcGxlQ291bnQoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgLy8g
QWZ0ZXIgbXVsdGlwbGljYXRpb24gYW5kIHRyYW5zZm9ybSBvcGVyYXRpb25zLCB0aGUgZGF0YSBp
cyBzY2FsZWQKKyAgICAvLyB0byB0YWtlIGluIGFjY291bnQgdGhlIHNjYWxlIHVzZWQgaW50ZXJu
YWxseSBpbiBXZWJLaXQsIG9yaWdpbmFsbHkKKyAgICAvLyBmcm9tIE1hYydzIHZlY0xpYi4KKyAg
ICAvLyBBZnRlciBtdWx0aXBsaWNhdGlvbjogUGxhbmFyIGRhdGEgaXMgc2NhbGVkIGJ5IDAuNS4K
KyAgICAvLyBBZnRlciBkaXJlY3QgdHJhbnNmb3JtOiBQbGFuYXIgZGF0YSBpcyBzY2FsZWQgYnkg
Mi4wLgorICAgIC8vIEFmdGVyIGludmVyc2UgdHJhbnNmb3JtOiBUaW1lIGRvbWFpbiBkYXRhIGlz
IHNjYWxlZCBieSAxLjAvKDIqIEZGVCBzaXplKS4KKyAgICB2aXJ0dWFsIGZsb2F0KiByZWFsRGF0
YSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGZsb2F0KiBpbWFnRGF0YSgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIE5peAorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0dhbWVwYWQuaCBiL1NvdXJjZS9Q
bGF0Zm9ybS9uaXgvcHVibGljL0dhbWVwYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jY2MzNTczNWEyNGZhMzE0
ZTE3ODZhNTllOTQxMjYyNWMxODI0MzVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRm
b3JtL25peC9wdWJsaWMvR2FtZXBhZC5oCkBAIC0wLDAgKzEsNzEgQEAKKy8vIENvcHlyaWdodCAo
QykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorLy8KKy8vIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisv
LyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorLy8gICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vCisv
LyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAorLy8gQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisvLyBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQorLy8gQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKy8vIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisvLyBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgorLy8gU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKy8vIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorLy8gTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWQorLy8gT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisvLyBEQU1BR0UuCisKKyNpZm5kZWYg
Tml4X0dhbWVwYWRfaAorI2RlZmluZSBOaXhfR2FtZXBhZF9oCisKKyNpbmNsdWRlICJDb21tb24u
aCIKKworbmFtZXNwYWNlIE5peCB7CisKK2NsYXNzIEdhbWVwYWQgeworcHVibGljOgorICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgaWRMZW5ndGhDYXAgPSAxMjg7CisgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBheGVzTGVuZ3RoQ2FwID0gMTY7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBidXR0b25z
TGVuZ3RoQ2FwID0gMzI7CisKKyAgICBHYW1lcGFkKCkKKyAgICAgICAgOiBjb25uZWN0ZWQoZmFs
c2UpCisgICAgICAgICwgdGltZXN0YW1wKDApCisgICAgICAgICwgYXhlc0xlbmd0aCgwKQorICAg
ICAgICAsIGJ1dHRvbnNMZW5ndGgoMCkKKyAgICB7CisgICAgICAgIGlkWzBdID0gMDsKKyAgICB9
CisKKyAgICAvLyBJcyB0aGVyZSBhIGdhbWVwYWQgY29ubmVjdGVkIGF0IHRoaXMgaW5kZXg/Cisg
ICAgYm9vbCBjb25uZWN0ZWQ7CisKKyAgICAvLyBEZXZpY2UgaWRlbnRpZmllciAoYmFzZWQgb24g
bWFudWZhY3R1cmVyLCBtb2RlbCwgZXRjLikuCisgICAgVUNoYXIgaWRbaWRMZW5ndGhDYXBdOwor
CisgICAgLy8gTW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIHZhbHVlIHJlZmVycmluZyB0byB3aGVu
IHRoZSBkYXRhIHdlcmUgbGFzdAorICAgIC8vIHVwZGF0ZWQuCisgICAgdW5zaWduZWQgbG9uZyBs
b25nIHRpbWVzdGFtcDsKKworICAgIC8vIE51bWJlciBvZiB2YWxpZCBlbnRyaWVzIGluIHRoZSBh
eGVzIGFycmF5LgorICAgIHVuc2lnbmVkIGF4ZXNMZW5ndGg7CisKKyAgICAvLyBOb3JtYWxpemVk
IHZhbHVlcyByZXByZXNlbnRpbmcgYXhlcywgaW4gdGhlIHJhbmdlIFstMS4uMV0uCisgICAgZmxv
YXQgYXhlc1theGVzTGVuZ3RoQ2FwXTsKKworICAgIC8vIE51bWJlciBvZiB2YWxpZCBlbnRyaWVz
IGluIHRoZSBidXR0b25zIGFycmF5LgorICAgIHVuc2lnbmVkIGJ1dHRvbnNMZW5ndGg7CisKKyAg
ICAvLyBOb3JtYWxpemVkIHZhbHVlcyByZXByZXNlbnRpbmcgYnV0dG9ucywgaW4gdGhlIHJhbmdl
IFswLi4xXS4KKyAgICBmbG9hdCBidXR0b25zW2J1dHRvbnNMZW5ndGhDYXBdOworfTsKKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0dhbWVwYWRz
LmggYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9HYW1lcGFkcy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI3
NjkwMTI1MWVmNDBmNDViMWE3NDUyNGI0MTMwYTcyMmRiNzlmMmYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9HYW1lcGFkcy5oCkBAIC0wLDAgKzEsNDcgQEAK
Ky8vIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorLy8KKy8vIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisvLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisvLyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorLy8gICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorLy8gQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisvLyBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRQorLy8gQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKy8vIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCisvLyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorLy8gU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKy8vIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVAorLy8gTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorLy8gT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisvLyBEQU1B
R0UuCisKKyNpZm5kZWYgTml4X0dhbWVwYWRzX2gKKyNkZWZpbmUgTml4X0dhbWVwYWRzX2gKKwor
I2luY2x1ZGUgIkdhbWVwYWQuaCIKKworbmFtZXNwYWNlIE5peCB7CisKK2NsYXNzIEdhbWVwYWRz
IHsKK3B1YmxpYzoKKyAgICBHYW1lcGFkcygpCisgICAgICAgIDogbGVuZ3RoKDApIHsgfQorCisg
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBpdGVtc0xlbmd0aENhcCA9IDQ7CisKKyAgICAvLyBOdW1i
ZXIgb2YgdmFsaWQgZW50cmllcyBpbiB0aGUgaXRlbXMgYXJyYXkuCisgICAgdW5zaWduZWQgbGVu
Z3RoOworCisgICAgLy8gR2FtZXBhZCBkYXRhIGZvciBOIHNlcGFyYXRlIGdhbWVwYWQgZGV2aWNl
cy4KKyAgICBHYW1lcGFkIGl0ZW1zW2l0ZW1zTGVuZ3RoQ2FwXTsKK307CisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9QbGF0Zm9ybS5oIGIvU291
cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvUGxhdGZvcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZjliNGYzZWNi
YTZhZWEyNTVkYWNhNDJmYWQxYmM2NjQ2OTNlZmNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1BsYXRmb3JtL25peC9wdWJsaWMvUGxhdGZvcm0uaApAQCAtMCwwICsxLDg3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBO
aXhfUGxhdGZvcm1faAorI2RlZmluZSBOaXhfUGxhdGZvcm1faAorCisjaW5jbHVkZSAiQXVkaW9E
ZXZpY2UuaCIKKyNpbmNsdWRlICJEYXRhLmgiCisjaW5jbHVkZSAiR2FtZXBhZHMuaCIKKworbmFt
ZXNwYWNlIE5peCB7CisKK2NsYXNzIEF1ZGlvQnVzOworY2xhc3MgRkZURnJhbWU7CitjbGFzcyBU
aGVtZUVuZ2luZTsKKworY2xhc3MgTklYX0VYUE9SVCBQbGF0Zm9ybSB7CitwdWJsaWM6CisKKyAg
ICBOSVhfRVhQT1JUIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoUGxhdGZvcm0qKTsKKyAgICBOSVhf
RVhQT1JUIHN0YXRpYyB2b2lkIHNodXRkb3duKCk7CisgICAgTklYX0VYUE9SVCBzdGF0aWMgUGxh
dGZvcm0qIGN1cnJlbnQoKTsKKworICAgIC8vIEF1ZGlvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgdmlydHVhbCBmbG9h
dCBhdWRpb0hhcmR3YXJlU2FtcGxlUmF0ZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHNp
emVfdCBhdWRpb0hhcmR3YXJlQnVmZmVyU2l6ZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIGF1ZGlvSGFyZHdhcmVPdXRwdXRDaGFubmVscygpIHsgcmV0dXJuIDA7IH0KKwor
ICAgIC8vIENyZWF0ZXMgYSBkZXZpY2UgZm9yIGF1ZGlvIEkvTy4KKyAgICAvLyBQYXNzIGluIChu
dW1iZXJPZklucHV0Q2hhbm5lbHMgPiAwKSBpZiBsaXZlL2xvY2FsIGF1ZGlvIGlucHV0IGlzIGRl
c2lyZWQuCisgICAgdmlydHVhbCBBdWRpb0RldmljZSogY3JlYXRlQXVkaW9EZXZpY2Uoc2l6ZV90
IC8qYnVmZmVyU2l6ZSovLCB1bnNpZ25lZCAvKm51bWJlck9mSW5wdXRDaGFubmVscyovLCB1bnNp
Z25lZCAvKm51bWJlck9mQ2hhbm5lbHMqLywgZG91YmxlIC8qc2FtcGxlUmF0ZSovLCBBdWRpb0Rl
dmljZTo6UmVuZGVyQ2FsbGJhY2sqKSB7IHJldHVybiAwOyB9CisKKworICAgIC8vIEdhbWVwYWQg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorICAgIHZpcnR1YWwgdm9pZCBzYW1wbGVHYW1lcGFkcyhHYW1lcGFkcyYgaW50bykgeyBp
bnRvLmxlbmd0aCA9IDA7IH0KKworCisgICAgLy8gRkZURnJhbWUKKyAgICB2aXJ0dWFsIEZGVEZy
YW1lKiBjcmVhdGVGRlRGcmFtZSh1bnNpZ25lZCAvKmZmdHNpemUqLykgeyByZXR1cm4gMDsgfQor
ICAgIHZpcnR1YWwgRkZURnJhbWUqIGNyZWF0ZUZGVEZyYW1lKGNvbnN0IEZGVEZyYW1lKiAvKmZy
YW1lKi8pIHsgcmV0dXJuIDA7IH0KKworICAgIC8vIFJlc291cmNlcyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFJldHVy
bnMgYSBibG9iIG9mIGRhdGEgY29ycmVzcG9uZGluZyB0byB0aGUgbmFtZWQgcmVzb3VyY2UuCisg
ICAgdmlydHVhbCBEYXRhIGxvYWRSZXNvdXJjZShjb25zdCBjaGFyKiAvKm5hbWUqLykgeyByZXR1
cm4gRGF0YSgpOyB9CisKKyAgICAvLyBEZWNvZGVzIHRoZSBpbi1tZW1vcnkgYXVkaW8gZmlsZSBk
YXRhIGFuZCByZXR1cm5zIHRoZSBsaW5lYXIgUENNIGF1ZGlvIGRhdGEgaW4gdGhlIGRlc3RpbmF0
aW9uQnVzLgorICAgIC8vIEEgc2FtcGxlLXJhdGUgY29udmVyc2lvbiB0byBzYW1wbGVSYXRlIHdp
bGwgb2NjdXIgaWYgdGhlIGZpbGUgZGF0YSBpcyBhdCBhIGRpZmZlcmVudCBzYW1wbGUtcmF0ZS4K
KyAgICAvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4KKyAgICB2aXJ0dWFsIGJvb2wgbG9hZEF1
ZGlvUmVzb3VyY2UoQXVkaW9CdXMqIC8qZGVzdGluYXRpb25CdXMqLywgY29uc3QgY2hhciogLyph
dWRpb0ZpbGVEYXRhKi8sIHNpemVfdCAvKmRhdGFTaXplKi8sIGRvdWJsZSAvKnNhbXBsZVJhdGUq
LykgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIC8vIFRoZW1lIGVuZ2luZQorICAgIHZpcnR1YWwg
VGhlbWVFbmdpbmUqIHRoZW1lRW5naW5lKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5Q
bGF0Zm9ybSgpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgTml4CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvUmVjdC5oIGIvU291cmNlL1BsYXRmb3Jt
L25peC9wdWJsaWMvUmVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4NGE1MTNkZDVlMzI3YWMwYjEyMDllZWNk
MjczZjAwNWI1ZjgzYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1
YmxpYy9SZWN0LmgKQEAgLTAsMCArMSw0NiBAQAorI2lmbmRlZiBOaXhfUmVjdF9oCisjZGVmaW5l
IE5peF9SZWN0X2gKKworI2lmZGVmIEJVSUxESU5HX05JWF9fCisjaW5jbHVkZSAiSW50UmVjdC5o
IgorI2VuZGlmCisKK25hbWVzcGFjZSBOaXggeworCitjbGFzcyBSZWN0IHsKK3B1YmxpYzoKKyAg
ICBpbnQgeDsKKyAgICBpbnQgeTsKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IGhlaWdodDsKKwor
ICAgIFJlY3QoY29uc3QgUmVjdCYgcikKKyAgICAgICAgOiB4KHIueCkKKyAgICAgICAgLCB5KHIu
eSkKKyAgICAgICAgLCB3aWR0aChyLndpZHRoKQorICAgICAgICAsIGhlaWdodChyLmhlaWdodCkK
KyAgICB7CisgICAgfQorCisjaWZkZWYgQlVJTERJTkdfTklYX18KKyAgICBSZWN0KGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHIpCisgICAgICAgIDogeChyLngoKSkKKyAgICAgICAgLCB5KHIueSgp
KQorICAgICAgICAsIHdpZHRoKHIud2lkdGgoKSkKKyAgICAgICAgLCBoZWlnaHQoci5oZWlnaHQo
KSkKKyAgICB7CisgICAgfQorCisgICAgUmVjdCYgb3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHIpCisgICAgeworICAgICAgICB4ID0gci54KCk7CisgICAgICAgIHkgPSByLnkoKTsK
KyAgICAgICAgd2lkdGggPSByLndpZHRoKCk7CisgICAgICAgIGhlaWdodCA9IHIuaGVpZ2h0KCk7
CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisjZW5kaWYKK307CisKK30KKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvU2l6ZS5oIGIvU291cmNlL1Bs
YXRmb3JtL25peC9wdWJsaWMvU2l6ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM4ZTI1ZDM2NmM3MjM2MDQ5NTM2
MDVmMWQyN2EwYTJjZWNhYzk2YmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0v
bml4L3B1YmxpYy9TaXplLmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTml4X1NpemVfaAorI2Rl
ZmluZSBOaXhfU2l6ZV9oCisKKyNpZmRlZiBCVUlMRElOR19OSVhfXworI2luY2x1ZGUgIkludFNp
emUuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgTml4IHsKKworc3RydWN0IFNpemUgeworICAgIGlu
dCB3aWR0aDsKKyAgICBpbnQgaGVpZ2h0OworCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gd2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMDsgfQorCisgICAgU2l6ZSgpCisgICAgICAg
IDogd2lkdGgoMCkKKyAgICAgICAgLCBoZWlnaHQoMCkKKyAgICB7CisgICAgfQorCisgICAgU2l6
ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCisgICAgICAgIDogd2lkdGgod2lkdGgpCisgICAgICAg
ICwgaGVpZ2h0KGhlaWdodCkKKyAgICB7CisgICAgfQorCisjaWZkZWYgQlVJTERJTkdfTklYX18K
KyAgICBTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHMpCisgICAgICAgIDogd2lkdGgocy53
aWR0aCgpKQorICAgICAgICAsIGhlaWdodChzLmhlaWdodCgpKQorICAgIHsKKyAgICB9CisKKyAg
ICBTaXplJiBvcGVyYXRvcj0oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcykKKyAgICB7CisgICAg
ICAgIHdpZHRoID0gcy53aWR0aCgpOworICAgICAgICBoZWlnaHQgPSBzLmhlaWdodCgpOworICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgb3BlcmF0b3IgV2ViQ29yZTo6SW50U2l6
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV2ViQ29yZTo6SW50U2l6ZSh3aWR0aCwg
aGVpZ2h0KTsKKyAgICB9CisjZW5kaWYKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3QgU2l6ZSYgYSwgY29uc3QgU2l6ZSYgYikKK3sKKyAgICByZXR1cm4gYS53aWR0aCA9PSBiLndp
ZHRoICYmIGEuaGVpZ2h0ID09IGIuaGVpZ2h0OworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFNpemUmIGEsIGNvbnN0IFNpemUmIGIpCit7CisgICAgcmV0dXJuICEoYSA9PSBiKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgTml4CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1Bs
YXRmb3JtL25peC9wdWJsaWMvVGhlbWVFbmdpbmUuaCBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVi
bGljL1RoZW1lRW5naW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGI0NjIzZWVjMGJmOWViNTkzNTQxYTM0YmVk
ODg0ZGI3ZjY0MmY2MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVi
bGljL1RoZW1lRW5naW5lLmgKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5peF9UaGVtZUVuZ2lu
ZV9oCisjZGVmaW5lIE5peF9UaGVtZUVuZ2luZV9oCisKKyNpbmNsdWRlICJDYW52YXMuaCIKKyNp
bmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIlNpemUuaCIKKworbmFtZXNwYWNlIE5peCB7CisK
K2NsYXNzIFJlY3Q7CisKK2NsYXNzIFRoZW1lRW5naW5lIHsKK3B1YmxpYzoKKyAgICAvLyBUaGUg
Y3VycmVudCBzdGF0ZSBvZiB0aGUgYXNzb2NpYXRlZCBQYXJ0LgorICAgIGVudW0gU3RhdGUgewor
ICAgICAgICBTdGF0ZURpc2FibGVkLAorICAgICAgICBTdGF0ZUhvdmVyLAorICAgICAgICBTdGF0
ZU5vcm1hbCwKKyAgICAgICAgU3RhdGVQcmVzc2VkCisgICAgfTsKKworICAgIC8vIEV4dHJhIHBh
cmFtZXRlcnMgZm9yIGRyYXdpbmcgdGhlIFBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVHJhY2sgYW5k
CisgICAgLy8gUGFydFNjcm9sbGJhclZlcnRpY2FsVHJhY2suCisgICAgc3RydWN0IFNjcm9sbGJh
clRyYWNrRXh0cmFQYXJhbXMgeworICAgICAgICAvLyBUaGUgYm91bmRzIG9mIHRoZSBlbnRpcmUg
dHJhY2ssIGFzIG9wcG9zZWQgdG8gdGhlIHBhcnQgYmVpbmcgcGFpbnRlZC4KKyAgICAgICAgaW50
IHRyYWNrWDsKKyAgICAgICAgaW50IHRyYWNrWTsKKyAgICAgICAgaW50IHRyYWNrV2lkdGg7Cisg
ICAgICAgIGludCB0cmFja0hlaWdodDsKKyAgICB9OworCisgICAgLy8gRXh0cmEgcGFyYW1ldGVy
cyBmb3IgUGFydENoZWNrYm94LCBQYXJ0UHVzaEJ1dHRvbiBhbmQgUGFydFJhZGlvLgorICAgIHN0
cnVjdCBCdXR0b25FeHRyYVBhcmFtcyB7CisgICAgICAgIGJvb2wgY2hlY2tlZDsKKyAgICAgICAg
Ym9vbCBpbmRldGVybWluYXRlOyAvLyBXaGV0aGVyIHRoZSBidXR0b24gc3RhdGUgaXMgaW5kZXRl
cm1pbmF0ZS4KKyAgICAgICAgYm9vbCBpc0RlZmF1bHQ7IC8vIFdoZXRoZXIgdGhlIGJ1dHRvbiBp
cyBkZWZhdWx0IGJ1dHRvbi4KKyAgICAgICAgYm9vbCBoYXNCb3JkZXI7CisgICAgICAgIENvbG9y
IGJhY2tncm91bmRDb2xvcjsKKyAgICB9OworCisgICAgLy8gRXh0cmEgcGFyYW1ldGVycyBmb3Ig
UGFydE1lbnVMaXN0CisgICAgc3RydWN0IE1lbnVMaXN0RXh0cmFQYXJhbXMgeworICAgICAgICBi
b29sIGhhc0JvcmRlcjsKKyAgICAgICAgYm9vbCBoYXNCb3JkZXJSYWRpdXM7CisgICAgICAgIGlu
dCBhcnJvd1g7CisgICAgICAgIGludCBhcnJvd1k7CisgICAgICAgIENvbG9yIGJhY2tncm91bmRD
b2xvcjsKKyAgICB9OworCisgICAgLy8gRXh0cmEgcGFyYW1ldGVycyBmb3IgUGFydFNsaWRlclRy
YWNrIGFuZCBQYXJ0U2xpZGVyVGh1bWIKKyAgICBzdHJ1Y3QgU2xpZGVyRXh0cmFQYXJhbXMgewor
ICAgICAgICBib29sIHZlcnRpY2FsOworICAgICAgICBib29sIGluRHJhZzsKKyAgICB9OworCisg
ICAgLy8gRXh0cmEgcGFyYW1ldGVycyBmb3IgUGFydElubmVyU3BpbkJ1dHRvbgorICAgIHN0cnVj
dCBJbm5lclNwaW5CdXR0b25FeHRyYVBhcmFtcyB7CisgICAgICAgIGJvb2wgc3BpblVwOworICAg
ICAgICBib29sIHJlYWRPbmx5OworICAgIH07CisKKyAgICAvLyBFeHRyYSBwYXJhbWV0ZXJzIGZv
ciBQYXJ0UHJvZ3Jlc3NCYXIKKyAgICBzdHJ1Y3QgUHJvZ3Jlc3NCYXJFeHRyYVBhcmFtcyB7Cisg
ICAgICAgIGJvb2wgaXNEZXRlcm1pbmF0ZTsKKyAgICAgICAgZG91YmxlIHBvc2l0aW9uOworICAg
ICAgICBkb3VibGUgYW5pbWF0aW9uUHJvZ3Jlc3M7CisgICAgICAgIGRvdWJsZSBhbmltYXRpb25T
dGFydFRpbWU7CisgICAgfTsKKworICAgIHN0cnVjdCBNZXRlckV4dHJhUGFyYW1zIHsKKyAgICAg
ICAgZG91YmxlIG1pbjsKKyAgICAgICAgZG91YmxlIG1heDsKKyAgICAgICAgZG91YmxlIHZhbHVl
OworICAgICAgICBkb3VibGUgbG93OworICAgICAgICBkb3VibGUgaGlnaDsKKyAgICAgICAgZG91
YmxlIG9wdGltdW07CisgICAgICAgIGRvdWJsZSB2YWx1ZVJhdGlvKCkgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKG1heCA8PSBtaW4pCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICByZXR1cm4gKHZhbHVlIC0gbWluKSAvIChtYXggLSBtaW4pOworICAgICAg
ICB9CisgICAgfTsKKworICAgIHZpcnR1YWwgY29uc3QgY2hhciogZXh0cmFEZWZhdWx0U3R5bGVT
aGVldCgpIGNvbnN0IHsgcmV0dXJuICIiOyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBleHRy
YVF1aXJrc1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiAiIjsgfQorICAgIHZpcnR1YWwgY29u
c3QgY2hhciogZXh0cmFQbHVnSW5zU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuICIiOyB9CisK
KyAgICAvLyBUZXh0IHNlbGVjdGlvbiBjb2xvcnMuCisgICAgdmlydHVhbCBDb2xvciBhY3RpdmVT
ZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBDb2xvciBh
Y3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBD
b2xvciBpbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIENvbG9yIGluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QgPSAw
OworCisgICAgLy8gTGlzdCBib3ggc2VsZWN0aW9uIGNvbG9ycworICAgIHZpcnR1YWwgQ29sb3Ig
YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIENvbG9yIGFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZUxpc3RCb3hT
ZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIENvbG9y
IGFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IENvbG9yIGluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QgPSAwOworCisg
ICAgdmlydHVhbCBDb2xvciBmb2N1c1JpbmdDb2xvcigpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1
YWwgQ29sb3IgdGFwSGlnaGxpZ2h0Q29sb3IoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRCdXR0b24oQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmLCBjb25zdCBCdXR0b25F
eHRyYVBhcmFtcyYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUZXh0RmllbGQo
Q2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBTaXpl
IGdldENoZWNrYm94U2l6ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDaGVj
a2JveChDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYsIGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1z
JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgU2l6ZSBnZXRSYWRpb1NpemUoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHBhaW50UmFkaW8oQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3Qm
LCBjb25zdCBCdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRUZXh0QXJlYShDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0TWVudUxpc3RQYWRkaW5nKGludCYgcGFkZGluZ1RvcCwgaW50JiBw
YWRkaW5nTGVmdCwgaW50JiBwYWRkaW5nQm90dG9tLCBpbnQmIHBhZGRpbmdSaWdodCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludE1lbnVMaXN0KENhbnZhcyosIFN0YXRlLCBjb25z
dCBSZWN0JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludFByb2dyZXNzQmFyKENh
bnZhcyosIFN0YXRlLCBjb25zdCBSZWN0JiwgY29uc3QgUHJvZ3Jlc3NCYXJFeHRyYVBhcmFtcyYp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBnZXRBbmltYXRpb25SZXBlYXRJbnRlcnZh
bEZvclByb2dyZXNzQmFyKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZG91YmxlIGdldEFuaW1h
dGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGdldElubmVyU3BpbkJ1dHRvblBhZGRpbmcoaW50JiBwYWRkaW5nVG9wLCBpbnQmIHBhZGRpbmdM
ZWZ0LCBpbnQmIHBhZGRpbmdCb3R0b20sIGludCYgcGFkZGluZ1JpZ2h0KSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50SW5uZXJTcGluQnV0dG9uKENhbnZhcyosIFN0YXRlLCBjb25z
dCBSZWN0JiwgY29uc3QgSW5uZXJTcGluQnV0dG9uRXh0cmFQYXJhbXMmKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50TWV0ZXIoQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmLCBj
b25zdCBNZXRlckV4dHJhUGFyYW1zJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWlu
dFNsaWRlclRyYWNrKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0JikgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBwYWludFNsaWRlclRodW1iKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0
JikgY29uc3QgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgTml4CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvVmVjdG9yLmggYi9Tb3VyY2UvUGxhdGZv
cm0vbml4L3B1YmxpYy9WZWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MTRiMzg0NjA4ZTAxYmU5MDUyN2Y4
YjBhYjQxZjA2NmFjODJjOGEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL25p
eC9wdWJsaWMvVmVjdG9yLmgKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5peF9WZWN0b3JfaAor
I2RlZmluZSBOaXhfVmVjdG9yX2gKKworI2luY2x1ZGUgIkNvbW1vbi5oIgorCisjaW5jbHVkZSA8
YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisKK25hbWVzcGFjZSBOaXggeworCisvLyBB
IHNpbXBsZSB2ZWN0b3IgY2xhc3MuCisvLworLy8gU2FtcGxlIHVzYWdlOgorLy8KKy8vICAgdm9p
ZCBGb28oV2ViVmVjdG9yPGludD4mIHJlc3VsdCkKKy8vICAgeworLy8gICAgICAgV2ViVmVjdG9y
PGludD4gZGF0YSgxMCk7CisvLyAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhdGEuc2l6
ZSgpOyArK2kpCisvLyAgICAgICAgICAgZGF0YVtpXSA9IC4uLgorLy8gICAgICAgcmVzdWx0LnN3
YXAoZGF0YSk7CisvLyAgIH0KKy8vCisvLyBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGFzc2lnbiBm
cm9tIG90aGVyIHR5cGVzIG9mIHJhbmRvbSBhY2Nlc3MKKy8vIGNvbnRhaW5lcnM6CisvLworLy8g
ICB2b2lkIEZvbyhjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGlucHV0KQorLy8gICB7
CisvLyAgICAgICBXZWJWZWN0b3I8V2ViQ1N0cmluZz4gY3N0cmluZ3MgPSBpbnB1dDsKKy8vICAg
ICAgIC4uLgorLy8gICB9CisvLwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBWZWN0b3Ig
eworcHVibGljOgorICAgIHR5cGVkZWYgVCBWYWx1ZVR5cGU7CisKKyAgICB+VmVjdG9yKCkKKyAg
ICB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBWZWN0b3Ioc2l6
ZV90IHNpemUgPSAwKQorICAgIHsKKyAgICAgICAgaW5pdGlhbGl6ZShzaXplKTsKKyAgICB9CisK
KyAgICBWZWN0b3IoY29uc3QgVmVjdG9yPFQ+JiBvdGhlcikKKyAgICB7CisgICAgICAgIGluaXRp
YWxpemVGcm9tKG90aGVyLm1fcHRyLCBvdGhlci5tX3NpemUpOworICAgIH0KKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBDPgorICAgIFZlY3Rvcihjb25zdCBDJiBvdGhlcikKKyAgICB7CisgICAg
ICAgIGluaXRpYWxpemVGcm9tKG90aGVyLnNpemUoKSA/ICZvdGhlclswXSA6IDAsIG90aGVyLnNp
emUoKSk7CisgICAgfQorCisgICAgVmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgVmVjdG9yJiBvdGhl
cikKKyAgICB7CisgICAgICAgIGlmICh0aGlzICE9ICZvdGhlcikKKyAgICAgICAgICAgIGFzc2ln
bihvdGhlcik7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQz4KKyAgICBWZWN0b3I8VD4mIG9wZXJhdG9yPShjb25zdCBDJiBvdGhlcikKKyAg
ICB7CisgICAgICAgIGlmICh0aGlzICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVmVjdG9yPFQ+
Kj4oJm90aGVyKSkKKyAgICAgICAgICAgIGFzc2lnbihvdGhlcik7CisgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQz4KKyAgICB2b2lkIGFzc2ln
bihjb25zdCBDJiBvdGhlcikKKyAgICB7CisgICAgICAgIGFzc2lnbihvdGhlci5zaXplKCkgPyAm
b3RoZXJbMF0gOiAwLCBvdGhlci5zaXplKCkpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBVPgorICAgIHZvaWQgYXNzaWduKGNvbnN0IFUqIHZhbHVlcywgc2l6ZV90IHNpemUpCisg
ICAgeworICAgICAgICBkZXN0cm95KCk7CisgICAgICAgIGluaXRpYWxpemVGcm9tKHZhbHVlcywg
c2l6ZSk7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7
IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9zaXplOyB9CisKKyAgICBU
JiBvcGVyYXRvcltdKHNpemVfdCBpKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KGkgPCBtX3NpemUp
OworICAgICAgICByZXR1cm4gbV9wdHJbaV07CisgICAgfQorICAgIGNvbnN0IFQmIG9wZXJhdG9y
W10oc2l6ZV90IGkpIGNvbnN0CisgICAgeworICAgICAgICBhc3NlcnQoaSA8IG1fc2l6ZSk7Cisg
ICAgICAgIHJldHVybiBtX3B0cltpXTsKKyAgICB9CisKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0
IFQmIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X3NpemU7IGkrKykgeworICAgICAgICAgICAgaWYgKG1fcHRyW2ldID09IHZhbHVlKQorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBUKiBkYXRhKCkgeyByZXR1cm4gbV9wdHI7IH0KKyAgICBjb25zdCBUKiBk
YXRhKCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KKworICAgIHZvaWQgc3dhcChWZWN0b3I8VD4m
IG90aGVyKQorICAgIHsKKyAgICAgICAgc3RkOjpzd2FwKG1fcHRyLCBvdGhlci5tX3B0cik7Cisg
ICAgICAgIHN0ZDo6c3dhcChtX3NpemUsIG90aGVyLm1fc2l6ZSk7CisgICAgfQorCitwcml2YXRl
OgorICAgIHZvaWQgaW5pdGlhbGl6ZShzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIG1fc2l6
ZSA9IHNpemU7CisgICAgICAgIGlmICghbV9zaXplKQorICAgICAgICAgICAgbV9wdHIgPSAwOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fcHRyID0gc3RhdGljX2Nhc3Q8VCo+KDo6b3Bl
cmF0b3IgbmV3KHNpemVvZihUKSAqIG1fc2l6ZSkpOworICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX3NpemU7ICsraSkKKyAgICAgICAgICAgICAgICBuZXcgKCZtX3B0cltpXSkg
VCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAg
dm9pZCBpbml0aWFsaXplRnJvbShjb25zdCBVKiB2YWx1ZXMsIHNpemVfdCBzaXplKQorICAgIHsK
KyAgICAgICAgbV9zaXplID0gc2l6ZTsKKyAgICAgICAgaWYgKCFtX3NpemUpCisgICAgICAgICAg
ICBtX3B0ciA9IDA7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9wdHIgPSBzdGF0aWNf
Y2FzdDxUKj4oOjpvcGVyYXRvciBuZXcoc2l6ZW9mKFQpICogbV9zaXplKSk7CisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQorICAgICAgICAgICAgICAgIG5l
dyAoJm1fcHRyW2ldKSBUKHZhbHVlc1tpXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lk
IGRlc3Ryb3koKQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3NpemU7
ICsraSkKKyAgICAgICAgICAgIG1fcHRyW2ldLn5UKCk7CisgICAgICAgIDo6b3BlcmF0b3IgZGVs
ZXRlKG1fcHRyKTsKKyAgICB9CisKKyAgICBUKiBtX3B0cjsKKyAgICBzaXplX3QgbV9zaXplOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgTml4CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1Bs
YXRmb3JtL25peC9zcmMvRGVmYXVsdFdlYlRoZW1lRW5naW5lLmNwcCBiL1NvdXJjZS9QbGF0Zm9y
bS9uaXgvc3JjL0RlZmF1bHRXZWJUaGVtZUVuZ2luZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDE3M2RlMWI1
YTA2N2VkMDhlNmE0MmFhOGNiMTYxMmJmNWZkOTRlOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9QbGF0Zm9ybS9uaXgvc3JjL0RlZmF1bHRXZWJUaGVtZUVuZ2luZS5jcHAKQEAgLTAsMCArMSwz
NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiRGVmYXVsdFdlYlRoZW1lRW5naW5lLmgiCisKKyNpbmNsdWRlICJwdWJsaWMvQ29s
b3IuaCIKKyNpbmNsdWRlICJwdWJsaWMvUmVjdC5oIgorI2luY2x1ZGUgInB1YmxpYy9TaXplLmgi
CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhaXJvL2NhaXJvLmg+CisjaW5jbHVk
ZSA8Y21hdGg+CisKK2NvbnN0IGRvdWJsZSBCR0NvbG9yMSA9IDB4RjYgLyAyNTYuMDsKK2NvbnN0
IGRvdWJsZSBCR0NvbG9yMiA9IDB4REUgLyAyNTYuMDsKK2NvbnN0IGRvdWJsZSBCb3JkZXJDb2xv
ciA9IDB4QTQgLyAyNTYuMDsKK2NvbnN0IGRvdWJsZSBCb3JkZXJPbkhvdmVyQ29sb3IgPSAweDdB
IC8gMjU2LjA7Citjb25zdCBkb3VibGUgQ2hlY2tDb2xvciA9IDB4NjYgLyAyNTYuMDsKK2NvbnN0
IGRvdWJsZSBUZXh0RmllbGREYXJrQm9yZGVyQ29sb3IgPSAweDlBIC8gMjU2LjA7Citjb25zdCBk
b3VibGUgVGV4dEZpZWxkTGlnaHRCb3JkZXJDb2xvciA9IDB4RUUgLyAyNTYuMDsKKworY29uc3Qg
aW50IE1lbnVMaXN0Qm9yZGVyID0gNTsKK2NvbnN0IGludCBNZW51TGlzdEFycm93U2l6ZSA9IDY7
CisKK2NvbnN0IGludCBJbm5lclNwaW5CdXR0b25Cb3JkZXIgPSAzOworY29uc3QgaW50IElubmVy
U3BpbkJ1dHRvbkFycm93U2l6ZSA9IDI7CisKK2NvbnN0IE5peDo6UkdCQTMyIFRhcEhpZ2hMaWdo
dENvbG9yID0gMHg2NjAwMDAwMDsKKworbmFtZXNwYWNlIE5peCB7CisKK0NvbG9yIERlZmF1bHRX
ZWJUaGVtZUVuZ2luZTo6YWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gQ29sb3IoMCwgMCwgMjU1KTsKK30KKworQ29sb3IgRGVmYXVsdFdlYlRoZW1l
RW5naW5lOjphY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJl
dHVybiBDb2xvcjo6d2hpdGU7Cit9CisKK0NvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6aW5h
Y3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBDb2xv
cigxNzYsIDE3NiwgMTc2KTsKK30KKworQ29sb3IgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjppbmFj
dGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9y
OjpibGFjazsKK30KKworQ29sb3IgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjphY3RpdmVMaXN0Qm94
U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYWN0aXZlU2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7Cit9CisKK0NvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2lu
ZTo6YWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpOworfQorCitDb2xvciBEZWZh
dWx0V2ViVGhlbWVFbmdpbmU6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9y
KCk7Cit9CisKK0NvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6aW5hY3RpdmVMaXN0Qm94U2Vs
ZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5hY3RpdmVTZWxl
Y3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKTsKK30KKworQ29sb3IgRGVmYXVsdFdlYlRoZW1lRW5naW5l
OjphY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBD
b2xvcigyNTUsIDE1MCwgNTApOyAvLyBPcmFuZ2UuCit9CisKK0NvbG9yIERlZmF1bHRXZWJUaGVt
ZUVuZ2luZTo6aW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdAoreworICAg
IHJldHVybiBDb2xvcigyNTUsIDI1NSwgMCk7IC8vIFllbGxvdy4KK30KKworQ29sb3IgRGVmYXVs
dFdlYlRoZW1lRW5naW5lOjpmb2N1c1JpbmdDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENv
bG9yOjpibGFjazsKK30KKworQ29sb3IgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjp0YXBIaWdobGln
aHRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFRhcEhpZ2hMaWdodENvbG9yOworfQorCitz
dGF0aWMgdm9pZCBncmFkaWVudEZpbGwoY2Fpcm9fdCogY2Fpcm8sIGRvdWJsZSB5U3RhcnQsIGRv
dWJsZSB5TGVuZ3RoLCBib29sIGludmVydGVkID0gZmFsc2UpCit7CisgICAgZG91YmxlIGdyYWRT
dGFydENvbG9yID0gQkdDb2xvcjE7CisgICAgZG91YmxlIGdyYWRFbmRDb2xvciA9IEJHQ29sb3Iy
OworICAgIGlmIChpbnZlcnRlZCkKKyAgICAgICAgc3RkOjpzd2FwKGdyYWRTdGFydENvbG9yLCBn
cmFkRW5kQ29sb3IpOworCisgICAgY2Fpcm9fcGF0dGVybl90KiBncmFkaWVudCA9IGNhaXJvX3Bh
dHRlcm5fY3JlYXRlX2xpbmVhcigwLCB5U3RhcnQsIDAsIHlTdGFydCArIHlMZW5ndGgpOworICAg
IGNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiKGdyYWRpZW50LCAwLCBncmFkU3RhcnRD
b2xvciwgZ3JhZFN0YXJ0Q29sb3IsIGdyYWRTdGFydENvbG9yKTsKKyAgICBjYWlyb19wYXR0ZXJu
X2FkZF9jb2xvcl9zdG9wX3JnYihncmFkaWVudCwgMSwgZ3JhZEVuZENvbG9yLCBncmFkRW5kQ29s
b3IsIGdyYWRFbmRDb2xvcik7CisgICAgY2Fpcm9fc2V0X3NvdXJjZShjYWlybywgZ3JhZGllbnQp
OworICAgIGNhaXJvX2ZpbGwoY2Fpcm8pOworICAgIGNhaXJvX3BhdHRlcm5fZGVzdHJveShncmFk
aWVudCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwQm9yZGVyKGNhaXJvX3QgKiBjYWlybywgVGhl
bWVFbmdpbmU6OlN0YXRlIHN0YXRlKQoreworICAgIGRvdWJsZSBib3JkZXJDb2xvciA9IHN0YXRl
ID09IFRoZW1lRW5naW5lOjpTdGF0ZUhvdmVyID8gQm9yZGVyT25Ib3ZlckNvbG9yIDogQm9yZGVy
Q29sb3I7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2Fpcm8sIGJvcmRlckNvbG9yLCBib3Jk
ZXJDb2xvciwgYm9yZGVyQ29sb3IpOworICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNhaXJvLCAx
KTsKK30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50QnV0dG9uKENhbnZhcyog
Y2FudmFzLCBTdGF0ZSBzdGF0ZSwgY29uc3QgUmVjdCYgcmVjdCwgY29uc3QgQnV0dG9uRXh0cmFQ
YXJhbXMmKSBjb25zdAoreworICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKKyAgICBzZXR1cEJvcmRl
cihjYW52YXMsIHN0YXRlKTsKKyAgICAvLyBDYWlybyB1c2VzIGEgY29vcmRpbmF0ZSBzeXN0ZW0g
bm90IGJhc2VkIG9uIHBpeGVsIGNvb3JkaW5hdGVzLCBzbworICAgIC8vIHdlIG5lZWQgdG8gYWRk
ICAwLjUgdG8geCBhbmQgeSBjb29yZCBvciB0aGUgbGluZSB3aWxsIHN0YXkgYmV0d2VlbgorICAg
IC8vIHR3byBwaXhlbHMgaW5zdGVhZCBvZiBpbiB0aGUgbWlkZGxlIG9mIGEgcGl4ZWwuCisgICAg
Y2Fpcm9fcmVjdGFuZ2xlKGNhbnZhcywgcmVjdC54ICsgMC41LCByZWN0LnkgKyAwLjUsIHJlY3Qu
d2lkdGgsIHJlY3QuaGVpZ2h0KTsKKyAgICBjYWlyb19zdHJva2VfcHJlc2VydmUoY2FudmFzKTsK
KworICAgIGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQsIHN0YXRlID09
IFN0YXRlUHJlc3NlZCk7CisgICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOworfQorCit2b2lkIERl
ZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRUZXh0RmllbGQoQ2FudmFzKiBjYW52YXMsIFN0YXRl
LCBjb25zdCBSZWN0JiByZWN0KSBjb25zdAoreworICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKKwor
ICAgIGNvbnN0IGRvdWJsZSBsaW5lV2lkdGggPSAyOworICAgIGNvbnN0IGRvdWJsZSBjb3JyZWN0
aW9uID0gbGluZVdpZHRoIC8gMi4wOworCisgICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGgoY2FudmFz
LCBsaW5lV2lkdGgpOworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhbnZhcywgVGV4dEZpZWxk
RGFya0JvcmRlckNvbG9yLCBUZXh0RmllbGREYXJrQm9yZGVyQ29sb3IsIFRleHRGaWVsZERhcmtC
b3JkZXJDb2xvcik7CisgICAgY2Fpcm9fbW92ZV90byhjYW52YXMsIHJlY3QueCArIGNvcnJlY3Rp
b24sIHJlY3QueSArIGNvcnJlY3Rpb24gKyByZWN0LmhlaWdodCk7CisgICAgY2Fpcm9fcmVsX2xp
bmVfdG8oY2FudmFzLCAwLCAtcmVjdC5oZWlnaHQpOworICAgIGNhaXJvX3JlbF9saW5lX3RvKGNh
bnZhcywgcmVjdC53aWR0aCwgMCk7CisgICAgY2Fpcm9fc3Ryb2tlKGNhbnZhcyk7CisKKyAgICBj
YWlyb19zZXRfc291cmNlX3JnYihjYW52YXMsIFRleHRGaWVsZExpZ2h0Qm9yZGVyQ29sb3IsIFRl
eHRGaWVsZExpZ2h0Qm9yZGVyQ29sb3IsIFRleHRGaWVsZExpZ2h0Qm9yZGVyQ29sb3IpOworICAg
IGNhaXJvX21vdmVfdG8oY2FudmFzLCByZWN0LnggKyBjb3JyZWN0aW9uICsgcmVjdC53aWR0aCwg
cmVjdC55ICsgY29ycmVjdGlvbik7CisgICAgY2Fpcm9fcmVsX2xpbmVfdG8oY2FudmFzLCAwLCBy
ZWN0LmhlaWdodCk7CisgICAgY2Fpcm9fcmVsX2xpbmVfdG8oY2FudmFzLCAtcmVjdC53aWR0aCwg
MCk7CisgICAgY2Fpcm9fc3Ryb2tlKGNhbnZhcyk7CisKKyAgICBjYWlyb19yZXN0b3JlKGNhbnZh
cyk7Cit9CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludFRleHRBcmVhKENhbnZh
cyogY2FudmFzLCBTdGF0ZSBzdGF0ZSwgY29uc3QgUmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBw
YWludFRleHRGaWVsZChjYW52YXMsIHN0YXRlLCByZWN0KTsKK30KKworU2l6ZSBEZWZhdWx0V2Vi
VGhlbWVFbmdpbmU6OmdldENoZWNrYm94U2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNpemUo
MTMsIDEzKTsKK30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50Q2hlY2tib3go
Q2FudmFzKiBjYW52YXMsIFN0YXRlIHN0YXRlLCBjb25zdCBSZWN0JiByZWN0LCBjb25zdCBCdXR0
b25FeHRyYVBhcmFtcyYgcGFyYW0pIGNvbnN0Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOwor
ICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUpOworICAgIGNhaXJvX3JlY3RhbmdsZShjYW52
YXMsIHJlY3QueCArIDAuNSwgcmVjdC55ICsgMC41LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7
CisgICAgY2Fpcm9fc3Ryb2tlX3ByZXNlcnZlKGNhbnZhcyk7CisKKyAgICBncmFkaWVudEZpbGwo
Y2FudmFzLCByZWN0LnksIHJlY3QuaGVpZ2h0LCBzdGF0ZSA9PSBTdGF0ZVByZXNzZWQpOworCisg
ICAgaWYgKHBhcmFtLmNoZWNrZWQpIHsKKyAgICAgICAgY29uc3QgZG91YmxlIGJvcmRlciA9IDM7
CisgICAgICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNhbnZhcywgMik7CisgICAgICAgIGNhaXJv
X3NldF9zb3VyY2VfcmdiKGNhbnZhcywgQ2hlY2tDb2xvciwgQ2hlY2tDb2xvciwgQ2hlY2tDb2xv
cik7CisgICAgICAgIGNhaXJvX21vdmVfdG8oY2FudmFzLCByZWN0LnggKyAwLjUgKyBib3JkZXIs
IHJlY3QueSArIDAuNSArIHJlY3QuaGVpZ2h0IC0gYm9yZGVyKTsKKyAgICAgICAgY2Fpcm9fcmVs
X2xpbmVfdG8oY2FudmFzLCByZWN0LndpZHRoIC0gYm9yZGVyICogMiwgLXJlY3QuaGVpZ2h0ICsg
Ym9yZGVyICogMik7CisgICAgICAgIGNhaXJvX21vdmVfdG8oY2FudmFzLCByZWN0LnggKyAwLjUg
KyBib3JkZXIsIHJlY3QueSArIDAuNSArIGJvcmRlcik7CisgICAgICAgIGNhaXJvX3JlbF9saW5l
X3RvKGNhbnZhcywgcmVjdC53aWR0aCAtIGJvcmRlciAqIDIsIHJlY3QuaGVpZ2h0IC0gYm9yZGVy
ICogMik7CisgICAgICAgIGNhaXJvX3N0cm9rZShjYW52YXMpOworICAgIH0KKworICAgIGNhaXJv
X3Jlc3RvcmUoY2FudmFzKTsKK30KKworU2l6ZSBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmdldFJh
ZGlvU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNpemUoMTMsIDEzKTsKK30KKwordm9pZCBE
ZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50UmFkaW8oQ2FudmFzKiBjYW52YXMsIFN0YXRlIHN0
YXRlLCBjb25zdCBSZWN0JiByZWN0LCBjb25zdCBCdXR0b25FeHRyYVBhcmFtcyYgcGFyYW0pIGNv
bnN0Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOworICAgIHNldHVwQm9yZGVyKGNhbnZhcywg
c3RhdGUpOworICAgIGNhaXJvX2FyYyhjYW52YXMsIHJlY3QueCArIHJlY3Qud2lkdGggLyAyLjAs
IHJlY3QueSArIHJlY3QuaGVpZ2h0IC8gMi4wLCByZWN0LndpZHRoIC8gMi4wLCAwLCAyICogTV9Q
SSk7CisgICAgY2Fpcm9fc3Ryb2tlX3ByZXNlcnZlKGNhbnZhcyk7CisKKyAgICBncmFkaWVudEZp
bGwoY2FudmFzLCByZWN0LnksIHJlY3QuaGVpZ2h0KTsKKworICAgIGlmIChwYXJhbS5jaGVja2Vk
KSB7CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhbnZhcywgQ2hlY2tDb2xvciwgQ2hl
Y2tDb2xvciwgQ2hlY2tDb2xvcik7CisgICAgICAgIGNhaXJvX2FyYyhjYW52YXMsIHJlY3QueCAr
IHJlY3Qud2lkdGggLyAyLjAsIHJlY3QueSArIHJlY3QuaGVpZ2h0IC8gMi4wLCByZWN0LndpZHRo
IC8gNC4wLCAwLCAyICogTV9QSSk7CisgICAgICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsKKyAgICB9
CisgICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOworfQorCit2b2lkIERlZmF1bHRXZWJUaGVtZUVu
Z2luZTo6Z2V0TWVudUxpc3RQYWRkaW5nKGludCYgcGFkZGluZ1RvcCwgaW50JiBwYWRkaW5nTGVm
dCwgaW50JiBwYWRkaW5nQm90dG9tLCBpbnQmIHBhZGRpbmdSaWdodCkgY29uc3QKK3sKKyAgICBw
YWRkaW5nVG9wID0gTWVudUxpc3RCb3JkZXI7CisgICAgcGFkZGluZ0xlZnQgPSBNZW51TGlzdEJv
cmRlcjsKKyAgICBwYWRkaW5nQm90dG9tID0gTWVudUxpc3RCb3JkZXI7CisgICAgcGFkZGluZ1Jp
Z2h0ID0gMiAqIE1lbnVMaXN0Qm9yZGVyICsgTWVudUxpc3RBcnJvd1NpemU7Cit9CisKK3ZvaWQg
RGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludE1lbnVMaXN0KENhbnZhcyogY2FudmFzLCBTdGF0
ZSBzdGF0ZSwgY29uc3QgUmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBjYWlyb19zYXZlKGNhbnZh
cyk7CisgICAgc2V0dXBCb3JkZXIoY2FudmFzLCBzdGF0ZSk7CisgICAgY2Fpcm9fcmVjdGFuZ2xl
KGNhbnZhcywgcmVjdC54ICsgMC41LCByZWN0LnkgKyAwLjUsIHJlY3Qud2lkdGgsIHJlY3QuaGVp
Z2h0KTsKKyAgICBjYWlyb19zdHJva2VfcHJlc2VydmUoY2FudmFzKTsKKworICAgIGdyYWRpZW50
RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQsIHN0YXRlID09IFN0YXRlUHJlc3NlZCk7
CisKKyAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgcmVjdC53aWR0aCAtIE1lbnVM
aXN0QXJyb3dTaXplIC0gTWVudUxpc3RCb3JkZXIsIHJlY3QueSArIDEgKyByZWN0LmhlaWdodCAv
IDIgLSBNZW51TGlzdEFycm93U2l6ZSAvIDIpOworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNh
bnZhcywgQ2hlY2tDb2xvciwgQ2hlY2tDb2xvciwgQ2hlY2tDb2xvcik7CisgICAgY2Fpcm9fcmVs
X2xpbmVfdG8oY2FudmFzLCBNZW51TGlzdEFycm93U2l6ZSwgMCk7CisgICAgY2Fpcm9fcmVsX2xp
bmVfdG8oY2FudmFzLCAtTWVudUxpc3RBcnJvd1NpemUgLyAyLCBNZW51TGlzdEFycm93U2l6ZSk7
CisgICAgY2Fpcm9fY2xvc2VfcGF0aChjYW52YXMpOworICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsK
KworICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsKK30KKworU2l6ZSBEZWZhdWx0V2ViVGhlbWVF
bmdpbmU6OmdldFByb2dyZXNzQmFyU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNpemUoMjAw
MCwgMzAwKTsKK30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50UHJvZ3Jlc3NC
YXIoQ2FudmFzKiBjYW52YXMsIFN0YXRlIHN0YXRlLCBjb25zdCBSZWN0JiByZWN0LCBjb25zdCBQ
cm9ncmVzc0JhckV4dHJhUGFyYW1zJiBwYXJhbXMpIGNvbnN0Cit7CisgICAgY2Fpcm9fc2F2ZShj
YW52YXMpOworCisgICAgaWYgKHBhcmFtcy5pc0RldGVybWluYXRlKSB7CisgICAgICAgIC8vIEJh
Y2tncm91bmQKKyAgICAgICAgc2V0dXBCb3JkZXIoY2FudmFzLCBzdGF0ZSk7CisgICAgICAgIGNh
aXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRoLCByZWN0Lmhl
aWdodCk7CisgICAgICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsKKyAgICAgICAgLy8gUHJvZ3Jlc3MK
KyAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNhbnZhcywgcmVjdC54LCByZWN0LnksIHJlY3Qud2lk
dGggKiBwYXJhbXMucG9zaXRpb24sIHJlY3QuaGVpZ2h0KTsKKyAgICAgICAgZ3JhZGllbnRGaWxs
KGNhbnZhcywgcmVjdC55LCByZWN0LmhlaWdodCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2Fp
cm9fcmVjdGFuZ2xlKGNhbnZhcywgcmVjdC54LCByZWN0LnksIHJlY3Qud2lkdGgsIHJlY3QuaGVp
Z2h0KTsKKyAgICAgICAgZ3JhZGllbnRGaWxsKGNhbnZhcywgcmVjdC55LCByZWN0LmhlaWdodCwg
dHJ1ZSk7CisgICAgfQorCisgICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOworfQorCisvLyBUaGVz
ZSB2YWx1ZXMgaGF2ZSBiZWVuIGNvcGllZCBmcm9tIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNw
cAorc3RhdGljIGNvbnN0IGludCBwcm9ncmVzc0FjdGl2aXR5QmxvY2tzID0gNTsKK3N0YXRpYyBj
b25zdCBpbnQgcHJvZ3Jlc3NBbmltYXRpb25GcmFtZXMgPSAxMDsKK3N0YXRpYyBjb25zdCBkb3Vi
bGUgcHJvZ3Jlc3NBbmltYXRpb25JbnRlcnZhbCA9IDAuMTI1OworCitkb3VibGUgRGVmYXVsdFdl
YlRoZW1lRW5naW5lOjpnZXRBbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gcHJvZ3Jlc3NBbmltYXRpb25JbnRlcnZhbDsKK30KKworZG91
YmxlIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6Z2V0QW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVz
c0JhcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHByb2dyZXNzQW5pbWF0aW9uSW50ZXJ2YWwgKiBw
cm9ncmVzc0FuaW1hdGlvbkZyYW1lcyAqIDI7IC8vICIyIiBmb3IgYmFjayBhbmQgZm9ydGg7Cit9
CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpnZXRJbm5lclNwaW5CdXR0b25QYWRkaW5n
KGludCYgcGFkZGluZ1RvcCwgaW50JiBwYWRkaW5nTGVmdCwgaW50JiBwYWRkaW5nQm90dG9tLCBp
bnQmIHBhZGRpbmdSaWdodCkgY29uc3QKK3sKKyAgICBwYWRkaW5nVG9wID0gSW5uZXJTcGluQnV0
dG9uQm9yZGVyOworICAgIHBhZGRpbmdMZWZ0ID0gSW5uZXJTcGluQnV0dG9uQm9yZGVyOworICAg
IHBhZGRpbmdCb3R0b20gPSBJbm5lclNwaW5CdXR0b25Cb3JkZXI7CisgICAgcGFkZGluZ1JpZ2h0
ID0gMiAqIElubmVyU3BpbkJ1dHRvbkJvcmRlciArIElubmVyU3BpbkJ1dHRvbkFycm93U2l6ZTsK
K30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50SW5uZXJTcGluQnV0dG9uKENh
bnZhcyogY2FudmFzLCBTdGF0ZSBzdGF0ZSwgY29uc3QgUmVjdCYgcmVjdCwgY29uc3QgSW5uZXJT
cGluQnV0dG9uRXh0cmFQYXJhbXMmIHBhcmFtKSBjb25zdAoreworICAgIGRvdWJsZSByZWN0SGFs
ZkhlaWdodCA9IHJlY3QuaGVpZ2h0IC8gMjsKKworICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKKyAg
ICBzZXR1cEJvcmRlcihjYW52YXMsIHN0YXRlKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFz
LCByZWN0LnggKyAwLjUsIHJlY3QueSArIDEuNSwgcmVjdC53aWR0aCwgcmVjdEhhbGZIZWlnaHQp
OworICAgIGNhaXJvX3N0cm9rZV9wcmVzZXJ2ZShjYW52YXMpOworCisgICAgZ3JhZGllbnRGaWxs
KGNhbnZhcywgcmVjdC55LCByZWN0SGFsZkhlaWdodCwgc3RhdGUgPT0gU3RhdGVQcmVzc2VkICYm
IHBhcmFtLnNwaW5VcCk7CisKKyAgICBzZXR1cEJvcmRlcihjYW52YXMsIHN0YXRlKTsKKyAgICBj
YWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LnggKyAwLjUsIHJlY3QueSArIDAuNSArIHJlY3RI
YWxmSGVpZ2h0LCByZWN0LndpZHRoLCByZWN0SGFsZkhlaWdodCk7CisgICAgY2Fpcm9fc3Ryb2tl
X3ByZXNlcnZlKGNhbnZhcyk7CisKKyAgICBncmFkaWVudEZpbGwoY2FudmFzLCByZWN0LnkgKyBy
ZWN0SGFsZkhlaWdodCwgcmVjdEhhbGZIZWlnaHQsIHN0YXRlID09IFN0YXRlUHJlc3NlZCAmJiAh
cGFyYW0uc3BpblVwKTsKKworICAgIGNhaXJvX21vdmVfdG8oY2FudmFzLCByZWN0LnggKyByZWN0
LndpZHRoIC0gSW5uZXJTcGluQnV0dG9uQXJyb3dTaXplIC0gSW5uZXJTcGluQnV0dG9uQm9yZGVy
ICogMiwgcmVjdC55ICsgcmVjdEhhbGZIZWlnaHQgKyByZWN0LmhlaWdodCAvIDQgLSBJbm5lclNw
aW5CdXR0b25BcnJvd1NpemUgKyAxLjUpOworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhbnZh
cywgQ2hlY2tDb2xvciwgQ2hlY2tDb2xvciwgQ2hlY2tDb2xvcik7CisgICAgY2Fpcm9fcmVsX2xp
bmVfdG8oY2FudmFzLCBNZW51TGlzdEFycm93U2l6ZSwgMCk7CisgICAgY2Fpcm9fcmVsX2xpbmVf
dG8oY2FudmFzLCAtTWVudUxpc3RBcnJvd1NpemUgLyAyLCBNZW51TGlzdEFycm93U2l6ZSk7Cisg
ICAgY2Fpcm9fY2xvc2VfcGF0aChjYW52YXMpOworCisgICAgY2Fpcm9fbW92ZV90byhjYW52YXMs
IHJlY3QueCArIHJlY3Qud2lkdGggLSBJbm5lclNwaW5CdXR0b25BcnJvd1NpemUgLSBJbm5lclNw
aW5CdXR0b25Cb3JkZXIgKiAyLCByZWN0LnkgKyByZWN0LmhlaWdodCAvIDQgKyBJbm5lclNwaW5C
dXR0b25BcnJvd1NpemUpOworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhbnZhcywgQ2hlY2tD
b2xvciwgQ2hlY2tDb2xvciwgQ2hlY2tDb2xvcik7CisgICAgY2Fpcm9fcmVsX2xpbmVfdG8oY2Fu
dmFzLCBNZW51TGlzdEFycm93U2l6ZSwgMCk7CisgICAgY2Fpcm9fcmVsX2xpbmVfdG8oY2FudmFz
LCAtTWVudUxpc3RBcnJvd1NpemUgLyAyLCAtTWVudUxpc3RBcnJvd1NpemUpOworICAgIGNhaXJv
X2Nsb3NlX3BhdGgoY2FudmFzKTsKKworICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsKK30KKwordm9p
ZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50TWV0ZXIoQ2FudmFzKiBjYW52YXMsIFN0YXRl
IHN0YXRlLCBjb25zdCBSZWN0JiByZWN0LCBjb25zdCBNZXRlckV4dHJhUGFyYW1zJiBwYXJhbXMp
IGNvbnN0Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOworCisgICAgLy8gQmFja2dyb3VuZAor
ICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUpOworICAgIGNhaXJvX3JlY3RhbmdsZShjYW52
YXMsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7CisgICAgY2Fpcm9f
ZmlsbChjYW52YXMpOworICAgIC8vIE1ldGVyCisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNhbnZhcywg
cmVjdC54LCByZWN0LnksIHJlY3Qud2lkdGggKiBwYXJhbXMudmFsdWVSYXRpbygpLCByZWN0Lmhl
aWdodCk7CisgICAgZ3JhZGllbnRGaWxsKGNhbnZhcywgcmVjdC55LCByZWN0LmhlaWdodCk7CisK
KyAgICBjYWlyb19yZXN0b3JlKGNhbnZhcyk7Cit9CisKK2NvbnN0IGludCBTbGlkZXJUcmFja0hl
aWdodCA9IDY7CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludFNsaWRlclRyYWNr
KENhbnZhcyogY2FudmFzLCBTdGF0ZSwgY29uc3QgUmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBj
YWlyb19zYXZlKGNhbnZhcyk7CisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNhbnZhcywgcmVjdC54LCBy
ZWN0LnkgKyAocmVjdC5oZWlnaHQgLSBTbGlkZXJUcmFja0hlaWdodCkgLyAyLjAsIHJlY3Qud2lk
dGgsIFNsaWRlclRyYWNrSGVpZ2h0KTsKKyAgICBncmFkaWVudEZpbGwoY2FudmFzLCByZWN0Lnks
IHJlY3QuaGVpZ2h0LCB0cnVlKTsKKyAgICBjYWlyb19yZXN0b3JlKGNhbnZhcyk7Cit9CisKK3Zv
aWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludFNsaWRlclRodW1iKENhbnZhcyogY2FudmFz
LCBTdGF0ZSBzdGF0ZSwgY29uc3QgUmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBjYWlyb19zYXZl
KGNhbnZhcyk7CisgICAgc2V0dXBCb3JkZXIoY2FudmFzLCBzdGF0ZSk7CisgICAgY2Fpcm9fcmVj
dGFuZ2xlKGNhbnZhcywgcmVjdC54LCByZWN0LnksIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTsK
KyAgICBjYWlyb19zdHJva2VfcHJlc2VydmUoY2FudmFzKTsKKyAgICBncmFkaWVudEZpbGwoY2Fu
dmFzLCByZWN0LnksIHJlY3QuaGVpZ2h0LCBzdGF0ZSA9PSBTdGF0ZVByZXNzZWQpOworICAgIGNh
aXJvX3Jlc3RvcmUoY2FudmFzKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3Jt
L25peC9zcmMvRGVmYXVsdFdlYlRoZW1lRW5naW5lLmggYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3Ny
Yy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NWQ1ZjE5YjkwMzFhMDAzY2Y2
M2VmZTU1ODUwZjQ2NzdkNGQxNjM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3Jt
L25peC9zcmMvRGVmYXVsdFdlYlRoZW1lRW5naW5lLmgKQEAgLTAsMCArMSw1MCBAQAorI2lmbmRl
ZiBEZWZhdWx0V2ViVGhlbWVFbmdpbmVfaAorI2RlZmluZSBEZWZhdWx0V2ViVGhlbWVFbmdpbmVf
aAorCisjaW5jbHVkZSAicHVibGljL1RoZW1lRW5naW5lLmgiCisKK25hbWVzcGFjZSBOaXggewor
CitjbGFzcyBEZWZhdWx0V2ViVGhlbWVFbmdpbmUgOiBwdWJsaWMgVGhlbWVFbmdpbmUgeworcHVi
bGljOgorICAgIC8vIFRleHQgc2VsZWN0aW9uIGNvbG9ycy4KKyAgICB2aXJ0dWFsIENvbG9yIGFj
dGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwgQ29sb3Ig
YWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBDb2xv
ciBpbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwg
Q29sb3IgaW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKworICAgIC8v
IExpc3QgYm94IHNlbGVjdGlvbiBjb2xvcnMKKyAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZUxpc3RC
b3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIGFj
dGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IENvbG9yIGluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Owor
ICAgIHZpcnR1YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRD
b2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwgQ29sb3IgaW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxp
Z2h0Q29sb3IoKSBjb25zdDsKKworICAgIHZpcnR1YWwgQ29sb3IgZm9jdXNSaW5nQ29sb3IoKSBj
b25zdDsKKworICAgIHZpcnR1YWwgQ29sb3IgdGFwSGlnaGxpZ2h0Q29sb3IoKSBjb25zdDsKKwor
ICAgIHZpcnR1YWwgdm9pZCBwYWludEJ1dHRvbihDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYs
IGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1zJikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBhaW50
VGV4dEZpZWxkKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0JikgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHBhaW50VGV4dEFyZWEoQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFNpemUgZ2V0Q2hlY2tib3hTaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIHBhaW50Q2hlY2tib3goQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmLCBjb25zdCBCdXR0
b25FeHRyYVBhcmFtcyYpIGNvbnN0OworICAgIHZpcnR1YWwgU2l6ZSBnZXRSYWRpb1NpemUoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSYWRpbyhDYW52YXMqLCBTdGF0ZSwgY29uc3Qg
UmVjdCYsIGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1zJikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHBhaW50TWVudUxpc3QoQ2FudmFzICosIFN0YXRlLCBjb25zdCBSZWN0ICYpIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBnZXRNZW51TGlzdFBhZGRpbmcoaW50JiBwYWRkaW5nVG9wLCBpbnQmIHBh
ZGRpbmdMZWZ0LCBpbnQmIHBhZGRpbmdCb3R0b20sIGludCYgcGFkZGluZ1JpZ2h0KSBjb25zdDsK
KyAgICB2aXJ0dWFsIFNpemUgZ2V0UHJvZ3Jlc3NCYXJTaXplKCkgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHBhaW50UHJvZ3Jlc3NCYXIoQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmLCBjb25z
dCBQcm9ncmVzc0JhckV4dHJhUGFyYW1zJikgY29uc3Q7CisgICAgdmlydHVhbCBkb3VibGUgZ2V0
QW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcigpIGNvbnN0OworICAgIHZpcnR1
YWwgZG91YmxlIGdldEFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRJbm5lclNwaW5CdXR0b24oQ2FudmFzICosIFN0YXRlLCBjb25z
dCBSZWN0ICYsIGNvbnN0IElubmVyU3BpbkJ1dHRvbkV4dHJhUGFyYW1zJikgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGdldElubmVyU3BpbkJ1dHRvblBhZGRpbmcoaW50JiBwYWRkaW5nVG9wLCBp
bnQmIHBhZGRpbmdMZWZ0LCBpbnQmIHBhZGRpbmdCb3R0b20sIGludCYgcGFkZGluZ1JpZ2h0KSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRNZXRlcihDYW52YXMqLCBTdGF0ZSwgY29uc3Qg
UmVjdCYsIGNvbnN0IE1ldGVyRXh0cmFQYXJhbXMmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRTbGlkZXJUcmFjayhDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYpIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBwYWludFNsaWRlclRodW1iKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0
JikgY29uc3Q7Cit9OworCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9u
aXgvc3JjL1BsYXRmb3JtLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL1BsYXRmb3JtLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44MDQwNmJlZjkzM2UyYWRjODUyYWEwNmE3OTg0ZmQyYTJlNDhhZjViCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL25peC9zcmMvUGxhdGZvcm0uY3BwCkBA
IC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
InB1YmxpYy9QbGF0Zm9ybS5oIgorCisjaW5jbHVkZSAiRGVmYXVsdFdlYlRoZW1lRW5naW5lLmgi
CisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
KworbmFtZXNwYWNlIE5peCB7CisKK2NsYXNzIEVtcHR5UGxhdGZvcm0gOiBwdWJsaWMgUGxhdGZv
cm0geworcHVibGljOgorICAgIH5FbXB0eVBsYXRmb3JtKCkgeyB9Cit9Oworc3RhdGljIFdURjo6
T3duUHRyPEVtcHR5UGxhdGZvcm0+IHNfZW1wdHlQbGF0Zm9ybSA9IFdURjo6YWRvcHRQdHIobmV3
IEVtcHR5UGxhdGZvcm0oKSk7CisKK3N0YXRpYyBQbGF0Zm9ybSogc19wbGF0Zm9ybSA9IHNfZW1w
dHlQbGF0Zm9ybS5nZXQoKTsKKwordm9pZCBQbGF0Zm9ybTo6aW5pdGlhbGl6ZShQbGF0Zm9ybSog
cGxhdGZvcm0pCit7CisgICAgc19wbGF0Zm9ybSA9IHBsYXRmb3JtOworfQorCit2b2lkIFBsYXRm
b3JtOjpzaHV0ZG93bigpCit7CisgICAgc19wbGF0Zm9ybSA9IDA7Cit9CisKK1BsYXRmb3JtKiBQ
bGF0Zm9ybTo6Y3VycmVudCgpCit7CisgICAgcmV0dXJuIHNfcGxhdGZvcm07Cit9CisKK1RoZW1l
RW5naW5lKiBQbGF0Zm9ybTo6dGhlbWVFbmdpbmUoKQoreworICAgIHN0YXRpYyBEZWZhdWx0V2Vi
VGhlbWVFbmdpbmUgdGhlbWU7CisgICAgcmV0dXJuICZ0aGVtZTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgTml4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9uaXgvQXVk
aW9CdXNOaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbml4L0F1ZGlvQnVz
Tml4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wNjkxODQwY2RmYTEyZTQyNDFhYzI1YzY2ODM4NmIzOTVhNjRi
OWFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbml4
L0F1ZGlvQnVzTml4LmNwcApAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkF1ZGlvQnVz
LmgiCisKKyNpbmNsdWRlICJBdWRpb0ZpbGVSZWFkZXIuaCIKKyNpbmNsdWRlIDxwdWJsaWMvQXVk
aW9CdXMuaD4KKyNpbmNsdWRlIDxwdWJsaWMvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NS
ZWZQdHI8QXVkaW9CdXM+IGRlY29kZUF1ZGlvRmlsZURhdGEoY29uc3QgY2hhciogZGF0YSwgc2l6
ZV90IHNpemUsIGRvdWJsZSBzYW1wbGVSYXRlKQoreworICAgIE5peDo6QXVkaW9CdXMgbml4QXVk
aW9CdXM7CisgICAgaWYgKE5peDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+bG9hZEF1ZGlvUmVzb3Vy
Y2UoJm5peEF1ZGlvQnVzLCBkYXRhLCBzaXplLCBzYW1wbGVSYXRlKSkKKyAgICAgICAgcmV0dXJu
IG5peEF1ZGlvQnVzLmF1ZGlvQnVzKCk7CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8QXVkaW9CdXM+
KCk7Cit9CisKK1Bhc3NSZWZQdHI8QXVkaW9CdXM+IEF1ZGlvQnVzOjpsb2FkUGxhdGZvcm1SZXNv
dXJjZShjb25zdCBjaGFyKiBuYW1lLCBmbG9hdCBzYW1wbGVSYXRlKQoreworICAgIFN0cmluZyBh
YnNvbHV0ZUZpbGVuYW1lKG1ha2VTdHJpbmcoREFUQV9ESVIsICIvd2ViYXVkaW8vcmVzb3VyY2Vz
LyIsIG5hbWUsICIud2F2IikpOworICAgIGNvbnN0IE5peDo6RGF0YSByZXNvdXJjZSA9IE5peDo6
UGxhdGZvcm06OmN1cnJlbnQoKS0+bG9hZFJlc291cmNlKGFic29sdXRlRmlsZW5hbWUudXRmOCgp
LmRhdGEoKSk7CisKKyAgICBpZiAocmVzb3VyY2UuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
UGFzc1JlZlB0cjxBdWRpb0J1cz4oKTsKKworICAgIC8vIEZJWE1FOiB0aGUgc2FtcGxlUmF0ZSBw
YXJhbWV0ZXIgaXMgaWdub3JlZC4gSXQgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSB0aGUgQVBJLgor
ICAgIFJlZlB0cjxBdWRpb0J1cz4gYXVkaW9CdXMgPSBkZWNvZGVBdWRpb0ZpbGVEYXRhKHJlc291
cmNlLmRhdGEoKSwgcmVzb3VyY2Uuc2l6ZSgpLCBzYW1wbGVSYXRlKTsKKworICAgIGlmICghYXVk
aW9CdXMuZ2V0KCkpCisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEF1ZGlvQnVzPigpOworCisg
ICAgLy8gSWYgdGhlIGJ1cyBpcyBhbHJlYWR5IGF0IHRoZSByZXF1ZXN0ZWQgc2FtcGxlLXJhdGUg
dGhlbiByZXR1cm4gYXMgaXMuCisgICAgaWYgKGF1ZGlvQnVzLT5zYW1wbGVSYXRlKCkgPT0gc2Ft
cGxlUmF0ZSkKKyAgICAgICAgcmV0dXJuIGF1ZGlvQnVzLnJlbGVhc2UoKTsKKworICAgIHJldHVy
biBBdWRpb0J1czo6Y3JlYXRlQnlTYW1wbGVSYXRlQ29udmVydGluZyhhdWRpb0J1cy5nZXQoKSwg
ZmFsc2UsIHNhbXBsZVJhdGUpOworfQorCitQYXNzUmVmUHRyPEF1ZGlvQnVzPiBjcmVhdGVCdXNG
cm9tSW5NZW1vcnlBdWRpb0ZpbGUoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGRhdGFTaXplLCBi
b29sIG1peFRvTW9ubywgZmxvYXQgc2FtcGxlUmF0ZSkKK3sKKyAgICAvLyBGSVhNRTogdGhlIHNh
bXBsZVJhdGUgcGFyYW1ldGVyIGlzIGlnbm9yZWQuIEl0IHNob3VsZCBiZSByZW1vdmVkIGZyb20g
dGhlIEFQSS4KKyAgICBSZWZQdHI8QXVkaW9CdXM+IGF1ZGlvQnVzID0gZGVjb2RlQXVkaW9GaWxl
RGF0YShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSksIGRhdGFTaXplLCBzYW1wbGVSYXRl
KTsKKyAgICBpZiAoIWF1ZGlvQnVzLmdldCgpKQorICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxB
dWRpb0J1cz4oKTsKKworICAgIC8vIElmIHRoZSBidXMgbmVlZHMgbm8gY29udmVyc2lvbiB0aGVu
IHJldHVybiBhcyBpcy4KKyAgICBpZiAoKCFtaXhUb01vbm8gfHwgYXVkaW9CdXMtPm51bWJlck9m
Q2hhbm5lbHMoKSA9PSAxKSAmJiBhdWRpb0J1cy0+c2FtcGxlUmF0ZSgpID09IHNhbXBsZVJhdGUp
CisgICAgICAgIHJldHVybiBhdWRpb0J1cy5yZWxlYXNlKCk7CisKKyAgICByZXR1cm4gQXVkaW9C
dXM6OmNyZWF0ZUJ5U2FtcGxlUmF0ZUNvbnZlcnRpbmcoYXVkaW9CdXMuZ2V0KCksIG1peFRvTW9u
bywgc2FtcGxlUmF0ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9uaXgvQXVkaW9EZXN0aW5hdGlvbk5peC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9uaXgvQXVkaW9EZXN0aW5hdGlvbk5peC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTc1MjEwMWRl
YTYyMGY3MjJmZjM5ZDdlODU2YjJiY2U0NzYyNjM0MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL25peC9BdWRpb0Rlc3RpbmF0aW9uTml4LmNwcApAQCAt
MCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVE
SU8pCisKKyNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uTml4LmgiCisKKyNpbmNsdWRlICJBdWRp
b0ZJRk8uaCIKKyNpbmNsdWRlICJBdWRpb1B1bGxGSUZPLmgiCisjaW5jbHVkZSA8cHVibGljL1Bs
YXRmb3JtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQnVmZmVyIHNpemUgYXQgd2hp
Y2ggdGhlIHdlYiBhdWRpbyBlbmdpbmUgd2lsbCByZW5kZXIuCitjb25zdCB1bnNpZ25lZCByZW5k
ZXJCdWZmZXJTaXplID0gMTI4OworCisvLyBTaXplIG9mIHRoZSBGSUZPCitjb25zdCBzaXplX3Qg
Zmlmb1NpemUgPSA4MTkyOworCisvLyBGYWN0b3J5IG1ldGhvZDogQ2hyb21pdW0taW1wbGVtZW50
YXRpb24KK1Bhc3NPd25QdHI8QXVkaW9EZXN0aW5hdGlvbj4gQXVkaW9EZXN0aW5hdGlvbjo6Y3Jl
YXRlKEF1ZGlvSU9DYWxsYmFjayYgY2FsbGJhY2ssIGNvbnN0IFN0cmluZyYgaW5wdXREZXZpY2VJ
ZCwgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCB1bnNpZ25lZCBudW1iZXJPZk91dHB1
dENoYW5uZWxzLCBmbG9hdCBzYW1wbGVSYXRlKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcg
QXVkaW9EZXN0aW5hdGlvbk5peChjYWxsYmFjaywgaW5wdXREZXZpY2VJZCwgbnVtYmVyT2ZJbnB1
dENoYW5uZWxzLCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBzYW1wbGVSYXRlKSk7Cit9CisKK0F1
ZGlvRGVzdGluYXRpb25OaXg6OkF1ZGlvRGVzdGluYXRpb25OaXgoQXVkaW9JT0NhbGxiYWNrJiBj
YWxsYmFjaywgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCB1
bnNpZ25lZCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBmbG9hdCBzYW1wbGVSYXRlKQorICAgIDog
bV9jYWxsYmFjayhjYWxsYmFjaykKKyAgICAsIG1fbnVtYmVyT2ZPdXRwdXRDaGFubmVscyhudW1i
ZXJPZk91dHB1dENoYW5uZWxzKQorICAgICwgbV9pbnB1dEJ1cyhBdWRpb0J1czo6Y3JlYXRlKG51
bWJlck9mSW5wdXRDaGFubmVscywgcmVuZGVyQnVmZmVyU2l6ZSkpCisgICAgLCBtX3JlbmRlckJ1
cyhBdWRpb0J1czo6Y3JlYXRlKG51bWJlck9mT3V0cHV0Q2hhbm5lbHMsIHJlbmRlckJ1ZmZlclNp
emUsIGZhbHNlKSkKKyAgICAsIG1fc2FtcGxlUmF0ZShzYW1wbGVSYXRlKQorICAgICwgbV9pc1Bs
YXlpbmcoZmFsc2UpCit7CisgICAgLy8gVXNlIHRoZSBvcHRpbWFsIGJ1ZmZlciBzaXplIHJlY29t
bWVuZGVkIGJ5IHRoZSBhdWRpbyBiYWNrZW5kLgorICAgIG1fY2FsbGJhY2tCdWZmZXJTaXplID0g
Tml4OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5hdWRpb0hhcmR3YXJlQnVmZmVyU2l6ZSgpOworCisg
ICAgLy8gUXVpY2sgZXhpdCBpZiB0aGUgcmVxdWVzdGVkIHNpemUgaXMgdG9vIGxhcmdlLgorICAg
IEFTU0VSVChtX2NhbGxiYWNrQnVmZmVyU2l6ZSArIHJlbmRlckJ1ZmZlclNpemUgPD0gZmlmb1Np
emUpOworICAgIGlmIChtX2NhbGxiYWNrQnVmZmVyU2l6ZSArIHJlbmRlckJ1ZmZlclNpemUgPiBm
aWZvU2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9hdWRpb0RldmljZSA9IGFkb3B0UHRy
KE5peDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3JlYXRlQXVkaW9EZXZpY2UobV9jYWxsYmFja0J1
ZmZlclNpemUsIG51bWJlck9mSW5wdXRDaGFubmVscywgbnVtYmVyT2ZPdXRwdXRDaGFubmVscywg
c2FtcGxlUmF0ZSwgdGhpcykpOworICAgIEFTU0VSVChtX2F1ZGlvRGV2aWNlKTsKKworICAgIC8v
IENyZWF0ZSBhIEZJRk8gdG8gaGFuZGxlIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGUgY2FsbGJhY2sg
c2l6ZQorICAgIC8vIG5vdCBiZWluZyBhIG11bHRpcGxlIG9mIHRoZSByZW5kZXIgc2l6ZS4gSWYg
dGhlIEZJRk8gYWxyZWFkeQorICAgIC8vIGNvbnRhaW5zIGVub3VnaCBkYXRhLCB0aGUgZGF0YSB3
aWxsIGJlIHByb3ZpZGVkIGRpcmVjdGx5LgorICAgIC8vIE90aGVyd2lzZSwgdGhlIEZJRk8gd2ls
bCBjYWxsIHRoZSBwcm92aWRlciBlbm91Z2ggdGltZXMgdG8KKyAgICAvLyBzYXRpc2Z5IHRoZSBy
ZXF1ZXN0IGZvciBkYXRhLgorICAgIG1fZmlmbyA9IGFkb3B0UHRyKG5ldyBBdWRpb1B1bGxGSUZP
KCp0aGlzLCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBmaWZvU2l6ZSwgcmVuZGVyQnVmZmVyU2l6
ZSkpOworCisgICAgLy8gSW5wdXQgYnVmZmVyaW5nLgorICAgIG1faW5wdXRGaWZvID0gYWRvcHRQ
dHIobmV3IEF1ZGlvRklGTyhudW1iZXJPZklucHV0Q2hhbm5lbHMsIGZpZm9TaXplKSk7CisKKyAg
ICAvLyBJZiB0aGUgY2FsbGJhY2sgc2l6ZSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVuZGVyIHNpemUs
IHRoZW4gd2UgbmVlZCB0byBidWZmZXIgc29tZQorICAgIC8vIGV4dHJhIHNpbGVuY2UgZm9yIHRo
ZSBpbnB1dC4gT3RoZXJ3aXNlLCB3ZSBjYW4gb3Zlci1jb25zdW1lIHRoZSBpbnB1dCBGSUZPLgor
ICAgIGlmIChtX2NhbGxiYWNrQnVmZmVyU2l6ZSAhPSByZW5kZXJCdWZmZXJTaXplKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBoYW5kbGUgbXVsdGktY2hhbm5lbCBpbnB1dCBhbmQgZG9uJ3QgaGFyZC1j
b2RlIHRvIHN0ZXJlby4KKyAgICAgICAgUmVmUHRyPEF1ZGlvQnVzPiBzaWxlbmNlID0gQXVkaW9C
dXM6OmNyZWF0ZSgyLCByZW5kZXJCdWZmZXJTaXplKTsKKyAgICAgICAgbV9pbnB1dEZpZm8tPnB1
c2goc2lsZW5jZS5nZXQoKSk7CisgICAgfQorfQorCitBdWRpb0Rlc3RpbmF0aW9uTml4Ojp+QXVk
aW9EZXN0aW5hdGlvbk5peCgpCit7CisgICAgc3RvcCgpOworfQorCit2b2lkIEF1ZGlvRGVzdGlu
YXRpb25OaXg6OnN0YXJ0KCkKK3sKKyAgICBpZiAoIW1faXNQbGF5aW5nICYmIG1fYXVkaW9EZXZp
Y2UpIHsKKyAgICAgICAgbV9hdWRpb0RldmljZS0+c3RhcnQoKTsKKyAgICAgICAgbV9pc1BsYXlp
bmcgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBBdWRpb0Rlc3RpbmF0aW9uTml4OjpzdG9wKCkK
K3sKKyAgICBpZiAobV9pc1BsYXlpbmcgJiYgbV9hdWRpb0RldmljZSkgeworICAgICAgICBtX2F1
ZGlvRGV2aWNlLT5zdG9wKCk7CisgICAgICAgIG1faXNQbGF5aW5nID0gZmFsc2U7CisgICAgfQor
fQorCitmbG9hdCBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJhdGUoKQoreworICAg
IHJldHVybiBOaXg6OlBsYXRmb3JtOjpjdXJyZW50KCktPmF1ZGlvSGFyZHdhcmVTYW1wbGVSYXRl
KCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgQXVkaW9EZXN0aW5hdGlvbjo6bWF4Q2hhbm5lbENvdW50
KCkKK3sKKyAgICByZXR1cm4gTml4OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5hdWRpb0hhcmR3YXJl
T3V0cHV0Q2hhbm5lbHMoKTsKK30KKwordm9pZCBBdWRpb0Rlc3RpbmF0aW9uTml4OjpyZW5kZXIo
Y29uc3QgTml4OjpWZWN0b3I8ZmxvYXQqPiYgc291cmNlRGF0YSwgY29uc3QgTml4OjpWZWN0b3I8
ZmxvYXQqPiYgYXVkaW9EYXRhLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMpCit7CisgICAgYm9vbCBp
c051bWJlck9mQ2hhbm5lbHNHb29kID0gYXVkaW9EYXRhLnNpemUoKSA9PSBtX251bWJlck9mT3V0
cHV0Q2hhbm5lbHM7CisgICAgaWYgKCFpc051bWJlck9mQ2hhbm5lbHNHb29kKSB7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYm9v
bCBpc0J1ZmZlclNpemVHb29kID0gbnVtYmVyT2ZGcmFtZXMgPT0gbV9jYWxsYmFja0J1ZmZlclNp
emU7CisgICAgaWYgKCFpc0J1ZmZlclNpemVHb29kKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQnVmZmVyIG9wdGlvbmFs
IGxpdmUgaW5wdXQuCisgICAgaWYgKHNvdXJjZURhdGEuc2l6ZSgpID49IDIpIHsKKyAgICAgICAg
Ly8gRklYTUU6IGhhbmRsZSBtdWx0aS1jaGFubmVsIGlucHV0IGFuZCBkb24ndCBoYXJkLWNvZGUg
dG8gc3RlcmVvLgorICAgICAgICBSZWZQdHI8QXVkaW9CdXM+IHdyYXBwZXJCdXMgPSBBdWRpb0J1
czo6Y3JlYXRlKDIsIG51bWJlck9mRnJhbWVzLCBmYWxzZSk7CisgICAgICAgIHdyYXBwZXJCdXMt
PnNldENoYW5uZWxNZW1vcnkoMCwgc291cmNlRGF0YVswXSwgbnVtYmVyT2ZGcmFtZXMpOworICAg
ICAgICB3cmFwcGVyQnVzLT5zZXRDaGFubmVsTWVtb3J5KDEsIHNvdXJjZURhdGFbMV0sIG51bWJl
ck9mRnJhbWVzKTsKKyAgICAgICAgbV9pbnB1dEZpZm8tPnB1c2god3JhcHBlckJ1cy5nZXQoKSk7
CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbnVtYmVyT2ZPdXRwdXRD
aGFubmVsczsgKytpKQorICAgICAgICBtX3JlbmRlckJ1cy0+c2V0Q2hhbm5lbE1lbW9yeShpLCBh
dWRpb0RhdGFbaV0sIG51bWJlck9mRnJhbWVzKTsKKworICAgIG1fZmlmby0+Y29uc3VtZShtX3Jl
bmRlckJ1cy5nZXQoKSwgbnVtYmVyT2ZGcmFtZXMpOworfQorCit2b2lkIEF1ZGlvRGVzdGluYXRp
b25OaXg6OnByb3ZpZGVJbnB1dChBdWRpb0J1cyogYnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNz
KQoreworICAgIFJlZlB0cjxBdWRpb0J1cz4gc291cmNlQnVzOworICAgIGlmIChtX2lucHV0Rmlm
by0+ZnJhbWVzSW5GaWZvKCkgPj0gZnJhbWVzVG9Qcm9jZXNzKSB7CisgICAgICAgIG1faW5wdXRG
aWZvLT5jb25zdW1lKG1faW5wdXRCdXMuZ2V0KCksIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAg
IHNvdXJjZUJ1cyA9IG1faW5wdXRCdXM7CisgICAgfQorCisgICAgbV9jYWxsYmFjay5yZW5kZXIo
c291cmNlQnVzLmdldCgpLCBidXMsIGZyYW1lc1RvUHJvY2Vzcyk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9uaXgvQXVkaW9EZXN0aW5hdGlvbk5peC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbml4L0F1ZGlvRGVzdGluYXRpb25OaXguaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wYWM0YWIwNTQyYjU4YjNiMzUyNTE5MTkxMTc2NDNmNmFjNGQzYWY5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbml4L0F1ZGlvRGVz
dGluYXRpb25OaXguaApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBdWRpb0Rlc3RpbmF0aW9u
Tml4X2gKKyNkZWZpbmUgQXVkaW9EZXN0aW5hdGlvbk5peF9oCisKKyNpbmNsdWRlICJBdWRpb0J1
cy5oIgorI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb24uaCIKKyNpbmNsdWRlICJBdWRpb0lPQ2Fs
bGJhY2suaCIKKyNpbmNsdWRlICJBdWRpb1NvdXJjZVByb3ZpZGVyLmgiCisjaW5jbHVkZSA8cHVi
bGljL0F1ZGlvRGV2aWNlLmg+CisjaW5jbHVkZSA8cHVibGljL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvRklGTzsKK2NsYXNzIEF1ZGlvUHVsbEZJRk87CisK
Ky8vIEFuIEF1ZGlvRGVzdGluYXRpb24gdXNpbmcgQ2hyb21pdW0ncyBhdWRpbyBzeXN0ZW0KKwor
Y2xhc3MgQXVkaW9EZXN0aW5hdGlvbk5peCA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uLCBwdWJs
aWMgTml4OjpBdWRpb0RldmljZTo6UmVuZGVyQ2FsbGJhY2ssIHB1YmxpYyBBdWRpb1NvdXJjZVBy
b3ZpZGVyIHsKK3B1YmxpYzoKKyAgICBBdWRpb0Rlc3RpbmF0aW9uTml4KEF1ZGlvSU9DYWxsYmFj
ayYsIGNvbnN0IFN0cmluZyYgaW5wdXREZXZpY2VJZCwgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dENo
YW5uZWxzLCB1bnNpZ25lZCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBmbG9hdCBzYW1wbGVSYXRl
KTsKKyAgICB2aXJ0dWFsIH5BdWRpb0Rlc3RpbmF0aW9uTml4KCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgc3RhcnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOworICAgIGJvb2wgaXNQbGF5aW5n
KCkgeyByZXR1cm4gbV9pc1BsYXlpbmc7IH0KKworICAgIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25z
dCB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0KKworICAgIC8vIFdlYktpdDo6V2ViQXVkaW9EZXZp
Y2U6OlJlbmRlckNhbGxiYWNrCisgICAgdmlydHVhbCB2b2lkIHJlbmRlcihjb25zdCBOaXg6OlZl
Y3RvcjxmbG9hdCo+JiBzb3VyY2VEYXRhLCBjb25zdCBOaXg6OlZlY3RvcjxmbG9hdCo+JiBhdWRp
b0RhdGEsIHNpemVfdCBudW1iZXJPZkZyYW1lcyk7CisKKyAgICAvLyBXZWJDb3JlOjpBdWRpb1Nv
dXJjZVByb3ZpZGVyCisgICAgdmlydHVhbCB2b2lkIHByb3ZpZGVJbnB1dChBdWRpb0J1cyosIHNp
emVfdCBmcmFtZXNUb1Byb2Nlc3MpOworCitwcml2YXRlOgorICAgIEF1ZGlvSU9DYWxsYmFjayYg
bV9jYWxsYmFjazsKKyAgICB1bnNpZ25lZCBtX251bWJlck9mT3V0cHV0Q2hhbm5lbHM7CisgICAg
UmVmUHRyPEF1ZGlvQnVzPiBtX2lucHV0QnVzOworICAgIFJlZlB0cjxBdWRpb0J1cz4gbV9yZW5k
ZXJCdXM7CisgICAgZmxvYXQgbV9zYW1wbGVSYXRlOworICAgIGJvb2wgbV9pc1BsYXlpbmc7Cisg
ICAgT3duUHRyPE5peDo6QXVkaW9EZXZpY2U+IG1fYXVkaW9EZXZpY2U7CisgICAgc2l6ZV90IG1f
Y2FsbGJhY2tCdWZmZXJTaXplOworCisgICAgT3duUHRyPEF1ZGlvRklGTz4gbV9pbnB1dEZpZm87
CisgICAgT3duUHRyPEF1ZGlvUHVsbEZJRk8+IG1fZmlmbzsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEF1ZGlvRGVzdGluYXRpb25OaXhfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbml4L0ZGVEZyYW1lTml4LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL25peC9GRlRGcmFtZU5peC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MTQyN2IzZTZiNDAxNTIyNzQyZDJiYzAzNjgxNjg3YzQ3Nzg4YTg4MAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL25peC9GRlRGcmFtZU5peC5jcHAKQEAg
LTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxMyBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKyNpbmNsdWRlICJGRlRGcmFtZS5oIgor
CisjaW5jbHVkZSAiVmVjdG9yTWF0aC5oIgorI2luY2x1ZGUgPGNtYXRoPgorI2luY2x1ZGUgPHB1
YmxpYy9GRlRGcmFtZS5oPgorI2luY2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0ZGVEZyYW1lOjpGRlRGcmFtZSh1bnNpZ25lZCBmZnRTaXplKQorICAg
IDogbV9GRlRTaXplKGZmdFNpemUpCisgICAgLCBtX2xvZzJGRlRTaXplKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihsb2cyKGZmdFNpemUpKSkKK3sKKyAgICBtX2ZmdEZyYW1lID0gYWRvcHRQdHIoTml4
OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jcmVhdGVGRlRGcmFtZShmZnRTaXplKSk7Cit9CisKK0ZG
VEZyYW1lOjpGRlRGcmFtZShjb25zdCBGRlRGcmFtZSYgZnJhbWUpCisgICAgOiBtX0ZGVFNpemUo
ZnJhbWUubV9GRlRTaXplKQorICAgICwgbV9sb2cyRkZUU2l6ZShmcmFtZS5tX2xvZzJGRlRTaXpl
KQoreworICAgIG1fZmZ0RnJhbWUgPSBhZG9wdFB0cihOaXg6OlBsYXRmb3JtOjpjdXJyZW50KCkt
PmNyZWF0ZUZGVEZyYW1lKGZyYW1lLm1fZmZ0RnJhbWUuZ2V0KCkpKTsKK30KKworRkZURnJhbWU6
On5GRlRGcmFtZSgpCit7CisgICAgbV9mZnRGcmFtZS5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgRkZU
RnJhbWU6Om11bHRpcGx5KGNvbnN0IEZGVEZyYW1lJiBmcmFtZSkKK3sKKyAgICBpZiAoIW1fZmZ0
RnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZmZ0RnJhbWUtPm11bHRpcGx5KCpmcmFt
ZS5tX2ZmdEZyYW1lKTsKKworICAgIC8vIFNjYWxlIGFjY291bnRzIHRoZSBwZWN1bGlhciBzY2Fs
aW5nIG9mIHZlY0xpYiBvbiB0aGUgTWFjLgorICAgIC8vIFRoaXMgZW5zdXJlcyB0aGUgcmlnaHQg
c2NhbGluZyBhbGwgdGhlIHdheSBiYWNrIHRvIGludmVyc2UgRkZULgorICAgIC8vIEZJWE1FOiBp
ZiB3ZSBjaGFuZ2UgdGhlIHNjYWxpbmcgb24gdGhlIE1hYyB0aGVuIHRoaXMgc2NhbGUKKyAgICAv
LyBmYWN0b3Igd2lsbCBuZWVkIHRvIGNoYW5nZSB0b28uCisgICAgc2NhbGVQbGFuYXJEYXRhKDAu
NWYpOworfQorCisvLyBQcm92aWRlcyB0aW1lIGRvbWFpbiBzYW1wbGVzIGluIGFyZ3VtZW50ICJk
YXRhIi4gRnJhbWUgd2lsbCBzdG9yZSB0aGUgdHJhbnNmb3JtZWQgZGF0YS4KK3ZvaWQgRkZURnJh
bWU6OmRvRkZUKGNvbnN0IGZsb2F0KiBkYXRhKQoreworICAgIGlmICghbV9mZnRGcmFtZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9mZnRGcmFtZS0+ZG9GRlQoZGF0YSk7CisKKyAgICBzY2Fs
ZVBsYW5hckRhdGEoMi4wZik7Cit9CisKKy8vIENhbGN1bGF0ZXMgaW52ZXJzZSB0cmFuc2Zvcm0g
ZnJvbSB0aGUgc3RvcmVkIGRhdGEsIHB1dHRpbmcgdGhlIHJlc3VsdHMgaW4gYXJndW1lbnQgJ2Rh
dGEnLgordm9pZCBGRlRGcmFtZTo6ZG9JbnZlcnNlRkZUKGZsb2F0KiBkYXRhKQoreworICAgIGlm
ICghbV9mZnRGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9mZnRGcmFtZS0+ZG9JbnZl
cnNlRkZUKGRhdGEpOworCisgICAgLy8gU2NhbGUgc28gdGhhdCBhIGZvcndhcmQgdGhlbiBpbnZl
cnNlIEZGVCB5aWVsZHMgZXhhY3RseSB0aGUgb3JpZ2luYWwgZGF0YS4KKyAgICBjb25zdCBmbG9h
dCBzY2FsZSA9IDEuMCAvICgyICogbV9GRlRTaXplKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9GRlRTaXplOyArK2kpCisgICAgICAgIGRhdGFbaV0gPSBzY2FsZSAqIGRhdGFbaV07
Cit9CisKK3ZvaWQgRkZURnJhbWU6OmluaXRpYWxpemUoKQoreworfQorCit2b2lkIEZGVEZyYW1l
OjpjbGVhbnVwKCkKK3sKK30KKwordm9pZCBGRlRGcmFtZTo6c2NhbGVQbGFuYXJEYXRhKGZsb2F0
IHNjYWxlKQoreworICAgIGZsb2F0KiByZWFsUCA9IG1fZmZ0RnJhbWUtPnJlYWxEYXRhKCk7Cisg
ICAgZmxvYXQqIGltYWdQID0gbV9mZnRGcmFtZS0+aW1hZ0RhdGEoKTsKKworICAgIGNvbnN0IHVu
c2lnbmVkIGZyYW1lc1RvUHJvY2VzcyA9IG1fZmZ0RnJhbWUtPmZyZXF1ZW5jeURvbWFpblNhbXBs
ZUNvdW50KCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhbWVzVG9Qcm9jZXNz
OyArK2kpIHsKKyAgICAgICAgcmVhbFBbaV0gKj0gc2NhbGU7CisgICAgICAgIGltYWdQW2ldICo9
IHNjYWxlOworICAgIH0KK30KKworZmxvYXQqIEZGVEZyYW1lOjpyZWFsRGF0YSgpIGNvbnN0Cit7
CisgICAgaWYgKCFtX2ZmdEZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBj
b25zdF9jYXN0PGZsb2F0Kj4obV9mZnRGcmFtZS0+cmVhbERhdGEoKSk7Cit9CisKK2Zsb2F0KiBG
RlRGcmFtZTo6aW1hZ0RhdGEoKSBjb25zdAoreworICAgIGlmICghbV9mZnRGcmFtZSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gY29uc3RfY2FzdDxmbG9hdCo+KG1fZmZ0RnJhbWUt
PmltYWdEYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4
L3N1cHBvcnQvQXVkaW9CdXNOaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L3N1
cHBvcnQvQXVkaW9CdXNOaXguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5YmM0ODQ3MjAyN2VhYWM5ZTFjNzY5
OWMyODI0ZjA1NGMwYzY5NmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uaXgvc3VwcG9ydC9BdWRpb0J1c05peC5jcHAKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8cHVibGljL0F1ZGlvQnVzLmg+
CisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisjZWxzZQor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQXVkaW9CdXMgeworfTsKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKyNlbmRpZgorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ug
Tml4IHsKKworY2xhc3MgQXVkaW9CdXNQcml2YXRlIHsKK3B1YmxpYzoKKyAgICBBdWRpb0J1c1By
aXZhdGUoUGFzc1JlZlB0cjxXZWJDb3JlOjpBdWRpb0J1cz4gYXVkaW9CdXMpCisgICAgICAgIDog
bV9hdWRpb0J1cyhhdWRpb0J1cykKKyAgICB7IH0KKworICAgIFJlZlB0cjxXZWJDb3JlOjpBdWRp
b0J1cz4gbV9hdWRpb0J1czsKK307CisKK3ZvaWQgQXVkaW9CdXM6OmluaXRpYWxpemUodW5zaWdu
ZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IGxlbmd0aCwgZG91YmxlIHNhbXBsZVJhdGUpCit7
CisjaWYgRU5BQkxFKFdFQl9BVURJTykKKyAgICBpZiAobV9kKQorICAgICAgICBkZWxldGUgbV9k
OworICAgIG1fZCA9IG5ldyBBdWRpb0J1c1ByaXZhdGUoV2ViQ29yZTo6QXVkaW9CdXM6OmNyZWF0
ZShudW1iZXJPZkNoYW5uZWxzLCBsZW5ndGgpKTsKKyAgICBtX2QtPm1fYXVkaW9CdXMtPnNldFNh
bXBsZVJhdGUoc2FtcGxlUmF0ZSk7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
I2VuZGlmCit9CisKK3ZvaWQgQXVkaW9CdXM6OnJlc2l6ZVNtYWxsZXIoc2l6ZV90IG5ld0xlbmd0
aCkKK3sKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIEFTU0VSVChtX2QpOworICAgIGlmICht
X2QpIHsKKyAgICAgICAgQVNTRVJUKG5ld0xlbmd0aCA8PSBsZW5ndGgoKSk7CisgICAgICAgIG1f
ZC0+bV9hdWRpb0J1cy0+cmVzaXplU21hbGxlcihuZXdMZW5ndGgpOworICAgIH0KKyNlbHNlCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwordm9pZCBBdWRpb0J1czo6cmVz
ZXQoKQoreworI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAgZGVsZXRlIG1fZDsKKyAgICBtX2Qg
PSAwOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQorCit1bnNp
Z25lZCBBdWRpb0J1czo6bnVtYmVyT2ZDaGFubmVscygpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFdF
Ql9BVURJTykKKyAgICBpZiAoIW1fZCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1f
ZC0+bV9hdWRpb0J1cy0+bnVtYmVyT2ZDaGFubmVscygpOworI2Vsc2UKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCitzaXplX3QgQXVkaW9CdXM6
Omxlbmd0aCgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFdFQl9BVURJTykKKyAgICBpZiAoIW1fZCkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fZC0+bV9hdWRpb0J1cy0+bGVuZ3RoKCk7
CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworI2VuZGlm
Cit9CisKK2RvdWJsZSBBdWRpb0J1czo6c2FtcGxlUmF0ZSgpIGNvbnN0Cit7CisjaWYgRU5BQkxF
KFdFQl9BVURJTykKKyAgICBpZiAoIW1fZCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IG1fZC0+bV9hdWRpb0J1cy0+c2FtcGxlUmF0ZSgpOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCitmbG9hdCogQXVkaW9CdXM6OmNo
YW5uZWxEYXRhKHVuc2lnbmVkIGNoYW5uZWxJbmRleCkKK3sKKyNpZiBFTkFCTEUoV0VCX0FVRElP
KQorICAgIGlmICghbV9kKQorICAgICAgICByZXR1cm4gMDsKKyAgICBBU1NFUlQoY2hhbm5lbElu
ZGV4IDwgbnVtYmVyT2ZDaGFubmVscygpKTsKKyAgICByZXR1cm4gbV9kLT5tX2F1ZGlvQnVzLT5j
aGFubmVsKGNoYW5uZWxJbmRleCktPm11dGFibGVEYXRhKCk7CisjZWxzZQorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK1Bhc3NSZWZQdHI8V2Vi
Q29yZTo6QXVkaW9CdXM+IEF1ZGlvQnVzOjphdWRpb0J1cygpCit7CisjaWYgRU5BQkxFKFdFQl9B
VURJTykKKyAgICByZXR1cm4gbV9kLT5tX2F1ZGlvQnVzOworI2Vsc2UKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9zdXBw
b3J0L0RhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L3N1cHBvcnQvRGF0YS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNGM3ZmQ0MDBmNWNjNTk3MjUxODVlMmRiMzkwMjFlYWQ3YmQ2YjQwMwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9zdXBwb3J0L0Rh
dGEuY3BwCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHB1
YmxpYy9EYXRhLmg+CisKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKworbmFtZXNwYWNlIE5p
eCB7CisKK2NsYXNzIERhdGE6OkRhdGFQcml2YXRlIDogcHVibGljIFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlciB7Cit9OworCit2b2lkIERhdGE6OnJlc2V0KCkKK3sKKyAgICBpZiAobV9wcml2YXRlKSB7
CisgICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAgICAgICAgbV9wcml2YXRlID0gMDsKKyAg
ICB9Cit9CisKK3ZvaWQgRGF0YTo6YXNzaWduKGNvbnN0IERhdGEmIG90aGVyKQoreworICAgIERh
dGFQcml2YXRlKiBwID0gY29uc3RfY2FzdDxEYXRhUHJpdmF0ZSo+KG90aGVyLm1fcHJpdmF0ZSk7
CisgICAgaWYgKHApCisgICAgICAgIHAtPnJlZigpOworICAgIGFzc2lnbihwKTsKK30KKwordm9p
ZCBEYXRhOjphc3NpZ24oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgYXNz
aWduKHN0YXRpY19jYXN0PERhdGFQcml2YXRlKj4oCisgICAgICAgIFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKGRhdGEsIHNpemUpLmxlYWtSZWYoKSkpOworfQorCitzaXplX3QgRGF0YTo6
c2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ByaXZhdGUpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBjb25zdF9jYXN0PERhdGFQcml2YXRlKj4obV9wcml2YXRlKS0+c2l6ZSgpOwor
fQorCitjb25zdCBjaGFyKiBEYXRhOjpkYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0
ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8RGF0YVByaXZhdGUq
PihtX3ByaXZhdGUpLT5kYXRhKCk7Cit9CisKK0RhdGE6OkRhdGEoY29uc3QgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiBidWZmZXIpCisgICAgOiBtX3ByaXZhdGUoc3RhdGljX2Nh
c3Q8RGF0YVByaXZhdGUqPihidWZmZXIubGVha1JlZigpKSkKK3sKK30KKworRGF0YSYgRGF0YTo6
b3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYgYnVmZmVy
KQoreworICAgIGFzc2lnbihzdGF0aWNfY2FzdDxEYXRhUHJpdmF0ZSo+KGJ1ZmZlci5sZWFrUmVm
KCkpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0RhdGE6Om9wZXJhdG9yIFBhc3NSZWZQdHI8
V2ViQ29yZTo6U2hhcmVkQnVmZmVyPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8
V2ViQ29yZTo6U2hhcmVkQnVmZmVyPihjb25zdF9jYXN0PERhdGFQcml2YXRlKj4obV9wcml2YXRl
KSk7Cit9CisKK3ZvaWQgRGF0YTo6YXNzaWduKERhdGFQcml2YXRlKiBwKQoreworICAgIC8vIHAg
aXMgYWxyZWFkeSByZWYnZCBmb3IgdXMgYnkgdGhlIGNhbGxlcgorICAgIGlmIChtX3ByaXZhdGUp
CisgICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAgICBtX3ByaXZhdGUgPSBwOworfQorCit9
IC8vIG5hbWVzcGFjZSBOaXgKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0No
YW5nZUxvZwppbmRleCA0NDAxZjU2YzM5MmY0YTY2OGNlNDlkNjkyNmRiZmRlNDg2ZDI3YWRiLi5j
MTU3YjU3ODg2YTQ1NmI5YTNkM2U5MGM2ZTcyNjUyYzk0ODRmNDlkIDEwMDY0NAotLS0gYS9Ub29s
cy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTMt
MDktMDkgIEh1Z28gUGFyZW50ZSBMaW1hICA8aHVnby5saW1hQG9wZW5ib3NzYS5vcmc+CisKKyAg
ICAgICAgQWRkaW5nIE5peCBmaWxlcyBpbiBTb3VyY2UvUGxhdGZvcm0gdG8gdHJ1bmsKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODMzMQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIHNwZWNpYWwg
cnVsZSBmb3IgTml4IEFQSSBmaWxlcyBsb2NhdGVkIGF0IFNvdXJjZS9QbGF0Zm9ybS9uaXguCisK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHk6CisKIDIwMTMtMDkt
MDkgIEtyenlzenRvZiBDemVjaCAgPGsuY3plY2hAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0FY
XVtBVEtdIEFjY2Vzc2liaWxpdHlPYmplY3QgcmVwcmVzZW50aW5nIFByb2dyZXNzQmFyIGVsZW1l
bnQgc2hvdWxkIGJlIEFUS19WQUxVRSB0eXBlCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL2NoZWNrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2No
ZWNrZXIucHkKaW5kZXggZWY3MjM3YmVkZjZkM2VhMDBhMTAxM2RiNmJkZmY5ZDlmMDk4ODg3Zi4u
OGVlZWZmYWI0ZDJkM2U5NTk0OTNkZjYwMjM2MmZiZmYxMjBhZWQ0OCAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQpAQCAtMTkxLDcgKzE5MSwxMSBAQCBfUEFUSF9SVUxF
U19TUEVDSUZJRVIgPSBbCiAKICAgICAoWyMgSGVhZGVyIGZpbGVzIGluIEZvcndhcmRpbmdIZWFk
ZXJzIGhhdmUgbm8gaGVhZGVyIGd1YXJkcyBvcgogICAgICAgIyBleGNlcHRpb25hbCBoZWFkZXIg
Z3VhcmRzIChlLmcuLCBXZWJDb3JlX0ZXRF9EZWJ1Z2dlcl9oKS4KLSAgICAgICIvRm9yd2FyZGlu
Z0hlYWRlcnMvIl0sCisgICAgICAiL0ZvcndhcmRpbmdIZWFkZXJzLyIsCisgICAgICAjIE5peCBw
bGF0Zm9ybSBBUEkgY2xhc3NlcyB1c2VzIGNvbW1vbiBuYW1lcyB1bmRlciBOaXggbmFtZXNwYWNl
CisgICAgICAjIHNvIHRoZSBpbmNsdWRlIGd1YXJkcyBzaG91bGQgYWxzbyBpbmNsdWRlIHRoZSBu
YW1lc3BhY2UgdG8gYXZvaWQKKyAgICAgICMgbmFtZSBjbGFzaCB3aXRoIG90aGVyIGZpbGVzLCBl
LmcuIENhbnZhc19oLCBWZWN0b3JfaCwgZXRjLgorICAgICAgIlNvdXJjZS9QbGF0Zm9ybS9uaXgi
XSwKICAgICAgWyItYnVpbGQvaGVhZGVyX2d1YXJkIl0pLAogICAgIChbIyBhc3NlbWJsZXIgaGFz
IGxvdHMgb2Ygb3Bjb2RlcyB0aGF0IHVzZSB1bmRlcnNjb3Jlcywgc28KICAgICAgICMgd2UgZG9u
J3QgY2hlY2sgZm9yIHVuZGVyc2NvcmVzIGluIHRoYXQgZGlyZWN0b3J5Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211220</attachid>
            <date>2013-09-10 12:08:48 -0700</date>
            <delta_ts>2013-10-25 11:12:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118331-20130910161028.patch</filename>
            <type>text/plain</type>
            <size>87080</size>
            <attacher name="Hugo Parente Lima">hugo.lima</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU1MzYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBlY2I4NTg4N2RmMjc4
ZWEwOGU4ODM1ZjBlYjI4MTJkMmExZTE3MzNkLi41OTAyODgzOTMxODg1YmJhMDhhYTk5MmJkMTYx
YTJiNTk2OGE2MWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxMy0wOS0wOSAg
SHVnbyBQYXJlbnRlIExpbWEgIDxodWdvLmxpbWFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBB
ZGRpbmcgTml4IGZpbGVzIGluIFNvdXJjZS9QbGF0Zm9ybSB0byB0cnVuaworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4MzMxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGZpbGVzIHBhcnQgb2YgTml4
IHB1YmxpYyBBUEkgdXNlZCB0byBpbXBsZW1lbnQKKyAgICAgICAgYmFja2VuZHMgZm9yIHNvbWUg
V2ViS2l0IHN1YnN5c3RlbXMgb24gQXBwbGljYXRpb24gc2lkZS4KKworICAgICAgICAqIG5peC9w
dWJsaWMvQXVkaW9CdXMuaDogQWRkZWQuCisgICAgICAgICogbml4L3B1YmxpYy9BdWRpb0Rldmlj
ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBuaXgvcHVibGljL0NhbnZhcy5oOiBBZGRlZC4KKyAgICAg
ICAgKiBuaXgvcHVibGljL0NvbG9yLmg6IEFkZGVkLgorICAgICAgICAqIG5peC9wdWJsaWMvQ29t
bW9uLmg6IEFkZGVkLgorICAgICAgICAqIG5peC9wdWJsaWMvRGF0YS5oOiBBZGRlZC4KKyAgICAg
ICAgKiBuaXgvcHVibGljL0ZGVEZyYW1lLmg6IEFkZGVkLgorICAgICAgICAqIG5peC9wdWJsaWMv
R2FtZXBhZC5oOiBBZGRlZC4KKyAgICAgICAgKiBuaXgvcHVibGljL0dhbWVwYWRzLmg6IEFkZGVk
LgorICAgICAgICAqIG5peC9wdWJsaWMvUGxhdGZvcm0uaDogQWRkZWQuCisgICAgICAgICogbml4
L3B1YmxpYy9SZWN0Lmg6IEFkZGVkLgorICAgICAgICAqIG5peC9wdWJsaWMvU2l6ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBuaXgvcHVibGljL1RoZW1lRW5naW5lLmg6IEFkZGVkLgorICAgICAgICAq
IG5peC9zcmMvRGVmYXVsdFdlYlRoZW1lRW5naW5lLmNwcDogQWRkZWQuCisgICAgICAgICogbml4
L3NyYy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUuaDogQWRkZWQuCisgICAgICAgICogbml4L3NyYy9Q
bGF0Zm9ybS5jcHA6IEFkZGVkLgorCiAyMDEzLTA2LTE0ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJz
ZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIEdUSyBidWlsZCBmaXguCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggMjU0YWFlOTQ0NGViOTdiNzY3MGFjYzBjYjRmNTdmOWZmMWRmZjVlMC4uODk0Nzk2
YzFmMTg1MDY3MWYxYjVhYTk0MTE0MTAyZmYzMGM5Y2EyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIwIEBACisyMDEzLTA5LTA5ICBIdWdvIFBhcmVudGUgTGltYSAgPGh1Z28ubGltYUBvcGVuYm9z
c2Eub3JnPgorCisgICAgICAgIEFkZGluZyBOaXggZmlsZXMgaW4gU291cmNlL1BsYXRmb3JtIHRv
IHRydW5rCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTgzMzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgTml4IFdlYkF1ZGlvIGltcGxlbWVudGF0aW9uIHRoYXQganVzdCBmb3J3YXJkIHNvbWUgY2Fs
bHMgdG8gb3VyIEFQSS4KKyAgICAgICAgVGhpcyBwYXRjaCBpcyBwYXJ0IG9mIHRoZSB1cHN0cmVh
bSBwcm9jZXNzLCB0ZXN0cyB3aWxsIGJlIGxhbmRlZCBieSBvdGhlciBwYXRjaGVzLgorCisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW8vbml4L0F1ZGlvQnVzTml4LmNwcDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vYXVkaW8vbml4L0F1ZGlvRGVzdGluYXRpb25OaXguY3BwOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9hdWRpby9uaXgvQXVkaW9EZXN0aW5hdGlvbk5peC5oOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9uaXgvRkZURnJhbWVOaXguY3BwOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9uaXgvc3VwcG9ydC9BdWRpb0J1c05peC5jcHA6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL25peC9zdXBwb3J0L0RhdGEuY3BwOiBBZGRlZC4KKwogMjAxMy0wOS0w
OSAgTHVjaWFubyBXb2xmICA8bHVjaWFuby53b2xmQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAg
Tml4IHVwc3RyZWFtaW5nIC0gQWRkaW5nIHN0dWJzIGFuZCBOaXggc3BlY2lmaWMgcGxhdGZvcm0g
ZmlsZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0F1ZGlvQnVzLmgg
Yi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9BdWRpb0J1cy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhYmIx
YmYwZjE0YzBjNTQ0ODM1NDYyOWJjOWY2MzIyZGM5OThkNzAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9BdWRpb0J1cy5oCkBAIC0wLDAgKzEsNzkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIE5peF9BdWRpb0J1c19oCisjZGVmaW5lIE5peF9BdWRpb0J1c19o
CisKKyNpbmNsdWRlICJDb21tb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBBdWRp
b0J1czsgfQorCisjaWZkZWYgQlVJTERJTkdfTklYX18KK25hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1JlZlB0cjsgfQorI2VuZGlmCisKK25hbWVzcGFjZSBO
aXggeworCitjbGFzcyBBdWRpb0J1c1ByaXZhdGU7CisKKy8vIEEgY29udGFpbmVyIGZvciBtdWx0
aS1jaGFubmVsIGxpbmVhciBQQ00gYXVkaW8gZGF0YS4KKy8vCisvLyBXQVJOSU5HOiBJdCBpcyBu
b3Qgc2FmZSB0byBwYXNzIGEgQXVkaW9CdXMgYWNyb3NzIHRocmVhZHMhISEKKy8vCitjbGFzcyBB
dWRpb0J1cyB7CitwdWJsaWM6CisgICAgQXVkaW9CdXMoKSA6IG1fZCgwKSB7IH0KKyAgICB+QXVk
aW9CdXMoKSB7IHJlc2V0KCk7IH0KKworICAgIC8vIGluaXRpYWxpemUoKSBhbGxvY2F0ZXMgbWVt
b3J5IG9mIHRoZSBnaXZlbiBsZW5ndGggZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YgY2hhbm5lbHMu
CisgICAgTklYX0VYUE9SVCB2b2lkIGluaXRpYWxpemUodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVs
cywgc2l6ZV90IGxlbmd0aCwgZG91YmxlIHNhbXBsZVJhdGUpOworCisgICAgLy8gcmVzaXplU21h
bGxlcigpIGNhbiBvbmx5IGJlIGNhbGxlZCBhZnRlciBpbml0aWFsaXplKCkgd2l0aCBhIG5ldyBs
ZW5ndGggPD0gdGhlIGluaXRpYWxpemF0aW9uIGxlbmd0aC4KKyAgICAvLyBUaGUgZGF0YSBzdG9y
ZWQgaW4gdGhlIGJ1cyB3aWxsIHJlbWFpbiB1bmRpc3R1cmJlZC4KKyAgICBOSVhfRVhQT1JUIHZv
aWQgcmVzaXplU21hbGxlcihzaXplX3QgbmV3TGVuZ3RoKTsKKworICAgIC8vIHJlc2V0KCkgcmVs
ZWFzZXMgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgZnJvbSBpbml0aWFsaXplKCkuCisgICAgTklYX0VY
UE9SVCB2b2lkIHJlc2V0KCk7CisKKyAgICBOSVhfRVhQT1JUIHVuc2lnbmVkIG51bWJlck9mQ2hh
bm5lbHMoKSBjb25zdDsKKyAgICBOSVhfRVhQT1JUIHNpemVfdCBsZW5ndGgoKSBjb25zdDsKKyAg
ICBOSVhfRVhQT1JUIGRvdWJsZSBzYW1wbGVSYXRlKCkgY29uc3Q7CisKKyAgICBOSVhfRVhQT1JU
IGZsb2F0KiBjaGFubmVsRGF0YSh1bnNpZ25lZCBjaGFubmVsSW5kZXgpOworCisjaWZkZWYgQlVJ
TERJTkdfTklYX18KKyAgICBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6QXVkaW9CdXM+IGF1ZGlv
QnVzKCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICAvLyBEaXNhbGxvdyBjb3B5IGFuZCBhc3Np
Z24uCisgICAgQXVkaW9CdXMoY29uc3QgQXVkaW9CdXMmKTsKKyAgICB2b2lkIG9wZXJhdG9yPShj
b25zdCBBdWRpb0J1cyYpOworCisgICAgQXVkaW9CdXNQcml2YXRlKiBtX2Q7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBOaXgKKworI2VuZGlmIC8vIE5peF9BdWRpb0J1c19oCmRpZmYgLS1naXQgYS9T
b3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9BdWRpb0RldmljZS5oIGIvU291cmNlL1BsYXRmb3Jt
L25peC9wdWJsaWMvQXVkaW9EZXZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NTZhODA3YjRhNDFiYmZhYzNh
Y2QwNmFkZmJlZTIwZjZkYmFmZTUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3Jt
L25peC9wdWJsaWMvQXVkaW9EZXZpY2UuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOaXhf
QXVkaW9EZXZpY2VfaAorI2RlZmluZSBOaXhfQXVkaW9EZXZpY2VfaAorCisjaW5jbHVkZSA8Y3N0
ZGRlZj4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBOaXggeworCitjbGFzcyBBdWRp
b0RldmljZSB7CitwdWJsaWM6CisgICAgY2xhc3MgUmVuZGVyQ2FsbGJhY2sgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbmRlcihjb25zdCBzdGQ6OnZlY3RvcjxmbG9hdCo+
JiAvKnNvdXJjZURhdGEqLywgY29uc3Qgc3RkOjp2ZWN0b3I8ZmxvYXQqPiYgLypkZXN0aW5hdGlv
bkRhdGEqLywgc2l6ZV90IC8qbnVtYmVyT2ZGcmFtZXMqLykgeyB9CisKKyAgICBwcm90ZWN0ZWQ6
CisgICAgICAgIHZpcnR1YWwgflJlbmRlckNhbGxiYWNrKCkgeyB9CisgICAgfTsKKworICAgIHZp
cnR1YWwgfkF1ZGlvRGV2aWNlKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7CisgICAgdmlydHVhbCBkb3VibGUgc2FtcGxl
UmF0ZSgpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIE5peAorCisjZW5kaWYgLy8gV2ViQXVk
aW9EZXZpY2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvQ2FudmFz
LmggYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9DYW52YXMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOTYz
MjQ2MmI1MjQ3Y2RiN2FjNThmZGVhNzVkMjMzYTM5ZDVhNDI3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvQ2FudmFzLmgKQEAgLTAsMCArMSwzNSBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOaXhfQ2FudmFzX2gK
KyNkZWZpbmUgTml4X0NhbnZhc19oCisKKyNpbmNsdWRlIDxjYWlyby9jYWlyby5oPgorCituYW1l
c3BhY2UgTml4IHsKK3R5cGVkZWYgY2Fpcm9fdCBDYW52YXM7Cit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvQ29sb3IuaCBiL1NvdXJjZS9QbGF0Zm9y
bS9uaXgvcHVibGljL0NvbG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDJkYTc4OGFlZDEyYjEyMzk1NjNjZWNm
NzhiMjZlNTE1NzNmNjIwNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgv
cHVibGljL0NvbG9yLmgKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBOaXhfQ29sb3JfaAorI2RlZmluZSBOaXhfQ29sb3JfaAor
CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgTml4IHsKKwordHlwZWRlZiB1bnNp
Z25lZCBSR0JBMzI7IC8vIFJHQkEgcXVhZHJ1cGxldAorCitzdHJ1Y3QgQ29sb3IgeworICAgIHN0
YXRpYyBjb25zdCBSR0JBMzIgYmxhY2sgPSAweEZGMDAwMDAwOworICAgIHN0YXRpYyBjb25zdCBS
R0JBMzIgd2hpdGUgPSAweEZGRkZGRkZGOworICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgZGFya0dy
YXkgPSAweEZGODA4MDgwOworICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgZ3JheSA9IDB4RkZBMEEw
QTA7CisgICAgc3RhdGljIGNvbnN0IFJHQkEzMiBsaWdodEdyYXkgPSAweEZGQzBDMEMwOworICAg
IHN0YXRpYyBjb25zdCBSR0JBMzIgdHJhbnNwYXJlbnQgPSAweDAwMDAwMDAwOworCisgICAgUkdC
QTMyIHJnYmE7CisKKyAgICBDb2xvcigpCisgICAgICAgIDogcmdiYShDb2xvcjo6YmxhY2spCisg
ICAgeworICAgIH0KKworICAgIENvbG9yKFJHQkEzMiByZ2JhKQorICAgICAgICA6IHJnYmEocmdi
YSkKKyAgICB7CisgICAgfQorCisgICAgQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEg
PSAyNTUpCisgICAgICAgIDogcmdiYShzdGQ6Om1heCgwLCBzdGQ6Om1pbihhLCAyNTUpKSA8PCAy
NCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKHIsIDI1NSkpIDw8IDE2IHwgc3RkOjptYXgoMCwgc3Rk
OjptaW4oZywgMjU1KSkgPDwgOCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGIsIDI1NSkpKQorICAg
IHsKKyAgICB9CisKKyAgICBvcGVyYXRvciBSR0JBMzIoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIHJnYmE7CisgICAgfQorCisgICAgdW5zaWduZWQgY2hhciByKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiAocmdiYSAmIDB4MDBGRjAwMDApID4+IDE2OworICAgIH0KKworICAg
IHVuc2lnbmVkIGNoYXIgZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKHJnYmEgJiAw
eDAwMDBGRjAwKSA+PiA4OworICAgIH0KKworICAgIHVuc2lnbmVkIGNoYXIgYigpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gKHJnYmEgJiAweDAwMDAwMEZGKTsKKyAgICB9CisKKyAgICB1
bnNpZ25lZCBjaGFyIGEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChyZ2JhICYgMHhG
RjAwMDAwMCkgPj4gMjQ7CisgICAgfQorfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCit7CisgICAgcmV0dXJuIGEucmdiYSA9PSBiLnJn
YmE7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3ImIGEsIGNvbnN0IENv
bG9yJiBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisKK30gLy8gbmFtZXNwYWNlIE5p
eAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0NvbW1v
bi5oIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvQ29tbW9uLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDQ2
NWNlMWM1NjRhN2M2NmUzOGMwNWUzZjkyNTk5NzVjN2NhMmE5MwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0NvbW1vbi5oCkBAIC0wLDAgKzEsNDcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIE5peF9Db21tb25faAorI2RlZmluZSBOaXhfQ29tbW9uX2gKKworLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKy8vIEV4cG9ydGVkIHN5bWJvbHMgbmVlZCB0byBiZSBhbm5vdGF0ZWQgd2l0aCBO
SVhfRVhQT1JUCisjZGVmaW5lIE5JWF9FWFBPUlQgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgi
ZGVmYXVsdCIpKSkKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEJhc2ljIHR5cGVzCisj
aW5jbHVkZSA8c3RkZGVmLmg+IC8vIEZvciBzaXplX3QKKworbmFtZXNwYWNlIE5peCB7CisvLyBV
VEYtMTYgY2hhcmFjdGVyIHR5cGUKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgVUNoYXI7Cit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvRGF0YS5oIGIv
U291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMxZDcyZTg2NDM4
NjI4NWRlODNiNjg5MDgyNThiZjZmMWQzMGFiNmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
UGxhdGZvcm0vbml4L3B1YmxpYy9EYXRhLmgKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5peF9E
YXRhX2gKKyNkZWZpbmUgTml4X0RhdGFfaAorCisjaW5jbHVkZSAiQ29tbW9uLmgiCisKKyNpZmRl
ZiBCVUlMRElOR19OSVhfXworbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBTaGFyZWRCdWZmZXI7
IH0KK25hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1JlZlB0
cjsgfQorI2VuZGlmCisKK25hbWVzcGFjZSBOaXggeworCisvLyBBIGNvbnRhaW5lciBmb3IgcmF3
IGJ5dGVzLiBJdCBpcyBpbmV4cGVuc2l2ZSB0byBjb3B5IGEgTml4OjpEYXRhIG9iamVjdC4KKy8v
CisvLyBXQVJOSU5HOiBJdCBpcyBub3Qgc2FmZSB0byBwYXNzIGEgTml4OjpEYXRhIGFjcm9zcyB0
aHJlYWRzISEhCisvLworY2xhc3MgRGF0YSB7CitwdWJsaWM6CisgICAgfkRhdGEoKSB7IHJlc2V0
KCk7IH0KKworICAgIERhdGEoKSA6IG1fcHJpdmF0ZSgwKSB7IH0KKworICAgIERhdGEoY29uc3Qg
Y2hhciogZGF0YSwgc2l6ZV90IHNpemUpIDogbV9wcml2YXRlKDApCisgICAgeworICAgICAgICBh
c3NpZ24oZGF0YSwgc2l6ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGludCBOPgorICAgIERh
dGEoY29uc3QgY2hhciAoJmRhdGEpW05dKSA6IG1fcHJpdmF0ZSgwKQorICAgIHsKKyAgICAgICAg
YXNzaWduKGRhdGEsIE4gLSAxKTsKKyAgICB9CisKKyAgICBEYXRhKGNvbnN0IERhdGEmIGQpIDog
bV9wcml2YXRlKDApIHsgYXNzaWduKGQpOyB9CisKKyAgICBEYXRhJiBvcGVyYXRvcj0oY29uc3Qg
RGF0YSYgZCkKKyAgICB7CisgICAgICAgIGFzc2lnbihkKTsKKyAgICAgICAgcmV0dXJuICp0aGlz
OworICAgIH0KKworICAgIE5JWF9FWFBPUlQgdm9pZCByZXNldCgpOworICAgIE5JWF9FWFBPUlQg
dm9pZCBhc3NpZ24oY29uc3QgRGF0YSYpOworICAgIE5JWF9FWFBPUlQgdm9pZCBhc3NpZ24oY29u
c3QgY2hhciogZGF0YSwgc2l6ZV90KTsKKworICAgIE5JWF9FWFBPUlQgc2l6ZV90IHNpemUoKSBj
b25zdDsKKyAgICBOSVhfRVhQT1JUIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdDsKKworICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7IH0KKyAgICBib29sIGlzTnVsbCgp
IGNvbnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7IH0KKworI2lmZGVmIEJVSUxESU5HX05JWF9fCisg
ICAgRGF0YShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYpOwor
ICAgIERhdGEmIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVk
QnVmZmVyPiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRC
dWZmZXI+KCkgY29uc3Q7CisjZWxzZQorICAgIHRlbXBsYXRlIDxjbGFzcyBDPgorICAgIERhdGEo
Y29uc3QgQyYgYykgOiBtX3ByaXZhdGUoMCkKKyAgICB7CisgICAgICAgIGFzc2lnbihjLmRhdGEo
KSwgYy5zaXplKCkpOworICAgIH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBDPgorICAgIERhdGEm
IG9wZXJhdG9yPShjb25zdCBDJiBjKQorICAgIHsKKyAgICAgICAgYXNzaWduKGMuZGF0YSgpLCBj
LnNpemUoKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisjZW5kaWYKKworcHJpdmF0
ZToKKyAgICBjbGFzcyBEYXRhUHJpdmF0ZTsKKyAgICB2b2lkIGFzc2lnbihEYXRhUHJpdmF0ZSop
OworICAgIERhdGFQcml2YXRlKiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBOaXgK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9GRlRGcmFt
ZS5oIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvRkZURnJhbWUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
OGRiNWIyNTM5MzIwNDljODUzODRhZjRiNDllMWZjNTg1NWZlZTY5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvRkZURnJhbWUuaApAQCAtMCwwICsxLDUzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgTml4X0ZGVEZyYW1lX2gKKyNk
ZWZpbmUgTml4X0ZGVEZyYW1lX2gKKworbmFtZXNwYWNlIE5peCB7CisKK2NsYXNzIEF1ZGlvQnVz
OworCitjbGFzcyBGRlRGcmFtZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+RkZURnJhbWUoKSB7
IH0KKworICAgIHZpcnR1YWwgdm9pZCBkb0ZGVChjb25zdCBmbG9hdCopIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBkb0ludmVyc2VGRlQoZmxvYXQqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbXVsdGlw
bHkoY29uc3QgRkZURnJhbWUmKSB7IH0KKworICAgIHZpcnR1YWwgdW5zaWduZWQgZnJlcXVlbmN5
RG9tYWluU2FtcGxlQ291bnQoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgLy8gQWZ0ZXIgbXVs
dGlwbGljYXRpb24gYW5kIHRyYW5zZm9ybSBvcGVyYXRpb25zLCB0aGUgZGF0YSBpcyBzY2FsZWQK
KyAgICAvLyB0byB0YWtlIGluIGFjY291bnQgdGhlIHNjYWxlIHVzZWQgaW50ZXJuYWxseSBpbiBX
ZWJLaXQsIG9yaWdpbmFsbHkKKyAgICAvLyBmcm9tIE1hYydzIHZlY0xpYi4KKyAgICAvLyBBZnRl
ciBtdWx0aXBsaWNhdGlvbjogUGxhbmFyIGRhdGEgaXMgc2NhbGVkIGJ5IDAuNS4KKyAgICAvLyBB
ZnRlciBkaXJlY3QgdHJhbnNmb3JtOiBQbGFuYXIgZGF0YSBpcyBzY2FsZWQgYnkgMi4wLgorICAg
IC8vIEFmdGVyIGludmVyc2UgdHJhbnNmb3JtOiBUaW1lIGRvbWFpbiBkYXRhIGlzIHNjYWxlZCBi
eSAxLjAvKDIqIEZGVCBzaXplKS4KKyAgICB2aXJ0dWFsIGZsb2F0KiByZWFsRGF0YSgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGZsb2F0KiBpbWFnRGF0YSgpIGNvbnN0IHsgcmV0
dXJuIDA7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIE5peAorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0dhbWVwYWQuaCBiL1NvdXJjZS9QbGF0Zm9ybS9u
aXgvcHVibGljL0dhbWVwYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jY2MzNTczNWEyNGZhMzE0ZTE3ODZhNTll
OTQxMjYyNWMxODI0MzVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL25peC9w
dWJsaWMvR2FtZXBhZC5oCkBAIC0wLDAgKzEsNzEgQEAKKy8vIENvcHlyaWdodCAoQykgMjAxMSwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUgbWV0OgorLy8KKy8vIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorLy8gICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vCisvLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAorLy8gQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisvLyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorLy8gQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUKKy8vIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisvLyBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgorLy8gU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKy8vIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorLy8gTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WQorLy8gT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisvLyBEQU1BR0UuCisKKyNpZm5kZWYgTml4X0dhbWVw
YWRfaAorI2RlZmluZSBOaXhfR2FtZXBhZF9oCisKKyNpbmNsdWRlICJDb21tb24uaCIKKworbmFt
ZXNwYWNlIE5peCB7CisKK2NsYXNzIEdhbWVwYWQgeworcHVibGljOgorICAgIHN0YXRpYyBjb25z
dCBzaXplX3QgaWRMZW5ndGhDYXAgPSAxMjg7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBheGVz
TGVuZ3RoQ2FwID0gMTY7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBidXR0b25zTGVuZ3RoQ2Fw
ID0gMzI7CisKKyAgICBHYW1lcGFkKCkKKyAgICAgICAgOiBjb25uZWN0ZWQoZmFsc2UpCisgICAg
ICAgICwgdGltZXN0YW1wKDApCisgICAgICAgICwgYXhlc0xlbmd0aCgwKQorICAgICAgICAsIGJ1
dHRvbnNMZW5ndGgoMCkKKyAgICB7CisgICAgICAgIGlkWzBdID0gMDsKKyAgICB9CisKKyAgICAv
LyBJcyB0aGVyZSBhIGdhbWVwYWQgY29ubmVjdGVkIGF0IHRoaXMgaW5kZXg/CisgICAgYm9vbCBj
b25uZWN0ZWQ7CisKKyAgICAvLyBEZXZpY2UgaWRlbnRpZmllciAoYmFzZWQgb24gbWFudWZhY3R1
cmVyLCBtb2RlbCwgZXRjLikuCisgICAgVUNoYXIgaWRbaWRMZW5ndGhDYXBdOworCisgICAgLy8g
TW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIHZhbHVlIHJlZmVycmluZyB0byB3aGVuIHRoZSBkYXRh
IHdlcmUgbGFzdAorICAgIC8vIHVwZGF0ZWQuCisgICAgdW5zaWduZWQgbG9uZyBsb25nIHRpbWVz
dGFtcDsKKworICAgIC8vIE51bWJlciBvZiB2YWxpZCBlbnRyaWVzIGluIHRoZSBheGVzIGFycmF5
LgorICAgIHVuc2lnbmVkIGF4ZXNMZW5ndGg7CisKKyAgICAvLyBOb3JtYWxpemVkIHZhbHVlcyBy
ZXByZXNlbnRpbmcgYXhlcywgaW4gdGhlIHJhbmdlIFstMS4uMV0uCisgICAgZmxvYXQgYXhlc1th
eGVzTGVuZ3RoQ2FwXTsKKworICAgIC8vIE51bWJlciBvZiB2YWxpZCBlbnRyaWVzIGluIHRoZSBi
dXR0b25zIGFycmF5LgorICAgIHVuc2lnbmVkIGJ1dHRvbnNMZW5ndGg7CisKKyAgICAvLyBOb3Jt
YWxpemVkIHZhbHVlcyByZXByZXNlbnRpbmcgYnV0dG9ucywgaW4gdGhlIHJhbmdlIFswLi4xXS4K
KyAgICBmbG9hdCBidXR0b25zW2J1dHRvbnNMZW5ndGhDYXBdOworfTsKKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0dhbWVwYWRzLmggYi9Tb3Vy
Y2UvUGxhdGZvcm0vbml4L3B1YmxpYy9HYW1lcGFkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI3NjkwMTI1MWVm
NDBmNDViMWE3NDUyNGI0MTMwYTcyMmRiNzlmMmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
UGxhdGZvcm0vbml4L3B1YmxpYy9HYW1lcGFkcy5oCkBAIC0wLDAgKzEsNDcgQEAKKy8vIENvcHly
aWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorLy8KKy8vIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisvLyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorLy8gICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
Ky8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorLy8gQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisvLyBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorLy8gQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKy8vIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisvLyBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgorLy8gU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKy8vIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorLy8g
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWQorLy8gT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisvLyBEQU1BR0UuCisKKyNp
Zm5kZWYgTml4X0dhbWVwYWRzX2gKKyNkZWZpbmUgTml4X0dhbWVwYWRzX2gKKworI2luY2x1ZGUg
IkdhbWVwYWQuaCIKKworbmFtZXNwYWNlIE5peCB7CisKK2NsYXNzIEdhbWVwYWRzIHsKK3B1Ymxp
YzoKKyAgICBHYW1lcGFkcygpCisgICAgICAgIDogbGVuZ3RoKDApIHsgfQorCisgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBpdGVtc0xlbmd0aENhcCA9IDQ7CisKKyAgICAvLyBOdW1iZXIgb2YgdmFs
aWQgZW50cmllcyBpbiB0aGUgaXRlbXMgYXJyYXkuCisgICAgdW5zaWduZWQgbGVuZ3RoOworCisg
ICAgLy8gR2FtZXBhZCBkYXRhIGZvciBOIHNlcGFyYXRlIGdhbWVwYWQgZGV2aWNlcy4KKyAgICBH
YW1lcGFkIGl0ZW1zW2l0ZW1zTGVuZ3RoQ2FwXTsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9QbGF0Zm9ybS5oIGIvU291cmNlL1BsYXRm
b3JtL25peC9wdWJsaWMvUGxhdGZvcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZjliNGYzZWNiYTZhZWEyNTVk
YWNhNDJmYWQxYmM2NjQ2OTNlZmNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3Jt
L25peC9wdWJsaWMvUGxhdGZvcm0uaApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOaXhfUGxhdGZv
cm1faAorI2RlZmluZSBOaXhfUGxhdGZvcm1faAorCisjaW5jbHVkZSAiQXVkaW9EZXZpY2UuaCIK
KyNpbmNsdWRlICJEYXRhLmgiCisjaW5jbHVkZSAiR2FtZXBhZHMuaCIKKworbmFtZXNwYWNlIE5p
eCB7CisKK2NsYXNzIEF1ZGlvQnVzOworY2xhc3MgRkZURnJhbWU7CitjbGFzcyBUaGVtZUVuZ2lu
ZTsKKworY2xhc3MgTklYX0VYUE9SVCBQbGF0Zm9ybSB7CitwdWJsaWM6CisKKyAgICBOSVhfRVhQ
T1JUIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoUGxhdGZvcm0qKTsKKyAgICBOSVhfRVhQT1JUIHN0
YXRpYyB2b2lkIHNodXRkb3duKCk7CisgICAgTklYX0VYUE9SVCBzdGF0aWMgUGxhdGZvcm0qIGN1
cnJlbnQoKTsKKworICAgIC8vIEF1ZGlvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgdmlydHVhbCBmbG9hdCBhdWRpb0hh
cmR3YXJlU2FtcGxlUmF0ZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBhdWRp
b0hhcmR3YXJlQnVmZmVyU2l6ZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGF1ZGlvSGFyZHdhcmVPdXRwdXRDaGFubmVscygpIHsgcmV0dXJuIDA7IH0KKworICAgIC8vIENy
ZWF0ZXMgYSBkZXZpY2UgZm9yIGF1ZGlvIEkvTy4KKyAgICAvLyBQYXNzIGluIChudW1iZXJPZklu
cHV0Q2hhbm5lbHMgPiAwKSBpZiBsaXZlL2xvY2FsIGF1ZGlvIGlucHV0IGlzIGRlc2lyZWQuCisg
ICAgdmlydHVhbCBBdWRpb0RldmljZSogY3JlYXRlQXVkaW9EZXZpY2Uoc2l6ZV90IC8qYnVmZmVy
U2l6ZSovLCB1bnNpZ25lZCAvKm51bWJlck9mSW5wdXRDaGFubmVscyovLCB1bnNpZ25lZCAvKm51
bWJlck9mQ2hhbm5lbHMqLywgZG91YmxlIC8qc2FtcGxlUmF0ZSovLCBBdWRpb0RldmljZTo6UmVu
ZGVyQ2FsbGJhY2sqKSB7IHJldHVybiAwOyB9CisKKworICAgIC8vIEdhbWVwYWQgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg
IHZpcnR1YWwgdm9pZCBzYW1wbGVHYW1lcGFkcyhHYW1lcGFkcyYgaW50bykgeyBpbnRvLmxlbmd0
aCA9IDA7IH0KKworCisgICAgLy8gRkZURnJhbWUKKyAgICB2aXJ0dWFsIEZGVEZyYW1lKiBjcmVh
dGVGRlRGcmFtZSh1bnNpZ25lZCAvKmZmdHNpemUqLykgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1
YWwgRkZURnJhbWUqIGNyZWF0ZUZGVEZyYW1lKGNvbnN0IEZGVEZyYW1lKiAvKmZyYW1lKi8pIHsg
cmV0dXJuIDA7IH0KKworICAgIC8vIFJlc291cmNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFJldHVybnMgYSBibG9i
IG9mIGRhdGEgY29ycmVzcG9uZGluZyB0byB0aGUgbmFtZWQgcmVzb3VyY2UuCisgICAgdmlydHVh
bCBEYXRhIGxvYWRSZXNvdXJjZShjb25zdCBjaGFyKiAvKm5hbWUqLykgeyByZXR1cm4gRGF0YSgp
OyB9CisKKyAgICAvLyBEZWNvZGVzIHRoZSBpbi1tZW1vcnkgYXVkaW8gZmlsZSBkYXRhIGFuZCBy
ZXR1cm5zIHRoZSBsaW5lYXIgUENNIGF1ZGlvIGRhdGEgaW4gdGhlIGRlc3RpbmF0aW9uQnVzLgor
ICAgIC8vIEEgc2FtcGxlLXJhdGUgY29udmVyc2lvbiB0byBzYW1wbGVSYXRlIHdpbGwgb2NjdXIg
aWYgdGhlIGZpbGUgZGF0YSBpcyBhdCBhIGRpZmZlcmVudCBzYW1wbGUtcmF0ZS4KKyAgICAvLyBS
ZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4KKyAgICB2aXJ0dWFsIGJvb2wgbG9hZEF1ZGlvUmVzb3Vy
Y2UoQXVkaW9CdXMqIC8qZGVzdGluYXRpb25CdXMqLywgY29uc3QgY2hhciogLyphdWRpb0ZpbGVE
YXRhKi8sIHNpemVfdCAvKmRhdGFTaXplKi8sIGRvdWJsZSAvKnNhbXBsZVJhdGUqLykgeyByZXR1
cm4gZmFsc2U7IH0KKworICAgIC8vIFRoZW1lIGVuZ2luZQorICAgIHZpcnR1YWwgVGhlbWVFbmdp
bmUqIHRoZW1lRW5naW5lKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5QbGF0Zm9ybSgp
IHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgTml4CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvUmVjdC5oIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJs
aWMvUmVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4NGE1MTNkZDVlMzI3YWMwYjEyMDllZWNkMjczZjAwNWI1
ZjgzYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9SZWN0
LmgKQEAgLTAsMCArMSw0NiBAQAorI2lmbmRlZiBOaXhfUmVjdF9oCisjZGVmaW5lIE5peF9SZWN0
X2gKKworI2lmZGVmIEJVSUxESU5HX05JWF9fCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2VuZGlm
CisKK25hbWVzcGFjZSBOaXggeworCitjbGFzcyBSZWN0IHsKK3B1YmxpYzoKKyAgICBpbnQgeDsK
KyAgICBpbnQgeTsKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IGhlaWdodDsKKworICAgIFJlY3Qo
Y29uc3QgUmVjdCYgcikKKyAgICAgICAgOiB4KHIueCkKKyAgICAgICAgLCB5KHIueSkKKyAgICAg
ICAgLCB3aWR0aChyLndpZHRoKQorICAgICAgICAsIGhlaWdodChyLmhlaWdodCkKKyAgICB7Cisg
ICAgfQorCisjaWZkZWYgQlVJTERJTkdfTklYX18KKyAgICBSZWN0KGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHIpCisgICAgICAgIDogeChyLngoKSkKKyAgICAgICAgLCB5KHIueSgpKQorICAgICAg
ICAsIHdpZHRoKHIud2lkdGgoKSkKKyAgICAgICAgLCBoZWlnaHQoci5oZWlnaHQoKSkKKyAgICB7
CisgICAgfQorCisgICAgUmVjdCYgb3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHIp
CisgICAgeworICAgICAgICB4ID0gci54KCk7CisgICAgICAgIHkgPSByLnkoKTsKKyAgICAgICAg
d2lkdGggPSByLndpZHRoKCk7CisgICAgICAgIGhlaWdodCA9IHIuaGVpZ2h0KCk7CisgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICB9CisjZW5kaWYKK307CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvU2l6ZS5oIGIvU291cmNlL1BsYXRmb3JtL25p
eC9wdWJsaWMvU2l6ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM4ZTI1ZDM2NmM3MjM2MDQ5NTM2MDVmMWQyN2Ew
YTJjZWNhYzk2YmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1Ymxp
Yy9TaXplLmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTml4X1NpemVfaAorI2RlZmluZSBOaXhf
U2l6ZV9oCisKKyNpZmRlZiBCVUlMRElOR19OSVhfXworI2luY2x1ZGUgIkludFNpemUuaCIKKyNl
bmRpZgorCituYW1lc3BhY2UgTml4IHsKKworc3RydWN0IFNpemUgeworICAgIGludCB3aWR0aDsK
KyAgICBpbnQgaGVpZ2h0OworCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gd2lk
dGggPD0gMCB8fCBoZWlnaHQgPD0gMDsgfQorCisgICAgU2l6ZSgpCisgICAgICAgIDogd2lkdGgo
MCkKKyAgICAgICAgLCBoZWlnaHQoMCkKKyAgICB7CisgICAgfQorCisgICAgU2l6ZShpbnQgd2lk
dGgsIGludCBoZWlnaHQpCisgICAgICAgIDogd2lkdGgod2lkdGgpCisgICAgICAgICwgaGVpZ2h0
KGhlaWdodCkKKyAgICB7CisgICAgfQorCisjaWZkZWYgQlVJTERJTkdfTklYX18KKyAgICBTaXpl
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHMpCisgICAgICAgIDogd2lkdGgocy53aWR0aCgpKQor
ICAgICAgICAsIGhlaWdodChzLmhlaWdodCgpKQorICAgIHsKKyAgICB9CisKKyAgICBTaXplJiBv
cGVyYXRvcj0oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcykKKyAgICB7CisgICAgICAgIHdpZHRo
ID0gcy53aWR0aCgpOworICAgICAgICBoZWlnaHQgPSBzLmhlaWdodCgpOworICAgICAgICByZXR1
cm4gKnRoaXM7CisgICAgfQorCisgICAgb3BlcmF0b3IgV2ViQ29yZTo6SW50U2l6ZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gV2ViQ29yZTo6SW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsK
KyAgICB9CisjZW5kaWYKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU2l6ZSYg
YSwgY29uc3QgU2l6ZSYgYikKK3sKKyAgICByZXR1cm4gYS53aWR0aCA9PSBiLndpZHRoICYmIGEu
aGVpZ2h0ID09IGIuaGVpZ2h0OworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNp
emUmIGEsIGNvbnN0IFNpemUmIGIpCit7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgTml4CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL25p
eC9wdWJsaWMvVGhlbWVFbmdpbmUuaCBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1RoZW1l
RW5naW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMGI0NjIzZWVjMGJmOWViNTkzNTQxYTM0YmVkODg0ZGI3ZjY0
MmY2MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1RoZW1l
RW5naW5lLmgKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5peF9UaGVtZUVuZ2luZV9oCisjZGVm
aW5lIE5peF9UaGVtZUVuZ2luZV9oCisKKyNpbmNsdWRlICJDYW52YXMuaCIKKyNpbmNsdWRlICJD
b2xvci5oIgorI2luY2x1ZGUgIlNpemUuaCIKKworbmFtZXNwYWNlIE5peCB7CisKK2NsYXNzIFJl
Y3Q7CisKK2NsYXNzIFRoZW1lRW5naW5lIHsKK3B1YmxpYzoKKyAgICAvLyBUaGUgY3VycmVudCBz
dGF0ZSBvZiB0aGUgYXNzb2NpYXRlZCBQYXJ0LgorICAgIGVudW0gU3RhdGUgeworICAgICAgICBT
dGF0ZURpc2FibGVkLAorICAgICAgICBTdGF0ZUhvdmVyLAorICAgICAgICBTdGF0ZU5vcm1hbCwK
KyAgICAgICAgU3RhdGVQcmVzc2VkCisgICAgfTsKKworICAgIC8vIEV4dHJhIHBhcmFtZXRlcnMg
Zm9yIGRyYXdpbmcgdGhlIFBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVHJhY2sgYW5kCisgICAgLy8g
UGFydFNjcm9sbGJhclZlcnRpY2FsVHJhY2suCisgICAgc3RydWN0IFNjcm9sbGJhclRyYWNrRXh0
cmFQYXJhbXMgeworICAgICAgICAvLyBUaGUgYm91bmRzIG9mIHRoZSBlbnRpcmUgdHJhY2ssIGFz
IG9wcG9zZWQgdG8gdGhlIHBhcnQgYmVpbmcgcGFpbnRlZC4KKyAgICAgICAgaW50IHRyYWNrWDsK
KyAgICAgICAgaW50IHRyYWNrWTsKKyAgICAgICAgaW50IHRyYWNrV2lkdGg7CisgICAgICAgIGlu
dCB0cmFja0hlaWdodDsKKyAgICB9OworCisgICAgLy8gRXh0cmEgcGFyYW1ldGVycyBmb3IgUGFy
dENoZWNrYm94LCBQYXJ0UHVzaEJ1dHRvbiBhbmQgUGFydFJhZGlvLgorICAgIHN0cnVjdCBCdXR0
b25FeHRyYVBhcmFtcyB7CisgICAgICAgIGJvb2wgY2hlY2tlZDsKKyAgICAgICAgYm9vbCBpbmRl
dGVybWluYXRlOyAvLyBXaGV0aGVyIHRoZSBidXR0b24gc3RhdGUgaXMgaW5kZXRlcm1pbmF0ZS4K
KyAgICAgICAgYm9vbCBpc0RlZmF1bHQ7IC8vIFdoZXRoZXIgdGhlIGJ1dHRvbiBpcyBkZWZhdWx0
IGJ1dHRvbi4KKyAgICAgICAgYm9vbCBoYXNCb3JkZXI7CisgICAgICAgIENvbG9yIGJhY2tncm91
bmRDb2xvcjsKKyAgICB9OworCisgICAgLy8gRXh0cmEgcGFyYW1ldGVycyBmb3IgUGFydE1lbnVM
aXN0CisgICAgc3RydWN0IE1lbnVMaXN0RXh0cmFQYXJhbXMgeworICAgICAgICBib29sIGhhc0Jv
cmRlcjsKKyAgICAgICAgYm9vbCBoYXNCb3JkZXJSYWRpdXM7CisgICAgICAgIGludCBhcnJvd1g7
CisgICAgICAgIGludCBhcnJvd1k7CisgICAgICAgIENvbG9yIGJhY2tncm91bmRDb2xvcjsKKyAg
ICB9OworCisgICAgLy8gRXh0cmEgcGFyYW1ldGVycyBmb3IgUGFydFNsaWRlclRyYWNrIGFuZCBQ
YXJ0U2xpZGVyVGh1bWIKKyAgICBzdHJ1Y3QgU2xpZGVyRXh0cmFQYXJhbXMgeworICAgICAgICBi
b29sIHZlcnRpY2FsOworICAgICAgICBib29sIGluRHJhZzsKKyAgICB9OworCisgICAgLy8gRXh0
cmEgcGFyYW1ldGVycyBmb3IgUGFydElubmVyU3BpbkJ1dHRvbgorICAgIHN0cnVjdCBJbm5lclNw
aW5CdXR0b25FeHRyYVBhcmFtcyB7CisgICAgICAgIGJvb2wgc3BpblVwOworICAgICAgICBib29s
IHJlYWRPbmx5OworICAgIH07CisKKyAgICAvLyBFeHRyYSBwYXJhbWV0ZXJzIGZvciBQYXJ0UHJv
Z3Jlc3NCYXIKKyAgICBzdHJ1Y3QgUHJvZ3Jlc3NCYXJFeHRyYVBhcmFtcyB7CisgICAgICAgIGJv
b2wgaXNEZXRlcm1pbmF0ZTsKKyAgICAgICAgZG91YmxlIHBvc2l0aW9uOworICAgICAgICBkb3Vi
bGUgYW5pbWF0aW9uUHJvZ3Jlc3M7CisgICAgICAgIGRvdWJsZSBhbmltYXRpb25TdGFydFRpbWU7
CisgICAgfTsKKworICAgIHN0cnVjdCBNZXRlckV4dHJhUGFyYW1zIHsKKyAgICAgICAgZG91Ymxl
IG1pbjsKKyAgICAgICAgZG91YmxlIG1heDsKKyAgICAgICAgZG91YmxlIHZhbHVlOworICAgICAg
ICBkb3VibGUgbG93OworICAgICAgICBkb3VibGUgaGlnaDsKKyAgICAgICAgZG91YmxlIG9wdGlt
dW07CisgICAgICAgIGRvdWJsZSB2YWx1ZVJhdGlvKCkgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKG1heCA8PSBtaW4pCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICByZXR1cm4gKHZhbHVlIC0gbWluKSAvIChtYXggLSBtaW4pOworICAgICAgICB9CisgICAg
fTsKKworICAgIHZpcnR1YWwgY29uc3QgY2hhciogZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpIGNv
bnN0IHsgcmV0dXJuICIiOyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBleHRyYVF1aXJrc1N0
eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiAiIjsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciog
ZXh0cmFQbHVnSW5zU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuICIiOyB9CisKKyAgICAvLyBU
ZXh0IHNlbGVjdGlvbiBjb2xvcnMuCisgICAgdmlydHVhbCBDb2xvciBhY3RpdmVTZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBDb2xvciBhY3RpdmVTZWxl
Y3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBDb2xvciBpbmFj
dGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIENv
bG9yIGluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QgPSAwOworCisgICAg
Ly8gTGlzdCBib3ggc2VsZWN0aW9uIGNvbG9ycworICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlTGlz
dEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIENv
bG9yIGFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25G
b3JlZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZVRl
eHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIENvbG9yIGlu
YWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QgPSAwOworCisgICAgdmlydHVh
bCBDb2xvciBmb2N1c1JpbmdDb2xvcigpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgQ29sb3Ig
dGFwSGlnaGxpZ2h0Q29sb3IoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRC
dXR0b24oQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmLCBjb25zdCBCdXR0b25FeHRyYVBhcmFt
cyYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUZXh0RmllbGQoQ2FudmFzKiwg
U3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBTaXplIGdldENoZWNr
Ym94U2l6ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDaGVja2JveChDYW52
YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYsIGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1zJikgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgU2l6ZSBnZXRSYWRpb1NpemUoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHBhaW50UmFkaW8oQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmLCBjb25zdCBC
dXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUZXh0
QXJlYShDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZ2V0TWVudUxpc3RQYWRkaW5nKGludCYgcGFkZGluZ1RvcCwgaW50JiBwYWRkaW5nTGVm
dCwgaW50JiBwYWRkaW5nQm90dG9tLCBpbnQmIHBhZGRpbmdSaWdodCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBwYWludE1lbnVMaXN0KENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0Jikg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludFByb2dyZXNzQmFyKENhbnZhcyosIFN0
YXRlLCBjb25zdCBSZWN0JiwgY29uc3QgUHJvZ3Jlc3NCYXJFeHRyYVBhcmFtcyYpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBnZXRBbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dy
ZXNzQmFyKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZG91YmxlIGdldEFuaW1hdGlvbkR1cmF0
aW9uRm9yUHJvZ3Jlc3NCYXIoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldElubmVy
U3BpbkJ1dHRvblBhZGRpbmcoaW50JiBwYWRkaW5nVG9wLCBpbnQmIHBhZGRpbmdMZWZ0LCBpbnQm
IHBhZGRpbmdCb3R0b20sIGludCYgcGFkZGluZ1JpZ2h0KSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHBhaW50SW5uZXJTcGluQnV0dG9uKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0Jiwg
Y29uc3QgSW5uZXJTcGluQnV0dG9uRXh0cmFQYXJhbXMmKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHBhaW50TWV0ZXIoQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmLCBjb25zdCBNZXRl
ckV4dHJhUGFyYW1zJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludFNsaWRlclRy
YWNrKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBwYWludFNsaWRlclRodW1iKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0JikgY29uc3Qg
PSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgTml4CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1BsYXRmb3JtL25peC9zcmMvRGVmYXVsdFdlYlRoZW1lRW5naW5lLmNwcCBiL1NvdXJjZS9Q
bGF0Zm9ybS9uaXgvc3JjL0RlZmF1bHRXZWJUaGVtZUVuZ2luZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDE3
M2RlMWI1YTA2N2VkMDhlNmE0MmFhOGNiMTYxMmJmNWZkOTRlOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL0RlZmF1bHRXZWJUaGVtZUVuZ2luZS5jcHAKQEAgLTAs
MCArMSwzNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiRGVmYXVsdFdlYlRoZW1lRW5naW5lLmgiCisKKyNpbmNsdWRlICJwdWJs
aWMvQ29sb3IuaCIKKyNpbmNsdWRlICJwdWJsaWMvUmVjdC5oIgorI2luY2x1ZGUgInB1YmxpYy9T
aXplLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhaXJvL2NhaXJvLmg+Cisj
aW5jbHVkZSA8Y21hdGg+CisKK2NvbnN0IGRvdWJsZSBCR0NvbG9yMSA9IDB4RjYgLyAyNTYuMDsK
K2NvbnN0IGRvdWJsZSBCR0NvbG9yMiA9IDB4REUgLyAyNTYuMDsKK2NvbnN0IGRvdWJsZSBCb3Jk
ZXJDb2xvciA9IDB4QTQgLyAyNTYuMDsKK2NvbnN0IGRvdWJsZSBCb3JkZXJPbkhvdmVyQ29sb3Ig
PSAweDdBIC8gMjU2LjA7Citjb25zdCBkb3VibGUgQ2hlY2tDb2xvciA9IDB4NjYgLyAyNTYuMDsK
K2NvbnN0IGRvdWJsZSBUZXh0RmllbGREYXJrQm9yZGVyQ29sb3IgPSAweDlBIC8gMjU2LjA7Citj
b25zdCBkb3VibGUgVGV4dEZpZWxkTGlnaHRCb3JkZXJDb2xvciA9IDB4RUUgLyAyNTYuMDsKKwor
Y29uc3QgaW50IE1lbnVMaXN0Qm9yZGVyID0gNTsKK2NvbnN0IGludCBNZW51TGlzdEFycm93U2l6
ZSA9IDY7CisKK2NvbnN0IGludCBJbm5lclNwaW5CdXR0b25Cb3JkZXIgPSAzOworY29uc3QgaW50
IElubmVyU3BpbkJ1dHRvbkFycm93U2l6ZSA9IDI7CisKK2NvbnN0IE5peDo6UkdCQTMyIFRhcEhp
Z2hMaWdodENvbG9yID0gMHg2NjAwMDAwMDsKKworbmFtZXNwYWNlIE5peCB7CisKK0NvbG9yIERl
ZmF1bHRXZWJUaGVtZUVuZ2luZTo6YWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gQ29sb3IoMCwgMCwgMjU1KTsKK30KKworQ29sb3IgRGVmYXVsdFdl
YlRoZW1lRW5naW5lOjphY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAorewor
ICAgIHJldHVybiBDb2xvcjo6d2hpdGU7Cit9CisKK0NvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2lu
ZTo6aW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVy
biBDb2xvcigxNzYsIDE3NiwgMTc2KTsKK30KKworQ29sb3IgRGVmYXVsdFdlYlRoZW1lRW5naW5l
OjppbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IENvbG9yOjpibGFjazsKK30KKworQ29sb3IgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjphY3RpdmVM
aXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYWN0
aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7Cit9CisKK0NvbG9yIERlZmF1bHRXZWJUaGVt
ZUVuZ2luZTo6YWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpOworfQorCitDb2xv
ciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3Vu
ZENvbG9yKCk7Cit9CisKK0NvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6aW5hY3RpdmVMaXN0
Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5hY3Rp
dmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKTsKK30KKworQ29sb3IgRGVmYXVsdFdlYlRoZW1l
RW5naW5lOjphY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdAoreworICAgIHJl
dHVybiBDb2xvcigyNTUsIDE1MCwgNTApOyAvLyBPcmFuZ2UuCit9CisKK0NvbG9yIERlZmF1bHRX
ZWJUaGVtZUVuZ2luZTo6aW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdAor
eworICAgIHJldHVybiBDb2xvcigyNTUsIDI1NSwgMCk7IC8vIFllbGxvdy4KK30KKworQ29sb3Ig
RGVmYXVsdFdlYlRoZW1lRW5naW5lOjpmb2N1c1JpbmdDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIENvbG9yOjpibGFjazsKK30KKworQ29sb3IgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjp0YXBI
aWdobGlnaHRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFRhcEhpZ2hMaWdodENvbG9yOwor
fQorCitzdGF0aWMgdm9pZCBncmFkaWVudEZpbGwoY2Fpcm9fdCogY2Fpcm8sIGRvdWJsZSB5U3Rh
cnQsIGRvdWJsZSB5TGVuZ3RoLCBib29sIGludmVydGVkID0gZmFsc2UpCit7CisgICAgZG91Ymxl
IGdyYWRTdGFydENvbG9yID0gQkdDb2xvcjE7CisgICAgZG91YmxlIGdyYWRFbmRDb2xvciA9IEJH
Q29sb3IyOworICAgIGlmIChpbnZlcnRlZCkKKyAgICAgICAgc3RkOjpzd2FwKGdyYWRTdGFydENv
bG9yLCBncmFkRW5kQ29sb3IpOworCisgICAgY2Fpcm9fcGF0dGVybl90KiBncmFkaWVudCA9IGNh
aXJvX3BhdHRlcm5fY3JlYXRlX2xpbmVhcigwLCB5U3RhcnQsIDAsIHlTdGFydCArIHlMZW5ndGgp
OworICAgIGNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiKGdyYWRpZW50LCAwLCBncmFk
U3RhcnRDb2xvciwgZ3JhZFN0YXJ0Q29sb3IsIGdyYWRTdGFydENvbG9yKTsKKyAgICBjYWlyb19w
YXR0ZXJuX2FkZF9jb2xvcl9zdG9wX3JnYihncmFkaWVudCwgMSwgZ3JhZEVuZENvbG9yLCBncmFk
RW5kQ29sb3IsIGdyYWRFbmRDb2xvcik7CisgICAgY2Fpcm9fc2V0X3NvdXJjZShjYWlybywgZ3Jh
ZGllbnQpOworICAgIGNhaXJvX2ZpbGwoY2Fpcm8pOworICAgIGNhaXJvX3BhdHRlcm5fZGVzdHJv
eShncmFkaWVudCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwQm9yZGVyKGNhaXJvX3QgKiBjYWly
bywgVGhlbWVFbmdpbmU6OlN0YXRlIHN0YXRlKQoreworICAgIGRvdWJsZSBib3JkZXJDb2xvciA9
IHN0YXRlID09IFRoZW1lRW5naW5lOjpTdGF0ZUhvdmVyID8gQm9yZGVyT25Ib3ZlckNvbG9yIDog
Qm9yZGVyQ29sb3I7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2Fpcm8sIGJvcmRlckNvbG9y
LCBib3JkZXJDb2xvciwgYm9yZGVyQ29sb3IpOworICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNh
aXJvLCAxKTsKK30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50QnV0dG9uKENh
bnZhcyogY2FudmFzLCBTdGF0ZSBzdGF0ZSwgY29uc3QgUmVjdCYgcmVjdCwgY29uc3QgQnV0dG9u
RXh0cmFQYXJhbXMmKSBjb25zdAoreworICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKKyAgICBzZXR1
cEJvcmRlcihjYW52YXMsIHN0YXRlKTsKKyAgICAvLyBDYWlybyB1c2VzIGEgY29vcmRpbmF0ZSBz
eXN0ZW0gbm90IGJhc2VkIG9uIHBpeGVsIGNvb3JkaW5hdGVzLCBzbworICAgIC8vIHdlIG5lZWQg
dG8gYWRkICAwLjUgdG8geCBhbmQgeSBjb29yZCBvciB0aGUgbGluZSB3aWxsIHN0YXkgYmV0d2Vl
bgorICAgIC8vIHR3byBwaXhlbHMgaW5zdGVhZCBvZiBpbiB0aGUgbWlkZGxlIG9mIGEgcGl4ZWwu
CisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNhbnZhcywgcmVjdC54ICsgMC41LCByZWN0LnkgKyAwLjUs
IHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTsKKyAgICBjYWlyb19zdHJva2VfcHJlc2VydmUoY2Fu
dmFzKTsKKworICAgIGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQsIHN0
YXRlID09IFN0YXRlUHJlc3NlZCk7CisgICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOworfQorCit2
b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRUZXh0RmllbGQoQ2FudmFzKiBjYW52YXMs
IFN0YXRlLCBjb25zdCBSZWN0JiByZWN0KSBjb25zdAoreworICAgIGNhaXJvX3NhdmUoY2FudmFz
KTsKKworICAgIGNvbnN0IGRvdWJsZSBsaW5lV2lkdGggPSAyOworICAgIGNvbnN0IGRvdWJsZSBj
b3JyZWN0aW9uID0gbGluZVdpZHRoIC8gMi4wOworCisgICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGgo
Y2FudmFzLCBsaW5lV2lkdGgpOworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhbnZhcywgVGV4
dEZpZWxkRGFya0JvcmRlckNvbG9yLCBUZXh0RmllbGREYXJrQm9yZGVyQ29sb3IsIFRleHRGaWVs
ZERhcmtCb3JkZXJDb2xvcik7CisgICAgY2Fpcm9fbW92ZV90byhjYW52YXMsIHJlY3QueCArIGNv
cnJlY3Rpb24sIHJlY3QueSArIGNvcnJlY3Rpb24gKyByZWN0LmhlaWdodCk7CisgICAgY2Fpcm9f
cmVsX2xpbmVfdG8oY2FudmFzLCAwLCAtcmVjdC5oZWlnaHQpOworICAgIGNhaXJvX3JlbF9saW5l
X3RvKGNhbnZhcywgcmVjdC53aWR0aCwgMCk7CisgICAgY2Fpcm9fc3Ryb2tlKGNhbnZhcyk7CisK
KyAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMsIFRleHRGaWVsZExpZ2h0Qm9yZGVyQ29s
b3IsIFRleHRGaWVsZExpZ2h0Qm9yZGVyQ29sb3IsIFRleHRGaWVsZExpZ2h0Qm9yZGVyQ29sb3Ip
OworICAgIGNhaXJvX21vdmVfdG8oY2FudmFzLCByZWN0LnggKyBjb3JyZWN0aW9uICsgcmVjdC53
aWR0aCwgcmVjdC55ICsgY29ycmVjdGlvbik7CisgICAgY2Fpcm9fcmVsX2xpbmVfdG8oY2FudmFz
LCAwLCByZWN0LmhlaWdodCk7CisgICAgY2Fpcm9fcmVsX2xpbmVfdG8oY2FudmFzLCAtcmVjdC53
aWR0aCwgMCk7CisgICAgY2Fpcm9fc3Ryb2tlKGNhbnZhcyk7CisKKyAgICBjYWlyb19yZXN0b3Jl
KGNhbnZhcyk7Cit9CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludFRleHRBcmVh
KENhbnZhcyogY2FudmFzLCBTdGF0ZSBzdGF0ZSwgY29uc3QgUmVjdCYgcmVjdCkgY29uc3QKK3sK
KyAgICBwYWludFRleHRGaWVsZChjYW52YXMsIHN0YXRlLCByZWN0KTsKK30KKworU2l6ZSBEZWZh
dWx0V2ViVGhlbWVFbmdpbmU6OmdldENoZWNrYm94U2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFNpemUoMTMsIDEzKTsKK30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50Q2hl
Y2tib3goQ2FudmFzKiBjYW52YXMsIFN0YXRlIHN0YXRlLCBjb25zdCBSZWN0JiByZWN0LCBjb25z
dCBCdXR0b25FeHRyYVBhcmFtcyYgcGFyYW0pIGNvbnN0Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52
YXMpOworICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUpOworICAgIGNhaXJvX3JlY3Rhbmds
ZShjYW52YXMsIHJlY3QueCArIDAuNSwgcmVjdC55ICsgMC41LCByZWN0LndpZHRoLCByZWN0Lmhl
aWdodCk7CisgICAgY2Fpcm9fc3Ryb2tlX3ByZXNlcnZlKGNhbnZhcyk7CisKKyAgICBncmFkaWVu
dEZpbGwoY2FudmFzLCByZWN0LnksIHJlY3QuaGVpZ2h0LCBzdGF0ZSA9PSBTdGF0ZVByZXNzZWQp
OworCisgICAgaWYgKHBhcmFtLmNoZWNrZWQpIHsKKyAgICAgICAgY29uc3QgZG91YmxlIGJvcmRl
ciA9IDM7CisgICAgICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNhbnZhcywgMik7CisgICAgICAg
IGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhbnZhcywgQ2hlY2tDb2xvciwgQ2hlY2tDb2xvciwgQ2hl
Y2tDb2xvcik7CisgICAgICAgIGNhaXJvX21vdmVfdG8oY2FudmFzLCByZWN0LnggKyAwLjUgKyBi
b3JkZXIsIHJlY3QueSArIDAuNSArIHJlY3QuaGVpZ2h0IC0gYm9yZGVyKTsKKyAgICAgICAgY2Fp
cm9fcmVsX2xpbmVfdG8oY2FudmFzLCByZWN0LndpZHRoIC0gYm9yZGVyICogMiwgLXJlY3QuaGVp
Z2h0ICsgYm9yZGVyICogMik7CisgICAgICAgIGNhaXJvX21vdmVfdG8oY2FudmFzLCByZWN0Lngg
KyAwLjUgKyBib3JkZXIsIHJlY3QueSArIDAuNSArIGJvcmRlcik7CisgICAgICAgIGNhaXJvX3Jl
bF9saW5lX3RvKGNhbnZhcywgcmVjdC53aWR0aCAtIGJvcmRlciAqIDIsIHJlY3QuaGVpZ2h0IC0g
Ym9yZGVyICogMik7CisgICAgICAgIGNhaXJvX3N0cm9rZShjYW52YXMpOworICAgIH0KKworICAg
IGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsKK30KKworU2l6ZSBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6
OmdldFJhZGlvU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNpemUoMTMsIDEzKTsKK30KKwor
dm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50UmFkaW8oQ2FudmFzKiBjYW52YXMsIFN0
YXRlIHN0YXRlLCBjb25zdCBSZWN0JiByZWN0LCBjb25zdCBCdXR0b25FeHRyYVBhcmFtcyYgcGFy
YW0pIGNvbnN0Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOworICAgIHNldHVwQm9yZGVyKGNh
bnZhcywgc3RhdGUpOworICAgIGNhaXJvX2FyYyhjYW52YXMsIHJlY3QueCArIHJlY3Qud2lkdGgg
LyAyLjAsIHJlY3QueSArIHJlY3QuaGVpZ2h0IC8gMi4wLCByZWN0LndpZHRoIC8gMi4wLCAwLCAy
ICogTV9QSSk7CisgICAgY2Fpcm9fc3Ryb2tlX3ByZXNlcnZlKGNhbnZhcyk7CisKKyAgICBncmFk
aWVudEZpbGwoY2FudmFzLCByZWN0LnksIHJlY3QuaGVpZ2h0KTsKKworICAgIGlmIChwYXJhbS5j
aGVja2VkKSB7CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhbnZhcywgQ2hlY2tDb2xv
ciwgQ2hlY2tDb2xvciwgQ2hlY2tDb2xvcik7CisgICAgICAgIGNhaXJvX2FyYyhjYW52YXMsIHJl
Y3QueCArIHJlY3Qud2lkdGggLyAyLjAsIHJlY3QueSArIHJlY3QuaGVpZ2h0IC8gMi4wLCByZWN0
LndpZHRoIC8gNC4wLCAwLCAyICogTV9QSSk7CisgICAgICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsK
KyAgICB9CisgICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOworfQorCit2b2lkIERlZmF1bHRXZWJU
aGVtZUVuZ2luZTo6Z2V0TWVudUxpc3RQYWRkaW5nKGludCYgcGFkZGluZ1RvcCwgaW50JiBwYWRk
aW5nTGVmdCwgaW50JiBwYWRkaW5nQm90dG9tLCBpbnQmIHBhZGRpbmdSaWdodCkgY29uc3QKK3sK
KyAgICBwYWRkaW5nVG9wID0gTWVudUxpc3RCb3JkZXI7CisgICAgcGFkZGluZ0xlZnQgPSBNZW51
TGlzdEJvcmRlcjsKKyAgICBwYWRkaW5nQm90dG9tID0gTWVudUxpc3RCb3JkZXI7CisgICAgcGFk
ZGluZ1JpZ2h0ID0gMiAqIE1lbnVMaXN0Qm9yZGVyICsgTWVudUxpc3RBcnJvd1NpemU7Cit9CisK
K3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludE1lbnVMaXN0KENhbnZhcyogY2FudmFz
LCBTdGF0ZSBzdGF0ZSwgY29uc3QgUmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBjYWlyb19zYXZl
KGNhbnZhcyk7CisgICAgc2V0dXBCb3JkZXIoY2FudmFzLCBzdGF0ZSk7CisgICAgY2Fpcm9fcmVj
dGFuZ2xlKGNhbnZhcywgcmVjdC54ICsgMC41LCByZWN0LnkgKyAwLjUsIHJlY3Qud2lkdGgsIHJl
Y3QuaGVpZ2h0KTsKKyAgICBjYWlyb19zdHJva2VfcHJlc2VydmUoY2FudmFzKTsKKworICAgIGdy
YWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQsIHN0YXRlID09IFN0YXRlUHJl
c3NlZCk7CisKKyAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgcmVjdC53aWR0aCAt
IE1lbnVMaXN0QXJyb3dTaXplIC0gTWVudUxpc3RCb3JkZXIsIHJlY3QueSArIDEgKyByZWN0Lmhl
aWdodCAvIDIgLSBNZW51TGlzdEFycm93U2l6ZSAvIDIpOworICAgIGNhaXJvX3NldF9zb3VyY2Vf
cmdiKGNhbnZhcywgQ2hlY2tDb2xvciwgQ2hlY2tDb2xvciwgQ2hlY2tDb2xvcik7CisgICAgY2Fp
cm9fcmVsX2xpbmVfdG8oY2FudmFzLCBNZW51TGlzdEFycm93U2l6ZSwgMCk7CisgICAgY2Fpcm9f
cmVsX2xpbmVfdG8oY2FudmFzLCAtTWVudUxpc3RBcnJvd1NpemUgLyAyLCBNZW51TGlzdEFycm93
U2l6ZSk7CisgICAgY2Fpcm9fY2xvc2VfcGF0aChjYW52YXMpOworICAgIGNhaXJvX2ZpbGwoY2Fu
dmFzKTsKKworICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsKK30KKworU2l6ZSBEZWZhdWx0V2Vi
VGhlbWVFbmdpbmU6OmdldFByb2dyZXNzQmFyU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNp
emUoMjAwMCwgMzAwKTsKK30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50UHJv
Z3Jlc3NCYXIoQ2FudmFzKiBjYW52YXMsIFN0YXRlIHN0YXRlLCBjb25zdCBSZWN0JiByZWN0LCBj
b25zdCBQcm9ncmVzc0JhckV4dHJhUGFyYW1zJiBwYXJhbXMpIGNvbnN0Cit7CisgICAgY2Fpcm9f
c2F2ZShjYW52YXMpOworCisgICAgaWYgKHBhcmFtcy5pc0RldGVybWluYXRlKSB7CisgICAgICAg
IC8vIEJhY2tncm91bmQKKyAgICAgICAgc2V0dXBCb3JkZXIoY2FudmFzLCBzdGF0ZSk7CisgICAg
ICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRoLCBy
ZWN0LmhlaWdodCk7CisgICAgICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsKKyAgICAgICAgLy8gUHJv
Z3Jlc3MKKyAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNhbnZhcywgcmVjdC54LCByZWN0LnksIHJl
Y3Qud2lkdGggKiBwYXJhbXMucG9zaXRpb24sIHJlY3QuaGVpZ2h0KTsKKyAgICAgICAgZ3JhZGll
bnRGaWxsKGNhbnZhcywgcmVjdC55LCByZWN0LmhlaWdodCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgY2Fpcm9fcmVjdGFuZ2xlKGNhbnZhcywgcmVjdC54LCByZWN0LnksIHJlY3Qud2lkdGgsIHJl
Y3QuaGVpZ2h0KTsKKyAgICAgICAgZ3JhZGllbnRGaWxsKGNhbnZhcywgcmVjdC55LCByZWN0Lmhl
aWdodCwgdHJ1ZSk7CisgICAgfQorCisgICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOworfQorCisv
LyBUaGVzZSB2YWx1ZXMgaGF2ZSBiZWVuIGNvcGllZCBmcm9tIFJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhLmNwcAorc3RhdGljIGNvbnN0IGludCBwcm9ncmVzc0FjdGl2aXR5QmxvY2tzID0gNTsKK3N0
YXRpYyBjb25zdCBpbnQgcHJvZ3Jlc3NBbmltYXRpb25GcmFtZXMgPSAxMDsKK3N0YXRpYyBjb25z
dCBkb3VibGUgcHJvZ3Jlc3NBbmltYXRpb25JbnRlcnZhbCA9IDAuMTI1OworCitkb3VibGUgRGVm
YXVsdFdlYlRoZW1lRW5naW5lOjpnZXRBbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNz
QmFyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcHJvZ3Jlc3NBbmltYXRpb25JbnRlcnZhbDsKK30K
KworZG91YmxlIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6Z2V0QW5pbWF0aW9uRHVyYXRpb25Gb3JQ
cm9ncmVzc0JhcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHByb2dyZXNzQW5pbWF0aW9uSW50ZXJ2
YWwgKiBwcm9ncmVzc0FuaW1hdGlvbkZyYW1lcyAqIDI7IC8vICIyIiBmb3IgYmFjayBhbmQgZm9y
dGg7Cit9CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpnZXRJbm5lclNwaW5CdXR0b25Q
YWRkaW5nKGludCYgcGFkZGluZ1RvcCwgaW50JiBwYWRkaW5nTGVmdCwgaW50JiBwYWRkaW5nQm90
dG9tLCBpbnQmIHBhZGRpbmdSaWdodCkgY29uc3QKK3sKKyAgICBwYWRkaW5nVG9wID0gSW5uZXJT
cGluQnV0dG9uQm9yZGVyOworICAgIHBhZGRpbmdMZWZ0ID0gSW5uZXJTcGluQnV0dG9uQm9yZGVy
OworICAgIHBhZGRpbmdCb3R0b20gPSBJbm5lclNwaW5CdXR0b25Cb3JkZXI7CisgICAgcGFkZGlu
Z1JpZ2h0ID0gMiAqIElubmVyU3BpbkJ1dHRvbkJvcmRlciArIElubmVyU3BpbkJ1dHRvbkFycm93
U2l6ZTsKK30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50SW5uZXJTcGluQnV0
dG9uKENhbnZhcyogY2FudmFzLCBTdGF0ZSBzdGF0ZSwgY29uc3QgUmVjdCYgcmVjdCwgY29uc3Qg
SW5uZXJTcGluQnV0dG9uRXh0cmFQYXJhbXMmIHBhcmFtKSBjb25zdAoreworICAgIGRvdWJsZSBy
ZWN0SGFsZkhlaWdodCA9IHJlY3QuaGVpZ2h0IC8gMjsKKworICAgIGNhaXJvX3NhdmUoY2FudmFz
KTsKKyAgICBzZXR1cEJvcmRlcihjYW52YXMsIHN0YXRlKTsKKyAgICBjYWlyb19yZWN0YW5nbGUo
Y2FudmFzLCByZWN0LnggKyAwLjUsIHJlY3QueSArIDEuNSwgcmVjdC53aWR0aCwgcmVjdEhhbGZI
ZWlnaHQpOworICAgIGNhaXJvX3N0cm9rZV9wcmVzZXJ2ZShjYW52YXMpOworCisgICAgZ3JhZGll
bnRGaWxsKGNhbnZhcywgcmVjdC55LCByZWN0SGFsZkhlaWdodCwgc3RhdGUgPT0gU3RhdGVQcmVz
c2VkICYmIHBhcmFtLnNwaW5VcCk7CisKKyAgICBzZXR1cEJvcmRlcihjYW52YXMsIHN0YXRlKTsK
KyAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LnggKyAwLjUsIHJlY3QueSArIDAuNSAr
IHJlY3RIYWxmSGVpZ2h0LCByZWN0LndpZHRoLCByZWN0SGFsZkhlaWdodCk7CisgICAgY2Fpcm9f
c3Ryb2tlX3ByZXNlcnZlKGNhbnZhcyk7CisKKyAgICBncmFkaWVudEZpbGwoY2FudmFzLCByZWN0
LnkgKyByZWN0SGFsZkhlaWdodCwgcmVjdEhhbGZIZWlnaHQsIHN0YXRlID09IFN0YXRlUHJlc3Nl
ZCAmJiAhcGFyYW0uc3BpblVwKTsKKworICAgIGNhaXJvX21vdmVfdG8oY2FudmFzLCByZWN0Lngg
KyByZWN0LndpZHRoIC0gSW5uZXJTcGluQnV0dG9uQXJyb3dTaXplIC0gSW5uZXJTcGluQnV0dG9u
Qm9yZGVyICogMiwgcmVjdC55ICsgcmVjdEhhbGZIZWlnaHQgKyByZWN0LmhlaWdodCAvIDQgLSBJ
bm5lclNwaW5CdXR0b25BcnJvd1NpemUgKyAxLjUpOworICAgIGNhaXJvX3NldF9zb3VyY2Vfcmdi
KGNhbnZhcywgQ2hlY2tDb2xvciwgQ2hlY2tDb2xvciwgQ2hlY2tDb2xvcik7CisgICAgY2Fpcm9f
cmVsX2xpbmVfdG8oY2FudmFzLCBNZW51TGlzdEFycm93U2l6ZSwgMCk7CisgICAgY2Fpcm9fcmVs
X2xpbmVfdG8oY2FudmFzLCAtTWVudUxpc3RBcnJvd1NpemUgLyAyLCBNZW51TGlzdEFycm93U2l6
ZSk7CisgICAgY2Fpcm9fY2xvc2VfcGF0aChjYW52YXMpOworCisgICAgY2Fpcm9fbW92ZV90byhj
YW52YXMsIHJlY3QueCArIHJlY3Qud2lkdGggLSBJbm5lclNwaW5CdXR0b25BcnJvd1NpemUgLSBJ
bm5lclNwaW5CdXR0b25Cb3JkZXIgKiAyLCByZWN0LnkgKyByZWN0LmhlaWdodCAvIDQgKyBJbm5l
clNwaW5CdXR0b25BcnJvd1NpemUpOworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhbnZhcywg
Q2hlY2tDb2xvciwgQ2hlY2tDb2xvciwgQ2hlY2tDb2xvcik7CisgICAgY2Fpcm9fcmVsX2xpbmVf
dG8oY2FudmFzLCBNZW51TGlzdEFycm93U2l6ZSwgMCk7CisgICAgY2Fpcm9fcmVsX2xpbmVfdG8o
Y2FudmFzLCAtTWVudUxpc3RBcnJvd1NpemUgLyAyLCAtTWVudUxpc3RBcnJvd1NpemUpOworICAg
IGNhaXJvX2Nsb3NlX3BhdGgoY2FudmFzKTsKKworICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsKK30K
Kwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50TWV0ZXIoQ2FudmFzKiBjYW52YXMs
IFN0YXRlIHN0YXRlLCBjb25zdCBSZWN0JiByZWN0LCBjb25zdCBNZXRlckV4dHJhUGFyYW1zJiBw
YXJhbXMpIGNvbnN0Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOworCisgICAgLy8gQmFja2dy
b3VuZAorICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUpOworICAgIGNhaXJvX3JlY3Rhbmds
ZShjYW52YXMsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7CisgICAg
Y2Fpcm9fZmlsbChjYW52YXMpOworICAgIC8vIE1ldGVyCisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNh
bnZhcywgcmVjdC54LCByZWN0LnksIHJlY3Qud2lkdGggKiBwYXJhbXMudmFsdWVSYXRpbygpLCBy
ZWN0LmhlaWdodCk7CisgICAgZ3JhZGllbnRGaWxsKGNhbnZhcywgcmVjdC55LCByZWN0LmhlaWdo
dCk7CisKKyAgICBjYWlyb19yZXN0b3JlKGNhbnZhcyk7Cit9CisKK2NvbnN0IGludCBTbGlkZXJU
cmFja0hlaWdodCA9IDY7CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludFNsaWRl
clRyYWNrKENhbnZhcyogY2FudmFzLCBTdGF0ZSwgY29uc3QgUmVjdCYgcmVjdCkgY29uc3QKK3sK
KyAgICBjYWlyb19zYXZlKGNhbnZhcyk7CisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNhbnZhcywgcmVj
dC54LCByZWN0LnkgKyAocmVjdC5oZWlnaHQgLSBTbGlkZXJUcmFja0hlaWdodCkgLyAyLjAsIHJl
Y3Qud2lkdGgsIFNsaWRlclRyYWNrSGVpZ2h0KTsKKyAgICBncmFkaWVudEZpbGwoY2FudmFzLCBy
ZWN0LnksIHJlY3QuaGVpZ2h0LCB0cnVlKTsKKyAgICBjYWlyb19yZXN0b3JlKGNhbnZhcyk7Cit9
CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludFNsaWRlclRodW1iKENhbnZhcyog
Y2FudmFzLCBTdGF0ZSBzdGF0ZSwgY29uc3QgUmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBjYWly
b19zYXZlKGNhbnZhcyk7CisgICAgc2V0dXBCb3JkZXIoY2FudmFzLCBzdGF0ZSk7CisgICAgY2Fp
cm9fcmVjdGFuZ2xlKGNhbnZhcywgcmVjdC54LCByZWN0LnksIHJlY3Qud2lkdGgsIHJlY3QuaGVp
Z2h0KTsKKyAgICBjYWlyb19zdHJva2VfcHJlc2VydmUoY2FudmFzKTsKKyAgICBncmFkaWVudEZp
bGwoY2FudmFzLCByZWN0LnksIHJlY3QuaGVpZ2h0LCBzdGF0ZSA9PSBTdGF0ZVByZXNzZWQpOwor
ICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Bs
YXRmb3JtL25peC9zcmMvRGVmYXVsdFdlYlRoZW1lRW5naW5lLmggYi9Tb3VyY2UvUGxhdGZvcm0v
bml4L3NyYy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NWQ1ZjE5YjkwMzFh
MDAzY2Y2M2VmZTU1ODUwZjQ2NzdkNGQxNjM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Bs
YXRmb3JtL25peC9zcmMvRGVmYXVsdFdlYlRoZW1lRW5naW5lLmgKQEAgLTAsMCArMSw1MCBAQAor
I2lmbmRlZiBEZWZhdWx0V2ViVGhlbWVFbmdpbmVfaAorI2RlZmluZSBEZWZhdWx0V2ViVGhlbWVF
bmdpbmVfaAorCisjaW5jbHVkZSAicHVibGljL1RoZW1lRW5naW5lLmgiCisKK25hbWVzcGFjZSBO
aXggeworCitjbGFzcyBEZWZhdWx0V2ViVGhlbWVFbmdpbmUgOiBwdWJsaWMgVGhlbWVFbmdpbmUg
eworcHVibGljOgorICAgIC8vIFRleHQgc2VsZWN0aW9uIGNvbG9ycy4KKyAgICB2aXJ0dWFsIENv
bG9yIGFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwg
Q29sb3IgYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVh
bCBDb2xvciBpbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OworICAgIHZp
cnR1YWwgQ29sb3IgaW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKwor
ICAgIC8vIExpc3QgYm94IHNlbGVjdGlvbiBjb2xvcnMKKyAgICB2aXJ0dWFsIENvbG9yIGFjdGl2
ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENv
bG9yIGFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIENvbG9yIGluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNv
bnN0OworICAgIHZpcnR1YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3Vu
ZENvbG9yKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZVRleHRTZWFyY2hIaWdo
bGlnaHRDb2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwgQ29sb3IgaW5hY3RpdmVUZXh0U2VhcmNo
SGlnaGxpZ2h0Q29sb3IoKSBjb25zdDsKKworICAgIHZpcnR1YWwgQ29sb3IgZm9jdXNSaW5nQ29s
b3IoKSBjb25zdDsKKworICAgIHZpcnR1YWwgQ29sb3IgdGFwSGlnaGxpZ2h0Q29sb3IoKSBjb25z
dDsKKworICAgIHZpcnR1YWwgdm9pZCBwYWludEJ1dHRvbihDYW52YXMqLCBTdGF0ZSwgY29uc3Qg
UmVjdCYsIGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1zJikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHBhaW50VGV4dEZpZWxkKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0JikgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIHBhaW50VGV4dEFyZWEoQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmKSBj
b25zdDsKKyAgICB2aXJ0dWFsIFNpemUgZ2V0Q2hlY2tib3hTaXplKCkgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIHBhaW50Q2hlY2tib3goQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmLCBjb25z
dCBCdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0OworICAgIHZpcnR1YWwgU2l6ZSBnZXRSYWRpb1Np
emUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSYWRpbyhDYW52YXMqLCBTdGF0ZSwg
Y29uc3QgUmVjdCYsIGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1zJikgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHBhaW50TWVudUxpc3QoQ2FudmFzICosIFN0YXRlLCBjb25zdCBSZWN0ICYpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBnZXRNZW51TGlzdFBhZGRpbmcoaW50JiBwYWRkaW5nVG9wLCBp
bnQmIHBhZGRpbmdMZWZ0LCBpbnQmIHBhZGRpbmdCb3R0b20sIGludCYgcGFkZGluZ1JpZ2h0KSBj
b25zdDsKKyAgICB2aXJ0dWFsIFNpemUgZ2V0UHJvZ3Jlc3NCYXJTaXplKCkgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIHBhaW50UHJvZ3Jlc3NCYXIoQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3Qm
LCBjb25zdCBQcm9ncmVzc0JhckV4dHJhUGFyYW1zJikgY29uc3Q7CisgICAgdmlydHVhbCBkb3Vi
bGUgZ2V0QW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcigpIGNvbnN0OworICAg
IHZpcnR1YWwgZG91YmxlIGdldEFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRJbm5lclNwaW5CdXR0b24oQ2FudmFzICosIFN0YXRl
LCBjb25zdCBSZWN0ICYsIGNvbnN0IElubmVyU3BpbkJ1dHRvbkV4dHJhUGFyYW1zJikgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIGdldElubmVyU3BpbkJ1dHRvblBhZGRpbmcoaW50JiBwYWRkaW5n
VG9wLCBpbnQmIHBhZGRpbmdMZWZ0LCBpbnQmIHBhZGRpbmdCb3R0b20sIGludCYgcGFkZGluZ1Jp
Z2h0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRNZXRlcihDYW52YXMqLCBTdGF0ZSwg
Y29uc3QgUmVjdCYsIGNvbnN0IE1ldGVyRXh0cmFQYXJhbXMmKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRTbGlkZXJUcmFjayhDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBwYWludFNsaWRlclRodW1iKENhbnZhcyosIFN0YXRlLCBjb25z
dCBSZWN0JikgY29uc3Q7Cit9OworCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0
Zm9ybS9uaXgvc3JjL1BsYXRmb3JtLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL1BsYXRm
b3JtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44MDQwNmJlZjkzM2UyYWRjODUyYWEwNmE3OTg0ZmQyYTJlNDhh
ZjViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL25peC9zcmMvUGxhdGZvcm0u
Y3BwCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgInB1YmxpYy9QbGF0Zm9ybS5oIgorCisjaW5jbHVkZSAiRGVmYXVsdFdlYlRoZW1lRW5n
aW5lLmgiCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KKworbmFtZXNwYWNlIE5peCB7CisKK2NsYXNzIEVtcHR5UGxhdGZvcm0gOiBwdWJsaWMg
UGxhdGZvcm0geworcHVibGljOgorICAgIH5FbXB0eVBsYXRmb3JtKCkgeyB9Cit9Oworc3RhdGlj
IFdURjo6T3duUHRyPEVtcHR5UGxhdGZvcm0+IHNfZW1wdHlQbGF0Zm9ybSA9IFdURjo6YWRvcHRQ
dHIobmV3IEVtcHR5UGxhdGZvcm0oKSk7CisKK3N0YXRpYyBQbGF0Zm9ybSogc19wbGF0Zm9ybSA9
IHNfZW1wdHlQbGF0Zm9ybS5nZXQoKTsKKwordm9pZCBQbGF0Zm9ybTo6aW5pdGlhbGl6ZShQbGF0
Zm9ybSogcGxhdGZvcm0pCit7CisgICAgc19wbGF0Zm9ybSA9IHBsYXRmb3JtOworfQorCit2b2lk
IFBsYXRmb3JtOjpzaHV0ZG93bigpCit7CisgICAgc19wbGF0Zm9ybSA9IDA7Cit9CisKK1BsYXRm
b3JtKiBQbGF0Zm9ybTo6Y3VycmVudCgpCit7CisgICAgcmV0dXJuIHNfcGxhdGZvcm07Cit9CisK
K1RoZW1lRW5naW5lKiBQbGF0Zm9ybTo6dGhlbWVFbmdpbmUoKQoreworICAgIHN0YXRpYyBEZWZh
dWx0V2ViVGhlbWVFbmdpbmUgdGhlbWU7CisgICAgcmV0dXJuICZ0aGVtZTsKK30KKworfSAvLyBu
YW1lc3BhY2UgTml4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9u
aXgvQXVkaW9CdXNOaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbml4L0F1
ZGlvQnVzTml4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNjkxODQwY2RmYTEyZTQyNDFhYzI1YzY2ODM4NmIz
OTVhNjRiOWFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vbml4L0F1ZGlvQnVzTml4LmNwcApAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkF1
ZGlvQnVzLmgiCisKKyNpbmNsdWRlICJBdWRpb0ZpbGVSZWFkZXIuaCIKKyNpbmNsdWRlIDxwdWJs
aWMvQXVkaW9CdXMuaD4KKyNpbmNsdWRlIDxwdWJsaWMvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1Bhc3NSZWZQdHI8QXVkaW9CdXM+IGRlY29kZUF1ZGlvRmlsZURhdGEoY29uc3QgY2hhciogZGF0
YSwgc2l6ZV90IHNpemUsIGRvdWJsZSBzYW1wbGVSYXRlKQoreworICAgIE5peDo6QXVkaW9CdXMg
bml4QXVkaW9CdXM7CisgICAgaWYgKE5peDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+bG9hZEF1ZGlv
UmVzb3VyY2UoJm5peEF1ZGlvQnVzLCBkYXRhLCBzaXplLCBzYW1wbGVSYXRlKSkKKyAgICAgICAg
cmV0dXJuIG5peEF1ZGlvQnVzLmF1ZGlvQnVzKCk7CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8QXVk
aW9CdXM+KCk7Cit9CisKK1Bhc3NSZWZQdHI8QXVkaW9CdXM+IEF1ZGlvQnVzOjpsb2FkUGxhdGZv
cm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBmbG9hdCBzYW1wbGVSYXRlKQoreworICAgIFN0
cmluZyBhYnNvbHV0ZUZpbGVuYW1lKG1ha2VTdHJpbmcoREFUQV9ESVIsICIvd2ViYXVkaW8vcmVz
b3VyY2VzLyIsIG5hbWUsICIud2F2IikpOworICAgIGNvbnN0IE5peDo6RGF0YSByZXNvdXJjZSA9
IE5peDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+bG9hZFJlc291cmNlKGFic29sdXRlRmlsZW5hbWUu
dXRmOCgpLmRhdGEoKSk7CisKKyAgICBpZiAocmVzb3VyY2UuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gUGFzc1JlZlB0cjxBdWRpb0J1cz4oKTsKKworICAgIC8vIEZJWE1FOiB0aGUgc2FtcGxl
UmF0ZSBwYXJhbWV0ZXIgaXMgaWdub3JlZC4gSXQgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSB0aGUg
QVBJLgorICAgIFJlZlB0cjxBdWRpb0J1cz4gYXVkaW9CdXMgPSBkZWNvZGVBdWRpb0ZpbGVEYXRh
KHJlc291cmNlLmRhdGEoKSwgcmVzb3VyY2Uuc2l6ZSgpLCBzYW1wbGVSYXRlKTsKKworICAgIGlm
ICghYXVkaW9CdXMuZ2V0KCkpCisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEF1ZGlvQnVzPigp
OworCisgICAgLy8gSWYgdGhlIGJ1cyBpcyBhbHJlYWR5IGF0IHRoZSByZXF1ZXN0ZWQgc2FtcGxl
LXJhdGUgdGhlbiByZXR1cm4gYXMgaXMuCisgICAgaWYgKGF1ZGlvQnVzLT5zYW1wbGVSYXRlKCkg
PT0gc2FtcGxlUmF0ZSkKKyAgICAgICAgcmV0dXJuIGF1ZGlvQnVzLnJlbGVhc2UoKTsKKworICAg
IHJldHVybiBBdWRpb0J1czo6Y3JlYXRlQnlTYW1wbGVSYXRlQ29udmVydGluZyhhdWRpb0J1cy5n
ZXQoKSwgZmFsc2UsIHNhbXBsZVJhdGUpOworfQorCitQYXNzUmVmUHRyPEF1ZGlvQnVzPiBjcmVh
dGVCdXNGcm9tSW5NZW1vcnlBdWRpb0ZpbGUoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGRhdGFT
aXplLCBib29sIG1peFRvTW9ubywgZmxvYXQgc2FtcGxlUmF0ZSkKK3sKKyAgICAvLyBGSVhNRTog
dGhlIHNhbXBsZVJhdGUgcGFyYW1ldGVyIGlzIGlnbm9yZWQuIEl0IHNob3VsZCBiZSByZW1vdmVk
IGZyb20gdGhlIEFQSS4KKyAgICBSZWZQdHI8QXVkaW9CdXM+IGF1ZGlvQnVzID0gZGVjb2RlQXVk
aW9GaWxlRGF0YShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSksIGRhdGFTaXplLCBzYW1w
bGVSYXRlKTsKKyAgICBpZiAoIWF1ZGlvQnVzLmdldCgpKQorICAgICAgICByZXR1cm4gUGFzc1Jl
ZlB0cjxBdWRpb0J1cz4oKTsKKworICAgIC8vIElmIHRoZSBidXMgbmVlZHMgbm8gY29udmVyc2lv
biB0aGVuIHJldHVybiBhcyBpcy4KKyAgICBpZiAoKCFtaXhUb01vbm8gfHwgYXVkaW9CdXMtPm51
bWJlck9mQ2hhbm5lbHMoKSA9PSAxKSAmJiBhdWRpb0J1cy0+c2FtcGxlUmF0ZSgpID09IHNhbXBs
ZVJhdGUpCisgICAgICAgIHJldHVybiBhdWRpb0J1cy5yZWxlYXNlKCk7CisKKyAgICByZXR1cm4g
QXVkaW9CdXM6OmNyZWF0ZUJ5U2FtcGxlUmF0ZUNvbnZlcnRpbmcoYXVkaW9CdXMuZ2V0KCksIG1p
eFRvTW9ubywgc2FtcGxlUmF0ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9uaXgvQXVkaW9EZXN0aW5hdGlvbk5peC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9uaXgvQXVkaW9EZXN0aW5hdGlvbk5peC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTNm
ZTNmNWE0MDU5Yzc2MGE5MjA0MTg2Zjk5MDFiNWM2MTdmYjA2YwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL25peC9BdWRpb0Rlc3RpbmF0aW9uTml4LmNw
cApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShX
RUJfQVVESU8pCisKKyNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uTml4LmgiCisKKyNpbmNsdWRl
ICJBdWRpb0ZJRk8uaCIKKyNpbmNsdWRlICJBdWRpb1B1bGxGSUZPLmgiCisjaW5jbHVkZSA8cHVi
bGljL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQnVmZmVyIHNpemUg
YXQgd2hpY2ggdGhlIHdlYiBhdWRpbyBlbmdpbmUgd2lsbCByZW5kZXIuCitjb25zdCB1bnNpZ25l
ZCByZW5kZXJCdWZmZXJTaXplID0gMTI4OworCisvLyBTaXplIG9mIHRoZSBGSUZPCitjb25zdCBz
aXplX3QgZmlmb1NpemUgPSA4MTkyOworCisvLyBGYWN0b3J5IG1ldGhvZDogQ2hyb21pdW0taW1w
bGVtZW50YXRpb24KK1Bhc3NPd25QdHI8QXVkaW9EZXN0aW5hdGlvbj4gQXVkaW9EZXN0aW5hdGlv
bjo6Y3JlYXRlKEF1ZGlvSU9DYWxsYmFjayYgY2FsbGJhY2ssIGNvbnN0IFN0cmluZyYgaW5wdXRE
ZXZpY2VJZCwgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCB1bnNpZ25lZCBudW1iZXJP
Zk91dHB1dENoYW5uZWxzLCBmbG9hdCBzYW1wbGVSYXRlKQoreworICAgIHJldHVybiBhZG9wdFB0
cihuZXcgQXVkaW9EZXN0aW5hdGlvbk5peChjYWxsYmFjaywgaW5wdXREZXZpY2VJZCwgbnVtYmVy
T2ZJbnB1dENoYW5uZWxzLCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBzYW1wbGVSYXRlKSk7Cit9
CisKK0F1ZGlvRGVzdGluYXRpb25OaXg6OkF1ZGlvRGVzdGluYXRpb25OaXgoQXVkaW9JT0NhbGxi
YWNrJiBjYWxsYmFjaywgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dENoYW5u
ZWxzLCB1bnNpZ25lZCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBmbG9hdCBzYW1wbGVSYXRlKQor
ICAgIDogbV9jYWxsYmFjayhjYWxsYmFjaykKKyAgICAsIG1fbnVtYmVyT2ZPdXRwdXRDaGFubmVs
cyhudW1iZXJPZk91dHB1dENoYW5uZWxzKQorICAgICwgbV9pbnB1dEJ1cyhBdWRpb0J1czo6Y3Jl
YXRlKG51bWJlck9mSW5wdXRDaGFubmVscywgcmVuZGVyQnVmZmVyU2l6ZSkpCisgICAgLCBtX3Jl
bmRlckJ1cyhBdWRpb0J1czo6Y3JlYXRlKG51bWJlck9mT3V0cHV0Q2hhbm5lbHMsIHJlbmRlckJ1
ZmZlclNpemUsIGZhbHNlKSkKKyAgICAsIG1fc2FtcGxlUmF0ZShzYW1wbGVSYXRlKQorICAgICwg
bV9pc1BsYXlpbmcoZmFsc2UpCit7CisgICAgLy8gVXNlIHRoZSBvcHRpbWFsIGJ1ZmZlciBzaXpl
IHJlY29tbWVuZGVkIGJ5IHRoZSBhdWRpbyBiYWNrZW5kLgorICAgIG1fY2FsbGJhY2tCdWZmZXJT
aXplID0gTml4OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5hdWRpb0hhcmR3YXJlQnVmZmVyU2l6ZSgp
OworCisgICAgLy8gUXVpY2sgZXhpdCBpZiB0aGUgcmVxdWVzdGVkIHNpemUgaXMgdG9vIGxhcmdl
LgorICAgIEFTU0VSVChtX2NhbGxiYWNrQnVmZmVyU2l6ZSArIHJlbmRlckJ1ZmZlclNpemUgPD0g
Zmlmb1NpemUpOworICAgIGlmIChtX2NhbGxiYWNrQnVmZmVyU2l6ZSArIHJlbmRlckJ1ZmZlclNp
emUgPiBmaWZvU2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9hdWRpb0RldmljZSA9IGFk
b3B0UHRyKE5peDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3JlYXRlQXVkaW9EZXZpY2UobV9jYWxs
YmFja0J1ZmZlclNpemUsIG51bWJlck9mSW5wdXRDaGFubmVscywgbnVtYmVyT2ZPdXRwdXRDaGFu
bmVscywgc2FtcGxlUmF0ZSwgdGhpcykpOworICAgIEFTU0VSVChtX2F1ZGlvRGV2aWNlKTsKKwor
ICAgIC8vIENyZWF0ZSBhIEZJRk8gdG8gaGFuZGxlIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGUgY2Fs
bGJhY2sgc2l6ZQorICAgIC8vIG5vdCBiZWluZyBhIG11bHRpcGxlIG9mIHRoZSByZW5kZXIgc2l6
ZS4gSWYgdGhlIEZJRk8gYWxyZWFkeQorICAgIC8vIGNvbnRhaW5zIGVub3VnaCBkYXRhLCB0aGUg
ZGF0YSB3aWxsIGJlIHByb3ZpZGVkIGRpcmVjdGx5LgorICAgIC8vIE90aGVyd2lzZSwgdGhlIEZJ
Rk8gd2lsbCBjYWxsIHRoZSBwcm92aWRlciBlbm91Z2ggdGltZXMgdG8KKyAgICAvLyBzYXRpc2Z5
IHRoZSByZXF1ZXN0IGZvciBkYXRhLgorICAgIG1fZmlmbyA9IGFkb3B0UHRyKG5ldyBBdWRpb1B1
bGxGSUZPKCp0aGlzLCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBmaWZvU2l6ZSwgcmVuZGVyQnVm
ZmVyU2l6ZSkpOworCisgICAgLy8gSW5wdXQgYnVmZmVyaW5nLgorICAgIG1faW5wdXRGaWZvID0g
YWRvcHRQdHIobmV3IEF1ZGlvRklGTyhudW1iZXJPZklucHV0Q2hhbm5lbHMsIGZpZm9TaXplKSk7
CisKKyAgICAvLyBJZiB0aGUgY2FsbGJhY2sgc2l6ZSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVuZGVy
IHNpemUsIHRoZW4gd2UgbmVlZCB0byBidWZmZXIgc29tZQorICAgIC8vIGV4dHJhIHNpbGVuY2Ug
Zm9yIHRoZSBpbnB1dC4gT3RoZXJ3aXNlLCB3ZSBjYW4gb3Zlci1jb25zdW1lIHRoZSBpbnB1dCBG
SUZPLgorICAgIGlmIChtX2NhbGxiYWNrQnVmZmVyU2l6ZSAhPSByZW5kZXJCdWZmZXJTaXplKSB7
CisgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgbXVsdGktY2hhbm5lbCBpbnB1dCBhbmQgZG9uJ3Qg
aGFyZC1jb2RlIHRvIHN0ZXJlby4KKyAgICAgICAgUmVmUHRyPEF1ZGlvQnVzPiBzaWxlbmNlID0g
QXVkaW9CdXM6OmNyZWF0ZSgyLCByZW5kZXJCdWZmZXJTaXplKTsKKyAgICAgICAgbV9pbnB1dEZp
Zm8tPnB1c2goc2lsZW5jZS5nZXQoKSk7CisgICAgfQorfQorCitBdWRpb0Rlc3RpbmF0aW9uTml4
Ojp+QXVkaW9EZXN0aW5hdGlvbk5peCgpCit7CisgICAgc3RvcCgpOworfQorCit2b2lkIEF1ZGlv
RGVzdGluYXRpb25OaXg6OnN0YXJ0KCkKK3sKKyAgICBpZiAoIW1faXNQbGF5aW5nICYmIG1fYXVk
aW9EZXZpY2UpIHsKKyAgICAgICAgbV9hdWRpb0RldmljZS0+c3RhcnQoKTsKKyAgICAgICAgbV9p
c1BsYXlpbmcgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBBdWRpb0Rlc3RpbmF0aW9uTml4Ojpz
dG9wKCkKK3sKKyAgICBpZiAobV9pc1BsYXlpbmcgJiYgbV9hdWRpb0RldmljZSkgeworICAgICAg
ICBtX2F1ZGlvRGV2aWNlLT5zdG9wKCk7CisgICAgICAgIG1faXNQbGF5aW5nID0gZmFsc2U7Cisg
ICAgfQorfQorCitmbG9hdCBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJhdGUoKQor
eworICAgIHJldHVybiBOaXg6OlBsYXRmb3JtOjpjdXJyZW50KCktPmF1ZGlvSGFyZHdhcmVTYW1w
bGVSYXRlKCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgQXVkaW9EZXN0aW5hdGlvbjo6bWF4Q2hhbm5l
bENvdW50KCkKK3sKKyAgICByZXR1cm4gTml4OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5hdWRpb0hh
cmR3YXJlT3V0cHV0Q2hhbm5lbHMoKTsKK30KKwordm9pZCBBdWRpb0Rlc3RpbmF0aW9uTml4Ojpy
ZW5kZXIoY29uc3Qgc3RkOjp2ZWN0b3I8ZmxvYXQqPiYgc291cmNlRGF0YSwgY29uc3Qgc3RkOjp2
ZWN0b3I8ZmxvYXQqPiYgYXVkaW9EYXRhLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMpCit7CisgICAg
Ym9vbCBpc051bWJlck9mQ2hhbm5lbHNHb29kID0gYXVkaW9EYXRhLnNpemUoKSA9PSBtX251bWJl
ck9mT3V0cHV0Q2hhbm5lbHM7CisgICAgaWYgKCFpc051bWJlck9mQ2hhbm5lbHNHb29kKSB7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgYm9vbCBpc0J1ZmZlclNpemVHb29kID0gbnVtYmVyT2ZGcmFtZXMgPT0gbV9jYWxsYmFja0J1
ZmZlclNpemU7CisgICAgaWYgKCFpc0J1ZmZlclNpemVHb29kKSB7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQnVmZmVyIG9w
dGlvbmFsIGxpdmUgaW5wdXQuCisgICAgaWYgKHNvdXJjZURhdGEuc2l6ZSgpID49IDIpIHsKKyAg
ICAgICAgLy8gRklYTUU6IGhhbmRsZSBtdWx0aS1jaGFubmVsIGlucHV0IGFuZCBkb24ndCBoYXJk
LWNvZGUgdG8gc3RlcmVvLgorICAgICAgICBSZWZQdHI8QXVkaW9CdXM+IHdyYXBwZXJCdXMgPSBB
dWRpb0J1czo6Y3JlYXRlKDIsIG51bWJlck9mRnJhbWVzLCBmYWxzZSk7CisgICAgICAgIHdyYXBw
ZXJCdXMtPnNldENoYW5uZWxNZW1vcnkoMCwgc291cmNlRGF0YVswXSwgbnVtYmVyT2ZGcmFtZXMp
OworICAgICAgICB3cmFwcGVyQnVzLT5zZXRDaGFubmVsTWVtb3J5KDEsIHNvdXJjZURhdGFbMV0s
IG51bWJlck9mRnJhbWVzKTsKKyAgICAgICAgbV9pbnB1dEZpZm8tPnB1c2god3JhcHBlckJ1cy5n
ZXQoKSk7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbnVtYmVyT2ZP
dXRwdXRDaGFubmVsczsgKytpKQorICAgICAgICBtX3JlbmRlckJ1cy0+c2V0Q2hhbm5lbE1lbW9y
eShpLCBhdWRpb0RhdGFbaV0sIG51bWJlck9mRnJhbWVzKTsKKworICAgIG1fZmlmby0+Y29uc3Vt
ZShtX3JlbmRlckJ1cy5nZXQoKSwgbnVtYmVyT2ZGcmFtZXMpOworfQorCit2b2lkIEF1ZGlvRGVz
dGluYXRpb25OaXg6OnByb3ZpZGVJbnB1dChBdWRpb0J1cyogYnVzLCBzaXplX3QgZnJhbWVzVG9Q
cm9jZXNzKQoreworICAgIFJlZlB0cjxBdWRpb0J1cz4gc291cmNlQnVzOworICAgIGlmIChtX2lu
cHV0Rmlmby0+ZnJhbWVzSW5GaWZvKCkgPj0gZnJhbWVzVG9Qcm9jZXNzKSB7CisgICAgICAgIG1f
aW5wdXRGaWZvLT5jb25zdW1lKG1faW5wdXRCdXMuZ2V0KCksIGZyYW1lc1RvUHJvY2Vzcyk7Cisg
ICAgICAgIHNvdXJjZUJ1cyA9IG1faW5wdXRCdXM7CisgICAgfQorCisgICAgbV9jYWxsYmFjay5y
ZW5kZXIoc291cmNlQnVzLmdldCgpLCBidXMsIGZyYW1lc1RvUHJvY2Vzcyk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9uaXgvQXVkaW9EZXN0aW5hdGlvbk5p
eC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbml4L0F1ZGlvRGVzdGluYXRpb25O
aXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yNDdjNzMxMDg0MmMzYjNiNTM3NTY5ZjgwMjJjNDQ1YzViMDY5OWMw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbml4L0F1
ZGlvRGVzdGluYXRpb25OaXguaApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBdWRpb0Rlc3Rp
bmF0aW9uTml4X2gKKyNkZWZpbmUgQXVkaW9EZXN0aW5hdGlvbk5peF9oCisKKyNpbmNsdWRlICJB
dWRpb0J1cy5oIgorI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb24uaCIKKyNpbmNsdWRlICJBdWRp
b0lPQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJBdWRpb1NvdXJjZVByb3ZpZGVyLmgiCisjaW5jbHVk
ZSA8cHVibGljL0F1ZGlvRGV2aWNlLmg+CisjaW5jbHVkZSA8dmVjdG9yPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvRklGTzsKK2NsYXNzIEF1ZGlvUHVsbEZJRk87CisKKy8v
IEFuIEF1ZGlvRGVzdGluYXRpb24gdXNpbmcgQ2hyb21pdW0ncyBhdWRpbyBzeXN0ZW0KKworY2xh
c3MgQXVkaW9EZXN0aW5hdGlvbk5peCA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uLCBwdWJsaWMg
Tml4OjpBdWRpb0RldmljZTo6UmVuZGVyQ2FsbGJhY2ssIHB1YmxpYyBBdWRpb1NvdXJjZVByb3Zp
ZGVyIHsKK3B1YmxpYzoKKyAgICBBdWRpb0Rlc3RpbmF0aW9uTml4KEF1ZGlvSU9DYWxsYmFjayYs
IGNvbnN0IFN0cmluZyYgaW5wdXREZXZpY2VJZCwgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dENoYW5u
ZWxzLCB1bnNpZ25lZCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBmbG9hdCBzYW1wbGVSYXRlKTsK
KyAgICB2aXJ0dWFsIH5BdWRpb0Rlc3RpbmF0aW9uTml4KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
c3RhcnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOworICAgIGJvb2wgaXNQbGF5aW5nKCkg
eyByZXR1cm4gbV9pc1BsYXlpbmc7IH0KKworICAgIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCB7
IHJldHVybiBtX3NhbXBsZVJhdGU7IH0KKworICAgIC8vIFdlYktpdDo6V2ViQXVkaW9EZXZpY2U6
OlJlbmRlckNhbGxiYWNrCisgICAgdmlydHVhbCB2b2lkIHJlbmRlcihjb25zdCBzdGQ6OnZlY3Rv
cjxmbG9hdCo+JiBzb3VyY2VEYXRhLCBjb25zdCBzdGQ6OnZlY3RvcjxmbG9hdCo+JiBhdWRpb0Rh
dGEsIHNpemVfdCBudW1iZXJPZkZyYW1lcyk7CisKKyAgICAvLyBXZWJDb3JlOjpBdWRpb1NvdXJj
ZVByb3ZpZGVyCisgICAgdmlydHVhbCB2b2lkIHByb3ZpZGVJbnB1dChBdWRpb0J1cyosIHNpemVf
dCBmcmFtZXNUb1Byb2Nlc3MpOworCitwcml2YXRlOgorICAgIEF1ZGlvSU9DYWxsYmFjayYgbV9j
YWxsYmFjazsKKyAgICB1bnNpZ25lZCBtX251bWJlck9mT3V0cHV0Q2hhbm5lbHM7CisgICAgUmVm
UHRyPEF1ZGlvQnVzPiBtX2lucHV0QnVzOworICAgIFJlZlB0cjxBdWRpb0J1cz4gbV9yZW5kZXJC
dXM7CisgICAgZmxvYXQgbV9zYW1wbGVSYXRlOworICAgIGJvb2wgbV9pc1BsYXlpbmc7CisgICAg
T3duUHRyPE5peDo6QXVkaW9EZXZpY2U+IG1fYXVkaW9EZXZpY2U7CisgICAgc2l6ZV90IG1fY2Fs
bGJhY2tCdWZmZXJTaXplOworCisgICAgT3duUHRyPEF1ZGlvRklGTz4gbV9pbnB1dEZpZm87Cisg
ICAgT3duUHRyPEF1ZGlvUHVsbEZJRk8+IG1fZmlmbzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEF1ZGlvRGVzdGluYXRpb25OaXhfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbml4L0ZGVEZyYW1lTml4LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL25peC9GRlRGcmFtZU5peC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTQy
N2IzZTZiNDAxNTIyNzQyZDJiYzAzNjgxNjg3YzQ3Nzg4YTg4MAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL25peC9GRlRGcmFtZU5peC5jcHAKQEAgLTAs
MCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxMyBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKyNpbmNsdWRlICJGRlRGcmFtZS5oIgorCisj
aW5jbHVkZSAiVmVjdG9yTWF0aC5oIgorI2luY2x1ZGUgPGNtYXRoPgorI2luY2x1ZGUgPHB1Ymxp
Yy9GRlRGcmFtZS5oPgorI2luY2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0ZGVEZyYW1lOjpGRlRGcmFtZSh1bnNpZ25lZCBmZnRTaXplKQorICAgIDog
bV9GRlRTaXplKGZmdFNpemUpCisgICAgLCBtX2xvZzJGRlRTaXplKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihsb2cyKGZmdFNpemUpKSkKK3sKKyAgICBtX2ZmdEZyYW1lID0gYWRvcHRQdHIoTml4OjpQ
bGF0Zm9ybTo6Y3VycmVudCgpLT5jcmVhdGVGRlRGcmFtZShmZnRTaXplKSk7Cit9CisKK0ZGVEZy
YW1lOjpGRlRGcmFtZShjb25zdCBGRlRGcmFtZSYgZnJhbWUpCisgICAgOiBtX0ZGVFNpemUoZnJh
bWUubV9GRlRTaXplKQorICAgICwgbV9sb2cyRkZUU2l6ZShmcmFtZS5tX2xvZzJGRlRTaXplKQor
eworICAgIG1fZmZ0RnJhbWUgPSBhZG9wdFB0cihOaXg6OlBsYXRmb3JtOjpjdXJyZW50KCktPmNy
ZWF0ZUZGVEZyYW1lKGZyYW1lLm1fZmZ0RnJhbWUuZ2V0KCkpKTsKK30KKworRkZURnJhbWU6On5G
RlRGcmFtZSgpCit7CisgICAgbV9mZnRGcmFtZS5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgRkZURnJh
bWU6Om11bHRpcGx5KGNvbnN0IEZGVEZyYW1lJiBmcmFtZSkKK3sKKyAgICBpZiAoIW1fZmZ0RnJh
bWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZmZ0RnJhbWUtPm11bHRpcGx5KCpmcmFtZS5t
X2ZmdEZyYW1lKTsKKworICAgIC8vIFNjYWxlIGFjY291bnRzIHRoZSBwZWN1bGlhciBzY2FsaW5n
IG9mIHZlY0xpYiBvbiB0aGUgTWFjLgorICAgIC8vIFRoaXMgZW5zdXJlcyB0aGUgcmlnaHQgc2Nh
bGluZyBhbGwgdGhlIHdheSBiYWNrIHRvIGludmVyc2UgRkZULgorICAgIC8vIEZJWE1FOiBpZiB3
ZSBjaGFuZ2UgdGhlIHNjYWxpbmcgb24gdGhlIE1hYyB0aGVuIHRoaXMgc2NhbGUKKyAgICAvLyBm
YWN0b3Igd2lsbCBuZWVkIHRvIGNoYW5nZSB0b28uCisgICAgc2NhbGVQbGFuYXJEYXRhKDAuNWYp
OworfQorCisvLyBQcm92aWRlcyB0aW1lIGRvbWFpbiBzYW1wbGVzIGluIGFyZ3VtZW50ICJkYXRh
Ii4gRnJhbWUgd2lsbCBzdG9yZSB0aGUgdHJhbnNmb3JtZWQgZGF0YS4KK3ZvaWQgRkZURnJhbWU6
OmRvRkZUKGNvbnN0IGZsb2F0KiBkYXRhKQoreworICAgIGlmICghbV9mZnRGcmFtZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9mZnRGcmFtZS0+ZG9GRlQoZGF0YSk7CisKKyAgICBzY2FsZVBs
YW5hckRhdGEoMi4wZik7Cit9CisKKy8vIENhbGN1bGF0ZXMgaW52ZXJzZSB0cmFuc2Zvcm0gZnJv
bSB0aGUgc3RvcmVkIGRhdGEsIHB1dHRpbmcgdGhlIHJlc3VsdHMgaW4gYXJndW1lbnQgJ2RhdGEn
Lgordm9pZCBGRlRGcmFtZTo6ZG9JbnZlcnNlRkZUKGZsb2F0KiBkYXRhKQoreworICAgIGlmICgh
bV9mZnRGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9mZnRGcmFtZS0+ZG9JbnZlcnNl
RkZUKGRhdGEpOworCisgICAgLy8gU2NhbGUgc28gdGhhdCBhIGZvcndhcmQgdGhlbiBpbnZlcnNl
IEZGVCB5aWVsZHMgZXhhY3RseSB0aGUgb3JpZ2luYWwgZGF0YS4KKyAgICBjb25zdCBmbG9hdCBz
Y2FsZSA9IDEuMCAvICgyICogbV9GRlRTaXplKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9GRlRTaXplOyArK2kpCisgICAgICAgIGRhdGFbaV0gPSBzY2FsZSAqIGRhdGFbaV07Cit9
CisKK3ZvaWQgRkZURnJhbWU6OmluaXRpYWxpemUoKQoreworfQorCit2b2lkIEZGVEZyYW1lOjpj
bGVhbnVwKCkKK3sKK30KKwordm9pZCBGRlRGcmFtZTo6c2NhbGVQbGFuYXJEYXRhKGZsb2F0IHNj
YWxlKQoreworICAgIGZsb2F0KiByZWFsUCA9IG1fZmZ0RnJhbWUtPnJlYWxEYXRhKCk7CisgICAg
ZmxvYXQqIGltYWdQID0gbV9mZnRGcmFtZS0+aW1hZ0RhdGEoKTsKKworICAgIGNvbnN0IHVuc2ln
bmVkIGZyYW1lc1RvUHJvY2VzcyA9IG1fZmZ0RnJhbWUtPmZyZXF1ZW5jeURvbWFpblNhbXBsZUNv
dW50KCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhbWVzVG9Qcm9jZXNzOyAr
K2kpIHsKKyAgICAgICAgcmVhbFBbaV0gKj0gc2NhbGU7CisgICAgICAgIGltYWdQW2ldICo9IHNj
YWxlOworICAgIH0KK30KKworZmxvYXQqIEZGVEZyYW1lOjpyZWFsRGF0YSgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX2ZmdEZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBjb25z
dF9jYXN0PGZsb2F0Kj4obV9mZnRGcmFtZS0+cmVhbERhdGEoKSk7Cit9CisKK2Zsb2F0KiBGRlRG
cmFtZTo6aW1hZ0RhdGEoKSBjb25zdAoreworICAgIGlmICghbV9mZnRGcmFtZSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICByZXR1cm4gY29uc3RfY2FzdDxmbG9hdCo+KG1fZmZ0RnJhbWUtPmlt
YWdEYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L3N1
cHBvcnQvQXVkaW9CdXNOaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L3N1cHBv
cnQvQXVkaW9CdXNOaXguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5YmM0ODQ3MjAyN2VhYWM5ZTFjNzY5OWMy
ODI0ZjA1NGMwYzY5NmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uaXgvc3VwcG9ydC9BdWRpb0J1c05peC5jcHAKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8cHVibGljL0F1ZGlvQnVzLmg+CisK
KyNpZiBFTkFCTEUoV0VCX0FVRElPKQorI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisjZWxzZQorbmFt
ZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQXVkaW9CdXMgeworfTsKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKyNlbmRpZgorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgTml4
IHsKKworY2xhc3MgQXVkaW9CdXNQcml2YXRlIHsKK3B1YmxpYzoKKyAgICBBdWRpb0J1c1ByaXZh
dGUoUGFzc1JlZlB0cjxXZWJDb3JlOjpBdWRpb0J1cz4gYXVkaW9CdXMpCisgICAgICAgIDogbV9h
dWRpb0J1cyhhdWRpb0J1cykKKyAgICB7IH0KKworICAgIFJlZlB0cjxXZWJDb3JlOjpBdWRpb0J1
cz4gbV9hdWRpb0J1czsKK307CisKK3ZvaWQgQXVkaW9CdXM6OmluaXRpYWxpemUodW5zaWduZWQg
bnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IGxlbmd0aCwgZG91YmxlIHNhbXBsZVJhdGUpCit7Cisj
aWYgRU5BQkxFKFdFQl9BVURJTykKKyAgICBpZiAobV9kKQorICAgICAgICBkZWxldGUgbV9kOwor
ICAgIG1fZCA9IG5ldyBBdWRpb0J1c1ByaXZhdGUoV2ViQ29yZTo6QXVkaW9CdXM6OmNyZWF0ZShu
dW1iZXJPZkNoYW5uZWxzLCBsZW5ndGgpKTsKKyAgICBtX2QtPm1fYXVkaW9CdXMtPnNldFNhbXBs
ZVJhdGUoc2FtcGxlUmF0ZSk7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2Vu
ZGlmCit9CisKK3ZvaWQgQXVkaW9CdXM6OnJlc2l6ZVNtYWxsZXIoc2l6ZV90IG5ld0xlbmd0aCkK
K3sKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIEFTU0VSVChtX2QpOworICAgIGlmIChtX2Qp
IHsKKyAgICAgICAgQVNTRVJUKG5ld0xlbmd0aCA8PSBsZW5ndGgoKSk7CisgICAgICAgIG1fZC0+
bV9hdWRpb0J1cy0+cmVzaXplU21hbGxlcihuZXdMZW5ndGgpOworICAgIH0KKyNlbHNlCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwordm9pZCBBdWRpb0J1czo6cmVzZXQo
KQoreworI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAgZGVsZXRlIG1fZDsKKyAgICBtX2QgPSAw
OworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQorCit1bnNpZ25l
ZCBBdWRpb0J1czo6bnVtYmVyT2ZDaGFubmVscygpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFdFQl9B
VURJTykKKyAgICBpZiAoIW1fZCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fZC0+
bV9hdWRpb0J1cy0+bnVtYmVyT2ZDaGFubmVscygpOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCitzaXplX3QgQXVkaW9CdXM6Omxl
bmd0aCgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFdFQl9BVURJTykKKyAgICBpZiAoIW1fZCkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fZC0+bV9hdWRpb0J1cy0+bGVuZ3RoKCk7Cisj
ZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworI2VuZGlmCit9
CisKK2RvdWJsZSBBdWRpb0J1czo6c2FtcGxlUmF0ZSgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFdF
Ql9BVURJTykKKyAgICBpZiAoIW1fZCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1f
ZC0+bV9hdWRpb0J1cy0+c2FtcGxlUmF0ZSgpOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCitmbG9hdCogQXVkaW9CdXM6OmNoYW5u
ZWxEYXRhKHVuc2lnbmVkIGNoYW5uZWxJbmRleCkKK3sKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQor
ICAgIGlmICghbV9kKQorICAgICAgICByZXR1cm4gMDsKKyAgICBBU1NFUlQoY2hhbm5lbEluZGV4
IDwgbnVtYmVyT2ZDaGFubmVscygpKTsKKyAgICByZXR1cm4gbV9kLT5tX2F1ZGlvQnVzLT5jaGFu
bmVsKGNoYW5uZWxJbmRleCktPm11dGFibGVEYXRhKCk7CisjZWxzZQorICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK1Bhc3NSZWZQdHI8V2ViQ29y
ZTo6QXVkaW9CdXM+IEF1ZGlvQnVzOjphdWRpb0J1cygpCit7CisjaWYgRU5BQkxFKFdFQl9BVURJ
TykKKyAgICByZXR1cm4gbV9kLT5tX2F1ZGlvQnVzOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9zdXBwb3J0
L0RhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L3N1cHBvcnQvRGF0YS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNGM3ZmQ0MDBmNWNjNTk3MjUxODVlMmRiMzkwMjFlYWQ3YmQ2YjQwMwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9zdXBwb3J0L0RhdGEu
Y3BwCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHB1Ymxp
Yy9EYXRhLmg+CisKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKworbmFtZXNwYWNlIE5peCB7
CisKK2NsYXNzIERhdGE6OkRhdGFQcml2YXRlIDogcHVibGljIFdlYkNvcmU6OlNoYXJlZEJ1ZmZl
ciB7Cit9OworCit2b2lkIERhdGE6OnJlc2V0KCkKK3sKKyAgICBpZiAobV9wcml2YXRlKSB7Cisg
ICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAgICAgICAgbV9wcml2YXRlID0gMDsKKyAgICB9
Cit9CisKK3ZvaWQgRGF0YTo6YXNzaWduKGNvbnN0IERhdGEmIG90aGVyKQoreworICAgIERhdGFQ
cml2YXRlKiBwID0gY29uc3RfY2FzdDxEYXRhUHJpdmF0ZSo+KG90aGVyLm1fcHJpdmF0ZSk7Cisg
ICAgaWYgKHApCisgICAgICAgIHAtPnJlZigpOworICAgIGFzc2lnbihwKTsKK30KKwordm9pZCBE
YXRhOjphc3NpZ24oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgYXNzaWdu
KHN0YXRpY19jYXN0PERhdGFQcml2YXRlKj4oCisgICAgICAgIFdlYkNvcmU6OlNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKGRhdGEsIHNpemUpLmxlYWtSZWYoKSkpOworfQorCitzaXplX3QgRGF0YTo6c2l6
ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ByaXZhdGUpCisgICAgICAgIHJldHVybiAwOworICAg
IHJldHVybiBjb25zdF9jYXN0PERhdGFQcml2YXRlKj4obV9wcml2YXRlKS0+c2l6ZSgpOworfQor
Citjb25zdCBjaGFyKiBEYXRhOjpkYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8RGF0YVByaXZhdGUqPiht
X3ByaXZhdGUpLT5kYXRhKCk7Cit9CisKK0RhdGE6OkRhdGEoY29uc3QgUGFzc1JlZlB0cjxXZWJD
b3JlOjpTaGFyZWRCdWZmZXI+JiBidWZmZXIpCisgICAgOiBtX3ByaXZhdGUoc3RhdGljX2Nhc3Q8
RGF0YVByaXZhdGUqPihidWZmZXIubGVha1JlZigpKSkKK3sKK30KKworRGF0YSYgRGF0YTo6b3Bl
cmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYgYnVmZmVyKQor
eworICAgIGFzc2lnbihzdGF0aWNfY2FzdDxEYXRhUHJpdmF0ZSo+KGJ1ZmZlci5sZWFrUmVmKCkp
KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0RhdGE6Om9wZXJhdG9yIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6U2hhcmVkQnVmZmVyPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6U2hhcmVkQnVmZmVyPihjb25zdF9jYXN0PERhdGFQcml2YXRlKj4obV9wcml2YXRlKSk7
Cit9CisKK3ZvaWQgRGF0YTo6YXNzaWduKERhdGFQcml2YXRlKiBwKQoreworICAgIC8vIHAgaXMg
YWxyZWFkeSByZWYnZCBmb3IgdXMgYnkgdGhlIGNhbGxlcgorICAgIGlmIChtX3ByaXZhdGUpCisg
ICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAgICBtX3ByaXZhdGUgPSBwOworfQorCit9IC8v
IG5hbWVzcGFjZSBOaXgKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCA0NDAxZjU2YzM5MmY0YTY2OGNlNDlkNjkyNmRiZmRlNDg2ZDI3YWRiLi5jMTU3
YjU3ODg2YTQ1NmI5YTNkM2U5MGM2ZTcyNjUyYzk0ODRmNDlkIDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTMtMDkt
MDkgIEh1Z28gUGFyZW50ZSBMaW1hICA8aHVnby5saW1hQG9wZW5ib3NzYS5vcmc+CisKKyAgICAg
ICAgQWRkaW5nIE5peCBmaWxlcyBpbiBTb3VyY2UvUGxhdGZvcm0gdG8gdHJ1bmsKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODMzMQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIHNwZWNpYWwgcnVs
ZSBmb3IgTml4IEFQSSBmaWxlcyBsb2NhdGVkIGF0IFNvdXJjZS9QbGF0Zm9ybS9uaXguCisKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHk6CisKIDIwMTMtMDktMDkg
IEtyenlzenRvZiBDemVjaCAgPGsuY3plY2hAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0FYXVtB
VEtdIEFjY2Vzc2liaWxpdHlPYmplY3QgcmVwcmVzZW50aW5nIFByb2dyZXNzQmFyIGVsZW1lbnQg
c2hvdWxkIGJlIEFUS19WQUxVRSB0eXBlCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL2NoZWNrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXIucHkKaW5kZXggZWY3MjM3YmVkZjZkM2VhMDBhMTAxM2RiNmJkZmY5ZDlmMDk4ODg3Zi4uOGVl
ZWZmYWI0ZDJkM2U5NTk0OTNkZjYwMjM2MmZiZmYxMjBhZWQ0OCAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlci5weQpAQCAtMTkxLDcgKzE5MSwxMSBAQCBfUEFUSF9SVUxFU19T
UEVDSUZJRVIgPSBbCiAKICAgICAoWyMgSGVhZGVyIGZpbGVzIGluIEZvcndhcmRpbmdIZWFkZXJz
IGhhdmUgbm8gaGVhZGVyIGd1YXJkcyBvcgogICAgICAgIyBleGNlcHRpb25hbCBoZWFkZXIgZ3Vh
cmRzIChlLmcuLCBXZWJDb3JlX0ZXRF9EZWJ1Z2dlcl9oKS4KLSAgICAgICIvRm9yd2FyZGluZ0hl
YWRlcnMvIl0sCisgICAgICAiL0ZvcndhcmRpbmdIZWFkZXJzLyIsCisgICAgICAjIE5peCBwbGF0
Zm9ybSBBUEkgY2xhc3NlcyB1c2VzIGNvbW1vbiBuYW1lcyB1bmRlciBOaXggbmFtZXNwYWNlCisg
ICAgICAjIHNvIHRoZSBpbmNsdWRlIGd1YXJkcyBzaG91bGQgYWxzbyBpbmNsdWRlIHRoZSBuYW1l
c3BhY2UgdG8gYXZvaWQKKyAgICAgICMgbmFtZSBjbGFzaCB3aXRoIG90aGVyIGZpbGVzLCBlLmcu
IENhbnZhc19oLCBWZWN0b3JfaCwgZXRjLgorICAgICAgIlNvdXJjZS9QbGF0Zm9ybS9uaXgiXSwK
ICAgICAgWyItYnVpbGQvaGVhZGVyX2d1YXJkIl0pLAogICAgIChbIyBhc3NlbWJsZXIgaGFzIGxv
dHMgb2Ygb3Bjb2RlcyB0aGF0IHVzZSB1bmRlcnNjb3Jlcywgc28KICAgICAgICMgd2UgZG9uJ3Qg
Y2hlY2sgZm9yIHVuZGVyc2NvcmVzIGluIHRoYXQgZGlyZWN0b3J5Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215193</attachid>
            <date>2013-10-25 11:12:11 -0700</date>
            <delta_ts>2013-10-29 15:08:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118331-20131025151451.patch</filename>
            <type>text/plain</type>
            <size>91504</size>
            <attacher name="Hugo Parente Lima">hugo.lima</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU3ODAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBlY2I4NTg4N2RmMjc4
ZWEwOGU4ODM1ZjBlYjI4MTJkMmExZTE3MzNkLi40ZjgwNzM4ZmMwZTZmMTg3OGE2NzJmNTU1NDA0
MWU0YzE5M2Y2YzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxMy0xMC0yNSAg
SHVnbyBQYXJlbnRlIExpbWEgIDxodWdvLmxpbWFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBB
ZGRpbmcgTml4IGZpbGVzIGluIFNvdXJjZS9QbGF0Zm9ybSB0byB0cnVuaworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4MzMxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGZpbGVzIHBhcnQgb2YgTml4
IHB1YmxpYyBBUEkgdXNlZCB0byBpbXBsZW1lbnQKKyAgICAgICAgYmFja2VuZHMgZm9yIHNvbWUg
V2ViS2l0IHN1YnN5c3RlbXMgb24gQXBwbGljYXRpb24gc2lkZS4KKworICAgICAgICAqIG5peC9w
dWJsaWMvQXVkaW9EZXZpY2UuaDogQWRkZWQuCisgICAgICAgICogbml4L3B1YmxpYy9DYW52YXMu
aDogQWRkZWQuCisgICAgICAgICogbml4L3B1YmxpYy9Db2xvci5oOiBBZGRlZC4KKyAgICAgICAg
KiBuaXgvcHVibGljL0NvbW1vbi5oOiBBZGRlZC4KKyAgICAgICAgKiBuaXgvcHVibGljL0ZGVEZy
YW1lLmg6IEFkZGVkLgorICAgICAgICAqIG5peC9wdWJsaWMvR2FtZXBhZC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBuaXgvcHVibGljL0dhbWVwYWRzLmg6IEFkZGVkLgorICAgICAgICAqIG5peC9wdWJs
aWMvTWVkaWFQbGF5ZXIuaDogQWRkZWQuCisgICAgICAgICogbml4L3B1YmxpYy9NdWx0aUNoYW5u
ZWxQQ01EYXRhLmg6IEFkZGVkLgorICAgICAgICAqIG5peC9wdWJsaWMvUGxhdGZvcm0uaDogQWRk
ZWQuCisgICAgICAgICogbml4L3B1YmxpYy9SZWN0Lmg6IEFkZGVkLgorICAgICAgICAqIG5peC9w
dWJsaWMvU2l6ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBuaXgvcHVibGljL1RoZW1lRW5naW5lLmg6
IEFkZGVkLgorICAgICAgICAqIG5peC9zcmMvRGVmYXVsdFdlYlRoZW1lRW5naW5lLmNwcDogQWRk
ZWQuCisgICAgICAgICogbml4L3NyYy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUuaDogQWRkZWQuCisg
ICAgICAgICogbml4L3NyYy9QbGF0Zm9ybS5jcHA6IEFkZGVkLgorCiAyMDEzLTA2LTE0ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIEdU
SyBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjE4NGJiYTY2ZmNhNzNkYzEwYjRlMzNiM2Q5YzJj
MDJjY2Q3OGYwYi4uMzFkMTBkOWI5YmVlMGVhZTEyNzk0YzAxYzg0MmQ2ZmY1MWUzNDRjZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEzLTEwLTI1ICBIdWdvIFBhcmVudGUgTGltYSAg
PGh1Z28ubGltYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIEFkZGluZyBOaXggZmlsZXMgaW4g
U291cmNlL1BsYXRmb3JtIHRvIHRydW5rCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTgzMzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgTml4IFdlYkF1ZGlvIGltcGxlbWVudGF0aW9uIHRoYXQganVz
dCBmb3J3YXJkIHNvbWUgY2FsbHMgdG8gb3VyIEFQSS4KKyAgICAgICAgVGhpcyBwYXRjaCBpcyBw
YXJ0IG9mIHRoZSB1cHN0cmVhbSBwcm9jZXNzLCB0ZXN0cyB3aWxsIGJlIGxhbmRlZCBieSBvdGhl
ciBwYXRjaGVzLgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbml4L0F1ZGlvQnVzTml4LmNw
cDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbml4L0F1ZGlvRGVzdGluYXRpb25O
aXguY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9uaXgvQXVkaW9EZXN0aW5h
dGlvbk5peC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9uaXgvRkZURnJhbWVO
aXguY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uaXgvc3VwcG9ydC9NdWx0aUNoYW5u
ZWxQQ01EYXRhLmNwcDogQWRkZWQuCisKIDIwMTMtMTAtMjIgIHBlYXZvQG91dGxvb2suY29tICA8
cGVhdm9Ab3V0bG9vay5jb20+CiAKICAgICAgICAgW1dpbkNhaXJvXSBDb21waWxlIGVycm9yLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvQXVkaW9EZXZpY2UuaCBiL1Nv
dXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0F1ZGlvRGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2EwZmFh
NGQ2ZWQ2YTU2ZGZkYmVlZDYyNzkzMDhjOGFiNDg1OWRjOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0F1ZGlvRGV2aWNlLmgKQEAgLTAsMCArMSw1NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIE5peF9BdWRpb0RldmljZV9oCisjZGVmaW5lIE5peF9BdWRp
b0RldmljZV9oCisKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworbmFt
ZXNwYWNlIE5peCB7CisKK2NsYXNzIEF1ZGlvRGV2aWNlIHsKK3B1YmxpYzoKKyAgICBjbGFzcyBS
ZW5kZXJDYWxsYmFjayB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVy
KGNvbnN0IHN0ZDo6dmVjdG9yPGZsb2F0Kj4mIC8qc291cmNlRGF0YSovLCBjb25zdCBzdGQ6OnZl
Y3RvcjxmbG9hdCo+JiAvKmRlc3RpbmF0aW9uRGF0YSovLCBzaXplX3QgLypudW1iZXJPZkZyYW1l
cyovKSA9IDA7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgflJlbmRlckNhbGxi
YWNrKCkgeyB9CisgICAgfTsKKworICAgIHZpcnR1YWwgfkF1ZGlvRGV2aWNlKCkgeyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgc3RhcnQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7
CisgICAgdmlydHVhbCBkb3VibGUgc2FtcGxlUmF0ZSgpID0gMDsKK307CisKK30gLy8gbmFtZXNw
YWNlIE5peAorCisjZW5kaWYgLy8gTml4X0F1ZGlvRGV2aWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9QbGF0Zm9ybS9uaXgvcHVibGljL0NhbnZhcy5oIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJs
aWMvQ2FudmFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTJlZGQzNzNlZjc0NDk3NDdmZTgzYjk5Y2FkYjNiYThj
ZGViMTc5OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0Nh
bnZhcy5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYg
Tml4X0NhbnZhc19oCisjZGVmaW5lIE5peF9DYW52YXNfaAorCisjaW5jbHVkZSA8Y2Fpcm8vY2Fp
cm8uaD4KKworbmFtZXNwYWNlIE5peCB7CisKK3R5cGVkZWYgY2Fpcm9fdCBDYW52YXM7CisKK30g
Ly8gbmFtZXNwYWNlIE5peAorCisjZW5kaWYgLy8gTml4X0NhbnZhc19oCmRpZmYgLS1naXQgYS9T
b3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9Db2xvci5oIGIvU291cmNlL1BsYXRmb3JtL25peC9w
dWJsaWMvQ29sb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MWEyMmY0NzQxYWJiOWQ1NGZmZTk5ODZiMWRhNjNi
Y2JlOTU2ZWUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMv
Q29sb3IuaApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisqLworCisjaWZuZGVmIE5peF9Db2xvcl9oCisjZGVmaW5lIE5peF9Db2xvcl9oCisKKyNpbmNs
dWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKworbmFtZXNwYWNlIE5peCB7CisK
K2NsYXNzIENvbG9yIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHVfaW50MzJfdCBBUkdCMzI7IC8v
IEFSR0IgcXVhZHJ1cGxldAorCisgICAgc3RhdGljIGNvbnN0IEFSR0IzMiBibGFjayA9IDB4RkYw
MDAwMDA7CisgICAgc3RhdGljIGNvbnN0IEFSR0IzMiB3aGl0ZSA9IDB4RkZGRkZGRkY7CisgICAg
c3RhdGljIGNvbnN0IEFSR0IzMiByZWQgPSAweEZGRkYwMDAwOworICAgIHN0YXRpYyBjb25zdCBB
UkdCMzIgZ3JlZW4gPSAweEZGMDBGRjAwOworICAgIHN0YXRpYyBjb25zdCBBUkdCMzIgYmx1ZSA9
IDB4RkYwMDAwRkY7CisgICAgc3RhdGljIGNvbnN0IEFSR0IzMiBkYXJrR3JheSA9IDB4RkY4MDgw
ODA7CisgICAgc3RhdGljIGNvbnN0IEFSR0IzMiBncmF5ID0gMHhGRkEwQTBBMDsKKyAgICBzdGF0
aWMgY29uc3QgQVJHQjMyIGxpZ2h0R3JheSA9IDB4RkZDMEMwQzA7CisgICAgc3RhdGljIGNvbnN0
IEFSR0IzMiB0cmFuc3BhcmVudCA9IDB4MDAwMDAwMDA7CisKKyAgICBDb2xvcihBUkdCMzIgcmdi
YSkKKyAgICAgICAgOiBtX2FyZ2IocmdiYSkKKyAgICB7CisgICAgfQorCisgICAgQ29sb3IoaW50
IHIsIGludCBnLCBpbnQgYiwgaW50IGEgPSAyNTUpCisgICAgICAgIDogbV9hcmdiKGZpeFZhbHVl
KGEpIDw8IDI0IHwgZml4VmFsdWUocikgPDwgMTYgfCBmaXhWYWx1ZShnKSA8PCA4IHwgZml4VmFs
dWUoYikpCisgICAgeworICAgIH0KKworICAgIG9wZXJhdG9yIEFSR0IzMigpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9hcmdiOworICAgIH0KKworICAgIHVuc2lnbmVkIGNoYXIgcigp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKG1fYXJnYiAmIDB4MDBGRjAwMDApID4+IDE2
OworICAgIH0KKworICAgIHVuc2lnbmVkIGNoYXIgZygpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gKG1fYXJnYiAmIDB4MDAwMEZGMDApID4+IDg7CisgICAgfQorCisgICAgdW5zaWduZWQg
Y2hhciBiKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAobV9hcmdiICYgMHgwMDAwMDBG
Rik7CisgICAgfQorCisgICAgdW5zaWduZWQgY2hhciBhKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiAobV9hcmdiICYgMHhGRjAwMDAwMCkgPj4gMjQ7CisgICAgfQorCisgICAgQVJHQjMy
IGFyZ2IzMigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9hcmdiOworICAgIH0KKwor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYgb3RoZXIpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9hcmdiID09IG90aGVyLm1fYXJnYjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgQ29sb3ImIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYXJnYiAhPSBv
dGhlci5tX2FyZ2I7CisgICAgfQorCitwcml2YXRlOgorICAgIEFSR0IzMiBtX2FyZ2I7CisgICAg
c3RhdGljIGlubGluZSBBUkdCMzIgZml4VmFsdWUoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bWF4KDAsIHN0ZDo6bWluKHZhbHVlLCAyNTUpKTsKKyAgICB9Cit9OworCit9
IC8vIG5hbWVzcGFjZSBOaXgKKworI2VuZGlmIC8vIE5peF9Db2xvcl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9Db21tb24uaCBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgv
cHVibGljL0NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3NjllNWIyY2Q4MzZiMTIzNGFhYzk3YzczZWJl
MWU4NmIyZDc5NjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1Ymxp
Yy9Db21tb24uaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgTml4X0NvbW1vbl9oCisjZGVmaW5lIE5peF9Db21tb25faAorCisvLyBFeHBvcnRlZCBz
eW1ib2xzIG5lZWQgdG8gYmUgYW5ub3RhdGVkIHdpdGggTklYX0VYUE9SVAorI2RlZmluZSBOSVhf
RVhQT1JUIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpCisKKyNpbmNsdWRl
IDxzdGRkZWYuaD4gLy8gRm9yIHNpemVfdAorCisjZW5kaWYgLy8gTml4X0NvbW1vbl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9GRlRGcmFtZS5oIGIvU291cmNlL1Bs
YXRmb3JtL25peC9wdWJsaWMvRkZURnJhbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMjE5YTcyMWY3N2FmMGVj
YjRjMmU1ZmE4YTRmYmZlYWQ2MzJjOGQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRm
b3JtL25peC9wdWJsaWMvRkZURnJhbWUuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisjaWZuZGVmIE5peF9GRlRGcmFtZV9oCisjZGVmaW5lIE5peF9GRlRGcmFtZV9o
CisKK25hbWVzcGFjZSBOaXggeworCitjbGFzcyBGRlRGcmFtZSB7CitwdWJsaWM6CisgICAgRkZU
RnJhbWUoKSB7IH0KKyAgICB2aXJ0dWFsIH5GRlRGcmFtZSgpIHsgfQorCisgICAgdmlydHVhbCBG
RlRGcmFtZSogY29weSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkb0ZGVChjb25z
dCBmbG9hdCopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZG9JbnZlcnNlRkZUKGZsb2F0KikgPSAw
OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBmcmVxdWVuY3lEb21haW5TYW1wbGVDb3VudCgpIGNv
bnN0ID0gMDsKKyAgICAvLyBBZnRlciBtdWx0aXBsaWNhdGlvbiBhbmQgdHJhbnNmb3JtIG9wZXJh
dGlvbnMsIHRoZSBkYXRhIGlzIHNjYWxlZAorICAgIC8vIHRvIHRha2UgaW4gYWNjb3VudCB0aGUg
c2NhbGUgdXNlZCBpbnRlcm5hbGx5IGluIFdlYktpdCwgb3JpZ2luYWxseQorICAgIC8vIGZyb20g
TWFjJ3MgdmVjTGliLgorICAgIC8vIEFmdGVyIG11bHRpcGxpY2F0aW9uOiBQbGFuYXIgZGF0YSBp
cyBzY2FsZWQgYnkgMC41LgorICAgIC8vIEFmdGVyIGRpcmVjdCB0cmFuc2Zvcm06IFBsYW5hciBk
YXRhIGlzIHNjYWxlZCBieSAyLjAuCisgICAgLy8gQWZ0ZXIgaW52ZXJzZSB0cmFuc2Zvcm06IFRp
bWUgZG9tYWluIGRhdGEgaXMgc2NhbGVkIGJ5IDEuMC8oMiogRkZUIHNpemUpLgorICAgIHZpcnR1
YWwgZmxvYXQqIHJlYWxEYXRhKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZmxvYXQqIGltYWdE
YXRhKCkgY29uc3QgPSAwOworcHJpdmF0ZToKKyAgICBGRlRGcmFtZShjb25zdCBGRlRGcmFtZSYp
OworICAgIEZGVEZyYW1lJiBvcGVyYXRvcj0oY29uc3QgRkZURnJhbWUmKTsKK307CisKK30gLy8g
bmFtZXNwYWNlIE5peAorCisjZW5kaWYgLy8gTml4X0ZGVEZyYW1lX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0dhbWVwYWQuaCBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgv
cHVibGljL0dhbWVwYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMmU3ZTM2ZGRkNmYzZmMyMzNjOTE4OGFkMWY0
YTUwYmQzN2ViZjBmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJs
aWMvR2FtZXBhZC5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIE5peF9HYW1lcGFkX2gKKyNkZWZpbmUgTml4X0dhbWVwYWRfaAorCisjaW5jbHVkZSAi
Q29tbW9uLmgiCisKK25hbWVzcGFjZSBOaXggeworCitjbGFzcyBHYW1lcGFkIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGlkTGVuZ3RoQ2FwID0gMTI4OworICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgYXhlc0xlbmd0aENhcCA9IDE2OworICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
YnV0dG9uc0xlbmd0aENhcCA9IDMyOworCisgICAgR2FtZXBhZCgpCisgICAgICAgIDogY29ubmVj
dGVkKGZhbHNlKQorICAgICAgICAsIHRpbWVzdGFtcCgwKQorICAgICAgICAsIGF4ZXNMZW5ndGgo
MCkKKyAgICAgICAgLCBidXR0b25zTGVuZ3RoKDApCisgICAgeworICAgICAgICBpZFswXSA9IDA7
CisgICAgfQorCisgICAgLy8gSXMgdGhlcmUgYSBnYW1lcGFkIGNvbm5lY3RlZCBhdCB0aGlzIGlu
ZGV4PworICAgIGJvb2wgY29ubmVjdGVkOworCisgICAgLy8gRGV2aWNlIGlkZW50aWZpZXIgKGJh
c2VkIG9uIG1hbnVmYWN0dXJlciwgbW9kZWwsIGV0Yy4pLgorICAgIGNoYXIgaWRbaWRMZW5ndGhD
YXBdOworCisgICAgLy8gTW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIHZhbHVlIHJlZmVycmluZyB0
byB3aGVuIHRoZSBkYXRhIHdlcmUgbGFzdAorICAgIC8vIHVwZGF0ZWQuCisgICAgdW5zaWduZWQg
bG9uZyBsb25nIHRpbWVzdGFtcDsKKworICAgIC8vIE51bWJlciBvZiB2YWxpZCBlbnRyaWVzIGlu
IHRoZSBheGVzIGFycmF5LgorICAgIHVuc2lnbmVkIGF4ZXNMZW5ndGg7CisKKyAgICAvLyBOb3Jt
YWxpemVkIHZhbHVlcyByZXByZXNlbnRpbmcgYXhlcywgaW4gdGhlIHJhbmdlIFstMS4uMV0uCisg
ICAgZmxvYXQgYXhlc1theGVzTGVuZ3RoQ2FwXTsKKworICAgIC8vIE51bWJlciBvZiB2YWxpZCBl
bnRyaWVzIGluIHRoZSBidXR0b25zIGFycmF5LgorICAgIHVuc2lnbmVkIGJ1dHRvbnNMZW5ndGg7
CisKKyAgICAvLyBOb3JtYWxpemVkIHZhbHVlcyByZXByZXNlbnRpbmcgYnV0dG9ucywgaW4gdGhl
IHJhbmdlIFswLi4xXS4KKyAgICBmbG9hdCBidXR0b25zW2J1dHRvbnNMZW5ndGhDYXBdOworfTsK
KworfSAvLyBuYW1lc3BhY2UgTml4CisKKyNlbmRpZiAvLyBOaXhfR2FtZXBhZF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9HYW1lcGFkcy5oIGIvU291cmNlL1BsYXRm
b3JtL25peC9wdWJsaWMvR2FtZXBhZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYjM4ZWI4Y2U4NzA4Y2ZmYWJj
MmFkZWRkMGMyZDU1ODg3ZGRhNWU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3Jt
L25peC9wdWJsaWMvR2FtZXBhZHMuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBOaXhfR2FtZXBhZHNfaAorI2RlZmluZSBOaXhfR2FtZXBhZHNfaAor
CisjaW5jbHVkZSAiR2FtZXBhZC5oIgorCituYW1lc3BhY2UgTml4IHsKKworY2xhc3MgR2FtZXBh
ZHMgeworcHVibGljOgorICAgIEdhbWVwYWRzKCkKKyAgICAgICAgOiBsZW5ndGgoMCkKKyAgICB7
IH0KKworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgaXRlbXNMZW5ndGhDYXAgPSA0OworCisgICAg
Ly8gTnVtYmVyIG9mIHZhbGlkIGVudHJpZXMgaW4gdGhlIGl0ZW1zIGFycmF5LgorICAgIHVuc2ln
bmVkIGxlbmd0aDsKKworICAgIC8vIEdhbWVwYWQgZGF0YSBmb3IgTiBzZXBhcmF0ZSBnYW1lcGFk
IGRldmljZXMuCisgICAgR2FtZXBhZCBpdGVtc1tpdGVtc0xlbmd0aENhcF07Cit9OworCit9IC8v
IG5hbWVzcGFjZSBOaXgKKworI2VuZGlmIC8vIE5peF9HYW1lcGFkc19oCmRpZmYgLS1naXQgYS9T
b3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9NZWRpYVBsYXllci5oIGIvU291cmNlL1BsYXRmb3Jt
L25peC9wdWJsaWMvTWVkaWFQbGF5ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNjVkNDg2OGQ4MzAwMDkzODRm
ZjQ2MDk1NTdlNzQ0MGM1M2RmNDE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3Jt
L25peC9wdWJsaWMvTWVkaWFQbGF5ZXIuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgTml4X01lZGlhUGxheWVyCisjZGVmaW5lIE5peF9NZWRpYVBs
YXllcgorCituYW1lc3BhY2UgTml4IHsKKworY2xhc3MgTWVkaWFQbGF5ZXJDbGllbnQgeworcHVi
bGljOgorICAgIGVudW0gUmVhZHlTdGF0ZSAgeyBIYXZlTm90aGluZywgSGF2ZU1ldGFkYXRhLCBI
YXZlQ3VycmVudERhdGEsIEhhdmVGdXR1cmVEYXRhLCBIYXZlRW5vdWdoRGF0YSB9OworICAgIGVu
dW0gTmV0d29ya1N0YXRlIHsgRW1wdHksIElkbGUsIExvYWRpbmcsIExvYWRlZCwgRm9ybWF0RXJy
b3IsIE5ldHdvcmtFcnJvciwgRGVjb2RlRXJyb3IgfTsKKworICAgIHZpcnR1YWwgfk1lZGlhUGxh
eWVyQ2xpZW50KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGR1cmF0aW9uQ2hhbmdlZCgpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCByZWFkeVN0YXRlQ2hhbmdlZChSZWFkeVN0YXRlKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIG5ldHdvcmtTdGF0ZUNoYW5nZWQoTmV0d29ya1N0YXRlKSA9IDA7Cit9Owor
CitjbGFzcyBNZWRpYVBsYXllciB7CitwdWJsaWM6CisgICAgLy8gRGVyaXZhdGVkIGNsYXNzZXMg
c2hvdWxkbid0IGRvIGFueSBqb2Igb24gY29uc3RydWN0b3IsIE1lZGlhUGxheWVycyBjb3VsZCBi
ZQorICAgIC8vIGNyZWF0ZWQgZm9yIHByb2JpbmcgcHVycG9zZXMgd2l0aCBhIG51bGwgY2xpZW50
LgorICAgIE1lZGlhUGxheWVyKE1lZGlhUGxheWVyQ2xpZW50KiBjbGllbnQpCisgICAgICAgIDog
bV9wbGF5ZXJDbGllbnQoY2xpZW50KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5NZWRp
YVBsYXllcigpCisgICAgeworICAgICAgICBkZWxldGUgbV9wbGF5ZXJDbGllbnQ7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIHBsYXkoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhdXNlKCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBzZWVrKGZsb2F0KSA9IDA7CisgICAgdmlydHVhbCBmbG9h
dCBkdXJhdGlvbigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0IGN1cnJlbnRUaW1lKCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRWb2x1bWUoZmxvYXQpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0TXV0ZWQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkKGNv
bnN0IGNoYXIqIHVybCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzZWVraW5nKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgZmxvYXQgbWF4VGltZVNlZWthYmxlKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzZXRQbGF5YmFja1JhdGUoZmxvYXQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNMaXZlU3RyZWFtKCkgY29uc3QgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgTWVkaWFQbGF5ZXJD
bGllbnQqIG1fcGxheWVyQ2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgTml4CisKKyNlbmRp
ZiAvLyBOaXhfTWVkaWFQbGF5ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9w
dWJsaWMvTXVsdGlDaGFubmVsUENNRGF0YS5oIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMv
TXVsdGlDaGFubmVsUENNRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiYmVmOGJmZjBmODA1MWEzNzVkNjNl
MTE1MjBiZmIyZGMzMWYyMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4
L3B1YmxpYy9NdWx0aUNoYW5uZWxQQ01EYXRhLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5peF9NdWx0aUNoYW5uZWxQQ01EYXRhX2gKKyNkZWZp
bmUgTml4X011bHRpQ2hhbm5lbFBDTURhdGFfaAorCisjaW5jbHVkZSAiQ29tbW9uLmgiCisKK25h
bWVzcGFjZSBOaXggeworCisvLyBBIGNvbnRhaW5lciBmb3IgbXVsdGktY2hhbm5lbCBsaW5lYXIg
UENNIGF1ZGlvIGRhdGEuCitjbGFzcyBOSVhfRVhQT1JUIE11bHRpQ2hhbm5lbFBDTURhdGEgewor
cHVibGljOgorICAgIE11bHRpQ2hhbm5lbFBDTURhdGEodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVs
cywgc2l6ZV90IGxlbmd0aCwgZG91YmxlIHNhbXBsZVJhdGUpOworICAgIH5NdWx0aUNoYW5uZWxQ
Q01EYXRhKCk7CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKCkgY29uc3Q7CisgICAg
c2l6ZV90IGxlbmd0aCgpIGNvbnN0OworICAgIGRvdWJsZSBzYW1wbGVSYXRlKCkgY29uc3Q7CisK
KyAgICAvLyBUaGlzIGNhbiByZXR1cm4gbnVsbCBpZiBOaXggd2FzIGNvbXBpbGVkIHdpdGhvdXQg
V2ViQXVkaW8gc3VwcG9ydC4KKyAgICBmbG9hdCogY2hhbm5lbERhdGEodW5zaWduZWQgY2hhbm5l
bEluZGV4KTsKKworI2lmZGVmIEJVSUxESU5HX05JWF9fCisgICAgdm9pZCogZ2V0SW50ZXJuYWxE
YXRhKCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBNdWx0aUNoYW5uZWxQQ01EYXRhKGNvbnN0
IE11bHRpQ2hhbm5lbFBDTURhdGEmKTsKKyAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBNdWx0aUNo
YW5uZWxQQ01EYXRhJik7CisKKyAgICB2b2lkKiBtX2RhdGE7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBOaXgKKworI2VuZGlmIC8vIE5peF9NdWx0aUNoYW5uZWxQQ01EYXRhX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1BsYXRmb3JtLmggYi9Tb3VyY2UvUGxhdGZvcm0v
bml4L3B1YmxpYy9QbGF0Zm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4MmE4N2NhYTFhMGFjYzIwODFiODM2
MDk5NmVkYTRiZGQyNzY5NTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4
L3B1YmxpYy9QbGF0Zm9ybS5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBO
aXhfUGxhdGZvcm1faAorI2RlZmluZSBOaXhfUGxhdGZvcm1faAorCisjaW5jbHVkZSAiQXVkaW9E
ZXZpY2UuaCIKKyNpbmNsdWRlICJHYW1lcGFkcy5oIgorI2luY2x1ZGUgPHN0ZGludC5oPgorCitu
YW1lc3BhY2UgTml4IHsKKworY2xhc3MgTXVsdGlDaGFubmVsUENNRGF0YTsKK2NsYXNzIEZGVEZy
YW1lOworY2xhc3MgVGhlbWVFbmdpbmU7CitjbGFzcyBNZWRpYVBsYXllcjsKK2NsYXNzIE1lZGlh
UGxheWVyQ2xpZW50OworCitjbGFzcyBOSVhfRVhQT1JUIFBsYXRmb3JtIHsKK3B1YmxpYzoKKwor
ICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoUGxhdGZvcm0qKTsKKyAgICBzdGF0aWMgUGxhdGZv
cm0qIGN1cnJlbnQoKTsKKworICAgIC8vIEF1ZGlvCisgICAgdmlydHVhbCBmbG9hdCBhdWRpb0hh
cmR3YXJlU2FtcGxlUmF0ZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBhdWRp
b0hhcmR3YXJlQnVmZmVyU2l6ZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGF1ZGlvSGFyZHdhcmVPdXRwdXRDaGFubmVscygpIHsgcmV0dXJuIDA7IH0KKworICAgIC8vIENy
ZWF0ZXMgYSBkZXZpY2UgZm9yIGF1ZGlvIEkvTy4KKyAgICAvLyBQYXNzIGluIChudW1iZXJPZklu
cHV0Q2hhbm5lbHMgPiAwKSBpZiBsaXZlL2xvY2FsIGF1ZGlvIGlucHV0IGlzIGRlc2lyZWQuCisg
ICAgdmlydHVhbCBBdWRpb0RldmljZSogY3JlYXRlQXVkaW9EZXZpY2UoY29uc3QgY2hhciogLypp
bnB1dERldmljZUlkKi8sIHNpemVfdCAvKmJ1ZmZlclNpemUqLywgdW5zaWduZWQgLypudW1iZXJP
ZklucHV0Q2hhbm5lbHMqLywgdW5zaWduZWQgLypudW1iZXJPZk91dHB1dENoYW5uZWxzKi8sIGRv
dWJsZSAvKnNhbXBsZVJhdGUqLywgQXVkaW9EZXZpY2U6OlJlbmRlckNhbGxiYWNrKikgeyByZXR1
cm4gbnVsbHB0cjsgfQorCisgICAgLy8gR2FtZXBhZAorICAgIHZpcnR1YWwgdm9pZCBzYW1wbGVH
YW1lcGFkcyhHYW1lcGFkcyYgaW50bykgeyBpbnRvLmxlbmd0aCA9IDA7IH0KKworICAgIC8vIEZG
VEZyYW1lCisgICAgdmlydHVhbCBGRlRGcmFtZSogY3JlYXRlRkZURnJhbWUodW5zaWduZWQgLypm
ZnRzaXplKi8pIHsgcmV0dXJuIG51bGxwdHI7IH0KKworICAgIC8vIERlY29kZXMgdGhlIGluLW1l
bW9yeSBhdWRpbyBmaWxlIGRhdGEgYW5kIHJldHVybnMgdGhlIGxpbmVhciBQQ00gYXVkaW8gZGF0
YS4KKyAgICB2aXJ0dWFsIE11bHRpQ2hhbm5lbFBDTURhdGEqIGRlY29kZUF1ZGlvUmVzb3VyY2Uo
Y29uc3Qgdm9pZCogLyphdWRpb0RhdGEqLywgc2l6ZV90IC8qZGF0YVNpemUqLywgZG91YmxlIC8q
c2FtcGxlUmF0ZSovKSB7IHJldHVybiBudWxscHRyOyB9CisKKyAgICAvLyBUaGVtZSBlbmdpbmUK
KyAgICB2aXJ0dWFsIFRoZW1lRW5naW5lKiB0aGVtZUVuZ2luZSgpOworCisgICAgLy8gQ3JlYXRl
IGEgTWVkaWFQbGF5ZXIsIHVzZWQgdG8uLi4gcGxheSBtZWRpYSA6LSkKKyAgICB2aXJ0dWFsIE1l
ZGlhUGxheWVyKiBjcmVhdGVNZWRpYVBsYXllcihNZWRpYVBsYXllckNsaWVudCopIHsgcmV0dXJu
IG51bGxwdHI7IH0KK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5QbGF0Zm9ybSgpIHsgfQorfTsK
KworfSAvLyBuYW1lc3BhY2UgTml4CisKKyNlbmRpZiAvLyBOaXhfUGxhdGZvcm1faApkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvUmVjdC5oIGIvU291cmNlL1BsYXRmb3Jt
L25peC9wdWJsaWMvUmVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEzNTE2MTg0YjIxY2Q0YTA0ZTJhNmMzODNl
Y2M3ODMzMDc4NWE0MTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1
YmxpYy9SZWN0LmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIE5peF9SZWN0X2gKKyNkZWZpbmUgTml4X1JlY3RfaAorCituYW1lc3BhY2UgTml4IHsK
KworY2xhc3MgUmVjdCB7CitwdWJsaWM6CisgICAgaW50IHg7CisgICAgaW50IHk7CisgICAgaW50
IHdpZHRoOworICAgIGludCBoZWlnaHQ7CisKKyAgICBSZWN0KGludCB4LCBpbnQgeSwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KQorICAgICAgICA6IHgoeCkKKyAgICAgICAgLCB5KHkpCisgICAgICAg
ICwgd2lkdGgod2lkdGgpCisgICAgICAgICwgaGVpZ2h0KGhlaWdodCkKKyAgICB7CisgICAgfQor
CisgICAgUmVjdChjb25zdCBSZWN0JiByKQorICAgICAgICA6IHgoci54KQorICAgICAgICAsIHko
ci55KQorICAgICAgICAsIHdpZHRoKHIud2lkdGgpCisgICAgICAgICwgaGVpZ2h0KHIuaGVpZ2h0
KQorICAgIHsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBOaXgKKworI2VuZGlmIC8vIE5p
eF9SZWN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1NpemUuaCBi
L1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1NpemUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMzYwYjQ0ZmM4
ODY5OGI1ZDM3MmJkYTM0M2I0MTZlOTkzZTZjY2M2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1BsYXRmb3JtL25peC9wdWJsaWMvU2l6ZS5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBOaXhfU2l6ZV9oCisjZGVmaW5lIE5peF9TaXplX2gKKworbmFtZXNwYWNlIE5peCB7
CisKK3N0cnVjdCBTaXplIHsKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IGhlaWdodDsKKworICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gd2lkdGggPD0gMCB8
fCBoZWlnaHQgPD0gMDsKKyAgICB9CisKKyAgICBTaXplKCkKKyAgICAgICAgOiB3aWR0aCgwKQor
ICAgICAgICAsIGhlaWdodCgwKQorICAgIHsKKyAgICB9CisKKyAgICBTaXplKGludCB3aWR0aCwg
aW50IGhlaWdodCkKKyAgICAgICAgOiB3aWR0aCh3aWR0aCkKKyAgICAgICAgLCBoZWlnaHQoaGVp
Z2h0KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU2l6ZSYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gd2lkdGggPT0gb3RoZXIud2lkdGggJiYg
aGVpZ2h0ID09IG90aGVyLmhlaWdodDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgU2l6ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgTml4CisKKyNlbmRpZiAvLyBOaXhf
U2l6ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9UaGVtZUVuZ2lu
ZS5oIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvVGhlbWVFbmdpbmUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lOGU1MjIzODY1M2UxNjA2N2MyMjgzN2QzNGQ0ZTAxYjNkNDJmMzRjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvVGhlbWVFbmdpbmUuaApAQCAtMCwwICsx
LDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5peF9UaGVtZUVuZ2luZV9oCisjZGVmaW5lIE5p
eF9UaGVtZUVuZ2luZV9oCisKKyNpbmNsdWRlICJDYW52YXMuaCIKKyNpbmNsdWRlICJDb2xvci5o
IgorI2luY2x1ZGUgIlNpemUuaCIKKworbmFtZXNwYWNlIE5peCB7CisKK2NsYXNzIFJlY3Q7CisK
K2NsYXNzIFRoZW1lRW5naW5lIHsKK3B1YmxpYzoKKyAgICAvLyBUaGUgY3VycmVudCBzdGF0ZSBv
ZiB0aGUgYXNzb2NpYXRlZCBQYXJ0LgorICAgIGVudW0gU3RhdGUgeworICAgICAgICBTdGF0ZURp
c2FibGVkLAorICAgICAgICBTdGF0ZUhvdmVyLAorICAgICAgICBTdGF0ZU5vcm1hbCwKKyAgICAg
ICAgU3RhdGVQcmVzc2VkCisgICAgfTsKKworICAgIGVudW0gTWVkaWFQbGF5ZXJTdGF0ZSB7Cisg
ICAgICAgIFN0YXRlUGxheWluZywKKyAgICAgICAgU3RhdGVQYXVzZWQsCisgICAgICAgIFN0YXRl
TXV0ZWQsCisgICAgICAgIFN0YXRlTm90TXV0ZWQKKyAgICB9OworCisgICAgLy8gRXh0cmEgcGFy
YW1ldGVycyBmb3IgZHJhd2luZyB0aGUgUGFydFNjcm9sbGJhckhvcml6b250YWxUcmFjayBhbmQK
KyAgICAvLyBQYXJ0U2Nyb2xsYmFyVmVydGljYWxUcmFjay4KKyAgICBzdHJ1Y3QgU2Nyb2xsYmFy
VHJhY2tFeHRyYVBhcmFtcyB7CisgICAgICAgIC8vIFRoZSBib3VuZHMgb2YgdGhlIGVudGlyZSB0
cmFjaywgYXMgb3Bwb3NlZCB0byB0aGUgcGFydCBiZWluZyBwYWludGVkLgorICAgICAgICBpbnQg
dHJhY2tYOworICAgICAgICBpbnQgdHJhY2tZOworICAgICAgICBpbnQgdHJhY2tXaWR0aDsKKyAg
ICAgICAgaW50IHRyYWNrSGVpZ2h0OworICAgIH07CisKKyAgICAvLyBFeHRyYSBwYXJhbWV0ZXJz
IGZvciBQYXJ0Q2hlY2tib3gsIFBhcnRQdXNoQnV0dG9uIGFuZCBQYXJ0UmFkaW8uCisgICAgc3Ry
dWN0IEJ1dHRvbkV4dHJhUGFyYW1zIHsKKyAgICAgICAgYm9vbCBjaGVja2VkOworICAgICAgICBi
b29sIGluZGV0ZXJtaW5hdGU7IC8vIFdoZXRoZXIgdGhlIGJ1dHRvbiBzdGF0ZSBpcyBpbmRldGVy
bWluYXRlLgorICAgICAgICBib29sIGlzRGVmYXVsdDsgLy8gV2hldGhlciB0aGUgYnV0dG9uIGlz
IGRlZmF1bHQgYnV0dG9uLgorICAgICAgICBib29sIGhhc0JvcmRlcjsKKyAgICB9OworCisgICAg
Ly8gRXh0cmEgcGFyYW1ldGVycyBmb3IgUGFydElubmVyU3BpbkJ1dHRvbgorICAgIHN0cnVjdCBJ
bm5lclNwaW5CdXR0b25FeHRyYVBhcmFtcyB7CisgICAgICAgIGJvb2wgc3BpblVwOworICAgICAg
ICBib29sIHJlYWRPbmx5OworICAgIH07CisKKyAgICAvLyBFeHRyYSBwYXJhbWV0ZXJzIGZvciBQ
YXJ0UHJvZ3Jlc3NCYXIKKyAgICBzdHJ1Y3QgUHJvZ3Jlc3NCYXJFeHRyYVBhcmFtcyB7CisgICAg
ICAgIGJvb2wgaXNEZXRlcm1pbmF0ZTsKKyAgICAgICAgZG91YmxlIHBvc2l0aW9uOworICAgICAg
ICBkb3VibGUgYW5pbWF0aW9uUHJvZ3Jlc3M7CisgICAgICAgIGRvdWJsZSBhbmltYXRpb25TdGFy
dFRpbWU7CisgICAgfTsKKworICAgIHN0cnVjdCBNZXRlckV4dHJhUGFyYW1zIHsKKyAgICAgICAg
ZG91YmxlIG1pbjsKKyAgICAgICAgZG91YmxlIG1heDsKKyAgICAgICAgZG91YmxlIHZhbHVlOwor
ICAgICAgICBkb3VibGUgbG93OworICAgICAgICBkb3VibGUgaGlnaDsKKyAgICAgICAgZG91Ymxl
IG9wdGltdW07CisgICAgICAgIGRvdWJsZSB2YWx1ZVJhdGlvKCkgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKG1heCA8PSBtaW4pCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgICAgICByZXR1cm4gKHZhbHVlIC0gbWluKSAvIChtYXggLSBtaW4pOworICAgICAgICB9
CisgICAgfTsKKworICAgIHZpcnR1YWwgY29uc3QgY2hhciogZXh0cmFEZWZhdWx0U3R5bGVTaGVl
dCgpIGNvbnN0IHsgcmV0dXJuICIiOyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBleHRyYVF1
aXJrc1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiAiIjsgfQorICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogZXh0cmFQbHVnSW5zU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuICIiOyB9CisKKyAg
ICAvLyBUZXh0IHNlbGVjdGlvbiBjb2xvcnMuCisgICAgdmlydHVhbCBDb2xvciBhY3RpdmVTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBDb2xvciBhY3Rp
dmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBDb2xv
ciBpbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIENvbG9yIGluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QgPSAwOwor
CisgICAgLy8gTGlzdCBib3ggc2VsZWN0aW9uIGNvbG9ycworICAgIHZpcnR1YWwgQ29sb3IgYWN0
aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIENvbG9yIGFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxl
Y3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIENvbG9yIGFj
dGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIENv
bG9yIGluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QgPSAwOworCisgICAg
dmlydHVhbCBDb2xvciBmb2N1c1JpbmdDb2xvcigpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwg
Q29sb3IgdGFwSGlnaGxpZ2h0Q29sb3IoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRCdXR0b24oQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmLCBjb25zdCBCdXR0b25FeHRy
YVBhcmFtcyYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUZXh0RmllbGQoQ2Fu
dmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBTaXplIGdl
dENoZWNrYm94U2l6ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDaGVja2Jv
eChDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYsIGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1zJikg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgU2l6ZSBnZXRSYWRpb1NpemUoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50UmFkaW8oQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmLCBj
b25zdCBCdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRUZXh0QXJlYShDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0TWVudUxpc3RQYWRkaW5nKGludCYgcGFkZGluZ1RvcCwgaW50JiBwYWRk
aW5nTGVmdCwgaW50JiBwYWRkaW5nQm90dG9tLCBpbnQmIHBhZGRpbmdSaWdodCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBwYWludE1lbnVMaXN0KENhbnZhcyosIFN0YXRlLCBjb25zdCBS
ZWN0JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludFByb2dyZXNzQmFyKENhbnZh
cyosIFN0YXRlLCBjb25zdCBSZWN0JiwgY29uc3QgUHJvZ3Jlc3NCYXJFeHRyYVBhcmFtcyYpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBnZXRBbmltYXRpb25SZXBlYXRJbnRlcnZhbEZv
clByb2dyZXNzQmFyKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZG91YmxlIGdldEFuaW1hdGlv
bkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdl
dElubmVyU3BpbkJ1dHRvblBhZGRpbmcoaW50JiBwYWRkaW5nVG9wLCBpbnQmIHBhZGRpbmdMZWZ0
LCBpbnQmIHBhZGRpbmdCb3R0b20sIGludCYgcGFkZGluZ1JpZ2h0KSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHBhaW50SW5uZXJTcGluQnV0dG9uKENhbnZhcyosIFN0YXRlLCBjb25zdCBS
ZWN0JiwgY29uc3QgSW5uZXJTcGluQnV0dG9uRXh0cmFQYXJhbXMmKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHBhaW50TWV0ZXIoQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmLCBjb25z
dCBNZXRlckV4dHJhUGFyYW1zJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludFNs
aWRlclRyYWNrKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0JikgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBwYWludFNsaWRlclRodW1iKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0Jikg
Y29uc3QgPSAwOworCisgICAgLy8gTWVkaWFQbGF5ZXIgKGF1ZGlvIGFuZCB2aWRlbyBlbGVtZW50
cykKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRNZWRpYVBsYXlCdXR0b24oQ2FudmFzKiwgTWVkaWFQ
bGF5ZXJTdGF0ZSwgY29uc3QgUmVjdCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRNZWRpYU11dGVCdXR0b24oQ2FudmFzKiwgTWVkaWFQbGF5ZXJTdGF0ZSwgY29uc3QgUmVjdCYp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRNZWRpYVNlZWtCYWNrQnV0dG9uKENh
bnZhcyosIGNvbnN0IFJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50TWVk
aWFTZWVrRm9yd2FyZEJ1dHRvbihDYW52YXMqLCBjb25zdCBSZWN0JikgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBwYWludE1lZGlhUmV3aW5kQnV0dG9uKENhbnZhcyosIGNvbnN0IFJlY3Qm
KSBjb25zdCA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBOaXgKKworI2VuZGlmIC8vIE5peF9U
aGVtZUVuZ2luZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3NyYy9EZWZhdWx0
V2ViVGhlbWVFbmdpbmUuY3BwIGIvU291cmNlL1BsYXRmb3JtL25peC9zcmMvRGVmYXVsdFdlYlRo
ZW1lRW5naW5lLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MDdjY2RjYzRhZDE3MjA3MWJhYTY2NzJkNjZhZDQz
M2VhZWY4OTM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL25peC9zcmMvRGVm
YXVsdFdlYlRoZW1lRW5naW5lLmNwcApAQCAtMCwwICsxLDQ4OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcyku
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJEZWZhdWx0V2ViVGhl
bWVFbmdpbmUuaCIKKworI2luY2x1ZGUgInB1YmxpYy9Db2xvci5oIgorI2luY2x1ZGUgInB1Ymxp
Yy9SZWN0LmgiCisjaW5jbHVkZSAicHVibGljL1NpemUuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+
CisjaW5jbHVkZSA8Y2Fpcm8vY2Fpcm8uaD4KKyNpbmNsdWRlIDxjbWF0aD4KKworY29uc3QgZG91
YmxlIEJHQ29sb3IxID0gMHhGNiAvIDI1NS4wOworY29uc3QgZG91YmxlIEJHQ29sb3IyID0gMHhE
RSAvIDI1NS4wOworY29uc3QgZG91YmxlIEJvcmRlckNvbG9yID0gMHhBNCAvIDI1NS4wOworY29u
c3QgZG91YmxlIEJvcmRlck9uSG92ZXJDb2xvciA9IDB4N0EgLyAyNTUuMDsKK2NvbnN0IGRvdWJs
ZSBDaGVja0NvbG9yID0gMHg2NiAvIDI1NS4wOworY29uc3QgZG91YmxlIFRleHRGaWVsZERhcmtC
b3JkZXJDb2xvciA9IDB4OUEgLyAyNTUuMDsKK2NvbnN0IGRvdWJsZSBUZXh0RmllbGRMaWdodEJv
cmRlckNvbG9yID0gMHhFRSAvIDI1NS4wOworCitjb25zdCBpbnQgTWVudUxpc3RCb3JkZXIgPSA1
OworY29uc3QgaW50IE1lbnVMaXN0QXJyb3dTaXplID0gNjsKKworY29uc3QgaW50IElubmVyU3Bp
bkJ1dHRvbkJvcmRlciA9IDM7Citjb25zdCBpbnQgSW5uZXJTcGluQnV0dG9uQXJyb3dTaXplID0g
MjsKKworY29uc3QgTml4OjpDb2xvciBUYXBIaWdoTGlnaHRDb2xvcigweDY2MDAwMDAwKTsKKwor
bmFtZXNwYWNlIE5peCB7CisKK0NvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6YWN0aXZlU2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ29sb3I6OmJsdWU7
Cit9CisKK0NvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6YWN0aXZlU2VsZWN0aW9uRm9yZWdy
b3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ29sb3I6OndoaXRlOworfQorCitDb2xv
ciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9y
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ29sb3IoMTc2LCAxNzYsIDE3Nik7Cit9CisKK0NvbG9y
IERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6aW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3Io
KSBjb25zdAoreworICAgIHJldHVybiBDb2xvcjo6YmxhY2s7Cit9CisKK0NvbG9yIERlZmF1bHRX
ZWJUaGVtZUVuZ2luZTo6YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOworfQor
CitDb2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3Jl
Z3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBhY3RpdmVTZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3IoKTsKK30KKworQ29sb3IgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjppbmFjdGl2ZUxp
c3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBpbmFj
dGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOworfQorCitDb2xvciBEZWZhdWx0V2ViVGhl
bWVFbmdpbmU6OmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7Cit9CisK
K0NvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6YWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENv
bG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ29sb3IoMjU1LCAxNTAsIDUwKTsgLy8gT3Jhbmdl
LgorfQorCitDb2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmluYWN0aXZlVGV4dFNlYXJjaEhp
Z2hsaWdodENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ29sb3IoMjU1LCAyNTUsIDApOyAv
LyBZZWxsb3cuCit9CisKK0NvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6Zm9jdXNSaW5nQ29s
b3IoKSBjb25zdAoreworICAgIHJldHVybiBDb2xvcjo6YmxhY2s7Cit9CisKK0NvbG9yIERlZmF1
bHRXZWJUaGVtZUVuZ2luZTo6dGFwSGlnaGxpZ2h0Q29sb3IoKSBjb25zdAoreworICAgIHJldHVy
biBUYXBIaWdoTGlnaHRDb2xvcjsKK30KKworc3RhdGljIHZvaWQgZ3JhZGllbnRGaWxsKGNhaXJv
X3QqIGNhaXJvLCBkb3VibGUgeVN0YXJ0LCBkb3VibGUgeUxlbmd0aCwgYm9vbCBpbnZlcnRlZCA9
IGZhbHNlKQoreworICAgIGRvdWJsZSBncmFkU3RhcnRDb2xvciA9IEJHQ29sb3IxOworICAgIGRv
dWJsZSBncmFkRW5kQ29sb3IgPSBCR0NvbG9yMjsKKyAgICBpZiAoaW52ZXJ0ZWQpCisgICAgICAg
IHN0ZDo6c3dhcChncmFkU3RhcnRDb2xvciwgZ3JhZEVuZENvbG9yKTsKKworICAgIGNhaXJvX3Bh
dHRlcm5fdCogZ3JhZGllbnQgPSBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9saW5lYXIoMCwgeVN0YXJ0
LCAwLCB5U3RhcnQgKyB5TGVuZ3RoKTsKKyAgICBjYWlyb19wYXR0ZXJuX2FkZF9jb2xvcl9zdG9w
X3JnYihncmFkaWVudCwgMCwgZ3JhZFN0YXJ0Q29sb3IsIGdyYWRTdGFydENvbG9yLCBncmFkU3Rh
cnRDb2xvcik7CisgICAgY2Fpcm9fcGF0dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2IoZ3JhZGllbnQs
IDEsIGdyYWRFbmRDb2xvciwgZ3JhZEVuZENvbG9yLCBncmFkRW5kQ29sb3IpOworICAgIGNhaXJv
X3NldF9zb3VyY2UoY2Fpcm8sIGdyYWRpZW50KTsKKyAgICBjYWlyb19maWxsKGNhaXJvKTsKKyAg
ICBjYWlyb19wYXR0ZXJuX2Rlc3Ryb3koZ3JhZGllbnQpOworfQorCitzdGF0aWMgdm9pZCBzZXR1
cEJvcmRlcihjYWlyb190ICogY2Fpcm8sIFRoZW1lRW5naW5lOjpTdGF0ZSBzdGF0ZSkKK3sKKyAg
ICBkb3VibGUgYm9yZGVyQ29sb3IgPSBzdGF0ZSA9PSBUaGVtZUVuZ2luZTo6U3RhdGVIb3ZlciA/
IEJvcmRlck9uSG92ZXJDb2xvciA6IEJvcmRlckNvbG9yOworICAgIGNhaXJvX3NldF9zb3VyY2Vf
cmdiKGNhaXJvLCBib3JkZXJDb2xvciwgYm9yZGVyQ29sb3IsIGJvcmRlckNvbG9yKTsKKyAgICBj
YWlyb19zZXRfbGluZV93aWR0aChjYWlybywgMSk7Cit9CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1l
RW5naW5lOjpwYWludEJ1dHRvbihDYW52YXMqIGNhbnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFJl
Y3QmIHJlY3QsIGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1zJikgY29uc3QKK3sKKyAgICBjYWlyb19z
YXZlKGNhbnZhcyk7CisgICAgc2V0dXBCb3JkZXIoY2FudmFzLCBzdGF0ZSk7CisgICAgLy8gQ2Fp
cm8gdXNlcyBhIGNvb3JkaW5hdGUgc3lzdGVtIG5vdCBiYXNlZCBvbiBwaXhlbCBjb29yZGluYXRl
cywgc28KKyAgICAvLyB3ZSBuZWVkIHRvIGFkZCAgMC41IHRvIHggYW5kIHkgY29vcmQgb3IgdGhl
IGxpbmUgd2lsbCBzdGF5IGJldHdlZW4KKyAgICAvLyB0d28gcGl4ZWxzIGluc3RlYWQgb2YgaW4g
dGhlIG1pZGRsZSBvZiBhIHBpeGVsLgorICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3Qu
eCArIDAuNSwgcmVjdC55ICsgMC41LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7CisgICAgY2Fp
cm9fc3Ryb2tlX3ByZXNlcnZlKGNhbnZhcyk7CisKKyAgICBncmFkaWVudEZpbGwoY2FudmFzLCBy
ZWN0LnksIHJlY3QuaGVpZ2h0LCBzdGF0ZSA9PSBTdGF0ZVByZXNzZWQpOworICAgIGNhaXJvX3Jl
c3RvcmUoY2FudmFzKTsKK30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50VGV4
dEZpZWxkKENhbnZhcyogY2FudmFzLCBTdGF0ZSwgY29uc3QgUmVjdCYgcmVjdCkgY29uc3QKK3sK
KyAgICBjYWlyb19zYXZlKGNhbnZhcyk7CisKKyAgICBjb25zdCBkb3VibGUgbGluZVdpZHRoID0g
MjsKKyAgICBjb25zdCBkb3VibGUgY29ycmVjdGlvbiA9IGxpbmVXaWR0aCAvIDIuMDsKKworICAg
IGNhaXJvX3NldF9saW5lX3dpZHRoKGNhbnZhcywgbGluZVdpZHRoKTsKKyAgICBjYWlyb19zZXRf
c291cmNlX3JnYihjYW52YXMsIFRleHRGaWVsZERhcmtCb3JkZXJDb2xvciwgVGV4dEZpZWxkRGFy
a0JvcmRlckNvbG9yLCBUZXh0RmllbGREYXJrQm9yZGVyQ29sb3IpOworICAgIGNhaXJvX21vdmVf
dG8oY2FudmFzLCByZWN0LnggKyBjb3JyZWN0aW9uLCByZWN0LnkgKyBjb3JyZWN0aW9uICsgcmVj
dC5oZWlnaHQpOworICAgIGNhaXJvX3JlbF9saW5lX3RvKGNhbnZhcywgMCwgLXJlY3QuaGVpZ2h0
KTsKKyAgICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIHJlY3Qud2lkdGgsIDApOworICAgIGNh
aXJvX3N0cm9rZShjYW52YXMpOworCisgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2FudmFzLCBU
ZXh0RmllbGRMaWdodEJvcmRlckNvbG9yLCBUZXh0RmllbGRMaWdodEJvcmRlckNvbG9yLCBUZXh0
RmllbGRMaWdodEJvcmRlckNvbG9yKTsKKyAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54
ICsgY29ycmVjdGlvbiArIHJlY3Qud2lkdGgsIHJlY3QueSArIGNvcnJlY3Rpb24pOworICAgIGNh
aXJvX3JlbF9saW5lX3RvKGNhbnZhcywgMCwgcmVjdC5oZWlnaHQpOworICAgIGNhaXJvX3JlbF9s
aW5lX3RvKGNhbnZhcywgLXJlY3Qud2lkdGgsIDApOworICAgIGNhaXJvX3N0cm9rZShjYW52YXMp
OworCisgICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOworfQorCit2b2lkIERlZmF1bHRXZWJUaGVt
ZUVuZ2luZTo6cGFpbnRUZXh0QXJlYShDYW52YXMqIGNhbnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0
IFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgcGFpbnRUZXh0RmllbGQoY2FudmFzLCBzdGF0ZSwg
cmVjdCk7Cit9CisKK1NpemUgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpnZXRDaGVja2JveFNpemUo
KSBjb25zdAoreworICAgIHJldHVybiBTaXplKDEzLCAxMyk7Cit9CisKK3ZvaWQgRGVmYXVsdFdl
YlRoZW1lRW5naW5lOjpwYWludENoZWNrYm94KENhbnZhcyogY2FudmFzLCBTdGF0ZSBzdGF0ZSwg
Y29uc3QgUmVjdCYgcmVjdCwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMmIHBhcmFtKSBjb25zdAor
eworICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKKyAgICBzZXR1cEJvcmRlcihjYW52YXMsIHN0YXRl
KTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LnggKyAwLjUsIHJlY3QueSArIDAu
NSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOworICAgIGNhaXJvX3N0cm9rZV9wcmVzZXJ2ZShj
YW52YXMpOworCisgICAgZ3JhZGllbnRGaWxsKGNhbnZhcywgcmVjdC55LCByZWN0LmhlaWdodCwg
c3RhdGUgPT0gU3RhdGVQcmVzc2VkKTsKKworICAgIGlmIChwYXJhbS5jaGVja2VkKSB7CisgICAg
ICAgIGNvbnN0IGRvdWJsZSBib3JkZXIgPSAzOworICAgICAgICBjYWlyb19zZXRfbGluZV93aWR0
aChjYW52YXMsIDIpOworICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMsIENoZWNr
Q29sb3IsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IpOworICAgICAgICBjYWlyb19tb3ZlX3RvKGNh
bnZhcywgcmVjdC54ICsgMC41ICsgYm9yZGVyLCByZWN0LnkgKyAwLjUgKyByZWN0LmhlaWdodCAt
IGJvcmRlcik7CisgICAgICAgIGNhaXJvX3JlbF9saW5lX3RvKGNhbnZhcywgcmVjdC53aWR0aCAt
IGJvcmRlciAqIDIsIC1yZWN0LmhlaWdodCArIGJvcmRlciAqIDIpOworICAgICAgICBjYWlyb19t
b3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgMC41ICsgYm9yZGVyLCByZWN0LnkgKyAwLjUgKyBib3Jk
ZXIpOworICAgICAgICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIHJlY3Qud2lkdGggLSBib3Jk
ZXIgKiAyLCByZWN0LmhlaWdodCAtIGJvcmRlciAqIDIpOworICAgICAgICBjYWlyb19zdHJva2Uo
Y2FudmFzKTsKKyAgICB9CisKKyAgICBjYWlyb19yZXN0b3JlKGNhbnZhcyk7Cit9CisKK1NpemUg
RGVmYXVsdFdlYlRoZW1lRW5naW5lOjpnZXRSYWRpb1NpemUoKSBjb25zdAoreworICAgIHJldHVy
biBTaXplKDEzLCAxMyk7Cit9CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludFJh
ZGlvKENhbnZhcyogY2FudmFzLCBTdGF0ZSBzdGF0ZSwgY29uc3QgUmVjdCYgcmVjdCwgY29uc3Qg
QnV0dG9uRXh0cmFQYXJhbXMmIHBhcmFtKSBjb25zdAoreworICAgIGNhaXJvX3NhdmUoY2FudmFz
KTsKKyAgICBzZXR1cEJvcmRlcihjYW52YXMsIHN0YXRlKTsKKyAgICBjYWlyb19hcmMoY2FudmFz
LCByZWN0LnggKyByZWN0LndpZHRoIC8gMi4wLCByZWN0LnkgKyByZWN0LmhlaWdodCAvIDIuMCwg
cmVjdC53aWR0aCAvIDIuMCwgMCwgMiAqIE1fUEkpOworICAgIGNhaXJvX3N0cm9rZV9wcmVzZXJ2
ZShjYW52YXMpOworCisgICAgZ3JhZGllbnRGaWxsKGNhbnZhcywgcmVjdC55LCByZWN0LmhlaWdo
dCk7CisKKyAgICBpZiAocGFyYW0uY2hlY2tlZCkgeworICAgICAgICBjYWlyb19zZXRfc291cmNl
X3JnYihjYW52YXMsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IpOworICAgICAg
ICBjYWlyb19hcmMoY2FudmFzLCByZWN0LnggKyByZWN0LndpZHRoIC8gMi4wLCByZWN0LnkgKyBy
ZWN0LmhlaWdodCAvIDIuMCwgcmVjdC53aWR0aCAvIDQuMCwgMCwgMiAqIE1fUEkpOworICAgICAg
ICBjYWlyb19maWxsKGNhbnZhcyk7CisgICAgfQorICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsK
K30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmdldE1lbnVMaXN0UGFkZGluZyhpbnQm
IHBhZGRpbmdUb3AsIGludCYgcGFkZGluZ0xlZnQsIGludCYgcGFkZGluZ0JvdHRvbSwgaW50JiBw
YWRkaW5nUmlnaHQpIGNvbnN0Cit7CisgICAgcGFkZGluZ1RvcCA9IE1lbnVMaXN0Qm9yZGVyOwor
ICAgIHBhZGRpbmdMZWZ0ID0gTWVudUxpc3RCb3JkZXI7CisgICAgcGFkZGluZ0JvdHRvbSA9IE1l
bnVMaXN0Qm9yZGVyOworICAgIHBhZGRpbmdSaWdodCA9IDIgKiBNZW51TGlzdEJvcmRlciArIE1l
bnVMaXN0QXJyb3dTaXplOworfQorCit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRN
ZW51TGlzdChDYW52YXMqIGNhbnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QpIGNv
bnN0Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOworICAgIHNldHVwQm9yZGVyKGNhbnZhcywg
c3RhdGUpOworICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCArIDAuNSwgcmVjdC55
ICsgMC41LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7CisgICAgY2Fpcm9fc3Ryb2tlX3ByZXNl
cnZlKGNhbnZhcyk7CisKKyAgICBncmFkaWVudEZpbGwoY2FudmFzLCByZWN0LnksIHJlY3QuaGVp
Z2h0LCBzdGF0ZSA9PSBTdGF0ZVByZXNzZWQpOworCisgICAgY2Fpcm9fbW92ZV90byhjYW52YXMs
IHJlY3QueCArIHJlY3Qud2lkdGggLSBNZW51TGlzdEFycm93U2l6ZSAtIE1lbnVMaXN0Qm9yZGVy
LCByZWN0LnkgKyAxICsgcmVjdC5oZWlnaHQgLyAyIC0gTWVudUxpc3RBcnJvd1NpemUgLyAyKTsK
KyAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMsIENoZWNrQ29sb3IsIENoZWNrQ29sb3Is
IENoZWNrQ29sb3IpOworICAgIGNhaXJvX3JlbF9saW5lX3RvKGNhbnZhcywgTWVudUxpc3RBcnJv
d1NpemUsIDApOworICAgIGNhaXJvX3JlbF9saW5lX3RvKGNhbnZhcywgLU1lbnVMaXN0QXJyb3dT
aXplIC8gMiwgTWVudUxpc3RBcnJvd1NpemUpOworICAgIGNhaXJvX2Nsb3NlX3BhdGgoY2FudmFz
KTsKKyAgICBjYWlyb19maWxsKGNhbnZhcyk7CisKKyAgICBjYWlyb19yZXN0b3JlKGNhbnZhcyk7
Cit9CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludFByb2dyZXNzQmFyKENhbnZh
cyogY2FudmFzLCBTdGF0ZSBzdGF0ZSwgY29uc3QgUmVjdCYgcmVjdCwgY29uc3QgUHJvZ3Jlc3NC
YXJFeHRyYVBhcmFtcyYgcGFyYW1zKSBjb25zdAoreworICAgIGNhaXJvX3NhdmUoY2FudmFzKTsK
KworICAgIGlmIChwYXJhbXMuaXNEZXRlcm1pbmF0ZSkgeworICAgICAgICAvLyBCYWNrZ3JvdW5k
CisgICAgICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUpOworICAgICAgICBjYWlyb19yZWN0
YW5nbGUoY2FudmFzLCByZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOwor
ICAgICAgICBjYWlyb19maWxsKGNhbnZhcyk7CisgICAgICAgIC8vIFByb2dyZXNzCisgICAgICAg
IGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRoICogcGFy
YW1zLnBvc2l0aW9uLCByZWN0LmhlaWdodCk7CisgICAgICAgIGdyYWRpZW50RmlsbChjYW52YXMs
IHJlY3QueSwgcmVjdC5oZWlnaHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNhaXJvX3JlY3Rh
bmdsZShjYW52YXMsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7Cisg
ICAgICAgIGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQsIHRydWUpOwor
ICAgIH0KKworICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsKK30KKworLy8gVGhlc2UgdmFsdWVz
IGhhdmUgYmVlbiBjb3BpZWQgZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAKK3N0YXRp
YyBjb25zdCBpbnQgcHJvZ3Jlc3NBY3Rpdml0eUJsb2NrcyA9IDU7CitzdGF0aWMgY29uc3QgaW50
IHByb2dyZXNzQW5pbWF0aW9uRnJhbWVzID0gMTA7CitzdGF0aWMgY29uc3QgZG91YmxlIHByb2dy
ZXNzQW5pbWF0aW9uSW50ZXJ2YWwgPSAwLjEyNTsKKworZG91YmxlIERlZmF1bHRXZWJUaGVtZUVu
Z2luZTo6Z2V0QW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHByb2dyZXNzQW5pbWF0aW9uSW50ZXJ2YWw7Cit9CisKK2RvdWJsZSBEZWZh
dWx0V2ViVGhlbWVFbmdpbmU6OmdldEFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoKSBj
b25zdAoreworICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbkludGVydmFsICogcHJvZ3Jlc3NB
bmltYXRpb25GcmFtZXMgKiAyOyAvLyAiMiIgZm9yIGJhY2sgYW5kIGZvcnRoOworfQorCit2b2lk
IERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6Z2V0SW5uZXJTcGluQnV0dG9uUGFkZGluZyhpbnQmIHBh
ZGRpbmdUb3AsIGludCYgcGFkZGluZ0xlZnQsIGludCYgcGFkZGluZ0JvdHRvbSwgaW50JiBwYWRk
aW5nUmlnaHQpIGNvbnN0Cit7CisgICAgcGFkZGluZ1RvcCA9IElubmVyU3BpbkJ1dHRvbkJvcmRl
cjsKKyAgICBwYWRkaW5nTGVmdCA9IElubmVyU3BpbkJ1dHRvbkJvcmRlcjsKKyAgICBwYWRkaW5n
Qm90dG9tID0gSW5uZXJTcGluQnV0dG9uQm9yZGVyOworICAgIHBhZGRpbmdSaWdodCA9IDIgKiBJ
bm5lclNwaW5CdXR0b25Cb3JkZXIgKyBJbm5lclNwaW5CdXR0b25BcnJvd1NpemU7Cit9CisKK3Zv
aWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludElubmVyU3BpbkJ1dHRvbihDYW52YXMqIGNh
bnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QsIGNvbnN0IElubmVyU3BpbkJ1dHRv
bkV4dHJhUGFyYW1zJiBwYXJhbSkgY29uc3QKK3sKKyAgICBkb3VibGUgcmVjdEhhbGZIZWlnaHQg
PSByZWN0LmhlaWdodCAvIDI7CisKKyAgICBjYWlyb19zYXZlKGNhbnZhcyk7CisgICAgc2V0dXBC
b3JkZXIoY2FudmFzLCBzdGF0ZSk7CisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNhbnZhcywgcmVjdC54
ICsgMC41LCByZWN0LnkgKyAxLjUsIHJlY3Qud2lkdGgsIHJlY3RIYWxmSGVpZ2h0KTsKKyAgICBj
YWlyb19zdHJva2VfcHJlc2VydmUoY2FudmFzKTsKKworICAgIGdyYWRpZW50RmlsbChjYW52YXMs
IHJlY3QueSwgcmVjdEhhbGZIZWlnaHQsIHN0YXRlID09IFN0YXRlUHJlc3NlZCAmJiBwYXJhbS5z
cGluVXApOworCisgICAgc2V0dXBCb3JkZXIoY2FudmFzLCBzdGF0ZSk7CisgICAgY2Fpcm9fcmVj
dGFuZ2xlKGNhbnZhcywgcmVjdC54ICsgMC41LCByZWN0LnkgKyAwLjUgKyByZWN0SGFsZkhlaWdo
dCwgcmVjdC53aWR0aCwgcmVjdEhhbGZIZWlnaHQpOworICAgIGNhaXJvX3N0cm9rZV9wcmVzZXJ2
ZShjYW52YXMpOworCisgICAgZ3JhZGllbnRGaWxsKGNhbnZhcywgcmVjdC55ICsgcmVjdEhhbGZI
ZWlnaHQsIHJlY3RIYWxmSGVpZ2h0LCBzdGF0ZSA9PSBTdGF0ZVByZXNzZWQgJiYgIXBhcmFtLnNw
aW5VcCk7CisKKyAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgcmVjdC53aWR0aCAt
IElubmVyU3BpbkJ1dHRvbkFycm93U2l6ZSAtIElubmVyU3BpbkJ1dHRvbkJvcmRlciAqIDIsIHJl
Y3QueSArIHJlY3RIYWxmSGVpZ2h0ICsgcmVjdC5oZWlnaHQgLyA0IC0gSW5uZXJTcGluQnV0dG9u
QXJyb3dTaXplICsgMS41KTsKKyAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMsIENoZWNr
Q29sb3IsIENoZWNrQ29sb3IsIENoZWNrQ29sb3IpOworICAgIGNhaXJvX3JlbF9saW5lX3RvKGNh
bnZhcywgTWVudUxpc3RBcnJvd1NpemUsIDApOworICAgIGNhaXJvX3JlbF9saW5lX3RvKGNhbnZh
cywgLU1lbnVMaXN0QXJyb3dTaXplIC8gMiwgTWVudUxpc3RBcnJvd1NpemUpOworICAgIGNhaXJv
X2Nsb3NlX3BhdGgoY2FudmFzKTsKKworICAgIGNhaXJvX21vdmVfdG8oY2FudmFzLCByZWN0Lngg
KyByZWN0LndpZHRoIC0gSW5uZXJTcGluQnV0dG9uQXJyb3dTaXplIC0gSW5uZXJTcGluQnV0dG9u
Qm9yZGVyICogMiwgcmVjdC55ICsgcmVjdC5oZWlnaHQgLyA0ICsgSW5uZXJTcGluQnV0dG9uQXJy
b3dTaXplKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMsIENoZWNrQ29sb3IsIENo
ZWNrQ29sb3IsIENoZWNrQ29sb3IpOworICAgIGNhaXJvX3JlbF9saW5lX3RvKGNhbnZhcywgTWVu
dUxpc3RBcnJvd1NpemUsIDApOworICAgIGNhaXJvX3JlbF9saW5lX3RvKGNhbnZhcywgLU1lbnVM
aXN0QXJyb3dTaXplIC8gMiwgLU1lbnVMaXN0QXJyb3dTaXplKTsKKyAgICBjYWlyb19jbG9zZV9w
YXRoKGNhbnZhcyk7CisKKyAgICBjYWlyb19maWxsKGNhbnZhcyk7Cit9CisKK3ZvaWQgRGVmYXVs
dFdlYlRoZW1lRW5naW5lOjpwYWludE1ldGVyKENhbnZhcyogY2FudmFzLCBTdGF0ZSBzdGF0ZSwg
Y29uc3QgUmVjdCYgcmVjdCwgY29uc3QgTWV0ZXJFeHRyYVBhcmFtcyYgcGFyYW1zKSBjb25zdAor
eworICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKKworICAgIC8vIEJhY2tncm91bmQKKyAgICBzZXR1
cEJvcmRlcihjYW52YXMsIHN0YXRlKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0
LngsIHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOworICAgIGNhaXJvX2ZpbGwoY2Fu
dmFzKTsKKyAgICAvLyBNZXRlcgorICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCwg
cmVjdC55LCByZWN0LndpZHRoICogcGFyYW1zLnZhbHVlUmF0aW8oKSwgcmVjdC5oZWlnaHQpOwor
ICAgIGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQpOworCisgICAgY2Fp
cm9fcmVzdG9yZShjYW52YXMpOworfQorCitjb25zdCBpbnQgU2xpZGVyVHJhY2tIZWlnaHQgPSA2
OworCit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRTbGlkZXJUcmFjayhDYW52YXMq
IGNhbnZhcywgU3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgY2Fpcm9fc2F2
ZShjYW52YXMpOworICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCwgcmVjdC55ICsg
KHJlY3QuaGVpZ2h0IC0gU2xpZGVyVHJhY2tIZWlnaHQpIC8gMi4wLCByZWN0LndpZHRoLCBTbGlk
ZXJUcmFja0hlaWdodCk7CisgICAgZ3JhZGllbnRGaWxsKGNhbnZhcywgcmVjdC55LCByZWN0Lmhl
aWdodCwgdHJ1ZSk7CisgICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOworfQorCit2b2lkIERlZmF1
bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRTbGlkZXJUaHVtYihDYW52YXMqIGNhbnZhcywgU3RhdGUg
c3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52YXMp
OworICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUpOworICAgIGNhaXJvX3JlY3RhbmdsZShj
YW52YXMsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7CisgICAgY2Fp
cm9fc3Ryb2tlX3ByZXNlcnZlKGNhbnZhcyk7CisgICAgZ3JhZGllbnRGaWxsKGNhbnZhcywgcmVj
dC55LCByZWN0LmhlaWdodCwgc3RhdGUgPT0gU3RhdGVQcmVzc2VkKTsKKyAgICBjYWlyb19yZXN0
b3JlKGNhbnZhcyk7Cit9CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludE1lZGlh
UGxheUJ1dHRvbihDYW52YXMqIGNhbnZhcywgTWVkaWFQbGF5ZXJTdGF0ZSBzdGF0ZSwgY29uc3Qg
UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBjYWlyb19zYXZlKGNhbnZhcyk7CisgICAgY2Fpcm9f
c2V0X3NvdXJjZV9yZ2IoY2FudmFzLCAxLCAxLCAxKTsKKyAgICBpZiAoc3RhdGUgPT0gU3RhdGVQ
YXVzZWQpIHsKKyAgICAgICAgY2Fpcm9fbW92ZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0Lndp
ZHRoICogMC4zKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC4yNSkpOworICAgICAgICBjYWly
b19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjc1KSwgcmVjdC55ICsg
KHJlY3QuaGVpZ2h0ICogMC41KSk7CisgICAgICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0
LnggKyAocmVjdC53aWR0aCAqIDAuMyksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNzUpKTsK
KyAgICAgICAgY2Fpcm9fY2xvc2VfcGF0aChjYW52YXMpOworICAgICAgICBjYWlyb19maWxsKGNh
bnZhcyk7CisgICAgfSBlbHNlIHsgLy8gSWYgc3RhdGUgaXMgU3RhdGVQbGF5aW5nLgorICAgICAg
ICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuMyksIHJl
Y3QueSArIChyZWN0LmhlaWdodCAqIDAuMjUpLCAocmVjdC53aWR0aCAqIDAuMTUpLCAocmVjdC5o
ZWlnaHQgKiAwLjUpKTsKKyAgICAgICAgY2Fpcm9fZmlsbChjYW52YXMpOworICAgICAgICBjYWly
b19yZWN0YW5nbGUoY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuNTUpLCByZWN0Lnkg
KyAocmVjdC5oZWlnaHQgKiAwLjI1KSwgKHJlY3Qud2lkdGggKiAwLjE1KSwgKHJlY3QuaGVpZ2h0
ICogMC41KSk7CisgICAgICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsKKyAgICB9CisgICAgY2Fpcm9f
cmVzdG9yZShjYW52YXMpOworfQorCit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRN
ZWRpYU11dGVCdXR0b24oQ2FudmFzKiBjYW52YXMsIE1lZGlhUGxheWVyU3RhdGUgc3RhdGUsIGNv
bnN0IFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOworICAgIGlm
IChzdGF0ZSA9PSBTdGF0ZU11dGVkKSB7CisgICAgICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNh
bnZhcywgMSk7CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhbnZhcywgMTM5LCAwLCAw
KTsKKworICAgICAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGgg
KiAwLjU5KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC42NykpOworICAgICAgICBjYWlyb19s
aW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjg3KSwgcmVjdC55ICsgKHJl
Y3QuaGVpZ2h0ICogMC4zNCkpOworICAgICAgICBjYWlyb19zdHJva2UoY2FudmFzKTsKKworICAg
ICAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjg3KSwg
cmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC42NykpOworICAgICAgICBjYWlyb19saW5lX3RvKGNh
bnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjU5KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0
ICogMC4zNCkpOworICAgICAgICBjYWlyb19zdHJva2UoY2FudmFzKTsKKyAgICB9IGVsc2UgeyAv
LyBJZiBzdGF0ZSBpcyBTdGF0ZU5vdE11dGVkCisgICAgICAgIGNhaXJvX3NldF9saW5lX3dpZHRo
KGNhbnZhcywgNSk7CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhbnZhcywgMSwgMSwg
MSk7CisKKyAgICAgICAgY2Fpcm9fYXJjKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAw
LjMpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUpLCByZWN0LndpZHRoICogMC4zNCwgMTEg
KiAoTV9QSSAvIDYpLCBNX1BJIC8gNik7CisgICAgICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsKKyAg
ICAgICAgY2Fpcm9fYXJjKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjMpLCByZWN0
LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUpLCByZWN0LndpZHRoICogMC40NSwgMTEgKiAoTV9QSSAv
IDYpLCBNX1BJIC8gNik7CisgICAgICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsKKyAgICAgICAgY2Fp
cm9fYXJjKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjMpLCByZWN0LnkgKyAocmVj
dC5oZWlnaHQgKiAwLjUpLCByZWN0LndpZHRoICogMC41NywgMTEgKiAoTV9QSSAvIDYpLCBNX1BJ
IC8gNik7CisgICAgICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsKKyAgICB9CisKKyAgICAvLyBTcGVh
a2VyCisgICAgY2Fpcm9fbW92ZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC41
MiksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuMTgpKTsKKyAgICBjYWlyb19saW5lX3RvKGNh
bnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjI5KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0
ICogMC4zOCkpOworICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0
aCAqIDAuMDgpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjM4KSk7CisgICAgY2Fpcm9fbGlu
ZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC4wOCksIHJlY3QueSArIChyZWN0
LmhlaWdodCAqIDAuNjIpKTsKKyAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJl
Y3Qud2lkdGggKiAwLjI5KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC42MikpOworICAgIGNh
aXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuNTIpLCByZWN0Lnkg
KyAocmVjdC5oZWlnaHQgKiAwLjgyKSk7CisgICAgY2Fpcm9fY2xvc2VfcGF0aChjYW52YXMpOwor
ICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsKKworICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsKK30K
Kwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50TWVkaWFTZWVrQmFja0J1dHRvbihD
YW52YXMqIGNhbnZhcywgY29uc3QgUmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBjYWlyb19zYXZl
KGNhbnZhcyk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2FudmFzLCAxLCAxLCAxKTsKKyAg
ICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjkwKSwgcmVj
dC55ICsgKHJlY3QuaGVpZ2h0ICogMC43MCkpOworICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCBy
ZWN0LnggKyAocmVjdC53aWR0aCAqIDAuNTgpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUx
KSk7CisgICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC41
OCksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNzApKTsKKworICAgIGNhaXJvX2xpbmVfdG8o
Y2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuMjMpLCByZWN0LnkgKyAocmVjdC5oZWln
aHQgKiAwLjUxKSk7CisgICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0Lndp
ZHRoICogMC4yMyksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNzApKTsKKyAgICBjYWlyb19s
aW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjExKSwgcmVjdC55ICsgKHJl
Y3QuaGVpZ2h0ICogMC43MCkpOworICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAo
cmVjdC53aWR0aCAqIDAuMTEpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjI5KSk7CisgICAg
Y2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC4yMyksIHJlY3Qu
eSArIChyZWN0LmhlaWdodCAqIDAuMjkpKTsKKyAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVj
dC54ICsgKHJlY3Qud2lkdGggKiAwLjIzKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC40OCkp
OworCisgICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC41
OCksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuMjkpKTsKKyAgICBjYWlyb19saW5lX3RvKGNh
bnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjU4KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0
ICogMC40OCkpOworICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0
aCAqIDAuOTApLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjI5KSk7CisgICAgY2Fpcm9fY2xv
c2VfcGF0aChjYW52YXMpOworICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsKKworICAgIGNhaXJvX3Jl
c3RvcmUoY2FudmFzKTsKK30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50TWVk
aWFTZWVrRm9yd2FyZEJ1dHRvbihDYW52YXMqIGNhbnZhcywgY29uc3QgUmVjdCYgcmVjdCkgY29u
c3QKK3sKKyAgICBjYWlyb19zYXZlKGNhbnZhcyk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2Io
Y2FudmFzLCAxLCAxLCAxKTsKKyAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgKHJl
Y3Qud2lkdGggKiAwLjEwKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC43MCkpOworICAgIGNh
aXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuNDIpLCByZWN0Lnkg
KyAocmVjdC5oZWlnaHQgKiAwLjUxKSk7CisgICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3Qu
eCArIChyZWN0LndpZHRoICogMC40MiksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNzApKTsK
KworICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuNzcp
LCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUxKSk7CisgICAgY2Fpcm9fbGluZV90byhjYW52
YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC43NyksIHJlY3QueSArIChyZWN0LmhlaWdodCAq
IDAuNzApKTsKKyAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGgg
KiAwLjg5KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC43MCkpOworICAgIGNhaXJvX2xpbmVf
dG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuODkpLCByZWN0LnkgKyAocmVjdC5o
ZWlnaHQgKiAwLjI5KSk7CisgICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0
LndpZHRoICogMC43NyksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuMjkpKTsKKyAgICBjYWly
b19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjc3KSwgcmVjdC55ICsg
KHJlY3QuaGVpZ2h0ICogMC40OCkpOworCisgICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3Qu
eCArIChyZWN0LndpZHRoICogMC40MiksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuMjkpKTsK
KyAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjQyKSwg
cmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC40OCkpOworICAgIGNhaXJvX2xpbmVfdG8oY2FudmFz
LCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuMTApLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAw
LjI5KSk7CisgICAgY2Fpcm9fY2xvc2VfcGF0aChjYW52YXMpOworICAgIGNhaXJvX2ZpbGwoY2Fu
dmFzKTsKKworICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsKK30KKwordm9pZCBEZWZhdWx0V2Vi
VGhlbWVFbmdpbmU6OnBhaW50TWVkaWFSZXdpbmRCdXR0b24oQ2FudmFzKiBjYW52YXMsIGNvbnN0
IFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOworICAgIGNhaXJv
X3NldF9zb3VyY2VfcmdiKGNhbnZhcywgMSwgMSwgMSk7CisgICAgY2Fpcm9fbW92ZV90byhjYW52
YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC44NCksIHJlY3QueSArIChyZWN0LmhlaWdodCAq
IDAuNzApKTsKKyAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGgg
KiAwLjUyKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC41MSkpOworICAgIGNhaXJvX2xpbmVf
dG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuNTIpLCByZWN0LnkgKyAocmVjdC5o
ZWlnaHQgKiAwLjcwKSk7CisgICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0
LndpZHRoICogMC4xNyksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNTApKTsKKyAgICBjYWly
b19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjUyKSwgcmVjdC55ICsg
KHJlY3QuaGVpZ2h0ICogMC4yOSkpOworICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0Lngg
KyAocmVjdC53aWR0aCAqIDAuNTIpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjQ4KSk7Cisg
ICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC44NCksIHJl
Y3QueSArIChyZWN0LmhlaWdodCAqIDAuMjkpKTsKKyAgICBjYWlyb19jbG9zZV9wYXRoKGNhbnZh
cyk7CisgICAgY2Fpcm9fZmlsbChjYW52YXMpOworCisgICAgY2Fpcm9fcmVzdG9yZShjYW52YXMp
OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3NyYy9EZWZhdWx0V2Vi
VGhlbWVFbmdpbmUuaCBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL0RlZmF1bHRXZWJUaGVtZUVu
Z2luZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjBkZmY1M2VlYzY3N2I1ZmJmMzBmMjlkZWJmZGQwZmM1YTU3NDRh
NmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3NyYy9EZWZhdWx0V2Vi
VGhlbWVFbmdpbmUuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgRGVmYXVsdFdlYlRoZW1lRW5naW5lX2gKKyNkZWZpbmUgRGVmYXVsdFdlYlRoZW1l
RW5naW5lX2gKKworI2luY2x1ZGUgInB1YmxpYy9UaGVtZUVuZ2luZS5oIgorCituYW1lc3BhY2Ug
Tml4IHsKKworY2xhc3MgRGVmYXVsdFdlYlRoZW1lRW5naW5lIEZJTkFMIDogcHVibGljIFRoZW1l
RW5naW5lIHsKK3B1YmxpYzoKKyAgICAvLyBUZXh0IHNlbGVjdGlvbiBjb2xvcnMuCisgICAgdmly
dHVhbCBDb2xvciBhY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNv
bnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgQ29sb3IgaW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIENvbG9yIGluYWN0aXZlU2Vs
ZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICAvLyBMaXN0IGJv
eCBzZWxlY3Rpb24gY29sb3JzCisgICAgdmlydHVhbCBDb2xvciBhY3RpdmVMaXN0Qm94U2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBDb2xvciBh
Y3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIENvbG9yIGluYWN0aXZlTGlzdEJveFNlbGVj
dGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0IE9WRVJSSURFOworCisgICAgdmlydHVhbCBDb2xv
ciBhY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIENvbG9yIGluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QgT1ZF
UlJJREU7CisKKyAgICB2aXJ0dWFsIENvbG9yIGZvY3VzUmluZ0NvbG9yKCkgY29uc3QgT1ZFUlJJ
REU7CisKKyAgICB2aXJ0dWFsIENvbG9yIHRhcEhpZ2hsaWdodENvbG9yKCkgY29uc3QgT1ZFUlJJ
REU7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCdXR0b24oQ2FudmFzKiwgU3RhdGUsIGNvbnN0
IFJlY3QmLCBjb25zdCBCdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0IE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBwYWludFRleHRGaWVsZChDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYpIGNv
bnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwYWludFRleHRBcmVhKENhbnZhcyosIFN0
YXRlLCBjb25zdCBSZWN0JikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTaXplIGdldENo
ZWNrYm94U2l6ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwYWludENoZWNr
Ym94KENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0JiwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMm
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFNpemUgZ2V0UmFkaW9TaXplKCkgY29uc3Qg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHBhaW50UmFkaW8oQ2FudmFzKiwgU3RhdGUsIGNv
bnN0IFJlY3QmLCBjb25zdCBCdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0IE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBwYWludE1lbnVMaXN0KENhbnZhcyAqLCBTdGF0ZSwgY29uc3QgUmVjdCAm
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0TWVudUxpc3RQYWRkaW5nKGlu
dCYgcGFkZGluZ1RvcCwgaW50JiBwYWRkaW5nTGVmdCwgaW50JiBwYWRkaW5nQm90dG9tLCBpbnQm
IHBhZGRpbmdSaWdodCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHBhaW50UHJv
Z3Jlc3NCYXIoQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmLCBjb25zdCBQcm9ncmVzc0JhckV4
dHJhUGFyYW1zJikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBkb3VibGUgZ2V0QW5pbWF0
aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcigpIGNvbnN0IE9WRVJSSURFOworICAgIHZp
cnR1YWwgZG91YmxlIGdldEFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRJbm5lclNwaW5CdXR0b24oQ2FudmFzICos
IFN0YXRlLCBjb25zdCBSZWN0ICYsIGNvbnN0IElubmVyU3BpbkJ1dHRvbkV4dHJhUGFyYW1zJikg
Y29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGdldElubmVyU3BpbkJ1dHRvblBhZGRp
bmcoaW50JiBwYWRkaW5nVG9wLCBpbnQmIHBhZGRpbmdMZWZ0LCBpbnQmIHBhZGRpbmdCb3R0b20s
IGludCYgcGFkZGluZ1JpZ2h0KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRNZXRlcihDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYsIGNvbnN0IE1ldGVyRXh0cmFQYXJh
bXMmKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTbGlkZXJUcmFjayhD
YW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBwYWludFNsaWRlclRodW1iKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0JikgY29uc3Qg
T1ZFUlJJREU7CisKKyAgICAvLyBNZWRpYSBQbGF5ZXIKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRN
ZWRpYVBsYXlCdXR0b24oQ2FudmFzKiwgTWVkaWFQbGF5ZXJTdGF0ZSwgY29uc3QgUmVjdCYpIGNv
bnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwYWludE1lZGlhTXV0ZUJ1dHRvbihDYW52
YXMqLCBNZWRpYVBsYXllclN0YXRlLCBjb25zdCBSZWN0JikgY29uc3QgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIHBhaW50TWVkaWFTZWVrQmFja0J1dHRvbihDYW52YXMqLCBjb25zdCBSZWN0
JikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHBhaW50TWVkaWFTZWVrRm9yd2Fy
ZEJ1dHRvbihDYW52YXMqLCBjb25zdCBSZWN0JikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIHBhaW50TWVkaWFSZXdpbmRCdXR0b24oQ2FudmFzKiwgY29uc3QgUmVjdCYpIGNvbnN0
IE9WRVJSSURFOworfTsKKworfSAvLyBuYW1lc3BhY2UgTml4CisKKyNlbmRpZiAvLyBEZWZhdWx0
V2ViVGhlbWVFbmdpbmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9zcmMvUGxh
dGZvcm0uY3BwIGIvU291cmNlL1BsYXRmb3JtL25peC9zcmMvUGxhdGZvcm0uY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjc4NGQyNDc2NTFjZjdjOTZkNDFjZjIwODdhNjk5ZGJmN2EwMzBmMTkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3NyYy9QbGF0Zm9ybS5jcHAKQEAgLTAsMCArMSw1
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAicHVibGljL1BsYXRmb3JtLmgiCisKKyNpbmNsdWRlICJEZWZhdWx0V2ViVGhlbWVFbmdp
bmUuaCIKKworbmFtZXNwYWNlIE5peCB7CisKK3N0YXRpYyBQbGF0Zm9ybSogc19wbGF0Zm9ybTsK
Kwordm9pZCBQbGF0Zm9ybTo6aW5pdGlhbGl6ZShQbGF0Zm9ybSogcGxhdGZvcm0pCit7CisgICAg
c19wbGF0Zm9ybSA9IHBsYXRmb3JtOworfQorCitQbGF0Zm9ybSogUGxhdGZvcm06OmN1cnJlbnQo
KQoreworICAgIHN0YXRpYyBQbGF0Zm9ybSBlbXB0eVBsYXRmb3JtOworICAgIHJldHVybiBzX3Bs
YXRmb3JtID8gc19wbGF0Zm9ybSA6ICZlbXB0eVBsYXRmb3JtOworfQorCitUaGVtZUVuZ2luZSog
UGxhdGZvcm06OnRoZW1lRW5naW5lKCkKK3sKKyAgICBzdGF0aWMgRGVmYXVsdFdlYlRoZW1lRW5n
aW5lIHRoZW1lOworICAgIHJldHVybiAmdGhlbWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIE5peApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbml4L0F1ZGlvQnVzTml4
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL25peC9BdWRpb0J1c05peC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMGRlMDdiZmZjOGQ3ZjNmNjc2YjQwNGUwMmUwNDRiOTk3MDY3MGIwMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL25peC9BdWRpb0J1
c05peC5jcHAKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiQXVk
aW9CdXMuaCIKKworI2luY2x1ZGUgIkF1ZGlvRmlsZVJlYWRlci5oIgorI2luY2x1ZGUgPGNzdGRp
bz4KKyNpbmNsdWRlIDxwdWJsaWMvTXVsdGlDaGFubmVsUENNRGF0YS5oPgorI2luY2x1ZGUgPHB1
YmxpYy9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bh
c3NSZWZQdHI8QXVkaW9CdXM+IGRlY29kZUF1ZGlvRmlsZURhdGEoY29uc3QgY2hhciogZGF0YSwg
c2l6ZV90IHNpemUsIGRvdWJsZSBzYW1wbGVSYXRlKQoreworICAgIE93blB0cjxOaXg6Ok11bHRp
Q2hhbm5lbFBDTURhdGE+IHBjbURhdGEgPSBhZG9wdFB0cihOaXg6OlBsYXRmb3JtOjpjdXJyZW50
KCktPmRlY29kZUF1ZGlvUmVzb3VyY2UoZGF0YSwgc2l6ZSwgc2FtcGxlUmF0ZSkpOworICAgIGlm
IChwY21EYXRhKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QXVkaW9CdXMq
PihwY21EYXRhLT5nZXRJbnRlcm5hbERhdGEoKSkpOworICAgIHJldHVybiBudWxscHRyOworfQor
CitQYXNzUmVmUHRyPEF1ZGlvQnVzPiBBdWRpb0J1czo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoY29u
c3QgY2hhciogbmFtZSwgZmxvYXQgc2FtcGxlUmF0ZSkKK3sKKyAgICBTdHJpbmcgYWJzb2x1dGVG
aWxlbmFtZShtYWtlU3RyaW5nKERBVEFfRElSLCAiL3dlYmF1ZGlvL3Jlc291cmNlcy8iLCBuYW1l
LCAiLndhdiIpKTsKKworICAgIEZJTEUqIGZpbGUgPSBmb3BlbihhYnNvbHV0ZUZpbGVuYW1lLnV0
ZjgoKS5kYXRhKCksICJyYiIpOworICAgIGlmICghZmlsZSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBmc2VlayhmaWxlLCAwLCBTRUVLX0VORCk7CisgICAgV1RGOjpWZWN0b3I8Y2hh
cj4gZmlsZUNvbnRlbnRzOworICAgIGZpbGVDb250ZW50cy5yZXNpemUoZnRlbGwoZmlsZSkpOwor
ICAgIHJld2luZChmaWxlKTsKKyAgICBzaXplX3QgYnl0ZXNSZWFkID0gZnJlYWQoJmZpbGVDb250
ZW50c1swXSwgZmlsZUNvbnRlbnRzLnNpemUoKSwgMSwgZmlsZSk7CisgICAgaWYgKGJ5dGVzUmVh
ZCA8IGZpbGVDb250ZW50cy5zaXplKCkpCisgICAgICAgIGZpbGVDb250ZW50cy5yZXNpemUoYnl0
ZXNSZWFkKTsKKyAgICBmY2xvc2UoZmlsZSk7CisKKyAgICByZXR1cm4gZGVjb2RlQXVkaW9GaWxl
RGF0YSgmZmlsZUNvbnRlbnRzWzBdLCBmaWxlQ29udGVudHMuc2l6ZSgpLCBzYW1wbGVSYXRlKTsK
K30KKworUGFzc1JlZlB0cjxBdWRpb0J1cz4gY3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxl
KGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSwgYm9vbCBtaXhUb01vbm8sIGZsb2F0
IHNhbXBsZVJhdGUpCit7CisgICAgUmVmUHRyPEF1ZGlvQnVzPiBhdWRpb0J1cyA9IGRlY29kZUF1
ZGlvRmlsZURhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLCBkYXRhU2l6ZSwgc2Ft
cGxlUmF0ZSk7CisgICAgaWYgKCFhdWRpb0J1cykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICAvLyBJZiB0aGUgYnVzIG5lZWRzIG5vIGNvbnZlcnNpb24gdGhlbiByZXR1cm4gYXMgaXMu
CisgICAgaWYgKCFtaXhUb01vbm8gfHwgYXVkaW9CdXMtPm51bWJlck9mQ2hhbm5lbHMoKSA9PSAx
KQorICAgICAgICByZXR1cm4gYXVkaW9CdXMucmVsZWFzZSgpOworCisgICAgcmV0dXJuIEF1ZGlv
QnVzOjpjcmVhdGVCeVNhbXBsZVJhdGVDb252ZXJ0aW5nKGF1ZGlvQnVzLmdldCgpLCBtaXhUb01v
bm8sIHNhbXBsZVJhdGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vbml4L0F1ZGlvRGVzdGluYXRpb25OaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vbml4L0F1ZGlvRGVzdGluYXRpb25OaXguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAwNGIzZDQ0
OWExY2NkMzI1YjY3MmQ0NDIyMWJiYmUwOTU5ZmZjYzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9uaXgvQXVkaW9EZXN0aW5hdGlvbk5peC5jcHAKQEAg
LTAsMCArMSwxNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb25OaXguaCIKKwor
I2luY2x1ZGUgIkF1ZGlvRklGTy5oIgorI2luY2x1ZGUgIkF1ZGlvUHVsbEZJRk8uaCIKKyNpbmNs
dWRlIDxwdWJsaWMvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQnVmZmVyIHNpemUgYXQgd2hpY2ggdGhlIHdlYiBh
dWRpbyBlbmdpbmUgd2lsbCByZW5kZXIuCitjb25zdCB1bnNpZ25lZCByZW5kZXJCdWZmZXJTaXpl
ID0gMTI4OworCisvLyBTaXplIG9mIHRoZSBGSUZPCitjb25zdCBzaXplX3QgZmlmb1NpemUgPSA4
MTkyOworCisvLyBGYWN0b3J5IG1ldGhvZDogQ2hyb21pdW0taW1wbGVtZW50YXRpb24KK1Bhc3NP
d25QdHI8QXVkaW9EZXN0aW5hdGlvbj4gQXVkaW9EZXN0aW5hdGlvbjo6Y3JlYXRlKEF1ZGlvSU9D
YWxsYmFjayYgY2FsbGJhY2ssIGNvbnN0IFN0cmluZyYgaW5wdXREZXZpY2VJZCwgdW5zaWduZWQg
bnVtYmVyT2ZJbnB1dENoYW5uZWxzLCB1bnNpZ25lZCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBm
bG9hdCBzYW1wbGVSYXRlKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQXVkaW9EZXN0aW5h
dGlvbk5peChjYWxsYmFjaywgaW5wdXREZXZpY2VJZCwgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBu
dW1iZXJPZk91dHB1dENoYW5uZWxzLCBzYW1wbGVSYXRlKSk7Cit9CisKK0F1ZGlvRGVzdGluYXRp
b25OaXg6OkF1ZGlvRGVzdGluYXRpb25OaXgoQXVkaW9JT0NhbGxiYWNrJiBjYWxsYmFjaywgY29u
c3QgU3RyaW5nJiBpbnB1dERldmljZUlkLCB1bnNpZ25lZCBudW1iZXJPZklucHV0Q2hhbm5lbHMs
IHVuc2lnbmVkIG51bWJlck9mT3V0cHV0Q2hhbm5lbHMsIGZsb2F0IHNhbXBsZVJhdGUpCisgICAg
OiBtX2NhbGxiYWNrKGNhbGxiYWNrKQorICAgICwgbV9udW1iZXJPZk91dHB1dENoYW5uZWxzKG51
bWJlck9mT3V0cHV0Q2hhbm5lbHMpCisgICAgLCBtX2lucHV0QnVzKEF1ZGlvQnVzOjpjcmVhdGUo
bnVtYmVyT2ZJbnB1dENoYW5uZWxzLCByZW5kZXJCdWZmZXJTaXplKSkKKyAgICAsIG1fcmVuZGVy
QnVzKEF1ZGlvQnVzOjpjcmVhdGUobnVtYmVyT2ZPdXRwdXRDaGFubmVscywgcmVuZGVyQnVmZmVy
U2l6ZSwgZmFsc2UpKQorICAgICwgbV9zYW1wbGVSYXRlKHNhbXBsZVJhdGUpCisgICAgLCBtX2lz
UGxheWluZyhmYWxzZSkKKyAgICAsIG1faW5wdXREZXZpY2VJZChpbnB1dERldmljZUlkKQorewor
ICAgIC8vIFVzZSB0aGUgb3B0aW1hbCBidWZmZXIgc2l6ZSByZWNvbW1lbmRlZCBieSB0aGUgYXVk
aW8gYmFja2VuZC4KKyAgICBtX2NhbGxiYWNrQnVmZmVyU2l6ZSA9IE5peDo6UGxhdGZvcm06OmN1
cnJlbnQoKS0+YXVkaW9IYXJkd2FyZUJ1ZmZlclNpemUoKTsKKworICAgIC8vIFF1aWNrIGV4aXQg
aWYgdGhlIHJlcXVlc3RlZCBzaXplIGlzIHRvbyBsYXJnZS4KKyAgICBBU1NFUlQobV9jYWxsYmFj
a0J1ZmZlclNpemUgKyByZW5kZXJCdWZmZXJTaXplIDw9IGZpZm9TaXplKTsKKyAgICBpZiAobV9j
YWxsYmFja0J1ZmZlclNpemUgKyByZW5kZXJCdWZmZXJTaXplID4gZmlmb1NpemUpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fYXVkaW9EZXZpY2UgPSBhZG9wdFB0cihOaXg6OlBsYXRmb3JtOjpj
dXJyZW50KCktPmNyZWF0ZUF1ZGlvRGV2aWNlKG1faW5wdXREZXZpY2VJZC51dGY4KCkuZGF0YSgp
LCBtX2NhbGxiYWNrQnVmZmVyU2l6ZSwgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBudW1iZXJPZk91
dHB1dENoYW5uZWxzLCBzYW1wbGVSYXRlLCB0aGlzKSk7CisKKyAgICBBU1NFUlQobV9hdWRpb0Rl
dmljZSk7CisKKyAgICAvLyBDcmVhdGUgYSBGSUZPIHRvIGhhbmRsZSB0aGUgcG9zc2liaWxpdHkg
b2YgdGhlIGNhbGxiYWNrIHNpemUKKyAgICAvLyBub3QgYmVpbmcgYSBtdWx0aXBsZSBvZiB0aGUg
cmVuZGVyIHNpemUuIElmIHRoZSBGSUZPIGFscmVhZHkKKyAgICAvLyBjb250YWlucyBlbm91Z2gg
ZGF0YSwgdGhlIGRhdGEgd2lsbCBiZSBwcm92aWRlZCBkaXJlY3RseS4KKyAgICAvLyBPdGhlcndp
c2UsIHRoZSBGSUZPIHdpbGwgY2FsbCB0aGUgcHJvdmlkZXIgZW5vdWdoIHRpbWVzIHRvCisgICAg
Ly8gc2F0aXNmeSB0aGUgcmVxdWVzdCBmb3IgZGF0YS4KKyAgICBtX2ZpZm8gPSBhZG9wdFB0cihu
ZXcgQXVkaW9QdWxsRklGTygqdGhpcywgbnVtYmVyT2ZPdXRwdXRDaGFubmVscywgZmlmb1NpemUs
IHJlbmRlckJ1ZmZlclNpemUpKTsKKworICAgIC8vIElucHV0IGJ1ZmZlcmluZy4KKyAgICBtX2lu
cHV0RmlmbyA9IGFkb3B0UHRyKG5ldyBBdWRpb0ZJRk8obnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBm
aWZvU2l6ZSkpOworCisgICAgLy8gSWYgdGhlIGNhbGxiYWNrIHNpemUgZG9lcyBub3QgbWF0Y2gg
dGhlIHJlbmRlciBzaXplLCB0aGVuIHdlIG5lZWQgdG8gYnVmZmVyIHNvbWUKKyAgICAvLyBleHRy
YSBzaWxlbmNlIGZvciB0aGUgaW5wdXQuIE90aGVyd2lzZSwgd2UgY2FuIG92ZXItY29uc3VtZSB0
aGUgaW5wdXQgRklGTy4KKyAgICBpZiAobV9jYWxsYmFja0J1ZmZlclNpemUgIT0gcmVuZGVyQnVm
ZmVyU2l6ZSkgeworICAgICAgICAvLyBGSVhNRTogaGFuZGxlIG11bHRpLWNoYW5uZWwgaW5wdXQg
YW5kIGRvbid0IGhhcmQtY29kZSB0byBzdGVyZW8uCisgICAgICAgIFJlZlB0cjxBdWRpb0J1cz4g
c2lsZW5jZSA9IEF1ZGlvQnVzOjpjcmVhdGUoMiwgcmVuZGVyQnVmZmVyU2l6ZSk7CisgICAgICAg
IG1faW5wdXRGaWZvLT5wdXNoKHNpbGVuY2UuZ2V0KCkpOworICAgIH0KK30KKworQXVkaW9EZXN0
aW5hdGlvbk5peDo6fkF1ZGlvRGVzdGluYXRpb25OaXgoKQoreworICAgIHN0b3AoKTsKK30KKwor
dm9pZCBBdWRpb0Rlc3RpbmF0aW9uTml4OjpzdGFydCgpCit7CisgICAgaWYgKCFtX2lzUGxheWlu
ZyAmJiBtX2F1ZGlvRGV2aWNlKSB7CisgICAgICAgIG1fYXVkaW9EZXZpY2UtPnN0YXJ0KCk7Cisg
ICAgICAgIG1faXNQbGF5aW5nID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgQXVkaW9EZXN0aW5h
dGlvbk5peDo6c3RvcCgpCit7CisgICAgaWYgKG1faXNQbGF5aW5nICYmIG1fYXVkaW9EZXZpY2Up
IHsKKyAgICAgICAgbV9hdWRpb0RldmljZS0+c3RvcCgpOworICAgICAgICBtX2lzUGxheWluZyA9
IGZhbHNlOworICAgIH0KK30KKworZmxvYXQgQXVkaW9EZXN0aW5hdGlvbjo6aGFyZHdhcmVTYW1w
bGVSYXRlKCkKK3sKKyAgICByZXR1cm4gTml4OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5hdWRpb0hh
cmR3YXJlU2FtcGxlUmF0ZSgpOworfQorCit1bnNpZ25lZCBsb25nIEF1ZGlvRGVzdGluYXRpb246
Om1heENoYW5uZWxDb3VudCgpCit7CisgICAgcmV0dXJuIE5peDo6UGxhdGZvcm06OmN1cnJlbnQo
KS0+YXVkaW9IYXJkd2FyZU91dHB1dENoYW5uZWxzKCk7Cit9CisKK3ZvaWQgQXVkaW9EZXN0aW5h
dGlvbk5peDo6cmVuZGVyKGNvbnN0IHN0ZDo6dmVjdG9yPGZsb2F0Kj4mIHNvdXJjZURhdGEsIGNv
bnN0IHN0ZDo6dmVjdG9yPGZsb2F0Kj4mIGF1ZGlvRGF0YSwgc2l6ZV90IG51bWJlck9mRnJhbWVz
KQoreworICAgIGlmICghbV9pc1BsYXlpbmcgfHwgIW1fYXVkaW9EZXZpY2UpCisgICAgICAgIHJl
dHVybjsKKworICAgIGJvb2wgaXNOdW1iZXJPZkNoYW5uZWxzR29vZCA9IGF1ZGlvRGF0YS5zaXpl
KCkgPT0gbV9udW1iZXJPZk91dHB1dENoYW5uZWxzOworICAgIGlmICghaXNOdW1iZXJPZkNoYW5u
ZWxzR29vZCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGJvb2wgaXNCdWZmZXJTaXplR29vZCA9IG51bWJlck9mRnJhbWVzID09
IG1fY2FsbGJhY2tCdWZmZXJTaXplOworICAgIGlmICghaXNCdWZmZXJTaXplR29vZCkgeworICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIEJ1ZmZlciBvcHRpb25hbCBsaXZlIGlucHV0LgorICAgIGlmIChzb3VyY2VEYXRhLnNpemUo
KSA+PSAyKSB7CisgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgbXVsdGktY2hhbm5lbCBpbnB1dCBh
bmQgZG9uJ3QgaGFyZC1jb2RlIHRvIHN0ZXJlby4KKyAgICAgICAgUmVmUHRyPEF1ZGlvQnVzPiB3
cmFwcGVyQnVzID0gQXVkaW9CdXM6OmNyZWF0ZSgyLCBudW1iZXJPZkZyYW1lcywgZmFsc2UpOwor
ICAgICAgICB3cmFwcGVyQnVzLT5zZXRDaGFubmVsTWVtb3J5KDAsIHNvdXJjZURhdGFbMF0sIG51
bWJlck9mRnJhbWVzKTsKKyAgICAgICAgd3JhcHBlckJ1cy0+c2V0Q2hhbm5lbE1lbW9yeSgxLCBz
b3VyY2VEYXRhWzFdLCBudW1iZXJPZkZyYW1lcyk7CisgICAgICAgIG1faW5wdXRGaWZvLT5wdXNo
KHdyYXBwZXJCdXMuZ2V0KCkpOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX251bWJlck9mT3V0cHV0Q2hhbm5lbHM7ICsraSkKKyAgICAgICAgbV9yZW5kZXJCdXMtPnNl
dENoYW5uZWxNZW1vcnkoaSwgYXVkaW9EYXRhW2ldLCBudW1iZXJPZkZyYW1lcyk7CisKKyAgICBt
X2ZpZm8tPmNvbnN1bWUobV9yZW5kZXJCdXMuZ2V0KCksIG51bWJlck9mRnJhbWVzKTsKK30KKwor
dm9pZCBBdWRpb0Rlc3RpbmF0aW9uTml4Ojpwcm92aWRlSW5wdXQoQXVkaW9CdXMqIGJ1cywgc2l6
ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICBSZWZQdHI8QXVkaW9CdXM+IHNvdXJjZUJ1czsK
KyAgICBpZiAobV9pbnB1dEZpZm8tPmZyYW1lc0luRmlmbygpID49IGZyYW1lc1RvUHJvY2Vzcykg
eworICAgICAgICBtX2lucHV0Rmlmby0+Y29uc3VtZShtX2lucHV0QnVzLmdldCgpLCBmcmFtZXNU
b1Byb2Nlc3MpOworICAgICAgICBzb3VyY2VCdXMgPSBtX2lucHV0QnVzOworICAgIH0KKworICAg
IG1fY2FsbGJhY2sucmVuZGVyKHNvdXJjZUJ1cy5nZXQoKSwgYnVzLCBmcmFtZXNUb1Byb2Nlc3Mp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FV
RElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbml4L0F1ZGlv
RGVzdGluYXRpb25OaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL25peC9BdWRp
b0Rlc3RpbmF0aW9uTml4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzkxNzI1ZmMyOWQ0ZWUzY2ZhZjFjYjA1YTZm
Y2EyYjJjMmVjZjliOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL25peC9BdWRpb0Rlc3RpbmF0aW9uTml4LmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIEF1ZGlvRGVzdGluYXRpb25OaXhfaAorI2RlZmluZSBBdWRpb0Rlc3Rp
bmF0aW9uTml4X2gKKworI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisjaW5jbHVkZSAiQXVkaW9EZXN0
aW5hdGlvbi5oIgorI2luY2x1ZGUgIkF1ZGlvSU9DYWxsYmFjay5oIgorI2luY2x1ZGUgIkF1ZGlv
U291cmNlUHJvdmlkZXIuaCIKKyNpbmNsdWRlIDxwdWJsaWMvQXVkaW9EZXZpY2UuaD4KKyNpbmNs
dWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9GSUZPOwor
Y2xhc3MgQXVkaW9QdWxsRklGTzsKKworY2xhc3MgQXVkaW9EZXN0aW5hdGlvbk5peCA6IHB1Ymxp
YyBBdWRpb0Rlc3RpbmF0aW9uLCBwdWJsaWMgTml4OjpBdWRpb0RldmljZTo6UmVuZGVyQ2FsbGJh
Y2ssIHB1YmxpYyBBdWRpb1NvdXJjZVByb3ZpZGVyIHsKK3B1YmxpYzoKKyAgICBBdWRpb0Rlc3Rp
bmF0aW9uTml4KEF1ZGlvSU9DYWxsYmFjayYsIGNvbnN0IFN0cmluZyYgaW5wdXREZXZpY2VJZCwg
dW5zaWduZWQgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCB1bnNpZ25lZCBudW1iZXJPZk91dHB1dENo
YW5uZWxzLCBmbG9hdCBzYW1wbGVSYXRlKTsKKyAgICB2aXJ0dWFsIH5BdWRpb0Rlc3RpbmF0aW9u
Tml4KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgc3RvcCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBpc1BsYXlpbmcoKSBPVkVS
UklERSB7IHJldHVybiBtX2lzUGxheWluZzsgfQorCisgICAgdmlydHVhbCBmbG9hdCBzYW1wbGVS
YXRlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9zYW1wbGVSYXRlOyB9CisKKyAgICAvLyBX
ZWJLaXQ6OldlYkF1ZGlvRGV2aWNlOjpSZW5kZXJDYWxsYmFjaworICAgIHZpcnR1YWwgdm9pZCBy
ZW5kZXIoY29uc3Qgc3RkOjp2ZWN0b3I8ZmxvYXQqPiYgc291cmNlRGF0YSwgY29uc3Qgc3RkOjp2
ZWN0b3I8ZmxvYXQqPiYgYXVkaW9EYXRhLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMpIE9WRVJSSURF
OworCisgICAgLy8gV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlcgorICAgIHZpcnR1YWwgdm9p
ZCBwcm92aWRlSW5wdXQoQXVkaW9CdXMqLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKSBPVkVSUklE
RTsKKworcHJpdmF0ZToKKyAgICBBdWRpb0lPQ2FsbGJhY2smIG1fY2FsbGJhY2s7CisgICAgdW5z
aWduZWQgbV9udW1iZXJPZk91dHB1dENoYW5uZWxzOworICAgIFJlZlB0cjxBdWRpb0J1cz4gbV9p
bnB1dEJ1czsKKyAgICBSZWZQdHI8QXVkaW9CdXM+IG1fcmVuZGVyQnVzOworICAgIGZsb2F0IG1f
c2FtcGxlUmF0ZTsKKyAgICBib29sIG1faXNQbGF5aW5nOworICAgIE93blB0cjxOaXg6OkF1ZGlv
RGV2aWNlPiBtX2F1ZGlvRGV2aWNlOworICAgIHNpemVfdCBtX2NhbGxiYWNrQnVmZmVyU2l6ZTsK
KyAgICBTdHJpbmcgbV9pbnB1dERldmljZUlkOworCisgICAgT3duUHRyPEF1ZGlvRklGTz4gbV9p
bnB1dEZpZm87CisgICAgT3duUHRyPEF1ZGlvUHVsbEZJRk8+IG1fZmlmbzsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEF1ZGlvRGVzdGluYXRpb25OaXhfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbml4L0ZGVEZyYW1lTml4LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL25peC9GRlRGcmFtZU5peC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNTZhZGYwMDA1MjQ3YmUzZDkxM2VlZjhjZTg4MmQwOWQ3MGVmOGZhNQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL25peC9GRlRGcmFtZU5p
eC5jcHAKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisjaW5jbHVkZSAiRkZURnJhbWUu
aCIKKworI2luY2x1ZGUgIlZlY3Rvck1hdGguaCIKKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRl
IDxwdWJsaWMvRkZURnJhbWUuaD4KKyNpbmNsdWRlIDxwdWJsaWMvUGxhdGZvcm0uaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIHZvaWQgc2NhbGVQbGFuYXJEYXRhKGZs
b2F0KiBkYXRhLCBjb25zdCB1bnNpZ25lZCBzaXplLCBjb25zdCBmbG9hdCBzY2FsZSkKK3sKKyAg
ICBWZWN0b3JNYXRoOjp2c211bChkYXRhLCAxLCAmc2NhbGUsIGRhdGEsIDEsIHNpemUpOworfQor
CitGRlRGcmFtZTo6RkZURnJhbWUodW5zaWduZWQgZmZ0U2l6ZSkKKyAgICA6IG1fRkZUU2l6ZShm
ZnRTaXplKQorICAgICwgbV9sb2cyRkZUU2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4obG9nMihm
ZnRTaXplKSkpCit7CisgICAgbV9mZnRGcmFtZSA9IGFkb3B0UHRyKE5peDo6UGxhdGZvcm06OmN1
cnJlbnQoKS0+Y3JlYXRlRkZURnJhbWUoZmZ0U2l6ZSkpOworfQorCitGRlRGcmFtZTo6RkZURnJh
bWUoY29uc3QgRkZURnJhbWUmIGZyYW1lKQorICAgIDogbV9GRlRTaXplKGZyYW1lLm1fRkZUU2l6
ZSkKKyAgICAsIG1fbG9nMkZGVFNpemUoZnJhbWUubV9sb2cyRkZUU2l6ZSkKK3sKKyAgICBtX2Zm
dEZyYW1lID0gYWRvcHRQdHIoZnJhbWUubV9mZnRGcmFtZS0+Y29weSgpKTsKK30KKworRkZURnJh
bWU6On5GRlRGcmFtZSgpCit7Cit9CisKK3ZvaWQgRkZURnJhbWU6Om11bHRpcGx5KGNvbnN0IEZG
VEZyYW1lJiBmcmFtZSkKK3sKKyAgICBmbG9hdCogcmVhbFAxID0gcmVhbERhdGEoKTsKKyAgICBm
bG9hdCogaW1hZ1AxID0gaW1hZ0RhdGEoKTsKKyAgICBjb25zdCBmbG9hdCogcmVhbFAyID0gZnJh
bWUucmVhbERhdGEoKTsKKyAgICBjb25zdCBmbG9hdCogaW1hZ1AyID0gZnJhbWUuaW1hZ0RhdGEo
KTsKKworICAgIGNvbnN0IHNpemVfdCBzaXplID0gbV9mZnRGcmFtZS0+ZnJlcXVlbmN5RG9tYWlu
U2FtcGxlQ291bnQoKTsKKyAgICBWZWN0b3JNYXRoOjp6dm11bChyZWFsUDEsIGltYWdQMSwgcmVh
bFAyLCBpbWFnUDIsIHJlYWxQMSwgaW1hZ1AxLCBzaXplKTsKKworICAgIC8vIFNjYWxlIGFjY291
bnRzIHRoZSBwZWN1bGlhciBzY2FsaW5nIG9mIHZlY0xpYiBvbiB0aGUgTWFjLgorICAgIC8vIFRo
aXMgZW5zdXJlcyB0aGUgcmlnaHQgc2NhbGluZyBhbGwgdGhlIHdheSBiYWNrIHRvIGludmVyc2Ug
RkZULgorICAgIC8vIEZJWE1FOiBpZiB3ZSBjaGFuZ2UgdGhlIHNjYWxpbmcgb24gdGhlIE1hYyB0
aGVuIHRoaXMgc2NhbGUKKyAgICAvLyBmYWN0b3Igd2lsbCBuZWVkIHRvIGNoYW5nZSB0b28uCisg
ICAgY29uc3QgZmxvYXQgc2NhbGUgPSAwLjU7CisgICAgc2NhbGVQbGFuYXJEYXRhKHJlYWxQMSwg
c2l6ZSwgc2NhbGUpOworICAgIHNjYWxlUGxhbmFyRGF0YShpbWFnUDEsIHNpemUsIHNjYWxlKTsK
K30KKworLy8gUHJvdmlkZXMgdGltZSBkb21haW4gc2FtcGxlcyBpbiBhcmd1bWVudCAiZGF0YSIu
IEZyYW1lIHdpbGwgc3RvcmUgdGhlIHRyYW5zZm9ybWVkIGRhdGEuCit2b2lkIEZGVEZyYW1lOjpk
b0ZGVChjb25zdCBmbG9hdCogZGF0YSkKK3sKKyAgICBtX2ZmdEZyYW1lLT5kb0ZGVChkYXRhKTsK
KyAgICAvLyBTY2FsZSB0aGUgZnJlcXVlbmN5IGRvbWFpbiBkYXRhIHRvIG1hdGNoIHZlY0xpYidz
IHNjYWxlIGZhY3RvcgorICAgIC8vIG9uIHRoZSBNYWMuIEZJWE1FOiBpZiB3ZSBjaGFuZ2UgdGhl
IGRlZmluaXRpb24gb2YgRkZURnJhbWUgdG8KKyAgICAvLyBlbGltaW5hdGUgdGhpcyBzY2FsZSBm
YWN0b3IgdGhlbiB0aGlzIGNvZGUgd2lsbCBuZWVkIHRvIGNoYW5nZS4KKyAgICBjb25zdCBmbG9h
dCBzY2FsZSA9IDI7CisgICAgY29uc3Qgc2l6ZV90IHNpemUgPSBtX2ZmdEZyYW1lLT5mcmVxdWVu
Y3lEb21haW5TYW1wbGVDb3VudCgpOworICAgIHNjYWxlUGxhbmFyRGF0YShyZWFsRGF0YSgpLCBz
aXplLCBzY2FsZSk7CisgICAgc2NhbGVQbGFuYXJEYXRhKGltYWdEYXRhKCksIHNpemUsIHNjYWxl
KTsKK30KKworLy8gQ2FsY3VsYXRlcyBpbnZlcnNlIHRyYW5zZm9ybSBmcm9tIHRoZSBzdG9yZWQg
ZGF0YSwgcHV0dGluZyB0aGUgcmVzdWx0cyBpbiBhcmd1bWVudCAnZGF0YScuCit2b2lkIEZGVEZy
YW1lOjpkb0ludmVyc2VGRlQoZmxvYXQqIGRhdGEpCit7CisgICAgbV9mZnRGcmFtZS0+ZG9JbnZl
cnNlRkZUKGRhdGEpOworCisgICAgLy8gU2NhbGUgc28gdGhhdCBhIGZvcndhcmQgdGhlbiBpbnZl
cnNlIEZGVCB5aWVsZHMgZXhhY3RseSB0aGUgb3JpZ2luYWwgZGF0YS4KKyAgICBjb25zdCBmbG9h
dCBzY2FsZSA9IDEuMCAvICgyICogbV9GRlRTaXplKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9GRlRTaXplOyArK2kpCisgICAgICAgIGRhdGFbaV0gPSBzY2FsZSAqIGRhdGFbaV07
Cit9CisKK3ZvaWQgRkZURnJhbWU6OmluaXRpYWxpemUoKQoreworfQorCit2b2lkIEZGVEZyYW1l
OjpjbGVhbnVwKCkKK3sKK30KKworZmxvYXQqIEZGVEZyYW1lOjpyZWFsRGF0YSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fZmZ0RnJhbWUtPnJlYWxEYXRhKCk7Cit9CisKK2Zsb2F0KiBGRlRGcmFt
ZTo6aW1hZ0RhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX2ZmdEZyYW1lLT5pbWFnRGF0YSgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FV
RElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L3N1cHBvcnQvTXVs
dGlDaGFubmVsUENNRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvc3VwcG9y
dC9NdWx0aUNoYW5uZWxQQ01EYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZjIyOTRjMzcxMzczZjRiZWY3
MjU0OTliMGRiYjYwNDJmNGIyNmU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbml4L3N1cHBvcnQvTXVsdGlDaGFubmVsUENNRGF0YS5jcHAKQEAgLTAsMCArMSwx
MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgPHB1YmxpYy9NdWx0aUNoYW5uZWxQQ01EYXRhLmg+CisKKyNpZiBFTkFCTEUoV0VCX0FV
RElPKQorI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIE5peCB7CisK
K3N0YXRpYyBXZWJDb3JlOjpBdWRpb0J1cyogdG9BdWRpb0J1cyh2b2lkKiBkYXRhKQoreworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxXZWJDb3JlOjpBdWRpb0J1cyo+KGRhdGEpOworfQorCitNdWx0
aUNoYW5uZWxQQ01EYXRhOjpNdWx0aUNoYW5uZWxQQ01EYXRhKHVuc2lnbmVkIG51bWJlck9mQ2hh
bm5lbHMsIHNpemVfdCBsZW5ndGgsIGRvdWJsZSBzYW1wbGVSYXRlKQoreworI2lmIEVOQUJMRShX
RUJfQVVESU8pCisgICAgV2ViQ29yZTo6QXVkaW9CdXMqIGJ1cyA9IFdlYkNvcmU6OkF1ZGlvQnVz
OjpjcmVhdGUobnVtYmVyT2ZDaGFubmVscywgbGVuZ3RoKS5sZWFrUmVmKCk7CisgICAgYnVzLT5z
ZXRTYW1wbGVSYXRlKHNhbXBsZVJhdGUpOworICAgIG1fZGF0YSA9IGJ1czsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKG51bWJlck9mQ2hhbm5lbHMpOworICAgIFVOVVNFRF9QQVJBTShsZW5ndGgp
OworICAgIFVOVVNFRF9QQVJBTShzYW1wbGVSYXRlKTsKKyAgICBtX2RhdGEgPSBudWxscHRyOwor
I2VuZGlmCit9CisKK011bHRpQ2hhbm5lbFBDTURhdGE6On5NdWx0aUNoYW5uZWxQQ01EYXRhKCkK
K3sKKyAgICBkZWxldGUgdG9BdWRpb0J1cyhtX2RhdGEpOworfQorCit2b2lkKiBNdWx0aUNoYW5u
ZWxQQ01EYXRhOjpnZXRJbnRlcm5hbERhdGEoKQoreworICAgIC8vIFRoaXMgdHJhbnNmZXIgdGhl
IG93bmVyc2hpcCBvZiBtX2RhdGEgdG8gdGhlIGNhbGxlci4KKyAgICB2b2lkKiBkYXRhID0gbV9k
YXRhOworICAgIG1fZGF0YSA9IDA7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK3Vuc2lnbmVkIE11
bHRpQ2hhbm5lbFBDTURhdGE6Om51bWJlck9mQ2hhbm5lbHMoKSBjb25zdAoreworI2lmIEVOQUJM
RShXRUJfQVVESU8pCisgICAgaWYgKG1fZGF0YSkKKyAgICAgICAgcmV0dXJuIHRvQXVkaW9CdXMo
bV9kYXRhKS0+bnVtYmVyT2ZDaGFubmVscygpOworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisK
K3NpemVfdCBNdWx0aUNoYW5uZWxQQ01EYXRhOjpsZW5ndGgoKSBjb25zdAoreworI2lmIEVOQUJM
RShXRUJfQVVESU8pCisgICAgaWYgKG1fZGF0YSkKKyAgICAgICAgcmV0dXJuIHRvQXVkaW9CdXMo
bV9kYXRhKS0+bGVuZ3RoKCk7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30KKworZG91YmxlIE11
bHRpQ2hhbm5lbFBDTURhdGE6OnNhbXBsZVJhdGUoKSBjb25zdAoreworI2lmIEVOQUJMRShXRUJf
QVVESU8pCisgICAgaWYgKG1fZGF0YSkKKyAgICAgICAgcmV0dXJuIHRvQXVkaW9CdXMobV9kYXRh
KS0+c2FtcGxlUmF0ZSgpOworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisKK2Zsb2F0KiBNdWx0
aUNoYW5uZWxQQ01EYXRhOjpjaGFubmVsRGF0YSh1bnNpZ25lZCBjaGFubmVsSW5kZXgpCit7Cisj
aWYgRU5BQkxFKFdFQl9BVURJTykKKyAgICBpZiAobV9kYXRhKSB7CisgICAgICAgIEFTU0VSVChj
aGFubmVsSW5kZXggPCB0b0F1ZGlvQnVzKG1fZGF0YSktPm51bWJlck9mQ2hhbm5lbHMoKSk7Cisg
ICAgICAgIHJldHVybiB0b0F1ZGlvQnVzKG1fZGF0YSktPmNoYW5uZWwoY2hhbm5lbEluZGV4KS0+
bXV0YWJsZURhdGEoKTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjaGFubmVsSW5k
ZXgpOworI2VuZGlmCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIE5p
eApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGZi
MzFlN2MwZTkyMWUzYTMzOThhNTdmMjIyM2UyMzI0ZmYyMWY0MmQuLmU4NGUwZjY1NjYxYzM1MmIx
NjA1MDgzNjRiOGQ3Yjc0M2QwYmIxMzggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMy0xMC0yNSAgSHVnbyBQYXJl
bnRlIExpbWEgIDxodWdvLmxpbWFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBBZGRpbmcgTml4
IGZpbGVzIGluIFNvdXJjZS9QbGF0Zm9ybSB0byB0cnVuaworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4MzMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgc3BlY2lhbCBydWxlIGZvciBOaXggQVBJ
IGZpbGVzIGxvY2F0ZWQgYXQgU291cmNlL1BsYXRmb3JtL25peC4KKworICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weToKKwogMjAxMy0xMC0yMSAgVGFtYXMgR2VyZ2Vs
eSAgPGdlcnRvbUBpbmYudS1zemVnZWQuaHU+CiAKICAgICAgICAgUnVuIHRlc3RzIGFzIGlmIHRo
ZXkgYXJlIGV4cGVjdGVkIHRvIHBhc3Mgd2hlbiAtLWZvcmNlIGlzIGdpdmVuLgpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CmluZGV4IGYyM2QzMDc3M2QyOTJkY2FkMTA3NTg4
NDIxNTdjZTI3NjM1MzM3NDYuLjY0NTEzZjEzNjczNWU0MDc3ZTdlNTJkMTFiMjA4ODgzMTk1MjM2
MDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKQEAgLTE2OCw3ICsx
NjgsMTEgQEAgX1BBVEhfUlVMRVNfU1BFQ0lGSUVSID0gWwogCiAgICAgKFsjIEhlYWRlciBmaWxl
cyBpbiBGb3J3YXJkaW5nSGVhZGVycyBoYXZlIG5vIGhlYWRlciBndWFyZHMgb3IKICAgICAgICMg
ZXhjZXB0aW9uYWwgaGVhZGVyIGd1YXJkcyAoZS5nLiwgV2ViQ29yZV9GV0RfRGVidWdnZXJfaCku
Ci0gICAgICAiL0ZvcndhcmRpbmdIZWFkZXJzLyJdLAorICAgICAgIi9Gb3J3YXJkaW5nSGVhZGVy
cy8iLAorICAgICAgIyBOaXggcGxhdGZvcm0gQVBJIGNsYXNzZXMgdXNlcyBjb21tb24gbmFtZXMg
dW5kZXIgTml4IG5hbWVzcGFjZQorICAgICAgIyBzbyB0aGUgaW5jbHVkZSBndWFyZHMgc2hvdWxk
IGFsc28gaW5jbHVkZSB0aGUgbmFtZXNwYWNlIHRvIGF2b2lkCisgICAgICAjIG5hbWUgY2xhc2hl
cy4KKyAgICAgICAiU291cmNlL1BsYXRmb3JtL25peCJdLAogICAgICBbIi1idWlsZC9oZWFkZXJf
Z3VhcmQiXSksCiAgICAgKFsjIGFzc2VtYmxlciBoYXMgbG90cyBvZiBvcGNvZGVzIHRoYXQgdXNl
IHVuZGVyc2NvcmVzLCBzbwogICAgICAgIyB3ZSBkb24ndCBjaGVjayBmb3IgdW5kZXJzY29yZXMg
aW4gdGhhdCBkaXJlY3RvcnkuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215422</attachid>
            <date>2013-10-29 13:59:58 -0700</date>
            <delta_ts>2013-10-29 15:08:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118331-20131029180243.patch</filename>
            <type>text/plain</type>
            <size>91252</size>
            <attacher name="Hugo Parente Lima">hugo.lima</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU3ODAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBlY2I4NTg4N2RmMjc4
ZWEwOGU4ODM1ZjBlYjI4MTJkMmExZTE3MzNkLi40ZjgwNzM4ZmMwZTZmMTg3OGE2NzJmNTU1NDA0
MWU0YzE5M2Y2YzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxMy0xMC0yNSAg
SHVnbyBQYXJlbnRlIExpbWEgIDxodWdvLmxpbWFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBB
ZGRpbmcgTml4IGZpbGVzIGluIFNvdXJjZS9QbGF0Zm9ybSB0byB0cnVuaworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4MzMxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGZpbGVzIHBhcnQgb2YgTml4
IHB1YmxpYyBBUEkgdXNlZCB0byBpbXBsZW1lbnQKKyAgICAgICAgYmFja2VuZHMgZm9yIHNvbWUg
V2ViS2l0IHN1YnN5c3RlbXMgb24gQXBwbGljYXRpb24gc2lkZS4KKworICAgICAgICAqIG5peC9w
dWJsaWMvQXVkaW9EZXZpY2UuaDogQWRkZWQuCisgICAgICAgICogbml4L3B1YmxpYy9DYW52YXMu
aDogQWRkZWQuCisgICAgICAgICogbml4L3B1YmxpYy9Db2xvci5oOiBBZGRlZC4KKyAgICAgICAg
KiBuaXgvcHVibGljL0NvbW1vbi5oOiBBZGRlZC4KKyAgICAgICAgKiBuaXgvcHVibGljL0ZGVEZy
YW1lLmg6IEFkZGVkLgorICAgICAgICAqIG5peC9wdWJsaWMvR2FtZXBhZC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBuaXgvcHVibGljL0dhbWVwYWRzLmg6IEFkZGVkLgorICAgICAgICAqIG5peC9wdWJs
aWMvTWVkaWFQbGF5ZXIuaDogQWRkZWQuCisgICAgICAgICogbml4L3B1YmxpYy9NdWx0aUNoYW5u
ZWxQQ01EYXRhLmg6IEFkZGVkLgorICAgICAgICAqIG5peC9wdWJsaWMvUGxhdGZvcm0uaDogQWRk
ZWQuCisgICAgICAgICogbml4L3B1YmxpYy9SZWN0Lmg6IEFkZGVkLgorICAgICAgICAqIG5peC9w
dWJsaWMvU2l6ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBuaXgvcHVibGljL1RoZW1lRW5naW5lLmg6
IEFkZGVkLgorICAgICAgICAqIG5peC9zcmMvRGVmYXVsdFdlYlRoZW1lRW5naW5lLmNwcDogQWRk
ZWQuCisgICAgICAgICogbml4L3NyYy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUuaDogQWRkZWQuCisg
ICAgICAgICogbml4L3NyYy9QbGF0Zm9ybS5jcHA6IEFkZGVkLgorCiAyMDEzLTA2LTE0ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIEdU
SyBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjE4NGJiYTY2ZmNhNzNkYzEwYjRlMzNiM2Q5YzJj
MDJjY2Q3OGYwYi4uMzFkMTBkOWI5YmVlMGVhZTEyNzk0YzAxYzg0MmQ2ZmY1MWUzNDRjZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEzLTEwLTI1ICBIdWdvIFBhcmVudGUgTGltYSAg
PGh1Z28ubGltYUBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIEFkZGluZyBOaXggZmlsZXMgaW4g
U291cmNlL1BsYXRmb3JtIHRvIHRydW5rCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTgzMzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgTml4IFdlYkF1ZGlvIGltcGxlbWVudGF0aW9uIHRoYXQganVz
dCBmb3J3YXJkIHNvbWUgY2FsbHMgdG8gb3VyIEFQSS4KKyAgICAgICAgVGhpcyBwYXRjaCBpcyBw
YXJ0IG9mIHRoZSB1cHN0cmVhbSBwcm9jZXNzLCB0ZXN0cyB3aWxsIGJlIGxhbmRlZCBieSBvdGhl
ciBwYXRjaGVzLgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbml4L0F1ZGlvQnVzTml4LmNw
cDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbml4L0F1ZGlvRGVzdGluYXRpb25O
aXguY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9uaXgvQXVkaW9EZXN0aW5h
dGlvbk5peC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9uaXgvRkZURnJhbWVO
aXguY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uaXgvc3VwcG9ydC9NdWx0aUNoYW5u
ZWxQQ01EYXRhLmNwcDogQWRkZWQuCisKIDIwMTMtMTAtMjIgIHBlYXZvQG91dGxvb2suY29tICA8
cGVhdm9Ab3V0bG9vay5jb20+CiAKICAgICAgICAgW1dpbkNhaXJvXSBDb21waWxlIGVycm9yLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvQXVkaW9EZXZpY2UuaCBiL1Nv
dXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0F1ZGlvRGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2EwZmFh
NGQ2ZWQ2YTU2ZGZkYmVlZDYyNzkzMDhjOGFiNDg1OWRjOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0F1ZGlvRGV2aWNlLmgKQEAgLTAsMCArMSw1NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIE5peF9BdWRpb0RldmljZV9oCisjZGVmaW5lIE5peF9BdWRp
b0RldmljZV9oCisKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworbmFt
ZXNwYWNlIE5peCB7CisKK2NsYXNzIEF1ZGlvRGV2aWNlIHsKK3B1YmxpYzoKKyAgICBjbGFzcyBS
ZW5kZXJDYWxsYmFjayB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVy
KGNvbnN0IHN0ZDo6dmVjdG9yPGZsb2F0Kj4mIC8qc291cmNlRGF0YSovLCBjb25zdCBzdGQ6OnZl
Y3RvcjxmbG9hdCo+JiAvKmRlc3RpbmF0aW9uRGF0YSovLCBzaXplX3QgLypudW1iZXJPZkZyYW1l
cyovKSA9IDA7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgflJlbmRlckNhbGxi
YWNrKCkgeyB9CisgICAgfTsKKworICAgIHZpcnR1YWwgfkF1ZGlvRGV2aWNlKCkgeyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgc3RhcnQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7
CisgICAgdmlydHVhbCBkb3VibGUgc2FtcGxlUmF0ZSgpID0gMDsKK307CisKK30gLy8gbmFtZXNw
YWNlIE5peAorCisjZW5kaWYgLy8gTml4X0F1ZGlvRGV2aWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9QbGF0Zm9ybS9uaXgvcHVibGljL0NhbnZhcy5oIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJs
aWMvQ2FudmFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTJlZGQzNzNlZjc0NDk3NDdmZTgzYjk5Y2FkYjNiYThj
ZGViMTc5OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0Nh
bnZhcy5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYg
Tml4X0NhbnZhc19oCisjZGVmaW5lIE5peF9DYW52YXNfaAorCisjaW5jbHVkZSA8Y2Fpcm8vY2Fp
cm8uaD4KKworbmFtZXNwYWNlIE5peCB7CisKK3R5cGVkZWYgY2Fpcm9fdCBDYW52YXM7CisKK30g
Ly8gbmFtZXNwYWNlIE5peAorCisjZW5kaWYgLy8gTml4X0NhbnZhc19oCmRpZmYgLS1naXQgYS9T
b3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9Db2xvci5oIGIvU291cmNlL1BsYXRmb3JtL25peC9w
dWJsaWMvQ29sb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MWEyMmY0NzQxYWJiOWQ1NGZmZTk5ODZiMWRhNjNi
Y2JlOTU2ZWUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMv
Q29sb3IuaApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisqLworCisjaWZuZGVmIE5peF9Db2xvcl9oCisjZGVmaW5lIE5peF9Db2xvcl9oCisKKyNpbmNs
dWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKworbmFtZXNwYWNlIE5peCB7CisK
K2NsYXNzIENvbG9yIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHVfaW50MzJfdCBBUkdCMzI7IC8v
IEFSR0IgcXVhZHJ1cGxldAorCisgICAgc3RhdGljIGNvbnN0IEFSR0IzMiBibGFjayA9IDB4RkYw
MDAwMDA7CisgICAgc3RhdGljIGNvbnN0IEFSR0IzMiB3aGl0ZSA9IDB4RkZGRkZGRkY7CisgICAg
c3RhdGljIGNvbnN0IEFSR0IzMiByZWQgPSAweEZGRkYwMDAwOworICAgIHN0YXRpYyBjb25zdCBB
UkdCMzIgZ3JlZW4gPSAweEZGMDBGRjAwOworICAgIHN0YXRpYyBjb25zdCBBUkdCMzIgYmx1ZSA9
IDB4RkYwMDAwRkY7CisgICAgc3RhdGljIGNvbnN0IEFSR0IzMiBkYXJrR3JheSA9IDB4RkY4MDgw
ODA7CisgICAgc3RhdGljIGNvbnN0IEFSR0IzMiBncmF5ID0gMHhGRkEwQTBBMDsKKyAgICBzdGF0
aWMgY29uc3QgQVJHQjMyIGxpZ2h0R3JheSA9IDB4RkZDMEMwQzA7CisgICAgc3RhdGljIGNvbnN0
IEFSR0IzMiB0cmFuc3BhcmVudCA9IDB4MDAwMDAwMDA7CisKKyAgICBDb2xvcihBUkdCMzIgcmdi
YSkKKyAgICAgICAgOiBtX2FyZ2IocmdiYSkKKyAgICB7CisgICAgfQorCisgICAgQ29sb3IoaW50
IHIsIGludCBnLCBpbnQgYiwgaW50IGEgPSAyNTUpCisgICAgICAgIDogbV9hcmdiKGZpeFZhbHVl
KGEpIDw8IDI0IHwgZml4VmFsdWUocikgPDwgMTYgfCBmaXhWYWx1ZShnKSA8PCA4IHwgZml4VmFs
dWUoYikpCisgICAgeworICAgIH0KKworICAgIG9wZXJhdG9yIEFSR0IzMigpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9hcmdiOworICAgIH0KKworICAgIHVuc2lnbmVkIGNoYXIgcigp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKG1fYXJnYiAmIDB4MDBGRjAwMDApID4+IDE2
OworICAgIH0KKworICAgIHVuc2lnbmVkIGNoYXIgZygpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gKG1fYXJnYiAmIDB4MDAwMEZGMDApID4+IDg7CisgICAgfQorCisgICAgdW5zaWduZWQg
Y2hhciBiKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAobV9hcmdiICYgMHgwMDAwMDBG
Rik7CisgICAgfQorCisgICAgdW5zaWduZWQgY2hhciBhKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiAobV9hcmdiICYgMHhGRjAwMDAwMCkgPj4gMjQ7CisgICAgfQorCisgICAgQVJHQjMy
IGFyZ2IzMigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9hcmdiOworICAgIH0KKwor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYgb3RoZXIpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9hcmdiID09IG90aGVyLm1fYXJnYjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgQ29sb3ImIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYXJnYiAhPSBv
dGhlci5tX2FyZ2I7CisgICAgfQorCitwcml2YXRlOgorICAgIEFSR0IzMiBtX2FyZ2I7CisgICAg
c3RhdGljIGlubGluZSBBUkdCMzIgZml4VmFsdWUoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bWF4KDAsIHN0ZDo6bWluKHZhbHVlLCAyNTUpKTsKKyAgICB9Cit9OworCit9
IC8vIG5hbWVzcGFjZSBOaXgKKworI2VuZGlmIC8vIE5peF9Db2xvcl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9Db21tb24uaCBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgv
cHVibGljL0NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3NjllNWIyY2Q4MzZiMTIzNGFhYzk3YzczZWJl
MWU4NmIyZDc5NjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1Ymxp
Yy9Db21tb24uaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgTml4X0NvbW1vbl9oCisjZGVmaW5lIE5peF9Db21tb25faAorCisvLyBFeHBvcnRlZCBz
eW1ib2xzIG5lZWQgdG8gYmUgYW5ub3RhdGVkIHdpdGggTklYX0VYUE9SVAorI2RlZmluZSBOSVhf
RVhQT1JUIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpCisKKyNpbmNsdWRl
IDxzdGRkZWYuaD4gLy8gRm9yIHNpemVfdAorCisjZW5kaWYgLy8gTml4X0NvbW1vbl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9GRlRGcmFtZS5oIGIvU291cmNlL1Bs
YXRmb3JtL25peC9wdWJsaWMvRkZURnJhbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMjE5YTcyMWY3N2FmMGVj
YjRjMmU1ZmE4YTRmYmZlYWQ2MzJjOGQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRm
b3JtL25peC9wdWJsaWMvRkZURnJhbWUuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisjaWZuZGVmIE5peF9GRlRGcmFtZV9oCisjZGVmaW5lIE5peF9GRlRGcmFtZV9o
CisKK25hbWVzcGFjZSBOaXggeworCitjbGFzcyBGRlRGcmFtZSB7CitwdWJsaWM6CisgICAgRkZU
RnJhbWUoKSB7IH0KKyAgICB2aXJ0dWFsIH5GRlRGcmFtZSgpIHsgfQorCisgICAgdmlydHVhbCBG
RlRGcmFtZSogY29weSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkb0ZGVChjb25z
dCBmbG9hdCopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZG9JbnZlcnNlRkZUKGZsb2F0KikgPSAw
OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBmcmVxdWVuY3lEb21haW5TYW1wbGVDb3VudCgpIGNv
bnN0ID0gMDsKKyAgICAvLyBBZnRlciBtdWx0aXBsaWNhdGlvbiBhbmQgdHJhbnNmb3JtIG9wZXJh
dGlvbnMsIHRoZSBkYXRhIGlzIHNjYWxlZAorICAgIC8vIHRvIHRha2UgaW4gYWNjb3VudCB0aGUg
c2NhbGUgdXNlZCBpbnRlcm5hbGx5IGluIFdlYktpdCwgb3JpZ2luYWxseQorICAgIC8vIGZyb20g
TWFjJ3MgdmVjTGliLgorICAgIC8vIEFmdGVyIG11bHRpcGxpY2F0aW9uOiBQbGFuYXIgZGF0YSBp
cyBzY2FsZWQgYnkgMC41LgorICAgIC8vIEFmdGVyIGRpcmVjdCB0cmFuc2Zvcm06IFBsYW5hciBk
YXRhIGlzIHNjYWxlZCBieSAyLjAuCisgICAgLy8gQWZ0ZXIgaW52ZXJzZSB0cmFuc2Zvcm06IFRp
bWUgZG9tYWluIGRhdGEgaXMgc2NhbGVkIGJ5IDEuMC8oMiogRkZUIHNpemUpLgorICAgIHZpcnR1
YWwgZmxvYXQqIHJlYWxEYXRhKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZmxvYXQqIGltYWdE
YXRhKCkgY29uc3QgPSAwOworcHJpdmF0ZToKKyAgICBGRlRGcmFtZShjb25zdCBGRlRGcmFtZSYp
OworICAgIEZGVEZyYW1lJiBvcGVyYXRvcj0oY29uc3QgRkZURnJhbWUmKTsKK307CisKK30gLy8g
bmFtZXNwYWNlIE5peAorCisjZW5kaWYgLy8gTml4X0ZGVEZyYW1lX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0dhbWVwYWQuaCBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgv
cHVibGljL0dhbWVwYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMmU3ZTM2ZGRkNmYzZmMyMzNjOTE4OGFkMWY0
YTUwYmQzN2ViZjBmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJs
aWMvR2FtZXBhZC5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIE5peF9HYW1lcGFkX2gKKyNkZWZpbmUgTml4X0dhbWVwYWRfaAorCisjaW5jbHVkZSAi
Q29tbW9uLmgiCisKK25hbWVzcGFjZSBOaXggeworCitjbGFzcyBHYW1lcGFkIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGlkTGVuZ3RoQ2FwID0gMTI4OworICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgYXhlc0xlbmd0aENhcCA9IDE2OworICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
YnV0dG9uc0xlbmd0aENhcCA9IDMyOworCisgICAgR2FtZXBhZCgpCisgICAgICAgIDogY29ubmVj
dGVkKGZhbHNlKQorICAgICAgICAsIHRpbWVzdGFtcCgwKQorICAgICAgICAsIGF4ZXNMZW5ndGgo
MCkKKyAgICAgICAgLCBidXR0b25zTGVuZ3RoKDApCisgICAgeworICAgICAgICBpZFswXSA9IDA7
CisgICAgfQorCisgICAgLy8gSXMgdGhlcmUgYSBnYW1lcGFkIGNvbm5lY3RlZCBhdCB0aGlzIGlu
ZGV4PworICAgIGJvb2wgY29ubmVjdGVkOworCisgICAgLy8gRGV2aWNlIGlkZW50aWZpZXIgKGJh
c2VkIG9uIG1hbnVmYWN0dXJlciwgbW9kZWwsIGV0Yy4pLgorICAgIGNoYXIgaWRbaWRMZW5ndGhD
YXBdOworCisgICAgLy8gTW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIHZhbHVlIHJlZmVycmluZyB0
byB3aGVuIHRoZSBkYXRhIHdlcmUgbGFzdAorICAgIC8vIHVwZGF0ZWQuCisgICAgdW5zaWduZWQg
bG9uZyBsb25nIHRpbWVzdGFtcDsKKworICAgIC8vIE51bWJlciBvZiB2YWxpZCBlbnRyaWVzIGlu
IHRoZSBheGVzIGFycmF5LgorICAgIHVuc2lnbmVkIGF4ZXNMZW5ndGg7CisKKyAgICAvLyBOb3Jt
YWxpemVkIHZhbHVlcyByZXByZXNlbnRpbmcgYXhlcywgaW4gdGhlIHJhbmdlIFstMS4uMV0uCisg
ICAgZmxvYXQgYXhlc1theGVzTGVuZ3RoQ2FwXTsKKworICAgIC8vIE51bWJlciBvZiB2YWxpZCBl
bnRyaWVzIGluIHRoZSBidXR0b25zIGFycmF5LgorICAgIHVuc2lnbmVkIGJ1dHRvbnNMZW5ndGg7
CisKKyAgICAvLyBOb3JtYWxpemVkIHZhbHVlcyByZXByZXNlbnRpbmcgYnV0dG9ucywgaW4gdGhl
IHJhbmdlIFswLi4xXS4KKyAgICBmbG9hdCBidXR0b25zW2J1dHRvbnNMZW5ndGhDYXBdOworfTsK
KworfSAvLyBuYW1lc3BhY2UgTml4CisKKyNlbmRpZiAvLyBOaXhfR2FtZXBhZF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9HYW1lcGFkcy5oIGIvU291cmNlL1BsYXRm
b3JtL25peC9wdWJsaWMvR2FtZXBhZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYjM4ZWI4Y2U4NzA4Y2ZmYWJj
MmFkZWRkMGMyZDU1ODg3ZGRhNWU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3Jt
L25peC9wdWJsaWMvR2FtZXBhZHMuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBOaXhfR2FtZXBhZHNfaAorI2RlZmluZSBOaXhfR2FtZXBhZHNfaAor
CisjaW5jbHVkZSAiR2FtZXBhZC5oIgorCituYW1lc3BhY2UgTml4IHsKKworY2xhc3MgR2FtZXBh
ZHMgeworcHVibGljOgorICAgIEdhbWVwYWRzKCkKKyAgICAgICAgOiBsZW5ndGgoMCkKKyAgICB7
IH0KKworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgaXRlbXNMZW5ndGhDYXAgPSA0OworCisgICAg
Ly8gTnVtYmVyIG9mIHZhbGlkIGVudHJpZXMgaW4gdGhlIGl0ZW1zIGFycmF5LgorICAgIHVuc2ln
bmVkIGxlbmd0aDsKKworICAgIC8vIEdhbWVwYWQgZGF0YSBmb3IgTiBzZXBhcmF0ZSBnYW1lcGFk
IGRldmljZXMuCisgICAgR2FtZXBhZCBpdGVtc1tpdGVtc0xlbmd0aENhcF07Cit9OworCit9IC8v
IG5hbWVzcGFjZSBOaXgKKworI2VuZGlmIC8vIE5peF9HYW1lcGFkc19oCmRpZmYgLS1naXQgYS9T
b3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9NZWRpYVBsYXllci5oIGIvU291cmNlL1BsYXRmb3Jt
L25peC9wdWJsaWMvTWVkaWFQbGF5ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNjVkNDg2OGQ4MzAwMDkzODRm
ZjQ2MDk1NTdlNzQ0MGM1M2RmNDE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3Jt
L25peC9wdWJsaWMvTWVkaWFQbGF5ZXIuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgTml4X01lZGlhUGxheWVyCisjZGVmaW5lIE5peF9NZWRpYVBs
YXllcgorCituYW1lc3BhY2UgTml4IHsKKworY2xhc3MgTWVkaWFQbGF5ZXJDbGllbnQgeworcHVi
bGljOgorICAgIGVudW0gUmVhZHlTdGF0ZSAgeyBIYXZlTm90aGluZywgSGF2ZU1ldGFkYXRhLCBI
YXZlQ3VycmVudERhdGEsIEhhdmVGdXR1cmVEYXRhLCBIYXZlRW5vdWdoRGF0YSB9OworICAgIGVu
dW0gTmV0d29ya1N0YXRlIHsgRW1wdHksIElkbGUsIExvYWRpbmcsIExvYWRlZCwgRm9ybWF0RXJy
b3IsIE5ldHdvcmtFcnJvciwgRGVjb2RlRXJyb3IgfTsKKworICAgIHZpcnR1YWwgfk1lZGlhUGxh
eWVyQ2xpZW50KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGR1cmF0aW9uQ2hhbmdlZCgpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY3VycmVudFRpbWVDaGFuZ2VkKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCByZWFkeVN0YXRlQ2hhbmdlZChSZWFkeVN0YXRlKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIG5ldHdvcmtTdGF0ZUNoYW5nZWQoTmV0d29ya1N0YXRlKSA9IDA7Cit9Owor
CitjbGFzcyBNZWRpYVBsYXllciB7CitwdWJsaWM6CisgICAgLy8gRGVyaXZhdGVkIGNsYXNzZXMg
c2hvdWxkbid0IGRvIGFueSBqb2Igb24gY29uc3RydWN0b3IsIE1lZGlhUGxheWVycyBjb3VsZCBi
ZQorICAgIC8vIGNyZWF0ZWQgZm9yIHByb2JpbmcgcHVycG9zZXMgd2l0aCBhIG51bGwgY2xpZW50
LgorICAgIE1lZGlhUGxheWVyKE1lZGlhUGxheWVyQ2xpZW50KiBjbGllbnQpCisgICAgICAgIDog
bV9wbGF5ZXJDbGllbnQoY2xpZW50KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5NZWRp
YVBsYXllcigpCisgICAgeworICAgICAgICBkZWxldGUgbV9wbGF5ZXJDbGllbnQ7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIHBsYXkoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhdXNlKCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBzZWVrKGZsb2F0KSA9IDA7CisgICAgdmlydHVhbCBmbG9h
dCBkdXJhdGlvbigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0IGN1cnJlbnRUaW1lKCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRWb2x1bWUoZmxvYXQpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0TXV0ZWQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkKGNv
bnN0IGNoYXIqIHVybCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzZWVraW5nKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgZmxvYXQgbWF4VGltZVNlZWthYmxlKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzZXRQbGF5YmFja1JhdGUoZmxvYXQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNMaXZlU3RyZWFtKCkgY29uc3QgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgTWVkaWFQbGF5ZXJD
bGllbnQqIG1fcGxheWVyQ2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgTml4CisKKyNlbmRp
ZiAvLyBOaXhfTWVkaWFQbGF5ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9w
dWJsaWMvTXVsdGlDaGFubmVsUENNRGF0YS5oIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMv
TXVsdGlDaGFubmVsUENNRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiYmVmOGJmZjBmODA1MWEzNzVkNjNl
MTE1MjBiZmIyZGMzMWYyMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4
L3B1YmxpYy9NdWx0aUNoYW5uZWxQQ01EYXRhLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5peF9NdWx0aUNoYW5uZWxQQ01EYXRhX2gKKyNkZWZp
bmUgTml4X011bHRpQ2hhbm5lbFBDTURhdGFfaAorCisjaW5jbHVkZSAiQ29tbW9uLmgiCisKK25h
bWVzcGFjZSBOaXggeworCisvLyBBIGNvbnRhaW5lciBmb3IgbXVsdGktY2hhbm5lbCBsaW5lYXIg
UENNIGF1ZGlvIGRhdGEuCitjbGFzcyBOSVhfRVhQT1JUIE11bHRpQ2hhbm5lbFBDTURhdGEgewor
cHVibGljOgorICAgIE11bHRpQ2hhbm5lbFBDTURhdGEodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVs
cywgc2l6ZV90IGxlbmd0aCwgZG91YmxlIHNhbXBsZVJhdGUpOworICAgIH5NdWx0aUNoYW5uZWxQ
Q01EYXRhKCk7CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKCkgY29uc3Q7CisgICAg
c2l6ZV90IGxlbmd0aCgpIGNvbnN0OworICAgIGRvdWJsZSBzYW1wbGVSYXRlKCkgY29uc3Q7CisK
KyAgICAvLyBUaGlzIGNhbiByZXR1cm4gbnVsbCBpZiBOaXggd2FzIGNvbXBpbGVkIHdpdGhvdXQg
V2ViQXVkaW8gc3VwcG9ydC4KKyAgICBmbG9hdCogY2hhbm5lbERhdGEodW5zaWduZWQgY2hhbm5l
bEluZGV4KTsKKworI2lmZGVmIEJVSUxESU5HX05JWF9fCisgICAgdm9pZCogZ2V0SW50ZXJuYWxE
YXRhKCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBNdWx0aUNoYW5uZWxQQ01EYXRhKGNvbnN0
IE11bHRpQ2hhbm5lbFBDTURhdGEmKTsKKyAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBNdWx0aUNo
YW5uZWxQQ01EYXRhJik7CisKKyAgICB2b2lkKiBtX2RhdGE7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBOaXgKKworI2VuZGlmIC8vIE5peF9NdWx0aUNoYW5uZWxQQ01EYXRhX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1BsYXRmb3JtLmggYi9Tb3VyY2UvUGxhdGZvcm0v
bml4L3B1YmxpYy9QbGF0Zm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4MmE4N2NhYTFhMGFjYzIwODFiODM2
MDk5NmVkYTRiZGQyNzY5NTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4
L3B1YmxpYy9QbGF0Zm9ybS5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBO
aXhfUGxhdGZvcm1faAorI2RlZmluZSBOaXhfUGxhdGZvcm1faAorCisjaW5jbHVkZSAiQXVkaW9E
ZXZpY2UuaCIKKyNpbmNsdWRlICJHYW1lcGFkcy5oIgorI2luY2x1ZGUgPHN0ZGludC5oPgorCitu
YW1lc3BhY2UgTml4IHsKKworY2xhc3MgTXVsdGlDaGFubmVsUENNRGF0YTsKK2NsYXNzIEZGVEZy
YW1lOworY2xhc3MgVGhlbWVFbmdpbmU7CitjbGFzcyBNZWRpYVBsYXllcjsKK2NsYXNzIE1lZGlh
UGxheWVyQ2xpZW50OworCitjbGFzcyBOSVhfRVhQT1JUIFBsYXRmb3JtIHsKK3B1YmxpYzoKKwor
ICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoUGxhdGZvcm0qKTsKKyAgICBzdGF0aWMgUGxhdGZv
cm0qIGN1cnJlbnQoKTsKKworICAgIC8vIEF1ZGlvCisgICAgdmlydHVhbCBmbG9hdCBhdWRpb0hh
cmR3YXJlU2FtcGxlUmF0ZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBhdWRp
b0hhcmR3YXJlQnVmZmVyU2l6ZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGF1ZGlvSGFyZHdhcmVPdXRwdXRDaGFubmVscygpIHsgcmV0dXJuIDA7IH0KKworICAgIC8vIENy
ZWF0ZXMgYSBkZXZpY2UgZm9yIGF1ZGlvIEkvTy4KKyAgICAvLyBQYXNzIGluIChudW1iZXJPZklu
cHV0Q2hhbm5lbHMgPiAwKSBpZiBsaXZlL2xvY2FsIGF1ZGlvIGlucHV0IGlzIGRlc2lyZWQuCisg
ICAgdmlydHVhbCBBdWRpb0RldmljZSogY3JlYXRlQXVkaW9EZXZpY2UoY29uc3QgY2hhciogLypp
bnB1dERldmljZUlkKi8sIHNpemVfdCAvKmJ1ZmZlclNpemUqLywgdW5zaWduZWQgLypudW1iZXJP
ZklucHV0Q2hhbm5lbHMqLywgdW5zaWduZWQgLypudW1iZXJPZk91dHB1dENoYW5uZWxzKi8sIGRv
dWJsZSAvKnNhbXBsZVJhdGUqLywgQXVkaW9EZXZpY2U6OlJlbmRlckNhbGxiYWNrKikgeyByZXR1
cm4gbnVsbHB0cjsgfQorCisgICAgLy8gR2FtZXBhZAorICAgIHZpcnR1YWwgdm9pZCBzYW1wbGVH
YW1lcGFkcyhHYW1lcGFkcyYgaW50bykgeyBpbnRvLmxlbmd0aCA9IDA7IH0KKworICAgIC8vIEZG
VEZyYW1lCisgICAgdmlydHVhbCBGRlRGcmFtZSogY3JlYXRlRkZURnJhbWUodW5zaWduZWQgLypm
ZnRzaXplKi8pIHsgcmV0dXJuIG51bGxwdHI7IH0KKworICAgIC8vIERlY29kZXMgdGhlIGluLW1l
bW9yeSBhdWRpbyBmaWxlIGRhdGEgYW5kIHJldHVybnMgdGhlIGxpbmVhciBQQ00gYXVkaW8gZGF0
YS4KKyAgICB2aXJ0dWFsIE11bHRpQ2hhbm5lbFBDTURhdGEqIGRlY29kZUF1ZGlvUmVzb3VyY2Uo
Y29uc3Qgdm9pZCogLyphdWRpb0RhdGEqLywgc2l6ZV90IC8qZGF0YVNpemUqLywgZG91YmxlIC8q
c2FtcGxlUmF0ZSovKSB7IHJldHVybiBudWxscHRyOyB9CisKKyAgICAvLyBUaGVtZSBlbmdpbmUK
KyAgICB2aXJ0dWFsIFRoZW1lRW5naW5lKiB0aGVtZUVuZ2luZSgpOworCisgICAgLy8gQ3JlYXRl
IGEgTWVkaWFQbGF5ZXIsIHVzZWQgdG8uLi4gcGxheSBtZWRpYSA6LSkKKyAgICB2aXJ0dWFsIE1l
ZGlhUGxheWVyKiBjcmVhdGVNZWRpYVBsYXllcihNZWRpYVBsYXllckNsaWVudCopIHsgcmV0dXJu
IG51bGxwdHI7IH0KK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5QbGF0Zm9ybSgpIHsgfQorfTsK
KworfSAvLyBuYW1lc3BhY2UgTml4CisKKyNlbmRpZiAvLyBOaXhfUGxhdGZvcm1faApkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvUmVjdC5oIGIvU291cmNlL1BsYXRmb3Jt
L25peC9wdWJsaWMvUmVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiODQwOGJmMjdiZDVkNGI3ODg2N2Q5NGQ2
NDcyNmI0ZDMxMDQ5NmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1
YmxpYy9SZWN0LmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIE5peF9SZWN0X2gKKyNkZWZpbmUgTml4X1JlY3RfaAorCituYW1lc3BhY2UgTml4IHsK
KworY2xhc3MgUmVjdCB7CitwdWJsaWM6CisgICAgaW50IHg7CisgICAgaW50IHk7CisgICAgaW50
IHdpZHRoOworICAgIGludCBoZWlnaHQ7CisKKyAgICBSZWN0KGludCB4LCBpbnQgeSwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KQorICAgICAgICA6IHgoeCkKKyAgICAgICAgLCB5KHkpCisgICAgICAg
ICwgd2lkdGgod2lkdGgpCisgICAgICAgICwgaGVpZ2h0KGhlaWdodCkKKyAgICB7CisgICAgfQor
fTsKKworfSAvLyBuYW1lc3BhY2UgTml4CisKKyNlbmRpZiAvLyBOaXhfUmVjdF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9TaXplLmggYi9Tb3VyY2UvUGxhdGZvcm0v
bml4L3B1YmxpYy9TaXplLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDM2MGI0NGZjODg2OThiNWQzNzJiZGEzNDNi
NDE2ZTk5M2U2Y2NjNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVi
bGljL1NpemUuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTml4X1NpemVf
aAorI2RlZmluZSBOaXhfU2l6ZV9oCisKK25hbWVzcGFjZSBOaXggeworCitzdHJ1Y3QgU2l6ZSB7
CisgICAgaW50IHdpZHRoOworICAgIGludCBoZWlnaHQ7CisKKyAgICBib29sIGlzRW1wdHkoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDA7Cisg
ICAgfQorCisgICAgU2l6ZSgpCisgICAgICAgIDogd2lkdGgoMCkKKyAgICAgICAgLCBoZWlnaHQo
MCkKKyAgICB7CisgICAgfQorCisgICAgU2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCisgICAg
ICAgIDogd2lkdGgod2lkdGgpCisgICAgICAgICwgaGVpZ2h0KGhlaWdodCkKKyAgICB7CisgICAg
fQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNpemUmIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIHdpZHRoID09IG90aGVyLndpZHRoICYmIGhlaWdodCA9PSBvdGhlci5o
ZWlnaHQ7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNpemUmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KK307
CisKK30gLy8gbmFtZXNwYWNlIE5peAorCisjZW5kaWYgLy8gTml4X1NpemVfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvVGhlbWVFbmdpbmUuaCBiL1NvdXJjZS9QbGF0
Zm9ybS9uaXgvcHVibGljL1RoZW1lRW5naW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZThlNTIyMzg2NTNlMTYw
NjdjMjI4MzdkMzRkNGUwMWIzZDQyZjM0YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0
Zm9ybS9uaXgvcHVibGljL1RoZW1lRW5naW5lLmgKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBOaXhfVGhlbWVFbmdpbmVfaAorI2RlZmluZSBOaXhfVGhlbWVFbmdpbmVfaAor
CisjaW5jbHVkZSAiQ2FudmFzLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJTaXpl
LmgiCisKK25hbWVzcGFjZSBOaXggeworCitjbGFzcyBSZWN0OworCitjbGFzcyBUaGVtZUVuZ2lu
ZSB7CitwdWJsaWM6CisgICAgLy8gVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGFzc29jaWF0ZWQg
UGFydC4KKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgU3RhdGVEaXNhYmxlZCwKKyAgICAgICAg
U3RhdGVIb3ZlciwKKyAgICAgICAgU3RhdGVOb3JtYWwsCisgICAgICAgIFN0YXRlUHJlc3NlZAor
ICAgIH07CisKKyAgICBlbnVtIE1lZGlhUGxheWVyU3RhdGUgeworICAgICAgICBTdGF0ZVBsYXlp
bmcsCisgICAgICAgIFN0YXRlUGF1c2VkLAorICAgICAgICBTdGF0ZU11dGVkLAorICAgICAgICBT
dGF0ZU5vdE11dGVkCisgICAgfTsKKworICAgIC8vIEV4dHJhIHBhcmFtZXRlcnMgZm9yIGRyYXdp
bmcgdGhlIFBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVHJhY2sgYW5kCisgICAgLy8gUGFydFNjcm9s
bGJhclZlcnRpY2FsVHJhY2suCisgICAgc3RydWN0IFNjcm9sbGJhclRyYWNrRXh0cmFQYXJhbXMg
eworICAgICAgICAvLyBUaGUgYm91bmRzIG9mIHRoZSBlbnRpcmUgdHJhY2ssIGFzIG9wcG9zZWQg
dG8gdGhlIHBhcnQgYmVpbmcgcGFpbnRlZC4KKyAgICAgICAgaW50IHRyYWNrWDsKKyAgICAgICAg
aW50IHRyYWNrWTsKKyAgICAgICAgaW50IHRyYWNrV2lkdGg7CisgICAgICAgIGludCB0cmFja0hl
aWdodDsKKyAgICB9OworCisgICAgLy8gRXh0cmEgcGFyYW1ldGVycyBmb3IgUGFydENoZWNrYm94
LCBQYXJ0UHVzaEJ1dHRvbiBhbmQgUGFydFJhZGlvLgorICAgIHN0cnVjdCBCdXR0b25FeHRyYVBh
cmFtcyB7CisgICAgICAgIGJvb2wgY2hlY2tlZDsKKyAgICAgICAgYm9vbCBpbmRldGVybWluYXRl
OyAvLyBXaGV0aGVyIHRoZSBidXR0b24gc3RhdGUgaXMgaW5kZXRlcm1pbmF0ZS4KKyAgICAgICAg
Ym9vbCBpc0RlZmF1bHQ7IC8vIFdoZXRoZXIgdGhlIGJ1dHRvbiBpcyBkZWZhdWx0IGJ1dHRvbi4K
KyAgICAgICAgYm9vbCBoYXNCb3JkZXI7CisgICAgfTsKKworICAgIC8vIEV4dHJhIHBhcmFtZXRl
cnMgZm9yIFBhcnRJbm5lclNwaW5CdXR0b24KKyAgICBzdHJ1Y3QgSW5uZXJTcGluQnV0dG9uRXh0
cmFQYXJhbXMgeworICAgICAgICBib29sIHNwaW5VcDsKKyAgICAgICAgYm9vbCByZWFkT25seTsK
KyAgICB9OworCisgICAgLy8gRXh0cmEgcGFyYW1ldGVycyBmb3IgUGFydFByb2dyZXNzQmFyCisg
ICAgc3RydWN0IFByb2dyZXNzQmFyRXh0cmFQYXJhbXMgeworICAgICAgICBib29sIGlzRGV0ZXJt
aW5hdGU7CisgICAgICAgIGRvdWJsZSBwb3NpdGlvbjsKKyAgICAgICAgZG91YmxlIGFuaW1hdGlv
blByb2dyZXNzOworICAgICAgICBkb3VibGUgYW5pbWF0aW9uU3RhcnRUaW1lOworICAgIH07CisK
KyAgICBzdHJ1Y3QgTWV0ZXJFeHRyYVBhcmFtcyB7CisgICAgICAgIGRvdWJsZSBtaW47CisgICAg
ICAgIGRvdWJsZSBtYXg7CisgICAgICAgIGRvdWJsZSB2YWx1ZTsKKyAgICAgICAgZG91YmxlIGxv
dzsKKyAgICAgICAgZG91YmxlIGhpZ2g7CisgICAgICAgIGRvdWJsZSBvcHRpbXVtOworICAgICAg
ICBkb3VibGUgdmFsdWVSYXRpbygpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICht
YXggPD0gbWluKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJu
ICh2YWx1ZSAtIG1pbikgLyAobWF4IC0gbWluKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIGV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVy
biAiIjsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZXh0cmFRdWlya3NTdHlsZVNoZWV0KCkg
Y29uc3QgeyByZXR1cm4gIiI7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGV4dHJhUGx1Z0lu
c1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiAiIjsgfQorCisgICAgLy8gVGV4dCBzZWxlY3Rp
b24gY29sb3JzLgorICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENv
bG9yKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlU2VsZWN0aW9uRm9yZWdy
b3VuZENvbG9yKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgQ29sb3IgaW5hY3RpdmVTZWxlY3Rp
b25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBDb2xvciBpbmFjdGl2
ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKKworICAgIC8vIExpc3QgYm94
IHNlbGVjdGlvbiBjb2xvcnMKKyAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZUxpc3RCb3hTZWxlY3Rp
b25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBDb2xvciBhY3RpdmVM
aXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
Q29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENv
bG9yKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBDb2xvciBhY3RpdmVUZXh0U2VhcmNoSGln
aGxpZ2h0Q29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZVRleHRT
ZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgQ29sb3IgZm9j
dXNSaW5nQ29sb3IoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIENvbG9yIHRhcEhpZ2hsaWdo
dENvbG9yKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHBhaW50QnV0dG9uKENhbnZh
cyosIFN0YXRlLCBjb25zdCBSZWN0JiwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMmKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50VGV4dEZpZWxkKENhbnZhcyosIFN0YXRlLCBjb25z
dCBSZWN0JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgU2l6ZSBnZXRDaGVja2JveFNpemUoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q2hlY2tib3goQ2FudmFzKiwgU3RhdGUs
IGNvbnN0IFJlY3QmLCBjb25zdCBCdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIFNpemUgZ2V0UmFkaW9TaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBw
YWludFJhZGlvKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0JiwgY29uc3QgQnV0dG9uRXh0cmFQ
YXJhbXMmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50VGV4dEFyZWEoQ2FudmFz
KiwgU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldE1l
bnVMaXN0UGFkZGluZyhpbnQmIHBhZGRpbmdUb3AsIGludCYgcGFkZGluZ0xlZnQsIGludCYgcGFk
ZGluZ0JvdHRvbSwgaW50JiBwYWRkaW5nUmlnaHQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRNZW51TGlzdChDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRQcm9ncmVzc0JhcihDYW52YXMqLCBTdGF0ZSwgY29uc3Qg
UmVjdCYsIGNvbnN0IFByb2dyZXNzQmFyRXh0cmFQYXJhbXMmKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBkb3VibGUgZ2V0QW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcigpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBnZXRBbmltYXRpb25EdXJhdGlvbkZvclByb2dy
ZXNzQmFyKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRJbm5lclNwaW5CdXR0b25Q
YWRkaW5nKGludCYgcGFkZGluZ1RvcCwgaW50JiBwYWRkaW5nTGVmdCwgaW50JiBwYWRkaW5nQm90
dG9tLCBpbnQmIHBhZGRpbmdSaWdodCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWlu
dElubmVyU3BpbkJ1dHRvbihDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYsIGNvbnN0IElubmVy
U3BpbkJ1dHRvbkV4dHJhUGFyYW1zJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWlu
dE1ldGVyKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0JiwgY29uc3QgTWV0ZXJFeHRyYVBhcmFt
cyYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTbGlkZXJUcmFjayhDYW52YXMq
LCBTdGF0ZSwgY29uc3QgUmVjdCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRT
bGlkZXJUaHVtYihDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYpIGNvbnN0ID0gMDsKKworICAg
IC8vIE1lZGlhUGxheWVyIChhdWRpbyBhbmQgdmlkZW8gZWxlbWVudHMpCisgICAgdmlydHVhbCB2
b2lkIHBhaW50TWVkaWFQbGF5QnV0dG9uKENhbnZhcyosIE1lZGlhUGxheWVyU3RhdGUsIGNvbnN0
IFJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50TWVkaWFNdXRlQnV0dG9u
KENhbnZhcyosIE1lZGlhUGxheWVyU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHBhaW50TWVkaWFTZWVrQmFja0J1dHRvbihDYW52YXMqLCBjb25zdCBSZWN0
JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0
b24oQ2FudmFzKiwgY29uc3QgUmVjdCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRNZWRpYVJld2luZEJ1dHRvbihDYW52YXMqLCBjb25zdCBSZWN0JikgY29uc3QgPSAwOworfTsK
KworfSAvLyBuYW1lc3BhY2UgTml4CisKKyNlbmRpZiAvLyBOaXhfVGhlbWVFbmdpbmVfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9zcmMvRGVmYXVsdFdlYlRoZW1lRW5naW5lLmNw
cCBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL0RlZmF1bHRXZWJUaGVtZUVuZ2luZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNTA3Y2NkY2M0YWQxNzIwNzFiYWE2NjcyZDY2YWQ0MzNlYWVmODkzNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL0RlZmF1bHRXZWJUaGVtZUVuZ2lu
ZS5jcHAKQEAgLTAsMCArMSw0ODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiRGVmYXVsdFdlYlRoZW1lRW5naW5lLmgiCisKKyNp
bmNsdWRlICJwdWJsaWMvQ29sb3IuaCIKKyNpbmNsdWRlICJwdWJsaWMvUmVjdC5oIgorI2luY2x1
ZGUgInB1YmxpYy9TaXplLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhaXJv
L2NhaXJvLmg+CisjaW5jbHVkZSA8Y21hdGg+CisKK2NvbnN0IGRvdWJsZSBCR0NvbG9yMSA9IDB4
RjYgLyAyNTUuMDsKK2NvbnN0IGRvdWJsZSBCR0NvbG9yMiA9IDB4REUgLyAyNTUuMDsKK2NvbnN0
IGRvdWJsZSBCb3JkZXJDb2xvciA9IDB4QTQgLyAyNTUuMDsKK2NvbnN0IGRvdWJsZSBCb3JkZXJP
bkhvdmVyQ29sb3IgPSAweDdBIC8gMjU1LjA7Citjb25zdCBkb3VibGUgQ2hlY2tDb2xvciA9IDB4
NjYgLyAyNTUuMDsKK2NvbnN0IGRvdWJsZSBUZXh0RmllbGREYXJrQm9yZGVyQ29sb3IgPSAweDlB
IC8gMjU1LjA7Citjb25zdCBkb3VibGUgVGV4dEZpZWxkTGlnaHRCb3JkZXJDb2xvciA9IDB4RUUg
LyAyNTUuMDsKKworY29uc3QgaW50IE1lbnVMaXN0Qm9yZGVyID0gNTsKK2NvbnN0IGludCBNZW51
TGlzdEFycm93U2l6ZSA9IDY7CisKK2NvbnN0IGludCBJbm5lclNwaW5CdXR0b25Cb3JkZXIgPSAz
OworY29uc3QgaW50IElubmVyU3BpbkJ1dHRvbkFycm93U2l6ZSA9IDI7CisKK2NvbnN0IE5peDo6
Q29sb3IgVGFwSGlnaExpZ2h0Q29sb3IoMHg2NjAwMDAwMCk7CisKK25hbWVzcGFjZSBOaXggewor
CitDb2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRD
b2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9yOjpibHVlOworfQorCitDb2xvciBEZWZh
dWx0V2ViVGhlbWVFbmdpbmU6OmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIENvbG9yOjp3aGl0ZTsKK30KKworQ29sb3IgRGVmYXVsdFdlYlRoZW1l
RW5naW5lOjppbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIENvbG9yKDE3NiwgMTc2LCAxNzYpOworfQorCitDb2xvciBEZWZhdWx0V2ViVGhlbWVF
bmdpbmU6OmluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gQ29sb3I6OmJsYWNrOworfQorCitDb2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmFj
dGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVy
biBhY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsKK30KKworQ29sb3IgRGVmYXVsdFdl
YlRoZW1lRW5naW5lOjphY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7Cit9CisK
K0NvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6aW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5hY3RpdmVTZWxlY3Rpb25CYWNr
Z3JvdW5kQ29sb3IoKTsKK30KKworQ29sb3IgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjppbmFjdGl2
ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBp
bmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpOworfQorCitDb2xvciBEZWZhdWx0V2Vi
VGhlbWVFbmdpbmU6OmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIENvbG9yKDI1NSwgMTUwLCA1MCk7IC8vIE9yYW5nZS4KK30KKworQ29sb3IgRGVm
YXVsdFdlYlRoZW1lRW5naW5lOjppbmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIENvbG9yKDI1NSwgMjU1LCAwKTsgLy8gWWVsbG93LgorfQorCitD
b2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmZvY3VzUmluZ0NvbG9yKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gQ29sb3I6OmJsYWNrOworfQorCitDb2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6
OnRhcEhpZ2hsaWdodENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVGFwSGlnaExpZ2h0Q29s
b3I7Cit9CisKK3N0YXRpYyB2b2lkIGdyYWRpZW50RmlsbChjYWlyb190KiBjYWlybywgZG91Ymxl
IHlTdGFydCwgZG91YmxlIHlMZW5ndGgsIGJvb2wgaW52ZXJ0ZWQgPSBmYWxzZSkKK3sKKyAgICBk
b3VibGUgZ3JhZFN0YXJ0Q29sb3IgPSBCR0NvbG9yMTsKKyAgICBkb3VibGUgZ3JhZEVuZENvbG9y
ID0gQkdDb2xvcjI7CisgICAgaWYgKGludmVydGVkKQorICAgICAgICBzdGQ6OnN3YXAoZ3JhZFN0
YXJ0Q29sb3IsIGdyYWRFbmRDb2xvcik7CisKKyAgICBjYWlyb19wYXR0ZXJuX3QqIGdyYWRpZW50
ID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVfbGluZWFyKDAsIHlTdGFydCwgMCwgeVN0YXJ0ICsgeUxl
bmd0aCk7CisgICAgY2Fpcm9fcGF0dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2IoZ3JhZGllbnQsIDAs
IGdyYWRTdGFydENvbG9yLCBncmFkU3RhcnRDb2xvciwgZ3JhZFN0YXJ0Q29sb3IpOworICAgIGNh
aXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiKGdyYWRpZW50LCAxLCBncmFkRW5kQ29sb3Is
IGdyYWRFbmRDb2xvciwgZ3JhZEVuZENvbG9yKTsKKyAgICBjYWlyb19zZXRfc291cmNlKGNhaXJv
LCBncmFkaWVudCk7CisgICAgY2Fpcm9fZmlsbChjYWlybyk7CisgICAgY2Fpcm9fcGF0dGVybl9k
ZXN0cm95KGdyYWRpZW50KTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBCb3JkZXIoY2Fpcm9fdCAq
IGNhaXJvLCBUaGVtZUVuZ2luZTo6U3RhdGUgc3RhdGUpCit7CisgICAgZG91YmxlIGJvcmRlckNv
bG9yID0gc3RhdGUgPT0gVGhlbWVFbmdpbmU6OlN0YXRlSG92ZXIgPyBCb3JkZXJPbkhvdmVyQ29s
b3IgOiBCb3JkZXJDb2xvcjsKKyAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYWlybywgYm9yZGVy
Q29sb3IsIGJvcmRlckNvbG9yLCBib3JkZXJDb2xvcik7CisgICAgY2Fpcm9fc2V0X2xpbmVfd2lk
dGgoY2Fpcm8sIDEpOworfQorCit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRCdXR0
b24oQ2FudmFzKiBjYW52YXMsIFN0YXRlIHN0YXRlLCBjb25zdCBSZWN0JiByZWN0LCBjb25zdCBC
dXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOworICAg
IHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUpOworICAgIC8vIENhaXJvIHVzZXMgYSBjb29yZGlu
YXRlIHN5c3RlbSBub3QgYmFzZWQgb24gcGl4ZWwgY29vcmRpbmF0ZXMsIHNvCisgICAgLy8gd2Ug
bmVlZCB0byBhZGQgIDAuNSB0byB4IGFuZCB5IGNvb3JkIG9yIHRoZSBsaW5lIHdpbGwgc3RheSBi
ZXR3ZWVuCisgICAgLy8gdHdvIHBpeGVscyBpbnN0ZWFkIG9mIGluIHRoZSBtaWRkbGUgb2YgYSBw
aXhlbC4KKyAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LnggKyAwLjUsIHJlY3QueSAr
IDAuNSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOworICAgIGNhaXJvX3N0cm9rZV9wcmVzZXJ2
ZShjYW52YXMpOworCisgICAgZ3JhZGllbnRGaWxsKGNhbnZhcywgcmVjdC55LCByZWN0LmhlaWdo
dCwgc3RhdGUgPT0gU3RhdGVQcmVzc2VkKTsKKyAgICBjYWlyb19yZXN0b3JlKGNhbnZhcyk7Cit9
CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludFRleHRGaWVsZChDYW52YXMqIGNh
bnZhcywgU3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgY2Fpcm9fc2F2ZShj
YW52YXMpOworCisgICAgY29uc3QgZG91YmxlIGxpbmVXaWR0aCA9IDI7CisgICAgY29uc3QgZG91
YmxlIGNvcnJlY3Rpb24gPSBsaW5lV2lkdGggLyAyLjA7CisKKyAgICBjYWlyb19zZXRfbGluZV93
aWR0aChjYW52YXMsIGxpbmVXaWR0aCk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2FudmFz
LCBUZXh0RmllbGREYXJrQm9yZGVyQ29sb3IsIFRleHRGaWVsZERhcmtCb3JkZXJDb2xvciwgVGV4
dEZpZWxkRGFya0JvcmRlckNvbG9yKTsKKyAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54
ICsgY29ycmVjdGlvbiwgcmVjdC55ICsgY29ycmVjdGlvbiArIHJlY3QuaGVpZ2h0KTsKKyAgICBj
YWlyb19yZWxfbGluZV90byhjYW52YXMsIDAsIC1yZWN0LmhlaWdodCk7CisgICAgY2Fpcm9fcmVs
X2xpbmVfdG8oY2FudmFzLCByZWN0LndpZHRoLCAwKTsKKyAgICBjYWlyb19zdHJva2UoY2FudmFz
KTsKKworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhbnZhcywgVGV4dEZpZWxkTGlnaHRCb3Jk
ZXJDb2xvciwgVGV4dEZpZWxkTGlnaHRCb3JkZXJDb2xvciwgVGV4dEZpZWxkTGlnaHRCb3JkZXJD
b2xvcik7CisgICAgY2Fpcm9fbW92ZV90byhjYW52YXMsIHJlY3QueCArIGNvcnJlY3Rpb24gKyBy
ZWN0LndpZHRoLCByZWN0LnkgKyBjb3JyZWN0aW9uKTsKKyAgICBjYWlyb19yZWxfbGluZV90byhj
YW52YXMsIDAsIHJlY3QuaGVpZ2h0KTsKKyAgICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIC1y
ZWN0LndpZHRoLCAwKTsKKyAgICBjYWlyb19zdHJva2UoY2FudmFzKTsKKworICAgIGNhaXJvX3Jl
c3RvcmUoY2FudmFzKTsKK30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50VGV4
dEFyZWEoQ2FudmFzKiBjYW52YXMsIFN0YXRlIHN0YXRlLCBjb25zdCBSZWN0JiByZWN0KSBjb25z
dAoreworICAgIHBhaW50VGV4dEZpZWxkKGNhbnZhcywgc3RhdGUsIHJlY3QpOworfQorCitTaXpl
IERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6Z2V0Q2hlY2tib3hTaXplKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gU2l6ZSgxMywgMTMpOworfQorCit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFp
bnRDaGVja2JveChDYW52YXMqIGNhbnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFJlY3QmIHJlY3Qs
IGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1zJiBwYXJhbSkgY29uc3QKK3sKKyAgICBjYWlyb19zYXZl
KGNhbnZhcyk7CisgICAgc2V0dXBCb3JkZXIoY2FudmFzLCBzdGF0ZSk7CisgICAgY2Fpcm9fcmVj
dGFuZ2xlKGNhbnZhcywgcmVjdC54ICsgMC41LCByZWN0LnkgKyAwLjUsIHJlY3Qud2lkdGgsIHJl
Y3QuaGVpZ2h0KTsKKyAgICBjYWlyb19zdHJva2VfcHJlc2VydmUoY2FudmFzKTsKKworICAgIGdy
YWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQsIHN0YXRlID09IFN0YXRlUHJl
c3NlZCk7CisKKyAgICBpZiAocGFyYW0uY2hlY2tlZCkgeworICAgICAgICBjb25zdCBkb3VibGUg
Ym9yZGVyID0gMzsKKyAgICAgICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGgoY2FudmFzLCAyKTsKKyAg
ICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2FudmFzLCBDaGVja0NvbG9yLCBDaGVja0NvbG9y
LCBDaGVja0NvbG9yKTsKKyAgICAgICAgY2Fpcm9fbW92ZV90byhjYW52YXMsIHJlY3QueCArIDAu
NSArIGJvcmRlciwgcmVjdC55ICsgMC41ICsgcmVjdC5oZWlnaHQgLSBib3JkZXIpOworICAgICAg
ICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIHJlY3Qud2lkdGggLSBib3JkZXIgKiAyLCAtcmVj
dC5oZWlnaHQgKyBib3JkZXIgKiAyKTsKKyAgICAgICAgY2Fpcm9fbW92ZV90byhjYW52YXMsIHJl
Y3QueCArIDAuNSArIGJvcmRlciwgcmVjdC55ICsgMC41ICsgYm9yZGVyKTsKKyAgICAgICAgY2Fp
cm9fcmVsX2xpbmVfdG8oY2FudmFzLCByZWN0LndpZHRoIC0gYm9yZGVyICogMiwgcmVjdC5oZWln
aHQgLSBib3JkZXIgKiAyKTsKKyAgICAgICAgY2Fpcm9fc3Ryb2tlKGNhbnZhcyk7CisgICAgfQor
CisgICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOworfQorCitTaXplIERlZmF1bHRXZWJUaGVtZUVu
Z2luZTo6Z2V0UmFkaW9TaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gU2l6ZSgxMywgMTMpOwor
fQorCit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRSYWRpbyhDYW52YXMqIGNhbnZh
cywgU3RhdGUgc3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QsIGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1z
JiBwYXJhbSkgY29uc3QKK3sKKyAgICBjYWlyb19zYXZlKGNhbnZhcyk7CisgICAgc2V0dXBCb3Jk
ZXIoY2FudmFzLCBzdGF0ZSk7CisgICAgY2Fpcm9fYXJjKGNhbnZhcywgcmVjdC54ICsgcmVjdC53
aWR0aCAvIDIuMCwgcmVjdC55ICsgcmVjdC5oZWlnaHQgLyAyLjAsIHJlY3Qud2lkdGggLyAyLjAs
IDAsIDIgKiBNX1BJKTsKKyAgICBjYWlyb19zdHJva2VfcHJlc2VydmUoY2FudmFzKTsKKworICAg
IGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQpOworCisgICAgaWYgKHBh
cmFtLmNoZWNrZWQpIHsKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2FudmFzLCBDaGVj
a0NvbG9yLCBDaGVja0NvbG9yLCBDaGVja0NvbG9yKTsKKyAgICAgICAgY2Fpcm9fYXJjKGNhbnZh
cywgcmVjdC54ICsgcmVjdC53aWR0aCAvIDIuMCwgcmVjdC55ICsgcmVjdC5oZWlnaHQgLyAyLjAs
IHJlY3Qud2lkdGggLyA0LjAsIDAsIDIgKiBNX1BJKTsKKyAgICAgICAgY2Fpcm9fZmlsbChjYW52
YXMpOworICAgIH0KKyAgICBjYWlyb19yZXN0b3JlKGNhbnZhcyk7Cit9CisKK3ZvaWQgRGVmYXVs
dFdlYlRoZW1lRW5naW5lOjpnZXRNZW51TGlzdFBhZGRpbmcoaW50JiBwYWRkaW5nVG9wLCBpbnQm
IHBhZGRpbmdMZWZ0LCBpbnQmIHBhZGRpbmdCb3R0b20sIGludCYgcGFkZGluZ1JpZ2h0KSBjb25z
dAoreworICAgIHBhZGRpbmdUb3AgPSBNZW51TGlzdEJvcmRlcjsKKyAgICBwYWRkaW5nTGVmdCA9
IE1lbnVMaXN0Qm9yZGVyOworICAgIHBhZGRpbmdCb3R0b20gPSBNZW51TGlzdEJvcmRlcjsKKyAg
ICBwYWRkaW5nUmlnaHQgPSAyICogTWVudUxpc3RCb3JkZXIgKyBNZW51TGlzdEFycm93U2l6ZTsK
K30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50TWVudUxpc3QoQ2FudmFzKiBj
YW52YXMsIFN0YXRlIHN0YXRlLCBjb25zdCBSZWN0JiByZWN0KSBjb25zdAoreworICAgIGNhaXJv
X3NhdmUoY2FudmFzKTsKKyAgICBzZXR1cEJvcmRlcihjYW52YXMsIHN0YXRlKTsKKyAgICBjYWly
b19yZWN0YW5nbGUoY2FudmFzLCByZWN0LnggKyAwLjUsIHJlY3QueSArIDAuNSwgcmVjdC53aWR0
aCwgcmVjdC5oZWlnaHQpOworICAgIGNhaXJvX3N0cm9rZV9wcmVzZXJ2ZShjYW52YXMpOworCisg
ICAgZ3JhZGllbnRGaWxsKGNhbnZhcywgcmVjdC55LCByZWN0LmhlaWdodCwgc3RhdGUgPT0gU3Rh
dGVQcmVzc2VkKTsKKworICAgIGNhaXJvX21vdmVfdG8oY2FudmFzLCByZWN0LnggKyByZWN0Lndp
ZHRoIC0gTWVudUxpc3RBcnJvd1NpemUgLSBNZW51TGlzdEJvcmRlciwgcmVjdC55ICsgMSArIHJl
Y3QuaGVpZ2h0IC8gMiAtIE1lbnVMaXN0QXJyb3dTaXplIC8gMik7CisgICAgY2Fpcm9fc2V0X3Nv
dXJjZV9yZ2IoY2FudmFzLCBDaGVja0NvbG9yLCBDaGVja0NvbG9yLCBDaGVja0NvbG9yKTsKKyAg
ICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIE1lbnVMaXN0QXJyb3dTaXplLCAwKTsKKyAgICBj
YWlyb19yZWxfbGluZV90byhjYW52YXMsIC1NZW51TGlzdEFycm93U2l6ZSAvIDIsIE1lbnVMaXN0
QXJyb3dTaXplKTsKKyAgICBjYWlyb19jbG9zZV9wYXRoKGNhbnZhcyk7CisgICAgY2Fpcm9fZmls
bChjYW52YXMpOworCisgICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOworfQorCit2b2lkIERlZmF1
bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRQcm9ncmVzc0JhcihDYW52YXMqIGNhbnZhcywgU3RhdGUg
c3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QsIGNvbnN0IFByb2dyZXNzQmFyRXh0cmFQYXJhbXMmIHBh
cmFtcykgY29uc3QKK3sKKyAgICBjYWlyb19zYXZlKGNhbnZhcyk7CisKKyAgICBpZiAocGFyYW1z
LmlzRGV0ZXJtaW5hdGUpIHsKKyAgICAgICAgLy8gQmFja2dyb3VuZAorICAgICAgICBzZXR1cEJv
cmRlcihjYW52YXMsIHN0YXRlKTsKKyAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNhbnZhcywgcmVj
dC54LCByZWN0LnksIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTsKKyAgICAgICAgY2Fpcm9fZmls
bChjYW52YXMpOworICAgICAgICAvLyBQcm9ncmVzcworICAgICAgICBjYWlyb19yZWN0YW5nbGUo
Y2FudmFzLCByZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCAqIHBhcmFtcy5wb3NpdGlvbiwgcmVj
dC5oZWlnaHQpOworICAgICAgICBncmFkaWVudEZpbGwoY2FudmFzLCByZWN0LnksIHJlY3QuaGVp
Z2h0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0
LngsIHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOworICAgICAgICBncmFkaWVudEZp
bGwoY2FudmFzLCByZWN0LnksIHJlY3QuaGVpZ2h0LCB0cnVlKTsKKyAgICB9CisKKyAgICBjYWly
b19yZXN0b3JlKGNhbnZhcyk7Cit9CisKKy8vIFRoZXNlIHZhbHVlcyBoYXZlIGJlZW4gY29waWVk
IGZyb20gUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwCitzdGF0aWMgY29uc3QgaW50IHByb2dy
ZXNzQWN0aXZpdHlCbG9ja3MgPSA1Oworc3RhdGljIGNvbnN0IGludCBwcm9ncmVzc0FuaW1hdGlv
bkZyYW1lcyA9IDEwOworc3RhdGljIGNvbnN0IGRvdWJsZSBwcm9ncmVzc0FuaW1hdGlvbkludGVy
dmFsID0gMC4xMjU7CisKK2RvdWJsZSBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmdldEFuaW1hdGlv
blJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoKSBjb25zdAoreworICAgIHJldHVybiBwcm9n
cmVzc0FuaW1hdGlvbkludGVydmFsOworfQorCitkb3VibGUgRGVmYXVsdFdlYlRoZW1lRW5naW5l
OjpnZXRBbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gcHJvZ3Jlc3NBbmltYXRpb25JbnRlcnZhbCAqIHByb2dyZXNzQW5pbWF0aW9uRnJhbWVzICog
MjsgLy8gIjIiIGZvciBiYWNrIGFuZCBmb3J0aDsKK30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVF
bmdpbmU6OmdldElubmVyU3BpbkJ1dHRvblBhZGRpbmcoaW50JiBwYWRkaW5nVG9wLCBpbnQmIHBh
ZGRpbmdMZWZ0LCBpbnQmIHBhZGRpbmdCb3R0b20sIGludCYgcGFkZGluZ1JpZ2h0KSBjb25zdAor
eworICAgIHBhZGRpbmdUb3AgPSBJbm5lclNwaW5CdXR0b25Cb3JkZXI7CisgICAgcGFkZGluZ0xl
ZnQgPSBJbm5lclNwaW5CdXR0b25Cb3JkZXI7CisgICAgcGFkZGluZ0JvdHRvbSA9IElubmVyU3Bp
bkJ1dHRvbkJvcmRlcjsKKyAgICBwYWRkaW5nUmlnaHQgPSAyICogSW5uZXJTcGluQnV0dG9uQm9y
ZGVyICsgSW5uZXJTcGluQnV0dG9uQXJyb3dTaXplOworfQorCit2b2lkIERlZmF1bHRXZWJUaGVt
ZUVuZ2luZTo6cGFpbnRJbm5lclNwaW5CdXR0b24oQ2FudmFzKiBjYW52YXMsIFN0YXRlIHN0YXRl
LCBjb25zdCBSZWN0JiByZWN0LCBjb25zdCBJbm5lclNwaW5CdXR0b25FeHRyYVBhcmFtcyYgcGFy
YW0pIGNvbnN0Cit7CisgICAgZG91YmxlIHJlY3RIYWxmSGVpZ2h0ID0gcmVjdC5oZWlnaHQgLyAy
OworCisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOworICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3Rh
dGUpOworICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCArIDAuNSwgcmVjdC55ICsg
MS41LCByZWN0LndpZHRoLCByZWN0SGFsZkhlaWdodCk7CisgICAgY2Fpcm9fc3Ryb2tlX3ByZXNl
cnZlKGNhbnZhcyk7CisKKyAgICBncmFkaWVudEZpbGwoY2FudmFzLCByZWN0LnksIHJlY3RIYWxm
SGVpZ2h0LCBzdGF0ZSA9PSBTdGF0ZVByZXNzZWQgJiYgcGFyYW0uc3BpblVwKTsKKworICAgIHNl
dHVwQm9yZGVyKGNhbnZhcywgc3RhdGUpOworICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJl
Y3QueCArIDAuNSwgcmVjdC55ICsgMC41ICsgcmVjdEhhbGZIZWlnaHQsIHJlY3Qud2lkdGgsIHJl
Y3RIYWxmSGVpZ2h0KTsKKyAgICBjYWlyb19zdHJva2VfcHJlc2VydmUoY2FudmFzKTsKKworICAg
IGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSArIHJlY3RIYWxmSGVpZ2h0LCByZWN0SGFsZkhl
aWdodCwgc3RhdGUgPT0gU3RhdGVQcmVzc2VkICYmICFwYXJhbS5zcGluVXApOworCisgICAgY2Fp
cm9fbW92ZV90byhjYW52YXMsIHJlY3QueCArIHJlY3Qud2lkdGggLSBJbm5lclNwaW5CdXR0b25B
cnJvd1NpemUgLSBJbm5lclNwaW5CdXR0b25Cb3JkZXIgKiAyLCByZWN0LnkgKyByZWN0SGFsZkhl
aWdodCArIHJlY3QuaGVpZ2h0IC8gNCAtIElubmVyU3BpbkJ1dHRvbkFycm93U2l6ZSArIDEuNSk7
CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2FudmFzLCBDaGVja0NvbG9yLCBDaGVja0NvbG9y
LCBDaGVja0NvbG9yKTsKKyAgICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIE1lbnVMaXN0QXJy
b3dTaXplLCAwKTsKKyAgICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIC1NZW51TGlzdEFycm93
U2l6ZSAvIDIsIE1lbnVMaXN0QXJyb3dTaXplKTsKKyAgICBjYWlyb19jbG9zZV9wYXRoKGNhbnZh
cyk7CisKKyAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgcmVjdC53aWR0aCAtIElu
bmVyU3BpbkJ1dHRvbkFycm93U2l6ZSAtIElubmVyU3BpbkJ1dHRvbkJvcmRlciAqIDIsIHJlY3Qu
eSArIHJlY3QuaGVpZ2h0IC8gNCArIElubmVyU3BpbkJ1dHRvbkFycm93U2l6ZSk7CisgICAgY2Fp
cm9fc2V0X3NvdXJjZV9yZ2IoY2FudmFzLCBDaGVja0NvbG9yLCBDaGVja0NvbG9yLCBDaGVja0Nv
bG9yKTsKKyAgICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIE1lbnVMaXN0QXJyb3dTaXplLCAw
KTsKKyAgICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIC1NZW51TGlzdEFycm93U2l6ZSAvIDIs
IC1NZW51TGlzdEFycm93U2l6ZSk7CisgICAgY2Fpcm9fY2xvc2VfcGF0aChjYW52YXMpOworCisg
ICAgY2Fpcm9fZmlsbChjYW52YXMpOworfQorCit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6
cGFpbnRNZXRlcihDYW52YXMqIGNhbnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFJlY3QmIHJlY3Qs
IGNvbnN0IE1ldGVyRXh0cmFQYXJhbXMmIHBhcmFtcykgY29uc3QKK3sKKyAgICBjYWlyb19zYXZl
KGNhbnZhcyk7CisKKyAgICAvLyBCYWNrZ3JvdW5kCisgICAgc2V0dXBCb3JkZXIoY2FudmFzLCBz
dGF0ZSk7CisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNhbnZhcywgcmVjdC54LCByZWN0LnksIHJlY3Qu
d2lkdGgsIHJlY3QuaGVpZ2h0KTsKKyAgICBjYWlyb19maWxsKGNhbnZhcyk7CisgICAgLy8gTWV0
ZXIKKyAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LngsIHJlY3QueSwgcmVjdC53aWR0
aCAqIHBhcmFtcy52YWx1ZVJhdGlvKCksIHJlY3QuaGVpZ2h0KTsKKyAgICBncmFkaWVudEZpbGwo
Y2FudmFzLCByZWN0LnksIHJlY3QuaGVpZ2h0KTsKKworICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFz
KTsKK30KKworY29uc3QgaW50IFNsaWRlclRyYWNrSGVpZ2h0ID0gNjsKKwordm9pZCBEZWZhdWx0
V2ViVGhlbWVFbmdpbmU6OnBhaW50U2xpZGVyVHJhY2soQ2FudmFzKiBjYW52YXMsIFN0YXRlLCBj
b25zdCBSZWN0JiByZWN0KSBjb25zdAoreworICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKKyAgICBj
YWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LngsIHJlY3QueSArIChyZWN0LmhlaWdodCAtIFNs
aWRlclRyYWNrSGVpZ2h0KSAvIDIuMCwgcmVjdC53aWR0aCwgU2xpZGVyVHJhY2tIZWlnaHQpOwor
ICAgIGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQsIHRydWUpOworICAg
IGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsKK30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6
OnBhaW50U2xpZGVyVGh1bWIoQ2FudmFzKiBjYW52YXMsIFN0YXRlIHN0YXRlLCBjb25zdCBSZWN0
JiByZWN0KSBjb25zdAoreworICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKKyAgICBzZXR1cEJvcmRl
cihjYW52YXMsIHN0YXRlKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LngsIHJl
Y3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOworICAgIGNhaXJvX3N0cm9rZV9wcmVzZXJ2
ZShjYW52YXMpOworICAgIGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQs
IHN0YXRlID09IFN0YXRlUHJlc3NlZCk7CisgICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOworfQor
Cit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRNZWRpYVBsYXlCdXR0b24oQ2FudmFz
KiBjYW52YXMsIE1lZGlhUGxheWVyU3RhdGUgc3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0
Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNh
bnZhcywgMSwgMSwgMSk7CisgICAgaWYgKHN0YXRlID09IFN0YXRlUGF1c2VkKSB7CisgICAgICAg
IGNhaXJvX21vdmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuMyksIHJlY3Qu
eSArIChyZWN0LmhlaWdodCAqIDAuMjUpKTsKKyAgICAgICAgY2Fpcm9fbGluZV90byhjYW52YXMs
IHJlY3QueCArIChyZWN0LndpZHRoICogMC43NSksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAu
NSkpOworICAgICAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGgg
KiAwLjMpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjc1KSk7CisgICAgICAgIGNhaXJvX2Ns
b3NlX3BhdGgoY2FudmFzKTsKKyAgICAgICAgY2Fpcm9fZmlsbChjYW52YXMpOworICAgIH0gZWxz
ZSB7IC8vIElmIHN0YXRlIGlzIFN0YXRlUGxheWluZy4KKyAgICAgICAgY2Fpcm9fcmVjdGFuZ2xl
KGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjMpLCByZWN0LnkgKyAocmVjdC5oZWln
aHQgKiAwLjI1KSwgKHJlY3Qud2lkdGggKiAwLjE1KSwgKHJlY3QuaGVpZ2h0ICogMC41KSk7Cisg
ICAgICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsKKyAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNhbnZh
cywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjU1KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICog
MC4yNSksIChyZWN0LndpZHRoICogMC4xNSksIChyZWN0LmhlaWdodCAqIDAuNSkpOworICAgICAg
ICBjYWlyb19maWxsKGNhbnZhcyk7CisgICAgfQorICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsK
K30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50TWVkaWFNdXRlQnV0dG9uKENh
bnZhcyogY2FudmFzLCBNZWRpYVBsYXllclN0YXRlIHN0YXRlLCBjb25zdCBSZWN0JiByZWN0KSBj
b25zdAoreworICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKKyAgICBpZiAoc3RhdGUgPT0gU3RhdGVN
dXRlZCkgeworICAgICAgICBjYWlyb19zZXRfbGluZV93aWR0aChjYW52YXMsIDEpOworICAgICAg
ICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMsIDEzOSwgMCwgMCk7CisKKyAgICAgICAgY2Fp
cm9fbW92ZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC41OSksIHJlY3QueSAr
IChyZWN0LmhlaWdodCAqIDAuNjcpKTsKKyAgICAgICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJl
Y3QueCArIChyZWN0LndpZHRoICogMC44NyksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuMzQp
KTsKKyAgICAgICAgY2Fpcm9fc3Ryb2tlKGNhbnZhcyk7CisKKyAgICAgICAgY2Fpcm9fbW92ZV90
byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC44NyksIHJlY3QueSArIChyZWN0Lmhl
aWdodCAqIDAuNjcpKTsKKyAgICAgICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChy
ZWN0LndpZHRoICogMC41OSksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuMzQpKTsKKyAgICAg
ICAgY2Fpcm9fc3Ryb2tlKGNhbnZhcyk7CisgICAgfSBlbHNlIHsgLy8gSWYgc3RhdGUgaXMgU3Rh
dGVOb3RNdXRlZAorICAgICAgICBjYWlyb19zZXRfbGluZV93aWR0aChjYW52YXMsIDUpOworICAg
ICAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMsIDEsIDEsIDEpOworCisgICAgICAgIGNh
aXJvX2FyYyhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC4zKSwgcmVjdC55ICsgKHJl
Y3QuaGVpZ2h0ICogMC41KSwgcmVjdC53aWR0aCAqIDAuMzQsIDExICogKE1fUEkgLyA2KSwgTV9Q
SSAvIDYpOworICAgICAgICBjYWlyb19maWxsKGNhbnZhcyk7CisgICAgICAgIGNhaXJvX2FyYyhj
YW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC4zKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0
ICogMC41KSwgcmVjdC53aWR0aCAqIDAuNDUsIDExICogKE1fUEkgLyA2KSwgTV9QSSAvIDYpOwor
ICAgICAgICBjYWlyb19maWxsKGNhbnZhcyk7CisgICAgICAgIGNhaXJvX2FyYyhjYW52YXMsIHJl
Y3QueCArIChyZWN0LndpZHRoICogMC4zKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC41KSwg
cmVjdC53aWR0aCAqIDAuNTcsIDExICogKE1fUEkgLyA2KSwgTV9QSSAvIDYpOworICAgICAgICBj
YWlyb19maWxsKGNhbnZhcyk7CisgICAgfQorCisgICAgLy8gU3BlYWtlcgorICAgIGNhaXJvX21v
dmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuNTIpLCByZWN0LnkgKyAocmVj
dC5oZWlnaHQgKiAwLjE4KSk7CisgICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChy
ZWN0LndpZHRoICogMC4yOSksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuMzgpKTsKKyAgICBj
YWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjA4KSwgcmVjdC55
ICsgKHJlY3QuaGVpZ2h0ICogMC4zOCkpOworICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0
LnggKyAocmVjdC53aWR0aCAqIDAuMDgpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjYyKSk7
CisgICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC4yOSks
IHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNjIpKTsKKyAgICBjYWlyb19saW5lX3RvKGNhbnZh
cywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjUyKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICog
MC44MikpOworICAgIGNhaXJvX2Nsb3NlX3BhdGgoY2FudmFzKTsKKyAgICBjYWlyb19maWxsKGNh
bnZhcyk7CisKKyAgICBjYWlyb19yZXN0b3JlKGNhbnZhcyk7Cit9CisKK3ZvaWQgRGVmYXVsdFdl
YlRoZW1lRW5naW5lOjpwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oQ2FudmFzKiBjYW52YXMsIGNv
bnN0IFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOworICAgIGNh
aXJvX3NldF9zb3VyY2VfcmdiKGNhbnZhcywgMSwgMSwgMSk7CisgICAgY2Fpcm9fbW92ZV90byhj
YW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC45MCksIHJlY3QueSArIChyZWN0LmhlaWdo
dCAqIDAuNzApKTsKKyAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lk
dGggKiAwLjU4KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC41MSkpOworICAgIGNhaXJvX2xp
bmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuNTgpLCByZWN0LnkgKyAocmVj
dC5oZWlnaHQgKiAwLjcwKSk7CisKKyAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsg
KHJlY3Qud2lkdGggKiAwLjIzKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC41MSkpOworICAg
IGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuMjMpLCByZWN0
LnkgKyAocmVjdC5oZWlnaHQgKiAwLjcwKSk7CisgICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJl
Y3QueCArIChyZWN0LndpZHRoICogMC4xMSksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNzAp
KTsKKyAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjEx
KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC4yOSkpOworICAgIGNhaXJvX2xpbmVfdG8oY2Fu
dmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuMjMpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQg
KiAwLjI5KSk7CisgICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRo
ICogMC4yMyksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNDgpKTsKKworICAgIGNhaXJvX2xp
bmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuNTgpLCByZWN0LnkgKyAocmVj
dC5oZWlnaHQgKiAwLjI5KSk7CisgICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChy
ZWN0LndpZHRoICogMC41OCksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNDgpKTsKKyAgICBj
YWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjkwKSwgcmVjdC55
ICsgKHJlY3QuaGVpZ2h0ICogMC4yOSkpOworICAgIGNhaXJvX2Nsb3NlX3BhdGgoY2FudmFzKTsK
KyAgICBjYWlyb19maWxsKGNhbnZhcyk7CisKKyAgICBjYWlyb19yZXN0b3JlKGNhbnZhcyk7Cit9
CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0
b24oQ2FudmFzKiBjYW52YXMsIGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgY2Fpcm9f
c2F2ZShjYW52YXMpOworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhbnZhcywgMSwgMSwgMSk7
CisgICAgY2Fpcm9fbW92ZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC4xMCks
IHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNzApKTsKKyAgICBjYWlyb19saW5lX3RvKGNhbnZh
cywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjQyKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICog
MC41MSkpOworICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAq
IDAuNDIpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjcwKSk7CisKKyAgICBjYWlyb19saW5l
X3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjc3KSwgcmVjdC55ICsgKHJlY3Qu
aGVpZ2h0ICogMC41MSkpOworICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVj
dC53aWR0aCAqIDAuNzcpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjcwKSk7CisgICAgY2Fp
cm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC44OSksIHJlY3QueSAr
IChyZWN0LmhlaWdodCAqIDAuNzApKTsKKyAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54
ICsgKHJlY3Qud2lkdGggKiAwLjg5KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC4yOSkpOwor
ICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuNzcpLCBy
ZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjI5KSk7CisgICAgY2Fpcm9fbGluZV90byhjYW52YXMs
IHJlY3QueCArIChyZWN0LndpZHRoICogMC43NyksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAu
NDgpKTsKKworICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAq
IDAuNDIpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjI5KSk7CisgICAgY2Fpcm9fbGluZV90
byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC40MiksIHJlY3QueSArIChyZWN0Lmhl
aWdodCAqIDAuNDgpKTsKKyAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qu
d2lkdGggKiAwLjEwKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC4yOSkpOworICAgIGNhaXJv
X2Nsb3NlX3BhdGgoY2FudmFzKTsKKyAgICBjYWlyb19maWxsKGNhbnZhcyk7CisKKyAgICBjYWly
b19yZXN0b3JlKGNhbnZhcyk7Cit9CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWlu
dE1lZGlhUmV3aW5kQnV0dG9uKENhbnZhcyogY2FudmFzLCBjb25zdCBSZWN0JiByZWN0KSBjb25z
dAoreworICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3JnYihj
YW52YXMsIDEsIDEsIDEpOworICAgIGNhaXJvX21vdmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVj
dC53aWR0aCAqIDAuODQpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjcwKSk7CisgICAgY2Fp
cm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC41MiksIHJlY3QueSAr
IChyZWN0LmhlaWdodCAqIDAuNTEpKTsKKyAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54
ICsgKHJlY3Qud2lkdGggKiAwLjUyKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC43MCkpOwor
ICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuMTcpLCBy
ZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUwKSk7CisgICAgY2Fpcm9fbGluZV90byhjYW52YXMs
IHJlY3QueCArIChyZWN0LndpZHRoICogMC41MiksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAu
MjkpKTsKKyAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAw
LjUyKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC40OCkpOworICAgIGNhaXJvX2xpbmVfdG8o
Y2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuODQpLCByZWN0LnkgKyAocmVjdC5oZWln
aHQgKiAwLjI5KSk7CisgICAgY2Fpcm9fY2xvc2VfcGF0aChjYW52YXMpOworICAgIGNhaXJvX2Zp
bGwoY2FudmFzKTsKKworICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsKK30KKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9zcmMvRGVmYXVsdFdlYlRoZW1lRW5naW5lLmggYi9T
b3VyY2UvUGxhdGZvcm0vbml4L3NyYy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wZGZmNTNlZWM2NzdiNWZiZjMwZjI5ZGViZmRkMGZjNWE1NzQ0YTZiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1BsYXRmb3JtL25peC9zcmMvRGVmYXVsdFdlYlRoZW1lRW5naW5lLmgKQEAg
LTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERlZmF1bHRX
ZWJUaGVtZUVuZ2luZV9oCisjZGVmaW5lIERlZmF1bHRXZWJUaGVtZUVuZ2luZV9oCisKKyNpbmNs
dWRlICJwdWJsaWMvVGhlbWVFbmdpbmUuaCIKKworbmFtZXNwYWNlIE5peCB7CisKK2NsYXNzIERl
ZmF1bHRXZWJUaGVtZUVuZ2luZSBGSU5BTCA6IHB1YmxpYyBUaGVtZUVuZ2luZSB7CitwdWJsaWM6
CisgICAgLy8gVGV4dCBzZWxlY3Rpb24gY29sb3JzLgorICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZl
U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBD
b2xvciBhY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIENvbG9yIGluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Qg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRD
b2xvcigpIGNvbnN0IE9WRVJSSURFOworCisgICAgLy8gTGlzdCBib3ggc2VsZWN0aW9uIGNvbG9y
cworICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cigpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlTGlzdEJveFNlbGVj
dGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgQ29sb3Ig
aW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3IoKSBjb25zdCBPVkVSUklERTsKKworICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlVGV4dFNlYXJj
aEhpZ2hsaWdodENvbG9yKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBDb2xvciBpbmFj
dGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0IE9WRVJSSURFOworCisgICAgdmly
dHVhbCBDb2xvciBmb2N1c1JpbmdDb2xvcigpIGNvbnN0IE9WRVJSSURFOworCisgICAgdmlydHVh
bCBDb2xvciB0YXBIaWdobGlnaHRDb2xvcigpIGNvbnN0IE9WRVJSSURFOworCisgICAgdmlydHVh
bCB2b2lkIHBhaW50QnV0dG9uKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0JiwgY29uc3QgQnV0
dG9uRXh0cmFQYXJhbXMmKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRU
ZXh0RmllbGQoQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRUZXh0QXJlYShDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYp
IGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgU2l6ZSBnZXRDaGVja2JveFNpemUoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDaGVja2JveChDYW52YXMqLCBTdGF0
ZSwgY29uc3QgUmVjdCYsIGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1zJikgY29uc3QgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBTaXplIGdldFJhZGlvU2l6ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBwYWludFJhZGlvKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0JiwgY29uc3Qg
QnV0dG9uRXh0cmFQYXJhbXMmKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRNZW51TGlzdChDYW52YXMgKiwgU3RhdGUsIGNvbnN0IFJlY3QgJikgY29uc3QgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIGdldE1lbnVMaXN0UGFkZGluZyhpbnQmIHBhZGRpbmdUb3AsIGlu
dCYgcGFkZGluZ0xlZnQsIGludCYgcGFkZGluZ0JvdHRvbSwgaW50JiBwYWRkaW5nUmlnaHQpIGNv
bnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwYWludFByb2dyZXNzQmFyKENhbnZhcyos
IFN0YXRlLCBjb25zdCBSZWN0JiwgY29uc3QgUHJvZ3Jlc3NCYXJFeHRyYVBhcmFtcyYpIGNvbnN0
IE9WRVJSSURFOworICAgIHZpcnR1YWwgZG91YmxlIGdldEFuaW1hdGlvblJlcGVhdEludGVydmFs
Rm9yUHJvZ3Jlc3NCYXIoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBnZXRB
bmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIHBhaW50SW5uZXJTcGluQnV0dG9uKENhbnZhcyAqLCBTdGF0ZSwgY29uc3QgUmVj
dCAmLCBjb25zdCBJbm5lclNwaW5CdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0IE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBnZXRJbm5lclNwaW5CdXR0b25QYWRkaW5nKGludCYgcGFkZGluZ1Rv
cCwgaW50JiBwYWRkaW5nTGVmdCwgaW50JiBwYWRkaW5nQm90dG9tLCBpbnQmIHBhZGRpbmdSaWdo
dCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHBhaW50TWV0ZXIoQ2FudmFzKiwg
U3RhdGUsIGNvbnN0IFJlY3QmLCBjb25zdCBNZXRlckV4dHJhUGFyYW1zJikgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIHBhaW50U2xpZGVyVHJhY2soQ2FudmFzKiwgU3RhdGUsIGNv
bnN0IFJlY3QmKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTbGlkZXJU
aHVtYihDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYpIGNvbnN0IE9WRVJSSURFOworCisgICAg
Ly8gTWVkaWEgUGxheWVyCisgICAgdmlydHVhbCB2b2lkIHBhaW50TWVkaWFQbGF5QnV0dG9uKENh
bnZhcyosIE1lZGlhUGxheWVyU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRNZWRpYU11dGVCdXR0b24oQ2FudmFzKiwgTWVkaWFQbGF5ZXJT
dGF0ZSwgY29uc3QgUmVjdCYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwYWlu
dE1lZGlhU2Vla0JhY2tCdXR0b24oQ2FudmFzKiwgY29uc3QgUmVjdCYpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24oQ2FudmFzKiwg
Y29uc3QgUmVjdCYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwYWludE1lZGlh
UmV3aW5kQnV0dG9uKENhbnZhcyosIGNvbnN0IFJlY3QmKSBjb25zdCBPVkVSUklERTsKK307CisK
K30gLy8gbmFtZXNwYWNlIE5peAorCisjZW5kaWYgLy8gRGVmYXVsdFdlYlRoZW1lRW5naW5lX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL1BsYXRmb3JtLmNwcCBiL1NvdXJj
ZS9QbGF0Zm9ybS9uaXgvc3JjL1BsYXRmb3JtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ODRkMjQ3NjUxY2Y3
Yzk2ZDQxY2YyMDg3YTY5OWRiZjdhMDMwZjE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Bs
YXRmb3JtL25peC9zcmMvUGxhdGZvcm0uY3BwCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInB1YmxpYy9QbGF0
Zm9ybS5oIgorCisjaW5jbHVkZSAiRGVmYXVsdFdlYlRoZW1lRW5naW5lLmgiCisKK25hbWVzcGFj
ZSBOaXggeworCitzdGF0aWMgUGxhdGZvcm0qIHNfcGxhdGZvcm07CisKK3ZvaWQgUGxhdGZvcm06
OmluaXRpYWxpemUoUGxhdGZvcm0qIHBsYXRmb3JtKQoreworICAgIHNfcGxhdGZvcm0gPSBwbGF0
Zm9ybTsKK30KKworUGxhdGZvcm0qIFBsYXRmb3JtOjpjdXJyZW50KCkKK3sKKyAgICBzdGF0aWMg
UGxhdGZvcm0gZW1wdHlQbGF0Zm9ybTsKKyAgICByZXR1cm4gc19wbGF0Zm9ybSA/IHNfcGxhdGZv
cm0gOiAmZW1wdHlQbGF0Zm9ybTsKK30KKworVGhlbWVFbmdpbmUqIFBsYXRmb3JtOjp0aGVtZUVu
Z2luZSgpCit7CisgICAgc3RhdGljIERlZmF1bHRXZWJUaGVtZUVuZ2luZSB0aGVtZTsKKyAgICBy
ZXR1cm4gJnRoZW1lOworfQorCit9IC8vIG5hbWVzcGFjZSBOaXgKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL25peC9BdWRpb0J1c05peC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9uaXgvQXVkaW9CdXNOaXguY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBkZTA3
YmZmYzhkN2YzZjY3NmI0MDRlMDJlMDQ0Yjk5NzA2NzBiMDIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9uaXgvQXVkaW9CdXNOaXguY3BwCkBAIC0wLDAg
KzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisKKyNpbmNs
dWRlICJBdWRpb0ZpbGVSZWFkZXIuaCIKKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8cHVi
bGljL011bHRpQ2hhbm5lbFBDTURhdGEuaD4KKyNpbmNsdWRlIDxwdWJsaWMvUGxhdGZvcm0uaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29u
Y2F0ZW5hdGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPEF1ZGlvQnVz
PiBkZWNvZGVBdWRpb0ZpbGVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplLCBkb3Vi
bGUgc2FtcGxlUmF0ZSkKK3sKKyAgICBPd25QdHI8Tml4OjpNdWx0aUNoYW5uZWxQQ01EYXRhPiBw
Y21EYXRhID0gYWRvcHRQdHIoTml4OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5kZWNvZGVBdWRpb1Jl
c291cmNlKGRhdGEsIHNpemUsIHNhbXBsZVJhdGUpKTsKKyAgICBpZiAocGNtRGF0YSkKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PEF1ZGlvQnVzKj4ocGNtRGF0YS0+Z2V0SW50
ZXJuYWxEYXRhKCkpKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUGFzc1JlZlB0cjxBdWRp
b0J1cz4gQXVkaW9CdXM6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIGZs
b2F0IHNhbXBsZVJhdGUpCit7CisgICAgU3RyaW5nIGFic29sdXRlRmlsZW5hbWUobWFrZVN0cmlu
ZyhEQVRBX0RJUiwgIi93ZWJhdWRpby9yZXNvdXJjZXMvIiwgbmFtZSwgIi53YXYiKSk7CisKKyAg
ICBGSUxFKiBmaWxlID0gZm9wZW4oYWJzb2x1dGVGaWxlbmFtZS51dGY4KCkuZGF0YSgpLCAicmIi
KTsKKyAgICBpZiAoIWZpbGUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgZnNlZWso
ZmlsZSwgMCwgU0VFS19FTkQpOworICAgIFdURjo6VmVjdG9yPGNoYXI+IGZpbGVDb250ZW50czsK
KyAgICBmaWxlQ29udGVudHMucmVzaXplKGZ0ZWxsKGZpbGUpKTsKKyAgICByZXdpbmQoZmlsZSk7
CisgICAgc2l6ZV90IGJ5dGVzUmVhZCA9IGZyZWFkKCZmaWxlQ29udGVudHNbMF0sIGZpbGVDb250
ZW50cy5zaXplKCksIDEsIGZpbGUpOworICAgIGlmIChieXRlc1JlYWQgPCBmaWxlQ29udGVudHMu
c2l6ZSgpKQorICAgICAgICBmaWxlQ29udGVudHMucmVzaXplKGJ5dGVzUmVhZCk7CisgICAgZmNs
b3NlKGZpbGUpOworCisgICAgcmV0dXJuIGRlY29kZUF1ZGlvRmlsZURhdGEoJmZpbGVDb250ZW50
c1swXSwgZmlsZUNvbnRlbnRzLnNpemUoKSwgc2FtcGxlUmF0ZSk7Cit9CisKK1Bhc3NSZWZQdHI8
QXVkaW9CdXM+IGNyZWF0ZUJ1c0Zyb21Jbk1lbW9yeUF1ZGlvRmlsZShjb25zdCB2b2lkKiBkYXRh
LCBzaXplX3QgZGF0YVNpemUsIGJvb2wgbWl4VG9Nb25vLCBmbG9hdCBzYW1wbGVSYXRlKQorewor
ICAgIFJlZlB0cjxBdWRpb0J1cz4gYXVkaW9CdXMgPSBkZWNvZGVBdWRpb0ZpbGVEYXRhKHN0YXRp
Y19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSwgZGF0YVNpemUsIHNhbXBsZVJhdGUpOworICAgIGlm
ICghYXVkaW9CdXMpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gSWYgdGhlIGJ1
cyBuZWVkcyBubyBjb252ZXJzaW9uIHRoZW4gcmV0dXJuIGFzIGlzLgorICAgIGlmICghbWl4VG9N
b25vIHx8IGF1ZGlvQnVzLT5udW1iZXJPZkNoYW5uZWxzKCkgPT0gMSkKKyAgICAgICAgcmV0dXJu
IGF1ZGlvQnVzLnJlbGVhc2UoKTsKKworICAgIHJldHVybiBBdWRpb0J1czo6Y3JlYXRlQnlTYW1w
bGVSYXRlQ29udmVydGluZyhhdWRpb0J1cy5nZXQoKSwgbWl4VG9Nb25vLCBzYW1wbGVSYXRlKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJ
TykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL25peC9BdWRpb0Rl
c3RpbmF0aW9uTml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL25peC9BdWRp
b0Rlc3RpbmF0aW9uTml4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZDRhOWVmOWIyMDEwMDJhMGJkYjAzOTk0
YTZmZGY4NmZmMjkyMzVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vbml4L0F1ZGlvRGVzdGluYXRpb25OaXguY3BwCkBAIC0wLDAgKzEsMTY5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8p
CisKKyNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uTml4LmgiCisKKyNpbmNsdWRlICJBdWRpb0ZJ
Rk8uaCIKKyNpbmNsdWRlICJBdWRpb1B1bGxGSUZPLmgiCisjaW5jbHVkZSA8cHVibGljL1BsYXRm
b3JtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKy8vIEJ1ZmZlciBzaXplIGF0IHdoaWNoIHRoZSB3ZWIgYXVkaW8gZW5naW5lIHdpbGwg
cmVuZGVyLgorY29uc3QgdW5zaWduZWQgcmVuZGVyQnVmZmVyU2l6ZSA9IDEyODsKKworLy8gU2l6
ZSBvZiB0aGUgRklGTworY29uc3Qgc2l6ZV90IGZpZm9TaXplID0gODE5MjsKKworUGFzc093blB0
cjxBdWRpb0Rlc3RpbmF0aW9uPiBBdWRpb0Rlc3RpbmF0aW9uOjpjcmVhdGUoQXVkaW9JT0NhbGxi
YWNrJiBjYWxsYmFjaywgY29uc3QgU3RyaW5nJiBpbnB1dERldmljZUlkLCB1bnNpZ25lZCBudW1i
ZXJPZklucHV0Q2hhbm5lbHMsIHVuc2lnbmVkIG51bWJlck9mT3V0cHV0Q2hhbm5lbHMsIGZsb2F0
IHNhbXBsZVJhdGUpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBBdWRpb0Rlc3RpbmF0aW9u
Tml4KGNhbGxiYWNrLCBpbnB1dERldmljZUlkLCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIG51bWJl
ck9mT3V0cHV0Q2hhbm5lbHMsIHNhbXBsZVJhdGUpKTsKK30KKworQXVkaW9EZXN0aW5hdGlvbk5p
eDo6QXVkaW9EZXN0aW5hdGlvbk5peChBdWRpb0lPQ2FsbGJhY2smIGNhbGxiYWNrLCBjb25zdCBT
dHJpbmcmIGlucHV0RGV2aWNlSWQsIHVuc2lnbmVkIG51bWJlck9mSW5wdXRDaGFubmVscywgdW5z
aWduZWQgbnVtYmVyT2ZPdXRwdXRDaGFubmVscywgZmxvYXQgc2FtcGxlUmF0ZSkKKyAgICA6IG1f
Y2FsbGJhY2soY2FsbGJhY2spCisgICAgLCBtX251bWJlck9mT3V0cHV0Q2hhbm5lbHMobnVtYmVy
T2ZPdXRwdXRDaGFubmVscykKKyAgICAsIG1faW5wdXRCdXMoQXVkaW9CdXM6OmNyZWF0ZShudW1i
ZXJPZklucHV0Q2hhbm5lbHMsIHJlbmRlckJ1ZmZlclNpemUpKQorICAgICwgbV9yZW5kZXJCdXMo
QXVkaW9CdXM6OmNyZWF0ZShudW1iZXJPZk91dHB1dENoYW5uZWxzLCByZW5kZXJCdWZmZXJTaXpl
LCBmYWxzZSkpCisgICAgLCBtX3NhbXBsZVJhdGUoc2FtcGxlUmF0ZSkKKyAgICAsIG1faXNQbGF5
aW5nKGZhbHNlKQorICAgICwgbV9pbnB1dERldmljZUlkKGlucHV0RGV2aWNlSWQpCit7CisgICAg
Ly8gVXNlIHRoZSBvcHRpbWFsIGJ1ZmZlciBzaXplIHJlY29tbWVuZGVkIGJ5IHRoZSBhdWRpbyBi
YWNrZW5kLgorICAgIG1fY2FsbGJhY2tCdWZmZXJTaXplID0gTml4OjpQbGF0Zm9ybTo6Y3VycmVu
dCgpLT5hdWRpb0hhcmR3YXJlQnVmZmVyU2l6ZSgpOworCisgICAgLy8gUXVpY2sgZXhpdCBpZiB0
aGUgcmVxdWVzdGVkIHNpemUgaXMgdG9vIGxhcmdlLgorICAgIEFTU0VSVChtX2NhbGxiYWNrQnVm
ZmVyU2l6ZSArIHJlbmRlckJ1ZmZlclNpemUgPD0gZmlmb1NpemUpOworICAgIGlmIChtX2NhbGxi
YWNrQnVmZmVyU2l6ZSArIHJlbmRlckJ1ZmZlclNpemUgPiBmaWZvU2l6ZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9hdWRpb0RldmljZSA9IGFkb3B0UHRyKE5peDo6UGxhdGZvcm06OmN1cnJl
bnQoKS0+Y3JlYXRlQXVkaW9EZXZpY2UobV9pbnB1dERldmljZUlkLnV0ZjgoKS5kYXRhKCksIG1f
Y2FsbGJhY2tCdWZmZXJTaXplLCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIG51bWJlck9mT3V0cHV0
Q2hhbm5lbHMsIHNhbXBsZVJhdGUsIHRoaXMpKTsKKworICAgIEFTU0VSVChtX2F1ZGlvRGV2aWNl
KTsKKworICAgIC8vIENyZWF0ZSBhIEZJRk8gdG8gaGFuZGxlIHRoZSBwb3NzaWJpbGl0eSBvZiB0
aGUgY2FsbGJhY2sgc2l6ZQorICAgIC8vIG5vdCBiZWluZyBhIG11bHRpcGxlIG9mIHRoZSByZW5k
ZXIgc2l6ZS4gSWYgdGhlIEZJRk8gYWxyZWFkeQorICAgIC8vIGNvbnRhaW5zIGVub3VnaCBkYXRh
LCB0aGUgZGF0YSB3aWxsIGJlIHByb3ZpZGVkIGRpcmVjdGx5LgorICAgIC8vIE90aGVyd2lzZSwg
dGhlIEZJRk8gd2lsbCBjYWxsIHRoZSBwcm92aWRlciBlbm91Z2ggdGltZXMgdG8KKyAgICAvLyBz
YXRpc2Z5IHRoZSByZXF1ZXN0IGZvciBkYXRhLgorICAgIG1fZmlmbyA9IGFkb3B0UHRyKG5ldyBB
dWRpb1B1bGxGSUZPKCp0aGlzLCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBmaWZvU2l6ZSwgcmVu
ZGVyQnVmZmVyU2l6ZSkpOworCisgICAgLy8gSW5wdXQgYnVmZmVyaW5nLgorICAgIG1faW5wdXRG
aWZvID0gYWRvcHRQdHIobmV3IEF1ZGlvRklGTyhudW1iZXJPZklucHV0Q2hhbm5lbHMsIGZpZm9T
aXplKSk7CisKKyAgICAvLyBJZiB0aGUgY2FsbGJhY2sgc2l6ZSBkb2VzIG5vdCBtYXRjaCB0aGUg
cmVuZGVyIHNpemUsIHRoZW4gd2UgbmVlZCB0byBidWZmZXIgc29tZQorICAgIC8vIGV4dHJhIHNp
bGVuY2UgZm9yIHRoZSBpbnB1dC4gT3RoZXJ3aXNlLCB3ZSBjYW4gb3Zlci1jb25zdW1lIHRoZSBp
bnB1dCBGSUZPLgorICAgIGlmIChtX2NhbGxiYWNrQnVmZmVyU2l6ZSAhPSByZW5kZXJCdWZmZXJT
aXplKSB7CisgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgbXVsdGktY2hhbm5lbCBpbnB1dCBhbmQg
ZG9uJ3QgaGFyZC1jb2RlIHRvIHN0ZXJlby4KKyAgICAgICAgUmVmUHRyPEF1ZGlvQnVzPiBzaWxl
bmNlID0gQXVkaW9CdXM6OmNyZWF0ZSgyLCByZW5kZXJCdWZmZXJTaXplKTsKKyAgICAgICAgbV9p
bnB1dEZpZm8tPnB1c2goc2lsZW5jZS5nZXQoKSk7CisgICAgfQorfQorCitBdWRpb0Rlc3RpbmF0
aW9uTml4Ojp+QXVkaW9EZXN0aW5hdGlvbk5peCgpCit7CisgICAgc3RvcCgpOworfQorCit2b2lk
IEF1ZGlvRGVzdGluYXRpb25OaXg6OnN0YXJ0KCkKK3sKKyAgICBpZiAoIW1faXNQbGF5aW5nICYm
IG1fYXVkaW9EZXZpY2UpIHsKKyAgICAgICAgbV9hdWRpb0RldmljZS0+c3RhcnQoKTsKKyAgICAg
ICAgbV9pc1BsYXlpbmcgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBBdWRpb0Rlc3RpbmF0aW9u
Tml4OjpzdG9wKCkKK3sKKyAgICBpZiAobV9pc1BsYXlpbmcgJiYgbV9hdWRpb0RldmljZSkgewor
ICAgICAgICBtX2F1ZGlvRGV2aWNlLT5zdG9wKCk7CisgICAgICAgIG1faXNQbGF5aW5nID0gZmFs
c2U7CisgICAgfQorfQorCitmbG9hdCBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJh
dGUoKQoreworICAgIHJldHVybiBOaXg6OlBsYXRmb3JtOjpjdXJyZW50KCktPmF1ZGlvSGFyZHdh
cmVTYW1wbGVSYXRlKCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgQXVkaW9EZXN0aW5hdGlvbjo6bWF4
Q2hhbm5lbENvdW50KCkKK3sKKyAgICByZXR1cm4gTml4OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5h
dWRpb0hhcmR3YXJlT3V0cHV0Q2hhbm5lbHMoKTsKK30KKwordm9pZCBBdWRpb0Rlc3RpbmF0aW9u
Tml4OjpyZW5kZXIoY29uc3Qgc3RkOjp2ZWN0b3I8ZmxvYXQqPiYgc291cmNlRGF0YSwgY29uc3Qg
c3RkOjp2ZWN0b3I8ZmxvYXQqPiYgYXVkaW9EYXRhLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMpCit7
CisgICAgaWYgKCFtX2lzUGxheWluZyB8fCAhbV9hdWRpb0RldmljZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYm9vbCBpc051bWJlck9mQ2hhbm5lbHNHb29kID0gYXVkaW9EYXRhLnNpemUoKSA9
PSBtX251bWJlck9mT3V0cHV0Q2hhbm5lbHM7CisgICAgaWYgKCFpc051bWJlck9mQ2hhbm5lbHNH
b29kKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgYm9vbCBpc0J1ZmZlclNpemVHb29kID0gbnVtYmVyT2ZGcmFtZXMgPT0gbV9j
YWxsYmFja0J1ZmZlclNpemU7CisgICAgaWYgKCFpc0J1ZmZlclNpemVHb29kKSB7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
QnVmZmVyIG9wdGlvbmFsIGxpdmUgaW5wdXQuCisgICAgaWYgKHNvdXJjZURhdGEuc2l6ZSgpKSB7
CisgICAgICAgIFJlZlB0cjxBdWRpb0J1cz4gd3JhcHBlckJ1cyA9IEF1ZGlvQnVzOjpjcmVhdGUo
c291cmNlRGF0YS5zaXplKCksIG51bWJlck9mRnJhbWVzLCBmYWxzZSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VEYXRhLnNpemUoKTsgKytpKQorICAgICAgICAgICAg
d3JhcHBlckJ1cy0+c2V0Q2hhbm5lbE1lbW9yeShpLCBzb3VyY2VEYXRhW2ldLCBudW1iZXJPZkZy
YW1lcyk7CisgICAgICAgIG1faW5wdXRGaWZvLT5wdXNoKHdyYXBwZXJCdXMuZ2V0KCkpOworICAg
IH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX251bWJlck9mT3V0cHV0Q2hhbm5l
bHM7ICsraSkKKyAgICAgICAgbV9yZW5kZXJCdXMtPnNldENoYW5uZWxNZW1vcnkoaSwgYXVkaW9E
YXRhW2ldLCBudW1iZXJPZkZyYW1lcyk7CisKKyAgICBtX2ZpZm8tPmNvbnN1bWUobV9yZW5kZXJC
dXMuZ2V0KCksIG51bWJlck9mRnJhbWVzKTsKK30KKwordm9pZCBBdWRpb0Rlc3RpbmF0aW9uTml4
Ojpwcm92aWRlSW5wdXQoQXVkaW9CdXMqIGJ1cywgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sK
KyAgICBSZWZQdHI8QXVkaW9CdXM+IHNvdXJjZUJ1czsKKyAgICBpZiAobV9pbnB1dEZpZm8tPmZy
YW1lc0luRmlmbygpID49IGZyYW1lc1RvUHJvY2VzcykgeworICAgICAgICBtX2lucHV0Rmlmby0+
Y29uc3VtZShtX2lucHV0QnVzLmdldCgpLCBmcmFtZXNUb1Byb2Nlc3MpOworICAgICAgICBzb3Vy
Y2VCdXMgPSBtX2lucHV0QnVzOworICAgIH0KKworICAgIG1fY2FsbGJhY2sucmVuZGVyKHNvdXJj
ZUJ1cy5nZXQoKSwgYnVzLCBmcmFtZXNUb1Byb2Nlc3MpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbml4L0F1ZGlvRGVzdGluYXRpb25OaXguaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL25peC9BdWRpb0Rlc3RpbmF0aW9uTml4LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNzkxNzI1ZmMyOWQ0ZWUzY2ZhZjFjYjA1YTZmY2EyYjJjMmVjZjliOQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL25peC9BdWRpb0Rlc3RpbmF0
aW9uTml4LmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEF1ZGlvRGVz
dGluYXRpb25OaXhfaAorI2RlZmluZSBBdWRpb0Rlc3RpbmF0aW9uTml4X2gKKworI2luY2x1ZGUg
IkF1ZGlvQnVzLmgiCisjaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbi5oIgorI2luY2x1ZGUgIkF1
ZGlvSU9DYWxsYmFjay5oIgorI2luY2x1ZGUgIkF1ZGlvU291cmNlUHJvdmlkZXIuaCIKKyNpbmNs
dWRlIDxwdWJsaWMvQXVkaW9EZXZpY2UuaD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9GSUZPOworY2xhc3MgQXVkaW9QdWxsRklGTzsKKwor
Y2xhc3MgQXVkaW9EZXN0aW5hdGlvbk5peCA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uLCBwdWJs
aWMgTml4OjpBdWRpb0RldmljZTo6UmVuZGVyQ2FsbGJhY2ssIHB1YmxpYyBBdWRpb1NvdXJjZVBy
b3ZpZGVyIHsKK3B1YmxpYzoKKyAgICBBdWRpb0Rlc3RpbmF0aW9uTml4KEF1ZGlvSU9DYWxsYmFj
ayYsIGNvbnN0IFN0cmluZyYgaW5wdXREZXZpY2VJZCwgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dENo
YW5uZWxzLCB1bnNpZ25lZCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBmbG9hdCBzYW1wbGVSYXRl
KTsKKyAgICB2aXJ0dWFsIH5BdWRpb0Rlc3RpbmF0aW9uTml4KCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgc3RhcnQoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgYm9vbCBpc1BsYXlpbmcoKSBPVkVSUklERSB7IHJldHVybiBtX2lzUGxheWlu
ZzsgfQorCisgICAgdmlydHVhbCBmbG9hdCBzYW1wbGVSYXRlKCkgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gbV9zYW1wbGVSYXRlOyB9CisKKyAgICAvLyBXZWJLaXQ6OldlYkF1ZGlvRGV2aWNlOjpS
ZW5kZXJDYWxsYmFjaworICAgIHZpcnR1YWwgdm9pZCByZW5kZXIoY29uc3Qgc3RkOjp2ZWN0b3I8
ZmxvYXQqPiYgc291cmNlRGF0YSwgY29uc3Qgc3RkOjp2ZWN0b3I8ZmxvYXQqPiYgYXVkaW9EYXRh
LCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMpIE9WRVJSSURFOworCisgICAgLy8gV2ViQ29yZTo6QXVk
aW9Tb3VyY2VQcm92aWRlcgorICAgIHZpcnR1YWwgdm9pZCBwcm92aWRlSW5wdXQoQXVkaW9CdXMq
LCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKSBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICBBdWRp
b0lPQ2FsbGJhY2smIG1fY2FsbGJhY2s7CisgICAgdW5zaWduZWQgbV9udW1iZXJPZk91dHB1dENo
YW5uZWxzOworICAgIFJlZlB0cjxBdWRpb0J1cz4gbV9pbnB1dEJ1czsKKyAgICBSZWZQdHI8QXVk
aW9CdXM+IG1fcmVuZGVyQnVzOworICAgIGZsb2F0IG1fc2FtcGxlUmF0ZTsKKyAgICBib29sIG1f
aXNQbGF5aW5nOworICAgIE93blB0cjxOaXg6OkF1ZGlvRGV2aWNlPiBtX2F1ZGlvRGV2aWNlOwor
ICAgIHNpemVfdCBtX2NhbGxiYWNrQnVmZmVyU2l6ZTsKKyAgICBTdHJpbmcgbV9pbnB1dERldmlj
ZUlkOworCisgICAgT3duUHRyPEF1ZGlvRklGTz4gbV9pbnB1dEZpZm87CisgICAgT3duUHRyPEF1
ZGlvUHVsbEZJRk8+IG1fZmlmbzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEF1ZGlvRGVzdGluYXRpb25OaXhfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vbml4L0ZGVEZyYW1lTml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL25peC9GRlRGcmFtZU5peC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTZhZGYwMDA1MjQ3YmUz
ZDkxM2VlZjhjZTg4MmQwOWQ3MGVmOGZhNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL25peC9GRlRGcmFtZU5peC5jcHAKQEAgLTAsMCArMSwxMjMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShXRUJfQVVESU8pCisjaW5jbHVkZSAiRkZURnJhbWUuaCIKKworI2luY2x1ZGUgIlZlY3Rvck1h
dGguaCIKKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDxwdWJsaWMvRkZURnJhbWUuaD4KKyNp
bmNsdWRlIDxwdWJsaWMvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0
aWMgaW5saW5lIHZvaWQgc2NhbGVQbGFuYXJEYXRhKGZsb2F0KiBkYXRhLCBjb25zdCB1bnNpZ25l
ZCBzaXplLCBjb25zdCBmbG9hdCBzY2FsZSkKK3sKKyAgICBWZWN0b3JNYXRoOjp2c211bChkYXRh
LCAxLCAmc2NhbGUsIGRhdGEsIDEsIHNpemUpOworfQorCitGRlRGcmFtZTo6RkZURnJhbWUodW5z
aWduZWQgZmZ0U2l6ZSkKKyAgICA6IG1fRkZUU2l6ZShmZnRTaXplKQorICAgICwgbV9sb2cyRkZU
U2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4obG9nMihmZnRTaXplKSkpCit7CisgICAgbV9mZnRG
cmFtZSA9IGFkb3B0UHRyKE5peDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3JlYXRlRkZURnJhbWUo
ZmZ0U2l6ZSkpOworfQorCitGRlRGcmFtZTo6RkZURnJhbWUoY29uc3QgRkZURnJhbWUmIGZyYW1l
KQorICAgIDogbV9GRlRTaXplKGZyYW1lLm1fRkZUU2l6ZSkKKyAgICAsIG1fbG9nMkZGVFNpemUo
ZnJhbWUubV9sb2cyRkZUU2l6ZSkKK3sKKyAgICBtX2ZmdEZyYW1lID0gYWRvcHRQdHIoZnJhbWUu
bV9mZnRGcmFtZS0+Y29weSgpKTsKK30KKworRkZURnJhbWU6On5GRlRGcmFtZSgpCit7Cit9CisK
K3ZvaWQgRkZURnJhbWU6Om11bHRpcGx5KGNvbnN0IEZGVEZyYW1lJiBmcmFtZSkKK3sKKyAgICBm
bG9hdCogcmVhbFAxID0gcmVhbERhdGEoKTsKKyAgICBmbG9hdCogaW1hZ1AxID0gaW1hZ0RhdGEo
KTsKKyAgICBjb25zdCBmbG9hdCogcmVhbFAyID0gZnJhbWUucmVhbERhdGEoKTsKKyAgICBjb25z
dCBmbG9hdCogaW1hZ1AyID0gZnJhbWUuaW1hZ0RhdGEoKTsKKworICAgIGNvbnN0IHNpemVfdCBz
aXplID0gbV9mZnRGcmFtZS0+ZnJlcXVlbmN5RG9tYWluU2FtcGxlQ291bnQoKTsKKyAgICBWZWN0
b3JNYXRoOjp6dm11bChyZWFsUDEsIGltYWdQMSwgcmVhbFAyLCBpbWFnUDIsIHJlYWxQMSwgaW1h
Z1AxLCBzaXplKTsKKworICAgIC8vIFNjYWxlIGFjY291bnRzIHRoZSBwZWN1bGlhciBzY2FsaW5n
IG9mIHZlY0xpYiBvbiB0aGUgTWFjLgorICAgIC8vIFRoaXMgZW5zdXJlcyB0aGUgcmlnaHQgc2Nh
bGluZyBhbGwgdGhlIHdheSBiYWNrIHRvIGludmVyc2UgRkZULgorICAgIC8vIEZJWE1FOiBpZiB3
ZSBjaGFuZ2UgdGhlIHNjYWxpbmcgb24gdGhlIE1hYyB0aGVuIHRoaXMgc2NhbGUKKyAgICAvLyBm
YWN0b3Igd2lsbCBuZWVkIHRvIGNoYW5nZSB0b28uCisgICAgY29uc3QgZmxvYXQgc2NhbGUgPSAw
LjU7CisgICAgc2NhbGVQbGFuYXJEYXRhKHJlYWxQMSwgc2l6ZSwgc2NhbGUpOworICAgIHNjYWxl
UGxhbmFyRGF0YShpbWFnUDEsIHNpemUsIHNjYWxlKTsKK30KKworLy8gUHJvdmlkZXMgdGltZSBk
b21haW4gc2FtcGxlcyBpbiBhcmd1bWVudCAiZGF0YSIuIEZyYW1lIHdpbGwgc3RvcmUgdGhlIHRy
YW5zZm9ybWVkIGRhdGEuCit2b2lkIEZGVEZyYW1lOjpkb0ZGVChjb25zdCBmbG9hdCogZGF0YSkK
K3sKKyAgICBtX2ZmdEZyYW1lLT5kb0ZGVChkYXRhKTsKKyAgICAvLyBTY2FsZSB0aGUgZnJlcXVl
bmN5IGRvbWFpbiBkYXRhIHRvIG1hdGNoIHZlY0xpYidzIHNjYWxlIGZhY3RvcgorICAgIC8vIG9u
IHRoZSBNYWMuIEZJWE1FOiBpZiB3ZSBjaGFuZ2UgdGhlIGRlZmluaXRpb24gb2YgRkZURnJhbWUg
dG8KKyAgICAvLyBlbGltaW5hdGUgdGhpcyBzY2FsZSBmYWN0b3IgdGhlbiB0aGlzIGNvZGUgd2ls
bCBuZWVkIHRvIGNoYW5nZS4KKyAgICBjb25zdCBmbG9hdCBzY2FsZSA9IDI7CisgICAgY29uc3Qg
c2l6ZV90IHNpemUgPSBtX2ZmdEZyYW1lLT5mcmVxdWVuY3lEb21haW5TYW1wbGVDb3VudCgpOwor
ICAgIHNjYWxlUGxhbmFyRGF0YShyZWFsRGF0YSgpLCBzaXplLCBzY2FsZSk7CisgICAgc2NhbGVQ
bGFuYXJEYXRhKGltYWdEYXRhKCksIHNpemUsIHNjYWxlKTsKK30KKworLy8gQ2FsY3VsYXRlcyBp
bnZlcnNlIHRyYW5zZm9ybSBmcm9tIHRoZSBzdG9yZWQgZGF0YSwgcHV0dGluZyB0aGUgcmVzdWx0
cyBpbiBhcmd1bWVudCAnZGF0YScuCit2b2lkIEZGVEZyYW1lOjpkb0ludmVyc2VGRlQoZmxvYXQq
IGRhdGEpCit7CisgICAgbV9mZnRGcmFtZS0+ZG9JbnZlcnNlRkZUKGRhdGEpOworCisgICAgLy8g
U2NhbGUgc28gdGhhdCBhIGZvcndhcmQgdGhlbiBpbnZlcnNlIEZGVCB5aWVsZHMgZXhhY3RseSB0
aGUgb3JpZ2luYWwgZGF0YS4KKyAgICBjb25zdCBmbG9hdCBzY2FsZSA9IDEuMCAvICgyICogbV9G
RlRTaXplKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9GRlRTaXplOyArK2kpCisg
ICAgICAgIGRhdGFbaV0gPSBzY2FsZSAqIGRhdGFbaV07Cit9CisKK3ZvaWQgRkZURnJhbWU6Omlu
aXRpYWxpemUoKQoreworfQorCit2b2lkIEZGVEZyYW1lOjpjbGVhbnVwKCkKK3sKK30KKworZmxv
YXQqIEZGVEZyYW1lOjpyZWFsRGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmZ0RnJhbWUt
PnJlYWxEYXRhKCk7Cit9CisKK2Zsb2F0KiBGRlRGcmFtZTo6aW1hZ0RhdGEoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2ZmdEZyYW1lLT5pbWFnRGF0YSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbml4L3N1cHBvcnQvTXVsdGlDaGFubmVsUENNRGF0YS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvc3VwcG9ydC9NdWx0aUNoYW5uZWxQQ01EYXRhLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zZjIyOTRjMzcxMzczZjRiZWY3MjU0OTliMGRiYjYwNDJmNGIyNmU0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L3N1cHBvcnQvTXVs
dGlDaGFubmVsUENNRGF0YS5jcHAKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHB1YmxpYy9NdWx0aUNoYW5u
ZWxQQ01EYXRhLmg+CisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorI2luY2x1ZGUgIkF1ZGlvQnVz
LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIE5peCB7CisKK3N0YXRpYyBXZWJDb3JlOjpBdWRpb0J1
cyogdG9BdWRpb0J1cyh2b2lkKiBkYXRhKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpBdWRpb0J1cyo+KGRhdGEpOworfQorCitNdWx0aUNoYW5uZWxQQ01EYXRhOjpNdWx0aUNo
YW5uZWxQQ01EYXRhKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBsZW5ndGgsIGRv
dWJsZSBzYW1wbGVSYXRlKQoreworI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAgV2ViQ29yZTo6
QXVkaW9CdXMqIGJ1cyA9IFdlYkNvcmU6OkF1ZGlvQnVzOjpjcmVhdGUobnVtYmVyT2ZDaGFubmVs
cywgbGVuZ3RoKS5sZWFrUmVmKCk7CisgICAgYnVzLT5zZXRTYW1wbGVSYXRlKHNhbXBsZVJhdGUp
OworICAgIG1fZGF0YSA9IGJ1czsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKG51bWJlck9mQ2hh
bm5lbHMpOworICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOworICAgIFVOVVNFRF9QQVJBTShzYW1w
bGVSYXRlKTsKKyAgICBtX2RhdGEgPSBudWxscHRyOworI2VuZGlmCit9CisKK011bHRpQ2hhbm5l
bFBDTURhdGE6On5NdWx0aUNoYW5uZWxQQ01EYXRhKCkKK3sKKyAgICBkZWxldGUgdG9BdWRpb0J1
cyhtX2RhdGEpOworfQorCit2b2lkKiBNdWx0aUNoYW5uZWxQQ01EYXRhOjpnZXRJbnRlcm5hbERh
dGEoKQoreworICAgIC8vIFRoaXMgdHJhbnNmZXIgdGhlIG93bmVyc2hpcCBvZiBtX2RhdGEgdG8g
dGhlIGNhbGxlci4KKyAgICB2b2lkKiBkYXRhID0gbV9kYXRhOworICAgIG1fZGF0YSA9IDA7Cisg
ICAgcmV0dXJuIGRhdGE7Cit9CisKK3Vuc2lnbmVkIE11bHRpQ2hhbm5lbFBDTURhdGE6Om51bWJl
ck9mQ2hhbm5lbHMoKSBjb25zdAoreworI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAgaWYgKG1f
ZGF0YSkKKyAgICAgICAgcmV0dXJuIHRvQXVkaW9CdXMobV9kYXRhKS0+bnVtYmVyT2ZDaGFubmVs
cygpOworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisKK3NpemVfdCBNdWx0aUNoYW5uZWxQQ01E
YXRhOjpsZW5ndGgoKSBjb25zdAoreworI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAgaWYgKG1f
ZGF0YSkKKyAgICAgICAgcmV0dXJuIHRvQXVkaW9CdXMobV9kYXRhKS0+bGVuZ3RoKCk7CisjZW5k
aWYKKyAgICByZXR1cm4gMDsKK30KKworZG91YmxlIE11bHRpQ2hhbm5lbFBDTURhdGE6OnNhbXBs
ZVJhdGUoKSBjb25zdAoreworI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAgaWYgKG1fZGF0YSkK
KyAgICAgICAgcmV0dXJuIHRvQXVkaW9CdXMobV9kYXRhKS0+c2FtcGxlUmF0ZSgpOworI2VuZGlm
CisgICAgcmV0dXJuIDA7Cit9CisKK2Zsb2F0KiBNdWx0aUNoYW5uZWxQQ01EYXRhOjpjaGFubmVs
RGF0YSh1bnNpZ25lZCBjaGFubmVsSW5kZXgpCit7CisjaWYgRU5BQkxFKFdFQl9BVURJTykKKyAg
ICBpZiAobV9kYXRhKSB7CisgICAgICAgIEFTU0VSVChjaGFubmVsSW5kZXggPCB0b0F1ZGlvQnVz
KG1fZGF0YSktPm51bWJlck9mQ2hhbm5lbHMoKSk7CisgICAgICAgIHJldHVybiB0b0F1ZGlvQnVz
KG1fZGF0YSktPmNoYW5uZWwoY2hhbm5lbEluZGV4KS0+bXV0YWJsZURhdGEoKTsKKyAgICB9Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShjaGFubmVsSW5kZXgpOworI2VuZGlmCisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIE5peApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGZiMzFlN2MwZTkyMWUzYTMzOThhNTdmMjIy
M2UyMzI0ZmYyMWY0MmQuLmU4NGUwZjY1NjYxYzM1MmIxNjA1MDgzNjRiOGQ3Yjc0M2QwYmIxMzgg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAxMy0xMC0yNSAgSHVnbyBQYXJlbnRlIExpbWEgIDxodWdvLmxpbWFAb3Bl
bmJvc3NhLm9yZz4KKworICAgICAgICBBZGRpbmcgTml4IGZpbGVzIGluIFNvdXJjZS9QbGF0Zm9y
bSB0byB0cnVuaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTE4MzMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIGEgc3BlY2lhbCBydWxlIGZvciBOaXggQVBJIGZpbGVzIGxvY2F0ZWQgYXQgU291cmNl
L1BsYXRmb3JtL25peC4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tl
ci5weToKKwogMjAxMy0xMC0yMSAgVGFtYXMgR2VyZ2VseSAgPGdlcnRvbUBpbmYudS1zemVnZWQu
aHU+CiAKICAgICAgICAgUnVuIHRlc3RzIGFzIGlmIHRoZXkgYXJlIGV4cGVjdGVkIHRvIHBhc3Mg
d2hlbiAtLWZvcmNlIGlzIGdpdmVuLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9zdHlsZS9jaGVja2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vy
LnB5CmluZGV4IGYyM2QzMDc3M2QyOTJkY2FkMTA3NTg4NDIxNTdjZTI3NjM1MzM3NDYuLjY0NTEz
ZjEzNjczNWU0MDc3ZTdlNTJkMTFiMjA4ODgzMTk1MjM2MDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL2NoZWNrZXIucHkKQEAgLTE2OCw3ICsxNjgsMTEgQEAgX1BBVEhfUlVMRVNfU1BF
Q0lGSUVSID0gWwogCiAgICAgKFsjIEhlYWRlciBmaWxlcyBpbiBGb3J3YXJkaW5nSGVhZGVycyBo
YXZlIG5vIGhlYWRlciBndWFyZHMgb3IKICAgICAgICMgZXhjZXB0aW9uYWwgaGVhZGVyIGd1YXJk
cyAoZS5nLiwgV2ViQ29yZV9GV0RfRGVidWdnZXJfaCkuCi0gICAgICAiL0ZvcndhcmRpbmdIZWFk
ZXJzLyJdLAorICAgICAgIi9Gb3J3YXJkaW5nSGVhZGVycy8iLAorICAgICAgIyBOaXggcGxhdGZv
cm0gQVBJIGNsYXNzZXMgdXNlcyBjb21tb24gbmFtZXMgdW5kZXIgTml4IG5hbWVzcGFjZQorICAg
ICAgIyBzbyB0aGUgaW5jbHVkZSBndWFyZHMgc2hvdWxkIGFsc28gaW5jbHVkZSB0aGUgbmFtZXNw
YWNlIHRvIGF2b2lkCisgICAgICAjIG5hbWUgY2xhc2hlcy4KKyAgICAgICAiU291cmNlL1BsYXRm
b3JtL25peCJdLAogICAgICBbIi1idWlsZC9oZWFkZXJfZ3VhcmQiXSksCiAgICAgKFsjIGFzc2Vt
YmxlciBoYXMgbG90cyBvZiBvcGNvZGVzIHRoYXQgdXNlIHVuZGVyc2NvcmVzLCBzbwogICAgICAg
IyB3ZSBkb24ndCBjaGVjayBmb3IgdW5kZXJzY29yZXMgaW4gdGhhdCBkaXJlY3RvcnkuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215435</attachid>
            <date>2013-10-29 15:08:32 -0700</date>
            <delta_ts>2013-10-29 16:02:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118331-20131029191116.patch</filename>
            <type>text/plain</type>
            <size>91453</size>
            <attacher name="Hugo Parente Lima">hugo.lima</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU3ODAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBlY2I4NTg4N2RmMjc4
ZWEwOGU4ODM1ZjBlYjI4MTJkMmExZTE3MzNkLi45YTEwYmRmYjNkZGQ1MDNlMWI4ZGUxZmY4NGUx
YTJhODY1YzU0MWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxMy0xMC0yNSAg
SHVnbyBQYXJlbnRlIExpbWEgIDxodWdvLmxpbWFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBB
ZGRpbmcgTml4IGZpbGVzIGluIFNvdXJjZS9QbGF0Zm9ybSB0byB0cnVuaworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4MzMxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQmVuamFtaW4gUG91bGFpbi4KKworICAgICAgICBBZGQgZmlsZXMgcGFydCBvZiBO
aXggcHVibGljIEFQSSB1c2VkIHRvIGltcGxlbWVudAorICAgICAgICBiYWNrZW5kcyBmb3Igc29t
ZSBXZWJLaXQgc3Vic3lzdGVtcyBvbiBBcHBsaWNhdGlvbiBzaWRlLgorCisgICAgICAgICogbml4
L3B1YmxpYy9BdWRpb0RldmljZS5oOiBBZGRlZC4KKyAgICAgICAgKiBuaXgvcHVibGljL0NhbnZh
cy5oOiBBZGRlZC4KKyAgICAgICAgKiBuaXgvcHVibGljL0NvbG9yLmg6IEFkZGVkLgorICAgICAg
ICAqIG5peC9wdWJsaWMvQ29tbW9uLmg6IEFkZGVkLgorICAgICAgICAqIG5peC9wdWJsaWMvRkZU
RnJhbWUuaDogQWRkZWQuCisgICAgICAgICogbml4L3B1YmxpYy9HYW1lcGFkLmg6IEFkZGVkLgor
ICAgICAgICAqIG5peC9wdWJsaWMvR2FtZXBhZHMuaDogQWRkZWQuCisgICAgICAgICogbml4L3B1
YmxpYy9NZWRpYVBsYXllci5oOiBBZGRlZC4KKyAgICAgICAgKiBuaXgvcHVibGljL011bHRpQ2hh
bm5lbFBDTURhdGEuaDogQWRkZWQuCisgICAgICAgICogbml4L3B1YmxpYy9QbGF0Zm9ybS5oOiBB
ZGRlZC4KKyAgICAgICAgKiBuaXgvcHVibGljL1JlY3QuaDogQWRkZWQuCisgICAgICAgICogbml4
L3B1YmxpYy9TaXplLmg6IEFkZGVkLgorICAgICAgICAqIG5peC9wdWJsaWMvVGhlbWVFbmdpbmUu
aDogQWRkZWQuCisgICAgICAgICogbml4L3NyYy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiBuaXgvc3JjL0RlZmF1bHRXZWJUaGVtZUVuZ2luZS5oOiBBZGRlZC4K
KyAgICAgICAgKiBuaXgvc3JjL1BsYXRmb3JtLmNwcDogQWRkZWQuCisKIDIwMTMtMDYtMTQgIFph
biBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQg
R1RLIGJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmMTg0YmJhNjZmY2E3M2RjMTBiNGUzM2IzZDlj
MmMwMmNjZDc4ZjBiLi5hYzVhOThhMzU1YTZhYWE5MWRkODU2N2NkMGZhM2MxMTk5MDFkMTgzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTMtMTAtMjUgIEh1Z28gUGFyZW50ZSBMaW1h
ICA8aHVnby5saW1hQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgQWRkaW5nIE5peCBmaWxlcyBp
biBTb3VyY2UvUGxhdGZvcm0gdG8gdHJ1bmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExODMzMQorCisgICAgICAgIFJldmlld2VkIGJ5IEJlbmphbWlu
IFBvdWxhaW4uCisKKyAgICAgICAgQWRkIE5peCBXZWJBdWRpbyBpbXBsZW1lbnRhdGlvbiB0aGF0
IGp1c3QgZm9yd2FyZCBzb21lIGNhbGxzIHRvIG91ciBBUEkuCisgICAgICAgIFRoaXMgcGF0Y2gg
aXMgcGFydCBvZiB0aGUgdXBzdHJlYW0gcHJvY2VzcywgdGVzdHMgd2lsbCBiZSBsYW5kZWQgYnkg
b3RoZXIgcGF0Y2hlcy4KKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL25peC9BdWRpb0J1c05p
eC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL25peC9BdWRpb0Rlc3RpbmF0
aW9uTml4LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbml4L0F1ZGlvRGVz
dGluYXRpb25OaXguaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbml4L0ZGVEZy
YW1lTml4LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbml4L3N1cHBvcnQvTXVsdGlD
aGFubmVsUENNRGF0YS5jcHA6IEFkZGVkLgorCiAyMDEzLTEwLTIyICBwZWF2b0BvdXRsb29rLmNv
bSAgPHBlYXZvQG91dGxvb2suY29tPgogCiAgICAgICAgIFtXaW5DYWlyb10gQ29tcGlsZSBlcnJv
ci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0F1ZGlvRGV2aWNlLmgg
Yi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9BdWRpb0RldmljZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdh
MGZhYTRkNmVkNmE1NmRmZGJlZWQ2Mjc5MzA4YzhhYjQ4NTlkYzkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9BdWRpb0RldmljZS5oCkBAIC0wLDAgKzEsNTcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgor
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOaXhfQXVkaW9EZXZpY2VfaAorI2RlZmluZSBOaXhf
QXVkaW9EZXZpY2VfaAorCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDx2ZWN0b3I+CisK
K25hbWVzcGFjZSBOaXggeworCitjbGFzcyBBdWRpb0RldmljZSB7CitwdWJsaWM6CisgICAgY2xh
c3MgUmVuZGVyQ2FsbGJhY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB2b2lkIHJl
bmRlcihjb25zdCBzdGQ6OnZlY3RvcjxmbG9hdCo+JiAvKnNvdXJjZURhdGEqLywgY29uc3Qgc3Rk
Ojp2ZWN0b3I8ZmxvYXQqPiYgLypkZXN0aW5hdGlvbkRhdGEqLywgc2l6ZV90IC8qbnVtYmVyT2ZG
cmFtZXMqLykgPSAwOworCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIH5SZW5kZXJD
YWxsYmFjaygpIHsgfQorICAgIH07CisKKyAgICB2aXJ0dWFsIH5BdWRpb0RldmljZSgpIHsgfQor
CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkg
PSAwOworICAgIHZpcnR1YWwgZG91YmxlIHNhbXBsZVJhdGUoKSA9IDA7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBOaXgKKworI2VuZGlmIC8vIE5peF9BdWRpb0RldmljZV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9DYW52YXMuaCBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgv
cHVibGljL0NhbnZhcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkyZWRkMzczZWY3NDQ5NzQ3ZmU4M2I5OWNhZGIz
YmE4Y2RlYjE3OTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1Ymxp
Yy9DYW52YXMuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZu
ZGVmIE5peF9DYW52YXNfaAorI2RlZmluZSBOaXhfQ2FudmFzX2gKKworI2luY2x1ZGUgPGNhaXJv
L2NhaXJvLmg+CisKK25hbWVzcGFjZSBOaXggeworCit0eXBlZGVmIGNhaXJvX3QgQ2FudmFzOwor
Cit9IC8vIG5hbWVzcGFjZSBOaXgKKworI2VuZGlmIC8vIE5peF9DYW52YXNfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvQ29sb3IuaCBiL1NvdXJjZS9QbGF0Zm9ybS9u
aXgvcHVibGljL0NvbG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGNiNjVjYjc5ODAwZTdiOWIyNzBiMzM3ZjAw
MTVkMWRiZjFiNTVjMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVi
bGljL0NvbG9yLmgKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEz
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorKi8KKworI2lmbmRlZiBOaXhfQ29sb3JfaAorI2RlZmluZSBOaXhfQ29sb3JfaAorCisj
aW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNzdGRkZWY+CisKK25hbWVzcGFjZSBOaXgg
eworCitjbGFzcyBDb2xvciB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB1X2ludDMyX3QgQVJHQjMy
OyAvLyBBUkdCIHF1YWRydXBsZXQKKworICAgIHN0YXRpYyBjb25zdCBBUkdCMzIgYmxhY2sgPSAw
eEZGMDAwMDAwOworICAgIHN0YXRpYyBjb25zdCBBUkdCMzIgd2hpdGUgPSAweEZGRkZGRkZGOwor
ICAgIHN0YXRpYyBjb25zdCBBUkdCMzIgcmVkID0gMHhGRkZGMDAwMDsKKyAgICBzdGF0aWMgY29u
c3QgQVJHQjMyIGdyZWVuID0gMHhGRjAwRkYwMDsKKyAgICBzdGF0aWMgY29uc3QgQVJHQjMyIGJs
dWUgPSAweEZGMDAwMEZGOworICAgIHN0YXRpYyBjb25zdCBBUkdCMzIgZGFya0dyYXkgPSAweEZG
ODA4MDgwOworICAgIHN0YXRpYyBjb25zdCBBUkdCMzIgZ3JheSA9IDB4RkZBMEEwQTA7CisgICAg
c3RhdGljIGNvbnN0IEFSR0IzMiBsaWdodEdyYXkgPSAweEZGQzBDMEMwOworICAgIHN0YXRpYyBj
b25zdCBBUkdCMzIgdHJhbnNwYXJlbnQgPSAweDAwMDAwMDAwOworCisgICAgQ29sb3IoQVJHQjMy
IHJnYmEpCisgICAgICAgIDogbV9hcmdiKHJnYmEpCisgICAgeworICAgIH0KKworICAgIENvbG9y
KGludCByLCBpbnQgZywgaW50IGIsIGludCBhID0gMjU1KQorICAgICAgICA6IG1fYXJnYihib3Vu
ZFZhbHVlKGEpIDw8IDI0IHwgYm91bmRWYWx1ZShyKSA8PCAxNiB8IGJvdW5kVmFsdWUoZykgPDwg
OCB8IGJvdW5kVmFsdWUoYikpCisgICAgeworICAgIH0KKworICAgIG9wZXJhdG9yIEFSR0IzMigp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9hcmdiOworICAgIH0KKworICAgIHVuc2ln
bmVkIGNoYXIgcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKG1fYXJnYiAmIDB4MDBG
RjAwMDApID4+IDE2OworICAgIH0KKworICAgIHVuc2lnbmVkIGNoYXIgZygpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gKG1fYXJnYiAmIDB4MDAwMEZGMDApID4+IDg7CisgICAgfQorCisg
ICAgdW5zaWduZWQgY2hhciBiKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAobV9hcmdi
ICYgMHgwMDAwMDBGRik7CisgICAgfQorCisgICAgdW5zaWduZWQgY2hhciBhKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAobV9hcmdiICYgMHhGRjAwMDAwMCkgPj4gMjQ7CisgICAgfQor
CisgICAgQVJHQjMyIGFyZ2IzMigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9hcmdi
OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYgb3RoZXIpCisgICAg
eworICAgICAgICByZXR1cm4gbV9hcmdiID09IG90aGVyLm1fYXJnYjsKKyAgICB9CisKKyAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3ImIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fYXJnYiAhPSBvdGhlci5tX2FyZ2I7CisgICAgfQorCitwcml2YXRlOgorICAgIEFSR0IzMiBt
X2FyZ2I7CisgICAgc3RhdGljIGlubGluZSBBUkdCMzIgYm91bmRWYWx1ZShpbnQgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gc3RkOjptYXgoMCwgc3RkOjptaW4odmFsdWUsIDI1NSkpOwor
ICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIE5peAorCisjZW5kaWYgLy8gTml4X0NvbG9yX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0NvbW1vbi5oIGIvU291cmNl
L1BsYXRmb3JtL25peC9wdWJsaWMvQ29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODFkOThiNzE2NThiMTNm
MDJlNDFhY2IzOGY0MWY0ZDhlN2UwYmJmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0
Zm9ybS9uaXgvcHVibGljL0NvbW1vbi5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBOaXhfQ29tbW9uX2gKKyNkZWZpbmUgTml4X0NvbW1vbl9oCisK
KyNkZWZpbmUgTklYX0VYUE9SVCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0Iikp
KQorCisjaW5jbHVkZSA8c3RkZGVmLmg+IC8vIEZvciBzaXplX3QuCisKKyNlbmRpZiAvLyBOaXhf
Q29tbW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0ZGVEZyYW1l
LmggYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9GRlRGcmFtZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAy
MTlhNzIxZjc3YWYwZWNiNGMyZTVmYThhNGZiZmVhZDYzMmM4ZDEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9GRlRGcmFtZS5oCkBAIC0wLDAgKzEsNTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgTml4X0ZGVEZyYW1lX2gKKyNkZWZpbmUg
Tml4X0ZGVEZyYW1lX2gKKworbmFtZXNwYWNlIE5peCB7CisKK2NsYXNzIEZGVEZyYW1lIHsKK3B1
YmxpYzoKKyAgICBGRlRGcmFtZSgpIHsgfQorICAgIHZpcnR1YWwgfkZGVEZyYW1lKCkgeyB9CisK
KyAgICB2aXJ0dWFsIEZGVEZyYW1lKiBjb3B5KCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIGRvRkZUKGNvbnN0IGZsb2F0KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkb0ludmVyc2VG
RlQoZmxvYXQqKSA9IDA7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGZyZXF1ZW5jeURvbWFpblNh
bXBsZUNvdW50KCkgY29uc3QgPSAwOworICAgIC8vIEFmdGVyIG11bHRpcGxpY2F0aW9uIGFuZCB0
cmFuc2Zvcm0gb3BlcmF0aW9ucywgdGhlIGRhdGEgaXMgc2NhbGVkCisgICAgLy8gdG8gdGFrZSBp
biBhY2NvdW50IHRoZSBzY2FsZSB1c2VkIGludGVybmFsbHkgaW4gV2ViS2l0LCBvcmlnaW5hbGx5
CisgICAgLy8gZnJvbSBNYWMncyB2ZWNMaWIuCisgICAgLy8gQWZ0ZXIgbXVsdGlwbGljYXRpb246
IFBsYW5hciBkYXRhIGlzIHNjYWxlZCBieSAwLjUuCisgICAgLy8gQWZ0ZXIgZGlyZWN0IHRyYW5z
Zm9ybTogUGxhbmFyIGRhdGEgaXMgc2NhbGVkIGJ5IDIuMC4KKyAgICAvLyBBZnRlciBpbnZlcnNl
IHRyYW5zZm9ybTogVGltZSBkb21haW4gZGF0YSBpcyBzY2FsZWQgYnkgMS4wLygyKiBGRlQgc2l6
ZSkuCisgICAgdmlydHVhbCBmbG9hdCogcmVhbERhdGEoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBmbG9hdCogaW1hZ0RhdGEoKSBjb25zdCA9IDA7Citwcml2YXRlOgorICAgIEZGVEZyYW1lKGNv
bnN0IEZGVEZyYW1lJik7CisgICAgRkZURnJhbWUmIG9wZXJhdG9yPShjb25zdCBGRlRGcmFtZSYp
OworfTsKKworfSAvLyBuYW1lc3BhY2UgTml4CisKKyNlbmRpZiAvLyBOaXhfRkZURnJhbWVfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvR2FtZXBhZC5oIGIvU291cmNl
L1BsYXRmb3JtL25peC9wdWJsaWMvR2FtZXBhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQyZTdlMzZkZGQ2ZjNm
YzIzM2M5MTg4YWQxZjRhNTBiZDM3ZWJmMGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxh
dGZvcm0vbml4L3B1YmxpYy9HYW1lcGFkLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgTml4X0dhbWVwYWRfaAorI2RlZmluZSBOaXhfR2FtZXBhZF9o
CisKKyNpbmNsdWRlICJDb21tb24uaCIKKworbmFtZXNwYWNlIE5peCB7CisKK2NsYXNzIEdhbWVw
YWQgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBzaXplX3QgaWRMZW5ndGhDYXAgPSAxMjg7
CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBheGVzTGVuZ3RoQ2FwID0gMTY7CisgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBidXR0b25zTGVuZ3RoQ2FwID0gMzI7CisKKyAgICBHYW1lcGFkKCkKKyAg
ICAgICAgOiBjb25uZWN0ZWQoZmFsc2UpCisgICAgICAgICwgdGltZXN0YW1wKDApCisgICAgICAg
ICwgYXhlc0xlbmd0aCgwKQorICAgICAgICAsIGJ1dHRvbnNMZW5ndGgoMCkKKyAgICB7CisgICAg
ICAgIGlkWzBdID0gMDsKKyAgICB9CisKKyAgICAvLyBJcyB0aGVyZSBhIGdhbWVwYWQgY29ubmVj
dGVkIGF0IHRoaXMgaW5kZXg/CisgICAgYm9vbCBjb25uZWN0ZWQ7CisKKyAgICAvLyBEZXZpY2Ug
aWRlbnRpZmllciAoYmFzZWQgb24gbWFudWZhY3R1cmVyLCBtb2RlbCwgZXRjLikuCisgICAgY2hh
ciBpZFtpZExlbmd0aENhcF07CisKKyAgICAvLyBNb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgdmFs
dWUgcmVmZXJyaW5nIHRvIHdoZW4gdGhlIGRhdGEgd2VyZSBsYXN0CisgICAgLy8gdXBkYXRlZC4K
KyAgICB1bnNpZ25lZCBsb25nIGxvbmcgdGltZXN0YW1wOworCisgICAgLy8gTnVtYmVyIG9mIHZh
bGlkIGVudHJpZXMgaW4gdGhlIGF4ZXMgYXJyYXkuCisgICAgdW5zaWduZWQgYXhlc0xlbmd0aDsK
KworICAgIC8vIE5vcm1hbGl6ZWQgdmFsdWVzIHJlcHJlc2VudGluZyBheGVzLCBpbiB0aGUgcmFu
Z2UgWy0xLi4xXS4KKyAgICBmbG9hdCBheGVzW2F4ZXNMZW5ndGhDYXBdOworCisgICAgLy8gTnVt
YmVyIG9mIHZhbGlkIGVudHJpZXMgaW4gdGhlIGJ1dHRvbnMgYXJyYXkuCisgICAgdW5zaWduZWQg
YnV0dG9uc0xlbmd0aDsKKworICAgIC8vIE5vcm1hbGl6ZWQgdmFsdWVzIHJlcHJlc2VudGluZyBi
dXR0b25zLCBpbiB0aGUgcmFuZ2UgWzAuLjFdLgorICAgIGZsb2F0IGJ1dHRvbnNbYnV0dG9uc0xl
bmd0aENhcF07Cit9OworCit9IC8vIG5hbWVzcGFjZSBOaXgKKworI2VuZGlmIC8vIE5peF9HYW1l
cGFkX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL0dhbWVwYWRzLmgg
Yi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9HYW1lcGFkcy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiMzhl
YjhjZTg3MDhjZmZhYmMyYWRlZGQwYzJkNTU4ODdkZGE1ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9HYW1lcGFkcy5oCkBAIC0wLDAgKzEsNTEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5peF9HYW1lcGFkc19oCisjZGVmaW5lIE5p
eF9HYW1lcGFkc19oCisKKyNpbmNsdWRlICJHYW1lcGFkLmgiCisKK25hbWVzcGFjZSBOaXggewor
CitjbGFzcyBHYW1lcGFkcyB7CitwdWJsaWM6CisgICAgR2FtZXBhZHMoKQorICAgICAgICA6IGxl
bmd0aCgwKQorICAgIHsgfQorCisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBpdGVtc0xlbmd0aENh
cCA9IDQ7CisKKyAgICAvLyBOdW1iZXIgb2YgdmFsaWQgZW50cmllcyBpbiB0aGUgaXRlbXMgYXJy
YXkuCisgICAgdW5zaWduZWQgbGVuZ3RoOworCisgICAgLy8gR2FtZXBhZCBkYXRhIGZvciBOIHNl
cGFyYXRlIGdhbWVwYWQgZGV2aWNlcy4KKyAgICBHYW1lcGFkIGl0ZW1zW2l0ZW1zTGVuZ3RoQ2Fw
XTsKK307CisKK30gLy8gbmFtZXNwYWNlIE5peAorCisjZW5kaWYgLy8gTml4X0dhbWVwYWRzX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL01lZGlhUGxheWVyLmggYi9T
b3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9NZWRpYVBsYXllci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkODZj
MTdjODE2NDg1MGM1OGRjMGRlOTkxZmYxYTkyN2VhNDFkZGYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9NZWRpYVBsYXllci5oCkBAIC0wLDAgKzEsNzUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOaXhfTWVkaWFQbGF5ZXIKKyNkZWZp
bmUgTml4X01lZGlhUGxheWVyCisKKyNpbmNsdWRlIDxtZW1vcnk+CisKK25hbWVzcGFjZSBOaXgg
eworCitjbGFzcyBNZWRpYVBsYXllckNsaWVudCB7CitwdWJsaWM6CisgICAgZW51bSBSZWFkeVN0
YXRlICB7IEhhdmVOb3RoaW5nLCBIYXZlTWV0YWRhdGEsIEhhdmVDdXJyZW50RGF0YSwgSGF2ZUZ1
dHVyZURhdGEsIEhhdmVFbm91Z2hEYXRhIH07CisgICAgZW51bSBOZXR3b3JrU3RhdGUgeyBFbXB0
eSwgSWRsZSwgTG9hZGluZywgTG9hZGVkLCBGb3JtYXRFcnJvciwgTmV0d29ya0Vycm9yLCBEZWNv
ZGVFcnJvciB9OworCisgICAgdmlydHVhbCB+TWVkaWFQbGF5ZXJDbGllbnQoKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBjdXJyZW50VGltZUNoYW5nZWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlYWR5
U3RhdGVDaGFuZ2VkKFJlYWR5U3RhdGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbmV0d29ya1N0
YXRlQ2hhbmdlZChOZXR3b3JrU3RhdGUpID0gMDsKK307CisKK2NsYXNzIE1lZGlhUGxheWVyIHsK
K3B1YmxpYzoKKyAgICAvLyBEZXJpdmF0ZWQgY2xhc3NlcyBzaG91bGRuJ3QgZG8gYW55IGpvYiBv
biBjb25zdHJ1Y3RvciwgTWVkaWFQbGF5ZXJzIGNvdWxkIGJlCisgICAgLy8gY3JlYXRlZCBmb3Ig
cHJvYmluZyBwdXJwb3NlcyB3aXRoIGEgbnVsbCBjbGllbnQuCisgICAgTWVkaWFQbGF5ZXIoTWVk
aWFQbGF5ZXJDbGllbnQqIGNsaWVudCkKKyAgICAgICAgOiBtX3BsYXllckNsaWVudChjbGllbnQp
CisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfk1lZGlhUGxheWVyKCkgeyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgcGxheSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGF1c2UoKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHNlZWsoZmxvYXQpID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0IGR1cmF0
aW9uKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZmxvYXQgY3VycmVudFRpbWUoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFZvbHVtZShmbG9hdCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzZXRNdXRlZChib29sKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWQoY29uc3QgY2hh
ciogdXJsKSA9IDA7CisgICAgdmlydHVhbCBib29sIHNlZWtpbmcoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBmbG9hdCBtYXhUaW1lU2Vla2FibGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHNldFBsYXliYWNrUmF0ZShmbG9hdCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0xpdmVT
dHJlYW0oKSBjb25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVk
aWFQbGF5ZXJDbGllbnQ+IG1fcGxheWVyQ2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgTml4
CisKKyNlbmRpZiAvLyBOaXhfTWVkaWFQbGF5ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRm
b3JtL25peC9wdWJsaWMvTXVsdGlDaGFubmVsUENNRGF0YS5oIGIvU291cmNlL1BsYXRmb3JtL25p
eC9wdWJsaWMvTXVsdGlDaGFubmVsUENNRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiYmVmOGJmZjBmODA1
MWEzNzVkNjNlMTE1MjBiZmIyZGMzMWYyMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxh
dGZvcm0vbml4L3B1YmxpYy9NdWx0aUNoYW5uZWxQQ01EYXRhLmgKQEAgLTAsMCArMSw1OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5peF9NdWx0aUNoYW5uZWxQQ01EYXRh
X2gKKyNkZWZpbmUgTml4X011bHRpQ2hhbm5lbFBDTURhdGFfaAorCisjaW5jbHVkZSAiQ29tbW9u
LmgiCisKK25hbWVzcGFjZSBOaXggeworCisvLyBBIGNvbnRhaW5lciBmb3IgbXVsdGktY2hhbm5l
bCBsaW5lYXIgUENNIGF1ZGlvIGRhdGEuCitjbGFzcyBOSVhfRVhQT1JUIE11bHRpQ2hhbm5lbFBD
TURhdGEgeworcHVibGljOgorICAgIE11bHRpQ2hhbm5lbFBDTURhdGEodW5zaWduZWQgbnVtYmVy
T2ZDaGFubmVscywgc2l6ZV90IGxlbmd0aCwgZG91YmxlIHNhbXBsZVJhdGUpOworICAgIH5NdWx0
aUNoYW5uZWxQQ01EYXRhKCk7CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKCkgY29u
c3Q7CisgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0OworICAgIGRvdWJsZSBzYW1wbGVSYXRlKCkg
Y29uc3Q7CisKKyAgICAvLyBUaGlzIGNhbiByZXR1cm4gbnVsbCBpZiBOaXggd2FzIGNvbXBpbGVk
IHdpdGhvdXQgV2ViQXVkaW8gc3VwcG9ydC4KKyAgICBmbG9hdCogY2hhbm5lbERhdGEodW5zaWdu
ZWQgY2hhbm5lbEluZGV4KTsKKworI2lmZGVmIEJVSUxESU5HX05JWF9fCisgICAgdm9pZCogZ2V0
SW50ZXJuYWxEYXRhKCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBNdWx0aUNoYW5uZWxQQ01E
YXRhKGNvbnN0IE11bHRpQ2hhbm5lbFBDTURhdGEmKTsKKyAgICB2b2lkIG9wZXJhdG9yPShjb25z
dCBNdWx0aUNoYW5uZWxQQ01EYXRhJik7CisKKyAgICB2b2lkKiBtX2RhdGE7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBOaXgKKworI2VuZGlmIC8vIE5peF9NdWx0aUNoYW5uZWxQQ01EYXRhX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1BsYXRmb3JtLmggYi9Tb3VyY2Uv
UGxhdGZvcm0vbml4L3B1YmxpYy9QbGF0Zm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4MmE4N2NhYTFhMGFj
YzIwODFiODM2MDk5NmVkYTRiZGQyNzY5NTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxh
dGZvcm0vbml4L3B1YmxpYy9QbGF0Zm9ybS5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBOaXhfUGxhdGZvcm1faAorI2RlZmluZSBOaXhfUGxhdGZvcm1faAorCisjaW5jbHVk
ZSAiQXVkaW9EZXZpY2UuaCIKKyNpbmNsdWRlICJHYW1lcGFkcy5oIgorI2luY2x1ZGUgPHN0ZGlu
dC5oPgorCituYW1lc3BhY2UgTml4IHsKKworY2xhc3MgTXVsdGlDaGFubmVsUENNRGF0YTsKK2Ns
YXNzIEZGVEZyYW1lOworY2xhc3MgVGhlbWVFbmdpbmU7CitjbGFzcyBNZWRpYVBsYXllcjsKK2Ns
YXNzIE1lZGlhUGxheWVyQ2xpZW50OworCitjbGFzcyBOSVhfRVhQT1JUIFBsYXRmb3JtIHsKK3B1
YmxpYzoKKworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoUGxhdGZvcm0qKTsKKyAgICBzdGF0
aWMgUGxhdGZvcm0qIGN1cnJlbnQoKTsKKworICAgIC8vIEF1ZGlvCisgICAgdmlydHVhbCBmbG9h
dCBhdWRpb0hhcmR3YXJlU2FtcGxlUmF0ZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHNp
emVfdCBhdWRpb0hhcmR3YXJlQnVmZmVyU2l6ZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIGF1ZGlvSGFyZHdhcmVPdXRwdXRDaGFubmVscygpIHsgcmV0dXJuIDA7IH0KKwor
ICAgIC8vIENyZWF0ZXMgYSBkZXZpY2UgZm9yIGF1ZGlvIEkvTy4KKyAgICAvLyBQYXNzIGluIChu
dW1iZXJPZklucHV0Q2hhbm5lbHMgPiAwKSBpZiBsaXZlL2xvY2FsIGF1ZGlvIGlucHV0IGlzIGRl
c2lyZWQuCisgICAgdmlydHVhbCBBdWRpb0RldmljZSogY3JlYXRlQXVkaW9EZXZpY2UoY29uc3Qg
Y2hhciogLyppbnB1dERldmljZUlkKi8sIHNpemVfdCAvKmJ1ZmZlclNpemUqLywgdW5zaWduZWQg
LypudW1iZXJPZklucHV0Q2hhbm5lbHMqLywgdW5zaWduZWQgLypudW1iZXJPZk91dHB1dENoYW5u
ZWxzKi8sIGRvdWJsZSAvKnNhbXBsZVJhdGUqLywgQXVkaW9EZXZpY2U6OlJlbmRlckNhbGxiYWNr
KikgeyByZXR1cm4gbnVsbHB0cjsgfQorCisgICAgLy8gR2FtZXBhZAorICAgIHZpcnR1YWwgdm9p
ZCBzYW1wbGVHYW1lcGFkcyhHYW1lcGFkcyYgaW50bykgeyBpbnRvLmxlbmd0aCA9IDA7IH0KKwor
ICAgIC8vIEZGVEZyYW1lCisgICAgdmlydHVhbCBGRlRGcmFtZSogY3JlYXRlRkZURnJhbWUodW5z
aWduZWQgLypmZnRzaXplKi8pIHsgcmV0dXJuIG51bGxwdHI7IH0KKworICAgIC8vIERlY29kZXMg
dGhlIGluLW1lbW9yeSBhdWRpbyBmaWxlIGRhdGEgYW5kIHJldHVybnMgdGhlIGxpbmVhciBQQ00g
YXVkaW8gZGF0YS4KKyAgICB2aXJ0dWFsIE11bHRpQ2hhbm5lbFBDTURhdGEqIGRlY29kZUF1ZGlv
UmVzb3VyY2UoY29uc3Qgdm9pZCogLyphdWRpb0RhdGEqLywgc2l6ZV90IC8qZGF0YVNpemUqLywg
ZG91YmxlIC8qc2FtcGxlUmF0ZSovKSB7IHJldHVybiBudWxscHRyOyB9CisKKyAgICAvLyBUaGVt
ZSBlbmdpbmUKKyAgICB2aXJ0dWFsIFRoZW1lRW5naW5lKiB0aGVtZUVuZ2luZSgpOworCisgICAg
Ly8gQ3JlYXRlIGEgTWVkaWFQbGF5ZXIsIHVzZWQgdG8uLi4gcGxheSBtZWRpYSA6LSkKKyAgICB2
aXJ0dWFsIE1lZGlhUGxheWVyKiBjcmVhdGVNZWRpYVBsYXllcihNZWRpYVBsYXllckNsaWVudCop
IHsgcmV0dXJuIG51bGxwdHI7IH0KK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5QbGF0Zm9ybSgp
IHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgTml4CisKKyNlbmRpZiAvLyBOaXhfUGxhdGZvcm1f
aApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvUmVjdC5oIGIvU291cmNl
L1BsYXRmb3JtL25peC9wdWJsaWMvUmVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiODQwOGJmMjdiZDVkNGI3
ODg2N2Q5NGQ2NDcyNmI0ZDMxMDQ5NmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZv
cm0vbml4L3B1YmxpYy9SZWN0LmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIE5peF9SZWN0X2gKKyNkZWZpbmUgTml4X1JlY3RfaAorCituYW1lc3Bh
Y2UgTml4IHsKKworY2xhc3MgUmVjdCB7CitwdWJsaWM6CisgICAgaW50IHg7CisgICAgaW50IHk7
CisgICAgaW50IHdpZHRoOworICAgIGludCBoZWlnaHQ7CisKKyAgICBSZWN0KGludCB4LCBpbnQg
eSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorICAgICAgICA6IHgoeCkKKyAgICAgICAgLCB5KHkp
CisgICAgICAgICwgd2lkdGgod2lkdGgpCisgICAgICAgICwgaGVpZ2h0KGhlaWdodCkKKyAgICB7
CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgTml4CisKKyNlbmRpZiAvLyBOaXhfUmVjdF9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9TaXplLmggYi9Tb3VyY2Uv
UGxhdGZvcm0vbml4L3B1YmxpYy9TaXplLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDM2MGI0NGZjODg2OThiNWQz
NzJiZGEzNDNiNDE2ZTk5M2U2Y2NjNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9y
bS9uaXgvcHVibGljL1NpemUuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
Tml4X1NpemVfaAorI2RlZmluZSBOaXhfU2l6ZV9oCisKK25hbWVzcGFjZSBOaXggeworCitzdHJ1
Y3QgU2l6ZSB7CisgICAgaW50IHdpZHRoOworICAgIGludCBoZWlnaHQ7CisKKyAgICBib29sIGlz
RW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHdpZHRoIDw9IDAgfHwgaGVpZ2h0
IDw9IDA7CisgICAgfQorCisgICAgU2l6ZSgpCisgICAgICAgIDogd2lkdGgoMCkKKyAgICAgICAg
LCBoZWlnaHQoMCkKKyAgICB7CisgICAgfQorCisgICAgU2l6ZShpbnQgd2lkdGgsIGludCBoZWln
aHQpCisgICAgICAgIDogd2lkdGgod2lkdGgpCisgICAgICAgICwgaGVpZ2h0KGhlaWdodCkKKyAg
ICB7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNpemUmIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIHdpZHRoID09IG90aGVyLndpZHRoICYmIGhlaWdodCA9
PSBvdGhlci5oZWlnaHQ7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNpemUm
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwor
ICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIE5peAorCisjZW5kaWYgLy8gTml4X1NpemVfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvVGhlbWVFbmdpbmUuaCBiL1Nv
dXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1RoZW1lRW5naW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZThlNTIy
Mzg2NTNlMTYwNjdjMjI4MzdkMzRkNGUwMWIzZDQyZjM0YwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1RoZW1lRW5naW5lLmgKQEAgLTAsMCArMSwxNTggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBOaXhfVGhlbWVFbmdpbmVfaAorI2RlZmluZSBOaXhfVGhlbWVF
bmdpbmVfaAorCisjaW5jbHVkZSAiQ2FudmFzLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNs
dWRlICJTaXplLmgiCisKK25hbWVzcGFjZSBOaXggeworCitjbGFzcyBSZWN0OworCitjbGFzcyBU
aGVtZUVuZ2luZSB7CitwdWJsaWM6CisgICAgLy8gVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGFz
c29jaWF0ZWQgUGFydC4KKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgU3RhdGVEaXNhYmxlZCwK
KyAgICAgICAgU3RhdGVIb3ZlciwKKyAgICAgICAgU3RhdGVOb3JtYWwsCisgICAgICAgIFN0YXRl
UHJlc3NlZAorICAgIH07CisKKyAgICBlbnVtIE1lZGlhUGxheWVyU3RhdGUgeworICAgICAgICBT
dGF0ZVBsYXlpbmcsCisgICAgICAgIFN0YXRlUGF1c2VkLAorICAgICAgICBTdGF0ZU11dGVkLAor
ICAgICAgICBTdGF0ZU5vdE11dGVkCisgICAgfTsKKworICAgIC8vIEV4dHJhIHBhcmFtZXRlcnMg
Zm9yIGRyYXdpbmcgdGhlIFBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVHJhY2sgYW5kCisgICAgLy8g
UGFydFNjcm9sbGJhclZlcnRpY2FsVHJhY2suCisgICAgc3RydWN0IFNjcm9sbGJhclRyYWNrRXh0
cmFQYXJhbXMgeworICAgICAgICAvLyBUaGUgYm91bmRzIG9mIHRoZSBlbnRpcmUgdHJhY2ssIGFz
IG9wcG9zZWQgdG8gdGhlIHBhcnQgYmVpbmcgcGFpbnRlZC4KKyAgICAgICAgaW50IHRyYWNrWDsK
KyAgICAgICAgaW50IHRyYWNrWTsKKyAgICAgICAgaW50IHRyYWNrV2lkdGg7CisgICAgICAgIGlu
dCB0cmFja0hlaWdodDsKKyAgICB9OworCisgICAgLy8gRXh0cmEgcGFyYW1ldGVycyBmb3IgUGFy
dENoZWNrYm94LCBQYXJ0UHVzaEJ1dHRvbiBhbmQgUGFydFJhZGlvLgorICAgIHN0cnVjdCBCdXR0
b25FeHRyYVBhcmFtcyB7CisgICAgICAgIGJvb2wgY2hlY2tlZDsKKyAgICAgICAgYm9vbCBpbmRl
dGVybWluYXRlOyAvLyBXaGV0aGVyIHRoZSBidXR0b24gc3RhdGUgaXMgaW5kZXRlcm1pbmF0ZS4K
KyAgICAgICAgYm9vbCBpc0RlZmF1bHQ7IC8vIFdoZXRoZXIgdGhlIGJ1dHRvbiBpcyBkZWZhdWx0
IGJ1dHRvbi4KKyAgICAgICAgYm9vbCBoYXNCb3JkZXI7CisgICAgfTsKKworICAgIC8vIEV4dHJh
IHBhcmFtZXRlcnMgZm9yIFBhcnRJbm5lclNwaW5CdXR0b24KKyAgICBzdHJ1Y3QgSW5uZXJTcGlu
QnV0dG9uRXh0cmFQYXJhbXMgeworICAgICAgICBib29sIHNwaW5VcDsKKyAgICAgICAgYm9vbCBy
ZWFkT25seTsKKyAgICB9OworCisgICAgLy8gRXh0cmEgcGFyYW1ldGVycyBmb3IgUGFydFByb2dy
ZXNzQmFyCisgICAgc3RydWN0IFByb2dyZXNzQmFyRXh0cmFQYXJhbXMgeworICAgICAgICBib29s
IGlzRGV0ZXJtaW5hdGU7CisgICAgICAgIGRvdWJsZSBwb3NpdGlvbjsKKyAgICAgICAgZG91Ymxl
IGFuaW1hdGlvblByb2dyZXNzOworICAgICAgICBkb3VibGUgYW5pbWF0aW9uU3RhcnRUaW1lOwor
ICAgIH07CisKKyAgICBzdHJ1Y3QgTWV0ZXJFeHRyYVBhcmFtcyB7CisgICAgICAgIGRvdWJsZSBt
aW47CisgICAgICAgIGRvdWJsZSBtYXg7CisgICAgICAgIGRvdWJsZSB2YWx1ZTsKKyAgICAgICAg
ZG91YmxlIGxvdzsKKyAgICAgICAgZG91YmxlIGhpZ2g7CisgICAgICAgIGRvdWJsZSBvcHRpbXVt
OworICAgICAgICBkb3VibGUgdmFsdWVSYXRpbygpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChtYXggPD0gbWluKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgcmV0dXJuICh2YWx1ZSAtIG1pbikgLyAobWF4IC0gbWluKTsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKSBjb25z
dCB7IHJldHVybiAiIjsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZXh0cmFRdWlya3NTdHls
ZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gIiI7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGV4
dHJhUGx1Z0luc1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiAiIjsgfQorCisgICAgLy8gVGV4
dCBzZWxlY3Rpb24gY29sb3JzLgorICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlU2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlU2VsZWN0
aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgQ29sb3IgaW5hY3Rp
dmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBDb2xv
ciBpbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKKworICAgIC8v
IExpc3QgYm94IHNlbGVjdGlvbiBjb2xvcnMKKyAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZUxpc3RC
b3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBDb2xv
ciBhY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9y
ZWdyb3VuZENvbG9yKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBDb2xvciBhY3RpdmVUZXh0
U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBDb2xvciBpbmFj
dGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwg
Q29sb3IgZm9jdXNSaW5nQ29sb3IoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIENvbG9yIHRh
cEhpZ2hsaWdodENvbG9yKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHBhaW50QnV0
dG9uKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0JiwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMm
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50VGV4dEZpZWxkKENhbnZhcyosIFN0
YXRlLCBjb25zdCBSZWN0JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgU2l6ZSBnZXRDaGVja2Jv
eFNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q2hlY2tib3goQ2FudmFz
KiwgU3RhdGUsIGNvbnN0IFJlY3QmLCBjb25zdCBCdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIFNpemUgZ2V0UmFkaW9TaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBwYWludFJhZGlvKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0JiwgY29uc3QgQnV0
dG9uRXh0cmFQYXJhbXMmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50VGV4dEFy
ZWEoQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGdldE1lbnVMaXN0UGFkZGluZyhpbnQmIHBhZGRpbmdUb3AsIGludCYgcGFkZGluZ0xlZnQs
IGludCYgcGFkZGluZ0JvdHRvbSwgaW50JiBwYWRkaW5nUmlnaHQpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRNZW51TGlzdChDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRQcm9ncmVzc0JhcihDYW52YXMqLCBTdGF0
ZSwgY29uc3QgUmVjdCYsIGNvbnN0IFByb2dyZXNzQmFyRXh0cmFQYXJhbXMmKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBkb3VibGUgZ2V0QW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVz
c0JhcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBnZXRBbmltYXRpb25EdXJhdGlv
bkZvclByb2dyZXNzQmFyKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRJbm5lclNw
aW5CdXR0b25QYWRkaW5nKGludCYgcGFkZGluZ1RvcCwgaW50JiBwYWRkaW5nTGVmdCwgaW50JiBw
YWRkaW5nQm90dG9tLCBpbnQmIHBhZGRpbmdSaWdodCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBwYWludElubmVyU3BpbkJ1dHRvbihDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYsIGNv
bnN0IElubmVyU3BpbkJ1dHRvbkV4dHJhUGFyYW1zJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBwYWludE1ldGVyKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0JiwgY29uc3QgTWV0ZXJF
eHRyYVBhcmFtcyYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTbGlkZXJUcmFj
ayhDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRTbGlkZXJUaHVtYihDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYpIGNvbnN0ID0g
MDsKKworICAgIC8vIE1lZGlhUGxheWVyIChhdWRpbyBhbmQgdmlkZW8gZWxlbWVudHMpCisgICAg
dmlydHVhbCB2b2lkIHBhaW50TWVkaWFQbGF5QnV0dG9uKENhbnZhcyosIE1lZGlhUGxheWVyU3Rh
dGUsIGNvbnN0IFJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50TWVkaWFN
dXRlQnV0dG9uKENhbnZhcyosIE1lZGlhUGxheWVyU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50TWVkaWFTZWVrQmFja0J1dHRvbihDYW52YXMqLCBj
b25zdCBSZWN0JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludE1lZGlhU2Vla0Zv
cndhcmRCdXR0b24oQ2FudmFzKiwgY29uc3QgUmVjdCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRNZWRpYVJld2luZEJ1dHRvbihDYW52YXMqLCBjb25zdCBSZWN0JikgY29uc3Qg
PSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgTml4CisKKyNlbmRpZiAvLyBOaXhfVGhlbWVFbmdp
bmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9zcmMvRGVmYXVsdFdlYlRoZW1l
RW5naW5lLmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL0RlZmF1bHRXZWJUaGVtZUVuZ2lu
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOTc5ZTlmMThhMjQ1ZWYzZDczZDYzMDkyNGIxOGNkOWU5OGUyN2Fk
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL0RlZmF1bHRXZWJU
aGVtZUVuZ2luZS5jcHAKQEAgLTAsMCArMSw0ODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiRGVmYXVsdFdlYlRoZW1lRW5naW5l
LmgiCisKKyNpbmNsdWRlICJwdWJsaWMvQ29sb3IuaCIKKyNpbmNsdWRlICJwdWJsaWMvUmVjdC5o
IgorI2luY2x1ZGUgInB1YmxpYy9TaXplLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1
ZGUgPGNhaXJvL2NhaXJvLmg+CisjaW5jbHVkZSA8Y21hdGg+CisKK2NvbnN0IGRvdWJsZSBCR0Nv
bG9yMSA9IDB4RjYgLyAyNTUuMDsKK2NvbnN0IGRvdWJsZSBCR0NvbG9yMiA9IDB4REUgLyAyNTUu
MDsKK2NvbnN0IGRvdWJsZSBCb3JkZXJDb2xvciA9IDB4QTQgLyAyNTUuMDsKK2NvbnN0IGRvdWJs
ZSBCb3JkZXJPbkhvdmVyQ29sb3IgPSAweDdBIC8gMjU1LjA7Citjb25zdCBkb3VibGUgQ2hlY2tD
b2xvciA9IDB4NjYgLyAyNTUuMDsKK2NvbnN0IGRvdWJsZSBUZXh0RmllbGREYXJrQm9yZGVyQ29s
b3IgPSAweDlBIC8gMjU1LjA7Citjb25zdCBkb3VibGUgVGV4dEZpZWxkTGlnaHRCb3JkZXJDb2xv
ciA9IDB4RUUgLyAyNTUuMDsKKworY29uc3QgaW50IE1lbnVMaXN0Qm9yZGVyID0gNTsKK2NvbnN0
IGludCBNZW51TGlzdEFycm93U2l6ZSA9IDY7CisKK2NvbnN0IGludCBJbm5lclNwaW5CdXR0b25C
b3JkZXIgPSAzOworY29uc3QgaW50IElubmVyU3BpbkJ1dHRvbkFycm93U2l6ZSA9IDI7CisKK2Nv
bnN0IE5peDo6Q29sb3IgVGFwSGlnaExpZ2h0Q29sb3IoMHg2NjAwMDAwMCk7CisKK25hbWVzcGFj
ZSBOaXggeworCitDb2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmFjdGl2ZVNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9yOjpibHVlOworfQorCitD
b2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xv
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9yOjp3aGl0ZTsKK30KKworQ29sb3IgRGVmYXVs
dFdlYlRoZW1lRW5naW5lOjppbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIENvbG9yKDE3NiwgMTc2LCAxNzYpOworfQorCitDb2xvciBEZWZhdWx0
V2ViVGhlbWVFbmdpbmU6OmluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gQ29sb3I6OmJsYWNrOworfQorCitDb2xvciBEZWZhdWx0V2ViVGhlbWVF
bmdpbmU6OmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAorewor
ICAgIHJldHVybiBhY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsKK30KKworQ29sb3Ig
RGVmYXVsdFdlYlRoZW1lRW5naW5lOjphY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENv
bG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KCk7Cit9CisKK0NvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6aW5hY3RpdmVMaXN0Qm94U2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5hY3RpdmVTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsKK30KKworQ29sb3IgRGVmYXVsdFdlYlRoZW1lRW5naW5l
OjppbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAg
IHJldHVybiBpbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpOworfQorCitDb2xvciBE
ZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIENvbG9yKDI1NSwgMTUwLCA1MCk7IC8vIE9yYW5nZS4KK30KKwor
Q29sb3IgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjppbmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRD
b2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9yKDI1NSwgMjU1LCAwKTsgLy8gWWVsbG93
LgorfQorCitDb2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmZvY3VzUmluZ0NvbG9yKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gQ29sb3I6OmJsYWNrOworfQorCitDb2xvciBEZWZhdWx0V2ViVGhl
bWVFbmdpbmU6OnRhcEhpZ2hsaWdodENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gVGFwSGln
aExpZ2h0Q29sb3I7Cit9CisKK3N0YXRpYyB2b2lkIGdyYWRpZW50RmlsbChjYWlyb190KiBjYWly
bywgZG91YmxlIHlTdGFydCwgZG91YmxlIHlMZW5ndGgsIGJvb2wgaW52ZXJ0ZWQgPSBmYWxzZSkK
K3sKKyAgICBkb3VibGUgZ3JhZFN0YXJ0Q29sb3IgPSBCR0NvbG9yMTsKKyAgICBkb3VibGUgZ3Jh
ZEVuZENvbG9yID0gQkdDb2xvcjI7CisgICAgaWYgKGludmVydGVkKQorICAgICAgICBzdGQ6OnN3
YXAoZ3JhZFN0YXJ0Q29sb3IsIGdyYWRFbmRDb2xvcik7CisKKyAgICBjYWlyb19wYXR0ZXJuX3Qq
IGdyYWRpZW50ID0gY2Fpcm9fcGF0dGVybl9jcmVhdGVfbGluZWFyKDAsIHlTdGFydCwgMCwgeVN0
YXJ0ICsgeUxlbmd0aCk7CisgICAgY2Fpcm9fcGF0dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2IoZ3Jh
ZGllbnQsIDAsIGdyYWRTdGFydENvbG9yLCBncmFkU3RhcnRDb2xvciwgZ3JhZFN0YXJ0Q29sb3Ip
OworICAgIGNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiKGdyYWRpZW50LCAxLCBncmFk
RW5kQ29sb3IsIGdyYWRFbmRDb2xvciwgZ3JhZEVuZENvbG9yKTsKKyAgICBjYWlyb19zZXRfc291
cmNlKGNhaXJvLCBncmFkaWVudCk7CisgICAgY2Fpcm9fZmlsbChjYWlybyk7CisgICAgY2Fpcm9f
cGF0dGVybl9kZXN0cm95KGdyYWRpZW50KTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBCb3JkZXIo
Y2Fpcm9fdCAqIGNhaXJvLCBUaGVtZUVuZ2luZTo6U3RhdGUgc3RhdGUpCit7CisgICAgZG91Ymxl
IGJvcmRlckNvbG9yID0gc3RhdGUgPT0gVGhlbWVFbmdpbmU6OlN0YXRlSG92ZXIgPyBCb3JkZXJP
bkhvdmVyQ29sb3IgOiBCb3JkZXJDb2xvcjsKKyAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYWly
bywgYm9yZGVyQ29sb3IsIGJvcmRlckNvbG9yLCBib3JkZXJDb2xvcik7CisgICAgY2Fpcm9fc2V0
X2xpbmVfd2lkdGgoY2Fpcm8sIDEpOworfQorCit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6
cGFpbnRCdXR0b24oQ2FudmFzKiBjYW52YXMsIFN0YXRlIHN0YXRlLCBjb25zdCBSZWN0JiByZWN0
LCBjb25zdCBCdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52
YXMpOworICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3RhdGUpOworICAgIC8vIENhaXJvIHVzZXMg
YSBjb29yZGluYXRlIHN5c3RlbSBub3QgYmFzZWQgb24gcGl4ZWwgY29vcmRpbmF0ZXMsIHNvCisg
ICAgLy8gd2UgbmVlZCB0byBhZGQgIDAuNSB0byB4IGFuZCB5IGNvb3JkIG9yIHRoZSBsaW5lIHdp
bGwgc3RheSBiZXR3ZWVuCisgICAgLy8gdHdvIHBpeGVscyBpbnN0ZWFkIG9mIGluIHRoZSBtaWRk
bGUgb2YgYSBwaXhlbC4KKyAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LnggKyAwLjUs
IHJlY3QueSArIDAuNSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOworICAgIGNhaXJvX3N0cm9r
ZV9wcmVzZXJ2ZShjYW52YXMpOworCisgICAgZ3JhZGllbnRGaWxsKGNhbnZhcywgcmVjdC55LCBy
ZWN0LmhlaWdodCwgc3RhdGUgPT0gU3RhdGVQcmVzc2VkKTsKKyAgICBjYWlyb19yZXN0b3JlKGNh
bnZhcyk7Cit9CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludFRleHRGaWVsZChD
YW52YXMqIGNhbnZhcywgU3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgY2Fp
cm9fc2F2ZShjYW52YXMpOworCisgICAgY29uc3QgZG91YmxlIGxpbmVXaWR0aCA9IDI7CisgICAg
Y29uc3QgZG91YmxlIGNvcnJlY3Rpb24gPSBsaW5lV2lkdGggLyAyLjA7CisKKyAgICBjYWlyb19z
ZXRfbGluZV93aWR0aChjYW52YXMsIGxpbmVXaWR0aCk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9y
Z2IoY2FudmFzLCBUZXh0RmllbGREYXJrQm9yZGVyQ29sb3IsIFRleHRGaWVsZERhcmtCb3JkZXJD
b2xvciwgVGV4dEZpZWxkRGFya0JvcmRlckNvbG9yKTsKKyAgICBjYWlyb19tb3ZlX3RvKGNhbnZh
cywgcmVjdC54ICsgY29ycmVjdGlvbiwgcmVjdC55ICsgY29ycmVjdGlvbiArIHJlY3QuaGVpZ2h0
KTsKKyAgICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIDAsIC1yZWN0LmhlaWdodCk7CisgICAg
Y2Fpcm9fcmVsX2xpbmVfdG8oY2FudmFzLCByZWN0LndpZHRoLCAwKTsKKyAgICBjYWlyb19zdHJv
a2UoY2FudmFzKTsKKworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhbnZhcywgVGV4dEZpZWxk
TGlnaHRCb3JkZXJDb2xvciwgVGV4dEZpZWxkTGlnaHRCb3JkZXJDb2xvciwgVGV4dEZpZWxkTGln
aHRCb3JkZXJDb2xvcik7CisgICAgY2Fpcm9fbW92ZV90byhjYW52YXMsIHJlY3QueCArIGNvcnJl
Y3Rpb24gKyByZWN0LndpZHRoLCByZWN0LnkgKyBjb3JyZWN0aW9uKTsKKyAgICBjYWlyb19yZWxf
bGluZV90byhjYW52YXMsIDAsIHJlY3QuaGVpZ2h0KTsKKyAgICBjYWlyb19yZWxfbGluZV90byhj
YW52YXMsIC1yZWN0LndpZHRoLCAwKTsKKyAgICBjYWlyb19zdHJva2UoY2FudmFzKTsKKworICAg
IGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsKK30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6
OnBhaW50VGV4dEFyZWEoQ2FudmFzKiBjYW52YXMsIFN0YXRlIHN0YXRlLCBjb25zdCBSZWN0JiBy
ZWN0KSBjb25zdAoreworICAgIHBhaW50VGV4dEZpZWxkKGNhbnZhcywgc3RhdGUsIHJlY3QpOwor
fQorCitTaXplIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6Z2V0Q2hlY2tib3hTaXplKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gU2l6ZSgxMywgMTMpOworfQorCit2b2lkIERlZmF1bHRXZWJUaGVtZUVu
Z2luZTo6cGFpbnRDaGVja2JveChDYW52YXMqIGNhbnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFJl
Y3QmIHJlY3QsIGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1zJiBwYXJhbSkgY29uc3QKK3sKKyAgICBj
YWlyb19zYXZlKGNhbnZhcyk7CisgICAgc2V0dXBCb3JkZXIoY2FudmFzLCBzdGF0ZSk7CisgICAg
Y2Fpcm9fcmVjdGFuZ2xlKGNhbnZhcywgcmVjdC54ICsgMC41LCByZWN0LnkgKyAwLjUsIHJlY3Qu
d2lkdGgsIHJlY3QuaGVpZ2h0KTsKKyAgICBjYWlyb19zdHJva2VfcHJlc2VydmUoY2FudmFzKTsK
KworICAgIGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQsIHN0YXRlID09
IFN0YXRlUHJlc3NlZCk7CisKKyAgICBpZiAocGFyYW0uY2hlY2tlZCkgeworICAgICAgICBjb25z
dCBkb3VibGUgYm9yZGVyID0gMzsKKyAgICAgICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGgoY2FudmFz
LCAyKTsKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2FudmFzLCBDaGVja0NvbG9yLCBD
aGVja0NvbG9yLCBDaGVja0NvbG9yKTsKKyAgICAgICAgY2Fpcm9fbW92ZV90byhjYW52YXMsIHJl
Y3QueCArIDAuNSArIGJvcmRlciwgcmVjdC55ICsgMC41ICsgcmVjdC5oZWlnaHQgLSBib3JkZXIp
OworICAgICAgICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIHJlY3Qud2lkdGggLSBib3JkZXIg
KiAyLCAtcmVjdC5oZWlnaHQgKyBib3JkZXIgKiAyKTsKKyAgICAgICAgY2Fpcm9fbW92ZV90byhj
YW52YXMsIHJlY3QueCArIDAuNSArIGJvcmRlciwgcmVjdC55ICsgMC41ICsgYm9yZGVyKTsKKyAg
ICAgICAgY2Fpcm9fcmVsX2xpbmVfdG8oY2FudmFzLCByZWN0LndpZHRoIC0gYm9yZGVyICogMiwg
cmVjdC5oZWlnaHQgLSBib3JkZXIgKiAyKTsKKyAgICAgICAgY2Fpcm9fc3Ryb2tlKGNhbnZhcyk7
CisgICAgfQorCisgICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOworfQorCitTaXplIERlZmF1bHRX
ZWJUaGVtZUVuZ2luZTo6Z2V0UmFkaW9TaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gU2l6ZSgx
MywgMTMpOworfQorCit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRSYWRpbyhDYW52
YXMqIGNhbnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QsIGNvbnN0IEJ1dHRvbkV4
dHJhUGFyYW1zJiBwYXJhbSkgY29uc3QKK3sKKyAgICBjYWlyb19zYXZlKGNhbnZhcyk7CisgICAg
c2V0dXBCb3JkZXIoY2FudmFzLCBzdGF0ZSk7CisgICAgY2Fpcm9fYXJjKGNhbnZhcywgcmVjdC54
ICsgcmVjdC53aWR0aCAvIDIuMCwgcmVjdC55ICsgcmVjdC5oZWlnaHQgLyAyLjAsIHJlY3Qud2lk
dGggLyAyLjAsIDAsIDIgKiBNX1BJKTsKKyAgICBjYWlyb19zdHJva2VfcHJlc2VydmUoY2FudmFz
KTsKKworICAgIGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQpOworCisg
ICAgaWYgKHBhcmFtLmNoZWNrZWQpIHsKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2Fu
dmFzLCBDaGVja0NvbG9yLCBDaGVja0NvbG9yLCBDaGVja0NvbG9yKTsKKyAgICAgICAgY2Fpcm9f
YXJjKGNhbnZhcywgcmVjdC54ICsgcmVjdC53aWR0aCAvIDIuMCwgcmVjdC55ICsgcmVjdC5oZWln
aHQgLyAyLjAsIHJlY3Qud2lkdGggLyA0LjAsIDAsIDIgKiBNX1BJKTsKKyAgICAgICAgY2Fpcm9f
ZmlsbChjYW52YXMpOworICAgIH0KKyAgICBjYWlyb19yZXN0b3JlKGNhbnZhcyk7Cit9CisKK3Zv
aWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpnZXRNZW51TGlzdFBhZGRpbmcoaW50JiBwYWRkaW5n
VG9wLCBpbnQmIHBhZGRpbmdMZWZ0LCBpbnQmIHBhZGRpbmdCb3R0b20sIGludCYgcGFkZGluZ1Jp
Z2h0KSBjb25zdAoreworICAgIHBhZGRpbmdUb3AgPSBNZW51TGlzdEJvcmRlcjsKKyAgICBwYWRk
aW5nTGVmdCA9IE1lbnVMaXN0Qm9yZGVyOworICAgIHBhZGRpbmdCb3R0b20gPSBNZW51TGlzdEJv
cmRlcjsKKyAgICBwYWRkaW5nUmlnaHQgPSAyICogTWVudUxpc3RCb3JkZXIgKyBNZW51TGlzdEFy
cm93U2l6ZTsKK30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50TWVudUxpc3Qo
Q2FudmFzKiBjYW52YXMsIFN0YXRlIHN0YXRlLCBjb25zdCBSZWN0JiByZWN0KSBjb25zdAorewor
ICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKKyAgICBzZXR1cEJvcmRlcihjYW52YXMsIHN0YXRlKTsK
KyAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LnggKyAwLjUsIHJlY3QueSArIDAuNSwg
cmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOworICAgIGNhaXJvX3N0cm9rZV9wcmVzZXJ2ZShjYW52
YXMpOworCisgICAgZ3JhZGllbnRGaWxsKGNhbnZhcywgcmVjdC55LCByZWN0LmhlaWdodCwgc3Rh
dGUgPT0gU3RhdGVQcmVzc2VkKTsKKworICAgIGNhaXJvX21vdmVfdG8oY2FudmFzLCByZWN0Lngg
KyByZWN0LndpZHRoIC0gTWVudUxpc3RBcnJvd1NpemUgLSBNZW51TGlzdEJvcmRlciwgcmVjdC55
ICsgMSArIHJlY3QuaGVpZ2h0IC8gMiAtIE1lbnVMaXN0QXJyb3dTaXplIC8gMik7CisgICAgY2Fp
cm9fc2V0X3NvdXJjZV9yZ2IoY2FudmFzLCBDaGVja0NvbG9yLCBDaGVja0NvbG9yLCBDaGVja0Nv
bG9yKTsKKyAgICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIE1lbnVMaXN0QXJyb3dTaXplLCAw
KTsKKyAgICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIC1NZW51TGlzdEFycm93U2l6ZSAvIDIs
IE1lbnVMaXN0QXJyb3dTaXplKTsKKyAgICBjYWlyb19jbG9zZV9wYXRoKGNhbnZhcyk7CisgICAg
Y2Fpcm9fZmlsbChjYW52YXMpOworCisgICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOworfQorCit2
b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRQcm9ncmVzc0JhcihDYW52YXMqIGNhbnZh
cywgU3RhdGUgc3RhdGUsIGNvbnN0IFJlY3QmIHJlY3QsIGNvbnN0IFByb2dyZXNzQmFyRXh0cmFQ
YXJhbXMmIHBhcmFtcykgY29uc3QKK3sKKyAgICBjYWlyb19zYXZlKGNhbnZhcyk7CisKKyAgICBp
ZiAocGFyYW1zLmlzRGV0ZXJtaW5hdGUpIHsKKyAgICAgICAgLy8gQmFja2dyb3VuZAorICAgICAg
ICBzZXR1cEJvcmRlcihjYW52YXMsIHN0YXRlKTsKKyAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNh
bnZhcywgcmVjdC54LCByZWN0LnksIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTsKKyAgICAgICAg
Y2Fpcm9fZmlsbChjYW52YXMpOworICAgICAgICAvLyBQcm9ncmVzcworICAgICAgICBjYWlyb19y
ZWN0YW5nbGUoY2FudmFzLCByZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCAqIHBhcmFtcy5wb3Np
dGlvbiwgcmVjdC5oZWlnaHQpOworICAgICAgICBncmFkaWVudEZpbGwoY2FudmFzLCByZWN0Lnks
IHJlY3QuaGVpZ2h0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBjYWlyb19yZWN0YW5nbGUoY2Fu
dmFzLCByZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOworICAgICAgICBn
cmFkaWVudEZpbGwoY2FudmFzLCByZWN0LnksIHJlY3QuaGVpZ2h0LCB0cnVlKTsKKyAgICB9CisK
KyAgICBjYWlyb19yZXN0b3JlKGNhbnZhcyk7Cit9CisKK3N0YXRpYyBjb25zdCBpbnQgcHJvZ3Jl
c3NBbmltYXRpb25GcmFtZXMgPSAxMDsKK3N0YXRpYyBjb25zdCBkb3VibGUgcHJvZ3Jlc3NBbmlt
YXRpb25JbnRlcnZhbCA9IDAuMTI1OworCitkb3VibGUgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpn
ZXRBbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gcHJvZ3Jlc3NBbmltYXRpb25JbnRlcnZhbDsKK30KKworZG91YmxlIERlZmF1bHRXZWJU
aGVtZUVuZ2luZTo6Z2V0QW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHByb2dyZXNzQW5pbWF0aW9uSW50ZXJ2YWwgKiBwcm9ncmVzc0FuaW1hdGlv
bkZyYW1lcyAqIDI7IC8vICIyIiBmb3IgYmFjayBhbmQgZm9ydGguCit9CisKK3ZvaWQgRGVmYXVs
dFdlYlRoZW1lRW5naW5lOjpnZXRJbm5lclNwaW5CdXR0b25QYWRkaW5nKGludCYgcGFkZGluZ1Rv
cCwgaW50JiBwYWRkaW5nTGVmdCwgaW50JiBwYWRkaW5nQm90dG9tLCBpbnQmIHBhZGRpbmdSaWdo
dCkgY29uc3QKK3sKKyAgICBwYWRkaW5nVG9wID0gSW5uZXJTcGluQnV0dG9uQm9yZGVyOworICAg
IHBhZGRpbmdMZWZ0ID0gSW5uZXJTcGluQnV0dG9uQm9yZGVyOworICAgIHBhZGRpbmdCb3R0b20g
PSBJbm5lclNwaW5CdXR0b25Cb3JkZXI7CisgICAgcGFkZGluZ1JpZ2h0ID0gMiAqIElubmVyU3Bp
bkJ1dHRvbkJvcmRlciArIElubmVyU3BpbkJ1dHRvbkFycm93U2l6ZTsKK30KKwordm9pZCBEZWZh
dWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50SW5uZXJTcGluQnV0dG9uKENhbnZhcyogY2FudmFzLCBT
dGF0ZSBzdGF0ZSwgY29uc3QgUmVjdCYgcmVjdCwgY29uc3QgSW5uZXJTcGluQnV0dG9uRXh0cmFQ
YXJhbXMmIHBhcmFtKSBjb25zdAoreworICAgIGRvdWJsZSByZWN0SGFsZkhlaWdodCA9IHJlY3Qu
aGVpZ2h0IC8gMjsKKworICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKKyAgICBzZXR1cEJvcmRlcihj
YW52YXMsIHN0YXRlKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LnggKyAwLjUs
IHJlY3QueSArIDEuNSwgcmVjdC53aWR0aCwgcmVjdEhhbGZIZWlnaHQpOworICAgIGNhaXJvX3N0
cm9rZV9wcmVzZXJ2ZShjYW52YXMpOworCisgICAgZ3JhZGllbnRGaWxsKGNhbnZhcywgcmVjdC55
LCByZWN0SGFsZkhlaWdodCwgc3RhdGUgPT0gU3RhdGVQcmVzc2VkICYmIHBhcmFtLnNwaW5VcCk7
CisKKyAgICBzZXR1cEJvcmRlcihjYW52YXMsIHN0YXRlKTsKKyAgICBjYWlyb19yZWN0YW5nbGUo
Y2FudmFzLCByZWN0LnggKyAwLjUsIHJlY3QueSArIDAuNSArIHJlY3RIYWxmSGVpZ2h0LCByZWN0
LndpZHRoLCByZWN0SGFsZkhlaWdodCk7CisgICAgY2Fpcm9fc3Ryb2tlX3ByZXNlcnZlKGNhbnZh
cyk7CisKKyAgICBncmFkaWVudEZpbGwoY2FudmFzLCByZWN0LnkgKyByZWN0SGFsZkhlaWdodCwg
cmVjdEhhbGZIZWlnaHQsIHN0YXRlID09IFN0YXRlUHJlc3NlZCAmJiAhcGFyYW0uc3BpblVwKTsK
KworICAgIGNhaXJvX21vdmVfdG8oY2FudmFzLCByZWN0LnggKyByZWN0LndpZHRoIC0gSW5uZXJT
cGluQnV0dG9uQXJyb3dTaXplIC0gSW5uZXJTcGluQnV0dG9uQm9yZGVyICogMiwgcmVjdC55ICsg
cmVjdEhhbGZIZWlnaHQgKyByZWN0LmhlaWdodCAvIDQgLSBJbm5lclNwaW5CdXR0b25BcnJvd1Np
emUgKyAxLjUpOworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhbnZhcywgQ2hlY2tDb2xvciwg
Q2hlY2tDb2xvciwgQ2hlY2tDb2xvcik7CisgICAgY2Fpcm9fcmVsX2xpbmVfdG8oY2FudmFzLCBN
ZW51TGlzdEFycm93U2l6ZSwgMCk7CisgICAgY2Fpcm9fcmVsX2xpbmVfdG8oY2FudmFzLCAtTWVu
dUxpc3RBcnJvd1NpemUgLyAyLCBNZW51TGlzdEFycm93U2l6ZSk7CisgICAgY2Fpcm9fY2xvc2Vf
cGF0aChjYW52YXMpOworCisgICAgY2Fpcm9fbW92ZV90byhjYW52YXMsIHJlY3QueCArIHJlY3Qu
d2lkdGggLSBJbm5lclNwaW5CdXR0b25BcnJvd1NpemUgLSBJbm5lclNwaW5CdXR0b25Cb3JkZXIg
KiAyLCByZWN0LnkgKyByZWN0LmhlaWdodCAvIDQgKyBJbm5lclNwaW5CdXR0b25BcnJvd1NpemUp
OworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhbnZhcywgQ2hlY2tDb2xvciwgQ2hlY2tDb2xv
ciwgQ2hlY2tDb2xvcik7CisgICAgY2Fpcm9fcmVsX2xpbmVfdG8oY2FudmFzLCBNZW51TGlzdEFy
cm93U2l6ZSwgMCk7CisgICAgY2Fpcm9fcmVsX2xpbmVfdG8oY2FudmFzLCAtTWVudUxpc3RBcnJv
d1NpemUgLyAyLCAtTWVudUxpc3RBcnJvd1NpemUpOworICAgIGNhaXJvX2Nsb3NlX3BhdGgoY2Fu
dmFzKTsKKworICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsKK30KKwordm9pZCBEZWZhdWx0V2ViVGhl
bWVFbmdpbmU6OnBhaW50TWV0ZXIoQ2FudmFzKiBjYW52YXMsIFN0YXRlIHN0YXRlLCBjb25zdCBS
ZWN0JiByZWN0LCBjb25zdCBNZXRlckV4dHJhUGFyYW1zJiBwYXJhbXMpIGNvbnN0Cit7CisgICAg
Y2Fpcm9fc2F2ZShjYW52YXMpOworCisgICAgLy8gQmFja2dyb3VuZC4KKyAgICBzZXR1cEJvcmRl
cihjYW52YXMsIHN0YXRlKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LngsIHJl
Y3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOworICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsK
KyAgICAvLyBNZXRlci4KKyAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LngsIHJlY3Qu
eSwgcmVjdC53aWR0aCAqIHBhcmFtcy52YWx1ZVJhdGlvKCksIHJlY3QuaGVpZ2h0KTsKKyAgICBn
cmFkaWVudEZpbGwoY2FudmFzLCByZWN0LnksIHJlY3QuaGVpZ2h0KTsKKworICAgIGNhaXJvX3Jl
c3RvcmUoY2FudmFzKTsKK30KKworY29uc3QgaW50IFNsaWRlclRyYWNrSGVpZ2h0ID0gNjsKKwor
dm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50U2xpZGVyVHJhY2soQ2FudmFzKiBjYW52
YXMsIFN0YXRlLCBjb25zdCBSZWN0JiByZWN0KSBjb25zdAoreworICAgIGNhaXJvX3NhdmUoY2Fu
dmFzKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LngsIHJlY3QueSArIChyZWN0
LmhlaWdodCAtIFNsaWRlclRyYWNrSGVpZ2h0KSAvIDIuMCwgcmVjdC53aWR0aCwgU2xpZGVyVHJh
Y2tIZWlnaHQpOworICAgIGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQs
IHRydWUpOworICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsKK30KKwordm9pZCBEZWZhdWx0V2Vi
VGhlbWVFbmdpbmU6OnBhaW50U2xpZGVyVGh1bWIoQ2FudmFzKiBjYW52YXMsIFN0YXRlIHN0YXRl
LCBjb25zdCBSZWN0JiByZWN0KSBjb25zdAoreworICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKKyAg
ICBzZXR1cEJvcmRlcihjYW52YXMsIHN0YXRlKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFz
LCByZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOworICAgIGNhaXJvX3N0
cm9rZV9wcmVzZXJ2ZShjYW52YXMpOworICAgIGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwg
cmVjdC5oZWlnaHQsIHN0YXRlID09IFN0YXRlUHJlc3NlZCk7CisgICAgY2Fpcm9fcmVzdG9yZShj
YW52YXMpOworfQorCit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRNZWRpYVBsYXlC
dXR0b24oQ2FudmFzKiBjYW52YXMsIE1lZGlhUGxheWVyU3RhdGUgc3RhdGUsIGNvbnN0IFJlY3Qm
IHJlY3QpIGNvbnN0Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOworICAgIGNhaXJvX3NldF9z
b3VyY2VfcmdiKGNhbnZhcywgMSwgMSwgMSk7CisgICAgaWYgKHN0YXRlID09IFN0YXRlUGF1c2Vk
KSB7CisgICAgICAgIGNhaXJvX21vdmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAq
IDAuMyksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuMjUpKTsKKyAgICAgICAgY2Fpcm9fbGlu
ZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC43NSksIHJlY3QueSArIChyZWN0
LmhlaWdodCAqIDAuNSkpOworICAgICAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsg
KHJlY3Qud2lkdGggKiAwLjMpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjc1KSk7CisgICAg
ICAgIGNhaXJvX2Nsb3NlX3BhdGgoY2FudmFzKTsKKyAgICAgICAgY2Fpcm9fZmlsbChjYW52YXMp
OworICAgIH0gZWxzZSB7IC8vIElmIHN0YXRlIGlzIFN0YXRlUGxheWluZy4KKyAgICAgICAgY2Fp
cm9fcmVjdGFuZ2xlKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjMpLCByZWN0Lnkg
KyAocmVjdC5oZWlnaHQgKiAwLjI1KSwgKHJlY3Qud2lkdGggKiAwLjE1KSwgKHJlY3QuaGVpZ2h0
ICogMC41KSk7CisgICAgICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsKKyAgICAgICAgY2Fpcm9fcmVj
dGFuZ2xlKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjU1KSwgcmVjdC55ICsgKHJl
Y3QuaGVpZ2h0ICogMC4yNSksIChyZWN0LndpZHRoICogMC4xNSksIChyZWN0LmhlaWdodCAqIDAu
NSkpOworICAgICAgICBjYWlyb19maWxsKGNhbnZhcyk7CisgICAgfQorICAgIGNhaXJvX3Jlc3Rv
cmUoY2FudmFzKTsKK30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50TWVkaWFN
dXRlQnV0dG9uKENhbnZhcyogY2FudmFzLCBNZWRpYVBsYXllclN0YXRlIHN0YXRlLCBjb25zdCBS
ZWN0JiByZWN0KSBjb25zdAoreworICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKKyAgICBpZiAoc3Rh
dGUgPT0gU3RhdGVNdXRlZCkgeworICAgICAgICBjYWlyb19zZXRfbGluZV93aWR0aChjYW52YXMs
IDEpOworICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMsIDEzOSwgMCwgMCk7CisK
KyAgICAgICAgY2Fpcm9fbW92ZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC41
OSksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNjcpKTsKKyAgICAgICAgY2Fpcm9fbGluZV90
byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC44NyksIHJlY3QueSArIChyZWN0Lmhl
aWdodCAqIDAuMzQpKTsKKyAgICAgICAgY2Fpcm9fc3Ryb2tlKGNhbnZhcyk7CisKKyAgICAgICAg
Y2Fpcm9fbW92ZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC44NyksIHJlY3Qu
eSArIChyZWN0LmhlaWdodCAqIDAuNjcpKTsKKyAgICAgICAgY2Fpcm9fbGluZV90byhjYW52YXMs
IHJlY3QueCArIChyZWN0LndpZHRoICogMC41OSksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAu
MzQpKTsKKyAgICAgICAgY2Fpcm9fc3Ryb2tlKGNhbnZhcyk7CisgICAgfSBlbHNlIHsgLy8gSWYg
c3RhdGUgaXMgU3RhdGVOb3RNdXRlZAorICAgICAgICBjYWlyb19zZXRfbGluZV93aWR0aChjYW52
YXMsIDUpOworICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMsIDEsIDEsIDEpOwor
CisgICAgICAgIGNhaXJvX2FyYyhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC4zKSwg
cmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC41KSwgcmVjdC53aWR0aCAqIDAuMzQsIDExICogKE1f
UEkgLyA2KSwgTV9QSSAvIDYpOworICAgICAgICBjYWlyb19maWxsKGNhbnZhcyk7CisgICAgICAg
IGNhaXJvX2FyYyhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC4zKSwgcmVjdC55ICsg
KHJlY3QuaGVpZ2h0ICogMC41KSwgcmVjdC53aWR0aCAqIDAuNDUsIDExICogKE1fUEkgLyA2KSwg
TV9QSSAvIDYpOworICAgICAgICBjYWlyb19maWxsKGNhbnZhcyk7CisgICAgICAgIGNhaXJvX2Fy
YyhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC4zKSwgcmVjdC55ICsgKHJlY3QuaGVp
Z2h0ICogMC41KSwgcmVjdC53aWR0aCAqIDAuNTcsIDExICogKE1fUEkgLyA2KSwgTV9QSSAvIDYp
OworICAgICAgICBjYWlyb19maWxsKGNhbnZhcyk7CisgICAgfQorCisgICAgLy8gU3BlYWtlcgor
ICAgIGNhaXJvX21vdmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuNTIpLCBy
ZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjE4KSk7CisgICAgY2Fpcm9fbGluZV90byhjYW52YXMs
IHJlY3QueCArIChyZWN0LndpZHRoICogMC4yOSksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAu
MzgpKTsKKyAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAw
LjA4KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC4zOCkpOworICAgIGNhaXJvX2xpbmVfdG8o
Y2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuMDgpLCByZWN0LnkgKyAocmVjdC5oZWln
aHQgKiAwLjYyKSk7CisgICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0Lndp
ZHRoICogMC4yOSksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNjIpKTsKKyAgICBjYWlyb19s
aW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjUyKSwgcmVjdC55ICsgKHJl
Y3QuaGVpZ2h0ICogMC44MikpOworICAgIGNhaXJvX2Nsb3NlX3BhdGgoY2FudmFzKTsKKyAgICBj
YWlyb19maWxsKGNhbnZhcyk7CisKKyAgICBjYWlyb19yZXN0b3JlKGNhbnZhcyk7Cit9CisKK3Zv
aWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oQ2FudmFz
KiBjYW52YXMsIGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52
YXMpOworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhbnZhcywgMSwgMSwgMSk7CisgICAgY2Fp
cm9fbW92ZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC45MCksIHJlY3QueSAr
IChyZWN0LmhlaWdodCAqIDAuNzApKTsKKyAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54
ICsgKHJlY3Qud2lkdGggKiAwLjU4KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC41MSkpOwor
ICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuNTgpLCBy
ZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjcwKSk7CisKKyAgICBjYWlyb19saW5lX3RvKGNhbnZh
cywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjIzKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICog
MC41MSkpOworICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAq
IDAuMjMpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjcwKSk7CisgICAgY2Fpcm9fbGluZV90
byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC4xMSksIHJlY3QueSArIChyZWN0Lmhl
aWdodCAqIDAuNzApKTsKKyAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qu
d2lkdGggKiAwLjExKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC4yOSkpOworICAgIGNhaXJv
X2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuMjMpLCByZWN0LnkgKyAo
cmVjdC5oZWlnaHQgKiAwLjI5KSk7CisgICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCAr
IChyZWN0LndpZHRoICogMC4yMyksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNDgpKTsKKwor
ICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuNTgpLCBy
ZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjI5KSk7CisgICAgY2Fpcm9fbGluZV90byhjYW52YXMs
IHJlY3QueCArIChyZWN0LndpZHRoICogMC41OCksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAu
NDgpKTsKKyAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAw
LjkwKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC4yOSkpOworICAgIGNhaXJvX2Nsb3NlX3Bh
dGgoY2FudmFzKTsKKyAgICBjYWlyb19maWxsKGNhbnZhcyk7CisKKyAgICBjYWlyb19yZXN0b3Jl
KGNhbnZhcyk7Cit9CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpwYWludE1lZGlhU2Vl
a0ZvcndhcmRCdXR0b24oQ2FudmFzKiBjYW52YXMsIGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0Cit7
CisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhbnZh
cywgMSwgMSwgMSk7CisgICAgY2Fpcm9fbW92ZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0Lndp
ZHRoICogMC4xMCksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNzApKTsKKyAgICBjYWlyb19s
aW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjQyKSwgcmVjdC55ICsgKHJl
Y3QuaGVpZ2h0ICogMC41MSkpOworICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAo
cmVjdC53aWR0aCAqIDAuNDIpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjcwKSk7CisKKyAg
ICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjc3KSwgcmVj
dC55ICsgKHJlY3QuaGVpZ2h0ICogMC41MSkpOworICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCBy
ZWN0LnggKyAocmVjdC53aWR0aCAqIDAuNzcpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjcw
KSk7CisgICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC44
OSksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNzApKTsKKyAgICBjYWlyb19saW5lX3RvKGNh
bnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjg5KSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0
ICogMC4yOSkpOworICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0
aCAqIDAuNzcpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjI5KSk7CisgICAgY2Fpcm9fbGlu
ZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC43NyksIHJlY3QueSArIChyZWN0
LmhlaWdodCAqIDAuNDgpKTsKKworICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAo
cmVjdC53aWR0aCAqIDAuNDIpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjI5KSk7CisgICAg
Y2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC40MiksIHJlY3Qu
eSArIChyZWN0LmhlaWdodCAqIDAuNDgpKTsKKyAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVj
dC54ICsgKHJlY3Qud2lkdGggKiAwLjEwKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC4yOSkp
OworICAgIGNhaXJvX2Nsb3NlX3BhdGgoY2FudmFzKTsKKyAgICBjYWlyb19maWxsKGNhbnZhcyk7
CisKKyAgICBjYWlyb19yZXN0b3JlKGNhbnZhcyk7Cit9CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1l
RW5naW5lOjpwYWludE1lZGlhUmV3aW5kQnV0dG9uKENhbnZhcyogY2FudmFzLCBjb25zdCBSZWN0
JiByZWN0KSBjb25zdAoreworICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKKyAgICBjYWlyb19zZXRf
c291cmNlX3JnYihjYW52YXMsIDEsIDEsIDEpOworICAgIGNhaXJvX21vdmVfdG8oY2FudmFzLCBy
ZWN0LnggKyAocmVjdC53aWR0aCAqIDAuODQpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjcw
KSk7CisgICAgY2Fpcm9fbGluZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC41
MiksIHJlY3QueSArIChyZWN0LmhlaWdodCAqIDAuNTEpKTsKKyAgICBjYWlyb19saW5lX3RvKGNh
bnZhcywgcmVjdC54ICsgKHJlY3Qud2lkdGggKiAwLjUyKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0
ICogMC43MCkpOworICAgIGNhaXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0
aCAqIDAuMTcpLCByZWN0LnkgKyAocmVjdC5oZWlnaHQgKiAwLjUwKSk7CisgICAgY2Fpcm9fbGlu
ZV90byhjYW52YXMsIHJlY3QueCArIChyZWN0LndpZHRoICogMC41MiksIHJlY3QueSArIChyZWN0
LmhlaWdodCAqIDAuMjkpKTsKKyAgICBjYWlyb19saW5lX3RvKGNhbnZhcywgcmVjdC54ICsgKHJl
Y3Qud2lkdGggKiAwLjUyKSwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0ICogMC40OCkpOworICAgIGNh
aXJvX2xpbmVfdG8oY2FudmFzLCByZWN0LnggKyAocmVjdC53aWR0aCAqIDAuODQpLCByZWN0Lnkg
KyAocmVjdC5oZWlnaHQgKiAwLjI5KSk7CisgICAgY2Fpcm9fY2xvc2VfcGF0aChjYW52YXMpOwor
ICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsKKworICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsKK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9zcmMvRGVmYXVsdFdlYlRoZW1l
RW5naW5lLmggYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3NyYy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wZGZmNTNlZWM2NzdiNWZiZjMwZjI5ZGViZmRkMGZjNWE1NzQ0YTZiCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL25peC9zcmMvRGVmYXVsdFdlYlRoZW1l
RW5naW5lLmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIERlZmF1bHRXZWJUaGVtZUVuZ2luZV9oCisjZGVmaW5lIERlZmF1bHRXZWJUaGVtZUVuZ2lu
ZV9oCisKKyNpbmNsdWRlICJwdWJsaWMvVGhlbWVFbmdpbmUuaCIKKworbmFtZXNwYWNlIE5peCB7
CisKK2NsYXNzIERlZmF1bHRXZWJUaGVtZUVuZ2luZSBGSU5BTCA6IHB1YmxpYyBUaGVtZUVuZ2lu
ZSB7CitwdWJsaWM6CisgICAgLy8gVGV4dCBzZWxlY3Rpb24gY29sb3JzLgorICAgIHZpcnR1YWwg
Q29sb3IgYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBDb2xvciBhY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIENvbG9yIGluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENv
bG9yKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZVNlbGVjdGlv
bkZvcmVncm91bmRDb2xvcigpIGNvbnN0IE9WRVJSSURFOworCisgICAgLy8gTGlzdCBib3ggc2Vs
ZWN0aW9uIGNvbG9ycworICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvcigpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZl
TGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0IE9WRVJSSURFOworICAgIHZp
cnR1YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29u
c3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25G
b3JlZ3JvdW5kQ29sb3IoKSBjb25zdCBPVkVSUklERTsKKworICAgIHZpcnR1YWwgQ29sb3IgYWN0
aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBDb2xvciBpbmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0IE9WRVJSSURF
OworCisgICAgdmlydHVhbCBDb2xvciBmb2N1c1JpbmdDb2xvcigpIGNvbnN0IE9WRVJSSURFOwor
CisgICAgdmlydHVhbCBDb2xvciB0YXBIaWdobGlnaHRDb2xvcigpIGNvbnN0IE9WRVJSSURFOwor
CisgICAgdmlydHVhbCB2b2lkIHBhaW50QnV0dG9uKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0
JiwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMmKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRUZXh0RmllbGQoQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUZXh0QXJlYShDYW52YXMqLCBTdGF0ZSwg
Y29uc3QgUmVjdCYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgU2l6ZSBnZXRDaGVja2Jv
eFNpemUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDaGVja2JveChD
YW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYsIGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1zJikgY29u
c3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTaXplIGdldFJhZGlvU2l6ZSgpIGNvbnN0IE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBwYWludFJhZGlvKENhbnZhcyosIFN0YXRlLCBjb25zdCBS
ZWN0JiwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMmKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRNZW51TGlzdChDYW52YXMgKiwgU3RhdGUsIGNvbnN0IFJlY3QgJikgY29u
c3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGdldE1lbnVMaXN0UGFkZGluZyhpbnQmIHBh
ZGRpbmdUb3AsIGludCYgcGFkZGluZ0xlZnQsIGludCYgcGFkZGluZ0JvdHRvbSwgaW50JiBwYWRk
aW5nUmlnaHQpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwYWludFByb2dyZXNz
QmFyKENhbnZhcyosIFN0YXRlLCBjb25zdCBSZWN0JiwgY29uc3QgUHJvZ3Jlc3NCYXJFeHRyYVBh
cmFtcyYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgZG91YmxlIGdldEFuaW1hdGlvblJl
cGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IGRvdWJsZSBnZXRBbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKCkgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIHBhaW50SW5uZXJTcGluQnV0dG9uKENhbnZhcyAqLCBTdGF0
ZSwgY29uc3QgUmVjdCAmLCBjb25zdCBJbm5lclNwaW5CdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBnZXRJbm5lclNwaW5CdXR0b25QYWRkaW5nKGlu
dCYgcGFkZGluZ1RvcCwgaW50JiBwYWRkaW5nTGVmdCwgaW50JiBwYWRkaW5nQm90dG9tLCBpbnQm
IHBhZGRpbmdSaWdodCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHBhaW50TWV0
ZXIoQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFJlY3QmLCBjb25zdCBNZXRlckV4dHJhUGFyYW1zJikg
Y29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHBhaW50U2xpZGVyVHJhY2soQ2FudmFz
KiwgU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRTbGlkZXJUaHVtYihDYW52YXMqLCBTdGF0ZSwgY29uc3QgUmVjdCYpIGNvbnN0IE9WRVJS
SURFOworCisgICAgLy8gTWVkaWEgUGxheWVyCisgICAgdmlydHVhbCB2b2lkIHBhaW50TWVkaWFQ
bGF5QnV0dG9uKENhbnZhcyosIE1lZGlhUGxheWVyU3RhdGUsIGNvbnN0IFJlY3QmKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRNZWRpYU11dGVCdXR0b24oQ2FudmFzKiwg
TWVkaWFQbGF5ZXJTdGF0ZSwgY29uc3QgUmVjdCYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oQ2FudmFzKiwgY29uc3QgUmVjdCYpIGNv
bnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0
b24oQ2FudmFzKiwgY29uc3QgUmVjdCYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBwYWludE1lZGlhUmV3aW5kQnV0dG9uKENhbnZhcyosIGNvbnN0IFJlY3QmKSBjb25zdCBPVkVS
UklERTsKK307CisKK30gLy8gbmFtZXNwYWNlIE5peAorCisjZW5kaWYgLy8gRGVmYXVsdFdlYlRo
ZW1lRW5naW5lX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL1BsYXRmb3Jt
LmNwcCBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL1BsYXRmb3JtLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
ODRkMjQ3NjUxY2Y3Yzk2ZDQxY2YyMDg3YTY5OWRiZjdhMDMwZjE5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1BsYXRmb3JtL25peC9zcmMvUGxhdGZvcm0uY3BwCkBAIC0wLDAgKzEsNTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
InB1YmxpYy9QbGF0Zm9ybS5oIgorCisjaW5jbHVkZSAiRGVmYXVsdFdlYlRoZW1lRW5naW5lLmgi
CisKK25hbWVzcGFjZSBOaXggeworCitzdGF0aWMgUGxhdGZvcm0qIHNfcGxhdGZvcm07CisKK3Zv
aWQgUGxhdGZvcm06OmluaXRpYWxpemUoUGxhdGZvcm0qIHBsYXRmb3JtKQoreworICAgIHNfcGxh
dGZvcm0gPSBwbGF0Zm9ybTsKK30KKworUGxhdGZvcm0qIFBsYXRmb3JtOjpjdXJyZW50KCkKK3sK
KyAgICBzdGF0aWMgUGxhdGZvcm0gZW1wdHlQbGF0Zm9ybTsKKyAgICByZXR1cm4gc19wbGF0Zm9y
bSA/IHNfcGxhdGZvcm0gOiAmZW1wdHlQbGF0Zm9ybTsKK30KKworVGhlbWVFbmdpbmUqIFBsYXRm
b3JtOjp0aGVtZUVuZ2luZSgpCit7CisgICAgc3RhdGljIERlZmF1bHRXZWJUaGVtZUVuZ2luZSB0
aGVtZTsKKyAgICByZXR1cm4gJnRoZW1lOworfQorCit9IC8vIG5hbWVzcGFjZSBOaXgKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL25peC9BdWRpb0J1c05peC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9uaXgvQXVkaW9CdXNOaXguY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjcyMTA5OTM1M2ExMTEyZjZmMmUxMzY3YzVjNDQxYmZjOWY0NzU3YjkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9uaXgvQXVkaW9CdXNOaXgu
Y3BwCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkF1ZGlvQnVz
LmgiCisKKyNpbmNsdWRlICJBdWRpb0ZpbGVSZWFkZXIuaCIKKyNpbmNsdWRlIDxjc3RkaW8+Cisj
aW5jbHVkZSA8cHVibGljL011bHRpQ2hhbm5lbFBDTURhdGEuaD4KKyNpbmNsdWRlIDxwdWJsaWMv
UGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8QXVkaW9CdXM+IGRlY29kZUF1ZGlvRmlsZURhdGEo
Y29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUsIGRvdWJsZSBzYW1wbGVSYXRlKQoreworICAg
IE93blB0cjxOaXg6Ok11bHRpQ2hhbm5lbFBDTURhdGE+IHBjbURhdGEgPSBhZG9wdFB0cihOaXg6
OlBsYXRmb3JtOjpjdXJyZW50KCktPmRlY29kZUF1ZGlvUmVzb3VyY2UoZGF0YSwgc2l6ZSwgc2Ft
cGxlUmF0ZSkpOworICAgIGlmIChwY21EYXRhKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYoc3Rh
dGljX2Nhc3Q8QXVkaW9CdXMqPihwY21EYXRhLT5nZXRJbnRlcm5hbERhdGEoKSkpOworICAgIHJl
dHVybiBudWxscHRyOworfQorCitQYXNzUmVmUHRyPEF1ZGlvQnVzPiBBdWRpb0J1czo6bG9hZFBs
YXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSwgZmxvYXQgc2FtcGxlUmF0ZSkKK3sKKyAg
ICAvLyBGSVhNRTogVGhpcyBhc3N1bWVzIHRoZSBmaWxlIHN5c3RlbSB1c2VzIGxhdGluMSBvciBV
VEYtOCBlbmNvZGluZywgYnV0IHRoaXMgY29tbWVudCBhbHNvIGFzc3VtZXMKKyAgICAvLyB0aGF0
IG5vbi1hc2NpaSBmaWxlIG5hbWVzIHdvdWxkIGFwcGVhciBoZXJlLgorICAgIGNvbnN0IENTdHJp
bmcgYWJzb2x1dGVGaWxlbmFtZShtYWtlU3RyaW5nKERBVEFfRElSLCAiL3dlYmF1ZGlvL3Jlc291
cmNlcy8iLCBuYW1lLCAiLndhdiIpLnV0ZjgoKSk7CisgICAgc3RydWN0IHN0YXQgc3RhdERhdGE7
CisgICAgaWYgKDo6c3RhdChhYnNvbHV0ZUZpbGVuYW1lLmRhdGEoKSwgJnN0YXREYXRhKSA9PSAt
MSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBGSUxFKiBmaWxlID0gZm9wZW4oYWJz
b2x1dGVGaWxlbmFtZS5kYXRhKCksICJyYiIpOworICAgIGlmICghZmlsZSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBXVEY6OlZlY3RvcjxjaGFyPiBmaWxlQ29udGVudHM7CisgICAg
ZmlsZUNvbnRlbnRzLnJlc2l6ZShzdGF0RGF0YS5zdF9zaXplKTsKKyAgICBzaXplX3QgYnl0ZXNS
ZWFkID0gZnJlYWQoJmZpbGVDb250ZW50c1swXSwgZmlsZUNvbnRlbnRzLnNpemUoKSwgMSwgZmls
ZSk7CisgICAgZmNsb3NlKGZpbGUpOworICAgIGlmIChieXRlc1JlYWQgPCBmaWxlQ29udGVudHMu
c2l6ZSgpKQorICAgICAgICBmaWxlQ29udGVudHMucmVzaXplKGJ5dGVzUmVhZCk7CisKKyAgICBy
ZXR1cm4gZGVjb2RlQXVkaW9GaWxlRGF0YSgmZmlsZUNvbnRlbnRzWzBdLCBmaWxlQ29udGVudHMu
c2l6ZSgpLCBzYW1wbGVSYXRlKTsKK30KKworUGFzc1JlZlB0cjxBdWRpb0J1cz4gY3JlYXRlQnVz
RnJvbUluTWVtb3J5QXVkaW9GaWxlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSwg
Ym9vbCBtaXhUb01vbm8sIGZsb2F0IHNhbXBsZVJhdGUpCit7CisgICAgUmVmUHRyPEF1ZGlvQnVz
PiBhdWRpb0J1cyA9IGRlY29kZUF1ZGlvRmlsZURhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+
KGRhdGEpLCBkYXRhU2l6ZSwgc2FtcGxlUmF0ZSk7CisgICAgaWYgKCFhdWRpb0J1cykKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBJZiB0aGUgYnVzIG5lZWRzIG5vIGNvbnZlcnNp
b24gdGhlbiByZXR1cm4gYXMgaXMuCisgICAgaWYgKCFtaXhUb01vbm8gfHwgYXVkaW9CdXMtPm51
bWJlck9mQ2hhbm5lbHMoKSA9PSAxKQorICAgICAgICByZXR1cm4gYXVkaW9CdXMucmVsZWFzZSgp
OworCisgICAgcmV0dXJuIEF1ZGlvQnVzOjpjcmVhdGVCeVNhbXBsZVJhdGVDb252ZXJ0aW5nKGF1
ZGlvQnVzLmdldCgpLCBtaXhUb01vbm8sIHNhbXBsZVJhdGUpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbml4L0F1ZGlvRGVzdGluYXRpb25OaXguY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbml4L0F1ZGlvRGVzdGluYXRpb25OaXguY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjhkNDRjMWY4ODhkMzA0OTkwMDQ1ODhkZGZmZTZjMjM2M2RhNzBhYzcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9uaXgvQXVkaW9E
ZXN0aW5hdGlvbk5peC5jcHAKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkF1ZGlv
RGVzdGluYXRpb25OaXguaCIKKworI2luY2x1ZGUgIkF1ZGlvRklGTy5oIgorI2luY2x1ZGUgIkF1
ZGlvUHVsbEZJRk8uaCIKKyNpbmNsdWRlIDxwdWJsaWMvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQnVmZmVyIHNp
emUgYXQgd2hpY2ggdGhlIHdlYiBhdWRpbyBlbmdpbmUgd2lsbCByZW5kZXIuCitjb25zdCB1bnNp
Z25lZCByZW5kZXJCdWZmZXJTaXplID0gMTI4OworCisvLyBTaXplIG9mIHRoZSBGSUZPCitjb25z
dCBzaXplX3QgZmlmb1NpemUgPSA4MTkyOworCitQYXNzT3duUHRyPEF1ZGlvRGVzdGluYXRpb24+
IEF1ZGlvRGVzdGluYXRpb246OmNyZWF0ZShBdWRpb0lPQ2FsbGJhY2smIGNhbGxiYWNrLCBjb25z
dCBTdHJpbmcmIGlucHV0RGV2aWNlSWQsIHVuc2lnbmVkIG51bWJlck9mSW5wdXRDaGFubmVscywg
dW5zaWduZWQgbnVtYmVyT2ZPdXRwdXRDaGFubmVscywgZmxvYXQgc2FtcGxlUmF0ZSkKK3sKKyAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEF1ZGlvRGVzdGluYXRpb25OaXgoY2FsbGJhY2ssIGlucHV0
RGV2aWNlSWQsIG51bWJlck9mSW5wdXRDaGFubmVscywgbnVtYmVyT2ZPdXRwdXRDaGFubmVscywg
c2FtcGxlUmF0ZSkpOworfQorCitBdWRpb0Rlc3RpbmF0aW9uTml4OjpBdWRpb0Rlc3RpbmF0aW9u
Tml4KEF1ZGlvSU9DYWxsYmFjayYgY2FsbGJhY2ssIGNvbnN0IFN0cmluZyYgaW5wdXREZXZpY2VJ
ZCwgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCB1bnNpZ25lZCBudW1iZXJPZk91dHB1
dENoYW5uZWxzLCBmbG9hdCBzYW1wbGVSYXRlKQorICAgIDogbV9jYWxsYmFjayhjYWxsYmFjaykK
KyAgICAsIG1fbnVtYmVyT2ZPdXRwdXRDaGFubmVscyhudW1iZXJPZk91dHB1dENoYW5uZWxzKQor
ICAgICwgbV9pbnB1dEJ1cyhBdWRpb0J1czo6Y3JlYXRlKG51bWJlck9mSW5wdXRDaGFubmVscywg
cmVuZGVyQnVmZmVyU2l6ZSkpCisgICAgLCBtX3JlbmRlckJ1cyhBdWRpb0J1czo6Y3JlYXRlKG51
bWJlck9mT3V0cHV0Q2hhbm5lbHMsIHJlbmRlckJ1ZmZlclNpemUsIGZhbHNlKSkKKyAgICAsIG1f
c2FtcGxlUmF0ZShzYW1wbGVSYXRlKQorICAgICwgbV9pc1BsYXlpbmcoZmFsc2UpCisgICAgLCBt
X2lucHV0RGV2aWNlSWQoaW5wdXREZXZpY2VJZCkKK3sKKyAgICAvLyBVc2UgdGhlIG9wdGltYWwg
YnVmZmVyIHNpemUgcmVjb21tZW5kZWQgYnkgdGhlIGF1ZGlvIGJhY2tlbmQuCisgICAgbV9jYWxs
YmFja0J1ZmZlclNpemUgPSBOaXg6OlBsYXRmb3JtOjpjdXJyZW50KCktPmF1ZGlvSGFyZHdhcmVC
dWZmZXJTaXplKCk7CisKKyAgICAvLyBRdWljayBleGl0IGlmIHRoZSByZXF1ZXN0ZWQgc2l6ZSBp
cyB0b28gbGFyZ2UuCisgICAgQVNTRVJUKG1fY2FsbGJhY2tCdWZmZXJTaXplICsgcmVuZGVyQnVm
ZmVyU2l6ZSA8PSBmaWZvU2l6ZSk7CisgICAgaWYgKG1fY2FsbGJhY2tCdWZmZXJTaXplICsgcmVu
ZGVyQnVmZmVyU2l6ZSA+IGZpZm9TaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2F1ZGlv
RGV2aWNlID0gYWRvcHRQdHIoTml4OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jcmVhdGVBdWRpb0Rl
dmljZShtX2lucHV0RGV2aWNlSWQudXRmOCgpLmRhdGEoKSwgbV9jYWxsYmFja0J1ZmZlclNpemUs
IG51bWJlck9mSW5wdXRDaGFubmVscywgbnVtYmVyT2ZPdXRwdXRDaGFubmVscywgc2FtcGxlUmF0
ZSwgdGhpcykpOworCisgICAgQVNTRVJUKG1fYXVkaW9EZXZpY2UpOworCisgICAgLy8gQ3JlYXRl
IGEgRklGTyB0byBoYW5kbGUgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZSBjYWxsYmFjayBzaXplCisg
ICAgLy8gbm90IGJlaW5nIGEgbXVsdGlwbGUgb2YgdGhlIHJlbmRlciBzaXplLiBJZiB0aGUgRklG
TyBhbHJlYWR5CisgICAgLy8gY29udGFpbnMgZW5vdWdoIGRhdGEsIHRoZSBkYXRhIHdpbGwgYmUg
cHJvdmlkZWQgZGlyZWN0bHkuCisgICAgLy8gT3RoZXJ3aXNlLCB0aGUgRklGTyB3aWxsIGNhbGwg
dGhlIHByb3ZpZGVyIGVub3VnaCB0aW1lcyB0bworICAgIC8vIHNhdGlzZnkgdGhlIHJlcXVlc3Qg
Zm9yIGRhdGEuCisgICAgbV9maWZvID0gYWRvcHRQdHIobmV3IEF1ZGlvUHVsbEZJRk8oKnRoaXMs
IG51bWJlck9mT3V0cHV0Q2hhbm5lbHMsIGZpZm9TaXplLCByZW5kZXJCdWZmZXJTaXplKSk7CisK
KyAgICAvLyBJbnB1dCBidWZmZXJpbmcuCisgICAgbV9pbnB1dEZpZm8gPSBhZG9wdFB0cihuZXcg
QXVkaW9GSUZPKG51bWJlck9mSW5wdXRDaGFubmVscywgZmlmb1NpemUpKTsKKworICAgIC8vIElm
IHRoZSBjYWxsYmFjayBzaXplIGRvZXMgbm90IG1hdGNoIHRoZSByZW5kZXIgc2l6ZSwgdGhlbiB3
ZSBuZWVkIHRvIGJ1ZmZlciBzb21lCisgICAgLy8gZXh0cmEgc2lsZW5jZSBmb3IgdGhlIGlucHV0
LiBPdGhlcndpc2UsIHdlIGNhbiBvdmVyLWNvbnN1bWUgdGhlIGlucHV0IEZJRk8uCisgICAgaWYg
KG1fY2FsbGJhY2tCdWZmZXJTaXplICE9IHJlbmRlckJ1ZmZlclNpemUpIHsKKyAgICAgICAgLy8g
RklYTUU6IGhhbmRsZSBtdWx0aS1jaGFubmVsIGlucHV0IGFuZCBkb24ndCBoYXJkLWNvZGUgdG8g
c3RlcmVvLgorICAgICAgICBSZWZQdHI8QXVkaW9CdXM+IHNpbGVuY2UgPSBBdWRpb0J1czo6Y3Jl
YXRlKDIsIHJlbmRlckJ1ZmZlclNpemUpOworICAgICAgICBtX2lucHV0Rmlmby0+cHVzaChzaWxl
bmNlLmdldCgpKTsKKyAgICB9Cit9CisKK0F1ZGlvRGVzdGluYXRpb25OaXg6On5BdWRpb0Rlc3Rp
bmF0aW9uTml4KCkKK3sKKyAgICBzdG9wKCk7Cit9CisKK3ZvaWQgQXVkaW9EZXN0aW5hdGlvbk5p
eDo6c3RhcnQoKQoreworICAgIGlmICghbV9pc1BsYXlpbmcgJiYgbV9hdWRpb0RldmljZSkgewor
ICAgICAgICBtX2F1ZGlvRGV2aWNlLT5zdGFydCgpOworICAgICAgICBtX2lzUGxheWluZyA9IHRy
dWU7CisgICAgfQorfQorCit2b2lkIEF1ZGlvRGVzdGluYXRpb25OaXg6OnN0b3AoKQoreworICAg
IGlmIChtX2lzUGxheWluZyAmJiBtX2F1ZGlvRGV2aWNlKSB7CisgICAgICAgIG1fYXVkaW9EZXZp
Y2UtPnN0b3AoKTsKKyAgICAgICAgbV9pc1BsYXlpbmcgPSBmYWxzZTsKKyAgICB9Cit9CisKK2Jv
b2wgQXVkaW9EZXN0aW5hdGlvbk5peDo6aXNQbGF5aW5nKCkKK3sKKyAgICByZXR1cm4gbV9pc1Bs
YXlpbmc7Cit9CisKK2Zsb2F0IEF1ZGlvRGVzdGluYXRpb25OaXg6OnNhbXBsZVJhdGUoKSBjb25z
dAoreworICAgIHJldHVybiBtX3NhbXBsZVJhdGU7Cit9CisKK2Zsb2F0IEF1ZGlvRGVzdGluYXRp
b246OmhhcmR3YXJlU2FtcGxlUmF0ZSgpCit7CisgICAgcmV0dXJuIE5peDo6UGxhdGZvcm06OmN1
cnJlbnQoKS0+YXVkaW9IYXJkd2FyZVNhbXBsZVJhdGUoKTsKK30KKwordW5zaWduZWQgbG9uZyBB
dWRpb0Rlc3RpbmF0aW9uOjptYXhDaGFubmVsQ291bnQoKQoreworICAgIHJldHVybiBOaXg6OlBs
YXRmb3JtOjpjdXJyZW50KCktPmF1ZGlvSGFyZHdhcmVPdXRwdXRDaGFubmVscygpOworfQorCit2
b2lkIEF1ZGlvRGVzdGluYXRpb25OaXg6OnJlbmRlcihjb25zdCBzdGQ6OnZlY3RvcjxmbG9hdCo+
JiBzb3VyY2VEYXRhLCBjb25zdCBzdGQ6OnZlY3RvcjxmbG9hdCo+JiBhdWRpb0RhdGEsIHNpemVf
dCBudW1iZXJPZkZyYW1lcykKK3sKKyAgICBpZiAoIW1faXNQbGF5aW5nIHx8ICFtX2F1ZGlvRGV2
aWNlKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGlzTnVtYmVyT2ZDaGFubmVsc0dvb2Qg
PSBhdWRpb0RhdGEuc2l6ZSgpID09IG1fbnVtYmVyT2ZPdXRwdXRDaGFubmVsczsKKyAgICBpZiAo
IWlzTnVtYmVyT2ZDaGFubmVsc0dvb2QpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBib29sIGlzQnVmZmVyU2l6ZUdvb2QgPSBu
dW1iZXJPZkZyYW1lcyA9PSBtX2NhbGxiYWNrQnVmZmVyU2l6ZTsKKyAgICBpZiAoIWlzQnVmZmVy
U2l6ZUdvb2QpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBCdWZmZXIgb3B0aW9uYWwgbGl2ZSBpbnB1dC4KKyAgICBpZiAo
c291cmNlRGF0YS5zaXplKCkpIHsKKyAgICAgICAgUmVmUHRyPEF1ZGlvQnVzPiB3cmFwcGVyQnVz
ID0gQXVkaW9CdXM6OmNyZWF0ZShzb3VyY2VEYXRhLnNpemUoKSwgbnVtYmVyT2ZGcmFtZXMsIGZh
bHNlKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJjZURhdGEuc2l6ZSgp
OyArK2kpCisgICAgICAgICAgICB3cmFwcGVyQnVzLT5zZXRDaGFubmVsTWVtb3J5KGksIHNvdXJj
ZURhdGFbaV0sIG51bWJlck9mRnJhbWVzKTsKKyAgICAgICAgbV9pbnB1dEZpZm8tPnB1c2god3Jh
cHBlckJ1cy5nZXQoKSk7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
bnVtYmVyT2ZPdXRwdXRDaGFubmVsczsgKytpKQorICAgICAgICBtX3JlbmRlckJ1cy0+c2V0Q2hh
bm5lbE1lbW9yeShpLCBhdWRpb0RhdGFbaV0sIG51bWJlck9mRnJhbWVzKTsKKworICAgIG1fZmlm
by0+Y29uc3VtZShtX3JlbmRlckJ1cy5nZXQoKSwgbnVtYmVyT2ZGcmFtZXMpOworfQorCit2b2lk
IEF1ZGlvRGVzdGluYXRpb25OaXg6OnByb3ZpZGVJbnB1dChBdWRpb0J1cyogYnVzLCBzaXplX3Qg
ZnJhbWVzVG9Qcm9jZXNzKQoreworICAgIFJlZlB0cjxBdWRpb0J1cz4gc291cmNlQnVzOworICAg
IGlmIChtX2lucHV0Rmlmby0+ZnJhbWVzSW5GaWZvKCkgPj0gZnJhbWVzVG9Qcm9jZXNzKSB7Cisg
ICAgICAgIG1faW5wdXRGaWZvLT5jb25zdW1lKG1faW5wdXRCdXMuZ2V0KCksIGZyYW1lc1RvUHJv
Y2Vzcyk7CisgICAgICAgIHNvdXJjZUJ1cyA9IG1faW5wdXRCdXM7CisgICAgfQorCisgICAgbV9j
YWxsYmFjay5yZW5kZXIoc291cmNlQnVzLmdldCgpLCBidXMsIGZyYW1lc1RvUHJvY2Vzcyk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9uaXgvQXVkaW9EZXN0
aW5hdGlvbk5peC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbml4L0F1ZGlvRGVz
dGluYXRpb25OaXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZTBkMGVhMWViY2I3YmY0Njg4OGE1ODJmYTQ0OTc2
MmJjZjdkMGRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vbml4L0F1ZGlvRGVzdGluYXRpb25OaXguaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQXVkaW9EZXN0aW5hdGlvbk5peF9oCisjZGVmaW5lIEF1ZGlvRGVzdGluYXRp
b25OaXhfaAorCisjaW5jbHVkZSAiQXVkaW9CdXMuaCIKKyNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0
aW9uLmgiCisjaW5jbHVkZSAiQXVkaW9JT0NhbGxiYWNrLmgiCisjaW5jbHVkZSAiQXVkaW9Tb3Vy
Y2VQcm92aWRlci5oIgorI2luY2x1ZGUgPHB1YmxpYy9BdWRpb0RldmljZS5oPgorI2luY2x1ZGUg
PHZlY3Rvcj4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb0ZJRk87CitjbGFz
cyBBdWRpb1B1bGxGSUZPOworCitjbGFzcyBBdWRpb0Rlc3RpbmF0aW9uTml4IDogcHVibGljIEF1
ZGlvRGVzdGluYXRpb24sIHB1YmxpYyBOaXg6OkF1ZGlvRGV2aWNlOjpSZW5kZXJDYWxsYmFjaywg
cHVibGljIEF1ZGlvU291cmNlUHJvdmlkZXIgeworcHVibGljOgorICAgIEF1ZGlvRGVzdGluYXRp
b25OaXgoQXVkaW9JT0NhbGxiYWNrJiwgY29uc3QgU3RyaW5nJiBpbnB1dERldmljZUlkLCB1bnNp
Z25lZCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIHVuc2lnbmVkIG51bWJlck9mT3V0cHV0Q2hhbm5l
bHMsIGZsb2F0IHNhbXBsZVJhdGUpOworICAgIHZpcnR1YWwgfkF1ZGlvRGVzdGluYXRpb25OaXgo
KTsKKworICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBzdG9wKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGlzUGxheWluZygpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgZmxvYXQgc2FtcGxlUmF0ZSgpIGNvbnN0IE9WRVJSSURFOworCisgICAg
Ly8gV2ViS2l0OjpXZWJBdWRpb0RldmljZTo6UmVuZGVyQ2FsbGJhY2sKKyAgICB2aXJ0dWFsIHZv
aWQgcmVuZGVyKGNvbnN0IHN0ZDo6dmVjdG9yPGZsb2F0Kj4mIHNvdXJjZURhdGEsIGNvbnN0IHN0
ZDo6dmVjdG9yPGZsb2F0Kj4mIGF1ZGlvRGF0YSwgc2l6ZV90IG51bWJlck9mRnJhbWVzKSBPVkVS
UklERTsKKworICAgIC8vIFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXIKKyAgICB2aXJ0dWFs
IHZvaWQgcHJvdmlkZUlucHV0KEF1ZGlvQnVzKiwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykgT1ZF
UlJJREU7CisKK3ByaXZhdGU6CisgICAgQXVkaW9JT0NhbGxiYWNrJiBtX2NhbGxiYWNrOworICAg
IHVuc2lnbmVkIG1fbnVtYmVyT2ZPdXRwdXRDaGFubmVsczsKKyAgICBSZWZQdHI8QXVkaW9CdXM+
IG1faW5wdXRCdXM7CisgICAgUmVmUHRyPEF1ZGlvQnVzPiBtX3JlbmRlckJ1czsKKyAgICBmbG9h
dCBtX3NhbXBsZVJhdGU7CisgICAgYm9vbCBtX2lzUGxheWluZzsKKyAgICBPd25QdHI8Tml4OjpB
dWRpb0RldmljZT4gbV9hdWRpb0RldmljZTsKKyAgICBzaXplX3QgbV9jYWxsYmFja0J1ZmZlclNp
emU7CisgICAgU3RyaW5nIG1faW5wdXREZXZpY2VJZDsKKworICAgIE93blB0cjxBdWRpb0ZJRk8+
IG1faW5wdXRGaWZvOworICAgIE93blB0cjxBdWRpb1B1bGxGSUZPPiBtX2ZpZm87Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBBdWRpb0Rlc3RpbmF0aW9uTml4X2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL25peC9GRlRGcmFtZU5p
eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9uaXgvRkZURnJhbWVOaXguY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjU2YWRmMDAwNTI0N2JlM2Q5MTNlZWY4Y2U4ODJkMDlkNzBlZjhmYTUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9uaXgvRkZURnJh
bWVOaXguY3BwCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorI2luY2x1ZGUgIkZGVEZy
YW1lLmgiCisKKyNpbmNsdWRlICJWZWN0b3JNYXRoLmgiCisjaW5jbHVkZSA8Y21hdGg+CisjaW5j
bHVkZSA8cHVibGljL0ZGVEZyYW1lLmg+CisjaW5jbHVkZSA8cHVibGljL1BsYXRmb3JtLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSB2b2lkIHNjYWxlUGxhbmFyRGF0
YShmbG9hdCogZGF0YSwgY29uc3QgdW5zaWduZWQgc2l6ZSwgY29uc3QgZmxvYXQgc2NhbGUpCit7
CisgICAgVmVjdG9yTWF0aDo6dnNtdWwoZGF0YSwgMSwgJnNjYWxlLCBkYXRhLCAxLCBzaXplKTsK
K30KKworRkZURnJhbWU6OkZGVEZyYW1lKHVuc2lnbmVkIGZmdFNpemUpCisgICAgOiBtX0ZGVFNp
emUoZmZ0U2l6ZSkKKyAgICAsIG1fbG9nMkZGVFNpemUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxv
ZzIoZmZ0U2l6ZSkpKQoreworICAgIG1fZmZ0RnJhbWUgPSBhZG9wdFB0cihOaXg6OlBsYXRmb3Jt
OjpjdXJyZW50KCktPmNyZWF0ZUZGVEZyYW1lKGZmdFNpemUpKTsKK30KKworRkZURnJhbWU6OkZG
VEZyYW1lKGNvbnN0IEZGVEZyYW1lJiBmcmFtZSkKKyAgICA6IG1fRkZUU2l6ZShmcmFtZS5tX0ZG
VFNpemUpCisgICAgLCBtX2xvZzJGRlRTaXplKGZyYW1lLm1fbG9nMkZGVFNpemUpCit7CisgICAg
bV9mZnRGcmFtZSA9IGFkb3B0UHRyKGZyYW1lLm1fZmZ0RnJhbWUtPmNvcHkoKSk7Cit9CisKK0ZG
VEZyYW1lOjp+RkZURnJhbWUoKQoreworfQorCit2b2lkIEZGVEZyYW1lOjptdWx0aXBseShjb25z
dCBGRlRGcmFtZSYgZnJhbWUpCit7CisgICAgZmxvYXQqIHJlYWxQMSA9IHJlYWxEYXRhKCk7Cisg
ICAgZmxvYXQqIGltYWdQMSA9IGltYWdEYXRhKCk7CisgICAgY29uc3QgZmxvYXQqIHJlYWxQMiA9
IGZyYW1lLnJlYWxEYXRhKCk7CisgICAgY29uc3QgZmxvYXQqIGltYWdQMiA9IGZyYW1lLmltYWdE
YXRhKCk7CisKKyAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IG1fZmZ0RnJhbWUtPmZyZXF1ZW5jeURv
bWFpblNhbXBsZUNvdW50KCk7CisgICAgVmVjdG9yTWF0aDo6enZtdWwocmVhbFAxLCBpbWFnUDEs
IHJlYWxQMiwgaW1hZ1AyLCByZWFsUDEsIGltYWdQMSwgc2l6ZSk7CisKKyAgICAvLyBTY2FsZSBh
Y2NvdW50cyB0aGUgcGVjdWxpYXIgc2NhbGluZyBvZiB2ZWNMaWIgb24gdGhlIE1hYy4KKyAgICAv
LyBUaGlzIGVuc3VyZXMgdGhlIHJpZ2h0IHNjYWxpbmcgYWxsIHRoZSB3YXkgYmFjayB0byBpbnZl
cnNlIEZGVC4KKyAgICAvLyBGSVhNRTogaWYgd2UgY2hhbmdlIHRoZSBzY2FsaW5nIG9uIHRoZSBN
YWMgdGhlbiB0aGlzIHNjYWxlCisgICAgLy8gZmFjdG9yIHdpbGwgbmVlZCB0byBjaGFuZ2UgdG9v
LgorICAgIGNvbnN0IGZsb2F0IHNjYWxlID0gMC41OworICAgIHNjYWxlUGxhbmFyRGF0YShyZWFs
UDEsIHNpemUsIHNjYWxlKTsKKyAgICBzY2FsZVBsYW5hckRhdGEoaW1hZ1AxLCBzaXplLCBzY2Fs
ZSk7Cit9CisKKy8vIFByb3ZpZGVzIHRpbWUgZG9tYWluIHNhbXBsZXMgaW4gYXJndW1lbnQgImRh
dGEiLiBGcmFtZSB3aWxsIHN0b3JlIHRoZSB0cmFuc2Zvcm1lZCBkYXRhLgordm9pZCBGRlRGcmFt
ZTo6ZG9GRlQoY29uc3QgZmxvYXQqIGRhdGEpCit7CisgICAgbV9mZnRGcmFtZS0+ZG9GRlQoZGF0
YSk7CisgICAgLy8gU2NhbGUgdGhlIGZyZXF1ZW5jeSBkb21haW4gZGF0YSB0byBtYXRjaCB2ZWNM
aWIncyBzY2FsZSBmYWN0b3IKKyAgICAvLyBvbiB0aGUgTWFjLiBGSVhNRTogaWYgd2UgY2hhbmdl
IHRoZSBkZWZpbml0aW9uIG9mIEZGVEZyYW1lIHRvCisgICAgLy8gZWxpbWluYXRlIHRoaXMgc2Nh
bGUgZmFjdG9yIHRoZW4gdGhpcyBjb2RlIHdpbGwgbmVlZCB0byBjaGFuZ2UuCisgICAgY29uc3Qg
ZmxvYXQgc2NhbGUgPSAyOworICAgIGNvbnN0IHNpemVfdCBzaXplID0gbV9mZnRGcmFtZS0+ZnJl
cXVlbmN5RG9tYWluU2FtcGxlQ291bnQoKTsKKyAgICBzY2FsZVBsYW5hckRhdGEocmVhbERhdGEo
KSwgc2l6ZSwgc2NhbGUpOworICAgIHNjYWxlUGxhbmFyRGF0YShpbWFnRGF0YSgpLCBzaXplLCBz
Y2FsZSk7Cit9CisKKy8vIENhbGN1bGF0ZXMgaW52ZXJzZSB0cmFuc2Zvcm0gZnJvbSB0aGUgc3Rv
cmVkIGRhdGEsIHB1dHRpbmcgdGhlIHJlc3VsdHMgaW4gYXJndW1lbnQgJ2RhdGEnLgordm9pZCBG
RlRGcmFtZTo6ZG9JbnZlcnNlRkZUKGZsb2F0KiBkYXRhKQoreworICAgIG1fZmZ0RnJhbWUtPmRv
SW52ZXJzZUZGVChkYXRhKTsKKworICAgIC8vIFNjYWxlIHNvIHRoYXQgYSBmb3J3YXJkIHRoZW4g
aW52ZXJzZSBGRlQgeWllbGRzIGV4YWN0bHkgdGhlIG9yaWdpbmFsIGRhdGEuCisgICAgY29uc3Qg
ZmxvYXQgc2NhbGUgPSAxLjAgLyAoMiAqIG1fRkZUU2l6ZSk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fRkZUU2l6ZTsgKytpKQorICAgICAgICBkYXRhW2ldID0gc2NhbGUgKiBkYXRh
W2ldOworfQorCit2b2lkIEZGVEZyYW1lOjppbml0aWFsaXplKCkKK3sKK30KKwordm9pZCBGRlRG
cmFtZTo6Y2xlYW51cCgpCit7Cit9CisKK2Zsb2F0KiBGRlRGcmFtZTo6cmVhbERhdGEoKSBjb25z
dAoreworICAgIHJldHVybiBtX2ZmdEZyYW1lLT5yZWFsRGF0YSgpOworfQorCitmbG9hdCogRkZU
RnJhbWU6OmltYWdEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mZnRGcmFtZS0+aW1hZ0Rh
dGEoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
Ql9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9zdXBwb3J0
L011bHRpQ2hhbm5lbFBDTURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L3N1
cHBvcnQvTXVsdGlDaGFubmVsUENNRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2YyMjk0YzM3MTM3M2Y0
YmVmNzI1NDk5YjBkYmI2MDQyZjRiMjZlNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25peC9zdXBwb3J0L011bHRpQ2hhbm5lbFBDTURhdGEuY3BwCkBAIC0wLDAg
KzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlIDxwdWJsaWMvTXVsdGlDaGFubmVsUENNRGF0YS5oPgorCisjaWYgRU5BQkxFKFdF
Ql9BVURJTykKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBOaXgg
eworCitzdGF0aWMgV2ViQ29yZTo6QXVkaW9CdXMqIHRvQXVkaW9CdXModm9pZCogZGF0YSkKK3sK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QXVkaW9CdXMqPihkYXRhKTsKK30KKwor
TXVsdGlDaGFubmVsUENNRGF0YTo6TXVsdGlDaGFubmVsUENNRGF0YSh1bnNpZ25lZCBudW1iZXJP
ZkNoYW5uZWxzLCBzaXplX3QgbGVuZ3RoLCBkb3VibGUgc2FtcGxlUmF0ZSkKK3sKKyNpZiBFTkFC
TEUoV0VCX0FVRElPKQorICAgIFdlYkNvcmU6OkF1ZGlvQnVzKiBidXMgPSBXZWJDb3JlOjpBdWRp
b0J1czo6Y3JlYXRlKG51bWJlck9mQ2hhbm5lbHMsIGxlbmd0aCkubGVha1JlZigpOworICAgIGJ1
cy0+c2V0U2FtcGxlUmF0ZShzYW1wbGVSYXRlKTsKKyAgICBtX2RhdGEgPSBidXM7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShudW1iZXJPZkNoYW5uZWxzKTsKKyAgICBVTlVTRURfUEFSQU0obGVu
Z3RoKTsKKyAgICBVTlVTRURfUEFSQU0oc2FtcGxlUmF0ZSk7CisgICAgbV9kYXRhID0gbnVsbHB0
cjsKKyNlbmRpZgorfQorCitNdWx0aUNoYW5uZWxQQ01EYXRhOjp+TXVsdGlDaGFubmVsUENNRGF0
YSgpCit7CisgICAgZGVsZXRlIHRvQXVkaW9CdXMobV9kYXRhKTsKK30KKwordm9pZCogTXVsdGlD
aGFubmVsUENNRGF0YTo6Z2V0SW50ZXJuYWxEYXRhKCkKK3sKKyAgICAvLyBUaGlzIHRyYW5zZmVy
IHRoZSBvd25lcnNoaXAgb2YgbV9kYXRhIHRvIHRoZSBjYWxsZXIuCisgICAgdm9pZCogZGF0YSA9
IG1fZGF0YTsKKyAgICBtX2RhdGEgPSAwOworICAgIHJldHVybiBkYXRhOworfQorCit1bnNpZ25l
ZCBNdWx0aUNoYW5uZWxQQ01EYXRhOjpudW1iZXJPZkNoYW5uZWxzKCkgY29uc3QKK3sKKyNpZiBF
TkFCTEUoV0VCX0FVRElPKQorICAgIGlmIChtX2RhdGEpCisgICAgICAgIHJldHVybiB0b0F1ZGlv
QnVzKG1fZGF0YSktPm51bWJlck9mQ2hhbm5lbHMoKTsKKyNlbmRpZgorICAgIHJldHVybiAwOwor
fQorCitzaXplX3QgTXVsdGlDaGFubmVsUENNRGF0YTo6bGVuZ3RoKCkgY29uc3QKK3sKKyNpZiBF
TkFCTEUoV0VCX0FVRElPKQorICAgIGlmIChtX2RhdGEpCisgICAgICAgIHJldHVybiB0b0F1ZGlv
QnVzKG1fZGF0YSktPmxlbmd0aCgpOworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisKK2RvdWJs
ZSBNdWx0aUNoYW5uZWxQQ01EYXRhOjpzYW1wbGVSYXRlKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUo
V0VCX0FVRElPKQorICAgIGlmIChtX2RhdGEpCisgICAgICAgIHJldHVybiB0b0F1ZGlvQnVzKG1f
ZGF0YSktPnNhbXBsZVJhdGUoKTsKKyNlbmRpZgorICAgIHJldHVybiAwOworfQorCitmbG9hdCog
TXVsdGlDaGFubmVsUENNRGF0YTo6Y2hhbm5lbERhdGEodW5zaWduZWQgY2hhbm5lbEluZGV4KQor
eworI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAgaWYgKG1fZGF0YSkgeworICAgICAgICBBU1NF
UlQoY2hhbm5lbEluZGV4IDwgdG9BdWRpb0J1cyhtX2RhdGEpLT5udW1iZXJPZkNoYW5uZWxzKCkp
OworICAgICAgICByZXR1cm4gdG9BdWRpb0J1cyhtX2RhdGEpLT5jaGFubmVsKGNoYW5uZWxJbmRl
eCktPm11dGFibGVEYXRhKCk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY2hhbm5l
bEluZGV4KTsKKyNlbmRpZgorICAgIHJldHVybiBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFj
ZSBOaXgKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCBmYjMxZTdjMGU5MjFlM2EzMzk4YTU3ZjIyMjNlMjMyNGZmMjFmNDJkLi4wNDc2OGU2ZWQ4NThk
NmIwNmZmNGUwNTc4NjA0YTcyMWJiZGM2NTVmIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cK
KysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTMtMTAtMjUgIEh1Z28g
UGFyZW50ZSBMaW1hICA8aHVnby5saW1hQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgQWRkaW5n
IE5peCBmaWxlcyBpbiBTb3VyY2UvUGxhdGZvcm0gdG8gdHJ1bmsKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODMzMQorCisgICAgICAgIFJldmlld2Vk
IGJ5IEJlbmphbWluIFBvdWxhaW4uCisKKyAgICAgICAgQWRkIGEgc3BlY2lhbCBydWxlIGZvciBO
aXggQVBJIGZpbGVzIGxvY2F0ZWQgYXQgU291cmNlL1BsYXRmb3JtL25peC4KKworICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weToKKwogMjAxMy0xMC0yMSAgVGFtYXMg
R2VyZ2VseSAgPGdlcnRvbUBpbmYudS1zemVnZWQuaHU+CiAKICAgICAgICAgUnVuIHRlc3RzIGFz
IGlmIHRoZXkgYXJlIGV4cGVjdGVkIHRvIHBhc3Mgd2hlbiAtLWZvcmNlIGlzIGdpdmVuLgpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CmluZGV4IGYyM2QzMDc3M2QyOTJkY2Fk
MTA3NTg4NDIxNTdjZTI3NjM1MzM3NDYuLjY0NTEzZjEzNjczNWU0MDc3ZTdlNTJkMTFiMjA4ODgz
MTk1MjM2MDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tl
ci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKQEAgLTE2
OCw3ICsxNjgsMTEgQEAgX1BBVEhfUlVMRVNfU1BFQ0lGSUVSID0gWwogCiAgICAgKFsjIEhlYWRl
ciBmaWxlcyBpbiBGb3J3YXJkaW5nSGVhZGVycyBoYXZlIG5vIGhlYWRlciBndWFyZHMgb3IKICAg
ICAgICMgZXhjZXB0aW9uYWwgaGVhZGVyIGd1YXJkcyAoZS5nLiwgV2ViQ29yZV9GV0RfRGVidWdn
ZXJfaCkuCi0gICAgICAiL0ZvcndhcmRpbmdIZWFkZXJzLyJdLAorICAgICAgIi9Gb3J3YXJkaW5n
SGVhZGVycy8iLAorICAgICAgIyBOaXggcGxhdGZvcm0gQVBJIGNsYXNzZXMgdXNlcyBjb21tb24g
bmFtZXMgdW5kZXIgTml4IG5hbWVzcGFjZQorICAgICAgIyBzbyB0aGUgaW5jbHVkZSBndWFyZHMg
c2hvdWxkIGFsc28gaW5jbHVkZSB0aGUgbmFtZXNwYWNlIHRvIGF2b2lkCisgICAgICAjIG5hbWUg
Y2xhc2hlcy4KKyAgICAgICAiU291cmNlL1BsYXRmb3JtL25peCJdLAogICAgICBbIi1idWlsZC9o
ZWFkZXJfZ3VhcmQiXSksCiAgICAgKFsjIGFzc2VtYmxlciBoYXMgbG90cyBvZiBvcGNvZGVzIHRo
YXQgdXNlIHVuZGVyc2NvcmVzLCBzbwogICAgICAgIyB3ZSBkb24ndCBjaGVjayBmb3IgdW5kZXJz
Y29yZXMgaW4gdGhhdCBkaXJlY3RvcnkuCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>