<?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>237355</bug_id>
          
          <creation_ts>2022-03-01 23:23:50 -0800</creation_ts>
          <short_desc>[WinCairo] Improve WCTiledBacking and TextureMapperSparseBackingStore</short_desc>
          <delta_ts>2022-03-14 14:03:48 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Fujii Hironori">fujii</reporter>
          <assigned_to name="Fujii Hironori">fujii</assigned_to>
          <cc>annulen</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1847311</commentid>
    <comment_count>0</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-03-01 23:23:50 -0800</bug_when>
    <thetext>&lt;https://vscode.dev/&gt; has a very large layer.
WinCairo performance is pretty bad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847313</commentid>
    <comment_count>1</comment_count>
      <attachid>453576</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-03-01 23:28:18 -0800</bug_when>
    <thetext>Created attachment 453576
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847470</commentid>
    <comment_count>2</comment_count>
      <attachid>453576</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2022-03-02 09:47:41 -0800</bug_when>
    <thetext>Comment on attachment 453576
Patch

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

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperSparseBackingStore.h:108
&gt; +    class Tile : public BasicRawSentinelNode&lt;Tile&gt; {

Is there a better name for this or the other Tile class? Seems pretty likely to be mixed up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847563</commentid>
    <comment_count>3</comment_count>
      <attachid>453576</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-03-02 12:11:09 -0800</bug_when>
    <thetext>Comment on attachment 453576
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperSparseBackingStore.h:108
&gt;&gt; +    class Tile : public BasicRawSentinelNode&lt;Tile&gt; {
&gt; 
&gt; Is there a better name for this or the other Tile class? Seems pretty likely to be mixed up.

I have no idea. What&apos;s your preference? Because they are inter classes, they are distinguishable by using parent class names, WCTileGrid::Tile and TextureMapperSparseBackingStore::Tile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847590</commentid>
    <comment_count>4</comment_count>
      <attachid>453576</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2022-03-02 13:15:34 -0800</bug_when>
    <thetext>Comment on attachment 453576
Patch

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

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperSparseBackingStore.h:60
&gt; +    class TileIndex : public WebCore::IntPoint {
&gt; +    public:
&gt; +        TileIndex() { }
&gt; +        TileIndex(int x, int y)
&gt; +            : WebCore::IntPoint(x, y)
&gt; +        {
&gt; +        }
&gt; +
&gt; +        bool operator&lt;(const TileIndex&amp; other) const
&gt; +        {
&gt; +            if (y() == other.y())
&gt; +                return x() &lt; other.x();
&gt; +            return y() &lt; other.y();
&gt; +        }
&gt; +
&gt; +        bool operator&gt;(const TileIndex&amp; other) const
&gt; +        {
&gt; +            return other &lt; *this;
&gt; +        }
&gt; +

If you&apos;re just doing a subclass to tack on operators for `&lt;` and `&gt;` seems like maybe doing a type alias `using TileIndex = WebCore::IntPoint` and adding some functions to do your `&lt;` `&gt;` comparisons might be a better approach.

&gt;&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperSparseBackingStore.h:108
&gt;&gt;&gt; +    class Tile : public BasicRawSentinelNode&lt;Tile&gt; {
&gt;&gt; 
&gt;&gt; Is there a better name for this or the other Tile class? Seems pretty likely to be mixed up.
&gt; 
&gt; I have no idea. What&apos;s your preference? Because they are inter classes, they are distinguishable by using parent class names, WCTileGrid::Tile and TextureMapperSparseBackingStore::Tile.

I didn&apos;t really have anything better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847594</commentid>
    <comment_count>5</comment_count>
      <attachid>453576</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-03-02 13:27:20 -0800</bug_when>
    <thetext>Comment on attachment 453576
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperSparseBackingStore.h:60
&gt;&gt; +
&gt; 
&gt; If you&apos;re just doing a subclass to tack on operators for `&lt;` and `&gt;` seems like maybe doing a type alias `using TileIndex = WebCore::IntPoint` and adding some functions to do your `&lt;` `&gt;` comparisons might be a better approach.

I agree that using custom comparison functions might be better than a custom type.

An alternative is to go further in the other direction, view TileIndex as a true abstraction, in which case we might use IntPoint as the type of a data member rather than deriving from it.

It can help to think about IntPoint the way you would a scalar type like int. If TileIndex contained an int we would not need to derive from int. And we wouldn’t necessarily use strong typing just to define an ordering of int.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperSparseBackingStore.h:91
&gt; +        void updateContents(const TileIndex&amp;, Image&amp;, const IntRect&amp; dirtyRect);
&gt; +        void removeTile(const TileIndex&amp;);

For a thing that’s so small and entirely full of scalars, it’s probably more efficient to just use TileIndex rather than const TileIndex&amp;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847597</commentid>
    <comment_count>6</comment_count>
      <attachid>453576</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-03-02 13:29:46 -0800</bug_when>
    <thetext>Comment on attachment 453576
Patch

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

Thank you very much for the review.

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperSparseBackingStore.h:60
&gt;&gt; +
&gt; 
&gt; If you&apos;re just doing a subclass to tack on operators for `&lt;` and `&gt;` seems like maybe doing a type alias `using TileIndex = WebCore::IntPoint` and adding some functions to do your `&lt;` `&gt;` comparisons might be a better approach.

Right. I added the comparison operators because I&apos;d like to keep the Tile linked list sorted in ascending order.
However, I don&apos;t agree the idea defining the comparison operators for the common IntPoint.
It&apos;s not obvious how to define comparison operators for IntPoint, and it might cause surprising confusion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847601</commentid>
    <comment_count>7</comment_count>
      <attachid>453576</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-03-02 13:40:04 -0800</bug_when>
    <thetext>Comment on attachment 453576
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperSparseBackingStore.h:60
&gt;&gt;&gt;&gt; +
&gt;&gt;&gt; 
&gt;&gt;&gt; If you&apos;re just doing a subclass to tack on operators for `&lt;` and `&gt;` seems like maybe doing a type alias `using TileIndex = WebCore::IntPoint` and adding some functions to do your `&lt;` `&gt;` comparisons might be a better approach.
&gt;&gt; 
&gt;&gt; I agree that using custom comparison functions might be better than a custom type.
&gt;&gt; 
&gt;&gt; An alternative is to go further in the other direction, view TileIndex as a true abstraction, in which case we might use IntPoint as the type of a data member rather than deriving from it.
&gt;&gt; 
&gt;&gt; It can help to think about IntPoint the way you would a scalar type like int. If TileIndex contained an int we would not need to derive from int. And we wouldn’t necessarily use strong typing just to define an ordering of int.
&gt; 
&gt; Right. I added the comparison operators because I&apos;d like to keep the Tile linked list sorted in ascending order.
&gt; However, I don&apos;t agree the idea defining the comparison operators for the common IntPoint.
&gt; It&apos;s not obvious how to define comparison operators for IntPoint, and it might cause surprising confusion.

None of this is mandatory, just coding style advice:

The SentinelLInkedList itself does not do the sorting. Our code that enforces the ordering can call functions, doesn’t need to use &quot;&gt;&quot; and &quot;&lt;&quot; operator. If it was a standard library class template or function template that was providing the ordering we would have to supply a &quot;&lt;&quot; function (pre-C++20). This gives us the opportunity to name the ordering. I think it’s best to have this be an IntPoint, but have the linked list use tile index ordering. Maybe just code in terms of an isTileIndexLessThan function (again, pre-C++20, there are slightly more elegant ways once we have more C++20 support).

The need to write encode and decode functions as well as constructors are clues that this may not be the best approach.

It’s a danger sign that this is using a sorted linked list. That is likely not an efficient data structure if there could be a large number of nodes.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperSparseBackingStore.h:64
&gt; +        bool operator==(const TileIndex&amp; other) const
&gt; +        {
&gt; +            return x() == other.x() &amp;&amp; y() == other.y();
&gt; +        }

Seems highly unlikely this function is needed, even if you retain this design. Pretty sure this is how == will work without writing any explicit code.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperSparseBackingStore.h:70
&gt; +        template&lt;class Encoder&gt;
&gt; +        void encode(Encoder&amp; encoder) const
&gt; +        {
&gt; +            encoder &lt;&lt; static_cast&lt;const WebCore::IntPoint&amp;&gt;(*this);
&gt; +        }

Seems to me this should work without this. The encoder would just slice the IntPoint? Again, not sure this pattern should be pursued.

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperSparseBackingStore.h:76
&gt; +        template &lt;class Decoder&gt;
&gt; +        static WARN_UNUSED_RETURN bool decode(Decoder&amp; decoder, TileIndex&amp; result)
&gt; +        {
&gt; +            return decoder.decode(static_cast&lt;WebCore::IntPoint&amp;&gt;(result));
&gt; +        }

The &quot;bool&quot; style is the deprecated style. We prefer the style that returns a std::optional.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847650</commentid>
    <comment_count>8</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-03-02 15:50:14 -0800</bug_when>
    <thetext>I completely misunderstood Don&apos;s comment, and overlooked Darin&apos;s comment.
I prefer linked list to hash map because the number of items is small.
If it&apos;s true, however, using hash map can&apos;t be a problem. And, no longer need the comparison.
I&apos;m going to use HashMap instead of SentinelLinkedList.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847740</commentid>
    <comment_count>9</comment_count>
      <attachid>453695</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-03-02 21:46:40 -0800</bug_when>
    <thetext>Created attachment 453695
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847741</commentid>
    <comment_count>10</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-03-02 21:49:28 -0800</bug_when>
    <thetext>By re-implementing with HashMap, I learned linked list seems better than HashMap for this case.
However, the cost isn&apos;t so important and using HashMap makes the code simple.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847742</commentid>
    <comment_count>11</comment_count>
      <attachid>453576</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-03-02 21:54:32 -0800</bug_when>
    <thetext>Comment on attachment 453576
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperSparseBackingStore.h:76
&gt;&gt; +        }
&gt; 
&gt; The &quot;bool&quot; style is the deprecated style. We prefer the style that returns a std::optional.

std::optional style decoder looks redundant, so most decoders use old style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848956</commentid>
    <comment_count>12</comment_count>
      <attachid>453695</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-03-07 14:06:35 -0800</bug_when>
    <thetext>Comment on attachment 453695
Patch

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

&gt; Source/WebKit/WebProcess/WebPage/wc/WCUpateInfo.h:70
&gt; +

If I rewrite this decoder code with the third decoder style (Bug#236246), the code looks like:

    template &lt;class Decoder&gt;
    static std::optional&lt;WCTileUpdate&gt; decode(Decoder&amp; decoder)
    {
        auto index = decoder.decode&lt;WebCore::TextureMapperSparseBackingStore::TileIndex&gt;();
        if (!index)
            return std::nullopt;
        auto willRemove = decoder.decode&lt;bool&gt;();
        if (!willRemove)
            return std::nullopt;
        if (*willRemove)
            return WCTileUpdate { *WTFMove(index), *WTFMove(willRemove) };
        auto backingStore = decoder.decode&lt;WCBackingStore&gt;();
        if (!backingStore)
            return std::nullopt;
        auto dirtyRect = decoder.decode&lt;WebCore::IntRect&gt;();
        if (!dirtyRect)
            return std::nullopt;
        return WCTileUpdate { *WTFMove(index), *WTFMove(willRemove), *WTFMove(backingStore), *WTFMove(dirtyRect) };
    }

Is this really good? Do you like this style? Should all decoders of WebKit be rewritten with this style?
I don&apos;t like this style. It looks too verbose and redundant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849420</commentid>
    <comment_count>13</comment_count>
      <attachid>453695</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2022-03-08 15:13:38 -0800</bug_when>
    <thetext>Comment on attachment 453695
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849669</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-03-09 06:31:28 -0800</bug_when>
    <thetext>Committed r291048 (248222@main): &lt;https://commits.webkit.org/248222@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 453695.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849670</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-09 06:32:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/90028388&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850948</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-03-14 11:09:09 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #12)
&gt; If I rewrite this decoder code with the third decoder style

I need to do some work on the decoder style. I want to do two things to make decoders much easier to write: one is to make the decoder get into a failed state so that everything decodes are nullopt, so you don’t have to check after decoding one thing before decoding another, another is to write something that helps check many optionals for null all at once so it&apos;s easy to write a return statement, maybe something that constructs an argument list and makes an object of some type, or nullopt if any of the optionals passed to it are nullopt.

This should make the decoders better than any current style, much better than all the separate declarations and returns needed for the bool style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850981</commentid>
    <comment_count>17</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2022-03-14 13:17:40 -0700</bug_when>
    <thetext>IIUC, the decoder will look like:

    template &lt;class Decoder&gt;
    static std::optional&lt;WCTileUpdate&gt; decode(Decoder&amp; decoder)
    {
        auto index = decoder.decode&lt;WebCore::TextureMapperSparseBackingStore::TileIndex&gt;();
        auto willRemove = decoder.decode&lt;bool&gt;();
        if (*willRemove)
            return constuctOrNullOpt&lt;WCTileUpdate&gt;(WTFMove(index), WTFMove(willRemove));
        auto backingStore = decoder.decode&lt;WCBackingStore&gt;();
        auto dirtyRect = decoder.decode&lt;WebCore::IntRect&gt;();
        return constuctOrNullOpt&lt;WCTileUpdate&gt;(WTFMove(index), WTFMove(willRemove), WTFMove(backingStore), WTFMove(dirtyRect) };
    }

But, I want to write a encoder/decoder for a simple default-constructible type like the following:

    template&lt;class Encoder&gt;
    void encode(Encoder&amp; encoder) const
    {
        encoder &lt;&lt; index &lt;&lt; willRemove &lt;&lt; backingStore &lt;&lt; dirtyRect;
    }

    template &lt;class Decoder&gt;
    static decode(Decoder&amp; decoder, WCTileUpdate&amp; result)
    {
        decoder &gt;&gt; result.index &gt;&gt; result.willRemove &gt;&gt; result.backingStore &gt;&gt; result.dirtyRect;
    }

If more complicated, 

    template&lt;class Encoder&gt;
    void encode(Encoder&amp; encoder) const
    {
        encoder &lt;&lt; index &lt;&lt; willRemove;
        if (!willRemove)
            encoder &lt;&lt; backingStore &lt;&lt; dirtyRect;
    }

    template &lt;class Decoder&gt;
    static decode(Decoder&amp; decoder, WCTileUpdate&amp; result)
    {
        decoder &gt;&gt; result.index &gt;&gt; result.willRemove;
        if (!decoder.didFail() &amp;&amp; !willRemove)
                decoder &gt;&gt; result.backingStore &gt;&gt; result.dirtyRect;
    }

I want to use std::optional only for non-default-constructible types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851001</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-03-14 14:03:48 -0700</bug_when>
    <thetext>The direction you describe is almost exactly what I am looking for, but I want something that doesn’t require a total rewrite once you have something more complicated than a struct; I think we can achieve it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453576</attachid>
            <date>2022-03-01 23:28:18 -0800</date>
            <delta_ts>2022-03-02 21:46:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237355-20220302162817.patch</filename>
            <type>text/plain</type>
            <size>36306</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwNzIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDVlYTA0ODY3MTMxNjZi
YWI2ZGQzYzgwNmMzNTJlNWUxMDViMGFmZC4uMmRjZTllMDI3OGUwZGJlNTFiZWUzNmZmMTgxYTQy
OGQ4MDk3OTAwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDIyLTAzLTAxICBGdWpp
aSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5DYWly
b10gSW1wcm92ZSBXQ1RpbGVkQmFja2luZyBhbmQgVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdT
dG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3
MzU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlOjpz
ZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3Rv
cmU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJTcGFyc2VCYWNraW5nU3RvcmU6OmRyYXdCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZTo6ZHJhd1JlcGFpbnRDb3VudGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmU6OmJlZ2luVXBkYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmU6OlNl
cXVlbnRpYWxVcGRhdGVyOjpTZXF1ZW50aWFsVXBkYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlOjpTZXF1ZW50aWFsVXBkYXRlcjo6flNlcXVl
bnRpYWxVcGRhdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTcGFyc2VCYWNr
aW5nU3RvcmU6OlNlcXVlbnRpYWxVcGRhdGVyOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlOjpTZXF1ZW50aWFsVXBkYXRl
cjo6cmVtb3ZlVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3BhcnNlQmFj
a2luZ1N0b3JlOjpUaWxlOjpUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJT
cGFyc2VCYWNraW5nU3RvcmU6OlRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZTo6
cmVtb3ZlVW5jb3ZlcmVkVGlsZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZTo6dGlsZURpbWVuc2lvbiBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlOjp1cGRh
dGVDb250ZW50cyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmUuaDoKKwogMjAyMi0wMy0wMSAgWW91ZW5u
IEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIFJlbW90ZVZpZGVv
U2FtcGxlIHN1cHBvcnQgZnJvbSBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGZl
NDFkMWQwNmU2Zjg2MDhkYzllYTUzOGY5Y2M2YzE0OTBiMjc0YmQuLjc2YjdhMTM4MmNmMTE0YmMx
NDg4MzI5ZjRjZDkwMWNjZThhODkwZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMjIt
MDMtMDEgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CisKKyAgICAg
ICAgW1dpbkNhaXJvXSBJbXByb3ZlIFdDVGlsZWRCYWNraW5nIGFuZCBUZXh0dXJlTWFwcGVyU3Bh
cnNlQmFja2luZ1N0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzczNTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlIHNpbXBseSBoYWQgYSBWZWN0
b3IgdG8gaGF2ZSBhbGwKKyAgICAgICAgdGlsZXMuIElmIGEgd2ViIHBhZ2UgaGFkIGEgdmVyeSBs
YXJnZSBsYXllciwgdGhlIHZlY3RvciB3YXMKKyAgICAgICAgZXh0ZW5kZWQgdG8gYmUgYWJsZSB0
byBrZWVwIGFsbCB0aWxlcywgYW5kIGl0IHBlcmZvcm1lZCBwb29ybHkuCisgICAgICAgIFVzZSBh
IFNlbnRpbmVsTGlua2VkTGlzdCB0byBrZWVwIHRpbGVzIG9ubHkgaW4gdGhlIGNvdmVyYWdlIHJl
Y3QuCisKKyAgICAgICAgR3JhcGhpY3NMYXllcldDIGhhZCBvbmx5IG9uZSBkaXJ0eSByZWN0LCBh
bmQgY3JlYXRlZCBhCisgICAgICAgIEltYWdlQnVmZmVyIGZvciBhbGwgdGlsZXMgdG8gdXBkYXRl
LiBDaGFuZ2UgaXQgdG8gaGF2ZSBvbmUgZGlydHkKKyAgICAgICAgcmVjdCBmb3Igb25lIHRpbGUs
IGFuZCBjcmVhdGUgYSBJbWFnZUJ1ZmZlciBmb3IgZXZlcnkgZGlydHkgdGlsZS4KKworICAgICAg
ICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldDU2NlbmU6OnVwZGF0ZSk6CisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0RyYXdpbmdBcmVhV0MuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpmbHVzaExheWVySW1hZ2VCdWZmZXJzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2Uvd2MvR3JhcGhpY3NMYXllcldDLmNwcDoKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXll
cldDOjpzZXRTaXplKToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllcldDOjpyZWN1cnNp
dmVDb21taXRDaGFuZ2VzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NUaWxl
R3JpZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXQ1RpbGVHcmlkOjpUaWxlOjpUaWxl
KToKKyAgICAgICAgKFdlYktpdDo6V0NUaWxlR3JpZDo6VGlsZTo6YWRkRGlydHlSZWN0KToKKyAg
ICAgICAgKFdlYktpdDo6V0NUaWxlR3JpZDo6VGlsZTo6Y2xlYXJEaXJ0eVJlY3QpOgorICAgICAg
ICAoV2ViS2l0OjpXQ1RpbGVHcmlkOjpUaWxlOjpoYXNEaXJ0eVJlY3QgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpXQ1RpbGVHcmlkOjpzZXRTaXplKToKKyAgICAgICAgKFdlYktpdDo6V0NUaWxl
R3JpZDo6dGlsZVJlY3RGcm9tUGl4ZWxSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V0NUaWxlR3Jp
ZDo6dGlsZVNpemVGcm9tUGl4ZWxTaXplKToKKyAgICAgICAgKFdlYktpdDo6V0NUaWxlR3JpZDo6
dGlsZVBpeGVsU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldDVGlsZUdyaWQ6OmFkZERp
cnR5UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldDVGlsZUdyaWQ6OmNsZWFyRGlydHlSZWN0cyk6
CisgICAgICAgIChXZWJLaXQ6OldDVGlsZUdyaWQ6OmNyZWF0ZVRpbGUpOgorICAgICAgICAoV2Vi
S2l0OjpXQ1RpbGVHcmlkOjpzZXRDb3ZlcmFnZVJlY3QpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS93Yy9XQ1RpbGVHcmlkLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXQ1RpbGVH
cmlkOjpUaWxlOjppbmRleCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldDVGlsZUdyaWQ6OlRp
bGU6OndpbGxSZW1vdmUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXQ1RpbGVHcmlkOjpUaWxl
OjpzZXRXaWxsUmVtb3ZlKToKKyAgICAgICAgKFdlYktpdDo6V0NUaWxlR3JpZDo6VGlsZTo6ZGly
dHlSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V0NUaWxlR3JpZDo6dGlsZXMpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ1VwYXRlSW5mby5oOgorICAgICAgICAoV2ViS2l0OjpX
Q1RpbGVVcGRhdGU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldDVGlsZVVwZGF0
ZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6V0NMYXllclVwYXRlSW5mbzo6ZW5jb2RlIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6V0NMYXllclVwYXRlSW5mbzo6ZGVjb2RlKToKKwogMjAy
Mi0wMy0wMSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVt
b3ZlIFJlbW90ZVZpZGVvU2FtcGxlIHN1cHBvcnQgZnJvbSBJbWFnZVRyYW5zZmVyU2Vzc2lvblZU
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZS5jcHAKaW5k
ZXggZTQ4ZGI5YjZlYWM1NDBiNTdhYTA2NjY1OGNiZDliMGE3ZDgxNTBiMC4uZTViMzlhOWEzNDRh
NjA4MDI5ZjljYTg4MmYzYjU1YjUxNDdkMTY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlLmNwcApAQCAtMzIsNDIgKzMyLDE1IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZTo6VGV4dHVy
ZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZShpbnQgdGlsZVNpemUpCi0gICAgOiBtX3RpbGVTaXpl
KHRpbGVTaXplKQotewotfQotCiB2b2lkIFRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmU6
OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBpZiAobV9zaXplID09IHNpemUp
CiAgICAgICAgIHJldHVybjsKLSAgICBtX3RpbGVzLmNsZWFyKCk7CiAgICAgbV9zaXplID0gc2l6
ZTsKLSAgICBhdXRvIHRpbGVzID0gdGlsZURpbWVuc2lvbigpOwotICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgdGlsZXMuaGVpZ2h0KCk7IHkrKykgewotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHRpbGVzLndpZHRoKCk7IHgrKykgewotICAgICAgICAgICAgSW50UmVjdCByZWN0ID0geyB4ICog
bV90aWxlU2l6ZSwgeSAqIG1fdGlsZVNpemUsIG1fdGlsZVNpemUsIG1fdGlsZVNpemUgfTsKLSAg
ICAgICAgICAgIHJlY3QuaW50ZXJzZWN0KHsgeyB9LCBtX3NpemUgfSk7Ci0gICAgICAgICAgICBt
X3RpbGVzLmFwcGVuZChUZXh0dXJlTWFwcGVyVGlsZShyZWN0KSk7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZTo6cmVtb3ZlVW5jb3Zl
cmVkVGlsZXMoY29uc3QgSW50UmVjdCYgY292ZXJhZ2UpCi17Ci0gICAgYXV0byBtaW5Db3ZlcmVk
WCA9IGNvdmVyYWdlLngoKSAvIG1fdGlsZVNpemU7Ci0gICAgYXV0byBtYXhDb3ZlcmVkWCA9IChj
b3ZlcmFnZS5tYXhYKCkgKyBtX3RpbGVTaXplIC0gMSkgLyBtX3RpbGVTaXplOwotICAgIGF1dG8g
bWluQ292ZXJlZFkgPSBjb3ZlcmFnZS55KCkgLyBtX3RpbGVTaXplOwotICAgIGF1dG8gbWF4Q292
ZXJlZFkgPSAoY292ZXJhZ2UubWF4WSgpICsgbV90aWxlU2l6ZSAtIDEpIC8gbV90aWxlU2l6ZTsK
LSAgICBhdXRvIHRpbGVzID0gdGlsZURpbWVuc2lvbigpOwotICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgdGlsZXMuaGVpZ2h0KCk7IHkrKykgewotICAgICAgICBib29sIGNvdmVyZWRZID0gbWluQ292
ZXJlZFkgPD0geSAmJiB5IDwgbWF4Q292ZXJlZFk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgdGlsZXMud2lkdGgoKTsgeCsrKSB7Ci0gICAgICAgICAgICBib29sIGNvdmVyZWQgPSBjb3Zl
cmVkWSAmJiBtaW5Db3ZlcmVkWCA8PSB4ICYmIHggPCBtYXhDb3ZlcmVkWDsKLSAgICAgICAgICAg
IGlmICghY292ZXJlZCkKLSAgICAgICAgICAgICAgICBtX3RpbGVzW3ggKyB5ICogdGlsZXMud2lk
dGgoKV0uc2V0VGV4dHVyZShudWxscHRyKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBtX3RpbGVz
LmZvckVhY2goW10oYXV0byogdGlsZSkgeworICAgICAgICB0aWxlLT5yZW1vdmUoKTsKKyAgICAg
ICAgZGVsZXRlIHRpbGU7CisgICAgfSk7CiB9CiAKIFRyYW5zZm9ybWF0aW9uTWF0cml4IFRleHR1
cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmU6OmFkanVzdGVkVHJhbnNmb3JtRm9yUmVjdChjb25z
dCBGbG9hdFJlY3QmIHRhcmdldFJlY3QpCkBAIC04MCwzMiArNTMsODYgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFw
cGVyJiB0ZXh0dXIKICAgICBJbnRSZWN0IHJlY3QgPSB7IHsgfSwgbV9zaXplIH07CiAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggYWRqdXN0ZWRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0gKiBhZGp1c3Rl
ZFRyYW5zZm9ybUZvclJlY3QodGFyZ2V0UmVjdCk7CiAgICAgZm9yIChhdXRvJiB0aWxlIDogbV90
aWxlcykKLSAgICAgICAgdGlsZS5wYWludCh0ZXh0dXJlTWFwcGVyLCBhZGp1c3RlZFRyYW5zZm9y
bSwgb3BhY2l0eSwgY2FsY3VsYXRlRXhwb3NlZFRpbGVFZGdlcyhyZWN0LCB0aWxlLnJlY3QoKSkp
OworICAgICAgICB0aWxlLnRpbGUoKS5wYWludCh0ZXh0dXJlTWFwcGVyLCBhZGp1c3RlZFRyYW5z
Zm9ybSwgb3BhY2l0eSwgY2FsY3VsYXRlRXhwb3NlZFRpbGVFZGdlcyhyZWN0LCB0aWxlLnRpbGUo
KS5yZWN0KCkpKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlOjpk
cmF3Qm9yZGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNvbnN0IENvbG9yJiBib3Jk
ZXJDb2xvciwgZmxvYXQgYm9yZGVyV2lkdGgsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKIHsKICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBhZGp1c3RlZFRyYW5zZm9ybSA9IHRyYW5zZm9ybSAqIGFkanVzdGVkVHJhbnNm
b3JtRm9yUmVjdCh0YXJnZXRSZWN0KTsKICAgICBmb3IgKGF1dG8mIHRpbGUgOiBtX3RpbGVzKQot
ICAgICAgICB0ZXh0dXJlTWFwcGVyLmRyYXdCb3JkZXIoYm9yZGVyQ29sb3IsIGJvcmRlcldpZHRo
LCB0aWxlLnJlY3QoKSwgYWRqdXN0ZWRUcmFuc2Zvcm0pOworICAgICAgICB0ZXh0dXJlTWFwcGVy
LmRyYXdCb3JkZXIoYm9yZGVyQ29sb3IsIGJvcmRlcldpZHRoLCB0aWxlLnRpbGUoKS5yZWN0KCks
IGFkanVzdGVkVHJhbnNmb3JtKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyU3BhcnNlQmFja2lu
Z1N0b3JlOjpkcmF3UmVwYWludENvdW50ZXIoVGV4dHVyZU1hcHBlciYgdGV4dHVyZU1hcHBlciwg
aW50IHJlcGFpbnRDb3VudCwgY29uc3QgQ29sb3ImIGJvcmRlckNvbG9yLCBjb25zdCBGbG9hdFJl
Y3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCiB7
CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYWRqdXN0ZWRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0g
KiBhZGp1c3RlZFRyYW5zZm9ybUZvclJlY3QodGFyZ2V0UmVjdCk7CiAgICAgZm9yIChhdXRvJiB0
aWxlIDogbV90aWxlcykKLSAgICAgICAgdGV4dHVyZU1hcHBlci5kcmF3TnVtYmVyKHJlcGFpbnRD
b3VudCwgYm9yZGVyQ29sb3IsIHRpbGUucmVjdCgpLmxvY2F0aW9uKCksIGFkanVzdGVkVHJhbnNm
b3JtKTsKKyAgICAgICAgdGV4dHVyZU1hcHBlci5kcmF3TnVtYmVyKHJlcGFpbnRDb3VudCwgYm9y
ZGVyQ29sb3IsIHRpbGUudGlsZSgpLnJlY3QoKS5sb2NhdGlvbigpLCBhZGp1c3RlZFRyYW5zZm9y
bSk7CiB9CiAKLUludFNpemUgVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZTo6dGlsZURp
bWVuc2lvbigpIGNvbnN0CitUZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlOjpTZXF1ZW50
aWFsVXBkYXRlciBUZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlOjpiZWdpblVwZGF0ZShU
ZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyKQogewotICAgIHJldHVybiB7IChtX3NpemUud2lk
dGgoKSArIG1fdGlsZVNpemUgLSAxKSAvIG1fdGlsZVNpemUsICAobV9zaXplLmhlaWdodCgpICsg
bV90aWxlU2l6ZSAtIDEpIC8gbV90aWxlU2l6ZSB9OworICAgIHJldHVybiB7ICp0aGlzLCB0ZXh0
dXJlTWFwcGVyIH07CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZTo6
dXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciYgdGV4dHVyZU1hcHBlciwgSW1hZ2UmIGltYWdl
LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCitUZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0
b3JlOjpTZXF1ZW50aWFsVXBkYXRlcjo6U2VxdWVudGlhbFVwZGF0ZXIoVGV4dHVyZU1hcHBlclNw
YXJzZUJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFw
cGVyKQorICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICwgbV90ZXh0dXJl
TWFwcGVyKHRleHR1cmVNYXBwZXIpCisgICAgLCBtX2N1cnJlbnQoYmFja2luZ1N0b3JlLm1fdGls
ZXMuYmVnaW4oKSkKK3sKK30KKworVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZTo6U2Vx
dWVudGlhbFVwZGF0ZXI6On5TZXF1ZW50aWFsVXBkYXRlcigpCit7CisjaWYgQVNTRVJUX0VOQUJM
RUQKKyAgICAvLyBUaWxlcyBzaG91bGQgYmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlcgorICAg
IHN0ZDo6b3B0aW9uYWw8VGlsZUluZGV4PiBpbmRleDsKKyAgICBmb3IgKGF1dG8mIHRpbGUgOiBt
X2JhY2tpbmdTdG9yZS5tX3RpbGVzKSB7CisgICAgICAgIGlmIChpbmRleCkKKyAgICAgICAgICAg
IEFTU0VSVCgqaW5kZXggPCB0aWxlLmluZGV4KCkpOworICAgICAgICBpbmRleCA9IHRpbGUuaW5k
ZXgoKTsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyU3BhcnNlQmFja2lu
Z1N0b3JlOjpTZXF1ZW50aWFsVXBkYXRlcjo6dXBkYXRlQ29udGVudHMoY29uc3QgVGlsZUluZGV4
JiBpbmRleCwgSW1hZ2UmIGltYWdlLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAg
d2hpbGUgKG1fY3VycmVudCAhPSBtX2JhY2tpbmdTdG9yZS5tX3RpbGVzLmVuZCgpKSB7CisgICAg
ICAgIGlmIChpbmRleCA9PSBtX2N1cnJlbnQtPmluZGV4KCkpIHsKKyAgICAgICAgICAgIG1fY3Vy
cmVudC0+dGlsZSgpLnVwZGF0ZUNvbnRlbnRzKG1fdGV4dHVyZU1hcHBlciwgJmltYWdlLCBkaXJ0
eVJlY3QpOworICAgICAgICAgICAgKyttX2N1cnJlbnQ7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGluZGV4IDwgbV9jdXJyZW50LT5pbmRleCgpKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICsrbV9jdXJyZW50OworICAgIH0KKyAgICBhdXRvKiB0aWxl
ID0gbmV3IFRpbGUoaW5kZXgsIGRpcnR5UmVjdCk7CisgICAgdGlsZS0+dGlsZSgpLnVwZGF0ZUNv
bnRlbnRzKG1fdGV4dHVyZU1hcHBlciwgJmltYWdlLCBkaXJ0eVJlY3QpOworICAgIG1fY3VycmVu
dC0+cHJlcGVuZCh0aWxlKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0
b3JlOjpTZXF1ZW50aWFsVXBkYXRlcjo6cmVtb3ZlVGlsZShjb25zdCBUaWxlSW5kZXgmIGluZGV4
KQoreworICAgIHdoaWxlIChtX2N1cnJlbnQgIT0gbV9iYWNraW5nU3RvcmUubV90aWxlcy5lbmQo
KSkgeworICAgICAgICBpZiAoaW5kZXggPT0gbV9jdXJyZW50LT5pbmRleCgpKSB7CisgICAgICAg
ICAgICBhdXRvJiBjdXJyZW50ID0gKm1fY3VycmVudDsKKyAgICAgICAgICAgICsrbV9jdXJyZW50
OworICAgICAgICAgICAgY3VycmVudC5yZW1vdmUoKTsKKyAgICAgICAgICAgIGRlbGV0ZSAmY3Vy
cmVudDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW5kZXgg
PCBtX2N1cnJlbnQtPmluZGV4KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgKyttX2N1
cnJlbnQ7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBUaWxlIG5vdCBmb3Vu
ZDsKK30KKworVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZTo6VGlsZTo6VGlsZShUaWxl
SW5kZXggaW5kZXgsIEludFJlY3QgcmVjdCkKKyAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgLCBt
X3RpbGUocmVjdCkKIHsKLSAgICBmb3IgKGF1dG8mIHRpbGUgOiBtX3RpbGVzKQotICAgICAgICB0
aWxlLnVwZGF0ZUNvbnRlbnRzKHRleHR1cmVNYXBwZXIsICZpbWFnZSwgZGlydHlSZWN0KTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU3Bh
cnNlQmFja2luZ1N0b3JlLmgKaW5kZXggZWE2NzM5ZTRkZGNhYTM4Y2JlYzg4ODk1MGE2ZjZlNTcw
ODdlYWNiMy4uNjQ3YzE5YTVlNGYyMjZjMGYwOWM5YTY5Y2U2MWRiZGU1YmFlMmFlOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJTcGFyc2VCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZS5oCkBAIC0zMSwyNyAr
MzEsOTcgQEAKIAogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKICNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyVGlsZS5oIgorI2luY2x1ZGUgPHd0Zi9TZW50aW5lbExpbmtlZExp
c3QuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU3BhcnNl
QmFja2luZ1N0b3JlIGZpbmFsIDogcHVibGljIFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUgewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFRleHR1cmVNYXBwZXJT
cGFyc2VCYWNraW5nU3RvcmUoaW50IHRpbGVTaXplKTsKKyAgICBjbGFzcyBUaWxlSW5kZXggOiBw
dWJsaWMgV2ViQ29yZTo6SW50UG9pbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgVGlsZUluZGV4
KCkgeyB9CisgICAgICAgIFRpbGVJbmRleChpbnQgeCwgaW50IHkpCisgICAgICAgICAgICA6IFdl
YkNvcmU6OkludFBvaW50KHgsIHkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgb3BlcmF0b3I8KGNvbnN0IFRpbGVJbmRleCYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmICh5KCkgPT0gb3RoZXIueSgpKQorICAgICAgICAgICAgICAgIHJldHVybiB4
KCkgPCBvdGhlci54KCk7CisgICAgICAgICAgICByZXR1cm4geSgpIDwgb3RoZXIueSgpOworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgVGlsZUluZGV4JiBvdGhlcikg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG90aGVyIDwgKnRoaXM7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVGlsZUluZGV4JiBvdGhlcikg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHgoKSA9PSBvdGhlci54KCkgJiYg
eSgpID09IG90aGVyLnkoKTsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+CisgICAgICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmPigqdGhpcyk7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
RGVjb2Rlcj4KKyAgICAgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCBUaWxlSW5kZXgmIHJlc3VsdCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlKHN0YXRpY19jYXN0PFdlYkNvcmU6OkludFBvaW50Jj4o
cmVzdWx0KSk7CisgICAgICAgIH0KKyAgICB9OworCiAgICAgdm9pZCBzZXRTaXplKGNvbnN0IElu
dFNpemUmKTsKLSAgICB2b2lkIHJlbW92ZVVuY292ZXJlZFRpbGVzKGNvbnN0IEludFJlY3QmIGNv
dmVyYWdlKTsKICAgICB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImLCBj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0KSBvdmVy
cmlkZTsKICAgICB2b2lkIGRyYXdCb3JkZXIoVGV4dHVyZU1hcHBlciYsIGNvbnN0IENvbG9yJiwg
ZmxvYXQgYm9yZGVyV2lkdGgsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3UmVwYWludENvdW50ZXIoVGV4dHVyZU1h
cHBlciYsIGludCByZXBhaW50Q291bnQsIGNvbnN0IENvbG9yJiwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSBvdmVycmlkZTsKLSAgICB2b2lkIHVwZGF0ZUNv
bnRlbnRzKFRleHR1cmVNYXBwZXImLCBJbWFnZSYsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7
CiAKIHByaXZhdGU6Ci0gICAgSW50U2l6ZSB0aWxlRGltZW5zaW9uKCkgY29uc3Q7CisgICAgY2xh
c3MgVGlsZTsKKworcHVibGljOgorICAgIGNsYXNzIFNlcXVlbnRpYWxVcGRhdGVyIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIHZvaWQgdXBkYXRlQ29udGVudHMoY29uc3QgVGlsZUluZGV4JiwgSW1h
Z2UmLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOworICAgICAgICB2b2lkIHJlbW92ZVRpbGUo
Y29uc3QgVGlsZUluZGV4Jik7CisgICAgICAgIH5TZXF1ZW50aWFsVXBkYXRlcigpOworCisgICAg
cHJvdGVjdGVkOgorICAgICAgICBmcmllbmQgVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9y
ZTsKKyAgICAgICAgU2VxdWVudGlhbFVwZGF0ZXIoVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdT
dG9yZSYsIFRleHR1cmVNYXBwZXImKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFRleHR1cmVN
YXBwZXJTcGFyc2VCYWNraW5nU3RvcmUmIG1fYmFja2luZ1N0b3JlOworICAgICAgICBUZXh0dXJl
TWFwcGVyJiBtX3RleHR1cmVNYXBwZXI7CisgICAgICAgIFNlbnRpbmVsTGlua2VkTGlzdDxUaWxl
LCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxUaWxlPj46Oml0ZXJhdG9yIG1fY3VycmVudDsKKyAgICB9
OworICAgIFNlcXVlbnRpYWxVcGRhdGVyIGJlZ2luVXBkYXRlKFRleHR1cmVNYXBwZXImKTsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgU2VxdWVudGlhbFVwZGF0ZXI7CisKKyAgICBjbGFzcyBUaWxl
IDogcHVibGljIEJhc2ljUmF3U2VudGluZWxOb2RlPFRpbGU+IHsKKyAgICAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRpbGUpOworICAg
IHB1YmxpYzoKKyAgICAgICAgVGlsZShUaWxlSW5kZXgsIEludFJlY3QpOworICAgICAgICBUaWxl
SW5kZXggaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgICAgIFRleHR1cmVN
YXBwZXJUaWxlJiB0aWxlKCkgeyByZXR1cm4gbV90aWxlOyB9CisKKyAgICBwcml2YXRlOgorICAg
ICAgICBUaWxlSW5kZXggbV9pbmRleDsKKyAgICAgICAgVGV4dHVyZU1hcHBlclRpbGUgbV90aWxl
OworICAgIH07CisKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhZGp1c3RlZFRyYW5zZm9ybUZv
clJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAKLSAgICBpbnQgbV90aWxlU2l6ZTsKLSAgICBWZWN0
b3I8VGV4dHVyZU1hcHBlclRpbGU+IG1fdGlsZXM7CiAgICAgSW50U2l6ZSBtX3NpemU7CisgICAg
U2VudGluZWxMaW5rZWRMaXN0PFRpbGUsIEJhc2ljUmF3U2VudGluZWxOb2RlPFRpbGU+PiBtX3Rp
bGVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuY3BwIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL3djL1dDU2NlbmUuY3BwCmluZGV4IDJjOTkyM2EyMTU4YmRkMzFh
ODMzZjcyN2M2NGNjZTc3ZjVkNDAzNGQuLjhjYWI3MjdjM2EyOTA0ZDllN2IzYWQ3MTYwMGFmZDA5
MDM4NTE1MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93
Yy9XQ1NjZW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mvd2Mv
V0NTY2VuZS5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJMYXllciB0ZXhtYXBMYXllcjsKLSAgICBzdGQ6Om9wdGlvbmFsPFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9y
ZT4gYmFja2luZ1N0b3JlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyTGF5ZXI+IGJhY2tkcm9wTGF5ZXI7CiB9OwogCkBAIC0xMjcsMjQgKzEyNywyOSBAQCBzdGQ6
Om9wdGlvbmFsPFVwZGF0ZUluZm8+IFdDU2NlbmU6OnVwZGF0ZShXQ1VwYXRlSW5mbyYmIHVwZGF0
ZSkKICAgICAgICAgaWYgKGxheWVyVXBkYXRlLmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpCYWNr
Z3JvdW5kKSB7CiAgICAgICAgICAgICBpZiAobGF5ZXJVcGRhdGUuaGFzQmFja2luZ1N0b3JlKSB7
CiAgICAgICAgICAgICAgICAgaWYgKCFsYXllci0+YmFja2luZ1N0b3JlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGludCB0aWxlU2l6ZSA9IDUxMjsKLSAgICAgICAgICAgICAgICAgICAg
bGF5ZXItPmJhY2tpbmdTdG9yZS5lbXBsYWNlPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTcGFyc2VC
YWNraW5nU3RvcmU+KHRpbGVTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tp
bmdTdG9yZSA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6VGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdT
dG9yZT4oKTsKICAgICAgICAgICAgICAgICAgICAgYXV0byYgYmFja2luZ1N0b3JlID0gKmxheWVy
LT5iYWNraW5nU3RvcmU7CiAgICAgICAgICAgICAgICAgICAgIGxheWVyLT50ZXhtYXBMYXllci5z
ZXRCYWNrZ3JvdW5kQ29sb3IoeyB9KTsKICAgICAgICAgICAgICAgICAgICAgbGF5ZXItPnRleG1h
cExheWVyLnNldEJhY2tpbmdTdG9yZSgmYmFja2luZ1N0b3JlKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgYXV0byYgYmFja2luZ1N0b3JlID0gKmxheWVyLT5iYWNraW5nU3Rv
cmU7CiAgICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlLnNldFNpemUoV2ViQ29yZTo6SW50U2l6
ZShsYXllci0+dGV4bWFwTGF5ZXIuc2l6ZSgpKSk7Ci0gICAgICAgICAgICAgICAgYmFja2luZ1N0
b3JlLnJlbW92ZVVuY292ZXJlZFRpbGVzKGxheWVyVXBkYXRlLmNvdmVyYWdlUmVjdCk7Ci0gICAg
ICAgICAgICAgICAgYXV0byBiaXRtYXAgPSBsYXllclVwZGF0ZS5iYWNraW5nU3RvcmUuYml0bWFw
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGJpdG1hcCkgewotICAgICAgICAgICAgICAgICAgICBh
dXRvIGltYWdlID0gYml0bWFwLT5jcmVhdGVJbWFnZSgpOwotICAgICAgICAgICAgICAgICAgICBi
YWNraW5nU3RvcmUudXBkYXRlQ29udGVudHMoKm1fdGV4dHVyZU1hcHBlciwgKmltYWdlLCBsYXll
clVwZGF0ZS5kaXJ0eVJlY3QpOworICAgICAgICAgICAgICAgIGF1dG8gdXBkYXRlciA9IGJhY2tp
bmdTdG9yZS5iZWdpblVwZGF0ZSgqbV90ZXh0dXJlTWFwcGVyKTsKKyAgICAgICAgICAgICAgICBm
b3IgKGF1dG8mIHRpbGVVcGRhdGUgOiBsYXllclVwZGF0ZS50aWxlVXBkYXRlKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICh0aWxlVXBkYXRlLndpbGxSZW1vdmUpCisgICAgICAgICAgICAgICAg
ICAgICAgICB1cGRhdGVyLnJlbW92ZVRpbGUodGlsZVVwZGF0ZS5pbmRleCk7CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBiaXRtYXAgPSB0
aWxlVXBkYXRlLmJhY2tpbmdTdG9yZS5iaXRtYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChiaXRtYXApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGltYWdlID0g
Yml0bWFwLT5jcmVhdGVJbWFnZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0
ZXIudXBkYXRlQ29udGVudHModGlsZVVwZGF0ZS5pbmRleCwgKmltYWdlLCB0aWxlVXBkYXRlLmRp
cnR5UmVjdCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgIGxheWVyLT50ZXhtYXBMYXllci5zZXRCYWNrZ3JvdW5kQ29sb3IobGF5ZXJVcGRhdGUuYmFj
a2dyb3VuZENvbG9yKTsKICAgICAgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0QmFj
a2luZ1N0b3JlKG51bGxwdHIpOwotICAgICAgICAgICAgICAgIGxheWVyLT5iYWNraW5nU3RvcmUg
PSBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tpbmdTdG9yZSA9IG51
bGxwdHI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKGxheWVyVXBkYXRl
LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpTb2xpZENvbG9yKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21h
a2UKaW5kZXggMjRiZDg0MjY3MmFhODEwMWQxYzFlYjZkYjQzMzVmMWU1ZjBiODQwZC4uYWNjYTY4
ZjM5YTJiZmE1YmQ4ZjAzYzA4NGRhZWVkNmRhMDM1MjM0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNt
YWtlCkBAIC0xMDUsNiArMTA1LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5jcHAKICAgICBXZWJQcm9jZXNzL1dl
YlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS93Yy9X
Q0xheWVyRmFjdG9yeS5jcHAKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NUaWxlR3JpZC5j
cHAKIAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS93aW4vV2ViUGFnZVdpbi5jcHAKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmNw
cAppbmRleCBiZjEyYjExNDc3ZTMyODFlNTdhMzdiMzhkYTE4MDM0ZDVmOTUxZTliLi42MGQ5ZWI2
ZWI4ODYwZDQzNDk1Y2FjZmFkOWYzOGY0Zjg5NTdkNTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9EcmF3aW5nQXJlYVdDLmNwcApAQCAtMTkzLDkg
KzE5MywxMSBAQCBzdGF0aWMgdm9pZCBmbHVzaExheWVySW1hZ2VCdWZmZXJzKFdDVXBhdGVJbmZv
JiBpbmZvKQogewogICAgIGZvciAoYXV0byYgbGF5ZXJJbmZvIDogaW5mby5jaGFuZ2VkTGF5ZXJz
KSB7CiAgICAgICAgIGlmIChsYXllckluZm8uY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OkJhY2tn
cm91bmQpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIGltYWdlID0gbGF5ZXJJbmZvLmJhY2tpbmdT
dG9yZS5pbWFnZUJ1ZmZlcigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8gZmx1c2hlciA9
IGltYWdlLT5jcmVhdGVGbHVzaGVyKCkpCi0gICAgICAgICAgICAgICAgICAgIGZsdXNoZXItPmZs
dXNoKCk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHRpbGVVcGRhdGUgOiBsYXllckluZm8udGls
ZVVwZGF0ZSkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvIGltYWdlID0gdGlsZVVwZGF0ZS5i
YWNraW5nU3RvcmUuaW1hZ2VCdWZmZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYXV0
byBmbHVzaGVyID0gaW1hZ2UtPmNyZWF0ZUZsdXNoZXIoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZsdXNoZXItPmZsdXNoKCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5jcHAKaW5kZXggNzMxNGViYjE5NzIyNmI3MjUwMGYx
NWVjZGQ1NmI3NzEzMjRmMGJlMi4uYThjMzFiZmE1ODllMzc3MzllNzgyYzJhMWRmMDYyNWI5YjNi
MTc2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3Jh
cGhpY3NMYXllcldDLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93
Yy9HcmFwaGljc0xheWVyV0MuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiR3JhcGhp
Y3NMYXllcldDLmgiCiAKICNpbmNsdWRlICJXQ1BsYXRmb3JtTGF5ZXJHQ0dMLmgiCisjaW5jbHVk
ZSAiV0NUaWxlR3JpZC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvVHJhbnNmb3JtU3RhdGUuaD4KIAog
bmFtZXNwYWNlIFdlYktpdCB7CkBAIC00MSw1NyArNDIsNTQgQEAgcHVibGljOgogCiAgICAgYm9v
bCBwYWludEFuZEZsdXNoKFdDTGF5ZXJVcGF0ZUluZm8mIHVwZGF0ZSkKICAgICB7Ci0gICAgICAg
IHVwZGF0ZS5kaXJ0eVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fZGlydHlSZWN0KTsKLSAgICAg
ICAgdXBkYXRlLmNvdmVyYWdlUmVjdCA9IG1fY292ZXJhZ2VSZWN0OwotICAgICAgICBtX2RpcnR5
UmVjdCA9IHsgfTsKLSAgICAgICAgYXV0byYgaW1hZ2VSZWN0ID0gdXBkYXRlLmRpcnR5UmVjdDsK
LSAgICAgICAgaWYgKGltYWdlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGF1dG8gaW1hZ2UgPSBtX293bmVyLmNyZWF0ZUltYWdlQnVmZmVyKGltYWdl
UmVjdC5zaXplKCkpOwotICAgICAgICBhdXRvJiBjb250ZXh0ID0gaW1hZ2UtPmNvbnRleHQoKTsK
LSAgICAgICAgY29udGV4dC50cmFuc2xhdGUoLWltYWdlUmVjdC54KCksIC1pbWFnZVJlY3QueSgp
KTsKLSAgICAgICAgbV9vd25lci5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCB1
cGRhdGUuZGlydHlSZWN0KTsKLSAgICAgICAgaW1hZ2UtPmZsdXNoRHJhd2luZ0NvbnRleHRBc3lu
YygpOwotICAgICAgICB1cGRhdGUuYmFja2luZ1N0b3JlLnNldEltYWdlQnVmZmVyKFdURk1vdmUo
aW1hZ2UpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJvb2wgcmVwYWludGVkID0g
ZmFsc2U7CisgICAgICAgIGZvciAoYXV0byYgdGlsZSA6IG1fdGlsZUdyaWQudGlsZXMoKSkgewor
ICAgICAgICAgICAgV0NUaWxlVXBkYXRlIHRpbGVVcGRhdGU7CisgICAgICAgICAgICB0aWxlVXBk
YXRlLmluZGV4ID0gdGlsZS5pbmRleCgpOworICAgICAgICAgICAgdGlsZVVwZGF0ZS53aWxsUmVt
b3ZlID0gdGlsZS53aWxsUmVtb3ZlKCk7CisgICAgICAgICAgICBpZiAodGlsZVVwZGF0ZS53aWxs
UmVtb3ZlKSB7CisgICAgICAgICAgICAgICAgdXBkYXRlLnRpbGVVcGRhdGUuYXBwZW5kKFdURk1v
dmUodGlsZVVwZGF0ZSkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKCF0aWxlLmhhc0RpcnR5UmVjdCgpKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgcmVwYWludGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGF1
dG8mIGRpcnR5UmVjdCA9IHRpbGUuZGlydHlSZWN0KCk7CisgICAgICAgICAgICB0aWxlVXBkYXRl
LmRpcnR5UmVjdCA9IGRpcnR5UmVjdDsKKyAgICAgICAgICAgIGF1dG8gaW1hZ2UgPSBtX293bmVy
LmNyZWF0ZUltYWdlQnVmZmVyKGRpcnR5UmVjdC5zaXplKCkpOworICAgICAgICAgICAgYXV0byYg
Y29udGV4dCA9IGltYWdlLT5jb250ZXh0KCk7CisgICAgICAgICAgICBjb250ZXh0LnRyYW5zbGF0
ZSgtZGlydHlSZWN0LngoKSwgLWRpcnR5UmVjdC55KCkpOworICAgICAgICAgICAgbV9vd25lci5w
YWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBkaXJ0eVJlY3QpOworICAgICAgICAg
ICAgaW1hZ2UtPmZsdXNoRHJhd2luZ0NvbnRleHRBc3luYygpOworICAgICAgICAgICAgdGlsZVVw
ZGF0ZS5iYWNraW5nU3RvcmUuc2V0SW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSkpOworICAgICAg
ICAgICAgdXBkYXRlLnRpbGVVcGRhdGUuYXBwZW5kKFdURk1vdmUodGlsZVVwZGF0ZSkpOworICAg
ICAgICB9CisgICAgICAgIG1fdGlsZUdyaWQuY2xlYXJEaXJ0eVJlY3RzKCk7CisgICAgICAgIHJl
dHVybiByZXBhaW50ZWQ7CiAgICAgfQogCi0gICAgdm9pZCBzZXREaXJ0eVJlY3QoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiByZWN0KQorICAgIHZvaWQgc2V0U2l6ZShjb25zdCBGbG9hdFNpemUm
IHNpemUpCiAgICAgewotICAgICAgICBtX2RpcnR5UmVjdC51bml0ZShyZWN0KTsKKyAgICAgICAg
bV90aWxlR3JpZC5zZXRTaXplKGV4cGFuZGVkSW50U2l6ZShzaXplKSk7CiAgICAgfQogCi0gICAg
Ym9vbCBoYXNEaXJ0eVJlY3QoKQorICAgIHZvaWQgc2V0RGlydHlSZWN0KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgcmVjdCkKICAgICB7Ci0gICAgICAgIHJldHVybiAhbV9kaXJ0eVJlY3QuaXNF
bXB0eSgpOworICAgICAgICBtX3RpbGVHcmlkLmFkZERpcnR5UmVjdChlbmNsb3NpbmdJbnRSZWN0
KHJlY3QpKTsKICAgICB9CiAKLSAgICBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZygpIGNvbnN0
IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8V0NUaWxlZEJhY2tpbmcqPih0aGlzKTsgfTsKLQotICAgIElu
dFJlY3QgYWRqdXN0Q292ZXJhZ2VSZWN0KEludFJlY3QgY292ZXJhZ2UpCisgICAgYm9vbCB1cGRh
dGVDb3ZlcmFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIHsKLSAgICAgICAgaW50
IHggPSBjb3ZlcmFnZS54KCkgLyB0aWxlU2l6ZSgpLndpZHRoKCkgKiB0aWxlU2l6ZSgpLndpZHRo
KCk7Ci0gICAgICAgIGludCB5ID0gY292ZXJhZ2UueSgpIC8gdGlsZVNpemUoKS5oZWlnaHQoKSAq
IHRpbGVTaXplKCkuaGVpZ2h0KCk7Ci0gICAgICAgIGludCBtYXhYID0gKGNvdmVyYWdlLm1heFgo
KSArIHRpbGVTaXplKCkud2lkdGgoKSAtIDEpIC8gdGlsZVNpemUoKS53aWR0aCgpICogdGlsZVNp
emUoKS53aWR0aCgpOwotICAgICAgICBpbnQgbWF4WSA9IChjb3ZlcmFnZS5tYXhZKCkgKyB0aWxl
U2l6ZSgpLmhlaWdodCgpIC0gMSkgLyB0aWxlU2l6ZSgpLmhlaWdodCgpICogdGlsZVNpemUoKS5o
ZWlnaHQoKTsKLSAgICAgICAgSW50UmVjdCBuZXdDb3ZlcmFnZSB7IHgsIHksIG1heFggLSB4LCBt
YXhZIC0geSB9OwotICAgICAgICBuZXdDb3ZlcmFnZS5pbnRlcnNlY3QoYm91bmRzKCkpOwotICAg
ICAgICByZXR1cm4gbmV3Q292ZXJhZ2U7CisgICAgICAgIHJldHVybiBtX3RpbGVHcmlkLnNldENv
dmVyYWdlUmVjdChlbmNsb3NpbmdJbnRSZWN0KHJlY3QpKTsKICAgICB9CiAKKyAgICBUaWxlZEJh
Y2tpbmcqIHRpbGVkQmFja2luZygpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8V0NUaWxlZEJh
Y2tpbmcqPih0aGlzKTsgfTsKKwogICAgIC8vIFRpbGVkQmFja2luZyBvdmVycmlkZQogICAgIHZv
aWQgc2V0VmlzaWJsZVJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CiAgICAgRmxvYXRS
ZWN0IHZpc2libGVSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4geyB9OyB9OwogICAgIHZvaWQg
c2V0TGF5b3V0Vmlld3BvcnRSZWN0KHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PikgZmluYWwgeyB9
Ci0gICAgdm9pZCBzZXRDb3ZlcmFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBmaW5hbAot
ICAgIHsKLSAgICAgICAgYXV0byBuZXdDb3ZlcmFnZSA9IGFkanVzdENvdmVyYWdlUmVjdChlbmNs
b3NpbmdJbnRSZWN0KHJlY3QpKTsKLSAgICAgICAgV2ViQ29yZTo6UmVnaW9uIHJlZ2lvbihuZXdD
b3ZlcmFnZSk7Ci0gICAgICAgIHJlZ2lvbi5zdWJ0cmFjdChtX2NvdmVyYWdlUmVjdCk7Ci0gICAg
ICAgIHNldERpcnR5UmVjdChyZWdpb24uYm91bmRzKCkpOwotICAgICAgICBtX2NvdmVyYWdlUmVj
dCA9IG5ld0NvdmVyYWdlOwotICAgICAgICBtX2RpcnR5UmVjdC5pbnRlcnNlY3QobV9jb3ZlcmFn
ZVJlY3QpOwotICAgIH0KKyAgICB2b2lkIHNldENvdmVyYWdlUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpIGZpbmFsIHsgfQogICAgIEZsb2F0UmVjdCBjb3ZlcmFnZVJlY3QoKSBjb25zdCBmaW5h
bCB7IHJldHVybiB7IH07IH07CiAgICAgYm9vbCB0aWxlc1dvdWxkQ2hhbmdlRm9yQ292ZXJhZ2VS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dm9pZCBzZXRUaWxlZFNjcm9sbGluZ0luZGljYXRvclBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQm
KSBmaW5hbCB7IH0KQEAgLTEwOCw3ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgRmxvYXRSZWN0IGFk
anVzdFRpbGVDb3ZlcmFnZVJlY3RGb3JTY3JvbGxpbmcoY29uc3QgRmxvYXRSZWN0JiBjb3ZlcmFn
ZVJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgbmV3U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBwcmV2aW91
c1Zpc2libGVSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGN1cnJlbnRWaXNpYmxlUmVjdCwgZmxvYXQg
Y29udGVudHNTY2FsZSkgZmluYWwgeyByZXR1cm4geyB9OyB9OwogICAgIHZvaWQgd2lsbFN0YXJ0
TGl2ZVJlc2l6ZSgpIGZpbmFsIHsgfTsKICAgICB2b2lkIGRpZEVuZExpdmVSZXNpemUoKSBmaW5h
bCB7IH07Ci0gICAgSW50U2l6ZSB0aWxlU2l6ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgNTEy
LCA1MTIgfTsgfTsKKyAgICBJbnRTaXplIHRpbGVTaXplKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV90aWxlR3JpZC50aWxlUGl4ZWxTaXplKCk7IH0KICAgICB2b2lkIHJldmFsaWRhdGVUaWxlcygp
IGZpbmFsIHsgfQogICAgIHZvaWQgZm9yY2VSZXBhaW50KCkgZmluYWwgeyB9CiAgICAgSW50UmVj
dCB0aWxlR3JpZEV4dGVudCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQpAQCAtMTMzLDkg
KzEzMSw4IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBib29sIG1faXNJbldpbmRvdyB7IGZh
bHNlIH07Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBtX2NvdmVyYWdlUmVjdDsKLSAgICBXZWJDb3Jl
OjpGbG9hdFJlY3QgbV9kaXJ0eVJlY3Q7CiAgICAgR3JhcGhpY3NMYXllcldDJiBtX293bmVyOwor
ICAgIFdDVGlsZUdyaWQgbV90aWxlR3JpZDsKIH07CiAKIApAQCAtMjgyLDYgKzI3OSw3IEBAIHZv
aWQgR3JhcGhpY3NMYXllcldDOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKICAgICBp
ZiAoc2l6ZSA9PSBtX3NpemUpCiAgICAgICAgIHJldHVybjsKICAgICBHcmFwaGljc0xheWVyOjpz
ZXRTaXplKHNpemUpOworICAgIG1fdGlsZWRCYWNraW5nLT5zZXRTaXplKHNpemUpOwogICAgIG5v
dGVMYXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpHZW9tZXRyeSk7CiB9CiAKQEAg
LTY5NSw4ICs2OTMsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6cmVjdXJzaXZlQ29tbWl0Q2hh
bmdlcyhjb25zdCBUcmFuc2Zvcm1TdGF0ZSYgc3RhdGUpCiAKICAgICBib29sIGFjY3VtdWxhdGVU
cmFuc2Zvcm0gPSBhY2N1bXVsYXRlc1RyYW5zZm9ybSgqdGhpcyk7CiAgICAgVmlzaWJsZUFuZENv
dmVyYWdlUmVjdHMgcmVjdHMgPSBjb21wdXRlVmlzaWJsZUFuZENvdmVyYWdlUmVjdChsb2NhbFN0
YXRlLCBhY2N1bXVsYXRlVHJhbnNmb3JtKTsKLSAgICBtX3RpbGVkQmFja2luZy0+c2V0Q292ZXJh
Z2VSZWN0KHJlY3RzLmNvdmVyYWdlUmVjdCk7Ci0gICAgaWYgKG1fdGlsZWRCYWNraW5nLT5oYXNE
aXJ0eVJlY3QoKSkKKyAgICBib29sIG5lZWRzVG9QYWludCA9IG1fdGlsZWRCYWNraW5nLT51cGRh
dGVDb3ZlcmFnZVJlY3QocmVjdHMuY292ZXJhZ2VSZWN0KTsKKyAgICBpZiAobmVlZHNUb1BhaW50
KQogICAgICAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6QmFja2dy
b3VuZCwgRG9udFNjaGVkdWxlRmx1c2gpOwogCiAgICAgZmx1c2hDb21wb3NpdGluZ1N0YXRlRm9y
VGhpc0xheWVyT25seSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2Uvd2MvV0NUaWxlR3JpZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS93Yy9XQ1RpbGVHcmlkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MTdkYjliOGNkODI3ZjY1NTdiMzQxMjI2
OWE4YTRmYzIzOTU2N2JhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2Uvd2MvV0NUaWxlR3JpZC5jcHAKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjIgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldDVGlsZUdyaWQuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dD
VGlsZUdyaWQ6OlRpbGU6OlRpbGUoVGlsZUluZGV4IGluZGV4LCBXZWJDb3JlOjpJbnRSZWN0IHJl
Y3QpCisgICAgOiBtX2luZGV4KGluZGV4KQorICAgICwgbV90aWxlUmVjdChyZWN0KQorICAgICwg
bV9kaXJ0eVJlY3QocmVjdCkKK3sKK30KKwordm9pZCBXQ1RpbGVHcmlkOjpUaWxlOjphZGREaXJ0
eVJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIFdlYkNvcmU6
OkludFJlY3QgcmVjdCB7IGRpcnR5UmVjdCB9OworICAgIHJlY3QuaW50ZXJzZWN0KG1fdGlsZVJl
Y3QpOworICAgIG1fZGlydHlSZWN0LnVuaXRlKHJlY3QpOworfQorCit2b2lkIFdDVGlsZUdyaWQ6
OlRpbGU6OmNsZWFyRGlydHlSZWN0KCkKK3sKKyAgICBtX2RpcnR5UmVjdCA9IHsgfTsKK30KKwor
Ym9vbCBXQ1RpbGVHcmlkOjpUaWxlOjpoYXNEaXJ0eVJlY3QoKSBjb25zdAoreworICAgIHJldHVy
biAhbV9kaXJ0eVJlY3QuaXNFbXB0eSgpOworfQorCit2b2lkIFdDVGlsZUdyaWQ6OnNldFNpemUo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBtX3NpemUgPSBzaXplOworICAg
IG1fdGlsZXMuZm9yRWFjaChbXShhdXRvKiBpdGVyKSB7CisgICAgICAgIGl0ZXItPnJlbW92ZSgp
OworICAgICAgICBkZWxldGUgaXRlcjsKKyAgICB9KTsKK30KKworV2ViQ29yZTo6SW50UmVjdCBX
Q1RpbGVHcmlkOjp0aWxlUmVjdEZyb21QaXhlbFJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
cmVjdCkKK3sKKyAgICBpbnQgeCA9IHN0ZDo6bWF4KHJlY3QueCgpLCAwKTsKKyAgICBpbnQgeSA9
IHN0ZDo6bWF4KHJlY3QueSgpLCAwKTsKKyAgICBpbnQgbWF4WCA9IHN0ZDo6bWF4KHJlY3QubWF4
WCgpLCAwKTsKKyAgICBpbnQgbWF4WSA9IHN0ZDo6bWF4KHJlY3QubWF4WSgpLCAwKTsKKyAgICB4
IC89IHRpbGVQaXhlbFNpemUoKS53aWR0aCgpOworICAgIHkgLz0gdGlsZVBpeGVsU2l6ZSgpLmhl
aWdodCgpOworICAgIG1heFggPSAobWF4WCArIHRpbGVQaXhlbFNpemUoKS53aWR0aCgpIC0gMSkg
LyB0aWxlUGl4ZWxTaXplKCkud2lkdGgoKTsKKyAgICBtYXhZID0gKG1heFkgKyB0aWxlUGl4ZWxT
aXplKCkuaGVpZ2h0KCkgLSAxKSAvIHRpbGVQaXhlbFNpemUoKS5oZWlnaHQoKTsKKyAgICByZXR1
cm4geyB4LCB5LCBtYXhYIC0geCwgbWF4WSAtIHkgfTsKK30KKworV2ViQ29yZTo6SW50U2l6ZSBX
Q1RpbGVHcmlkOjp0aWxlU2l6ZUZyb21QaXhlbFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
c2l6ZSkKK3sKKyAgICBpbnQgd2lkdGggPSAoc2l6ZS53aWR0aCgpICsgdGlsZVBpeGVsU2l6ZSgp
LndpZHRoKCkgLSAxKSAvIHRpbGVQaXhlbFNpemUoKS53aWR0aCgpOworICAgIGludCBoZWlnaHQg
PSAoc2l6ZS5oZWlnaHQoKSArIHRpbGVQaXhlbFNpemUoKS5oZWlnaHQoKSAtIDEpIC8gdGlsZVBp
eGVsU2l6ZSgpLmhlaWdodCgpOworICAgIHJldHVybiB7IHdpZHRoLCBoZWlnaHQgfTsKK30KKwor
V2ViQ29yZTo6SW50U2l6ZSBXQ1RpbGVHcmlkOjp0aWxlUGl4ZWxTaXplKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4geyA1MTIsIDUxMiB9OworfQorCit2b2lkIFdDVGlsZUdyaWQ6OmFkZERpcnR5UmVj
dChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgbV90aWxlcy5mb3JF
YWNoKAorICAgICAgICBbJl0oYXV0byBpdGVyKSB7CisgICAgICAgICAgICBpdGVyLT5hZGREaXJ0
eVJlY3QoZGlydHlSZWN0KTsKKyAgICAgICAgfSk7Cit9CisKK3ZvaWQgV0NUaWxlR3JpZDo6Y2xl
YXJEaXJ0eVJlY3RzKCkKK3sKKyAgICBtX3RpbGVzLmZvckVhY2goCisgICAgICAgIFsmXShhdXRv
KiBpdGVyKSB7CisgICAgICAgICAgICBpZiAoaXRlci0+d2lsbFJlbW92ZSgpKSB7CisgICAgICAg
ICAgICAgICAgaXRlci0+cmVtb3ZlKCk7CisgICAgICAgICAgICAgICAgZGVsZXRlIGl0ZXI7Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBpdGVyLT5jbGVhckRpcnR5UmVjdCgp
OworICAgICAgICB9KTsKK30KKworV0NUaWxlR3JpZDo6VGlsZSogV0NUaWxlR3JpZDo6Y3JlYXRl
VGlsZShUaWxlSW5kZXggaW5kZXgpCit7CisgICAgaW50IHgxID0gaW5kZXgueCgpICogdGlsZVBp
eGVsU2l6ZSgpLndpZHRoKCk7CisgICAgaW50IHkxID0gaW5kZXgueSgpICogdGlsZVBpeGVsU2l6
ZSgpLmhlaWdodCgpOworICAgIGludCB4MiA9IHN0ZDo6bWluKHgxICsgdGlsZVBpeGVsU2l6ZSgp
LndpZHRoKCksIG1fc2l6ZS53aWR0aCgpKTsKKyAgICBpbnQgeTIgPSBzdGQ6Om1pbih5MSArIHRp
bGVQaXhlbFNpemUoKS5oZWlnaHQoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICBXZWJDb3JlOjpJ
bnRSZWN0IHJlY3QgeyB4MSwgeTEsIHgyIC0geDEsIHkyIC0geTEgfTsKKyAgICBBU1NFUlQoV2Vi
Q29yZTo6SW50UmVjdCh7IH0sIG1fc2l6ZSkuY29udGFpbnMocmVjdCkpOworICAgIHJldHVybiBu
ZXcgVGlsZShpbmRleCwgcmVjdCk7Cit9CisKK2Jvb2wgV0NUaWxlR3JpZDo6c2V0Q292ZXJhZ2VS
ZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyYWdlKQoreworICAgIGJvb2wgbmVlZHNU
b1BhaW50ID0gZmFsc2U7CisgICAgYXV0byB0aWxlUmVjdCA9IHRpbGVSZWN0RnJvbVBpeGVsUmVj
dChjb3ZlcmFnZSk7CisgICAgYXV0byBjdXJyZW50ID0gbV90aWxlcy5iZWdpbigpOworICAgIGZv
ciAoaW50IHkgPSB0aWxlUmVjdC55KCk7IHkgPCB0aWxlUmVjdC5tYXhZKCk7IHkrKykgeworICAg
ICAgICBmb3IgKGludCB4ID0gdGlsZVJlY3QueCgpOyB4IDwgdGlsZVJlY3QubWF4WCgpOyB4Kysp
IHsKKyAgICAgICAgICAgIFRpbGVJbmRleCBpbmRleCh4LCB5KTsKKyAgICAgICAgICAgIHdoaWxl
IChjdXJyZW50ICE9IG1fdGlsZXMuZW5kKCkgJiYgaW5kZXggPiBjdXJyZW50LT5pbmRleCgpKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgdGlsZSA9ICpjdXJyZW50OworICAgICAgICAgICAgICAg
ICsrY3VycmVudDsKKyAgICAgICAgICAgICAgICB0aWxlLnJlbW92ZSgpOworICAgICAgICAgICAg
ICAgIGRlbGV0ZSAmdGlsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjdXJyZW50
ID09IG1fdGlsZXMuZW5kKCkgfHwgaW5kZXggPCBjdXJyZW50LT5pbmRleCgpKSB7CisgICAgICAg
ICAgICAgICAgY3VycmVudC0+cHJlcGVuZChjcmVhdGVUaWxlKGluZGV4KSk7CisgICAgICAgICAg
ICAgICAgbmVlZHNUb1BhaW50ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKGluZGV4ID09IGN1cnJlbnQtPmluZGV4KCkpOworICAgICAgICAgICAg
ICAgICsrY3VycmVudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gbmVlZHNUb1BhaW50OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDVGlsZUdyaWQuaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDVGlsZUdyaWQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
OWFiZjg2ZmExZWVmMzUzZTFkODNhZDcwYTEwYmY3Y2Q3ODc3MjU5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NUaWxlR3JpZC5oCkBAIC0w
LDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgU29ueSBJbnRlcmFjdGl2ZSBF
bnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmUuaD4KKyNpbmNsdWRl
IDx3dGYvU2VudGluZWxMaW5rZWRMaXN0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBXQ1RpbGVHcmlkIHsKK3B1YmxpYzoKKyAgICB1c2luZyBUaWxlSW5kZXggPSBXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlOjpUaWxlSW5kZXg7CisKKyAgICBjbGFzcyBU
aWxlIDogcHVibGljIEJhc2ljUmF3U2VudGluZWxOb2RlPFRpbGU+IHsKKyAgICAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRpbGUpOwor
ICAgIHB1YmxpYzoKKyAgICAgICAgVGlsZShUaWxlSW5kZXgsIFdlYkNvcmU6OkludFJlY3QpOwor
ICAgICAgICBUaWxlSW5kZXggaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAg
ICAgIGJvb2wgd2lsbFJlbW92ZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2lsbFJlbW92ZTsgfQorICAg
ICAgICB2b2lkIHNldFdpbGxSZW1vdmUoYm9vbCB2KSB7IG1fd2lsbFJlbW92ZSA9IHY7IH0KKyAg
ICAgICAgdm9pZCBhZGREaXJ0eVJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgICAg
ICB2b2lkIGNsZWFyRGlydHlSZWN0KCk7CisgICAgICAgIGJvb2wgaGFzRGlydHlSZWN0KCkgY29u
c3Q7CisgICAgICAgIFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCgpIHsgcmV0dXJuIG1fZGly
dHlSZWN0OyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBUaWxlSW5kZXggbV9pbmRleDsKKyAg
ICAgICAgYm9vbCBtX3dpbGxSZW1vdmUgeyBmYWxzZSB9OworICAgICAgICBXZWJDb3JlOjpJbnRS
ZWN0IG1fdGlsZVJlY3Q7CisgICAgICAgIFdlYkNvcmU6OkludFJlY3QgbV9kaXJ0eVJlY3Q7Cisg
ICAgfTsKKworICAgIHZvaWQgc2V0U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CisgICAg
dm9pZCBhZGREaXJ0eVJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgY2xl
YXJEaXJ0eVJlY3RzKCk7CisgICAgYm9vbCBzZXRDb3ZlcmFnZVJlY3QoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOworICAgIGF1dG8mIHRpbGVzKCkgeyByZXR1cm4gbV90aWxlczsgfQorICAgIFdl
YkNvcmU6OkludFNpemUgdGlsZVBpeGVsU2l6ZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIFRp
bGUqIGNyZWF0ZVRpbGUoVGlsZUluZGV4KTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHRpbGVSZWN0
RnJvbVBpeGVsUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgV2ViQ29yZTo6SW50
U2l6ZSB0aWxlU2l6ZUZyb21QaXhlbFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOworICAg
IAorICAgIFdlYkNvcmU6OkludFNpemUgbV9zaXplOworICAgIFNlbnRpbmVsTGlua2VkTGlzdDxU
aWxlLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxUaWxlPj4gbV90aWxlczsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2Uvd2MvV0NVcGF0ZUluZm8uaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3dj
L1dDVXBhdGVJbmZvLmgKaW5kZXggMDVhMmFlZGViNDFmOTU5ZjNhNmMxZWNiZjA5YTBjNDFjYmFi
ZTBmNC4uY2ExMTFmZGUyMzY3OTZlNWRkZThjOWZkZmI5Y2FmYzRkNjUwYWFmOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NVcGF0ZUluZm8uaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ1VwYXRlSW5mby5oCkBAIC0y
OSwxMiArMjksNDQgQEAKICNpbmNsdWRlICJXQ0NvbnRlbnRCdWZmZXJJZGVudGlmaWVyLmgiCiAj
aW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyU3BhcnNlQmFja2lu
Z1N0b3JlLmg+CiAjaW5jbHVkZSA8b3B0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMu
aD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitz
dHJ1Y3QgV0NUaWxlVXBkYXRlIHsKKyAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3BhcnNlQmFj
a2luZ1N0b3JlOjpUaWxlSW5kZXggaW5kZXg7CisgICAgYm9vbCB3aWxsUmVtb3ZlIHsgZmFsc2Ug
fTsKKyAgICBXQ0JhY2tpbmdTdG9yZSBiYWNraW5nU3RvcmU7CisgICAgV2ViQ29yZTo6SW50UmVj
dCBkaXJ0eVJlY3Q7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgorICAgIHZvaWQgZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBlbmNvZGVyIDw8IGlu
ZGV4IDw8IHdpbGxSZW1vdmU7CisgICAgICAgIGlmICghd2lsbFJlbW92ZSkKKyAgICAgICAgICAg
IGVuY29kZXIgPDwgYmFja2luZ1N0b3JlIDw8IGRpcnR5UmVjdDsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZSA8Y2xhc3MgRGVjb2Rlcj4KKyAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wg
ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdDVGlsZVVwZGF0ZSYgcmVzdWx0KQorICAgIHsKKyAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaW5kZXgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC53aWxsUmVtb3Zl
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFyZXN1bHQud2lsbFJl
bW92ZSkgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYmFja2luZ1N0
b3JlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5kaXJ0eVJlY3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCiBlbnVt
IGNsYXNzIFdDTGF5ZXJDaGFuZ2UgOiB1aW50MzJfdCB7CiAgICAgQ2hpbGRyZW4gICAgICAgICAg
ICAgICAgPSAxIDw8ICAwLAogICAgIE1hc2tMYXllciAgICAgICAgICAgICAgID0gMSA8PCAgMSwK
QEAgLTgzLDE1ICsxMTUsMTMgQEAgc3RydWN0IFdDTGF5ZXJVcGF0ZUluZm8gewogICAgIGZsb2F0
IGRlYnVnQm9yZGVyV2lkdGg7CiAgICAgaW50IHJlcGFpbnRDb3VudDsKICAgICBXZWJDb3JlOjpG
bG9hdFJlY3QgY29udGVudHNSZWN0OwotICAgIFdDQmFja2luZ1N0b3JlIGJhY2tpbmdTdG9yZTsK
LSAgICBXZWJDb3JlOjpJbnRSZWN0IGRpcnR5UmVjdDsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IGNv
dmVyYWdlUmVjdDsKICAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07
CiAgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRyZW5UcmFuc2Zvcm07CiAg
ICAgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOwogICAgIFdlYkNvcmU6OkZpbHRl
ck9wZXJhdGlvbnMgYmFja2Ryb3BGaWx0ZXJzOwogICAgIFdlYkNvcmU6OkZsb2F0Um91bmRlZFJl
Y3QgYmFja2Ryb3BGaWx0ZXJzUmVjdDsKICAgICBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0IGNv
bnRlbnRzQ2xpcHBpbmdSZWN0OworICAgIFZlY3RvcjxXQ1RpbGVVcGRhdGU+IHRpbGVVcGRhdGU7
CiAgICAgVmVjdG9yPFdDQ29udGVudEJ1ZmZlcklkZW50aWZpZXI+IGNvbnRlbnRCdWZmZXJJZGVu
dGlmaWVyczsKIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CkBAIC0xMjgsNyArMTU4LDcg
QEAgc3RydWN0IFdDTGF5ZXJVcGF0ZUluZm8gewogICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5
ZXJDaGFuZ2U6Ok9wYWNpdHkpCiAgICAgICAgICAgICBlbmNvZGVyIDw8IG9wYWNpdHk7CiAgICAg
ICAgIGlmIChjaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6QmFja2dyb3VuZCkKLSAgICAgICAgICAg
IGVuY29kZXIgPDwgYmFja2dyb3VuZENvbG9yIDw8IGhhc0JhY2tpbmdTdG9yZSA8PCBiYWNraW5n
U3RvcmUgPDwgZGlydHlSZWN0IDw8IGNvdmVyYWdlUmVjdDsKKyAgICAgICAgICAgIGVuY29kZXIg
PDwgYmFja2dyb3VuZENvbG9yIDw8IGhhc0JhY2tpbmdTdG9yZSA8PCB0aWxlVXBkYXRlOwogICAg
ICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6OlRyYW5zZm9ybSkKICAgICAgICAgICAg
IGVuY29kZXIgPDwgdHJhbnNmb3JtOwogICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFu
Z2U6OkNoaWxkcmVuVHJhbnNmb3JtKQpAQCAtMjIxLDExICsyNTEsNyBAQCBzdHJ1Y3QgV0NMYXll
clVwYXRlSW5mbyB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaGFzQmFja2luZ1N0b3JlKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC5iYWNraW5nU3RvcmUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmRpcnR5UmVjdCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
Y292ZXJhZ2VSZWN0KSkKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRp
bGVVcGRhdGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAg
ICAgICBpZiAocmVzdWx0LmNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpUcmFuc2Zvcm0pIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453695</attachid>
            <date>2022-03-02 21:46:40 -0800</date>
            <delta_ts>2022-03-09 06:31:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237355-20220303144639.patch</filename>
            <type>text/plain</type>
            <size>32512</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwNzIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDVlYTA0ODY3MTMxNjZi
YWI2ZGQzYzgwNmMzNTJlNWUxMDViMGFmZC4uNmMxZDM1MTJjOWI0NzcwYTM5NGNiNmNmMzdmZjlm
NWI1ZTA2MmQ4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDIyLTAzLTAyICBGdWpp
aSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgorCisgICAgICAgIFtXaW5DYWly
b10gSW1wcm92ZSBXQ1RpbGVkQmFja2luZyBhbmQgVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdT
dG9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3
MzU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlOjpz
ZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3Rv
cmU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJTcGFyc2VCYWNraW5nU3RvcmU6OmRyYXdCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZTo6ZHJhd1JlcGFpbnRDb3VudGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmU6OnVwZGF0ZUNvbnRl
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmU6
OnJlbW92ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNwYXJzZUJhY2tp
bmdTdG9yZTo6VGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlOjpyZW1vdmVVbmNv
dmVyZWRUaWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3Bh
cnNlQmFja2luZ1N0b3JlOjp0aWxlRGltZW5zaW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9y
ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyVGls
ZS5oOgorCiAyMDIyLTAzLTAxICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZW1vdmUgUmVtb3RlVmlkZW9TYW1wbGUgc3VwcG9ydCBmcm9tIEltYWdlVHJhbnNm
ZXJTZXNzaW9uVlQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZmU0MWQxZDA2ZTZmODYwOGRjOWVhNTM4ZjljYzZjMTQ5
MGIyNzRiZC4uY2RkOWU3MDlkZTRlNDAwMGZmYjMyYmVmMzY1MjdjODFmNWQ2ZWY3OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw1MSBAQAorMjAyMi0wMy0wMiAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9y
aS5GdWppaUBzb255LmNvbT4KKworICAgICAgICBbV2luQ2Fpcm9dIEltcHJvdmUgV0NUaWxlZEJh
Y2tpbmcgYW5kIFRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzM1NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRleHR1cmVNYXBwZXJTcGFyc2VCYWNr
aW5nU3RvcmUgc2ltcGx5IGhhZCBhIFZlY3RvciB0byBoYXZlIGFsbAorICAgICAgICB0aWxlcy4g
SWYgYSB3ZWIgcGFnZSBoYWQgYSB2ZXJ5IGxhcmdlIGxheWVyLCB0aGUgdmVjdG9yIHdhcworICAg
ICAgICBleHRlbmRlZCB0byBiZSBhYmxlIHRvIGtlZXAgYWxsIHRpbGVzLCBhbmQgaXQgcGVyZm9y
bWVkIHBvb3JseS4KKyAgICAgICAgVXNlIGEgSGFzaE1hcCB0byBrZWVwIHRpbGVzIG9ubHkgaW4g
dGhlIGNvdmVyYWdlIHJlY3QuCisKKyAgICAgICAgR3JhcGhpY3NMYXllcldDIGhhZCBvbmx5IG9u
ZSBkaXJ0eSByZWN0LCBhbmQgY3JlYXRlZCBhCisgICAgICAgIEltYWdlQnVmZmVyIGZvciBhbGwg
dGlsZXMgdG8gdXBkYXRlLiBDaGFuZ2UgaXQgdG8gaGF2ZSBvbmUgZGlydHkKKyAgICAgICAgcmVj
dCBmb3Igb25lIHRpbGUsIGFuZCBjcmVhdGUgYSBJbWFnZUJ1ZmZlciBmb3IgZXZlcnkgZGlydHkg
dGlsZS4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3Mvd2MvV0NTY2VuZS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldDU2NlbmU6OnVwZGF0ZSk6CisgICAgICAgICogUGxhdGZvcm1XaW4u
Y21ha2U6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0RyYXdpbmdBcmVhV0MuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpmbHVzaExheWVySW1hZ2VCdWZmZXJzKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6R3JhcGhpY3NMYXllcldDOjpzZXRTaXplKToKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NM
YXllcldDOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2Uvd2MvV0NUaWxlR3JpZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXQ1RpbGVH
cmlkOjpUaWxlOjpUaWxlKToKKyAgICAgICAgKFdlYktpdDo6V0NUaWxlR3JpZDo6VGlsZTo6YWRk
RGlydHlSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V0NUaWxlR3JpZDo6VGlsZTo6Y2xlYXJEaXJ0
eVJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXQ1RpbGVHcmlkOjpUaWxlOjpoYXNEaXJ0eVJlY3Qg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXQ1RpbGVHcmlkOjpzZXRTaXplKToKKyAgICAgICAg
KFdlYktpdDo6V0NUaWxlR3JpZDo6dGlsZVJlY3RGcm9tUGl4ZWxSZWN0KToKKyAgICAgICAgKFdl
YktpdDo6V0NUaWxlR3JpZDo6dGlsZVNpemVGcm9tUGl4ZWxTaXplKToKKyAgICAgICAgKFdlYktp
dDo6V0NUaWxlR3JpZDo6dGlsZVBpeGVsU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldD
VGlsZUdyaWQ6OmFkZERpcnR5UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldDVGlsZUdyaWQ6OmNs
ZWFyRGlydHlSZWN0cyk6CisgICAgICAgIChXZWJLaXQ6OldDVGlsZUdyaWQ6OmVuc3VyZVRpbGUp
OgorICAgICAgICAoV2ViS2l0OjpXQ1RpbGVHcmlkOjpzZXRDb3ZlcmFnZVJlY3QpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ1RpbGVHcmlkLmg6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpXQ1RpbGVHcmlkOjpUaWxlOjp3aWxsUmVtb3ZlIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6V0NUaWxlR3JpZDo6VGlsZTo6c2V0V2lsbFJlbW92ZSk6CisgICAgICAgIChXZWJLaXQ6
OldDVGlsZUdyaWQ6OlRpbGU6OmRpcnR5UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldDVGlsZUdy
aWQ6OnRpbGVzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NVcGF0ZUluZm8u
aDoKKyAgICAgICAgKFdlYktpdDo6V0NUaWxlVXBkYXRlOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpXQ1RpbGVVcGRhdGU6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6OldDTGF5
ZXJVcGF0ZUluZm86OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldDTGF5ZXJVcGF0
ZUluZm86OmRlY29kZSk6CisKIDIwMjItMDMtMDEgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBw
bGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBSZW1vdGVWaWRlb1NhbXBsZSBzdXBwb3J0IGZyb20g
SW1hZ2VUcmFuc2ZlclNlc3Npb25WVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTcGFy
c2VCYWNraW5nU3RvcmUuY3BwCmluZGV4IGU0OGRiOWI2ZWFjNTQwYjU3YWEwNjY2NThjYmQ5YjBh
N2Q4MTUwYjAuLjdmMWE2ZDcxMjhkNjc3Nzg4MDhkYmQwNDRmZWZiYzM5N2YyYWJmMmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyU3BhcnNlQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZS5jcHAKQEAgLTMy
LDQyICszMiwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVRleHR1cmVNYXBwZXJTcGFy
c2VCYWNraW5nU3RvcmU6OlRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmUoaW50IHRpbGVT
aXplKQotICAgIDogbV90aWxlU2l6ZSh0aWxlU2l6ZSkKLXsKLX0KLQogdm9pZCBUZXh0dXJlTWFw
cGVyU3BhcnNlQmFja2luZ1N0b3JlOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAg
ICAgaWYgKG1fc2l6ZSA9PSBzaXplKQogICAgICAgICByZXR1cm47Ci0gICAgbV90aWxlcy5jbGVh
cigpOwogICAgIG1fc2l6ZSA9IHNpemU7Ci0gICAgYXV0byB0aWxlcyA9IHRpbGVEaW1lbnNpb24o
KTsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IHRpbGVzLmhlaWdodCgpOyB5KyspIHsKLSAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCB0aWxlcy53aWR0aCgpOyB4KyspIHsKLSAgICAgICAgICAg
IEludFJlY3QgcmVjdCA9IHsgeCAqIG1fdGlsZVNpemUsIHkgKiBtX3RpbGVTaXplLCBtX3RpbGVT
aXplLCBtX3RpbGVTaXplIH07Ci0gICAgICAgICAgICByZWN0LmludGVyc2VjdCh7IHsgfSwgbV9z
aXplIH0pOwotICAgICAgICAgICAgbV90aWxlcy5hcHBlbmQoVGV4dHVyZU1hcHBlclRpbGUocmVj
dCkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmVNYXBwZXJTcGFyc2VCYWNr
aW5nU3RvcmU6OnJlbW92ZVVuY292ZXJlZFRpbGVzKGNvbnN0IEludFJlY3QmIGNvdmVyYWdlKQot
ewotICAgIGF1dG8gbWluQ292ZXJlZFggPSBjb3ZlcmFnZS54KCkgLyBtX3RpbGVTaXplOwotICAg
IGF1dG8gbWF4Q292ZXJlZFggPSAoY292ZXJhZ2UubWF4WCgpICsgbV90aWxlU2l6ZSAtIDEpIC8g
bV90aWxlU2l6ZTsKLSAgICBhdXRvIG1pbkNvdmVyZWRZID0gY292ZXJhZ2UueSgpIC8gbV90aWxl
U2l6ZTsKLSAgICBhdXRvIG1heENvdmVyZWRZID0gKGNvdmVyYWdlLm1heFkoKSArIG1fdGlsZVNp
emUgLSAxKSAvIG1fdGlsZVNpemU7Ci0gICAgYXV0byB0aWxlcyA9IHRpbGVEaW1lbnNpb24oKTsK
LSAgICBmb3IgKGludCB5ID0gMDsgeSA8IHRpbGVzLmhlaWdodCgpOyB5KyspIHsKLSAgICAgICAg
Ym9vbCBjb3ZlcmVkWSA9IG1pbkNvdmVyZWRZIDw9IHkgJiYgeSA8IG1heENvdmVyZWRZOwotICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHRpbGVzLndpZHRoKCk7IHgrKykgewotICAgICAgICAg
ICAgYm9vbCBjb3ZlcmVkID0gY292ZXJlZFkgJiYgbWluQ292ZXJlZFggPD0geCAmJiB4IDwgbWF4
Q292ZXJlZFg7Ci0gICAgICAgICAgICBpZiAoIWNvdmVyZWQpCi0gICAgICAgICAgICAgICAgbV90
aWxlc1t4ICsgeSAqIHRpbGVzLndpZHRoKCldLnNldFRleHR1cmUobnVsbHB0cik7Ci0gICAgICAg
IH0KLSAgICB9CisgICAgbV90aWxlcy5jbGVhcigpOwogfQogCiBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBUZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlOjphZGp1c3RlZFRyYW5zZm9ybUZvclJl
Y3QoY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0KQpAQCAtNzksMzMgKzQ5LDM1IEBAIHZvaWQg
VGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4
dHVyZU1hcHBlciYgdGV4dHVyCiB7CiAgICAgSW50UmVjdCByZWN0ID0geyB7IH0sIG1fc2l6ZSB9
OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFkanVzdGVkVHJhbnNmb3JtID0gdHJhbnNmb3Jt
ICogYWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0KHRhcmdldFJlY3QpOwotICAgIGZvciAoYXV0byYg
dGlsZSA6IG1fdGlsZXMpCi0gICAgICAgIHRpbGUucGFpbnQodGV4dHVyZU1hcHBlciwgYWRqdXN0
ZWRUcmFuc2Zvcm0sIG9wYWNpdHksIGNhbGN1bGF0ZUV4cG9zZWRUaWxlRWRnZXMocmVjdCwgdGls
ZS5yZWN0KCkpKTsKKyAgICBmb3IgKGF1dG8mIGl0ZXJhdG9yIDogbV90aWxlcykKKyAgICAgICAg
aXRlcmF0b3IudmFsdWUtPnBhaW50KHRleHR1cmVNYXBwZXIsIGFkanVzdGVkVHJhbnNmb3JtLCBv
cGFjaXR5LCBjYWxjdWxhdGVFeHBvc2VkVGlsZUVkZ2VzKHJlY3QsIGl0ZXJhdG9yLnZhbHVlLT5y
ZWN0KCkpKTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlOjpkcmF3
Qm9yZGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNvbnN0IENvbG9yJiBib3JkZXJD
b2xvciwgZmxvYXQgYm9yZGVyV2lkdGgsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKIHsKICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBhZGp1c3RlZFRyYW5zZm9ybSA9IHRyYW5zZm9ybSAqIGFkanVzdGVkVHJhbnNmb3Jt
Rm9yUmVjdCh0YXJnZXRSZWN0KTsKLSAgICBmb3IgKGF1dG8mIHRpbGUgOiBtX3RpbGVzKQotICAg
ICAgICB0ZXh0dXJlTWFwcGVyLmRyYXdCb3JkZXIoYm9yZGVyQ29sb3IsIGJvcmRlcldpZHRoLCB0
aWxlLnJlY3QoKSwgYWRqdXN0ZWRUcmFuc2Zvcm0pOworICAgIGZvciAoYXV0byYgaXRlcmF0b3Ig
OiBtX3RpbGVzKQorICAgICAgICB0ZXh0dXJlTWFwcGVyLmRyYXdCb3JkZXIoYm9yZGVyQ29sb3Is
IGJvcmRlcldpZHRoLCBpdGVyYXRvci52YWx1ZS0+cmVjdCgpLCBhZGp1c3RlZFRyYW5zZm9ybSk7
CiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZTo6ZHJhd1JlcGFpbnRD
b3VudGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGludCByZXBhaW50Q291bnQsIGNv
bnN0IENvbG9yJiBib3JkZXJDb2xvciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQogewogICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IGFkanVzdGVkVHJhbnNmb3JtID0gdHJhbnNmb3JtICogYWRqdXN0ZWRUcmFuc2Zvcm1G
b3JSZWN0KHRhcmdldFJlY3QpOwotICAgIGZvciAoYXV0byYgdGlsZSA6IG1fdGlsZXMpCi0gICAg
ICAgIHRleHR1cmVNYXBwZXIuZHJhd051bWJlcihyZXBhaW50Q291bnQsIGJvcmRlckNvbG9yLCB0
aWxlLnJlY3QoKS5sb2NhdGlvbigpLCBhZGp1c3RlZFRyYW5zZm9ybSk7CisgICAgZm9yIChhdXRv
JiBpdGVyYXRvciA6IG1fdGlsZXMpCisgICAgICAgIHRleHR1cmVNYXBwZXIuZHJhd051bWJlcihy
ZXBhaW50Q291bnQsIGJvcmRlckNvbG9yLCBpdGVyYXRvci52YWx1ZS0+cmVjdCgpLmxvY2F0aW9u
KCksIGFkanVzdGVkVHJhbnNmb3JtKTsKIH0KIAotSW50U2l6ZSBUZXh0dXJlTWFwcGVyU3BhcnNl
QmFja2luZ1N0b3JlOjp0aWxlRGltZW5zaW9uKCkgY29uc3QKK3ZvaWQgVGV4dHVyZU1hcHBlclNw
YXJzZUJhY2tpbmdTdG9yZTo6dXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciYgdGV4dHVyZU1h
cHBlciwgY29uc3QgVGlsZUluZGV4JiBpbmRleCwgSW1hZ2UmIGltYWdlLCBjb25zdCBJbnRSZWN0
JiBkaXJ0eVJlY3QpCiB7Ci0gICAgcmV0dXJuIHsgKG1fc2l6ZS53aWR0aCgpICsgbV90aWxlU2l6
ZSAtIDEpIC8gbV90aWxlU2l6ZSwgIChtX3NpemUuaGVpZ2h0KCkgKyBtX3RpbGVTaXplIC0gMSkg
LyBtX3RpbGVTaXplIH07CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX3RpbGVzLmVuc3VyZShpbmRl
eCwgWyZdKCkgeworICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyVGlsZT4o
ZGlydHlSZWN0KTsKKyAgICB9KTsKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT51cGRh
dGVDb250ZW50cyh0ZXh0dXJlTWFwcGVyLCAmaW1hZ2UsIGRpcnR5UmVjdCk7CiB9CiAKLXZvaWQg
VGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZTo6dXBkYXRlQ29udGVudHMoVGV4dHVyZU1h
cHBlciYgdGV4dHVyZU1hcHBlciwgSW1hZ2UmIGltYWdlLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJl
Y3QpCit2b2lkIFRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmU6OnJlbW92ZVRpbGUoY29u
c3QgVGlsZUluZGV4JiBpbmRleCkKIHsKLSAgICBmb3IgKGF1dG8mIHRpbGUgOiBtX3RpbGVzKQot
ICAgICAgICB0aWxlLnVwZGF0ZUNvbnRlbnRzKHRleHR1cmVNYXBwZXIsICZpbWFnZSwgZGlydHlS
ZWN0KTsKKyAgICBtX3RpbGVzLnJlbW92ZShpbmRleCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZS5oCmlu
ZGV4IGVhNjczOWU0ZGRjYWEzOGNiZWM4ODg5NTBhNmY2ZTU3MDg3ZWFjYjMuLjBlZmQ3OWRlMzBm
N2EyNzNjYWU4YTFhMTZjODE4MTQ0YmYwODU0ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3Jl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJTcGFyc2VCYWNraW5nU3RvcmUuaApAQCAtMjksMjkgKzI5LDMwIEBACiAKICNpZiBVU0Uo
R1JBUEhJQ1NfTEFZRVJfV0MpCiAKKyNpbmNsdWRlICJJbnRQb2ludEhhc2guaCIKICNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclRp
bGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIFRleHR1cmVNYXBwZXJTcGFyc2VCYWNraW5nU3RvcmUgZmluYWwgOiBwdWJsaWMgVGV4
dHVyZU1hcHBlckJhY2tpbmdTdG9yZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6Ci0gICAgVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZShpbnQgdGlsZVNpemUp
OworICAgIHVzaW5nIFRpbGVJbmRleCA9IFdlYkNvcmU6OkludFBvaW50OworCiAgICAgdm9pZCBz
ZXRTaXplKGNvbnN0IEludFNpemUmKTsKLSAgICB2b2lkIHJlbW92ZVVuY292ZXJlZFRpbGVzKGNv
bnN0IEludFJlY3QmIGNvdmVyYWdlKTsKICAgICB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRl
eHR1cmVNYXBwZXImLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYsIGZsb2F0KSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdCb3JkZXIoVGV4dHVyZU1hcHBlciYs
IGNvbnN0IENvbG9yJiwgZmxvYXQgYm9yZGVyV2lkdGgsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3UmVwYWludENv
dW50ZXIoVGV4dHVyZU1hcHBlciYsIGludCByZXBhaW50Q291bnQsIGNvbnN0IENvbG9yJiwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHVwZGF0ZUNvbnRlbnRzKFRleHR1cmVNYXBwZXImLCBJbWFnZSYsIGNvbnN0IEludFJl
Y3QmIGRpcnR5UmVjdCk7CisgICAgdm9pZCB1cGRhdGVDb250ZW50cyhUZXh0dXJlTWFwcGVyJiwg
Y29uc3QgVGlsZUluZGV4JiwgSW1hZ2UmLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOworICAg
IHZvaWQgcmVtb3ZlVGlsZShjb25zdCBUaWxlSW5kZXgmKTsKIAogcHJpdmF0ZToKLSAgICBJbnRT
aXplIHRpbGVEaW1lbnNpb24oKSBjb25zdDsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhZGp1
c3RlZFRyYW5zZm9ybUZvclJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAKLSAgICBpbnQgbV90aWxl
U2l6ZTsKLSAgICBWZWN0b3I8VGV4dHVyZU1hcHBlclRpbGU+IG1fdGlsZXM7CiAgICAgSW50U2l6
ZSBtX3NpemU7CisgICAgSGFzaE1hcDxUaWxlSW5kZXgsIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJl
TWFwcGVyVGlsZT4+IG1fdGlsZXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlclRpbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyVGlsZS5oCmluZGV4IDJmNGQ4OWZiYjVlZTQ3YmUwOGRjOTZiMjRhNmU2YTQ0NWYz
MDlmMjEuLjQ1N2E0YjIzZGUxOWU0YzFmMDkzOWI3MmZhZTAyZTM1YWNhMTJiZmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
VGlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyVGlsZS5oCkBAIC0zMCw2ICszMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIEdyYXBoaWNzTGF5ZXI7CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJUaWxlIHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBpbmxpbmUgUmVmUHRyPEJpdG1hcFRl
eHR1cmU+IHRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmU7IH0KICAgICBpbmxpbmUg
RmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy93Yy9XQ1NjZW5lLmNwcAppbmRleCAyYzk5MjNhMjE1
OGJkZDMxYTgzM2Y3MjdjNjRjY2U3N2Y1ZDQwMzRkLi5kY2E4YTFkYzVlNWI0Y2Y3ZjVmOTY2NzMw
MmQ0NTA2NmIwNTJiNGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3Mvd2MvV0NTY2VuZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL3djL1dDU2NlbmUuY3BwCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAg
ICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIgdGV4bWFwTGF5ZXI7Ci0gICAgc3RkOjpvcHRp
b25hbDxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlPiBiYWNraW5nU3Rv
cmU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTcGFyc2VCYWNr
aW5nU3RvcmU+IGJhY2tpbmdTdG9yZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6VGV4
dHVyZU1hcHBlckxheWVyPiBiYWNrZHJvcExheWVyOwogfTsKIApAQCAtMTI3LDI0ICsxMjcsMjgg
QEAgc3RkOjpvcHRpb25hbDxVcGRhdGVJbmZvPiBXQ1NjZW5lOjp1cGRhdGUoV0NVcGF0ZUluZm8m
JiB1cGRhdGUpCiAgICAgICAgIGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5n
ZTo6QmFja2dyb3VuZCkgewogICAgICAgICAgICAgaWYgKGxheWVyVXBkYXRlLmhhc0JhY2tpbmdT
dG9yZSkgewogICAgICAgICAgICAgICAgIGlmICghbGF5ZXItPmJhY2tpbmdTdG9yZSkgewotICAg
ICAgICAgICAgICAgICAgICBjb25zdCBpbnQgdGlsZVNpemUgPSA1MTI7Ci0gICAgICAgICAgICAg
ICAgICAgIGxheWVyLT5iYWNraW5nU3RvcmUuZW1wbGFjZTxXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
U3BhcnNlQmFja2luZ1N0b3JlPih0aWxlU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIGxheWVy
LT5iYWNraW5nU3RvcmUgPSBtYWtlVW5pcXVlPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTcGFyc2VC
YWNraW5nU3RvcmU+KCk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8mIGJhY2tpbmdTdG9yZSA9
ICpsYXllci0+YmFja2luZ1N0b3JlOwogICAgICAgICAgICAgICAgICAgICBsYXllci0+dGV4bWFw
TGF5ZXIuc2V0QmFja2dyb3VuZENvbG9yKHsgfSk7CiAgICAgICAgICAgICAgICAgICAgIGxheWVy
LT50ZXhtYXBMYXllci5zZXRCYWNraW5nU3RvcmUoJmJhY2tpbmdTdG9yZSk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGF1dG8mIGJhY2tpbmdTdG9yZSA9ICpsYXllci0+YmFj
a2luZ1N0b3JlOwogICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZS5zZXRTaXplKFdlYkNvcmU6
OkludFNpemUobGF5ZXItPnRleG1hcExheWVyLnNpemUoKSkpOwotICAgICAgICAgICAgICAgIGJh
Y2tpbmdTdG9yZS5yZW1vdmVVbmNvdmVyZWRUaWxlcyhsYXllclVwZGF0ZS5jb3ZlcmFnZVJlY3Qp
OwotICAgICAgICAgICAgICAgIGF1dG8gYml0bWFwID0gbGF5ZXJVcGRhdGUuYmFja2luZ1N0b3Jl
LmJpdG1hcCgpOwotICAgICAgICAgICAgICAgIGlmIChiaXRtYXApIHsKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byBpbWFnZSA9IGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKTsKLSAgICAgICAgICAgICAg
ICAgICAgYmFja2luZ1N0b3JlLnVwZGF0ZUNvbnRlbnRzKCptX3RleHR1cmVNYXBwZXIsICppbWFn
ZSwgbGF5ZXJVcGRhdGUuZGlydHlSZWN0KTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHRp
bGVVcGRhdGUgOiBsYXllclVwZGF0ZS50aWxlVXBkYXRlKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICh0aWxlVXBkYXRlLndpbGxSZW1vdmUpCisgICAgICAgICAgICAgICAgICAgICAgICBiYWNr
aW5nU3RvcmUucmVtb3ZlVGlsZSh0aWxlVXBkYXRlLmluZGV4KTsKKyAgICAgICAgICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGJpdG1hcCA9IHRpbGVVcGRh
dGUuYmFja2luZ1N0b3JlLmJpdG1hcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJp
dG1hcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gaW1hZ2UgPSBiaXRtYXAt
PmNyZWF0ZUltYWdlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2luZ1N0b3Jl
LnVwZGF0ZUNvbnRlbnRzKCptX3RleHR1cmVNYXBwZXIsIHRpbGVVcGRhdGUuaW5kZXgsICppbWFn
ZSwgdGlsZVVwZGF0ZS5kaXJ0eVJlY3QpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICBsYXllci0+dGV4bWFwTGF5ZXIuc2V0QmFja2dyb3VuZENvbG9y
KGxheWVyVXBkYXRlLmJhY2tncm91bmRDb2xvcik7CiAgICAgICAgICAgICAgICAgbGF5ZXItPnRl
eG1hcExheWVyLnNldEJhY2tpbmdTdG9yZShudWxscHRyKTsKLSAgICAgICAgICAgICAgICBsYXll
ci0+YmFja2luZ1N0b3JlID0gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgICAgIGxheWVyLT5i
YWNraW5nU3RvcmUgPSBudWxscHRyOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAg
IGlmIChsYXllclVwZGF0ZS5jaGFuZ2VzICYgV0NMYXllckNoYW5nZTo6U29saWRDb2xvcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IDI0YmQ4NDI2NzJhYTgxMDFkMWMxZWI2ZGI0MzM1ZjFl
NWYwYjg0MGQuLmFjY2E2OGYzOWEyYmZhNWJkOGYwM2MwODRkYWVlZDZkYTAzNTIzNGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtMTA1LDYgKzEwNSw3IEBAIGxpc3QoQVBQRU5EIFdlYktp
dF9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0RyYXdpbmdBcmVhV0MuY3BwCiAg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5jcHAKICAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2Uvd2MvV0NMYXllckZhY3RvcnkuY3BwCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L3djL1dDVGlsZUdyaWQuY3BwCiAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2luL1dlYlBhZ2VX
aW4uY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3dj
L0RyYXdpbmdBcmVhV0MuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2Mv
RHJhd2luZ0FyZWFXQy5jcHAKaW5kZXggYmYxMmIxMTQ3N2UzMjgxZTU3YTM3YjM4ZGExODAzNGQ1
Zjk1MWU5Yi4uNjBkOWViNmViODg2MGQ0MzQ5NWNhY2ZhZDlmMzhmNGY4OTU3ZDUzZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFXQy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvRHJhd2luZ0FyZWFX
Qy5jcHAKQEAgLTE5Myw5ICsxOTMsMTEgQEAgc3RhdGljIHZvaWQgZmx1c2hMYXllckltYWdlQnVm
ZmVycyhXQ1VwYXRlSW5mbyYgaW5mbykKIHsKICAgICBmb3IgKGF1dG8mIGxheWVySW5mbyA6IGlu
Zm8uY2hhbmdlZExheWVycykgewogICAgICAgICBpZiAobGF5ZXJJbmZvLmNoYW5nZXMgJiBXQ0xh
eWVyQ2hhbmdlOjpCYWNrZ3JvdW5kKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBpbWFnZSA9IGxh
eWVySW5mby5iYWNraW5nU3RvcmUuaW1hZ2VCdWZmZXIoKSkgewotICAgICAgICAgICAgICAgIGlm
IChhdXRvIGZsdXNoZXIgPSBpbWFnZS0+Y3JlYXRlRmx1c2hlcigpKQotICAgICAgICAgICAgICAg
ICAgICBmbHVzaGVyLT5mbHVzaCgpOworICAgICAgICAgICAgZm9yIChhdXRvJiB0aWxlVXBkYXRl
IDogbGF5ZXJJbmZvLnRpbGVVcGRhdGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBpbWFn
ZSA9IHRpbGVVcGRhdGUuYmFja2luZ1N0b3JlLmltYWdlQnVmZmVyKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGF1dG8gZmx1c2hlciA9IGltYWdlLT5jcmVhdGVGbHVzaGVyKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBmbHVzaGVyLT5mbHVzaCgpOworICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9HcmFwaGljc0xheWVyV0MuY3BwCmluZGV4IDczMTRl
YmIxOTcyMjZiNzI1MDBmMTVlY2RkNTZiNzcxMzI0ZjBiZTIuLmFhOTFlZjMyOGQxYjc5NDA0MTY1
M2JmYmJiOGQyZGQ3MmZiZDc3NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL3djL0dyYXBoaWNzTGF5ZXJXQy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2Uvd2MvR3JhcGhpY3NMYXllcldDLmNwcApAQCAtMjgsNiArMjgsNyBAQAog
I2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJXQy5oIgogCiAjaW5jbHVkZSAiV0NQbGF0Zm9ybUxheWVy
R0NHTC5oIgorI2luY2x1ZGUgIldDVGlsZUdyaWQuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1RyYW5z
Zm9ybVN0YXRlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNDEsNTcgKzQyLDU1IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgcGFpbnRBbmRGbHVzaChXQ0xheWVyVXBhdGVJbmZvJiB1cGRhdGUp
CiAgICAgewotICAgICAgICB1cGRhdGUuZGlydHlSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChtX2Rp
cnR5UmVjdCk7Ci0gICAgICAgIHVwZGF0ZS5jb3ZlcmFnZVJlY3QgPSBtX2NvdmVyYWdlUmVjdDsK
LSAgICAgICAgbV9kaXJ0eVJlY3QgPSB7IH07Ci0gICAgICAgIGF1dG8mIGltYWdlUmVjdCA9IHVw
ZGF0ZS5kaXJ0eVJlY3Q7Ci0gICAgICAgIGlmIChpbWFnZVJlY3QuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhdXRvIGltYWdlID0gbV9vd25lci5jcmVhdGVJ
bWFnZUJ1ZmZlcihpbWFnZVJlY3Quc2l6ZSgpKTsKLSAgICAgICAgYXV0byYgY29udGV4dCA9IGlt
YWdlLT5jb250ZXh0KCk7Ci0gICAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1pbWFnZVJlY3QueCgp
LCAtaW1hZ2VSZWN0LnkoKSk7Ci0gICAgICAgIG1fb3duZXIucGFpbnRHcmFwaGljc0xheWVyQ29u
dGVudHMoY29udGV4dCwgdXBkYXRlLmRpcnR5UmVjdCk7Ci0gICAgICAgIGltYWdlLT5mbHVzaERy
YXdpbmdDb250ZXh0QXN5bmMoKTsKLSAgICAgICAgdXBkYXRlLmJhY2tpbmdTdG9yZS5zZXRJbWFn
ZUJ1ZmZlcihXVEZNb3ZlKGltYWdlKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBi
b29sIHJlcGFpbnRlZCA9IGZhbHNlOworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV90aWxl
R3JpZC50aWxlcygpKSB7CisgICAgICAgICAgICBhdXRvJiB0aWxlID0gKmVudHJ5LnZhbHVlOwor
ICAgICAgICAgICAgV0NUaWxlVXBkYXRlIHRpbGVVcGRhdGU7CisgICAgICAgICAgICB0aWxlVXBk
YXRlLmluZGV4ID0gZW50cnkua2V5OworICAgICAgICAgICAgdGlsZVVwZGF0ZS53aWxsUmVtb3Zl
ID0gdGlsZS53aWxsUmVtb3ZlKCk7CisgICAgICAgICAgICBpZiAodGlsZVVwZGF0ZS53aWxsUmVt
b3ZlKSB7CisgICAgICAgICAgICAgICAgdXBkYXRlLnRpbGVVcGRhdGUuYXBwZW5kKFdURk1vdmUo
dGlsZVVwZGF0ZSkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKCF0aWxlLmhhc0RpcnR5UmVjdCgpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgcmVwYWludGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGF1dG8m
IGRpcnR5UmVjdCA9IHRpbGUuZGlydHlSZWN0KCk7CisgICAgICAgICAgICB0aWxlVXBkYXRlLmRp
cnR5UmVjdCA9IGRpcnR5UmVjdDsKKyAgICAgICAgICAgIGF1dG8gaW1hZ2UgPSBtX293bmVyLmNy
ZWF0ZUltYWdlQnVmZmVyKGRpcnR5UmVjdC5zaXplKCkpOworICAgICAgICAgICAgYXV0byYgY29u
dGV4dCA9IGltYWdlLT5jb250ZXh0KCk7CisgICAgICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgt
ZGlydHlSZWN0LngoKSwgLWRpcnR5UmVjdC55KCkpOworICAgICAgICAgICAgbV9vd25lci5wYWlu
dEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBkaXJ0eVJlY3QpOworICAgICAgICAgICAg
aW1hZ2UtPmZsdXNoRHJhd2luZ0NvbnRleHRBc3luYygpOworICAgICAgICAgICAgdGlsZVVwZGF0
ZS5iYWNraW5nU3RvcmUuc2V0SW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZSkpOworICAgICAgICAg
ICAgdXBkYXRlLnRpbGVVcGRhdGUuYXBwZW5kKFdURk1vdmUodGlsZVVwZGF0ZSkpOworICAgICAg
ICB9CisgICAgICAgIG1fdGlsZUdyaWQuY2xlYXJEaXJ0eVJlY3RzKCk7CisgICAgICAgIHJldHVy
biByZXBhaW50ZWQ7CiAgICAgfQogCi0gICAgdm9pZCBzZXREaXJ0eVJlY3QoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiByZWN0KQorICAgIHZvaWQgc2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHNp
emUpCiAgICAgewotICAgICAgICBtX2RpcnR5UmVjdC51bml0ZShyZWN0KTsKKyAgICAgICAgbV90
aWxlR3JpZC5zZXRTaXplKGV4cGFuZGVkSW50U2l6ZShzaXplKSk7CiAgICAgfQogCi0gICAgYm9v
bCBoYXNEaXJ0eVJlY3QoKQorICAgIHZvaWQgc2V0RGlydHlSZWN0KGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgcmVjdCkKICAgICB7Ci0gICAgICAgIHJldHVybiAhbV9kaXJ0eVJlY3QuaXNFbXB0
eSgpOworICAgICAgICBtX3RpbGVHcmlkLmFkZERpcnR5UmVjdChlbmNsb3NpbmdJbnRSZWN0KHJl
Y3QpKTsKICAgICB9CiAKLSAgICBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZygpIGNvbnN0IHsg
cmV0dXJuIGNvbnN0X2Nhc3Q8V0NUaWxlZEJhY2tpbmcqPih0aGlzKTsgfTsKLQotICAgIEludFJl
Y3QgYWRqdXN0Q292ZXJhZ2VSZWN0KEludFJlY3QgY292ZXJhZ2UpCisgICAgYm9vbCB1cGRhdGVD
b3ZlcmFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIHsKLSAgICAgICAgaW50IHgg
PSBjb3ZlcmFnZS54KCkgLyB0aWxlU2l6ZSgpLndpZHRoKCkgKiB0aWxlU2l6ZSgpLndpZHRoKCk7
Ci0gICAgICAgIGludCB5ID0gY292ZXJhZ2UueSgpIC8gdGlsZVNpemUoKS5oZWlnaHQoKSAqIHRp
bGVTaXplKCkuaGVpZ2h0KCk7Ci0gICAgICAgIGludCBtYXhYID0gKGNvdmVyYWdlLm1heFgoKSAr
IHRpbGVTaXplKCkud2lkdGgoKSAtIDEpIC8gdGlsZVNpemUoKS53aWR0aCgpICogdGlsZVNpemUo
KS53aWR0aCgpOwotICAgICAgICBpbnQgbWF4WSA9IChjb3ZlcmFnZS5tYXhZKCkgKyB0aWxlU2l6
ZSgpLmhlaWdodCgpIC0gMSkgLyB0aWxlU2l6ZSgpLmhlaWdodCgpICogdGlsZVNpemUoKS5oZWln
aHQoKTsKLSAgICAgICAgSW50UmVjdCBuZXdDb3ZlcmFnZSB7IHgsIHksIG1heFggLSB4LCBtYXhZ
IC0geSB9OwotICAgICAgICBuZXdDb3ZlcmFnZS5pbnRlcnNlY3QoYm91bmRzKCkpOwotICAgICAg
ICByZXR1cm4gbmV3Q292ZXJhZ2U7CisgICAgICAgIHJldHVybiBtX3RpbGVHcmlkLnNldENvdmVy
YWdlUmVjdChlbmNsb3NpbmdJbnRSZWN0KHJlY3QpKTsKICAgICB9CiAKKyAgICBUaWxlZEJhY2tp
bmcqIHRpbGVkQmFja2luZygpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8V0NUaWxlZEJhY2tp
bmcqPih0aGlzKTsgfTsKKwogICAgIC8vIFRpbGVkQmFja2luZyBvdmVycmlkZQogICAgIHZvaWQg
c2V0VmlzaWJsZVJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CiAgICAgRmxvYXRSZWN0
IHZpc2libGVSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4geyB9OyB9OwogICAgIHZvaWQgc2V0
TGF5b3V0Vmlld3BvcnRSZWN0KHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PikgZmluYWwgeyB9Ci0g
ICAgdm9pZCBzZXRDb3ZlcmFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBmaW5hbAotICAg
IHsKLSAgICAgICAgYXV0byBuZXdDb3ZlcmFnZSA9IGFkanVzdENvdmVyYWdlUmVjdChlbmNsb3Np
bmdJbnRSZWN0KHJlY3QpKTsKLSAgICAgICAgV2ViQ29yZTo6UmVnaW9uIHJlZ2lvbihuZXdDb3Zl
cmFnZSk7Ci0gICAgICAgIHJlZ2lvbi5zdWJ0cmFjdChtX2NvdmVyYWdlUmVjdCk7Ci0gICAgICAg
IHNldERpcnR5UmVjdChyZWdpb24uYm91bmRzKCkpOwotICAgICAgICBtX2NvdmVyYWdlUmVjdCA9
IG5ld0NvdmVyYWdlOwotICAgICAgICBtX2RpcnR5UmVjdC5pbnRlcnNlY3QobV9jb3ZlcmFnZVJl
Y3QpOwotICAgIH0KKyAgICB2b2lkIHNldENvdmVyYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpIGZpbmFsIHsgfQogICAgIEZsb2F0UmVjdCBjb3ZlcmFnZVJlY3QoKSBjb25zdCBmaW5hbCB7
IHJldHVybiB7IH07IH07CiAgICAgYm9vbCB0aWxlc1dvdWxkQ2hhbmdlRm9yQ292ZXJhZ2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdm9p
ZCBzZXRUaWxlZFNjcm9sbGluZ0luZGljYXRvclBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBm
aW5hbCB7IH0KQEAgLTEwOCw3ICsxMDcsNyBAQCBwdWJsaWM6CiAgICAgRmxvYXRSZWN0IGFkanVz
dFRpbGVDb3ZlcmFnZVJlY3RGb3JTY3JvbGxpbmcoY29uc3QgRmxvYXRSZWN0JiBjb3ZlcmFnZVJl
Y3QsIGNvbnN0IEZsb2F0U2l6ZSYgbmV3U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBwcmV2aW91c1Zp
c2libGVSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGN1cnJlbnRWaXNpYmxlUmVjdCwgZmxvYXQgY29u
dGVudHNTY2FsZSkgZmluYWwgeyByZXR1cm4geyB9OyB9OwogICAgIHZvaWQgd2lsbFN0YXJ0TGl2
ZVJlc2l6ZSgpIGZpbmFsIHsgfTsKICAgICB2b2lkIGRpZEVuZExpdmVSZXNpemUoKSBmaW5hbCB7
IH07Ci0gICAgSW50U2l6ZSB0aWxlU2l6ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgNTEyLCA1
MTIgfTsgfTsKKyAgICBJbnRTaXplIHRpbGVTaXplKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV90
aWxlR3JpZC50aWxlUGl4ZWxTaXplKCk7IH0KICAgICB2b2lkIHJldmFsaWRhdGVUaWxlcygpIGZp
bmFsIHsgfQogICAgIHZvaWQgZm9yY2VSZXBhaW50KCkgZmluYWwgeyB9CiAgICAgSW50UmVjdCB0
aWxlR3JpZEV4dGVudCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQpAQCAtMTMzLDkgKzEz
Miw4IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBib29sIG1faXNJbldpbmRvdyB7IGZhbHNl
IH07Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBtX2NvdmVyYWdlUmVjdDsKLSAgICBXZWJDb3JlOjpG
bG9hdFJlY3QgbV9kaXJ0eVJlY3Q7CiAgICAgR3JhcGhpY3NMYXllcldDJiBtX293bmVyOworICAg
IFdDVGlsZUdyaWQgbV90aWxlR3JpZDsKIH07CiAKIApAQCAtMjgyLDYgKzI4MCw3IEBAIHZvaWQg
R3JhcGhpY3NMYXllcldDOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKICAgICBpZiAo
c2l6ZSA9PSBtX3NpemUpCiAgICAgICAgIHJldHVybjsKICAgICBHcmFwaGljc0xheWVyOjpzZXRT
aXplKHNpemUpOworICAgIG1fdGlsZWRCYWNraW5nLT5zZXRTaXplKHNpemUpOwogICAgIG5vdGVM
YXllclByb3BlcnR5Q2hhbmdlZChXQ0xheWVyQ2hhbmdlOjpHZW9tZXRyeSk7CiB9CiAKQEAgLTY5
NSw4ICs2OTQsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJXQzo6cmVjdXJzaXZlQ29tbWl0Q2hhbmdl
cyhjb25zdCBUcmFuc2Zvcm1TdGF0ZSYgc3RhdGUpCiAKICAgICBib29sIGFjY3VtdWxhdGVUcmFu
c2Zvcm0gPSBhY2N1bXVsYXRlc1RyYW5zZm9ybSgqdGhpcyk7CiAgICAgVmlzaWJsZUFuZENvdmVy
YWdlUmVjdHMgcmVjdHMgPSBjb21wdXRlVmlzaWJsZUFuZENvdmVyYWdlUmVjdChsb2NhbFN0YXRl
LCBhY2N1bXVsYXRlVHJhbnNmb3JtKTsKLSAgICBtX3RpbGVkQmFja2luZy0+c2V0Q292ZXJhZ2VS
ZWN0KHJlY3RzLmNvdmVyYWdlUmVjdCk7Ci0gICAgaWYgKG1fdGlsZWRCYWNraW5nLT5oYXNEaXJ0
eVJlY3QoKSkKKyAgICBib29sIG5lZWRzVG9QYWludCA9IG1fdGlsZWRCYWNraW5nLT51cGRhdGVD
b3ZlcmFnZVJlY3QocmVjdHMuY292ZXJhZ2VSZWN0KTsKKyAgICBpZiAobmVlZHNUb1BhaW50KQog
ICAgICAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoV0NMYXllckNoYW5nZTo6QmFja2dyb3Vu
ZCwgRG9udFNjaGVkdWxlRmx1c2gpOwogCiAgICAgZmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhp
c0xheWVyT25seSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2Uvd2MvV0NUaWxlR3JpZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93
Yy9XQ1RpbGVHcmlkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNjcwNWFlYmQzOTMzZjNiNTE0NmNmMWM3ODkw
N2I3ZDBjNWE4ZTI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2Uvd2MvV0NUaWxlR3JpZC5jcHAKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjIgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldDVGlsZUdyaWQuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dDVGls
ZUdyaWQ6OlRpbGU6OlRpbGUoV2ViQ29yZTo6SW50UmVjdCByZWN0KQorICAgIDogbV90aWxlUmVj
dChyZWN0KQorICAgICwgbV9kaXJ0eVJlY3QocmVjdCkKK3sKK30KKwordm9pZCBXQ1RpbGVHcmlk
OjpUaWxlOjphZGREaXJ0eVJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KQor
eworICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCB7IGRpcnR5UmVjdCB9OworICAgIHJlY3QuaW50
ZXJzZWN0KG1fdGlsZVJlY3QpOworICAgIG1fZGlydHlSZWN0LnVuaXRlKHJlY3QpOworfQorCit2
b2lkIFdDVGlsZUdyaWQ6OlRpbGU6OmNsZWFyRGlydHlSZWN0KCkKK3sKKyAgICBtX2RpcnR5UmVj
dCA9IHsgfTsKK30KKworYm9vbCBXQ1RpbGVHcmlkOjpUaWxlOjpoYXNEaXJ0eVJlY3QoKSBjb25z
dAoreworICAgIHJldHVybiAhbV9kaXJ0eVJlY3QuaXNFbXB0eSgpOworfQorCit2b2lkIFdDVGls
ZUdyaWQ6OnNldFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBtX3Np
emUgPSBzaXplOworICAgIG1fdGlsZXMuY2xlYXIoKTsKK30KKworV2ViQ29yZTo6SW50UmVjdCBX
Q1RpbGVHcmlkOjp0aWxlUmVjdEZyb21QaXhlbFJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
cmVjdCkKK3sKKyAgICBpbnQgeCA9IHN0ZDo6bWF4KHJlY3QueCgpLCAwKTsKKyAgICBpbnQgeSA9
IHN0ZDo6bWF4KHJlY3QueSgpLCAwKTsKKyAgICBpbnQgbWF4WCA9IHN0ZDo6bWF4KHJlY3QubWF4
WCgpLCAwKTsKKyAgICBpbnQgbWF4WSA9IHN0ZDo6bWF4KHJlY3QubWF4WSgpLCAwKTsKKyAgICB4
IC89IHRpbGVQaXhlbFNpemUoKS53aWR0aCgpOworICAgIHkgLz0gdGlsZVBpeGVsU2l6ZSgpLmhl
aWdodCgpOworICAgIG1heFggPSAobWF4WCArIHRpbGVQaXhlbFNpemUoKS53aWR0aCgpIC0gMSkg
LyB0aWxlUGl4ZWxTaXplKCkud2lkdGgoKTsKKyAgICBtYXhZID0gKG1heFkgKyB0aWxlUGl4ZWxT
aXplKCkuaGVpZ2h0KCkgLSAxKSAvIHRpbGVQaXhlbFNpemUoKS5oZWlnaHQoKTsKKyAgICByZXR1
cm4geyB4LCB5LCBtYXhYIC0geCwgbWF4WSAtIHkgfTsKK30KKworV2ViQ29yZTo6SW50U2l6ZSBX
Q1RpbGVHcmlkOjp0aWxlU2l6ZUZyb21QaXhlbFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
c2l6ZSkKK3sKKyAgICBpbnQgd2lkdGggPSAoc2l6ZS53aWR0aCgpICsgdGlsZVBpeGVsU2l6ZSgp
LndpZHRoKCkgLSAxKSAvIHRpbGVQaXhlbFNpemUoKS53aWR0aCgpOworICAgIGludCBoZWlnaHQg
PSAoc2l6ZS5oZWlnaHQoKSArIHRpbGVQaXhlbFNpemUoKS5oZWlnaHQoKSAtIDEpIC8gdGlsZVBp
eGVsU2l6ZSgpLmhlaWdodCgpOworICAgIHJldHVybiB7IHdpZHRoLCBoZWlnaHQgfTsKK30KKwor
V2ViQ29yZTo6SW50U2l6ZSBXQ1RpbGVHcmlkOjp0aWxlUGl4ZWxTaXplKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4geyA1MTIsIDUxMiB9OworfQorCit2b2lkIFdDVGlsZUdyaWQ6OmFkZERpcnR5UmVj
dChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgZm9yIChhdXRvJiBp
dGVyYXRvciA6IG1fdGlsZXMpCisgICAgICAgIGl0ZXJhdG9yLnZhbHVlLT5hZGREaXJ0eVJlY3Qo
ZGlydHlSZWN0KTsKK30KKwordm9pZCBXQ1RpbGVHcmlkOjpjbGVhckRpcnR5UmVjdHMoKQorewor
ICAgIG1fdGlsZXMucmVtb3ZlSWYoW10oYXV0byYgdGlsZSkgeworICAgICAgICByZXR1cm4gdGls
ZS52YWx1ZS0+d2lsbFJlbW92ZSgpOworICAgIH0pOworICAgIGZvciAoYXV0byYgaXRlcmF0b3Ig
OiBtX3RpbGVzKQorICAgICAgICBpdGVyYXRvci52YWx1ZS0+Y2xlYXJEaXJ0eVJlY3QoKTsKK30K
KworYm9vbCBXQ1RpbGVHcmlkOjplbnN1cmVUaWxlKFRpbGVJbmRleCBpbmRleCkKK3sKKyAgICBy
ZXR1cm4gbV90aWxlcy5lbnN1cmUoaW5kZXgsIFsmXSgpIHsKKyAgICAgICAgaW50IHgxID0gaW5k
ZXgueCgpICogdGlsZVBpeGVsU2l6ZSgpLndpZHRoKCk7CisgICAgICAgIGludCB5MSA9IGluZGV4
LnkoKSAqIHRpbGVQaXhlbFNpemUoKS5oZWlnaHQoKTsKKyAgICAgICAgaW50IHgyID0gc3RkOjpt
aW4oeDEgKyB0aWxlUGl4ZWxTaXplKCkud2lkdGgoKSwgbV9zaXplLndpZHRoKCkpOworICAgICAg
ICBpbnQgeTIgPSBzdGQ6Om1pbih5MSArIHRpbGVQaXhlbFNpemUoKS5oZWlnaHQoKSwgbV9zaXpl
LmhlaWdodCgpKTsKKyAgICAgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0IHsgeDEsIHkxLCB4MiAt
IHgxLCB5MiAtIHkxIH07CisgICAgICAgIEFTU0VSVChXZWJDb3JlOjpJbnRSZWN0KHsgfSwgbV9z
aXplKS5jb250YWlucyhyZWN0KSk7CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFRpbGU+KHJl
Y3QpOworICAgIH0pLmlzTmV3RW50cnk7Cit9CisKK2Jvb2wgV0NUaWxlR3JpZDo6c2V0Q292ZXJh
Z2VSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyYWdlKQoreworICAgIGJvb2wgbmVl
ZHNUb1BhaW50ID0gZmFsc2U7CisgICAgYXV0byB0aWxlUmVjdCA9IHRpbGVSZWN0RnJvbVBpeGVs
UmVjdChjb3ZlcmFnZSk7CisKKyAgICBmb3IgKGF1dG8mIGl0ZXJhdG9yIDogbV90aWxlcykgewor
ICAgICAgICBpZiAoIXRpbGVSZWN0LmNvbnRhaW5zKGl0ZXJhdG9yLmtleSkpCisgICAgICAgICAg
ICBpdGVyYXRvci52YWx1ZS0+c2V0V2lsbFJlbW92ZSh0cnVlKTsKKyAgICB9CisgICAgZm9yIChp
bnQgeSA9IHRpbGVSZWN0LnkoKTsgeSA8IHRpbGVSZWN0Lm1heFkoKTsgeSsrKSB7CisgICAgICAg
IGZvciAoaW50IHggPSB0aWxlUmVjdC54KCk7IHggPCB0aWxlUmVjdC5tYXhYKCk7IHgrKykgewor
ICAgICAgICAgICAgaWYgKGVuc3VyZVRpbGUoeyB4LCB5IH0pKQorICAgICAgICAgICAgICAgIG5l
ZWRzVG9QYWludCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG5lZWRzVG9Q
YWludDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ1RpbGVHcmlkLmggYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS93Yy9XQ1RpbGVHcmlkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmZlMDQ5OTVmYzQ1
NDM3NDFhZWMxZTEzNzUzZDIyZmNjZGU0NzJmMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDVGlsZUdyaWQuaApAQCAtMCwwICsxLDcxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVu
dCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9UZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBXQ1RpbGVHcmlkIHsKK3B1YmxpYzoKKyAgICB1c2luZyBUaWxlSW5kZXggPSBX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3BhcnNlQmFja2luZ1N0b3JlOjpUaWxlSW5kZXg7CisKKyAg
ICBjbGFzcyBUaWxlIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFRpbGUpOworICAgIHB1YmxpYzoKKyAgICAgICAgVGlsZShX
ZWJDb3JlOjpJbnRSZWN0KTsKKyAgICAgICAgYm9vbCB3aWxsUmVtb3ZlKCkgY29uc3QgeyByZXR1
cm4gbV93aWxsUmVtb3ZlOyB9CisgICAgICAgIHZvaWQgc2V0V2lsbFJlbW92ZShib29sIHYpIHsg
bV93aWxsUmVtb3ZlID0gdjsgfQorICAgICAgICB2b2lkIGFkZERpcnR5UmVjdChjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jik7CisgICAgICAgIHZvaWQgY2xlYXJEaXJ0eVJlY3QoKTsKKyAgICAgICAg
Ym9vbCBoYXNEaXJ0eVJlY3QoKSBjb25zdDsKKyAgICAgICAgV2ViQ29yZTo6SW50UmVjdCYgZGly
dHlSZWN0KCkgeyByZXR1cm4gbV9kaXJ0eVJlY3Q7IH0KKworICAgIHByaXZhdGU6CisgICAgICAg
IGJvb2wgbV93aWxsUmVtb3ZlIHsgZmFsc2UgfTsKKyAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBt
X3RpbGVSZWN0OworICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fZGlydHlSZWN0OworICAgIH07
CisKKyAgICB2b2lkIHNldFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOworICAgIHZvaWQg
YWRkRGlydHlSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIGNsZWFyRGly
dHlSZWN0cygpOworICAgIGJvb2wgc2V0Q292ZXJhZ2VSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKTsKKyAgICBhdXRvJiB0aWxlcygpIHsgcmV0dXJuIG1fdGlsZXM7IH0KKyAgICBXZWJDb3Jl
OjpJbnRTaXplIHRpbGVQaXhlbFNpemUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBib29sIGVu
c3VyZVRpbGUoVGlsZUluZGV4KTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHRpbGVSZWN0RnJvbVBp
eGVsUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgV2ViQ29yZTo6SW50U2l6ZSB0
aWxlU2l6ZUZyb21QaXhlbFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOworICAgIAorICAg
IFdlYkNvcmU6OkludFNpemUgbV9zaXplOworICAgIEhhc2hNYXA8VGlsZUluZGV4LCBzdGQ6OnVu
aXF1ZV9wdHI8VGlsZT4+IG1fdGlsZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDVXBhdGVJbmZv
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93Yy9XQ1VwYXRlSW5mby5oCmlu
ZGV4IDA1YTJhZWRlYjQxZjk1OWYzYTZjMWVjYmYwOWEwYzQxY2JhYmUwZjQuLjk1ZTYzNzVlZTMw
N2FlYTY0MzliNjM1MDA4MmYwZDIzODE2YmUzZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL3djL1dDVXBhdGVJbmZvLmgKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2Uvd2MvV0NVcGF0ZUluZm8uaApAQCAtMjksMTIgKzI5LDQ1IEBACiAj
aW5jbHVkZSAiV0NDb250ZW50QnVmZmVySWRlbnRpZmllci5oIgogI2luY2x1ZGUgIldlYkNvcmVB
cmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZS5oPgogI2luY2x1
ZGUgPG9wdGlvbmFsPgogI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3Rm
L09wdGlvblNldC5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorc3RydWN0IFdDVGlsZVVwZGF0
ZSB7CisgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNwYXJzZUJhY2tpbmdTdG9yZTo6VGlsZUlu
ZGV4IGluZGV4OworICAgIGJvb2wgd2lsbFJlbW92ZSB7IGZhbHNlIH07CisgICAgV0NCYWNraW5n
U3RvcmUgYmFja2luZ1N0b3JlOworICAgIFdlYkNvcmU6OkludFJlY3QgZGlydHlSZWN0OworCisg
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgZW5jb2RlciA8PCBpbmRleCA8PCB3aWxsUmVtb3Zl
OworICAgICAgICBpZiAoIXdpbGxSZW1vdmUpCisgICAgICAgICAgICBlbmNvZGVyIDw8IGJhY2tp
bmdTdG9yZSA8PCBkaXJ0eVJlY3Q7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIERlY29k
ZXI+CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V0NUaWxlVXBkYXRlPiBkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKKyAgICB7CisgICAgICAgIFdDVGlsZVVwZGF0ZSByZXN1bHQ7CisgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmluZGV4KSkKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LndpbGxSZW1v
dmUpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgaWYgKCFyZXN1
bHQud2lsbFJlbW92ZSkgeworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
YmFja2luZ1N0b3JlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZGlydHlSZWN0KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICB9CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorfTsKKwogZW51bSBjbGFzcyBXQ0xheWVyQ2hhbmdlIDogdWludDMyX3Qg
ewogICAgIENoaWxkcmVuICAgICAgICAgICAgICAgID0gMSA8PCAgMCwKICAgICBNYXNrTGF5ZXIg
ICAgICAgICAgICAgICA9IDEgPDwgIDEsCkBAIC04MywxNSArMTE2LDEzIEBAIHN0cnVjdCBXQ0xh
eWVyVXBhdGVJbmZvIHsKICAgICBmbG9hdCBkZWJ1Z0JvcmRlcldpZHRoOwogICAgIGludCByZXBh
aW50Q291bnQ7CiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnRlbnRzUmVjdDsKLSAgICBXQ0Jh
Y2tpbmdTdG9yZSBiYWNraW5nU3RvcmU7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBkaXJ0eVJlY3Q7
Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBjb3ZlcmFnZVJlY3Q7CiAgICAgV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwogICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0
cml4IGNoaWxkcmVuVHJhbnNmb3JtOwogICAgIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgZmls
dGVyczsKICAgICBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zIGJhY2tkcm9wRmlsdGVyczsKICAg
ICBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0IGJhY2tkcm9wRmlsdGVyc1JlY3Q7CiAgICAgV2Vi
Q29yZTo6RmxvYXRSb3VuZGVkUmVjdCBjb250ZW50c0NsaXBwaW5nUmVjdDsKKyAgICBWZWN0b3I8
V0NUaWxlVXBkYXRlPiB0aWxlVXBkYXRlOwogICAgIFZlY3RvcjxXQ0NvbnRlbnRCdWZmZXJJZGVu
dGlmaWVyPiBjb250ZW50QnVmZmVySWRlbnRpZmllcnM7CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgpAQCAtMTI4LDcgKzE1OSw3IEBAIHN0cnVjdCBXQ0xheWVyVXBhdGVJbmZvIHsKICAg
ICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpPcGFjaXR5KQogICAgICAgICAgICAg
ZW5jb2RlciA8PCBvcGFjaXR5OwogICAgICAgICBpZiAoY2hhbmdlcyAmIFdDTGF5ZXJDaGFuZ2U6
OkJhY2tncm91bmQpCi0gICAgICAgICAgICBlbmNvZGVyIDw8IGJhY2tncm91bmRDb2xvciA8PCBo
YXNCYWNraW5nU3RvcmUgPDwgYmFja2luZ1N0b3JlIDw8IGRpcnR5UmVjdCA8PCBjb3ZlcmFnZVJl
Y3Q7CisgICAgICAgICAgICBlbmNvZGVyIDw8IGJhY2tncm91bmRDb2xvciA8PCBoYXNCYWNraW5n
U3RvcmUgPDwgdGlsZVVwZGF0ZTsKICAgICAgICAgaWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdl
OjpUcmFuc2Zvcm0pCiAgICAgICAgICAgICBlbmNvZGVyIDw8IHRyYW5zZm9ybTsKICAgICAgICAg
aWYgKGNoYW5nZXMgJiBXQ0xheWVyQ2hhbmdlOjpDaGlsZHJlblRyYW5zZm9ybSkKQEAgLTIyMSwx
MSArMjUyLDcgQEAgc3RydWN0IFdDTGF5ZXJVcGF0ZUluZm8gewogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lmhhc0Jh
Y2tpbmdTdG9yZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYmFja2luZ1N0b3JlKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5k
aXJ0eVJlY3QpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNvdmVyYWdlUmVjdCkpCisgICAgICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC50aWxlVXBkYXRlKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJlc3VsdC5jaGFuZ2VzICYgV0NMYXll
ckNoYW5nZTo6VHJhbnNmb3JtKSB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>