<?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>221072</bug_id>
          
          <creation_ts>2021-01-27 18:27:13 -0800</creation_ts>
          <short_desc>Synthesize range responses if needed in WebCoreNSURLSession</short_desc>
          <delta_ts>2021-02-22 16:30:10 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=156739</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=222067</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=222087</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=222126</see_also>
          <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="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>annulen</cc>
    
    <cc>ap</cc>
    
    <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>vjaquez</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1723247</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-01-27 18:27:13 -0800</bug_when>
    <thetext>Synthesize range responses if needed in WebCoreNSURLSession</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723250</commentid>
    <comment_count>1</comment_count>
      <attachid>418606</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-01-27 18:35:05 -0800</bug_when>
    <thetext>Created attachment 418606
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723394</commentid>
    <comment_count>2</comment_count>
      <attachid>418606</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-01-28 09:42:21 -0800</bug_when>
    <thetext>Comment on attachment 418606
Patch

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

&gt; Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.mm:983
&gt;  - (void)resource:(PlatformMediaResource&amp;)resource receivedData:(const char*)data length:(int)length
&gt;  {
&gt; +    if (_buffer) {
&gt; +        _buffer-&gt;append(data, length);
&gt; +        return;
&gt; +    }

Should we consider synthesizing a receivedData here too, in case there&apos;s been a range request within the received range, and loadFinished won&apos;t happen for a while?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723395</commentid>
    <comment_count>3</comment_count>
      <attachid>418606</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-01-28 09:43:22 -0800</bug_when>
    <thetext>Comment on attachment 418606
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        This first iteration is awful.  Don&apos;t approve it.  It downloads the entire video anytime any range is requested.

This suggests there&apos;s some serious room for improvement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723396</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-01-28 09:47:15 -0800</bug_when>
    <thetext>Got it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723580</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2021-01-28 18:54:15 -0800</bug_when>
    <thetext>rdar://problem/20696449&amp;71729210 :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723994</commentid>
    <comment_count>6</comment_count>
      <attachid>418800</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-01-29 19:29:46 -0800</bug_when>
    <thetext>Created attachment 418800
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1725435</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-02-03 18:28:13 -0800</bug_when>
    <thetext>&lt;rdar://problem/73959759&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1726441</commentid>
    <comment_count>8</comment_count>
      <attachid>419520</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-06 19:41:28 -0800</bug_when>
    <thetext>Created attachment 419520
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1726443</commentid>
    <comment_count>9</comment_count>
      <attachid>419522</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-06 19:54:52 -0800</bug_when>
    <thetext>Created attachment 419522
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1726444</commentid>
    <comment_count>10</comment_count>
      <attachid>419523</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-06 20:05:52 -0800</bug_when>
    <thetext>Created attachment 419523
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1726445</commentid>
    <comment_count>11</comment_count>
      <attachid>419524</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-06 20:24:53 -0800</bug_when>
    <thetext>Created attachment 419524
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1726486</commentid>
    <comment_count>12</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-07 10:04:39 -0800</bug_when>
    <thetext>Neat! Does this fix the issue on bugs.webkit.org not working with video attachments???</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1726675</commentid>
    <comment_count>13</comment_count>
      <attachid>419524</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-08 09:35:13 -0800</bug_when>
    <thetext>Comment on attachment 419524
Patch

It does!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1726847</commentid>
    <comment_count>14</comment_count>
      <attachid>419524</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-02-08 15:27:35 -0800</bug_when>
    <thetext>Comment on attachment 419524
Patch

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

r=me -- is the + 1 thing a bug?

&gt; Source/WebCore/platform/network/cocoa/RangeResponseGenerator.mm:127
&gt; +            size_t bytesFromThisViewToDeliver = std::min(bufferView.size(), range.end() - byteIndex + 1);

Why + 1? (Typically, end - index is the right math for computing the size of a range.)

&gt; Source/WebCore/platform/network/cocoa/RangeResponseGenerator.mm:203
&gt; +    class Client : public PlatformMediaResourceClient {

While it&apos;s true that we don&apos;t need access to this class declaration outside this scope, I think it would be more readable to declare it at file level. Maybe name it RangeResponsePlatformMediaResourceClient.

&gt; Source/WebCore/platform/network/cocoa/RangeResponseGenerator.mm:210
&gt; +        // These methods should have been called before changing the client to this.

We might as well make these release asserts, since they&apos;ll never be called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1726933</commentid>
    <comment_count>15</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-08 19:51:08 -0800</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #14)
&gt; Comment on attachment 419524 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=419524&amp;action=review
&gt; 
&gt; r=me -- is the + 1 thing a bug?
&gt; 
&gt; &gt; Source/WebCore/platform/network/cocoa/RangeResponseGenerator.mm:127
&gt; &gt; +            size_t bytesFromThisViewToDeliver = std::min(bufferView.size(), range.end() - byteIndex + 1);
&gt; 
&gt; Why + 1? (Typically, end - index is the right math for computing the size of
&gt; a range.)
With HTTP ranges, you need to go to and including the end.  For example, if you have a request with a header field like this:
Range: bytes=0-1
then you need to deliver two bytes, byte zero and byte one.  If you don&apos;t, then our media implementation detects improper HTTP range support and fails to play the video.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1727168</commentid>
    <comment_count>16</comment_count>
      <attachid>419524</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-09 12:04:27 -0800</bug_when>
    <thetext>Comment on attachment 419524
Patch

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

&gt;&gt; Source/WebCore/platform/network/cocoa/RangeResponseGenerator.mm:203
&gt;&gt; +    class Client : public PlatformMediaResourceClient {
&gt; 
&gt; While it&apos;s true that we don&apos;t need access to this class declaration outside this scope, I think it would be more readable to declare it at file level. Maybe name it RangeResponsePlatformMediaResourceClient.

It needs to access private members of RangeResponseGenerator.  I&apos;m going to make it a nested class outside the function to get all the benefits of scope, private access, and readability.

&gt;&gt; Source/WebCore/platform/network/cocoa/RangeResponseGenerator.mm:210
&gt;&gt; +        // These methods should have been called before changing the client to this.
&gt; 
&gt; We might as well make these release asserts, since they&apos;ll never be called.

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1727169</commentid>
    <comment_count>17</comment_count>
      <attachid>419750</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-09 12:04:37 -0800</bug_when>
    <thetext>Created attachment 419750
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1727193</commentid>
    <comment_count>18</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-09 12:58:23 -0800</bug_when>
    <thetext>http://trac.webkit.org/r272603</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1727194</commentid>
    <comment_count>19</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-09 12:59:12 -0800</bug_when>
    <thetext>This was also rdar://problem/73575468</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728151</commentid>
    <comment_count>20</comment_count>
      <attachid>419750</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-02-11 10:05:53 -0800</bug_when>
    <thetext>Comment on attachment 419750
Patch

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

Apparently landed already, but I have a few coding style comments.

&gt; Source/WebCore/platform/network/ParsedRequestRange.cpp:33
&gt; +Optional&lt;ParsedRequestRange&gt; ParsedRequestRange::parse(const String&amp; input)

This should take a StringView. This will naturally make the implementation more efficient.

&gt; Source/WebCore/platform/network/ParsedRequestRange.cpp:46
&gt; +    // FIXME: Add StringView.toUInt64Strict to avoid these unnecessary String copies.

If we don’t want to put the StringView changes into the same patch, it’s still straightforward to avoid the unnecessary string copies by calling using an if (is8Bit()) call and calling charactersToUInt64Strict directly, without adding to StringView. I would prefer that. Or you can even put the helper function in this file and just have the FIXME be about moving the function from this file to StringView.h/cpp.

&gt; Source/WebCore/platform/network/ParsedRequestRange.h:32
&gt; +class ParsedRequestRange {

Seems to me this it would be nicer to have this be a struct rather than a class. In contexts where we want to emphasize that we don’t want to modify begin and end, we can use const. Rather than having a class where the const-ness is built in.

&gt; Source/WebCore/platform/network/cocoa/RangeResponseGenerator.h:50
&gt; +    class MediaResourceClient;

Just want to double check that this needs to be a member. Can just be in the .cpp file, but I think being a member gives it access to private stuff. Leaving it out of the header is nicer for future refactoring, so want to confirm it’s worthwhile to have it here.

&gt; Source/WebCore/platform/network/cocoa/RangeResponseGenerator.h:56
&gt; +    HashMap&lt;URL, std::unique_ptr&lt;Data&gt;&gt; m_map;

Should consider whether we want to use URLs or URL strings to key this map. Is it important to use the extra memory to keep the parsed URL character offsets in the map? If not, I don’t see much downside to key based on the URL strings instead of the actual URL objects. But maybe I am missing some advantage that is worth the considerable extra memory use.

&gt; Source/WebCore/platform/network/cocoa/RangeResponseGenerator.mm:43
&gt; +    WTF_MAKE_FAST_ALLOCATED;
&gt; +public:

We have a WTF_MAKE_STRUCT_FAST_ALLOCATED macro that avoids the need for this awkward &quot;public&quot;.

&gt; Source/WebCore/platform/network/cocoa/RangeResponseGenerator.mm:49
&gt; +    struct TaskData : public CanMakeWeakPtr&lt;TaskData&gt; {

I suggest omitting public when specifying base classes for structs; they are public by default. For classes we tend to be explicit about both public and private even though private is the default, but I think that’s because public inheritance is *so* much more common.

&gt; Source/WebCore/platform/network/cocoa/RangeResponseGenerator.mm:51
&gt; +        WTF_MAKE_FAST_ALLOCATED;
&gt; +    public:

Here too.

&gt; Source/WebCore/platform/network/cocoa/RangeResponseGenerator.mm:53
&gt; +            : range(WTFMove(range))

I don’t think we need to use move semantics for a struct with two integers in it.

&gt; Source/WebCore/platform/network/cocoa/RangeResponseGenerator.mm:154
&gt; +    // FIXME: ResourceResponseBase::expectedContentLength() should return Optional&lt;size_t&gt; instead of us doing this check here.

I agree with this because NSURLResponseUnknownLength is a platform-specific sentinel value that should not make its way into platform-independent code like ResourceResponseBase.

&gt; Source/WebCore/platform/network/cocoa/RangeResponseGenerator.mm:198
&gt; +        RELEASE_ASSERT_NOT_REACHED();

I’d love to find an adjustment we could make to design this out. I think it’s the classic Liskov Substitution Principle problem.

&gt; Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.h:154
&gt; +@interface WebCoreNSURLSessionDataTask (WebKitInternal)

Does this belong in a different header? Is this exposing internals of NSURLSession? If so, I think it should go into an &quot;SPI&quot; header, even though SPI is not quite the right term.

Why the category name WebKitInternal? What does that mean exactly; for use in WebKit internally, or defined by WebKit for user internally? Maybe omitting the name is better?

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/MediaLoading.mm:126
&gt; +        &quot;video.autoplay = 1;&quot;

I’d leave out the spaces here to match the lines above.

&gt; Tools/TestWebKitAPI/cocoa/HTTPServer.mm:215
&gt; +static void appendToVector(Vector&lt;uint8_t&gt;&amp; vector, const String&amp; string)

I think this function needs UTF8 in its name.

&gt; Tools/TestWebKitAPI/cocoa/HTTPServer.mm:217
&gt; +    auto utf8 = string.utf8();

Very unfortunate to make so many copies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728164</commentid>
    <comment_count>21</comment_count>
      <attachid>419750</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-11 10:49:39 -0800</bug_when>
    <thetext>Comment on attachment 419750
Patch

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

&gt;&gt; Source/WebCore/platform/network/cocoa/RangeResponseGenerator.h:50
&gt;&gt; +    class MediaResourceClient;
&gt; 
&gt; Just want to double check that this needs to be a member. Can just be in the .cpp file, but I think being a member gives it access to private stuff. Leaving it out of the header is nicer for future refactoring, so want to confirm it’s worthwhile to have it here.

It needs access to RangeResponseGenerator&apos;s private members, and I like the scoping of nested classes here.

&gt;&gt; Source/WebCore/platform/network/cocoa/RangeResponseGenerator.h:56
&gt;&gt; +    HashMap&lt;URL, std::unique_ptr&lt;Data&gt;&gt; m_map;
&gt; 
&gt; Should consider whether we want to use URLs or URL strings to key this map. Is it important to use the extra memory to keep the parsed URL character offsets in the map? If not, I don’t see much downside to key based on the URL strings instead of the actual URL objects. But maybe I am missing some advantage that is worth the considerable extra memory use.

URL strings would save memory.  That&apos;s true.

&gt;&gt; Source/WebCore/platform/network/cocoa/RangeResponseGenerator.mm:43
&gt;&gt; +public:
&gt; 
&gt; We have a WTF_MAKE_STRUCT_FAST_ALLOCATED macro that avoids the need for this awkward &quot;public&quot;.

That&apos;s exactly what I need here.  Thanks.

&gt;&gt; Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.h:154
&gt;&gt; +@interface WebCoreNSURLSessionDataTask (WebKitInternal)
&gt; 
&gt; Does this belong in a different header? Is this exposing internals of NSURLSession? If so, I think it should go into an &quot;SPI&quot; header, even though SPI is not quite the right term.
&gt; 
&gt; Why the category name WebKitInternal? What does that mean exactly; for use in WebKit internally, or defined by WebKit for user internally? Maybe omitting the name is better?

We do need to move this to a different header.  See rdar://problem/72317626</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728167</commentid>
    <comment_count>22</comment_count>
      <attachid>419750</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-11 10:53:08 -0800</bug_when>
    <thetext>Comment on attachment 419750
Patch

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

&gt;&gt; Source/WebCore/platform/network/ParsedRequestRange.cpp:46
&gt;&gt; +    // FIXME: Add StringView.toUInt64Strict to avoid these unnecessary String copies.
&gt; 
&gt; If we don’t want to put the StringView changes into the same patch, it’s still straightforward to avoid the unnecessary string copies by calling using an if (is8Bit()) call and calling charactersToUInt64Strict directly, without adding to StringView. I would prefer that. Or you can even put the helper function in this file and just have the FIXME be about moving the function from this file to StringView.h/cpp.

StringView.toUInt64Strict already exists.  Will adopt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728399</commentid>
    <comment_count>23</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-11 18:01:05 -0800</bug_when>
    <thetext>This also caused https://bugs.webkit.org/show_bug.cgi?id=221698 and has room for improvement and needs some more investigation as to why some videos still aren&apos;t playing.  Reverting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729306</commentid>
    <comment_count>24</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-15 12:50:17 -0800</bug_when>
    <thetext>Reopening because I reverted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729485</commentid>
    <comment_count>25</comment_count>
      <attachid>420405</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-15 17:35:02 -0800</bug_when>
    <thetext>Created attachment 420405
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729487</commentid>
    <comment_count>26</comment_count>
      <attachid>420406</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-15 17:43:48 -0800</bug_when>
    <thetext>Created attachment 420406
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729549</commentid>
    <comment_count>27</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-02-15 20:53:15 -0800</bug_when>
    <thetext>ChangeLog entry in Source/WebKit/ChangeLog contains OOPS!.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729695</commentid>
    <comment_count>28</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-16 09:00:28 -0800</bug_when>
    <thetext>http://trac.webkit.org/r272908</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729716</commentid>
    <comment_count>29</comment_count>
      <attachid>420406</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-02-16 09:32:59 -0800</bug_when>
    <thetext>Comment on attachment 420406
Patch

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

Sorry to catch you after you landed. A few thoughts post-landing:

&gt; Source/WebCore/ChangeLog:11
&gt; +        Seeking is problematic, but at least we will try our best to play the video.

I would like to understand more about why &quot;seeking is problematic&quot;.

&gt; Source/WebCore/platform/network/ParsedRequestRange.cpp:36
&gt; +    if (!input.startsWith(StringView(&quot;bytes=&quot;_s)))

Should just be able to write &quot;bytes=&quot; here, not StringView(&quot;bytes=&quot;_s).

&gt; Source/WebCore/platform/network/ParsedRequestRange.cpp:40
&gt; +    size_t begin { 0 };
&gt; +    size_t end { 0 };

I suggest we define these below when we set them. Not important to have local variables above there that aren’t used.

    auto begin = *optionalBegin;

Or just dump the name optionalBegin entirely, name that variable something more like just &quot;begin&quot; and write *begin in a few places.

&gt; Source/WebCore/platform/network/ParsedRequestRange.cpp:41
&gt; +    size_t rangeBeginPosition = 6;

Maybe constexpr for this to make it clear that it’s a constant.

&gt; Source/WebCore/platform/network/ParsedRequestRange.cpp:50
&gt; +    begin = *optionalBegin;

Here we are chopping a uint64_t to a size_t; not quite right on 32-bit.

&gt; Source/WebCore/platform/network/ParsedRequestRange.cpp:56
&gt; +    end = *optionalEnd;

Here we are chopping a uint64_t to a size_t; not quite right on 32-bit.

&gt; Source/WebCore/platform/network/ParsedRequestRange.h:29
&gt; +#include &lt;wtf/HashTraits.h&gt;

Why are we including this header?

&gt; Source/WebCore/platform/network/ParsedRequestRange.h:35
&gt; +public:

No need for public in a struct.

&gt; Source/WebCore/platform/network/ParsedRequestRange.h:37
&gt; +    static Optional&lt;ParsedRequestRange&gt; parse(const String&amp; string) { return parse(StringView(string)); }

Do we really need this? I’d expect everything would compile just fine without this, and we also would not have to include StringView.h if we didn’t have this code.

&gt; Source/WebCore/platform/network/ParsedRequestRange.h:40
&gt; +    const size_t begin { 0 };
&gt; +    const size_t end { 0 };

I think these should be uint64_t; I understand that if the values are really large then the code won’t work, but parsing should not depend on 32 vs. 64-bit. I guess this mostly manipulates buffers in memory, which of course should use size_t. But there may be some point where larger numbers have to be checked for on 32-bit systems?

Also, I suggest we just make the whole object const, rather than having each member be const.

&gt; Source/WebCore/platform/network/ParsedRequestRange.h:45
&gt; +private:
&gt; +    ParsedRequestRange(size_t begin, size_t end)
&gt; +        : begin(begin)
&gt; +        , end(end) { }

Can we do without this constructor? I don’t see a strong reason this needs to be private.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729842</commentid>
    <comment_count>30</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-16 11:51:22 -0800</bug_when>
    <thetext>Thanks for the feedback.  I&apos;ll do a follow-up patch that incorporates most of it.  Here&apos;s some responses:

(In reply to Darin Adler from comment #29)
&gt; Comment on attachment 420406 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=420406&amp;action=review
&gt; 
&gt; Sorry to catch you after you landed. A few thoughts post-landing:
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; +        Seeking is problematic, but at least we will try our best to play the video.
&gt; 
&gt; I would like to understand more about why &quot;seeking is problematic&quot;.
Seeking to near the end of a large video would cause a new range request to be issued for a range near the end, which would have to wait until the whole video is loaded to respond.  There&apos;s not much of a way around this, but Jer and I had discussed maybe preventing seeking to parts of the video that haven&apos;t loaded yet.

&gt; &gt; Source/WebCore/platform/network/ParsedRequestRange.cpp:36
&gt; &gt; +    if (!input.startsWith(StringView(&quot;bytes=&quot;_s)))
&gt; 
&gt; Should just be able to write &quot;bytes=&quot; here, not StringView(&quot;bytes=&quot;_s).
That would require the StringView(ASCIILiteral) constructor no longer being explicit.  I&apos;m not sure why it is, but I felt like I didn&apos;t have the justification to change it.

&gt; &gt; Source/WebCore/platform/network/ParsedRequestRange.h:29
&gt; &gt; +#include &lt;wtf/HashTraits.h&gt;
&gt; 
&gt; Why are we including this header?
I needed it in an earlier iteration of this patch.  I can remove it.

&gt; &gt; Source/WebCore/platform/network/ParsedRequestRange.h:37
&gt; &gt; +    static Optional&lt;ParsedRequestRange&gt; parse(const String&amp; string) { return parse(StringView(string)); }
&gt; 
&gt; Do we really need this? I’d expect everything would compile just fine
&gt; without this, and we also would not have to include StringView.h if we
&gt; didn’t have this code.
There are places where we pass in an NSString *, and there isn&apos;t a way to get a StringView out of an NSString * directly.  It&apos;s either this or an explicit String constructor at each call site to get the implicit StringView constructor.
 
&gt; &gt; Source/WebCore/platform/network/ParsedRequestRange.h:45
&gt; &gt; +private:
&gt; &gt; +    ParsedRequestRange(size_t begin, size_t end)
&gt; &gt; +        : begin(begin)
&gt; &gt; +        , end(end) { }
&gt; 
&gt; Can we do without this constructor? I don’t see a strong reason this needs
&gt; to be private.
I wanted the only way to make a ParsedRequestRange be parsing one, which would return nullopt if it failed.  That&apos;s not too important, and I could just remove this for elegance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1730549</commentid>
    <comment_count>31</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-17 14:45:04 -0800</bug_when>
    <thetext>Reverted in r273033</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1730582</commentid>
    <comment_count>32</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2021-02-17 15:19:29 -0800</bug_when>
    <thetext>As an additional note before this gets re-landed, WebKitAPI.MediaLoading.RangeRequestSynthesisWithContentLength was a flaky failure on Big Sur release bots https://results.webkit.org/?suite=api-tests&amp;test=TestWebKitAPI.MediaLoading.RangeRequestSynthesisWithContentLength</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1730901</commentid>
    <comment_count>33</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-18 09:52:53 -0800</bug_when>
    <thetext>Off again in http://trac.webkit.org/r273081</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1732205</commentid>
    <comment_count>34</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-22 10:56:31 -0800</bug_when>
    <thetext>And off again in http://trac.webkit.org/r273263</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1732369</commentid>
    <comment_count>35</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-22 16:30:10 -0800</bug_when>
    <thetext>And on again in https://trac.webkit.org/changeset/273287/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418606</attachid>
            <date>2021-01-27 18:35:05 -0800</date>
            <delta_ts>2021-01-29 19:29:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221072-20210127183504.patch</filename>
            <type>text/plain</type>
            <size>21632</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MTg3MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDIxLTAxLTI3ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3ludGhlc2l6
ZSByYW5nZSByZXNwb25zZXMgaWYgbmVlZGVkIGluIFdlYkNvcmVOU1VSTFNlc3Npb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTA3MgorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vNzM1NzU0Njg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBmaXJzdCBpdGVyYXRpb24gaXMgYXdmdWwuICBEb24n
dCBhcHByb3ZlIGl0LiAgSXQgZG93bmxvYWRzIHRoZSBlbnRpcmUgdmlkZW8gYW55dGltZSBhbnkg
cmFuZ2UgaXMgcmVxdWVzdGVkLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9X
ZWJDb3JlTlNVUkxTZXNzaW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9X
ZWJDb3JlTlNVUkxTZXNzaW9uLm1tOgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxTZXNzaW9uIGRh
dGFUYXNrV2l0aFVSTDpdKToKKyAgICAgICAgKFBhcnNlZFJlcXVlc3RSYW5nZTo6YmVnaW4gY29u
c3QpOgorICAgICAgICAoUGFyc2VkUmVxdWVzdFJhbmdlOjplbmQgY29uc3QpOgorICAgICAgICAo
UGFyc2VkUmVxdWVzdFJhbmdlOjpQYXJzZWRSZXF1ZXN0UmFuZ2UpOgorICAgICAgICAoUGFyc2Vk
UmVxdWVzdFJhbmdlOjpwYXJzZSk6CisgICAgICAgIChzeW50aGVzaXplUmFuZ2VSZXNwb25zZUlm
TmVjZXNzYXJ5KToKKyAgICAgICAgKC1bV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrIHJlc291
cmNlOnJlY2VpdmVkUmVzcG9uc2U6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dl
YkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayByZXNvdXJjZTpyZWNlaXZlZERhdGE6bGVuZ3RoOl0p
OgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgX3Jlc291cmNlOmxvYWRG
aW5pc2hlZFdpdGhFcnJvcjptZXRyaWNzOl0pOgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxTZXNz
aW9uRGF0YVRhc2sgaW5pdFdpdGhTZXNzaW9uOmlkZW50aWZpZXI6VVJMOl0pOiBEZWxldGVkLgor
CiAyMDIxLTAxLTI1ICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBsZS5jb20+CiAKICAgICAgICAg
VHdpdHRlciBQaVAgdmlkZW8gcGF1c2VzIHdoZW4gc2Nyb2xsaW5nCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VS
TFNlc3Npb24uaAkocmV2aXNpb24gMjcxNzM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQz
LDYgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0OwogY2xhc3MgUGxhdGZvcm1NZWRpYVJlc291cmNlOwogY2xhc3MgUGxhdGZvcm1NZWRpYVJl
c291cmNlTG9hZGVyOworY2xhc3MgU2hhcmVkQnVmZmVyOwogY2xhc3MgV2ViQ29yZU5TVVJMU2Vz
c2lvbkRhdGFUYXNrQ2xpZW50OwogfQogCkBAIC0xMjQsNiArMTI1LDcgQEAgV0VCQ09SRV9FWFBP
UlQgQGludGVyZmFjZSBXZWJDb3JlTlNVUkxTZQogICAgIE5TRXJyb3IgKl9lcnJvcjsKICAgICBO
U1N0cmluZyAqX3Rhc2tEZXNjcmlwdGlvbjsKICAgICBmbG9hdCBfcHJpb3JpdHk7CisgICAgUmVm
UHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gX2J1ZmZlcjsKIH0KIAogQHByb3BlcnR5IE5TVUlu
dGVnZXIgdGFza0lkZW50aWZpZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9uLm1tCShyZXZp
c2lvbiAyNzE3MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dl
YkNvcmVOU1VSTFNlc3Npb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAog
I2ltcG9ydCAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW1wb3J0ICJQbGF0Zm9ybU1lZGlh
UmVzb3VyY2VMb2FkZXIuaCIKKyNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgogI2ltcG9ydCAiU3Vi
cmVzb3VyY2VMb2FkZXIuaCIKICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8d3Rm
L0NvbXBsZXRpb25IYW5kbGVyLmg+CkBAIC0yMDcsNyArMjA4LDYgQEAgLSAodm9pZCl0YXNrOihX
ZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhcwogCiBAaW50ZXJmYWNlIFdlYkNvcmVOU1VSTFNlc3Np
b25EYXRhVGFzayAoKQogLSAoaWQpaW5pdFdpdGhTZXNzaW9uOihXZWJDb3JlTlNVUkxTZXNzaW9u
ICopc2Vzc2lvbiBpZGVudGlmaWVyOihOU1VJbnRlZ2VyKWlkZW50aWZpZXIgcmVxdWVzdDooTlNV
UkxSZXF1ZXN0ICopcmVxdWVzdDsKLS0gKGlkKWluaXRXaXRoU2Vzc2lvbjooV2ViQ29yZU5TVVJM
U2Vzc2lvbiAqKXNlc3Npb24gaWRlbnRpZmllcjooTlNVSW50ZWdlcilpZGVudGlmaWVyIFVSTDoo
TlNVUkwgKil1cmw7CiAtICh2b2lkKV9yZXN0YXJ0OwogLSAodm9pZClfY2FuY2VsOwogLSAodm9p
ZClfZmluaXNoOwpAQCAtNDU1LDE1ICs0NTUsNyBAQCAtIChOU1VSTFNlc3Npb25EYXRhVGFzayAq
KWRhdGFUYXNrV2l0aFJlCiAKIC0gKE5TVVJMU2Vzc2lvbkRhdGFUYXNrICopZGF0YVRhc2tXaXRo
VVJMOihOU1VSTCAqKXVybAogewotICAgIGlmIChfaW52YWxpZGF0ZWQpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgKnRhc2sgPSBbW1dlYkNv
cmVOU1VSTFNlc3Npb25EYXRhVGFzayBhbGxvY10gaW5pdFdpdGhTZXNzaW9uOnNlbGYgaWRlbnRp
ZmllcjpfbmV4dFRhc2tJZGVudGlmaWVyKysgVVJMOnVybF07Ci0gICAgewotICAgICAgICBMb2Nr
ZXI8TG9jaz4gbG9ja2VyKF9kYXRhVGFza3NMb2NrKTsKLSAgICAgICAgX2RhdGFUYXNrcy5hZGQo
dGFzayk7Ci0gICAgfQotICAgIHJldHVybiAoTlNVUkxTZXNzaW9uRGF0YVRhc2sgKilbdGFzayBh
dXRvcmVsZWFzZV07CisgICAgcmV0dXJuIFtzZWxmIGRhdGFUYXNrV2l0aFJlcXVlc3Q6W05TVVJM
UmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp1cmxdXTsKIH0KIAogLSAodm9pZClzZW5kSDJQaW5nOihO
U1VSTCAqKXVybCBwb25nSGFuZGxlcjoodm9pZCAoXikoTlNFcnJvciAqZXJyb3IsIE5TVGltZUlu
dGVydmFsIGludGVydmFsKSlwb25nSGFuZGxlcgpAQCAtNjYxLDE3ICs2NTMsNiBAQCB2b2lkIFdl
YkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6CiAjcHJhZ21hIG1hcmsgLSBXZWJDb3Jl
TlNVUkxTZXNzaW9uRGF0YVRhc2sKIAogQGltcGxlbWVudGF0aW9uIFdlYkNvcmVOU1VSTFNlc3Np
b25EYXRhVGFzawotLSAoaWQpaW5pdFdpdGhTZXNzaW9uOihXZWJDb3JlTlNVUkxTZXNzaW9uICop
c2Vzc2lvbiBpZGVudGlmaWVyOihOU1VJbnRlZ2VyKWlkZW50aWZpZXIgVVJMOihOU1VSTCAqKXVy
bAotewotICAgIHNlbGYudGFza0lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIHNlbGYuc2Vz
c2lvbiA9IHNlc3Npb247Ci0gICAgc2VsZi5zdGF0ZSA9IE5TVVJMU2Vzc2lvblRhc2tTdGF0ZVN1
c3BlbmRlZDsKLSAgICBzZWxmLnByaW9yaXR5ID0gTlNVUkxTZXNzaW9uVGFza1ByaW9yaXR5RGVm
YXVsdDsKLSAgICBzZWxmLm9yaWdpbmFsUmVxdWVzdCA9IHNlbGYuY3VycmVudFJlcXVlc3QgPSBb
TlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnVybF07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0K
LQogLSAoaWQpaW5pdFdpdGhTZXNzaW9uOihXZWJDb3JlTlNVUkxTZXNzaW9uICopc2Vzc2lvbiBp
ZGVudGlmaWVyOihOU1VJbnRlZ2VyKWlkZW50aWZpZXIgcmVxdWVzdDooTlNVUkxSZXF1ZXN0ICop
cmVxdWVzdAogewogICAgIHNlbGYudGFza0lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwpAQCAtODE0
LDYgKzc5NSwxMzYgQEAgLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlJgog
ICAgIC8vIE5vLW9wLgogfQogCisvLyBGSVhNRTogTW92ZSB0aGlzIHRvIGEgaGVhZGVyIG5lYXIg
UGFyc2VkQ29udGVudFJhbmdlCitjbGFzcyBQYXJzZWRSZXF1ZXN0UmFuZ2UgeworcHVibGljOgor
ICAgIHN0YXRpYyBPcHRpb25hbDxQYXJzZWRSZXF1ZXN0UmFuZ2U+IHBhcnNlKGNvbnN0IFN0cmlu
ZyYpOworCisgICAgY29uc3QgT3B0aW9uYWw8c2l6ZV90PiYgYmVnaW4oKSBjb25zdCB7IHJldHVy
biBtX2JlZ2luOyB9CisgICAgY29uc3QgT3B0aW9uYWw8c2l6ZV90PiYgZW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9lbmQ7IH0KKworcHJpdmF0ZToKKyAgICBQYXJzZWRSZXF1ZXN0UmFuZ2UoT3B0aW9u
YWw8c2l6ZV90PiBiZWdpbiwgT3B0aW9uYWw8c2l6ZV90PiBlbmQpCisgICAgICAgIDogbV9iZWdp
bihiZWdpbikKKyAgICAgICAgLCBtX2VuZChlbmQpIHsgfQorCisgICAgT3B0aW9uYWw8c2l6ZV90
PiBtX2JlZ2luOworICAgIE9wdGlvbmFsPHNpemVfdD4gbV9lbmQ7Cit9OworCisvLyBGSVhNRTog
QWRkIHRlc3RzCitPcHRpb25hbDxQYXJzZWRSZXF1ZXN0UmFuZ2U+IFBhcnNlZFJlcXVlc3RSYW5n
ZTo6cGFyc2UoY29uc3QgU3RyaW5nJiBpbnB1dCkKK3sKKyAgICBXVEZMb2dBbHdheXMoIlBBUlNJ
TkcgPDwlcz4+IiwgaW5wdXQudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKCFpbnB1dC5zdGFydHNX
aXRoKCJieXRlcz0iX3MpKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiUEFSU0VSIEZBSUxVUkUg
MSIpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIE9wdGlvbmFs
PHNpemVfdD4gYmVnaW47CisgICAgT3B0aW9uYWw8c2l6ZV90PiBlbmQ7CisgICAgc2l6ZV90IHJh
bmdlQmVnaW5Qb3NpdGlvbiA9IDY7CisgICAgc2l6ZV90IGRhc2hQb3NpdGlvbiA9IGlucHV0LmZp
bmQoJy0nLCByYW5nZUJlZ2luUG9zaXRpb24pOworICAgIGlmIChkYXNoUG9zaXRpb24gPT0gbm90
Rm91bmQpIHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJQQVJTRVIgRkFJTFVSRSAyIik7CisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAgLy8gRklYTUU6IEFkZCBTdHJp
bmdWaWV3LnRvVUludDY0U3RyaWN0IHRvIGF2b2lkIHRoaXMgdW5uZWNlc3NhcnkgU3RyaW5nIGNv
cHkuCisgICAgLy8gU2FtZSBpbiBQYXJzZWRDb250ZW50UmFuZ2UuCisgICAgYm9vbCBvayA9IHRy
dWU7CisgICAgU3RyaW5nIGJlZ2luU3RyaW5nID0gaW5wdXQuc3Vic3RyaW5nKHJhbmdlQmVnaW5Q
b3NpdGlvbiwgZGFzaFBvc2l0aW9uIC0gcmFuZ2VCZWdpblBvc2l0aW9uKTsKKyAgICBpZiAoYmVn
aW5TdHJpbmcubGVuZ3RoKCkpIHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJCRUdJTiBTVFJJTkcg
PCVzPiIsIGJlZ2luU3RyaW5nLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBiZWdpbiA9IGJlZ2lu
U3RyaW5nLnRvVUludDY0U3RyaWN0KCZvayk7CisgICAgICAgIGlmICghb2spIHsKKyAgICAgICAg
ICAgIFdURkxvZ0Fsd2F5cygiUEFSU0VSIEZBSUxVUkUgMyIpOworICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIFN0cmluZyBlbmRTdHJpbmcg
PSBpbnB1dC5zdWJzdHJpbmcoZGFzaFBvc2l0aW9uICsgMSk7CisgICAgaWYgKGVuZFN0cmluZy5s
ZW5ndGgoKSkgeworICAgICAgICBlbmQgPSBlbmRTdHJpbmcudG9VSW50NjRTdHJpY3QoJm9rKTsK
KyAgICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJQQVJTRVIgRkFJ
TFVSRSA0IDw8JXM+PiIsIGVuZFN0cmluZy51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKGJlZ2lu
ICYmIGVuZCAmJiAqYmVnaW4gPiAqZW5kKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiUEFSU0VS
IEZBSUxVUkUgNiIpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKworICAg
IHJldHVybiB7eyBiZWdpbiwgZW5kIH19OworfQorCisvLyBGSVhNRTogQWRkIHRlc3RzIGZvciBl
YWNoIG9mIHRoZXNlIGNhc2VzLgorc3RhdGljIGJvb2wgc3ludGhlc2l6ZVJhbmdlUmVzcG9uc2VJ
Zk5lY2Vzc2FyeShOU1VSTFJlcXVlc3QgKm9yaWdpbmFsUmVxdWVzdCwgUmV0YWluUHRyPE5TVVJM
UmVzcG9uc2U+JiByZXNwb25zZSkKK3sKKyAgICBOU1N0cmluZyAqcmVxdWVzdFJhbmdlID0gW29y
aWdpbmFsUmVxdWVzdCB2YWx1ZUZvckhUVFBIZWFkZXJGaWVsZDpAIlJhbmdlIl07CisgICAgaWYg
KCFyZXF1ZXN0UmFuZ2UpIHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJFQVJMWSBSRVRVUk4gMSIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFbcmVzcG9uc2UgaXNL
aW5kT2ZDbGFzczpbTlNIVFRQVVJMUmVzcG9uc2UgY2xhc3NdXSkgeworICAgICAgICBXVEZMb2dB
bHdheXMoIkVBUkxZIFJFVFVSTiAzIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgTlNTdHJpbmcgKnJlc3BvbnNlQ29udGVudExlbmd0aFN0cmluZyA9IFsoTlNIVFRQVVJMUmVz
cG9uc2UgKilyZXNwb25zZSB2YWx1ZUZvckhUVFBIZWFkZXJGaWVsZDpAIkNvbnRlbnQtTGVuZ3Ro
Il07CisgICAgaWYgKCFyZXNwb25zZUNvbnRlbnRMZW5ndGhTdHJpbmcpIHsKKyAgICAgICAgV1RG
TG9nQWx3YXlzKCJFQVJMWSBSRVRVUk4gMiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIGlmIChbKE5TSFRUUFVSTFJlc3BvbnNlICopcmVzcG9uc2Ugc3RhdHVzQ29kZV0gIT0g
MjAwKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiRUFSTFkgUkVUVVJOIDQiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoWyhOU0hUVFBVUkxSZXNwb25zZSAqKXJlc3Bv
bnNlIHZhbHVlRm9ySFRUUEhlYWRlckZpZWxkOkAiQ29udGVudC1SYW5nZSJdKSB7CisgICAgICAg
IFdURkxvZ0Fsd2F5cygiRUFSTFkgUkVUVVJOIDUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGF1dG8gcGFyc2VkUmVxdWVzdFJhbmdlID0gUGFyc2VkUmVxdWVzdFJhbmdl
OjpwYXJzZShyZXF1ZXN0UmFuZ2UpOworICAgIGlmICghcGFyc2VkUmVxdWVzdFJhbmdlKSB7Cisg
ICAgICAgIFdURkxvZ0Fsd2F5cygiRUFSTFkgUkVUVVJOIDYiKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGF1dG8gb2xkQ29udGVudExlbmd0aCA9IFtyZXNwb25zZSBleHBl
Y3RlZENvbnRlbnRMZW5ndGhdOworICAgIGlmICghb2xkQ29udGVudExlbmd0aCB8fCBvbGRDb250
ZW50TGVuZ3RoID09IE5TVVJMUmVzcG9uc2VVbmtub3duTGVuZ3RoKSB7CisgICAgICAgIFdURkxv
Z0Fsd2F5cygiRUFSTFkgUkVUVVJOIDciKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICAKKyAgICBhdXRvJiBiZWdpbiA9IHBhcnNlZFJlcXVlc3RSYW5nZS0+YmVnaW4oKTsKKyAg
ICBhdXRvJiBlbmQgPSBwYXJzZWRSZXF1ZXN0UmFuZ2UtPmVuZCgpOworICAgIAorICAgIFN0cmlu
Z0J1aWxkZXIgY29udGVudFJhbmdlQnVpbGRlcjsKKyAgICBjb250ZW50UmFuZ2VCdWlsZGVyLmFw
cGVuZCgiYnl0ZXMgIik7CisgICAgaWYgKGJlZ2luKQorICAgICAgICBjb250ZW50UmFuZ2VCdWls
ZGVyLmFwcGVuZE51bWJlcigqYmVnaW4pOworICAgIGNvbnRlbnRSYW5nZUJ1aWxkZXIuYXBwZW5k
KCItIik7CisgICAgaWYgKGVuZCkKKyAgICAgICAgY29udGVudFJhbmdlQnVpbGRlci5hcHBlbmRO
dW1iZXIoKmVuZCk7CisgICAgY29udGVudFJhbmdlQnVpbGRlci5hcHBlbmQoIi8iKTsKKyAgICBj
b250ZW50UmFuZ2VCdWlsZGVyLmFwcGVuZE51bWJlcihvbGRDb250ZW50TGVuZ3RoKTsKKyAgICAK
KyAgICBXVEZMb2dBbHdheXMoIk9MRCBIRUFERVJTICVAIiwgWyhOU0hUVFBVUkxSZXNwb25zZSAq
KXJlc3BvbnNlIGFsbEhlYWRlckZpZWxkc10pOworICAgIGF1dG8gbmV3SGVhZGVyRmllbGRzID0g
YWRvcHROUyhbWyhOU0hUVFBVUkxSZXNwb25zZSAqKXJlc3BvbnNlIGFsbEhlYWRlckZpZWxkc10g
bXV0YWJsZUNvcHldKTsKKyAgICBbbmV3SGVhZGVyRmllbGRzIHNldE9iamVjdDpjb250ZW50UmFu
Z2VCdWlsZGVyLnRvU3RyaW5nKCkgZm9yS2V5OkAiQ29udGVudC1SYW5nZSJdOworICAgIGlmIChi
ZWdpbiAmJiBlbmQpCisgICAgICAgIFtuZXdIZWFkZXJGaWVsZHMgc2V0T2JqZWN0Om1ha2VTdHJp
bmcoKmVuZCAtICpiZWdpbiArIDEpIGZvcktleTpAIkNvbnRlbnQtTGVuZ3RoIl07CisgICAgZWxz
ZQorICAgICAgICBbbmV3SGVhZGVyRmllbGRzIHJlbW92ZU9iamVjdEZvcktleTpAIkNvbnRlbnQt
TGVuZ3RoIl07CisgICAgV1RGTG9nQWx3YXlzKCJORVcgSEVBREVSUyAlQCIsIG5ld0hlYWRlckZp
ZWxkcy5nZXQoKSk7CisKKyAgICByZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hUVFBVUkxSZXNwb25z
ZSBhbGxvY10gaW5pdFdpdGhVUkw6W3Jlc3BvbnNlIFVSTF0gc3RhdHVzQ29kZToyMDYgSFRUUFZl
cnNpb246KE5TU3RyaW5nKilrQ0ZIVFRQVmVyc2lvbjFfMSBoZWFkZXJGaWVsZHM6bmV3SGVhZGVy
RmllbGRzLmdldCgpXSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIC0gKHZvaWQpcmVzb3VyY2U6
KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgcmVjZWl2ZWRSZXNwb25zZTooY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYpcmVzcG9uc2UgY29tcGxldGlvbkhhbmRsZXI6KENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoU2hvdWxkQ29udGludWVQb2xpY3lDaGVjayk+JiYpY29tcGxldGlvbkhhbmRs
ZXIKIHsKICAgICBBU1NFUlQocmVzcG9uc2Uuc291cmNlKCkgPT0gUmVzb3VyY2VSZXNwb25zZTo6
U291cmNlOjpOZXR3b3JrIHx8IHJlc3BvbnNlLnNvdXJjZSgpID09IFJlc291cmNlUmVzcG9uc2U6
OlNvdXJjZTo6RGlza0NhY2hlIHx8IHJlc3BvbnNlLnNvdXJjZSgpID09IFJlc291cmNlUmVzcG9u
c2U6OlNvdXJjZTo6RGlza0NhY2hlQWZ0ZXJWYWxpZGF0aW9uIHx8IHJlc3BvbnNlLnNvdXJjZSgp
ID09IFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6U2VydmljZVdvcmtlcik7CkBAIC04MjIsNyAr
OTMzLDExIEBAIC0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYKICAgICBb
c2VsZi5zZXNzaW9uIHRhc2s6c2VsZiBkaWRSZWNlaXZlUmVzcG9uc2VGcm9tT3JpZ2luOlNlY3Vy
aXR5T3JpZ2luOjpjcmVhdGUocmVzcG9uc2UudXJsKCkpXTsKICAgICBbc2VsZi5zZXNzaW9uIHRh
c2s6c2VsZiBkaWRSZWNlaXZlQ09SU0FjY2Vzc0NoZWNrUmVzdWx0OnJlc291cmNlLmRpZFBhc3NB
Y2Nlc3NDb250cm9sQ2hlY2soKV07CiAgICAgc2VsZi5jb3VudE9mQnl0ZXNFeHBlY3RlZFRvUmVj
ZWl2ZSA9IHJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpOwotICAgIFJldGFpblB0cjxO
U1VSTFJlc3BvbnNlPiBzdHJvbmdSZXNwb25zZSB7IHJlc3BvbnNlLm5zVVJMUmVzcG9uc2UoKSB9
OworICAgIFJldGFpblB0cjxOU1VSTFJlc3BvbnNlPiBzdHJvbmdSZXNwb25zZSA9IHJlc3BvbnNl
Lm5zVVJMUmVzcG9uc2UoKTsKKyAgICAKKyAgICBpZiAoc3ludGhlc2l6ZVJhbmdlUmVzcG9uc2VJ
Zk5lY2Vzc2FyeShzZWxmLm9yaWdpbmFsUmVxdWVzdCwgc3Ryb25nUmVzcG9uc2UpKQorICAgICAg
ICBfYnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoKTsKKyAgICAKICAgICBSZXRhaW5QdHI8
V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrPiBzdHJvbmdTZWxmIHsgc2VsZiB9OwogICAgIGlm
ICghc2VsZi5zZXNzaW9uKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoU2hvdWxk
Q29udGludWVQb2xpY3lDaGVjazo6Tm8pOwpAQCAtODYyLDYgKzk3NywxMSBAQCAtIChCT09MKXJl
c291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmCiAKIC0gKHZvaWQpcmVzb3VyY2U6KFBsYXRm
b3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgcmVjZWl2ZWREYXRhOihjb25zdCBjaGFyKilkYXRh
IGxlbmd0aDooaW50KWxlbmd0aAogeworICAgIGlmIChfYnVmZmVyKSB7CisgICAgICAgIF9idWZm
ZXItPmFwcGVuZChkYXRhLCBsZW5ndGgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAog
ICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2UsICZyZXNvdXJjZSA9PSBfcmVzb3VyY2UpOwogICAg
IFJldGFpblB0cjxOU0RhdGE+IG5zRGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRX
aXRoQnl0ZXM6ZGF0YSBsZW5ndGg6bGVuZ3RoXSk7CiAgICAgUmV0YWluUHRyPFdlYkNvcmVOU1VS
TFNlc3Npb25EYXRhVGFzaz4gc3Ryb25nU2VsZiB7IHNlbGYgfTsKQEAgLTkwNyw2ICsxMDI3LDE4
IEBAIC0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYKIAogLSAodm9pZClf
cmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgbG9hZEZpbmlzaGVkV2l0
aEVycm9yOihOU0Vycm9yICopZXJyb3IgbWV0cmljczooY29uc3QgTmV0d29ya0xvYWRNZXRyaWNz
JiltZXRyaWNzCiB7CisgICAgaWYgKF9idWZmZXIpIHsKKyAgICAgICAgLy8gRklYTUU6IERvbid0
IGRvdWJsZSBwYXJzZS4KKyAgICAgICAgLy8gRklYTUU6IFN0b3JlIG9uIE5TVVJMU2Vzc2lvbiB0
byBhdm9pZCByZXF1ZXN0aW5nIHRoZSBlbnRpcmUgdmlkZW8gZm9yIGVhY2ggcmFuZ2UuCisgICAg
ICAgIC8vIEZJWE1FOiBEb24ndCBjYWxsIGRhdGEoKS4gRmVlZCB0aGUgc2VjdGlvbnMgaW4uCisg
ICAgICAgIE5TU3RyaW5nICpyZXF1ZXN0UmFuZ2UgPSBbc2VsZi5vcmlnaW5hbFJlcXVlc3QgdmFs
dWVGb3JIVFRQSGVhZGVyRmllbGQ6QCJSYW5nZSJdOworICAgICAgICBhdXRvIHBhcnNlZFJlcXVl
c3RSYW5nZSA9IFBhcnNlZFJlcXVlc3RSYW5nZTo6cGFyc2UocmVxdWVzdFJhbmdlKTsKKyAgICAg
ICAgaWYgKHBhcnNlZFJlcXVlc3RSYW5nZSAmJiBwYXJzZWRSZXF1ZXN0UmFuZ2UtPmJlZ2luKCkg
JiYgcGFyc2VkUmVxdWVzdFJhbmdlLT5lbmQoKSkgeworICAgICAgICAgICAgYXV0byBidWZmZXIg
PSBzdGQ6OmV4Y2hhbmdlKF9idWZmZXIsIG51bGxwdHIpOworICAgICAgICAgICAgV1RGTG9nQWx3
YXlzKCJTWU5USEVTSVpJTkcgREFUQSBMRU5HVEggJWQiLCAoaW50KSgqcGFyc2VkUmVxdWVzdFJh
bmdlLT5lbmQoKSAtICpwYXJzZWRSZXF1ZXN0UmFuZ2UtPmJlZ2luKCkgKyAxKSk7CisgICAgICAg
ICAgICBbc2VsZiByZXNvdXJjZTpyZXNvdXJjZSByZWNlaXZlZERhdGE6YnVmZmVyLT5kYXRhKCkg
KyAqcGFyc2VkUmVxdWVzdFJhbmdlLT5iZWdpbigpIGxlbmd0aDoqcGFyc2VkUmVxdWVzdFJhbmdl
LT5lbmQoKSAtICpwYXJzZWRSZXF1ZXN0UmFuZ2UtPmJlZ2luKCkgKyAxXTsKKyAgICAgICAgfQor
ICAgIH0KICAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAmcmVzb3VyY2UgPT0gX3Jlc291cmNl
KTsKICAgICBpZiAoc2VsZi5zdGF0ZSA9PSBOU1VSTFNlc3Npb25UYXNrU3RhdGVDb21wbGV0ZWQp
CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MTk5NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDIxLTAxLTI3ICBBbGV4IENocmlzdGVuc2Vu
ICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3ludGhlc2l6ZSByYW5nZSBy
ZXNwb25zZXMgaWYgbmVlZGVkIGluIFdlYkNvcmVOU1VSTFNlc3Npb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTA3MgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNzM1NzU0Njg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0NoYWxsZW5nZS5t
bToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNsaWVudENlcnRTZXJ2ZXIpOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTWVkaWFMb2FkaW5nLm1tOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6Ynl0ZXNGcm9tRGF0YSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIuaDoKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBSZXNwb25zZTo6SFRUUFJlc3BvbnNlKToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OkhUVFBSZXNwb25zZTo6SFRUUFJlc3BvbnNl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW06
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjpSZXF1ZXN0RGF0YTo6UmVxdWVz
dERhdGEpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6YXBwZW5kVG9WZWN0b3IpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6cmVzcG9uZFRvUmVxdWVzdHMpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6SFRUUFJlc3BvbnNlOjpib2R5RnJvbVN0cmluZyk6CisKIDIwMjEt
MDEtMjcgIEFha2FzaCBKYWluICA8YWFrYXNoX2phaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFti
dWlsZC53ZWJraXQub3JnXSBBZGQgYmFzaWMgYXV0aGVudGljYXRpb24KSW5kZXg6IFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQ2hhbGxlbmdlLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQ2hhbGxlbmdlLm1tCShyZXZp
c2lvbiAyNzE3MzQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0No
YWxsZW5nZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTg5LDcgKzU4OSw3IEBAIHN0YXRpYyBIVFRQ
U2VydmVyIGNsaWVudENlcnRTZXJ2ZXIoKQogICAgICAgICB7ICIvNS5wbmciLCB7IGxvbmdTdHJp
bmcgfSB9LAogICAgICAgICB7ICIvNi5wbmciLCB7IGxvbmdTdHJpbmcgfSB9LAogICAgICAgICB7
ICIvcmVkaXJlY3RUb0Vycm9yIiwgeyAzMDEsIHt7ICJMb2NhdGlvbiIsICIvZXJyb3IiIH19IH0g
fSwKLSAgICAgICAgeyAiL2Vycm9yIiwgeyBIVFRQU2VydmVyOjpIVFRQUmVzcG9uc2U6OlRlcm1p
bmF0ZUNvbm5lY3Rpb246OlllcyB9IH0sCisgICAgICAgIHsgIi9lcnJvciIsIHsgSFRUUFJlc3Bv
bnNlOjpUZXJtaW5hdGVDb25uZWN0aW9uOjpZZXMgfSB9LAogICAgIH0sIEhUVFBTZXJ2ZXI6OlBy
b3RvY29sOjpIdHRwcywgW10gKGF1dG8sIGF1dG8sIGF1dG8gY2VydGlmaWNhdGVBbGxvd2VkKSB7
CiAgICAgICAgIGNlcnRpZmljYXRlQWxsb3dlZCh0cnVlKTsKICAgICB9KTsKSW5kZXg6IFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTWVkaWFMb2FkaW5nLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTWVkaWFMb2FkaW5n
Lm1tCShyZXZpc2lvbiAyNzE3MzQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL01lZGlhTG9hZGluZy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
CiAjaW1wb3J0ICJIVFRQU2VydmVyLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgor
I2ltcG9ydCAiVGVzdFVJRGVsZWdhdGUuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNp
bXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgogCkBAIC0xMTYsNiAr
MTE3LDQzIEBAIFRFU1QoTWVkaWFMb2FkaW5nLCBVc2VyQWdlbnRTdHJpbmdITFMpCiAgICAgVXRp
bDo6cnVuKCZyZWNlaXZlZE1lZGlhUmVxdWVzdCk7CiB9CiAKK3N0YXRpYyBWZWN0b3I8dWludDhf
dD4gYnl0ZXNGcm9tRGF0YShOU0RhdGEgKmRhdGEpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHZl
Y3RvcjsKKyAgICB2ZWN0b3IuYXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRh
LmJ5dGVzKSwgZGF0YS5sZW5ndGgpOworICAgIHJldHVybiB2ZWN0b3I7Cit9CisKK1RFU1QoTWVk
aWFMb2FkaW5nLCBSYW5nZVJlcXVlc3RTeW50aGVzaXMpCit7CisgICAgY29uc3QgY2hhciogaHRt
bCA9IjxzY3JpcHQ+IgorICAgICAgICAiZnVuY3Rpb24gY3JlYXRlVmlkZW9FbGVtZW50KCkgeyIK
KyAgICAgICAgICAgICJsZXQgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycp
OyIKKyAgICAgICAgICAgICJ2aWRlby5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsICgpPT57YWxl
cnQoJ2Vycm9yJyl9KTsiCisgICAgICAgICAgICAidmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxh
eWluZycsICgpPT57YWxlcnQoJ3BsYXlpbmcnKX0pOyIKKyAgICAgICAgICAgICJ2aWRlby5zcmM9
J3ZpZGVvLm1wNCc7IgorICAgICAgICAgICAgInZpZGVvLmF1dG9wbGF5ID0gMTsiCisgICAgICAg
ICAgICAiZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh2aWRlbyk7IgorICAgICAgICAifSIKKyAg
ICAiPC9zY3JpcHQ+IgorICAgICI8Ym9keSBvbmxvYWQ9J2NyZWF0ZVZpZGVvRWxlbWVudCgpJz48
L2JvZHk+IjsKKworICAgIE5TRGF0YSAqbXA0RGF0YSA9IFtOU0RhdGEgZGF0YVdpdGhDb250ZW50
c09mVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJ0ZXN0IiB3aXRo
RXh0ZW5zaW9uOkAibXA0IiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJd
XTsKKworICAgIEhUVFBTZXJ2ZXIgc2VydmVyKHsKKyAgICAgICAgeyIvIiwgeyBodG1sIH19LAor
ICAgICAgICB7Ii92aWRlby5tcDQiLCB7IGJ5dGVzRnJvbURhdGEobXA0RGF0YSkgfX0KKyAgICB9
KTsKKworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1
cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJhdGlvbi5nZXQoKS5tZWRpYVR5cGVz
UmVxdWlyaW5nVXNlckFjdGlvbkZvclBsYXliYWNrID0gV0tBdWRpb3Zpc3VhbE1lZGlhVHlwZU5v
bmU7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCAzMDAsIDMwMCkgY29uZmlndXJhdGlvbjpjb25m
aWd1cmF0aW9uLmdldCgpIGFkZFRvV2luZG93OllFU10pOworICAgIFdURkxvZ0Fsd2F5cygiUkVR
VUVTVCAlQCIsIHNlcnZlci5yZXF1ZXN0KCkpOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnNl
cnZlci5yZXF1ZXN0KCldOworICAgIEVYUEVDVF9XS19TVFJFUShbd2ViVmlldyBfdGVzdF93YWl0
Rm9yQWxlcnRdLCAicGxheWluZyIpOworICAgIC8vIEZJWE1FOiBNYWtlIHN1cmUgdGhlIHNlcnZl
ciBvbmx5IHNhdyB0d28gcmVxdWVzdHMuCiB9CiAKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkKKwogI2VuZGlmIC8vIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKSW5kZXg6
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5oCShyZXZpc2lvbiAyNzE3MzQpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMzUsMTAgKzM1LDEwIEBACiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKIGNsYXNzIENv
bm5lY3Rpb247CitzdHJ1Y3QgSFRUUFJlc3BvbnNlOwogCiBjbGFzcyBIVFRQU2VydmVyIHsKIHB1
YmxpYzoKLSAgICBzdHJ1Y3QgSFRUUFJlc3BvbnNlOwogICAgIHN0cnVjdCBSZXF1ZXN0RGF0YTsK
ICAgICBlbnVtIGNsYXNzIFByb3RvY29sIDogdWludDhfdCB7IEh0dHAsIEh0dHBzLCBIdHRwc1dp
dGhMZWdhY3lUTFMsIEh0dHAyIH07CiAgICAgdXNpbmcgQ2VydGlmaWNhdGVWZXJpZmllciA9IEZ1
bmN0aW9uPHZvaWQoc2VjX3Byb3RvY29sX21ldGFkYXRhX3QsIHNlY190cnVzdF90LCBzZWNfcHJv
dG9jb2xfdmVyaWZ5X2NvbXBsZXRlX3QpPjsKQEAgLTgxLDE4ICs4MSwyMCBAQCBwcml2YXRlOgog
ICAgIFJldGFpblB0cjxud19jb25uZWN0aW9uX3Q+IG1fY29ubmVjdGlvbjsKIH07CiAKLXN0cnVj
dCBIVFRQU2VydmVyOjpIVFRQUmVzcG9uc2Ugeworc3RydWN0IEhUVFBSZXNwb25zZSB7CiAgICAg
ZW51bSBjbGFzcyBUZXJtaW5hdGVDb25uZWN0aW9uIHsgTm8sIFllcyB9OwotICAgIAorCisgICAg
SFRUUFJlc3BvbnNlKFZlY3Rvcjx1aW50OF90PiYmIGJvZHkpCisgICAgICAgIDogYm9keShXVEZN
b3ZlKGJvZHkpKSB7IH0KICAgICBIVFRQUmVzcG9uc2UoY29uc3QgU3RyaW5nJiBib2R5KQotICAg
ICAgICA6IGJvZHkoYm9keSkgeyB9Ci0gICAgSFRUUFJlc3BvbnNlKEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+JiYgaGVhZGVyRmllbGRzLCBTdHJpbmcmJiBib2R5KQorICAgICAgICA6IGJvZHkoYm9k
eUZyb21TdHJpbmcoYm9keSkpIHsgfQorICAgIEhUVFBSZXNwb25zZShIYXNoTWFwPFN0cmluZywg
U3RyaW5nPiYmIGhlYWRlckZpZWxkcywgY29uc3QgU3RyaW5nJiBib2R5KQogICAgICAgICA6IGhl
YWRlckZpZWxkcyhXVEZNb3ZlKGhlYWRlckZpZWxkcykpCi0gICAgICAgICwgYm9keShXVEZNb3Zl
KGJvZHkpKSB7IH0KLSAgICBIVFRQUmVzcG9uc2UodW5zaWduZWQgc3RhdHVzQ29kZSwgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4mJiBoZWFkZXJGaWVsZHMgPSB7IH0sIFN0cmluZyYmIGJvZHkgPSB7
IH0pCisgICAgICAgICwgYm9keShib2R5RnJvbVN0cmluZyhib2R5KSkgeyB9CisgICAgSFRUUFJl
c3BvbnNlKHVuc2lnbmVkIHN0YXR1c0NvZGUsIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiYgaGVh
ZGVyRmllbGRzID0geyB9LCBjb25zdCBTdHJpbmcmIGJvZHkgPSB7IH0pCiAgICAgICAgIDogc3Rh
dHVzQ29kZShzdGF0dXNDb2RlKQogICAgICAgICAsIGhlYWRlckZpZWxkcyhXVEZNb3ZlKGhlYWRl
ckZpZWxkcykpCi0gICAgICAgICwgYm9keShXVEZNb3ZlKGJvZHkpKSB7IH0KKyAgICAgICAgLCBi
b2R5KGJvZHlGcm9tU3RyaW5nKGJvZHkpKSB7IH0KICAgICBIVFRQUmVzcG9uc2UoVGVybWluYXRl
Q29ubmVjdGlvbiB0ZXJtaW5hdGVDb25uZWN0aW9uKQogICAgICAgICA6IHRlcm1pbmF0ZUNvbm5l
Y3Rpb24odGVybWluYXRlQ29ubmVjdGlvbikgeyB9CiAKQEAgLTEwMSwxMCArMTAzLDEyIEBAIHN0
cnVjdCBIVFRQU2VydmVyOjpIVFRQUmVzcG9uc2UgewogICAgIEhUVFBSZXNwb25zZSgpID0gZGVm
YXVsdDsKICAgICBIVFRQUmVzcG9uc2UmIG9wZXJhdG9yPShjb25zdCBIVFRQUmVzcG9uc2UmKSA9
IGRlZmF1bHQ7CiAgICAgSFRUUFJlc3BvbnNlJiBvcGVyYXRvcj0oSFRUUFJlc3BvbnNlJiYpID0g
ZGVmYXVsdDsKLSAgICAKKworICAgIHN0YXRpYyBWZWN0b3I8dWludDhfdD4gYm9keUZyb21TdHJp
bmcoY29uc3QgU3RyaW5nJik7CisKICAgICB1bnNpZ25lZCBzdGF0dXNDb2RlIHsgMjAwIH07CiAg
ICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gaGVhZGVyRmllbGRzOwotICAgIFN0cmluZyBib2R5
OworICAgIFZlY3Rvcjx1aW50OF90PiBib2R5OwogICAgIFRlcm1pbmF0ZUNvbm5lY3Rpb24gdGVy
bWluYXRlQ29ubmVjdGlvbiB7IFRlcm1pbmF0ZUNvbm5lY3Rpb246Ok5vIH07CiB9OwogCkluZGV4
OiBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCShyZXZpc2lvbiAyNzE3MzQp
CisrKyBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDggKzM4LDggQEAgbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiBzdHJ1Y3Qg
SFRUUFNlcnZlcjo6UmVxdWVzdERhdGEgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVx
dWVzdERhdGEsIFdURjo6RGVzdHJ1Y3Rpb25UaHJlYWQ6Ok1haW5SdW5Mb29wPiB7CiAgICAgUmVx
dWVzdERhdGEoc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxTdHJpbmcsIEhUVFBSZXNw
b25zZT4+IHJlc3BvbnNlcykKLSAgICA6IHJlcXVlc3RNYXAoW10oc3RkOjppbml0aWFsaXplcl9s
aXN0PHN0ZDo6cGFpcjxTdHJpbmcsIEhUVFBTZXJ2ZXI6OkhUVFBSZXNwb25zZT4+IGxpc3QpIHsK
LSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIEhUVFBTZXJ2ZXI6OkhUVFBSZXNwb25zZT4gbWFwOwor
ICAgIDogcmVxdWVzdE1hcChbXShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpwYWlyPFN0cmlu
ZywgSFRUUFJlc3BvbnNlPj4gbGlzdCkgeworICAgICAgICBIYXNoTWFwPFN0cmluZywgSFRUUFJl
c3BvbnNlPiBtYXA7CiAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IGxpc3QpCiAgICAgICAgICAg
ICBtYXAuYWRkKHBhaXIuZmlyc3QsIHBhaXIuc2Vjb25kKTsKICAgICAgICAgcmV0dXJuIG1hcDsK
QEAgLTIxMiw2ICsyMTIsMTIgQEAgc3RhdGljIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3JGcm9tRGF0
YShkaQogICAgIHJldHVybiByZXF1ZXN0OwogfQogCitzdGF0aWMgdm9pZCBhcHBlbmRUb1ZlY3Rv
cihWZWN0b3I8dWludDhfdD4mIHZlY3RvciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAg
YXV0byB1dGY4ID0gc3RyaW5nLnV0ZjgoKTsKKyAgICB2ZWN0b3IuYXBwZW5kKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHV0ZjguZGF0YSgpKSwgdXRmOC5sZW5ndGgoKSk7Cit9CisK
IHZvaWQgSFRUUFNlcnZlcjo6cmVzcG9uZFRvUmVxdWVzdHMoQ29ubmVjdGlvbiBjb25uZWN0aW9u
LCBSZWY8UmVxdWVzdERhdGE+IHJlcXVlc3REYXRhKQogewogICAgIGNvbm5lY3Rpb24ucmVjZWl2
ZUhUVFBSZXF1ZXN0KFtjb25uZWN0aW9uLCByZXF1ZXN0RGF0YV0gKFZlY3RvcjxjaGFyPiYmIHJl
cXVlc3QpIG11dGFibGUgewpAQCAtMjMyLDYgKzIzOCw3IEBAIHZvaWQgSFRUUFNlcnZlcjo6cmVz
cG9uZFRvUmVxdWVzdHMoQ29ubmUKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShwYXRoUHJl
Zml4TGVuZ3RoLCAiSFRUUFNlcnZlciBhc3N1bWVzIHJlcXVlc3QgaXMgR0VUIG9yIFBPU1QiKTsK
ICAgICAgICAgc2l6ZV90IHBhdGhMZW5ndGggPSBwYXRoRW5kIC0gcmVxdWVzdC5kYXRhKCkgLSBw
YXRoUHJlZml4TGVuZ3RoOwogICAgICAgICBTdHJpbmcgcGF0aChyZXF1ZXN0LmRhdGEoKSArIHBh
dGhQcmVmaXhMZW5ndGgsIHBhdGhMZW5ndGgpOworICAgICAgICBXVEZMb2dBbHdheXMoIlNFUlZF
UiBSRVFVRVNUICVzIiwgcGF0aC51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShyZXF1ZXN0RGF0YS0+cmVxdWVzdE1hcC5jb250YWlucyhwYXRoKSwgIlRoaXMgSFRU
UFNlcnZlciBkb2VzIG5vdCBrbm93IGhvdyB0byByZXNwb25kIHRvIGEgcmVxdWVzdCBmb3IgJXMi
LCBwYXRoLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgICAgIGF1dG8gcmVzcG9uc2UgPSByZXF1ZXN0
RGF0YS0+cmVxdWVzdE1hcC5nZXQocGF0aCk7CkBAIC0yMzksMTIgKzI0NiwxNiBAQCB2b2lkIEhU
VFBTZXJ2ZXI6OnJlc3BvbmRUb1JlcXVlc3RzKENvbm5lCiAgICAgICAgICAgICByZXR1cm4gY29u
bmVjdGlvbi50ZXJtaW5hdGUoKTsKICAgICAgICAgU3RyaW5nQnVpbGRlciByZXNwb25zZUJ1aWxk
ZXI7CiAgICAgICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQoIkhUVFAvMS4xICIsIHJlc3BvbnNl
LnN0YXR1c0NvZGUsICcgJywgc3RhdHVzVGV4dChyZXNwb25zZS5zdGF0dXNDb2RlKSwgIlxyXG4i
KTsKLSAgICAgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZCgiQ29udGVudC1MZW5ndGg6ICIsIHJl
c3BvbnNlLmJvZHkubGVuZ3RoKCksICJcclxuIik7CisgICAgICAgIHJlc3BvbnNlQnVpbGRlci5h
cHBlbmQoIkNvbnRlbnQtTGVuZ3RoOiAiLCByZXNwb25zZS5ib2R5LnNpemUoKSwgIlxyXG4iKTsK
ICAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogcmVzcG9uc2UuaGVhZGVyRmllbGRzKQogICAgICAg
ICAgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZChwYWlyLmtleSwgIjogIiwgcGFpci52YWx1ZSwg
IlxyXG4iKTsKICAgICAgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZCgiXHJcbiIpOwotICAgICAg
ICByZXNwb25zZUJ1aWxkZXIuYXBwZW5kKHJlc3BvbnNlLmJvZHkpOwotICAgICAgICBjb25uZWN0
aW9uLnNlbmQocmVzcG9uc2VCdWlsZGVyLnRvU3RyaW5nKCksIFtjb25uZWN0aW9uLCByZXF1ZXN0
RGF0YV0geworICAgICAgICAKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ5dGVzVG9TZW5kOwor
ICAgICAgICBhcHBlbmRUb1ZlY3RvcihieXRlc1RvU2VuZCwgcmVzcG9uc2VCdWlsZGVyLnRvU3Ry
aW5nKCkpOworICAgICAgICBieXRlc1RvU2VuZC5hcHBlbmRWZWN0b3IocmVzcG9uc2UuYm9keSk7
CisgICAgICAgIAorICAgICAgICBjb25uZWN0aW9uLnNlbmQoV1RGTW92ZShieXRlc1RvU2VuZCks
IFtjb25uZWN0aW9uLCByZXF1ZXN0RGF0YV0gewogICAgICAgICAgICAgcmVzcG9uZFRvUmVxdWVz
dHMoY29ubmVjdGlvbiwgcmVxdWVzdERhdGEpOwogICAgICAgICB9KTsKICAgICB9KTsKQEAgLTMz
NCw2ICszNDUsMTMgQEAgdm9pZCBDb25uZWN0aW9uOjpjYW5jZWwoKQogICAgIG1fY29ubmVjdGlv
biA9IG51bGxwdHI7CiB9CiAKK1ZlY3Rvcjx1aW50OF90PiBIVFRQUmVzcG9uc2U6OmJvZHlGcm9t
U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0
b3I7CisgICAgYXBwZW5kVG9WZWN0b3IodmVjdG9yLCBzdHJpbmcpOworICAgIHJldHVybiB2ZWN0
b3I7Cit9CisKIHZvaWQgSDI6OkNvbm5lY3Rpb246OnNlbmQoRnJhbWUmJiBmcmFtZSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewogICAgIGF1
dG8gZnJhbWVUeXBlID0gZnJhbWUudHlwZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418800</attachid>
            <date>2021-01-29 19:29:46 -0800</date>
            <delta_ts>2021-02-06 19:41:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221072-20210129192945.patch</filename>
            <type>text/plain</type>
            <size>61769</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtSGF2ZS5oCShyZXZpc2lvbiAyNzE3MzQpCisrKyBTb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybUhhdmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTgyLDYgKzU4MiwxMCBAQAog
I2RlZmluZSBIQVZFX0hJRF9GUkFNRVdPUksgMQogI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0oTUFD
KSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTUwMAorI2RlZmluZSBI
QVZFX1JFU1BPTlNFX1ZBTFVFX0ZPUl9IVFRQX0hFQURFUl9GSUVMRCAxCisjZW5kaWYKKwogI2lm
IChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEw
MDAwKSB8fCAoUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPj0gMTQwMDAwKQogI2RlZmluZSBIQVZFX0dDRVhURU5ERURHQU1FUEFEX0hPTUVf
QlVUVE9OIDEKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjcxODcwKQorKysgU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIw
MjEtMDEtMjcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKwor
ICAgICAgICBTeW50aGVzaXplIHJhbmdlIHJlc3BvbnNlcyBpZiBuZWVkZWQgaW4gV2ViQ29yZU5T
VVJMU2Vzc2lvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjIxMDcyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MzU3NTQ2OD4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHNlY29uZCBpdGVyYXRp
b24gaXMgbXVjaCBiZXR0ZXIgdGhhbiB0aGUgZmlyc3QgYnV0IHN0aWxsIGF3ZnVsLiAgRG9uJ3Qg
YXBwcm92ZSBpdC4gIEl0IHdhaXRzIHVudGlsIHRoZSBlbnRpcmUgdmlkZW8gZG93bmxvYWRzIGJl
Zm9yZSByZXNwb25kaW5nIHRvIGFueSByZXF1ZXN0LgorCisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9uLm1tOgorICAgICAgICAoLVtXZWJDb3JlTlNV
UkxTZXNzaW9uIGRhdGFUYXNrV2l0aFVSTDpdKToKKyAgICAgICAgKFBhcnNlZFJlcXVlc3RSYW5n
ZTo6YmVnaW4gY29uc3QpOgorICAgICAgICAoUGFyc2VkUmVxdWVzdFJhbmdlOjplbmQgY29uc3Qp
OgorICAgICAgICAoUGFyc2VkUmVxdWVzdFJhbmdlOjpQYXJzZWRSZXF1ZXN0UmFuZ2UpOgorICAg
ICAgICAoUGFyc2VkUmVxdWVzdFJhbmdlOjpwYXJzZSk6CisgICAgICAgIChzeW50aGVzaXplUmFu
Z2VSZXNwb25zZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKC1bV2ViQ29yZU5TVVJMU2Vzc2lvbkRh
dGFUYXNrIHJlc291cmNlOnJlY2VpdmVkUmVzcG9uc2U6Y29tcGxldGlvbkhhbmRsZXI6XSk6Cisg
ICAgICAgICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayByZXNvdXJjZTpyZWNlaXZlZERh
dGE6bGVuZ3RoOl0pOgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgX3Jl
c291cmNlOmxvYWRGaW5pc2hlZFdpdGhFcnJvcjptZXRyaWNzOl0pOgorICAgICAgICAoLVtXZWJD
b3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgaW5pdFdpdGhTZXNzaW9uOmlkZW50aWZpZXI6VVJMOl0p
OiBEZWxldGVkLgorCiAyMDIxLTAxLTI1ICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBsZS5jb20+
CiAKICAgICAgICAgVHdpdHRlciBQaVAgdmlkZW8gcGF1c2VzIHdoZW4gc2Nyb2xsaW5nCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjcxNzM0KQorKysgU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIxMTcsNiArMjExNyw3IEBAIHBsYXRmb3JtL25ldHdv
cmsvTmV0d29ya1N0YXRlTm90aWZpZXIuY3AKIHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uLmNwcAogcGxhdGZvcm0vbmV0d29yay9QYXJzZWRDb250ZW50UmFuZ2UuY3BwCiBw
bGF0Zm9ybS9uZXR3b3JrL1BhcnNlZENvbnRlbnRUeXBlLmNwcAorcGxhdGZvcm0vbmV0d29yay9Q
YXJzZWRSZXF1ZXN0UmFuZ2UuY3BwCiBwbGF0Zm9ybS9uZXR3b3JrL1Byb3RlY3Rpb25TcGFjZUJh
c2UuY3BwCiBwbGF0Zm9ybS9uZXR3b3JrL1Byb3h5U2VydmVyLmNwcAogcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUVycm9yQmFzZS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2Nv
YS50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAkocmV2
aXNpb24gMjcxNzM0KQorKysgU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcyLDYgKzU3Miw3IEBAIHBsYXRmb3JtL25ldHdvcmsvY29jb2EvQ3JlZGVu
dGlhbENvY29hLm0KIHBsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya0xvYWRNZXRyaWNzLm1t
CiBwbGF0Zm9ybS9uZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tCiBw
bGF0Zm9ybS9uZXR3b3JrL2NvY29hL1Byb3RlY3Rpb25TcGFjZUNvY29hLm1tCitwbGF0Zm9ybS9u
ZXR3b3JrL2NvY29hL1JhbmdlUmVzcG9uc2VHZW5lcmF0b3IubW0KIHBsYXRmb3JtL25ldHdvcmsv
Y29jb2EvUmVzb3VyY2VSZXF1ZXN0Q29jb2EubW0KIHBsYXRmb3JtL25ldHdvcmsvY29jb2EvUmVz
b3VyY2VSZXNwb25zZUNvY29hLm1tIEBuby11bmlmeSAvLyBVbnNhZmUgdG8gdW5pZnkgdW50aWwg
cmRhcjovL3Byb2JsZW0vNDg4NTMxMzcgaXMgcmVzb2x2ZWQKIHBsYXRmb3JtL25ldHdvcmsvY29j
b2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5tbSBAbm8tdW5pZnkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI3MTcz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMzAyLDYgKzMwMiw3IEBACiAJCTBGNDk2NkFCMURCNDBDNDMwMEEy
NzRCQiAvKiBKU0RPTVBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjQ5NjZBNTFEQjQwQzQzMDBBMjc0QkIgLyogSlNET01Qb2ludC5oICovOyB9
OwogCQkwRjQ5NjZBRDFEQjQwQzQzMDBBMjc0QkIgLyogSlNET01Qb2ludEluaXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDk2NkE3MURCNDBDNDMw
MEEyNzRCQiAvKiBKU0RPTVBvaW50SW5pdC5oICovOyB9OwogCQkwRjQ5NjZBRjFEQjQwQzQzMDBB
Mjc0QkIgLyogSlNET01Qb2ludFJlYWRPbmx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ5NjZBOTFEQjQwQzQzMDBBMjc0QkIgLyogSlNET01Qb2lu
dFJlYWRPbmx5LmggKi87IH07CisJCTBGNTNGQjg0MjEzQjdBNjQwMEM0MEQzNCAvKiBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjUzRkI4NDIxM0I3ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGNTREQ0U2MTg4MTA1MUQwMDNFRURCQiAvKiBUZXh0QXV0b1NpemluZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NERDRTQxODgxMDUxRDAw
M0VFREJCIC8qIFRleHRBdXRvU2l6aW5nLmggKi87IH07CiAJCTBGNTRERDA4MTg4MUQ1RjUwMDNF
RURCQiAvKiBUb3VjaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY1NEREMDUxODgxRDVGNTAwM0VFREJCIC8qIFRvdWNoLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1NEREMDkxODgxRDVGNTAwM0VF
REJCIC8qIFRvdWNoRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNTRERDA2MTg4MUQ1RjUwMDNFRURCQiAvKiBUb3VjaEV2ZW50LmggKi87IH07
CkBAIC0xOTM0LDYgKzE5MzUsOCBAQAogCQk1QzJCMUFFQzIyMzk3RUJDMDBCOTFDRjcgLyogUmVz
b3VyY2VSZXNwb25zZUNvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTFGNzhEMEIxQzI1NDIyQzAwMjQ1NDQ2IC8qIFJlc291cmNlUmVzcG9uc2VD
b2NvYS5tbSAqLzsgfTsKIAkJNUM0MzA0QjExOTFBQzkwODAwMEUyQkMwIC8qIEVYVFNoYWRlclRl
eHR1cmVMT0QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVDNDMwNEFFMTkxQUM5MDgwMDBFMkJDMCAvKiBFWFRTaGFkZXJUZXh0dXJlTE9ELmggKi87IH07
CiAJCTVDNDMwNEI2MTkxQUVGNDYwMDBFMkJDMCAvKiBKU0VYVFNoYWRlclRleHR1cmVMT0QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNDMwNEI0MTkx
QUVGNDYwMDBFMkJDMCAvKiBKU0VYVFNoYWRlclRleHR1cmVMT0QuaCAqLzsgfTsKKwkJNUM0QTBG
RDcyNUMzNDM1MDAwRDlFRTk3IC8qIFJhbmdlUmVzcG9uc2VHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNEEwRkQ1MjVDMzQyQzgwMEQ5
RUU5NyAvKiBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNUM0QTBGREEyNUMzNDQ5QTAwRDlFRTk3IC8qIFBh
cnNlZFJlcXVlc3RSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUM0QTBGRDgyNUMzNDQ2QzAwRDlFRTk3IC8qIFBhcnNlZFJlcXVlc3RSYW5nZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDNTNE
Q0UxMjQ0NjVERkMwMEE5MzEyNCAvKiBBcHBsZVBheVNldHVwRmVhdHVyZVdlYkNvcmUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNTNEQ0NGMjQ0NjQ0
OTkwMEE5MzEyNCAvKiBBcHBsZVBheVNldHVwRmVhdHVyZVdlYkNvcmUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1QzUzRENFNzI0NDY4QUQyMDBB
OTMxMjQgLyogUGF5bWVudEluc3RhbGxtZW50Q29uZmlndXJhdGlvbldlYkNvcmUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNTNEQ0NFMjQ0NjQ0OTkw
MEE5MzEyNCAvKiBQYXltZW50SW5zdGFsbG1lbnRDb25maWd1cmF0aW9uV2ViQ29yZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDNTNEQ0VBMjQ0
NjhGQjQwMEE5MzEyNCAvKiBBcHBsZVBheVNldHVwV2ViQ29yZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM1M0RDQ0IyNDQ2NDQ5ODAwQTkzMTI0IC8q
IEFwcGxlUGF5U2V0dXBXZWJDb3JlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTQwODcsNyArNDA5MCw2IEBACiAJCUJDRUE0ODc2MDk3RDkzMDIw
MDk0QzlFNCAvKiBSZW5kZXJJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkNFQTQ4MzcwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckltYWdlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNFQTQ4
NzgwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlcklubGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFQTQ4MzkwOTdEOTMwMjAwOTRDOUU0IC8qIFJl
bmRlcklubGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUJDRUE0ODdBMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJMYXllci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFQTQ4M0IwOTdEOTMwMjAw
OTRDOUU0IC8qIFJlbmRlckxheWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJMEY1M0ZCODQyMTNCN0E2NDAwQzQwRDM0IC8qIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNTNGQjg0MjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QkNFQTQ4ODAwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlck9iamVjdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFQTQ4NDEwOTdEOTMwMjAwOTRDOUU0
IC8qIFJlbmRlck9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUJDRUE0ODg3MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUaGVtZU1hYy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFQTQ4NDgw
OTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRoZW1lTWFjLmggKi87IH07CiAJCUJDRUE0ODhBMDk3
RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUaGVtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFQTQ4NEIwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRo
ZW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTk0NzEsNiArOTQ3MywxMSBAQAogCQk1QzQzMDRBRjE5MUFDOTA4MDAwRTJCQzAgLyogRVhUU2hh
ZGVyVGV4dHVyZUxPRC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUU2hhZGVyVGV4dHVy
ZUxPRC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDNDMwNEIzMTkxQUVGNDYw
MDBFMkJDMCAvKiBKU0VYVFNoYWRlclRleHR1cmVMT0QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUM0MzA0QjQxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVy
VGV4dHVyZUxPRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0VYVFNoYWRl
clRleHR1cmVMT0QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QTBGRDMyNUMz
NDJDNzAwRDlFRTk3IC8qIFJhbmdlUmVzcG9uc2VHZW5lcmF0b3IubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzRBMEZENTI1QzM0MkM4MDBEOUVFOTcgLyogUmFu
Z2VSZXNwb25zZUdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
YW5nZVJlc3BvbnNlR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVD
NEEwRkQ2MjVDMzQyREIwMEQ5RUU5NyAvKiBDZXJ0aWZpY2F0ZUluZm9Db2NvYS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENlcnRpZmljYXRlSW5mb0NvY29hLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzRBMEZEODI1QzM0NDZDMDBEOUVFOTcg
LyogUGFyc2VkUmVxdWVzdFJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBhcnNlZFJlcXVlc3RSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzRB
MEZEOTI1QzM0NDZEMDBEOUVFOTcgLyogUGFyc2VkUmVxdWVzdFJhbmdlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhcnNlZFJlcXVlc3RSYW5nZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDNTM4MUFGMUQ4NzkzRTAwMEUyRUJFNiAvKiBVUkxT
ZWFyY2hQYXJhbXMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFVSTFNlYXJjaFBhcmFtcy5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDNTM4MUIwMUQ4N0Q0NTcwMEUyRUJF
NiAvKiBVUkxTZWFyY2hQYXJhbXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVVJMU2VhcmNoUGFyYW1zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NUM1MzgxQjExRDg3RDQ1NzAwRTJFQkU2IC8qIFVSTFNlYXJjaFBhcmFtcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBVUkxTZWFyY2hQYXJhbXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTk3NTcsOCArOTc2NCw4IEBACiAJCTZFNTM4OEUxMjQ1OEFFMUQwMDc2
QUUwMyAvKiBXZWJHTENvbG9yQnVmZmVyRmxvYXQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYkdMQ29sb3JCdWZmZXJG
bG9hdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFNTc2QkMzMjRFQjUwOUMw
MDk0RDRBQSAvKiBKU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0
ZW5zaW9uc0dMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lvbnNH
TC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RTdDQTMwQTI1QjREMjhBMDA0QTkx
M0UgLyogSlNXZWJHTE11bHRpRHJhdy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkdMTXVsdGlEcmF3
Lmg7IHBhdGggPSBKU1dlYkdMTXVsdGlEcmF3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTZFN0NBMzBCMjVCNEQzMjgwMDRBOTEzRSAvKiBKU1dlYkdMTXVsdGlEcmF3LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEpTV2ViR0xNdWx0aURyYXcuY3BwOyBwYXRoID0gSlNXZWJHTE11bHRp
RHJhdy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFN0NBMzBBMjVCNEQyOEEw
MDRBOTEzRSAvKiBKU1dlYkdMTXVsdGlEcmF3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xNdWx0
aURyYXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkU3Q0EzMEIyNUI0RDMyODAw
NEE5MTNFIC8qIEpTV2ViR0xNdWx0aURyYXcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJH
TE11bHRpRHJhdy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFODRFOURFMTc2
NjhCQUQwMDgxNUI2OCAvKiBSYXN0ZXJTaGFwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSYXN0ZXJTaGFwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTZFODRFOURGMTc2NjhCQUQwMDgxNUI2OCAvKiBSYXN0ZXJTaGFwZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSYXN0ZXJTaGFwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2RThBQ0RFOTIzMzQ1Q0FGMDAyNEFBRjUgLyogV2ViR0xDb21wcmVzc2VkVGV4
dHVyZUVUQy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHTENvbXByZXNzZWRUZXh0dXJlRVRD
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxODE2LDYgKzIxODIzLDggQEAK
IAkJCQlDRENENDFFNjFDM0REQjA5MDA5NjVEOTkgLyogUGFyc2VkQ29udGVudFJhbmdlLmggKi8s
CiAJCQkJNDQ3OTU4MDIxNjQzQjQ3QjAwMUUwQTdGIC8qIFBhcnNlZENvbnRlbnRUeXBlLmNwcCAq
LywKIAkJCQk0NDc5NTgwMzE2NDNCNDdCMDAxRTBBN0YgLyogUGFyc2VkQ29udGVudFR5cGUuaCAq
LywKKwkJCQk1QzRBMEZEOTI1QzM0NDZEMDBEOUVFOTcgLyogUGFyc2VkUmVxdWVzdFJhbmdlLmNw
cCAqLywKKwkJCQk1QzRBMEZEODI1QzM0NDZDMDBEOUVFOTcgLyogUGFyc2VkUmVxdWVzdFJhbmdl
LmggKi8sCiAJCQkJMzdCQUFFNTcxOTgwRDFERDAwNURGRTcxIC8qIFByb3RlY3Rpb25TcGFjZS5o
ICovLAogCQkJCTUxNEM3NjVGMENFOTIzQTEwMDdFRjNDRCAvKiBQcm90ZWN0aW9uU3BhY2VCYXNl
LmNwcCAqLywKIAkJCQk1MTRDNzY2MDBDRTkyM0ExMDA3RUYzQ0QgLyogUHJvdGVjdGlvblNwYWNl
QmFzZS5oICovLApAQCAtMjI4OTYsNiArMjI5MDUsNyBAQAogCQk3RTdERTFGRTE5NUNFRjJEMDAz
NTM2M0IgLyogY29jb2EgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAorCQkJCTVDNEEwRkQ2MjVDMzQyREIwMEQ5RUU5NyAvKiBDZXJ0aWZpY2F0ZUluZm9Db2NvYS5t
bSAqLywKIAkJCQk1MUQxMjQ4QzFFNzM2NDU2MDAyQjI4MjAgLyogQ29va2llQ29jb2EubW0gKi8s
CiAJCQkJNTEyMEJCQUQxRjFDRTc3MDAwRUZFQkYxIC8qIENvb2tpZVN0b3JhZ2VPYnNlcnZlci5o
ICovLAogCQkJCTUxMjBCQkFDMUYxQ0U3NzAwMEVGRUJGMSAvKiBDb29raWVTdG9yYWdlT2JzZXJ2
ZXIubW0gKi8sCkBAIC0yMjkwNiw2ICsyMjkxNiw4IEBACiAJCQkJNTFEMTI0OEExRTczNjI1QzAw
MkIyODIwIC8qIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tICovLAogCQkJCTM3MkFEQTM3
MTk3RjQ3QjkwMEZDNTAxRSAvKiBQcm90ZWN0aW9uU3BhY2VDb2NvYS5oICovLAogCQkJCTM3MkFE
QTM5MTk3RjY4NzYwMEZDNTAxRSAvKiBQcm90ZWN0aW9uU3BhY2VDb2NvYS5tbSAqLywKKwkJCQk1
QzRBMEZENTI1QzM0MkM4MDBEOUVFOTcgLyogUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5oICovLAor
CQkJCTVDNEEwRkQzMjVDMzQyQzcwMEQ5RUU5NyAvKiBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yLm1t
ICovLAogCQkJCTdFN0RFMUZDMTk1Q0VGMjYwMDM1MzYzQiAvKiBSZXNvdXJjZVJlcXVlc3RDb2Nv
YS5tbSAqLywKIAkJCQlBMUY3OEQwQjFDMjU0MjJDMDAyNDU0NDYgLyogUmVzb3VyY2VSZXNwb25z
ZUNvY29hLm1tICovLAogCQkJCUNEMjI1QzBBMUM0NkZCRjQwMDE0MDc2MSAvKiBXZWJDb3JlTlNV
UkxTZXNzaW9uLmggKi8sCkBAIC0zMzk0NSw2ICszMzk1Nyw3IEBACiAJCQkJQTE4ODkwQUYxQUEx
M0YyNTAwMjZDMzAxIC8qIFBhcmVudGFsQ29udHJvbHNDb250ZW50RmlsdGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDRENENDFFODFDM0REQjBBMDA5NjVEOTkgLyogUGFyc2VkQ29udGVudFJhbmdl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0NDc5NTgwNDE2NDNCNDlBMDAxRTBBN0YgLyogUGFyc2Vk
Q29udGVudFR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDNEEwRkRBMjVDMzQ0OUEwMEQ5RUU5
NyAvKiBQYXJzZWRSZXF1ZXN0UmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzNkQ1QTIzMTkz
RThFMEMwMENFNENBQiAvKiBQYXJzaW5nVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
NTVCM0RDQTEyNTFGMTJEMDAzRUYyNjkgLyogUGFzc3dvcmRJbnB1dFR5cGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTRCMjcwOEM3MEFGMTlFRTQwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmggaW4gSGVh
ZGVycyAqLywKQEAgLTM0MTQ4LDYgKzM0MTYxLDcgQEAKIAkJCQk5M0YxOTkxODA4MjQ1RTU5MDAx
RTlBQkMgLyogUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRDlENTNDMERBMjdFMTgwMDc3
MjE2QyAvKiBSYW5nZUJvdW5kYXJ5UG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzRENF
MTI1MUYxMkQwMDNFRjI2OSAvKiBSYW5nZUlucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NUM0QTBGRDcyNUMzNDM1MDAwRDlFRTk3IC8qIFJhbmdlUmVzcG9uc2VHZW5lcmF0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTZFODRFOUUxMTc2NjhCRjEwMDgxNUI2OCAvKiBSYXN0ZXJTaGFwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTg0RDgyN0MxMUQzMzNFRDAwOTcyOTkwIC8qIFJhd0RhdGFE
b2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE2RTZGRTgxQkJEMTJERjAwMEE2
MDQzIC8qIFJlYWRhYmxlQnl0ZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAq
LywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGFyc2VkUmVxdWVzdFJh
bmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Bh
cnNlZFJlcXVlc3RSYW5nZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9QYXJzZWRSZXF1ZXN0UmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhcnNlZFJlcXVlc3RSYW5nZS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEZJWE1FOiBBZGQgdGVzdHMgaW5jbHVkaW5nIGFu
IGVtcHR5IHN0cmluZyBhbmQgYSBudWxsIHN0cmluZy4KK09wdGlvbmFsPFBhcnNlZFJlcXVlc3RS
YW5nZT4gUGFyc2VkUmVxdWVzdFJhbmdlOjpwYXJzZShjb25zdCBTdHJpbmcmIGlucHV0KQorewor
ICAgIFdURkxvZ0Fsd2F5cygiUEFSU0lORyA8PCVzPj4iLCBpbnB1dC51dGY4KCkuZGF0YSgpKTsK
KyAgICBpZiAoIWlucHV0LnN0YXJ0c1dpdGgoImJ5dGVzPSJfcykpIHsKKyAgICAgICAgV1RGTG9n
QWx3YXlzKCJQQVJTRVIgRkFJTFVSRSAxIik7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgfQorCisgICAgT3B0aW9uYWw8c2l6ZV90PiBiZWdpbjsKKyAgICBPcHRpb25hbDxzaXpl
X3Q+IGVuZDsKKyAgICBzaXplX3QgcmFuZ2VCZWdpblBvc2l0aW9uID0gNjsKKyAgICBzaXplX3Qg
ZGFzaFBvc2l0aW9uID0gaW5wdXQuZmluZCgnLScsIHJhbmdlQmVnaW5Qb3NpdGlvbik7CisgICAg
aWYgKGRhc2hQb3NpdGlvbiA9PSBub3RGb3VuZCkgeworICAgICAgICBXVEZMb2dBbHdheXMoIlBB
UlNFUiBGQUlMVVJFIDIiKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisK
KyAgICAvLyBGSVhNRTogQWRkIFN0cmluZ1ZpZXcudG9VSW50NjRTdHJpY3QgdG8gYXZvaWQgdGhp
cyB1bm5lY2Vzc2FyeSBTdHJpbmcgY29weS4KKyAgICAvLyBTYW1lIGluIFBhcnNlZENvbnRlbnRS
YW5nZS4KKyAgICBib29sIG9rID0gdHJ1ZTsKKyAgICBTdHJpbmcgYmVnaW5TdHJpbmcgPSBpbnB1
dC5zdWJzdHJpbmcocmFuZ2VCZWdpblBvc2l0aW9uLCBkYXNoUG9zaXRpb24gLSByYW5nZUJlZ2lu
UG9zaXRpb24pOworICAgIGlmIChiZWdpblN0cmluZy5sZW5ndGgoKSkgeworICAgICAgICBXVEZM
b2dBbHdheXMoIkJFR0lOIFNUUklORyA8JXM+IiwgYmVnaW5TdHJpbmcudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIGJlZ2luID0gYmVnaW5TdHJpbmcudG9VSW50NjRTdHJpY3QoJm9rKTsKKyAgICAg
ICAgaWYgKCFvaykgeworICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJQQVJTRVIgRkFJTFVSRSAz
Iik7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICB9CisgICAgfQor
CisgICAgU3RyaW5nIGVuZFN0cmluZyA9IGlucHV0LnN1YnN0cmluZyhkYXNoUG9zaXRpb24gKyAx
KTsKKyAgICBpZiAoZW5kU3RyaW5nLmxlbmd0aCgpKSB7CisgICAgICAgIGVuZCA9IGVuZFN0cmlu
Zy50b1VJbnQ2NFN0cmljdCgmb2spOworICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICBX
VEZMb2dBbHdheXMoIlBBUlNFUiBGQUlMVVJFIDQgPDwlcz4+IiwgZW5kU3RyaW5nLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICBpZiAoYmVnaW4gJiYgZW5kICYmICpiZWdpbiA+ICplbmQpIHsKKyAgICAg
ICAgV1RGTG9nQWx3YXlzKCJQQVJTRVIgRkFJTFVSRSA2Iik7CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgfQorCisgICAgcmV0dXJuIHt7IGJlZ2luLCBlbmQgfX07Cit9CisKK30K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGFyc2VkUmVxdWVzdFJhbmdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QYXJzZWRS
ZXF1ZXN0UmFuZ2UuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1BhcnNlZFJlcXVlc3RSYW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBQYXJzZWRSZXF1ZXN0UmFuZ2UgeworcHVibGljOgorICAgIHN0YXRpYyBPcHRpb25hbDxQ
YXJzZWRSZXF1ZXN0UmFuZ2U+IHBhcnNlKGNvbnN0IFN0cmluZyYpOworCisgICAgY29uc3QgT3B0
aW9uYWw8c2l6ZV90PiYgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2JlZ2luOyB9CisgICAgY29u
c3QgT3B0aW9uYWw8c2l6ZV90PiYgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9lbmQ7IH0KKworcHJp
dmF0ZToKKyAgICBQYXJzZWRSZXF1ZXN0UmFuZ2UoT3B0aW9uYWw8c2l6ZV90PiBiZWdpbiwgT3B0
aW9uYWw8c2l6ZV90PiBlbmQpCisgICAgICAgIDogbV9iZWdpbihiZWdpbikKKyAgICAgICAgLCBt
X2VuZChlbmQpIHsgfQorCisgICAgT3B0aW9uYWw8c2l6ZV90PiBtX2JlZ2luOworICAgIE9wdGlv
bmFsPHNpemVfdD4gbV9lbmQ7Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NvY29hL1JhbmdlUmVzcG9uc2VHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1JhbmdlUmVzcG9uc2VHZW5lcmF0
b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nv
Y29hL1JhbmdlUmVzcG9uc2VHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJQYXJzZWRSZXF1ZXN0
UmFuZ2UuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvVVJMSGFz
aC5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK09CSkNfQ0xBU1MgTlNVUkxSZXF1ZXN0
OworT0JKQ19DTEFTUyBOU1VSTFJlc3BvbnNlOworT0JKQ19DTEFTUyBXZWJDb3JlTlNVUkxTZXNz
aW9uRGF0YVRhc2s7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGxhdGZvcm1NZWRp
YVJlc291cmNlOworY2xhc3MgU2hhcmVkQnVmZmVyOworCitjbGFzcyBSYW5nZVJlc3BvbnNlR2Vu
ZXJhdG9yIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFJhbmdlUmVzcG9uc2VHZW5lcmF0b3I+IHsK
K3B1YmxpYzoKKyAgICB+UmFuZ2VSZXNwb25zZUdlbmVyYXRvcigpOworICAgIGJvb2wgd2lsbFN5
bnRoZXNpemVSYW5nZVJlc3BvbnNlcyhXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgKiwgUGxh
dGZvcm1NZWRpYVJlc291cmNlJiwgTlNVUkxSZXF1ZXN0ICosIE5TVVJMUmVzcG9uc2UgKik7Cisg
ICAgYm9vbCB3aWxsSGFuZGxlUmVxdWVzdChXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgKiwg
TlNVUkxSZXF1ZXN0ICopOworcHJpdmF0ZToKKyAgICAKKyAgICBzdHJ1Y3QgRGF0YSB7CisgICAg
ICAgIEhhc2hTZXQ8UmV0YWluUHRyPFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzaz4+IHRhc2tz
OworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXI7CisgICAgICAgIFJldGFpblB0
cjxOU1VSTFJlc3BvbnNlPiBvcmlnaW5hbFJlc3BvbnNlOworICAgICAgICBlbnVtIGNsYXNzIEFs
cmVhZHlGaW5pc2hlZExvYWRpbmcgOiBib29sIHsgTm8sIFllcyB9OworICAgICAgICBBbHJlYWR5
RmluaXNoZWRMb2FkaW5nIGFscmVhZHlGaW5pc2hlZExvYWRpbmcgeyBBbHJlYWR5RmluaXNoZWRM
b2FkaW5nOjpObyB9OworICAgIH07CisgICAgSGFzaE1hcDxVUkwsIERhdGE+IG1fbWFwOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jb2NvYS9SYW5nZVJlc3BvbnNlR2VuZXJhdG9yLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvUmFuZ2VSZXNwb25zZUdlbmVyYXRv
ci5tbQkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nv
Y29hL1JhbmdlUmVzcG9uc2VHZW5lcmF0b3IubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJhbmdlUmVz
cG9uc2VHZW5lcmF0b3IuaCIKKworI2ltcG9ydCAiTmV0d29ya0xvYWRNZXRyaWNzLmgiCisjaW1w
b3J0ICJQYXJzZWRSZXF1ZXN0UmFuZ2UuaCIKKyNpbXBvcnQgIlBsYXRmb3JtTWVkaWFSZXNvdXJj
ZUxvYWRlci5oIgorI2ltcG9ydCAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2ltcG9ydCAiV2ViQ29y
ZU5TVVJMU2Vzc2lvbi5oIgorI2ltcG9ydCA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbXBvcnQgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSYW5nZVJl
c3BvbnNlR2VuZXJhdG9yOjp+UmFuZ2VSZXNwb25zZUdlbmVyYXRvcigpID0gZGVmYXVsdDsKKwor
c3RhdGljIFJldGFpblB0cjxOU1VSTFJlc3BvbnNlPiBzeW50aGVzaXplZFJlc3BvbnNlRm9yUmFu
Z2UoTlNIVFRQVVJMUmVzcG9uc2UgKm9yaWdpbmFsUmVzcG9uc2UsIFBhcnNlZFJlcXVlc3RSYW5n
ZSYgcGFyc2VkUmVxdWVzdFJhbmdlLCBPcHRpb25hbDxzaXplX3Q+IHRvdGFsQ29udGVudExlbmd0
aCkKK3sKKyAgICBhdXRvJiBiZWdpbiA9IHBhcnNlZFJlcXVlc3RSYW5nZS5iZWdpbigpOworICAg
IGF1dG8mIGVuZCA9IHBhcnNlZFJlcXVlc3RSYW5nZS5lbmQoKTsKKworICAgIFN0cmluZ0J1aWxk
ZXIgY29udGVudFJhbmdlQnVpbGRlcjsKKyAgICBjb250ZW50UmFuZ2VCdWlsZGVyLmFwcGVuZCgi
Ynl0ZXMgIik7CisgICAgaWYgKGJlZ2luKQorICAgICAgICBjb250ZW50UmFuZ2VCdWlsZGVyLmFw
cGVuZE51bWJlcigqYmVnaW4pOworICAgIGNvbnRlbnRSYW5nZUJ1aWxkZXIuYXBwZW5kKCItIik7
CisgICAgaWYgKGVuZCkKKyAgICAgICAgY29udGVudFJhbmdlQnVpbGRlci5hcHBlbmROdW1iZXIo
KmVuZCk7CisgICAgaWYgKHRvdGFsQ29udGVudExlbmd0aCkgeworICAgICAgICBjb250ZW50UmFu
Z2VCdWlsZGVyLmFwcGVuZCgiLyIpOworICAgICAgICBjb250ZW50UmFuZ2VCdWlsZGVyLmFwcGVu
ZE51bWJlcigqdG90YWxDb250ZW50TGVuZ3RoKTsKKyAgICB9CisKKyAgICBXVEZMb2dBbHdheXMo
Ik9MRCBIRUFERVJTICVAIiwgW29yaWdpbmFsUmVzcG9uc2UgYWxsSGVhZGVyRmllbGRzXSk7Cisg
ICAgYXV0byBuZXdIZWFkZXJGaWVsZHMgPSBhZG9wdE5TKFtbb3JpZ2luYWxSZXNwb25zZSBhbGxI
ZWFkZXJGaWVsZHNdIG11dGFibGVDb3B5XSk7CisgICAgW25ld0hlYWRlckZpZWxkcyBzZXRPYmpl
Y3Q6Y29udGVudFJhbmdlQnVpbGRlci50b1N0cmluZygpIGZvcktleTpAIkNvbnRlbnQtUmFuZ2Ui
XTsKKyAgICBpZiAoYmVnaW4gJiYgZW5kKQorICAgICAgICBbbmV3SGVhZGVyRmllbGRzIHNldE9i
amVjdDptYWtlU3RyaW5nKCplbmQgLSAqYmVnaW4gKyAxKSBmb3JLZXk6QCJDb250ZW50LUxlbmd0
aCJdOworICAgIGVsc2UgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgY2FsY3VsYXRl
ZCBmcm9tIHRvdGFsQ29udGVudExlbmd0aC4KKyAgICAgICAgW25ld0hlYWRlckZpZWxkcyByZW1v
dmVPYmplY3RGb3JLZXk6QCJDb250ZW50LUxlbmd0aCJdOworICAgIH0KKyAgICBXVEZMb2dBbHdh
eXMoIk5FVyBIRUFERVJTICVAIiwgbmV3SGVhZGVyRmllbGRzLmdldCgpKTsKKworICAgIC8vIEZJ
WE1FOiBVc2UgQ0ZIVFRQTWVzc2FnZUNvcHlWZXJzaW9uIGluc3RlYWQgb2Yga0NGSFRUUFZlcnNp
b24xXzE/CisgICAgcmV0dXJuIGFkb3B0TlMoW1tOU0hUVFBVUkxSZXNwb25zZSBhbGxvY10gaW5p
dFdpdGhVUkw6W29yaWdpbmFsUmVzcG9uc2UgVVJMXSBzdGF0dXNDb2RlOjIwNiBIVFRQVmVyc2lv
bjooTlNTdHJpbmcgKilrQ0ZIVFRQVmVyc2lvbjFfMSBoZWFkZXJGaWVsZHM6bmV3SGVhZGVyRmll
bGRzLmdldCgpXSk7Cit9CisKK2Jvb2wgUmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6d2lsbEhhbmRs
ZVJlcXVlc3QoV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICp0YXNrLCBOU1VSTFJlcXVlc3Qg
KnJlcXVlc3QpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fbWFwLmZpbmQocmVxdWVzdC5VUkwp
OworICAgIGlmIChpdGVyYXRvciA9PSBtX21hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgYXV0byByYW5nZSA9IFBhcnNlZFJlcXVlc3RSYW5nZTo6cGFyc2UoW3JlcXVlc3Qg
dmFsdWVGb3JIVFRQSGVhZGVyRmllbGQ6QCJSYW5nZSJdKTsKKyAgICBpZiAoIXJhbmdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBkYXRhID0gaXRlcmF0b3ItPnZhbHVlOwor
ICAgIGlmIChkYXRhLmFscmVhZHlGaW5pc2hlZExvYWRpbmcgPT0gRGF0YTo6QWxyZWFkeUZpbmlz
aGVkTG9hZGluZzo6WWVzKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGR1cGxpY2F0ZSBj
b2RlLiBGYWN0b3IgaXQgb3V0IG5pY2VseS4KKyAgICAgICAgYXV0byByYW5nZSA9IFBhcnNlZFJl
cXVlc3RSYW5nZTo6cGFyc2UoW1t0YXNrIG9yaWdpbmFsUmVxdWVzdF0gdmFsdWVGb3JIVFRQSGVh
ZGVyRmllbGQ6QCJSYW5nZSJdKTsKKyAgICAgICAgQVNTRVJUKHJhbmdlKTsgLy8gRklYTUU6IFN0
b3JlIHRoZSByYW5nZSBzb21ld2hlcmUgaW5zdGVhZCBvZiBkb3VibGUgcGFyc2luZyBhbmQgYXNz
ZXJ0aW5nIHRoYXQgaXQgc3VjY2VlZHMuIFByb2JhYmx5IGluIHRoZSBIYXNoU2V0PFJldGFpblB0
cjxUYXNrPj4uCisgICAgICAgIGF1dG8gcmVzcG9uc2UgPSBzeW50aGVzaXplZFJlc3BvbnNlRm9y
UmFuZ2UoKE5TSFRUUFVSTFJlc3BvbnNlICopZGF0YS5vcmlnaW5hbFJlc3BvbnNlLmdldCgpLCAq
cmFuZ2UsIFtkYXRhLm9yaWdpbmFsUmVzcG9uc2UgZXhwZWN0ZWRDb250ZW50TGVuZ3RoXSk7Cisg
ICAgICAgIGF1dG8gYnVmZmVyID0gZGF0YS5idWZmZXI7CisgICAgICAgIC8vIEZJWE1FOiBSZW1v
dmUgcmVzb3VyY2UgYXMgYSBwYXJhbWV0ZXIuIEl0J3Mgbm90IHVzZWQsIGFuZCB0aGlzIGNhcHR1
cmUgYnkgcmVmZXJlbmNlIGlzIHVuc2FmZS4KKyAgICAgICAgW3Rhc2sgcmVzb3VyY2U6bnVsbHB0
ciByZWNlaXZlZFJlc3BvbnNlOnJlc3BvbnNlLmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOls9XShX
ZWJDb3JlOjpTaG91bGRDb250aW51ZVBvbGljeUNoZWNrIHNob3VsZENvbnRpbnVlKSB7CisgICAg
ICAgICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyBhIGRpZmZlcmVudCBlbnVtIG5hbWUgdGhhbiBT
aG91bGRDb250aW51ZVBvbGljeUNoZWNrLgorICAgICAgICAgICAgaWYgKHNob3VsZENvbnRpbnVl
ID09IFNob3VsZENvbnRpbnVlUG9saWN5Q2hlY2s6Ok5vKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRklYTUU6IERvbid0IGNhbGwgU2hhcmVk
QnVmZmVyOjpkYXRhLiBJbnN0ZWFkLCBkbyBtdWx0aXBsZSBjYWxscyB0byByZWNlaXZlZERhdGEg
d2l0aCBzcGVjaWFsIGxvZ2ljIGF0IGJlZ2luIGFuZCBlbmQgb2YgcmFuZ2UgaW4gY2FzZSB0aGF0
IGRvZXNuJ3QgbGluZSB1cCB3aXRoIGEgc2VnbWVudCBib3VuZGFyeS4KKyAgICAgICAgICAgIC8v
IEZJWE1FOiBEb24ndCBhc3N1bWUgSSBoYXZlIGEgYmVnaW4gYW5kIGVuZCBpbiB0aGUgcmFuZ2Uu
CisgICAgICAgICAgICBbdGFzayByZXNvdXJjZTpudWxscHRyIHJlY2VpdmVkRGF0YTpidWZmZXIt
PmRhdGEoKSArICpyYW5nZS0+YmVnaW4oKSBsZW5ndGg6KnJhbmdlLT5lbmQoKSAtICpyYW5nZS0+
YmVnaW4oKV07CisgICAgICAgICAgICBbdGFzayByZXNvdXJjZUZpbmlzaGVkOm51bGxwdHIgbWV0
cmljczpOZXR3b3JrTG9hZE1ldHJpY3MgeyB9XTsKKyAgICAgICAgfV07CisgICAgfSBlbHNlCisg
ICAgICAgIGl0ZXJhdG9yLT52YWx1ZS50YXNrcy5hZGQodGFzayk7CisgICAgCisgICAgLy8gRklY
TUU6IFN5bnRoZXNpemUgYSByZXNwb25zZSBhbmQgc2VuZCB0aGUgZGF0YSBpZiBpdCdzIGFscmVh
ZHkgYmVlbiByZWNlaXZlZC4KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgTlNTdHJp
bmcgKnZhbHVlRm9ySFRUUEhlYWRlckZpZWxkKE5TSFRUUFVSTFJlc3BvbnNlICpyZXNwb25zZSwg
TlNTdHJpbmcgKmZpZWxkKQoreworI2lmIEhBVkUoSEFWRV9SRVNQT05TRV9WQUxVRV9GT1JfSFRU
UF9IRUFERVJfRklFTEQpCisgICAgcmV0dXJuIFtyZXNwb25zZSB2YWx1ZUZvckhUVFBIZWFkZXJG
aWVsZDpmaWVsZF07CisjZWxzZQorICAgIHJldHVybiByZXNwb25zZS5hbGxIZWFkZXJGaWVsZHNb
ZmllbGRdOworI2VuZGlmCit9CisKK2Jvb2wgUmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6d2lsbFN5
bnRoZXNpemVSYW5nZVJlc3BvbnNlcyhXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgKnRhc2ss
IFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzb3VyY2UsIE5TVVJMUmVxdWVzdCAqb3JpZ2luYWxS
ZXF1ZXN0LCBOU1VSTFJlc3BvbnNlICpyZXNwb25zZSkKK3sKKyAgICBpZiAoIVtyZXNwb25zZSBp
c0tpbmRPZkNsYXNzOltOU0hUVFBVUkxSZXNwb25zZSBjbGFzc11dKSB7CisgICAgICAgIFdURkxv
Z0Fsd2F5cygiRUFSTFkgUkVUVVJOIDMiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBpZiAoWyhOU0hUVFBVUkxSZXNwb25zZSAqKXJlc3BvbnNlIHN0YXR1c0NvZGVdICE9IDIw
MCkgeworICAgICAgICBXVEZMb2dBbHdheXMoIkVBUkxZIFJFVFVSTiA0Iik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgTlNTdHJpbmcgKnJlc3BvbnNlQ29udGVudExlbmd0aFN0
cmluZyA9IHZhbHVlRm9ySFRUUEhlYWRlckZpZWxkKChOU0hUVFBVUkxSZXNwb25zZSAqKXJlc3Bv
bnNlLCBAIkNvbnRlbnQtTGVuZ3RoIik7CisgICAgaWYgKCFyZXNwb25zZUNvbnRlbnRMZW5ndGhT
dHJpbmcpIHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJFQVJMWSBSRVRVUk4gMiIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh2YWx1ZUZvckhUVFBIZWFkZXJGaWVsZCgo
TlNIVFRQVVJMUmVzcG9uc2UgKilyZXNwb25zZSwgQCJDb250ZW50LVJhbmdlIikpIHsKKyAgICAg
ICAgV1RGTG9nQWx3YXlzKCJFQVJMWSBSRVRVUk4gNSIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgYXV0byBwYXJzZWRSZXF1ZXN0UmFuZ2UgPSBQYXJzZWRSZXF1ZXN0UmFu
Z2U6OnBhcnNlKFtvcmlnaW5hbFJlcXVlc3QgdmFsdWVGb3JIVFRQSGVhZGVyRmllbGQ6QCJSYW5n
ZSJdKTsKKyAgICBpZiAoIXBhcnNlZFJlcXVlc3RSYW5nZSkgeworICAgICAgICBXVEZMb2dBbHdh
eXMoIkVBUkxZIFJFVFVSTiA2Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBhdXRvIG9sZENvbnRlbnRMZW5ndGggPSBbcmVzcG9uc2UgZXhwZWN0ZWRDb250ZW50TGVuZ3Ro
XTsKKyAgICBpZiAoIW9sZENvbnRlbnRMZW5ndGggfHwgb2xkQ29udGVudExlbmd0aCA9PSBOU1VS
TFJlc3BvbnNlVW5rbm93bkxlbmd0aCkgeworICAgICAgICBXVEZMb2dBbHdheXMoIkVBUkxZIFJF
VFVSTiA3Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjbGFzcyBDbGll
bnQgOiBwdWJsaWMgUGxhdGZvcm1NZWRpYVJlc291cmNlQ2xpZW50IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX0lNUEw7CisgICAgICAgIENsaWVudChSYW5n
ZVJlc3BvbnNlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVSTCYmIHVybCkKKyAgICAgICAgICAgIDog
bV9nZW5lcmF0b3IobWFrZVdlYWtQdHIoZ2VuZXJhdG9yKSkKKyAgICAgICAgICAgICwgbV91cmwo
V1RGTW92ZSh1cmwpKSB7IH0KKyAgICBwcml2YXRlOgorCisgICAgICAgIC8vIFNob3VsZCBoYXZl
IGJlZW4gY2FsbGVkIGJlZm9yZSBjaGFuZ2luZyB0aGUgY2xpZW50IHRvIHRoaXMuCisgICAgICAg
IHZvaWQgcmVzcG9uc2VSZWNlaXZlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTaG91bGRDb250aW51ZVBvbGlj
eUNoZWNrKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgZmluYWwKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihT
aG91bGRDb250aW51ZVBvbGljeUNoZWNrOjpZZXMpOworICAgICAgICB9CisgICAgICAgIHZvaWQg
cmVkaXJlY3RSZWNlaXZlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBSZXNvdXJjZVJlcXVlc3Qm
JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChSZXNvdXJjZVJlcXVlc3QmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIGZpbmFsCisgICAgICAg
IHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoV1RGTW92ZShyZXF1ZXN0KSk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBk
YXRhU2VudChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2ln
bmVkIGxvbmcgbG9uZykgZmluYWwKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBhY2Nlc3NDb250cm9sQ2hlY2tGYWls
ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiwgY29uc3QgUmVzb3VyY2VFcnJvciYpIGZpbmFsCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCBzaG91bGRDYWNoZVJlc3BvbnNlKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKSBmaW5hbAorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoIW1fZ2VuZXJhdG9yKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIGZvciAoYXV0byYgdGFzayA6IG1fZ2VuZXJhdG9yLT5tX21hcC5nZXQobV91
cmwpLnRhc2tzKSB7CisgICAgICAgICAgICAgICAgaWYgKFt0YXNrIHJlc291cmNlOm51bGxwdHIg
c2hvdWxkQ2FjaGVSZXNwb25zZTpyZXNwb25zZV0pCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIHZvaWQgZGF0YVJlY2VpdmVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNv
bnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKSBmaW5hbAorICAgICAgICB7CisgICAgICAgICAg
ICBXVEZMb2dBbHdheXMoIk5FVyBDTElFTlQgUkVDRUlWRUQgREFUQSIpOworICAgICAgICAgICAg
aWYgKCFtX2dlbmVyYXRvcikKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBp
ZiAoYXV0byBidWZmZXIgPSBtX2dlbmVyYXRvci0+bV9tYXAuZ2V0KG1fdXJsKS5idWZmZXIpCisg
ICAgICAgICAgICAgICAgYnVmZmVyLT5hcHBlbmQoYnl0ZXMsIGxlbmd0aCk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICAvLyBGSVhNRTogSXRlcmF0ZSB0aGUgVVJMLT5zZXQ8dGFzaz4gbWFwIGFuZCB0ZWxsIGVhY2gg
b25lIGlmIGl0J3MgaW4gcmFuZ2UuCisgICAgICAgIH0KKyAgICAgICAgdm9pZCBsb2FkRmFpbGVk
KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKSBmaW5h
bAorICAgICAgICB7CisgICAgICAgICAgICBXVEZMb2dBbHdheXMoIk5FVyBDTElFTlQgTE9BRCBG
QUlMRUQiKTsKKyAgICAgICAgICAgIGlmICghbV9nZW5lcmF0b3IpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgZm9yIChhdXRvJiB0YXNrIDogbV9nZW5lcmF0b3ItPm1fbWFw
LnRha2UobV91cmwpLnRhc2tzKQorICAgICAgICAgICAgICAgIFt0YXNrIHJlc291cmNlOm51bGxw
dHIgbG9hZEZhaWxlZFdpdGhFcnJvcjplcnJvcl07CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBs
b2FkRmluaXNoZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiwgY29uc3QgTmV0d29ya0xvYWRNZXRy
aWNzJiBtZXRyaWNzKSBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICBXVEZMb2dBbHdheXMo
Ik5FVyBDTElFTlQgTE9BRCBGSU5JU0hFRCIpOworICAgICAgICAgICAgaWYgKCFtX2dlbmVyYXRv
cikKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0g
bV9nZW5lcmF0b3ItPm1fbWFwLmZpbmQobV91cmwpOworICAgICAgICAgICAgaWYgKGl0ZXJhdG9y
ID09IG1fZ2VuZXJhdG9yLT5tX21hcC5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBhdXRvJiBkYXRhID0gaXRlcmF0b3ItPnZhbHVlOworICAgICAgICAgICAgZGF0
YS5hbHJlYWR5RmluaXNoZWRMb2FkaW5nID0gRGF0YTo6QWxyZWFkeUZpbmlzaGVkTG9hZGluZzo6
WWVzOworICAgICAgICAgICAgZm9yIChhdXRvJiB0YXNrIDogZGF0YS50YXNrcykgeworICAgICAg
ICAgICAgICAgIGF1dG8gcmFuZ2UgPSBQYXJzZWRSZXF1ZXN0UmFuZ2U6OnBhcnNlKFtbdGFzayBv
cmlnaW5hbFJlcXVlc3RdIHZhbHVlRm9ySFRUUEhlYWRlckZpZWxkOkAiUmFuZ2UiXSk7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKHJhbmdlKTsgLy8gRklYTUU6IFN0b3JlIHRoZSByYW5nZSBzb21l
d2hlcmUgaW5zdGVhZCBvZiBkb3VibGUgcGFyc2luZyBhbmQgYXNzZXJ0aW5nIHRoYXQgaXQgc3Vj
Y2VlZHMuIFByb2JhYmx5IGluIHRoZSBIYXNoU2V0PFJldGFpblB0cjxUYXNrPj4uCisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IERvbid0IGFzc3VtZSB0aGlzIHJlc3BvbnNlIGlzIGFuIEhUVFBV
UkxSZXNwb25zZS4KKyAgICAgICAgICAgICAgICBhdXRvIHJlc3BvbnNlID0gc3ludGhlc2l6ZWRS
ZXNwb25zZUZvclJhbmdlKChOU0hUVFBVUkxSZXNwb25zZSAqKWRhdGEub3JpZ2luYWxSZXNwb25z
ZS5nZXQoKSwgKnJhbmdlLCBbZGF0YS5vcmlnaW5hbFJlc3BvbnNlIGV4cGVjdGVkQ29udGVudExl
bmd0aF0pOworICAgICAgICAgICAgICAgIGF1dG8gYnVmZmVyID0gZGF0YS5idWZmZXI7CisgICAg
ICAgICAgICAgICAgW3Rhc2sgcmVzb3VyY2U6bnVsbHB0ciByZWNlaXZlZFJlc3BvbnNlOnJlc3Bv
bnNlLmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOls9XShXZWJDb3JlOjpTaG91bGRDb250aW51ZVBv
bGljeUNoZWNrIHNob3VsZENvbnRpbnVlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIG5lZWRzIGEgZGlmZmVyZW50IGVudW0gbmFtZSB0aGFuIFNob3VsZENvbnRpbnVlUG9s
aWN5Q2hlY2suCisgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRDb250aW51ZSA9PSBTaG91
bGRDb250aW51ZVBvbGljeUNoZWNrOjpObykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBE
b24ndCBjYWxsIFNoYXJlZEJ1ZmZlcjo6ZGF0YS4gSW5zdGVhZCwgZG8gbXVsdGlwbGUgY2FsbHMg
dG8gcmVjZWl2ZWREYXRhIHdpdGggc3BlY2lhbCBsb2dpYyBhdCBiZWdpbiBhbmQgZW5kIG9mIHJh
bmdlIGluIGNhc2UgdGhhdCBkb2Vzbid0IGxpbmUgdXAgd2l0aCBhIHNlZ21lbnQgYm91bmRhcnku
CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBEb24ndCBhc3N1bWUgSSBoYXZlIGEgYmVn
aW4gYW5kIGVuZCBpbiB0aGUgcmFuZ2UuCisgICAgICAgICAgICAgICAgICAgIFt0YXNrIHJlc291
cmNlOm51bGxwdHIgcmVjZWl2ZWREYXRhOmJ1ZmZlci0+ZGF0YSgpICsgKnJhbmdlLT5iZWdpbigp
IGxlbmd0aDoqcmFuZ2UtPmVuZCgpIC0gKnJhbmdlLT5iZWdpbigpXTsKKyAgICAgICAgICAgICAg
ICAgICAgW3Rhc2sgcmVzb3VyY2VGaW5pc2hlZDpudWxscHRyIG1ldHJpY3M6bWV0cmljc107Cisg
ICAgICAgICAgICAgICAgfV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIFdlYWtQdHI8UmFuZ2VSZXNwb25zZUdlbmVyYXRvcj4gbV9nZW5lcmF0b3I7CisgICAg
ICAgIFVSTCBtX3VybDsgLy8gRklYTUU6IGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIERhdGEgaW5z
dGVhZCBvZiB0aGlzIGtleSBpbiB0aGUgaGFzaCBtYXA/CisgICAgfTsKKyAgICAKKyAgICAvLyBJ
bnRlcmNlcHQgZGF0YSBnb2luZyB0byB0aGlzIHRhc2suCisgICAgV1RGTG9nQWx3YXlzKCJTRVRU
SU5HIE5FVyBDTElFTlQiKTsKKyAgICByZXNvdXJjZS5zZXRDbGllbnQobWFrZVVuaXF1ZTxDbGll
bnQ+KCp0aGlzLCBvcmlnaW5hbFJlcXVlc3QuVVJMKSk7CisKKyAgICBtX21hcC5lbnN1cmUob3Jp
Z2luYWxSZXF1ZXN0LlVSTCwgW3Jlc3BvbnNlXSB7CisgICAgICAgIHJldHVybiBEYXRhIHsgeyB9
LCBTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpLCByZXNwb25zZSwgRGF0YTo6QWxyZWFkeUZpbmlzaGVk
TG9hZGluZzo6Tm8gfTsKKyAgICB9KS5pdGVyYXRvci0+dmFsdWUudGFza3MuYWRkKHRhc2spOwor
ICAgIAorICAgIC8vIEZJWE1FOiBzeW50aGVzaXplIGEgcmVzcG9uc2UgYW5kIHRlbGwgdGhpcyB0
YXNrIHJpZ2h0IGF3YXkuCisgICAgLy8gTWF5YmUgb3RoZXJzPworICAgIAorICAgIHJldHVybiB0
cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Np
b24uaAkocmV2aXNpb24gMjcxNzM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIz
LDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCisjaW1wb3J0ICJSYW5nZVJlc3BvbnNlR2Vu
ZXJhdG9yLmgiCiAjaW1wb3J0ICJTZWN1cml0eU9yaWdpbi5oIgogI2ltcG9ydCA8Rm91bmRhdGlv
bi9OU1VSTFNlc3Npb24uaD4KKyNpbXBvcnQgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2lt
cG9ydCA8d3RmL0hhc2hTZXQuaD4KICNpbXBvcnQgPHd0Zi9Mb2NrLmg+CiAjaW1wb3J0IDx3dGYv
T1NPYmplY3RQdHIuaD4KQEAgLTQxLDEyICs0MywxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q7CitjbGFzcyBOZXR3b3JrTG9hZE1ldHJpY3M7
CiBjbGFzcyBQbGF0Zm9ybU1lZGlhUmVzb3VyY2U7CiBjbGFzcyBQbGF0Zm9ybU1lZGlhUmVzb3Vy
Y2VMb2FkZXI7CitjbGFzcyBSZXNvdXJjZUVycm9yOworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0Owor
Y2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKIGNsYXNzIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFz
a0NsaWVudDsKK2VudW0gY2xhc3MgU2hvdWxkQ29udGludWVQb2xpY3lDaGVjayA6IGJvb2w7CiB9
CiAKLWVudW0gY2xhc3MgV2ViQ29yZU5TVVJMU2Vzc2lvbkNPUlNBY2Nlc3NDaGVja1Jlc3VsdHMg
eworZW51bSBjbGFzcyBXZWJDb3JlTlNVUkxTZXNzaW9uQ09SU0FjY2Vzc0NoZWNrUmVzdWx0cyA6
IHVpbnQ4X3QgewogICAgIFVua25vd24sCiAgICAgUGFzcywKICAgICBGYWlsLApAQCAtNjcsNiAr
NzQsNyBAQCBXRUJDT1JFX0VYUE9SVCBAaW50ZXJmYWNlIFdlYkNvcmVOU1VSTFNlCiAgICAgTlNV
SW50ZWdlciBfbmV4dFRhc2tJZGVudGlmaWVyOwogICAgIE9TT2JqZWN0UHRyPGRpc3BhdGNoX3F1
ZXVlX3Q+IF9pbnRlcm5hbFF1ZXVlOwogICAgIFdlYkNvcmVOU1VSTFNlc3Npb25DT1JTQWNjZXNz
Q2hlY2tSZXN1bHRzIF9jb3JzUmVzdWx0czsKKyAgICBXZWJDb3JlOjpSYW5nZVJlc3BvbnNlR2Vu
ZXJhdG9yIF9yYW5nZVJlc3BvbnNlR2VuZXJhdG9yOwogfQogLSAoaWQpaW5pdFdpdGhSZXNvdXJj
ZUxvYWRlcjooV2ViQ29yZTo6UGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyJilsb2FkZXIgZGVs
ZWdhdGU6KGlkPE5TVVJMU2Vzc2lvblRhc2tEZWxlZ2F0ZT4pZGVsZWdhdGUgZGVsZWdhdGVRdWV1
ZTooTlNPcGVyYXRpb25RdWV1ZSopcXVldWU7CiBAcHJvcGVydHkgKHJlYWRvbmx5LCByZXRhaW4p
IE5TT3BlcmF0aW9uUXVldWUgKmRlbGVnYXRlUXVldWU7CkBAIC0xNDMsNCArMTUxLDE1IEBAIFdF
QkNPUkVfRVhQT1JUIEBpbnRlcmZhY2UgV2ViQ29yZU5TVVJMU2UKIC0gKHZvaWQpcmVzdW1lOwog
QGVuZAogCitAaW50ZXJmYWNlIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAoV2ViS2l0SW50
ZXJuYWwpCistICh2b2lkKXJlc291cmNlOihudWxsYWJsZSBXZWJDb3JlOjpQbGF0Zm9ybU1lZGlh
UmVzb3VyY2UqKXJlc291cmNlIHNlbnRCeXRlczoodW5zaWduZWQgbG9uZyBsb25nKWJ5dGVzU2Vu
dCB0b3RhbEJ5dGVzVG9CZVNlbnQ6KHVuc2lnbmVkIGxvbmcgbG9uZyl0b3RhbEJ5dGVzVG9CZVNl
bnQ7CistICh2b2lkKXJlc291cmNlOihudWxsYWJsZSBXZWJDb3JlOjpQbGF0Zm9ybU1lZGlhUmVz
b3VyY2UqKXJlc291cmNlIHJlY2VpdmVkUmVzcG9uc2U6KGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UmKXJlc3BvbnNlIGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFdlYkNvcmU6OlNob3VsZENvbnRpbnVlUG9saWN5Q2hlY2spPiYmKWNvbXBsZXRpb25IYW5k
bGVyOworLSAoQk9PTClyZXNvdXJjZToobnVsbGFibGUgV2ViQ29yZTo6UGxhdGZvcm1NZWRpYVJl
c291cmNlKilyZXNvdXJjZSBzaG91bGRDYWNoZVJlc3BvbnNlOihjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJilyZXNwb25zZTsKKy0gKHZvaWQpcmVzb3VyY2U6KG51bGxhYmxlIFdlYkNv
cmU6OlBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3VyY2UgcmVjZWl2ZWREYXRhOihjb25zdCBj
aGFyKilkYXRhIGxlbmd0aDooaW50KWxlbmd0aDsKKy0gKHZvaWQpcmVzb3VyY2U6KG51bGxhYmxl
IFdlYkNvcmU6OlBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3VyY2UgcmVjZWl2ZWRSZWRpcmVj
dDooY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpcmVzcG9uc2UgcmVxdWVzdDooV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYpcmVxdWVzdCBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJik+JiYpY29tcGxldGlv
bkhhbmRsZXI7CistICh2b2lkKXJlc291cmNlOihudWxsYWJsZSBXZWJDb3JlOjpQbGF0Zm9ybU1l
ZGlhUmVzb3VyY2UqKXJlc291cmNlIGFjY2Vzc0NvbnRyb2xDaGVja0ZhaWxlZFdpdGhFcnJvcjoo
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpZXJyb3I7CistICh2b2lkKXJlc291cmNlOihu
dWxsYWJsZSBXZWJDb3JlOjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIGxvYWRGYWls
ZWRXaXRoRXJyb3I6KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKWVycm9yOworLSAodm9p
ZClyZXNvdXJjZUZpbmlzaGVkOihudWxsYWJsZSBXZWJDb3JlOjpQbGF0Zm9ybU1lZGlhUmVzb3Vy
Y2UqKXJlc291cmNlIG1ldHJpY3M6KGNvbnN0IFdlYkNvcmU6Ok5ldHdvcmtMb2FkTWV0cmljcyYp
bWV0cmljczsKK0BlbmQKKwogTlNfQVNTVU1FX05PTk5VTExfRU5ECkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24ubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3JlTlNV
UkxTZXNzaW9uLm1tCShyZXZpc2lvbiAyNzE3MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24ubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI3LDEwICsyNywxMiBAQAogI2ltcG9ydCAiV2ViQ29yZU5TVVJMU2Vzc2lvbi5oIgogCiAjaW1w
b3J0ICJDYWNoZWRSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbXBvcnQgIlBhcnNlZFJlcXVlc3RSYW5n
ZS5oIgogI2ltcG9ydCAiUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmgiCiAjaW1wb3J0ICJT
dWJyZXNvdXJjZUxvYWRlci5oIgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3
dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KKyNpbXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgogI2lt
cG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwpAQCAtMjAzLDI0ICsyMDUsMTYgQEAgLSAodm9pZCl0YXNrQ29tcGxldGVkOihXZWJDb3JlTlNV
UkxTZXNzaQogLSAodm9pZClhZGREZWxlZ2F0ZU9wZXJhdGlvbjooRnVuY3Rpb248dm9pZCgpPiYm
KW9wZXJhdGlvbjsKIC0gKHZvaWQpdGFzazooV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICop
dGFzayBkaWRSZWNlaXZlQ09SU0FjY2Vzc0NoZWNrUmVzdWx0OihCT09MKXJlc3VsdDsKIC0gKHZv
aWQpdGFzazooV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICopdGFzayBkaWRSZWNlaXZlUmVz
cG9uc2VGcm9tT3JpZ2luOihSZWY8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+JiYpb3JpZ2luOwor
LSAoV2ViQ29yZTo6UmFuZ2VSZXNwb25zZUdlbmVyYXRvciYpcmFuZ2VSZXNwb25zZUdlbmVyYXRv
cjsKIEBlbmQKIAogQGludGVyZmFjZSBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgKCkKIC0g
KGlkKWluaXRXaXRoU2Vzc2lvbjooV2ViQ29yZU5TVVJMU2Vzc2lvbiAqKXNlc3Npb24gaWRlbnRp
ZmllcjooTlNVSW50ZWdlcilpZGVudGlmaWVyIHJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVl
c3Q7Ci0tIChpZClpbml0V2l0aFNlc3Npb246KFdlYkNvcmVOU1VSTFNlc3Npb24gKilzZXNzaW9u
IGlkZW50aWZpZXI6KE5TVUludGVnZXIpaWRlbnRpZmllciBVUkw6KE5TVVJMICopdXJsOwogLSAo
dm9pZClfcmVzdGFydDsKIC0gKHZvaWQpX2NhbmNlbDsKIC0gKHZvaWQpX2ZpbmlzaDsKIEBwcm9w
ZXJ0eSAoYXNzaWduKSBXZWJDb3JlTlNVUkxTZXNzaW9uICogX051bGxhYmxlIHNlc3Npb247CiAK
LS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2Ugc2VudEJ5
dGVzOih1bnNpZ25lZCBsb25nIGxvbmcpYnl0ZXNTZW50IHRvdGFsQnl0ZXNUb0JlU2VudDoodW5z
aWduZWQgbG9uZyBsb25nKXRvdGFsQnl0ZXNUb0JlU2VudDsKLS0gKHZvaWQpcmVzb3VyY2U6KFBs
YXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgcmVjZWl2ZWRSZXNwb25zZTooY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpcmVzcG9uc2UgY29tcGxldGlvbkhhbmRsZXI6KENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoU2hvdWxkQ29udGludWVQb2xpY3lDaGVjayk+JiYpY29tcGxldGlvbkhhbmRsZXI7
Ci0tIChCT09MKXJlc291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmKXJlc291cmNlIHNob3Vs
ZENhY2hlUmVzcG9uc2U6KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKXJlc3BvbnNlOwotLSAodm9p
ZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlJilyZXNvdXJjZSByZWNlaXZlZERhdGE6
KGNvbnN0IGNoYXIqKWRhdGEgbGVuZ3RoOihpbnQpbGVuZ3RoOwotLSAodm9pZClyZXNvdXJjZToo
UGxhdGZvcm1NZWRpYVJlc291cmNlJilyZXNvdXJjZSByZWNlaXZlZFJlZGlyZWN0Oihjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJilyZXNwb25zZSByZXF1ZXN0OihSZXNvdXJjZVJlcXVlc3QmJilyZXF1
ZXN0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlc291cmNlUmVx
dWVzdCYmKT4mJiljb21wbGV0aW9uSGFuZGxlcjsKLS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3Jt
TWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgYWNjZXNzQ29udHJvbENoZWNrRmFpbGVkV2l0aEVycm9y
Oihjb25zdCBSZXNvdXJjZUVycm9yJillcnJvcjsKLS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3Jt
TWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgbG9hZEZhaWxlZFdpdGhFcnJvcjooY29uc3QgUmVzb3Vy
Y2VFcnJvciYpZXJyb3I7Ci0tICh2b2lkKXJlc291cmNlRmluaXNoZWQ6KFBsYXRmb3JtTWVkaWFS
ZXNvdXJjZSYpcmVzb3VyY2UgbWV0cmljczooY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJiltZXRy
aWNzOwogQGVuZAogCiBOU19BU1NVTUVfTk9OTlVMTF9FTkQKQEAgLTMxMSw2ICszMDUsMTEgQEAg
LSAodm9pZCl0YXNrOihXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhcwogICAgIF9vcmlnaW5zLmFk
ZChXVEZNb3ZlKG9yaWdpbikpOwogfQogCistIChXZWJDb3JlOjpSYW5nZVJlc3BvbnNlR2VuZXJh
dG9yJilyYW5nZVJlc3BvbnNlR2VuZXJhdG9yCit7CisgICAgcmV0dXJuIF9yYW5nZVJlc3BvbnNl
R2VuZXJhdG9yOworfQorCiAjcHJhZ21hIG1hcmsgLSBOU1VSTFNlc3Npb24gQVBJCiBAZHluYW1p
YyBkZWxlZ2F0ZTsKIC0gKF9fbnVsbGFibGUgaWQ8TlNVUkxTZXNzaW9uRGVsZWdhdGU+KWRlbGVn
YXRlCkBAIC00NTUsMTUgKzQ1NCw3IEBAIC0gKE5TVVJMU2Vzc2lvbkRhdGFUYXNrICopZGF0YVRh
c2tXaXRoUmUKIAogLSAoTlNVUkxTZXNzaW9uRGF0YVRhc2sgKilkYXRhVGFza1dpdGhVUkw6KE5T
VVJMICopdXJsCiB7Ci0gICAgaWYgKF9pbnZhbGlkYXRlZCkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LQotICAgIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAqdGFzayA9IFtbV2ViQ29yZU5TVVJM
U2Vzc2lvbkRhdGFUYXNrIGFsbG9jXSBpbml0V2l0aFNlc3Npb246c2VsZiBpZGVudGlmaWVyOl9u
ZXh0VGFza0lkZW50aWZpZXIrKyBVUkw6dXJsXTsKLSAgICB7Ci0gICAgICAgIExvY2tlcjxMb2Nr
PiBsb2NrZXIoX2RhdGFUYXNrc0xvY2spOwotICAgICAgICBfZGF0YVRhc2tzLmFkZCh0YXNrKTsK
LSAgICB9Ci0gICAgcmV0dXJuIChOU1VSTFNlc3Npb25EYXRhVGFzayAqKVt0YXNrIGF1dG9yZWxl
YXNlXTsKKyAgICByZXR1cm4gW3NlbGYgZGF0YVRhc2tXaXRoUmVxdWVzdDpbTlNVUkxSZXF1ZXN0
IHJlcXVlc3RXaXRoVVJMOnVybF1dOwogfQogCiAtICh2b2lkKXNlbmRIMlBpbmc6KE5TVVJMICop
dXJsIHBvbmdIYW5kbGVyOih2b2lkICheKShOU0Vycm9yICplcnJvciwgTlNUaW1lSW50ZXJ2YWwg
aW50ZXJ2YWwpKXBvbmdIYW5kbGVyCkBAIC01NzEsNyArNTYyLDcgQEAgcHVibGljOgogCiBwcml2
YXRlOgogICAgIExvY2sgbV90YXNrTG9jazsKLSAgICBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRh
c2sgKm1fdGFzazsKKyAgICBXZWFrT2JqQ1B0cjxXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2s+
IG1fdGFzazsKIH07CiAKIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpj
bGVhclRhc2soKQpAQCAtNTg2LDcgKzU3Nyw3IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRh
dGFUYXNrQ2xpZW50OjoKICAgICBpZiAoIW1fdGFzaykKICAgICAgICAgcmV0dXJuOwogCi0gICAg
W21fdGFzayByZXNvdXJjZTpyZXNvdXJjZSBzZW50Qnl0ZXM6Ynl0ZXNTZW50IHRvdGFsQnl0ZXNU
b0JlU2VudDp0b3RhbEJ5dGVzVG9CZVNlbnRdOworICAgIFttX3Rhc2sgcmVzb3VyY2U6JnJlc291
cmNlIHNlbnRCeXRlczpieXRlc1NlbnQgdG90YWxCeXRlc1RvQmVTZW50OnRvdGFsQnl0ZXNUb0Jl
U2VudF07CiB9CiAKIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjpyZXNw
b25zZVJlY2VpdmVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzb3VyY2UsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNob3VsZENvbnRp
bnVlUG9saWN5Q2hlY2spPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtNTk1LDcgKzU4Niw3IEBA
IHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjoKICAgICBpZiAoIW1fdGFz
aykKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKFNob3VsZENvbnRpbnVlUG9saWN5
Q2hlY2s6Ok5vKTsKIAotICAgIFttX3Rhc2sgcmVzb3VyY2U6cmVzb3VyY2UgcmVjZWl2ZWRSZXNw
b25zZTpyZXNwb25zZSBjb21wbGV0aW9uSGFuZGxlcjpXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV07CisgICAgW21fdGFzayByZXNvdXJjZTomcmVzb3VyY2UgcmVjZWl2ZWRSZXNwb25zZTpyZXNw
b25zZSBjb21wbGV0aW9uSGFuZGxlcjpXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV07CiB9CiAK
IGJvb2wgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjpzaG91bGRDYWNoZVJlc3Bv
bnNlKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlKQpAQCAtNjA0LDcgKzU5NSw3IEBAIGJvb2wgV2ViQ29yZU5TVVJMU2Vzc2lv
bkRhdGFUYXNrQ2xpZW50OjoKICAgICBpZiAoIW1fdGFzaykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgcmV0dXJuIFttX3Rhc2sgcmVzb3VyY2U6cmVzb3VyY2Ugc2hvdWxkQ2FjaGVSZXNw
b25zZTpyZXNwb25zZV07CisgICAgcmV0dXJuIFttX3Rhc2sgcmVzb3VyY2U6JnJlc291cmNlIHNo
b3VsZENhY2hlUmVzcG9uc2U6cmVzcG9uc2VdOwogfQogCiB2b2lkIFdlYkNvcmVOU1VSTFNlc3Np
b25EYXRhVGFza0NsaWVudDo6ZGF0YVJlY2VpdmVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVz
b3VyY2UsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCkBAIC02MTMsNyArNjA0LDcgQEAg
dm9pZCBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OgogICAgIGlmICghbV90YXNr
KQogICAgICAgICByZXR1cm47CiAKLSAgICBbbV90YXNrIHJlc291cmNlOnJlc291cmNlIHJlY2Vp
dmVkRGF0YTpkYXRhIGxlbmd0aDpsZW5ndGhdOworICAgIFttX3Rhc2sgcmVzb3VyY2U6JnJlc291
cmNlIHJlY2VpdmVkRGF0YTpkYXRhIGxlbmd0aDpsZW5ndGhdOwogfQogCiB2b2lkIFdlYkNvcmVO
U1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6cmVkaXJlY3RSZWNlaXZlZChQbGF0Zm9ybU1lZGlh
UmVzb3VyY2UmIHJlc291cmNlLCBSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZXNvdXJjZVJl
cXVlc3QmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC02MjIsNyArNjEzLDcgQEAgdm9pZCBX
ZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OgogICAgIGlmICghbV90YXNrKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBbbV90YXNrIHJlc291cmNlOnJlc291cmNlIHJlY2VpdmVkUmVk
aXJlY3Q6cmVzcG9uc2UgcmVxdWVzdDpXVEZNb3ZlKHJlcXVlc3QpIGNvbXBsZXRpb25IYW5kbGVy
OiBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8m
JiByZXF1ZXN0KSBtdXRhYmxlIHsKKyAgICBbbV90YXNrIHJlc291cmNlOiZyZXNvdXJjZSByZWNl
aXZlZFJlZGlyZWN0OnJlc3BvbnNlIHJlcXVlc3Q6V1RGTW92ZShyZXF1ZXN0KSBjb21wbGV0aW9u
SGFuZGxlcjogW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
IChhdXRvJiYgcmVxdWVzdCkgbXV0YWJsZSB7CiAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Jl
cXVlc3QgPSByZXF1ZXN0Lmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKFdURk1vdmUocmVxdWVzdCkpOwogICAgICAgICB9KTsKQEAgLTYzNSw3ICs2MjYs
NyBAQCB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6CiAgICAgaWYgKCFt
X3Rhc2spCiAgICAgICAgIHJldHVybjsKIAotICAgIFttX3Rhc2sgcmVzb3VyY2U6cmVzb3VyY2Ug
YWNjZXNzQ29udHJvbENoZWNrRmFpbGVkV2l0aEVycm9yOmVycm9yXTsKKyAgICBbbV90YXNrIHJl
c291cmNlOiZyZXNvdXJjZSBhY2Nlc3NDb250cm9sQ2hlY2tGYWlsZWRXaXRoRXJyb3I6ZXJyb3Jd
OwogfQogCiB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZhaWxl
ZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc291cmNlLCBjb25zdCBSZXNvdXJjZUVycm9yJiBl
cnJvcikKQEAgLTY0NCw3ICs2MzUsNyBAQCB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFz
a0NsaWVudDo6CiAgICAgaWYgKCFtX3Rhc2spCiAgICAgICAgIHJldHVybjsKIAotICAgIFttX3Rh
c2sgcmVzb3VyY2U6cmVzb3VyY2UgbG9hZEZhaWxlZFdpdGhFcnJvcjplcnJvcl07CisgICAgW21f
dGFzayByZXNvdXJjZTomcmVzb3VyY2UgbG9hZEZhaWxlZFdpdGhFcnJvcjplcnJvcl07CiB9CiAK
IHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQoUGxh
dGZvcm1NZWRpYVJlc291cmNlJiByZXNvdXJjZSwgY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJiBt
ZXRyaWNzKQpAQCAtNjUzLDcgKzY0NCw3IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFU
YXNrQ2xpZW50OjoKICAgICBpZiAoIW1fdGFzaykKICAgICAgICAgcmV0dXJuOwogCi0gICAgW21f
dGFzayByZXNvdXJjZUZpbmlzaGVkOnJlc291cmNlIG1ldHJpY3M6bWV0cmljc107CisgICAgW21f
dGFzayByZXNvdXJjZUZpbmlzaGVkOiZyZXNvdXJjZSBtZXRyaWNzOm1ldHJpY3NdOwogfQogCiB9
CkBAIC02NjEsMTcgKzY1Miw2IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xp
ZW50OjoKICNwcmFnbWEgbWFyayAtIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzawogCiBAaW1w
bGVtZW50YXRpb24gV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrCi0tIChpZClpbml0V2l0aFNl
c3Npb246KFdlYkNvcmVOU1VSTFNlc3Npb24gKilzZXNzaW9uIGlkZW50aWZpZXI6KE5TVUludGVn
ZXIpaWRlbnRpZmllciBVUkw6KE5TVVJMICopdXJsCi17Ci0gICAgc2VsZi50YXNrSWRlbnRpZmll
ciA9IGlkZW50aWZpZXI7Ci0gICAgc2VsZi5zZXNzaW9uID0gc2Vzc2lvbjsKLSAgICBzZWxmLnN0
YXRlID0gTlNVUkxTZXNzaW9uVGFza1N0YXRlU3VzcGVuZGVkOwotICAgIHNlbGYucHJpb3JpdHkg
PSBOU1VSTFNlc3Npb25UYXNrUHJpb3JpdHlEZWZhdWx0OwotICAgIHNlbGYub3JpZ2luYWxSZXF1
ZXN0ID0gc2VsZi5jdXJyZW50UmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6
dXJsXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCiAtIChpZClpbml0V2l0aFNlc3Npb246KFdl
YkNvcmVOU1VSTFNlc3Npb24gKilzZXNzaW9uIGlkZW50aWZpZXI6KE5TVUludGVnZXIpaWRlbnRp
ZmllciByZXF1ZXN0OihOU1VSTFJlcXVlc3QgKilyZXF1ZXN0CiB7CiAgICAgc2VsZi50YXNrSWRl
bnRpZmllciA9IGlkZW50aWZpZXI7CkBAIC03MDgsNiArNjg4LDkgQEAgLSAodm9pZClfcmVzdGFy
dAogCiAgICAgW3NlbGYgX2NhbmNlbF07CiAKKyAgICBpZiAoW3NlbGYuc2Vzc2lvbiByYW5nZVJl
c3BvbnNlR2VuZXJhdG9yXS53aWxsSGFuZGxlUmVxdWVzdChzZWxmLCBzZWxmLm9yaWdpbmFsUmVx
dWVzdCkpCisgICAgICAgIHJldHVybjsKKwogICAgIF9yZXNvdXJjZSA9IHNlbGYuc2Vzc2lvbi5s
b2FkZXIucmVxdWVzdFJlc291cmNlKHNlbGYub3JpZ2luYWxSZXF1ZXN0LCBQbGF0Zm9ybU1lZGlh
UmVzb3VyY2VMb2FkZXI6OkxvYWRPcHRpb246OkRpc2FsbG93Q2FjaGluZyk7CiAgICAgaWYgKF9y
ZXNvdXJjZSkKICAgICAgICAgX3Jlc291cmNlLT5zZXRDbGllbnQobWFrZVVuaXF1ZTxXZWJDb3Jl
TlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ+KHNlbGYpKTsKQEAgLTcyNyw3ICs3MTAsNyBAQCAt
ICh2b2lkKV9maW5pc2gKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGlmIChf
cmVzb3VyY2UpCi0gICAgICAgIFtzZWxmIHJlc291cmNlRmluaXNoZWQ6Kl9yZXNvdXJjZSBtZXRy
aWNzOk5ldHdvcmtMb2FkTWV0cmljcyB7IH1dOworICAgICAgICBbc2VsZiByZXNvdXJjZUZpbmlz
aGVkOl9yZXNvdXJjZS5nZXQoKSBtZXRyaWNzOk5ldHdvcmtMb2FkTWV0cmljcyB7IH1dOwogfQog
CiAjcHJhZ21hIG1hcmsgLSBOU1VSTFNlc3Npb24gQVBJCkBAIC04MDYsMjMgKzc4OSwyOCBAQCAt
IChOU0RpY3Rpb25hcnkgKilfdGltaW5nRGF0YQogCiAjcHJhZ21hIG1hcmsgLSBQbGF0Zm9ybU1l
ZGlhUmVzb3VyY2VDbGllbnQgY2FsbGJhY2tzCiAKLS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3Jt
TWVkaWFSZXNvdXJjZSYpcmVzb3VyY2Ugc2VudEJ5dGVzOih1bnNpZ25lZCBsb25nIGxvbmcpYnl0
ZXNTZW50IHRvdGFsQnl0ZXNUb0JlU2VudDoodW5zaWduZWQgbG9uZyBsb25nKXRvdGFsQnl0ZXNU
b0JlU2VudAorLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlKilyZXNvdXJj
ZSBzZW50Qnl0ZXM6KHVuc2lnbmVkIGxvbmcgbG9uZylieXRlc1NlbnQgdG90YWxCeXRlc1RvQmVT
ZW50Oih1bnNpZ25lZCBsb25nIGxvbmcpdG90YWxCeXRlc1RvQmVTZW50CiB7Ci0gICAgQVNTRVJU
X1VOVVNFRChyZXNvdXJjZSwgJnJlc291cmNlID09IF9yZXNvdXJjZSk7CisgICAgQVNTRVJUX1VO
VVNFRChyZXNvdXJjZSwgIXJlc291cmNlIHx8IHJlc291cmNlID09IF9yZXNvdXJjZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGJ5dGVzU2VudCk7CiAgICAgVU5VU0VEX1BBUkFNKHRvdGFsQnl0ZXNUb0Jl
U2VudCk7CiAgICAgLy8gTm8tb3AuCiB9CiAKLS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVk
aWFSZXNvdXJjZSYpcmVzb3VyY2UgcmVjZWl2ZWRSZXNwb25zZTooY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYpcmVzcG9uc2UgY29tcGxldGlvbkhhbmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
U2hvdWxkQ29udGludWVQb2xpY3lDaGVjayk+JiYpY29tcGxldGlvbkhhbmRsZXIKKy0gKHZvaWQp
cmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3VyY2UgcmVjZWl2ZWRSZXNwb25z
ZTooY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpcmVzcG9uc2UgY29tcGxldGlvbkhhbmRsZXI6KENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoU2hvdWxkQ29udGludWVQb2xpY3lDaGVjayk+JiYpY29tcGxl
dGlvbkhhbmRsZXIKIHsKICAgICBBU1NFUlQocmVzcG9uc2Uuc291cmNlKCkgPT0gUmVzb3VyY2VS
ZXNwb25zZTo6U291cmNlOjpOZXR3b3JrIHx8IHJlc3BvbnNlLnNvdXJjZSgpID09IFJlc291cmNl
UmVzcG9uc2U6OlNvdXJjZTo6RGlza0NhY2hlIHx8IHJlc3BvbnNlLnNvdXJjZSgpID09IFJlc291
cmNlUmVzcG9uc2U6OlNvdXJjZTo6RGlza0NhY2hlQWZ0ZXJWYWxpZGF0aW9uIHx8IHJlc3BvbnNl
LnNvdXJjZSgpID09IFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6U2VydmljZVdvcmtlcik7Ci0g
ICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgJnJlc291cmNlID09IF9yZXNvdXJjZSk7CisgICAg
QVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgIXJlc291cmNlIHx8IHJlc291cmNlID09IF9yZXNvdXJj
ZSk7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBbc2VsZi5zZXNzaW9uIHRhc2s6
c2VsZiBkaWRSZWNlaXZlUmVzcG9uc2VGcm9tT3JpZ2luOlNlY3VyaXR5T3JpZ2luOjpjcmVhdGUo
cmVzcG9uc2UudXJsKCkpXTsKLSAgICBbc2VsZi5zZXNzaW9uIHRhc2s6c2VsZiBkaWRSZWNlaXZl
Q09SU0FjY2Vzc0NoZWNrUmVzdWx0OnJlc291cmNlLmRpZFBhc3NBY2Nlc3NDb250cm9sQ2hlY2so
KV07CisgICAgLy8gRklYTUU6IFRoaW5rIGFib3V0IHRoaXMgYW5kIG1ha2Ugc3VyZSBpdCdzIHNh
ZmUuCisgICAgW3NlbGYuc2Vzc2lvbiB0YXNrOnNlbGYgZGlkUmVjZWl2ZUNPUlNBY2Nlc3NDaGVj
a1Jlc3VsdDpyZXNvdXJjZSA/IHJlc291cmNlLT5kaWRQYXNzQWNjZXNzQ29udHJvbENoZWNrKCkg
OiBZRVNdOwogICAgIHNlbGYuY291bnRPZkJ5dGVzRXhwZWN0ZWRUb1JlY2VpdmUgPSByZXNwb25z
ZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsKLSAgICBSZXRhaW5QdHI8TlNVUkxSZXNwb25zZT4g
c3Ryb25nUmVzcG9uc2UgeyByZXNwb25zZS5uc1VSTFJlc3BvbnNlKCkgfTsKKyAgICBSZXRhaW5Q
dHI8TlNVUkxSZXNwb25zZT4gc3Ryb25nUmVzcG9uc2UgPSByZXNwb25zZS5uc1VSTFJlc3BvbnNl
KCk7CisKKyAgICBpZiAocmVzb3VyY2UgJiYgc2VsZi5zZXNzaW9uICYmIFtzZWxmLnNlc3Npb24g
cmFuZ2VSZXNwb25zZUdlbmVyYXRvcl0ud2lsbFN5bnRoZXNpemVSYW5nZVJlc3BvbnNlcyhzZWxm
LCAqcmVzb3VyY2UsIHNlbGYub3JpZ2luYWxSZXF1ZXN0LCBzdHJvbmdSZXNwb25zZS5nZXQoKSkp
CisgICAgICAgIHJldHVybjsKKyAgICAKICAgICBSZXRhaW5QdHI8V2ViQ29yZU5TVVJMU2Vzc2lv
bkRhdGFUYXNrPiBzdHJvbmdTZWxmIHsgc2VsZiB9OwogICAgIGlmICghc2VsZi5zZXNzaW9uKQog
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoU2hvdWxkQ29udGludWVQb2xpY3lDaGVj
azo6Tm8pOwpAQCAtODUwLDkgKzgzOCw5IEBAIC0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVk
aWFSZXNvdXJjZSYKICAgICB9XTsKIH0KIAotLSAoQk9PTClyZXNvdXJjZTooUGxhdGZvcm1NZWRp
YVJlc291cmNlJilyZXNvdXJjZSBzaG91bGRDYWNoZVJlc3BvbnNlOihjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJilyZXNwb25zZQorLSAoQk9PTClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNl
KilyZXNvdXJjZSBzaG91bGRDYWNoZVJlc3BvbnNlOihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJily
ZXNwb25zZQogewotICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2UsICZyZXNvdXJjZSA9PSBfcmVz
b3VyY2UpOworICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2UsICFyZXNvdXJjZSB8fCByZXNvdXJj
ZSA9PSBfcmVzb3VyY2UpOwogCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIApAQCAtODYw
LDkgKzg0OCw5IEBAIC0gKEJPT0wpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYKICAg
ICByZXR1cm4gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50
UmFuZ2UpLmlzRW1wdHkoKTsKIH0KIAotLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJl
c291cmNlJilyZXNvdXJjZSByZWNlaXZlZERhdGE6KGNvbnN0IGNoYXIqKWRhdGEgbGVuZ3RoOihp
bnQpbGVuZ3RoCistICh2b2lkKXJlc291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291
cmNlIHJlY2VpdmVkRGF0YTooY29uc3QgY2hhciopZGF0YSBsZW5ndGg6KGludClsZW5ndGgKIHsK
LSAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAmcmVzb3VyY2UgPT0gX3Jlc291cmNlKTsKKyAg
ICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAhcmVzb3VyY2UgfHwgcmVzb3VyY2UgPT0gX3Jlc291
cmNlKTsKICAgICBSZXRhaW5QdHI8TlNEYXRhPiBuc0RhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFs
bG9jXSBpbml0V2l0aEJ5dGVzOmRhdGEgbGVuZ3RoOmxlbmd0aF0pOwogICAgIFJldGFpblB0cjxX
ZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2s+IHN0cm9uZ1NlbGYgeyBzZWxmIH07CiAgICAgW3Nl
bGYuc2Vzc2lvbiBhZGREZWxlZ2F0ZU9wZXJhdGlvbjpbc3Ryb25nU2VsZiwgbGVuZ3RoLCBuc0Rh
dGFdIHsKQEAgLTg3Myw5ICs4NjEsOSBAQCAtICh2b2lkKXJlc291cmNlOihQbGF0Zm9ybU1lZGlh
UmVzb3VyY2UmCiAgICAgfV07CiB9CiAKLS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFS
ZXNvdXJjZSYpcmVzb3VyY2UgcmVjZWl2ZWRSZWRpcmVjdDooY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpcmVzcG9uc2UgcmVxdWVzdDooUmVzb3VyY2VSZXF1ZXN0JiYpcmVxdWVzdCBjb21wbGV0aW9u
SGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZXNvdXJjZVJlcXVlc3QmJik+JiYpY29t
cGxldGlvbkhhbmRsZXIKKy0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSop
cmVzb3VyY2UgcmVjZWl2ZWRSZWRpcmVjdDooY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpcmVzcG9u
c2UgcmVxdWVzdDooUmVzb3VyY2VSZXF1ZXN0JiYpcmVxdWVzdCBjb21wbGV0aW9uSGFuZGxlcjoo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChSZXNvdXJjZVJlcXVlc3QmJik+JiYpY29tcGxldGlvbkhh
bmRsZXIKIHsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAmcmVzb3VyY2UgPT0gX3Jlc291
cmNlKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAhcmVzb3VyY2UgfHwgcmVzb3VyY2Ug
PT0gX3Jlc291cmNlKTsKICAgICBbc2VsZi5zZXNzaW9uIGFkZERlbGVnYXRlT3BlcmF0aW9uOltz
dHJvbmdTZWxmID0gcmV0YWluUHRyKHNlbGYpLCByZXNwb25zZSA9IHJldGFpblB0cihyZXNwb25z
ZS5uc1VSTFJlc3BvbnNlKCkpLCByZXF1ZXN0ID0gcmVxdWVzdC5pc29sYXRlZENvcHkoKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7
CiAgICAgICAgIGlmICghW3Jlc3BvbnNlIGlzS2luZE9mQ2xhc3M6W05TSFRUUFVSTFJlc3BvbnNl
IGNsYXNzXV0pIHsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtOTA1LDkg
Kzg5Myw5IEBAIC0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYKICAgICB9
XTsKIH0KIAotLSAodm9pZClfcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3Vy
Y2UgbG9hZEZpbmlzaGVkV2l0aEVycm9yOihOU0Vycm9yICopZXJyb3IgbWV0cmljczooY29uc3Qg
TmV0d29ya0xvYWRNZXRyaWNzJiltZXRyaWNzCistICh2b2lkKV9yZXNvdXJjZTooUGxhdGZvcm1N
ZWRpYVJlc291cmNlKilyZXNvdXJjZSBsb2FkRmluaXNoZWRXaXRoRXJyb3I6KE5TRXJyb3IgKill
cnJvciBtZXRyaWNzOihjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmKW1ldHJpY3MKIHsKLSAgICBB
U1NFUlRfVU5VU0VEKHJlc291cmNlLCAmcmVzb3VyY2UgPT0gX3Jlc291cmNlKTsKKyAgICBBU1NF
UlRfVU5VU0VEKHJlc291cmNlLCAhcmVzb3VyY2UgfHwgcmVzb3VyY2UgPT0gX3Jlc291cmNlKTsK
ICAgICBpZiAoc2VsZi5zdGF0ZSA9PSBOU1VSTFNlc3Npb25UYXNrU3RhdGVDb21wbGV0ZWQpCiAg
ICAgICAgIHJldHVybjsKICAgICBzZWxmLnN0YXRlID0gTlNVUkxTZXNzaW9uVGFza1N0YXRlQ29t
cGxldGVkOwpAQCAtOTMwLDE3ICs5MTgsMTcgQEAgLSAodm9pZClfcmVzb3VyY2U6KFBsYXRmb3Jt
TWVkaWFSZXNvdXJjZQogICAgIH1dOwogfQogCi0tICh2b2lkKXJlc291cmNlOihQbGF0Zm9ybU1l
ZGlhUmVzb3VyY2UmKXJlc291cmNlIGFjY2Vzc0NvbnRyb2xDaGVja0ZhaWxlZFdpdGhFcnJvcjoo
Y29uc3QgUmVzb3VyY2VFcnJvciYpZXJyb3IKKy0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVk
aWFSZXNvdXJjZSopcmVzb3VyY2UgYWNjZXNzQ29udHJvbENoZWNrRmFpbGVkV2l0aEVycm9yOihj
b25zdCBSZXNvdXJjZUVycm9yJillcnJvcgogewogICAgIFtzZWxmIF9yZXNvdXJjZTpyZXNvdXJj
ZSBsb2FkRmluaXNoZWRXaXRoRXJyb3I6ZXJyb3IubnNFcnJvcigpIG1ldHJpY3M6TmV0d29ya0xv
YWRNZXRyaWNzIHsgfV07CiB9CiAKLS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNv
dXJjZSYpcmVzb3VyY2UgbG9hZEZhaWxlZFdpdGhFcnJvcjooY29uc3QgUmVzb3VyY2VFcnJvciYp
ZXJyb3IKKy0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3VyY2Ug
bG9hZEZhaWxlZFdpdGhFcnJvcjooY29uc3QgUmVzb3VyY2VFcnJvciYpZXJyb3IKIHsKICAgICBb
c2VsZiBfcmVzb3VyY2U6cmVzb3VyY2UgbG9hZEZpbmlzaGVkV2l0aEVycm9yOmVycm9yLm5zRXJy
b3IoKSBtZXRyaWNzOk5ldHdvcmtMb2FkTWV0cmljcyB7IH1dOwogfQogCi0tICh2b2lkKXJlc291
cmNlRmluaXNoZWQ6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgbWV0cmljczooY29u
c3QgTmV0d29ya0xvYWRNZXRyaWNzJiltZXRyaWNzCistICh2b2lkKXJlc291cmNlRmluaXNoZWQ6
KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3VyY2UgbWV0cmljczooY29uc3QgTmV0d29ya0xv
YWRNZXRyaWNzJiltZXRyaWNzCiB7CiAgICAgW3NlbGYgX3Jlc291cmNlOnJlc291cmNlIGxvYWRG
aW5pc2hlZFdpdGhFcnJvcjpuaWwgbWV0cmljczptZXRyaWNzXTsKIH0KSW5kZXg6IFRvb2xzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MTk5NCkK
KysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDIx
LTAxLTI3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAg
ICAgICAgU3ludGhlc2l6ZSByYW5nZSByZXNwb25zZXMgaWYgbmVlZGVkIGluIFdlYkNvcmVOU1VS
TFNlc3Npb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyMTA3MgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzM1NzU0Njg+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0NoYWxsZW5nZS5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNsaWVu
dENlcnRTZXJ2ZXIpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
TWVkaWFMb2FkaW5nLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Ynl0ZXNGcm9tRGF0YSk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L2NvY29hL0hUVFBTZXJ2ZXIuaDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBSZXNwb25z
ZTo6SFRUUFJlc3BvbnNlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OkhU
VFBSZXNwb25zZTo6SFRUUFJlc3BvbnNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2Vy
dmVyOjpSZXF1ZXN0RGF0YTo6UmVxdWVzdERhdGEpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
YXBwZW5kVG9WZWN0b3IpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6cmVz
cG9uZFRvUmVxdWVzdHMpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFJlc3BvbnNlOjpi
b2R5RnJvbVN0cmluZyk6CisKIDIwMjEtMDEtMjcgIEFha2FzaCBKYWluICA8YWFrYXNoX2phaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFtidWlsZC53ZWJraXQub3JnXSBBZGQgYmFzaWMgYXV0aGVu
dGljYXRpb24KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQ2hh
bGxlbmdlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvQ2hhbGxlbmdlLm1tCShyZXZpc2lvbiAyNzE3MzQpCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0NoYWxsZW5nZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTg5
LDcgKzU4OSw3IEBAIHN0YXRpYyBIVFRQU2VydmVyIGNsaWVudENlcnRTZXJ2ZXIoKQogICAgICAg
ICB7ICIvNS5wbmciLCB7IGxvbmdTdHJpbmcgfSB9LAogICAgICAgICB7ICIvNi5wbmciLCB7IGxv
bmdTdHJpbmcgfSB9LAogICAgICAgICB7ICIvcmVkaXJlY3RUb0Vycm9yIiwgeyAzMDEsIHt7ICJM
b2NhdGlvbiIsICIvZXJyb3IiIH19IH0gfSwKLSAgICAgICAgeyAiL2Vycm9yIiwgeyBIVFRQU2Vy
dmVyOjpIVFRQUmVzcG9uc2U6OlRlcm1pbmF0ZUNvbm5lY3Rpb246OlllcyB9IH0sCisgICAgICAg
IHsgIi9lcnJvciIsIHsgSFRUUFJlc3BvbnNlOjpUZXJtaW5hdGVDb25uZWN0aW9uOjpZZXMgfSB9
LAogICAgIH0sIEhUVFBTZXJ2ZXI6OlByb3RvY29sOjpIdHRwcywgW10gKGF1dG8sIGF1dG8sIGF1
dG8gY2VydGlmaWNhdGVBbGxvd2VkKSB7CiAgICAgICAgIGNlcnRpZmljYXRlQWxsb3dlZCh0cnVl
KTsKICAgICB9KTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
TWVkaWFMb2FkaW5nLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvTWVkaWFMb2FkaW5nLm1tCShyZXZpc2lvbiAyNzE3MzQpCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL01lZGlhTG9hZGluZy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW1wb3J0ICJIVFRQU2VydmVyLmgiCiAjaW1wb3J0
ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCAiVGVzdFVJRGVsZWdhdGUuaCIKICNpbXBv
cnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRl
TnVtYmVycy5oPgogCkBAIC0xMTYsNiArMTE3LDQzIEBAIFRFU1QoTWVkaWFMb2FkaW5nLCBVc2Vy
QWdlbnRTdHJpbmdITFMpCiAgICAgVXRpbDo6cnVuKCZyZWNlaXZlZE1lZGlhUmVxdWVzdCk7CiB9
CiAKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gYnl0ZXNGcm9tRGF0YShOU0RhdGEgKmRhdGEpCit7
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvcjsKKyAgICB2ZWN0b3IuYXBwZW5kKHN0YXRpY19j
YXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ5dGVzKSwgZGF0YS5sZW5ndGgpOworICAgIHJldHVy
biB2ZWN0b3I7Cit9CisKK1RFU1QoTWVkaWFMb2FkaW5nLCBSYW5nZVJlcXVlc3RTeW50aGVzaXMp
Cit7CisgICAgY29uc3QgY2hhciogaHRtbCA9IjxzY3JpcHQ+IgorICAgICAgICAiZnVuY3Rpb24g
Y3JlYXRlVmlkZW9FbGVtZW50KCkgeyIKKyAgICAgICAgICAgICJsZXQgdmlkZW8gPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCd2aWRlbycpOyIKKyAgICAgICAgICAgICJ2aWRlby5hZGRFdmVudExp
c3RlbmVyKCdlcnJvcicsICgpPT57YWxlcnQoJ2Vycm9yJyl9KTsiCisgICAgICAgICAgICAidmlk
ZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsICgpPT57YWxlcnQoJ3BsYXlpbmcnKX0pOyIK
KyAgICAgICAgICAgICJ2aWRlby5zcmM9J3ZpZGVvLm1wNCc7IgorICAgICAgICAgICAgInZpZGVv
LmF1dG9wbGF5ID0gMTsiCisgICAgICAgICAgICAiZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh2
aWRlbyk7IgorICAgICAgICAifSIKKyAgICAiPC9zY3JpcHQ+IgorICAgICI8Ym9keSBvbmxvYWQ9
J2NyZWF0ZVZpZGVvRWxlbWVudCgpJz48L2JvZHk+IjsKKworICAgIE5TRGF0YSAqbXA0RGF0YSA9
IFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09mVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJM
Rm9yUmVzb3VyY2U6QCJ0ZXN0IiB3aXRoRXh0ZW5zaW9uOkAibXA0IiBzdWJkaXJlY3Rvcnk6QCJU
ZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKKworICAgIEhUVFBTZXJ2ZXIgc2VydmVyKHsKKyAg
ICAgICAgeyIvIiwgeyBodG1sIH19LAorICAgICAgICB7Ii92aWRlby5tcDQiLCB7IGJ5dGVzRnJv
bURhdGEobXA0RGF0YSkgfX0KKyAgICB9KTsKKworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFk
b3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmln
dXJhdGlvbi5nZXQoKS5tZWRpYVR5cGVzUmVxdWlyaW5nVXNlckFjdGlvbkZvclBsYXliYWNrID0g
V0tBdWRpb3Zpc3VhbE1lZGlhVHlwZU5vbmU7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhb
W1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCAzMDAs
IDMwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpIGFkZFRvV2luZG93OllFU10p
OworICAgIFdURkxvZ0Fsd2F5cygiUkVRVUVTVCAlQCIsIHNlcnZlci5yZXF1ZXN0KCkpOworICAg
IFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnNlcnZlci5yZXF1ZXN0KCldOworICAgIEVYUEVDVF9XS19T
VFJFUShbd2ViVmlldyBfdGVzdF93YWl0Rm9yQWxlcnRdLCAicGxheWluZyIpOworICAgIEVYUEVD
VF9FUShzZXJ2ZXIudG90YWxSZXF1ZXN0cygpLCAydSk7CiB9CiAKK30gLy8gbmFtZXNwYWNlIFRl
c3RXZWJLaXRBUEkKKwogI2VuZGlmIC8vIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElP
TikKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5oCShyZXZpc2lvbiAy
NzE3MzQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsMTAgKzM1LDEwIEBACiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAK
IGNsYXNzIENvbm5lY3Rpb247CitzdHJ1Y3QgSFRUUFJlc3BvbnNlOwogCiBjbGFzcyBIVFRQU2Vy
dmVyIHsKIHB1YmxpYzoKLSAgICBzdHJ1Y3QgSFRUUFJlc3BvbnNlOwogICAgIHN0cnVjdCBSZXF1
ZXN0RGF0YTsKICAgICBlbnVtIGNsYXNzIFByb3RvY29sIDogdWludDhfdCB7IEh0dHAsIEh0dHBz
LCBIdHRwc1dpdGhMZWdhY3lUTFMsIEh0dHAyIH07CiAgICAgdXNpbmcgQ2VydGlmaWNhdGVWZXJp
ZmllciA9IEZ1bmN0aW9uPHZvaWQoc2VjX3Byb3RvY29sX21ldGFkYXRhX3QsIHNlY190cnVzdF90
LCBzZWNfcHJvdG9jb2xfdmVyaWZ5X2NvbXBsZXRlX3QpPjsKQEAgLTgxLDE4ICs4MSwyMCBAQCBw
cml2YXRlOgogICAgIFJldGFpblB0cjxud19jb25uZWN0aW9uX3Q+IG1fY29ubmVjdGlvbjsKIH07
CiAKLXN0cnVjdCBIVFRQU2VydmVyOjpIVFRQUmVzcG9uc2Ugeworc3RydWN0IEhUVFBSZXNwb25z
ZSB7CiAgICAgZW51bSBjbGFzcyBUZXJtaW5hdGVDb25uZWN0aW9uIHsgTm8sIFllcyB9OwotICAg
IAorCisgICAgSFRUUFJlc3BvbnNlKFZlY3Rvcjx1aW50OF90PiYmIGJvZHkpCisgICAgICAgIDog
Ym9keShXVEZNb3ZlKGJvZHkpKSB7IH0KICAgICBIVFRQUmVzcG9uc2UoY29uc3QgU3RyaW5nJiBi
b2R5KQotICAgICAgICA6IGJvZHkoYm9keSkgeyB9Ci0gICAgSFRUUFJlc3BvbnNlKEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+JiYgaGVhZGVyRmllbGRzLCBTdHJpbmcmJiBib2R5KQorICAgICAgICA6
IGJvZHkoYm9keUZyb21TdHJpbmcoYm9keSkpIHsgfQorICAgIEhUVFBSZXNwb25zZShIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiYmIGhlYWRlckZpZWxkcywgY29uc3QgU3RyaW5nJiBib2R5KQogICAg
ICAgICA6IGhlYWRlckZpZWxkcyhXVEZNb3ZlKGhlYWRlckZpZWxkcykpCi0gICAgICAgICwgYm9k
eShXVEZNb3ZlKGJvZHkpKSB7IH0KLSAgICBIVFRQUmVzcG9uc2UodW5zaWduZWQgc3RhdHVzQ29k
ZSwgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mJiBoZWFkZXJGaWVsZHMgPSB7IH0sIFN0cmluZyYm
IGJvZHkgPSB7IH0pCisgICAgICAgICwgYm9keShib2R5RnJvbVN0cmluZyhib2R5KSkgeyB9Cisg
ICAgSFRUUFJlc3BvbnNlKHVuc2lnbmVkIHN0YXR1c0NvZGUsIEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+JiYgaGVhZGVyRmllbGRzID0geyB9LCBjb25zdCBTdHJpbmcmIGJvZHkgPSB7IH0pCiAgICAg
ICAgIDogc3RhdHVzQ29kZShzdGF0dXNDb2RlKQogICAgICAgICAsIGhlYWRlckZpZWxkcyhXVEZN
b3ZlKGhlYWRlckZpZWxkcykpCi0gICAgICAgICwgYm9keShXVEZNb3ZlKGJvZHkpKSB7IH0KKyAg
ICAgICAgLCBib2R5KGJvZHlGcm9tU3RyaW5nKGJvZHkpKSB7IH0KICAgICBIVFRQUmVzcG9uc2Uo
VGVybWluYXRlQ29ubmVjdGlvbiB0ZXJtaW5hdGVDb25uZWN0aW9uKQogICAgICAgICA6IHRlcm1p
bmF0ZUNvbm5lY3Rpb24odGVybWluYXRlQ29ubmVjdGlvbikgeyB9CiAKQEAgLTEwMSwxMCArMTAz
LDEyIEBAIHN0cnVjdCBIVFRQU2VydmVyOjpIVFRQUmVzcG9uc2UgewogICAgIEhUVFBSZXNwb25z
ZSgpID0gZGVmYXVsdDsKICAgICBIVFRQUmVzcG9uc2UmIG9wZXJhdG9yPShjb25zdCBIVFRQUmVz
cG9uc2UmKSA9IGRlZmF1bHQ7CiAgICAgSFRUUFJlc3BvbnNlJiBvcGVyYXRvcj0oSFRUUFJlc3Bv
bnNlJiYpID0gZGVmYXVsdDsKLSAgICAKKworICAgIHN0YXRpYyBWZWN0b3I8dWludDhfdD4gYm9k
eUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKICAgICB1bnNpZ25lZCBzdGF0dXNDb2RlIHsg
MjAwIH07CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gaGVhZGVyRmllbGRzOwotICAgIFN0
cmluZyBib2R5OworICAgIFZlY3Rvcjx1aW50OF90PiBib2R5OwogICAgIFRlcm1pbmF0ZUNvbm5l
Y3Rpb24gdGVybWluYXRlQ29ubmVjdGlvbiB7IFRlcm1pbmF0ZUNvbm5lY3Rpb246Ok5vIH07CiB9
OwogCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCShyZXZpc2lv
biAyNzE3MzQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0JKHdv
cmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDggQEAgbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewog
CiBzdHJ1Y3QgSFRUUFNlcnZlcjo6UmVxdWVzdERhdGEgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8UmVxdWVzdERhdGEsIFdURjo6RGVzdHJ1Y3Rpb25UaHJlYWQ6Ok1haW5SdW5Mb29wPiB7
CiAgICAgUmVxdWVzdERhdGEoc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxTdHJpbmcs
IEhUVFBSZXNwb25zZT4+IHJlc3BvbnNlcykKLSAgICA6IHJlcXVlc3RNYXAoW10oc3RkOjppbml0
aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxTdHJpbmcsIEhUVFBTZXJ2ZXI6OkhUVFBSZXNwb25zZT4+
IGxpc3QpIHsKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIEhUVFBTZXJ2ZXI6OkhUVFBSZXNwb25z
ZT4gbWFwOworICAgIDogcmVxdWVzdE1hcChbXShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpw
YWlyPFN0cmluZywgSFRUUFJlc3BvbnNlPj4gbGlzdCkgeworICAgICAgICBIYXNoTWFwPFN0cmlu
ZywgSFRUUFJlc3BvbnNlPiBtYXA7CiAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IGxpc3QpCiAg
ICAgICAgICAgICBtYXAuYWRkKHBhaXIuZmlyc3QsIHBhaXIuc2Vjb25kKTsKICAgICAgICAgcmV0
dXJuIG1hcDsKQEAgLTIxMiw2ICsyMTIsMTIgQEAgc3RhdGljIFZlY3Rvcjx1aW50OF90PiB2ZWN0
b3JGcm9tRGF0YShkaQogICAgIHJldHVybiByZXF1ZXN0OwogfQogCitzdGF0aWMgdm9pZCBhcHBl
bmRUb1ZlY3RvcihWZWN0b3I8dWludDhfdD4mIHZlY3RvciwgY29uc3QgU3RyaW5nJiBzdHJpbmcp
Cit7CisgICAgYXV0byB1dGY4ID0gc3RyaW5nLnV0ZjgoKTsKKyAgICB2ZWN0b3IuYXBwZW5kKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHV0ZjguZGF0YSgpKSwgdXRmOC5sZW5ndGgo
KSk7Cit9CisKIHZvaWQgSFRUUFNlcnZlcjo6cmVzcG9uZFRvUmVxdWVzdHMoQ29ubmVjdGlvbiBj
b25uZWN0aW9uLCBSZWY8UmVxdWVzdERhdGE+IHJlcXVlc3REYXRhKQogewogICAgIGNvbm5lY3Rp
b24ucmVjZWl2ZUhUVFBSZXF1ZXN0KFtjb25uZWN0aW9uLCByZXF1ZXN0RGF0YV0gKFZlY3Rvcjxj
aGFyPiYmIHJlcXVlc3QpIG11dGFibGUgewpAQCAtMjMyLDYgKzIzOCw3IEBAIHZvaWQgSFRUUFNl
cnZlcjo6cmVzcG9uZFRvUmVxdWVzdHMoQ29ubmUKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShwYXRoUHJlZml4TGVuZ3RoLCAiSFRUUFNlcnZlciBhc3N1bWVzIHJlcXVlc3QgaXMgR0VUIG9y
IFBPU1QiKTsKICAgICAgICAgc2l6ZV90IHBhdGhMZW5ndGggPSBwYXRoRW5kIC0gcmVxdWVzdC5k
YXRhKCkgLSBwYXRoUHJlZml4TGVuZ3RoOwogICAgICAgICBTdHJpbmcgcGF0aChyZXF1ZXN0LmRh
dGEoKSArIHBhdGhQcmVmaXhMZW5ndGgsIHBhdGhMZW5ndGgpOworICAgICAgICBXVEZMb2dBbHdh
eXMoIlNFUlZFUiBSRVFVRVNUICVzIiwgcGF0aC51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShyZXF1ZXN0RGF0YS0+cmVxdWVzdE1hcC5jb250YWlucyhwYXRoKSwg
IlRoaXMgSFRUUFNlcnZlciBkb2VzIG5vdCBrbm93IGhvdyB0byByZXNwb25kIHRvIGEgcmVxdWVz
dCBmb3IgJXMiLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgICAgIGF1dG8gcmVzcG9uc2Ug
PSByZXF1ZXN0RGF0YS0+cmVxdWVzdE1hcC5nZXQocGF0aCk7CkBAIC0yMzksMTIgKzI0NiwxNiBA
QCB2b2lkIEhUVFBTZXJ2ZXI6OnJlc3BvbmRUb1JlcXVlc3RzKENvbm5lCiAgICAgICAgICAgICBy
ZXR1cm4gY29ubmVjdGlvbi50ZXJtaW5hdGUoKTsKICAgICAgICAgU3RyaW5nQnVpbGRlciByZXNw
b25zZUJ1aWxkZXI7CiAgICAgICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQoIkhUVFAvMS4xICIs
IHJlc3BvbnNlLnN0YXR1c0NvZGUsICcgJywgc3RhdHVzVGV4dChyZXNwb25zZS5zdGF0dXNDb2Rl
KSwgIlxyXG4iKTsKLSAgICAgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZCgiQ29udGVudC1MZW5n
dGg6ICIsIHJlc3BvbnNlLmJvZHkubGVuZ3RoKCksICJcclxuIik7CisgICAgICAgIHJlc3BvbnNl
QnVpbGRlci5hcHBlbmQoIkNvbnRlbnQtTGVuZ3RoOiAiLCByZXNwb25zZS5ib2R5LnNpemUoKSwg
IlxyXG4iKTsKICAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogcmVzcG9uc2UuaGVhZGVyRmllbGRz
KQogICAgICAgICAgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZChwYWlyLmtleSwgIjogIiwgcGFp
ci52YWx1ZSwgIlxyXG4iKTsKICAgICAgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZCgiXHJcbiIp
OwotICAgICAgICByZXNwb25zZUJ1aWxkZXIuYXBwZW5kKHJlc3BvbnNlLmJvZHkpOwotICAgICAg
ICBjb25uZWN0aW9uLnNlbmQocmVzcG9uc2VCdWlsZGVyLnRvU3RyaW5nKCksIFtjb25uZWN0aW9u
LCByZXF1ZXN0RGF0YV0geworICAgICAgICAKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ5dGVz
VG9TZW5kOworICAgICAgICBhcHBlbmRUb1ZlY3RvcihieXRlc1RvU2VuZCwgcmVzcG9uc2VCdWls
ZGVyLnRvU3RyaW5nKCkpOworICAgICAgICBieXRlc1RvU2VuZC5hcHBlbmRWZWN0b3IocmVzcG9u
c2UuYm9keSk7CisgICAgICAgIAorICAgICAgICBjb25uZWN0aW9uLnNlbmQoV1RGTW92ZShieXRl
c1RvU2VuZCksIFtjb25uZWN0aW9uLCByZXF1ZXN0RGF0YV0gewogICAgICAgICAgICAgcmVzcG9u
ZFRvUmVxdWVzdHMoY29ubmVjdGlvbiwgcmVxdWVzdERhdGEpOwogICAgICAgICB9KTsKICAgICB9
KTsKQEAgLTMzNCw2ICszNDUsMTMgQEAgdm9pZCBDb25uZWN0aW9uOjpjYW5jZWwoKQogICAgIG1f
Y29ubmVjdGlvbiA9IG51bGxwdHI7CiB9CiAKK1ZlY3Rvcjx1aW50OF90PiBIVFRQUmVzcG9uc2U6
OmJvZHlGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIFZlY3Rvcjx1aW50
OF90PiB2ZWN0b3I7CisgICAgYXBwZW5kVG9WZWN0b3IodmVjdG9yLCBzdHJpbmcpOworICAgIHJl
dHVybiB2ZWN0b3I7Cit9CisKIHZvaWQgSDI6OkNvbm5lY3Rpb246OnNlbmQoRnJhbWUmJiBmcmFt
ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAog
ewogICAgIGF1dG8gZnJhbWVUeXBlID0gZnJhbWUudHlwZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419520</attachid>
            <date>2021-02-06 19:41:28 -0800</date>
            <delta_ts>2021-02-06 19:56:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221072-20210206194127.patch</filename>
            <type>text/plain</type>
            <size>69521</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyNDYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGQyMGQxZWJjMzE5NWFk
YzY0NzUxOTMzMDQ5ZTQxODczYmM2MmY5OS4uMDkxY2QzZDM1MGFlNThjNzhiMjkxNDY4ZTZjNWU4
MmQ0YzllN2YyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIxLTAyLTA2ICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3ludGhl
c2l6ZSByYW5nZSByZXNwb25zZXMgaWYgbmVlZGVkIGluIFdlYkNvcmVOU1VSTFNlc3Npb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTA3MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gd2UgbWFr
ZSBhIG1lZGlhIHJlcXVlc3Qgd2l0aCBhIFJhbmdlIEhUVFAgaGVhZGVyIGZpZWxkIGFuZCB0aGUg
c2VydmVyIGRvZXNuJ3QgcmVzcG9uZCB3aXRoIGEgMjA2IHdpdGggQ29udGVudC1SYW5nZSBoZWFk
ZXIgZmllbGQsCisgICAgICAgIHVudGlsIG5vdyB3ZSB3b3VsZCBqdXN0IGZhaWwgdG8gcGxheSB0
aGUgdmlkZW8uICBJbiBvcmRlciB0byBzdWNjZXNzZnVsbHkgcGxheSB0aGVzZSB2aWRlb3MsIEkg
aW50cm9kdWNlIHRoZSBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yIGNsYXNzLAorICAgICAgICB3aGlj
aCB3aWxsIHJlY2VpdmUgdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBmb3Igc3VjaCBhIHZpZGVvIGFu
ZCBmZWVkIHRoZSBkYXRhIGludG8gV2ViQ29yZU5TVVJMU2Vzc2lvbiBhcyB0aGUgcmVxdWVzdGVk
IHJhbmdlcyBhcmUgcmVjZWl2ZWQuCisgICAgICAgIFNlZWtpbmcgaXMgcHJvYmxlbWF0aWMsIGJ1
dCBhdCBsZWFzdCB3ZSB3aWxsIHRyeSBvdXIgYmVzdCB0byBwbGF5IHRoZSB2aWRlby4KKworICAg
ICAgICBJIGFkZGVkIEFQSSB0ZXN0cyB0aGF0IHRyeSB0byBwbGF5IGEgdmlkZW8gdGhhdCBkaWRu
J3QgcGxheSBiZWZvcmUgdXNpbmcgYSBzZXJ2ZXIgdGhhdCBkb2Vzbid0IHN1cHBvcnQgcmFuZ2Ug
cmVxdWVzdHMuICBNYW51YWwgdmVyaWZpY2F0aW9uIGlzIGFsc28gbmVjZXNzYXJ5LgorCisgICAg
ICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2U6OnNldENsaWVudCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvV2ViQ29yZUFWRlJlc291cmNlTG9hZGVyLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1SZXNvdXJjZU1lZGlhTG9hZGVyOjpjcmVhdGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUGFyc2VkUmVxdWVzdFJhbmdlLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpQYXJzZWRSZXF1ZXN0UmFuZ2U6OnBhcnNlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZFJlcXVlc3RSYW5nZS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlBhcnNlZFJlcXVlc3RSYW5nZTo6YmVnaW4gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFyc2VkUmVxdWVzdFJhbmdlOjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UGFyc2VkUmVxdWVzdFJhbmdlOjpQYXJzZWRSZXF1ZXN0UmFuZ2UpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY29jb2EvUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5oOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1JhbmdlUmVzcG9uc2VHZW5lcmF0b3IubW06IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6RGF0YTo6RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpEYXRhOjpUYXNr
RGF0YTo6VGFza0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6c3ludGhlc2l6ZWRSZXNwb25zZUZv
clJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlUmVzcG9uc2VHZW5lcmF0b3I6OnJlbW92
ZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6Z2l2ZVJl
c3BvbnNlVG9UYXNrSWZCeXRlc0luUmFuZ2VSZWNlaXZlZCk6CisgICAgICAgIChXZWJDb3JlOjpS
YW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpleHBlY3RlZENvbnRlbnRMZW5ndGhGcm9tRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpnaXZlUmVzcG9uc2VUb1Rh
c2tzV2l0aEZpbmlzaGVkUmFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlUmVzcG9uc2VH
ZW5lcmF0b3I6OndpbGxIYW5kbGVSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlUmVz
cG9uc2VHZW5lcmF0b3I6OndpbGxTeW50aGVzaXplUmFuZ2VSZXNwb25zZXMpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5oOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5tbToKKyAgICAgICAg
KC1bV2ViQ29yZU5TVVJMU2Vzc2lvbiByYW5nZVJlc3BvbnNlR2VuZXJhdG9yXSk6CisgICAgICAg
ICgtW1dlYkNvcmVOU1VSTFNlc3Npb24gZGF0YVRhc2tXaXRoVVJMOl0pOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjpkYXRhU2VudCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OnJlc3BvbnNl
UmVjZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNr
Q2xpZW50OjpzaG91bGRDYWNoZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVO
U1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6ZGF0YVJlY2VpdmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6cmVkaXJlY3RSZWNlaXZlZCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmFj
Y2Vzc0NvbnRyb2xDaGVja0ZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlTlNVUkxT
ZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmxvYWRGYWlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
Q29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQpOgorICAgICAgICAo
LVtXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgX3Jlc3RhcnRdKToKKyAgICAgICAgKC1bV2Vi
Q29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrIF9maW5pc2hdKToKKyAgICAgICAgKC1bV2ViQ29yZU5T
VVJMU2Vzc2lvbkRhdGFUYXNrIHJlc291cmNlOnNlbnRCeXRlczp0b3RhbEJ5dGVzVG9CZVNlbnQ6
XSk6CisgICAgICAgICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayByZXNvdXJjZTpyZWNl
aXZlZFJlc3BvbnNlOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXZWJDb3JlTlNV
UkxTZXNzaW9uRGF0YVRhc2sgcmVzb3VyY2U6c2hvdWxkQ2FjaGVSZXNwb25zZTpdKToKKyAgICAg
ICAgKC1bV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrIHJlc291cmNlOnJlY2VpdmVkRGF0YTps
ZW5ndGg6XSk6CisgICAgICAgICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayByZXNvdXJj
ZTpyZWNlaXZlZFJlZGlyZWN0OnJlcXVlc3Q6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAg
ICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayBfcmVzb3VyY2U6bG9hZEZpbmlzaGVkV2l0
aEVycm9yOm1ldHJpY3M6XSk6CisgICAgICAgICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFz
ayByZXNvdXJjZTphY2Nlc3NDb250cm9sQ2hlY2tGYWlsZWRXaXRoRXJyb3I6XSk6CisgICAgICAg
ICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayByZXNvdXJjZTpsb2FkRmFpbGVkV2l0aEVy
cm9yOl0pOgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgcmVzb3VyY2VG
aW5pc2hlZDptZXRyaWNzOl0pOgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRh
c2sgaW5pdFdpdGhTZXNzaW9uOmlkZW50aWZpZXI6VVJMOl0pOiBEZWxldGVkLgorCiAyMDIxLTAy
LTA2ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSUZD
XVtRdWlya10gS2VlcCB0aGUgcm9vdCBpbmxpbmUgYm94IGJhc2VsaW5lIGFuY2hvcmVkIGF0IDAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggMTZlMTViMTM3YzRiMjJmMTZkZWY5MDdkMTYzZmQyOTA4MDEwMzE3Zi4uY2U4
N2ZlODlmMWU4NTFlZjU1YWI0YmRkNWZmNmY1OGJmMDhjZjE4YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMyBAQAorMjAyMS0wMi0wNiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgorCisgICAgICAgIFN5bnRoZXNpemUgcmFuZ2UgcmVzcG9uc2VzIGlmIG5lZWRlZCBp
biBXZWJDb3JlTlNVUkxTZXNzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjEwNzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJl
bW90ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZTo6cmVx
dWVzdFJlc291cmNlKToKKwogMjAyMS0wMi0wNSAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGUu
Y29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI3MjMzNyk6IGNyYXNoIHVuZGVyIFdlYkNvcmU6
OlNwZWVjaFJlY29nbml6ZXI6OnNldEluYWN0aXZlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggYTVlMTVj
ODUwN2Y2OWU4MTQ4ZWU3N2IzODRkZTEzODFkYTc3OTYwMC4uYzJlY2RiYzJkYzYzNTkxMzQ0ZWVj
ZGRhYTIxZjYzMDc2OTM2ODQ2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIxMTksNiArMjExOSw3IEBA
IHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRlTm90aWZpZXIuY3BwCiBwbGF0Zm9ybS9uZXR3
b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5jcHAKIHBsYXRmb3JtL25ldHdvcmsvUGFyc2VkQ29u
dGVudFJhbmdlLmNwcAogcGxhdGZvcm0vbmV0d29yay9QYXJzZWRDb250ZW50VHlwZS5jcHAKK3Bs
YXRmb3JtL25ldHdvcmsvUGFyc2VkUmVxdWVzdFJhbmdlLmNwcAogcGxhdGZvcm0vbmV0d29yay9Q
cm90ZWN0aW9uU3BhY2VCYXNlLmNwcAogcGxhdGZvcm0vbmV0d29yay9Qcm94eVNlcnZlci5jcHAK
IHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VFcnJvckJhc2UuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dAppbmRleCBkMmIzNDIzNjI1NWE0MTdmM2FhMTYzNjVlMTAzYmI3YzEyMjA3MjQ2Li5kMzE5
ZTE4ZjEyOGFhOGVkNmY1YzBlY2RlZGJiOWU3ZTM2M2Y1MTYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2Nv
YS50eHQKQEAgLTU3MCw2ICs1NzAsNyBAQCBwbGF0Zm9ybS9uZXR3b3JrL2NvY29hL0NyZWRlbnRp
YWxDb2NvYS5tbQogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrTG9hZE1ldHJpY3MubW0K
IHBsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0KIHBs
YXRmb3JtL25ldHdvcmsvY29jb2EvUHJvdGVjdGlvblNwYWNlQ29jb2EubW0KK3BsYXRmb3JtL25l
dHdvcmsvY29jb2EvUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5tbQogcGxhdGZvcm0vbmV0d29yay9j
b2NvYS9SZXNvdXJjZVJlcXVlc3RDb2NvYS5tbQogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9SZXNv
dXJjZVJlc3BvbnNlQ29jb2EubW0gQG5vLXVuaWZ5IC8vIFVuc2FmZSB0byB1bmlmeSB1bnRpbCBy
ZGFyOi8vcHJvYmxlbS80ODg1MzEzNyBpcyByZXNvbHZlZAogcGxhdGZvcm0vbmV0d29yay9jb2Nv
YS9XZWJDb3JlTlNVUkxTZXNzaW9uLm1tIEBuby11bmlmeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGJkM2JjMTYwZDhiYWY0N2I0
MTYyMjg4MDc3NjU2MDJiNWQyYjQ0OTIuLjBlMzk3YWM2MmU3NTZkMWYzN2UzMWYxYmZmYWY3NmFj
MWNhMTBjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTE5NDEsNiArMTk0MSw4IEBACiAJCTVDMkIxQUVDMjIzOTdFQkMwMEI5
MUNGNyAvKiBSZXNvdXJjZVJlc3BvbnNlQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMUY3OEQwQjFDMjU0MjJDMDAyNDU0NDYgLyogUmVzb3Vy
Y2VSZXNwb25zZUNvY29hLm1tICovOyB9OwogCQk1QzQzMDRCMTE5MUFDOTA4MDAwRTJCQzAgLyog
RVhUU2hhZGVyVGV4dHVyZUxPRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUM0MzA0QUUxOTFBQzkwODAwMEUyQkMwIC8qIEVYVFNoYWRlclRleHR1cmVM
T0QuaCAqLzsgfTsKIAkJNUM0MzA0QjYxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4
dHVyZUxPRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUM0MzA0QjQxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oICovOyB9
OworCQk1QzRBMEZENzI1QzM0MzUwMDBEOUVFOTcgLyogUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM0QTBGRDUy
NUMzNDJDODAwRDlFRTk3IC8qIFJhbmdlUmVzcG9uc2VHZW5lcmF0b3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1QzRBMEZEQTI1QzM0NDlBMDBE
OUVFOTcgLyogUGFyc2VkUmVxdWVzdFJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1QzRBMEZEODI1QzM0NDZDMDBEOUVFOTcgLyogUGFyc2VkUmVx
dWVzdFJhbmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNUM1M0RDRTEyNDQ2NURGQzAwQTkzMTI0IC8qIEFwcGxlUGF5U2V0dXBGZWF0dXJlV2Vi
Q29yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM1
M0RDQ0YyNDQ2NDQ5OTAwQTkzMTI0IC8qIEFwcGxlUGF5U2V0dXBGZWF0dXJlV2ViQ29yZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDNTNEQ0U3
MjQ0NjhBRDIwMEE5MzEyNCAvKiBQYXltZW50SW5zdGFsbG1lbnRDb25maWd1cmF0aW9uV2ViQ29y
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM1M0RD
Q0UyNDQ2NDQ5OTAwQTkzMTI0IC8qIFBheW1lbnRJbnN0YWxsbWVudENvbmZpZ3VyYXRpb25XZWJD
b3JlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NUM1M0RDRUEyNDQ2OEZCNDAwQTkzMTI0IC8qIEFwcGxlUGF5U2V0dXBXZWJDb3JlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzUzRENDQjI0NDY0NDk4
MDBBOTMxMjQgLyogQXBwbGVQYXlTZXR1cFdlYkNvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTQ4NSw2ICs5NDg3LDExIEBACiAJCTVDNDMw
NEFGMTkxQUM5MDgwMDBFMkJDMCAvKiBFWFRTaGFkZXJUZXh0dXJlTE9ELmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBFWFRTaGFkZXJUZXh0dXJlTE9ELmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNUM0MzA0QjMxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4dHVy
ZUxPRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVFNoYWRl
clRleHR1cmVMT0QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzQzMDRCNDE5
MUFFRjQ2MDAwRTJCQzAgLyogSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1QzRBMEZEMzI1QzM0MkM3MDBEOUVFOTcgLyogUmFuZ2VSZXNwb25z
ZUdlbmVyYXRvci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJh
bmdlUmVzcG9uc2VHZW5lcmF0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVD
NEEwRkQ1MjVDMzQyQzgwMEQ5RUU5NyAvKiBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmdlUmVzcG9uc2VHZW5lcmF0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QTBGRDYyNUMzNDJEQjAwRDlFRTk3IC8qIENl
cnRpZmljYXRlSW5mb0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gQ2VydGlmaWNhdGVJbmZvQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTVDNEEwRkQ4MjVDMzQ0NkMwMEQ5RUU5NyAvKiBQYXJzZWRSZXF1ZXN0UmFuZ2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VkUmVxdWVzdFJhbmdlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEEwRkQ5MjVDMzQ0NkQwMEQ5RUU5NyAvKiBQYXJz
ZWRSZXF1ZXN0UmFuZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGFyc2VkUmVxdWVzdFJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM1
MzgxQUYxRDg3OTNFMDAwRTJFQkU2IC8qIFVSTFNlYXJjaFBhcmFtcy5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gVVJMU2VhcmNoUGFyYW1zLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNUM1MzgxQjAxRDg3RDQ1NzAwRTJFQkU2IC8qIFVSTFNlYXJjaFBhcmFtcy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxTZWFyY2hQYXJhbXMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzUzODFCMTFEODdENDU3MDBFMkVCRTYgLyog
VVJMU2VhcmNoUGFyYW1zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVSTFNl
YXJjaFBhcmFtcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE4MjQsNiArMjE4
MzEsOCBAQAogCQkJCUNEQ0Q0MUU2MUMzRERCMDkwMDk2NUQ5OSAvKiBQYXJzZWRDb250ZW50UmFu
Z2UuaCAqLywKIAkJCQk0NDc5NTgwMjE2NDNCNDdCMDAxRTBBN0YgLyogUGFyc2VkQ29udGVudFR5
cGUuY3BwICovLAogCQkJCTQ0Nzk1ODAzMTY0M0I0N0IwMDFFMEE3RiAvKiBQYXJzZWRDb250ZW50
VHlwZS5oICovLAorCQkJCTVDNEEwRkQ5MjVDMzQ0NkQwMEQ5RUU5NyAvKiBQYXJzZWRSZXF1ZXN0
UmFuZ2UuY3BwICovLAorCQkJCTVDNEEwRkQ4MjVDMzQ0NkMwMEQ5RUU5NyAvKiBQYXJzZWRSZXF1
ZXN0UmFuZ2UuaCAqLywKIAkJCQkzN0JBQUU1NzE5ODBEMUREMDA1REZFNzEgLyogUHJvdGVjdGlv
blNwYWNlLmggKi8sCiAJCQkJNTE0Qzc2NUYwQ0U5MjNBMTAwN0VGM0NEIC8qIFByb3RlY3Rpb25T
cGFjZUJhc2UuY3BwICovLAogCQkJCTUxNEM3NjYwMENFOTIzQTEwMDdFRjNDRCAvKiBQcm90ZWN0
aW9uU3BhY2VCYXNlLmggKi8sCkBAIC0yMjkwNiw2ICsyMjkxNSw3IEBACiAJCTdFN0RFMUZFMTk1
Q0VGMkQwMDM1MzYzQiAvKiBjb2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJNUM0QTBGRDYyNUMzNDJEQjAwRDlFRTk3IC8qIENlcnRpZmljYXRlSW5m
b0NvY29hLm1tICovLAogCQkJCTUxRDEyNDhDMUU3MzY0NTYwMDJCMjgyMCAvKiBDb29raWVDb2Nv
YS5tbSAqLywKIAkJCQk1MTIwQkJBRDFGMUNFNzcwMDBFRkVCRjEgLyogQ29va2llU3RvcmFnZU9i
c2VydmVyLmggKi8sCiAJCQkJNTEyMEJCQUMxRjFDRTc3MDAwRUZFQkYxIC8qIENvb2tpZVN0b3Jh
Z2VPYnNlcnZlci5tbSAqLywKQEAgLTIyOTE2LDYgKzIyOTI2LDggQEAKIAkJCQk1MUQxMjQ4QTFF
NzM2MjVDMDAyQjI4MjAgLyogTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0gKi8sCiAJCQkJ
MzcyQURBMzcxOTdGNDdCOTAwRkM1MDFFIC8qIFByb3RlY3Rpb25TcGFjZUNvY29hLmggKi8sCiAJ
CQkJMzcyQURBMzkxOTdGNjg3NjAwRkM1MDFFIC8qIFByb3RlY3Rpb25TcGFjZUNvY29hLm1tICov
LAorCQkJCTVDNEEwRkQ1MjVDMzQyQzgwMEQ5RUU5NyAvKiBSYW5nZVJlc3BvbnNlR2VuZXJhdG9y
LmggKi8sCisJCQkJNUM0QTBGRDMyNUMzNDJDNzAwRDlFRTk3IC8qIFJhbmdlUmVzcG9uc2VHZW5l
cmF0b3IubW0gKi8sCiAJCQkJN0U3REUxRkMxOTVDRUYyNjAwMzUzNjNCIC8qIFJlc291cmNlUmVx
dWVzdENvY29hLm1tICovLAogCQkJCUExRjc4RDBCMUMyNTQyMkMwMDI0NTQ0NiAvKiBSZXNvdXJj
ZVJlc3BvbnNlQ29jb2EubW0gKi8sCiAJCQkJQ0QyMjVDMEExQzQ2RkJGNDAwMTQwNzYxIC8qIFdl
YkNvcmVOU1VSTFNlc3Npb24uaCAqLywKQEAgLTMzOTc1LDYgKzMzOTg3LDcgQEAKIAkJCQlBMTg4
OTBBRjFBQTEzRjI1MDAyNkMzMDEgLyogUGFyZW50YWxDb250cm9sc0NvbnRlbnRGaWx0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUNEQ0Q0MUU4MUMzRERCMEEwMDk2NUQ5OSAvKiBQYXJzZWRDb250
ZW50UmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0Nzk1ODA0MTY0M0I0OUEwMDFFMEE3RiAv
KiBQYXJzZWRDb250ZW50VHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUM0QTBGREEyNUMzNDQ5
QTAwRDlFRTk3IC8qIFBhcnNlZFJlcXVlc3RSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM2
RDVBMjMxOTNFOEUwQzAwQ0U0Q0FCIC8qIFBhcnNpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUY1NUIzRENBMTI1MUYxMkQwMDNFRjI2OSAvKiBQYXNzd29yZElucHV0VHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNEIyNzA4QzcwQUYxOUVFNDAwNjUxMjdGIC8qIFBhc3RlYm9hcmQu
aCBpbiBIZWFkZXJzICovLApAQCAtMzQxNzgsNiArMzQxOTEsNyBAQAogCQkJCTkzRjE5OTE4MDgy
NDVFNTkwMDFFOUFCQyAvKiBSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNEOUQ1M0MwREEy
N0UxODAwNzcyMTZDIC8qIFJhbmdlQm91bmRhcnlQb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RjU1QjNEQ0UxMjUxRjEyRDAwM0VGMjY5IC8qIFJhbmdlSW5wdXRUeXBlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1QzRBMEZENzI1QzM0MzUwMDBEOUVFOTcgLyogUmFuZ2VSZXNwb25zZUdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU4NEU5RTExNzY2OEJGMTAwODE1QjY4IC8qIFJhc3Rl
clNoYXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODREODI3QzExRDMzM0VEMDA5NzI5OTAgLyog
UmF3RGF0YURvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTZFNkZFODFCQkQx
MkRGMDAwQTYwNDMgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaAppbmRleCA1N2JmZThhY2Q2Mjg1
ZmViOWIyZWI4YjIyMmEyYjE0MDlhMjEwMTYwLi4zZWQ0ZTA1YzQzOTRkZmY2M2FlNWZjNmJhMWVm
MWE4MDQyNTQzY2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaApAQCAtNDEsNyArNDEs
NyBAQCBjbGFzcyBSZXNvdXJjZUVycm9yOwogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3Mg
UmVzb3VyY2VSZXNwb25zZTsKIAotY2xhc3MgUGxhdGZvcm1NZWRpYVJlc291cmNlQ2xpZW50IHsK
K2NsYXNzIFBsYXRmb3JtTWVkaWFSZXNvdXJjZUNsaWVudCA6IHB1YmxpYyBSZWZDb3VudGVkPFBs
YXRmb3JtTWVkaWFSZXNvdXJjZUNsaWVudD4gewogcHVibGljOgogICAgIHZpcnR1YWwgflBsYXRm
b3JtTWVkaWFSZXNvdXJjZUNsaWVudCgpID0gZGVmYXVsdDsKIApAQCAtODEsMTEgKzgxLDExIEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBk
aWRQYXNzQWNjZXNzQ29udHJvbENoZWNrKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAg
IHZvaWQgc2V0Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybU1lZGlhUmVzb3VyY2VDbGll
bnQ+JiYgY2xpZW50KSB7IG1fY2xpZW50ID0gV1RGTW92ZShjbGllbnQpOyB9CisgICAgdm9pZCBz
ZXRDbGllbnQoUmVmUHRyPFBsYXRmb3JtTWVkaWFSZXNvdXJjZUNsaWVudD4mJiBjbGllbnQpIHsg
bV9jbGllbnQgPSBXVEZNb3ZlKGNsaWVudCk7IH0KICAgICBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VD
bGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50LmdldCgpOyB9CiAKIHByb3RlY3RlZDoK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1NZWRpYVJlc291cmNlQ2xpZW50PiBtX2NsaWVu
dDsKKyAgICBSZWZQdHI8UGxhdGZvcm1NZWRpYVJlc291cmNlQ2xpZW50PiBtX2NsaWVudDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1dlYkNvcmVBVkZSZXNvdXJjZUxvYWRl
ci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L1dlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5tbQppbmRleCBjODU1ZGUwODhiNmQ5NDRkYTZmYzQ1
NTIyZmZiYjJmNTAyOGM2MjFjLi40ZDVmMzU4MGViYWQzMGJmMDBjMzY5ZGEwMTVmMDM4ZTYwZmU1
YmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9XZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvV2ViQ29yZUFWRlJlc291cmNl
TG9hZGVyLm1tCkBAIC0xNzAsNyArMTcwLDcgQEAgV2Vha1B0cjxQbGF0Zm9ybVJlc291cmNlTWVk
aWFMb2FkZXI+IFBsYXRmb3JtUmVzb3VyY2VNZWRpYUxvYWRlcjo6Y3JlYXRlKFdlYkNvcmUKICAg
ICBpZiAoIXJlc291cmNlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBhdXRvKiByZXNv
dXJjZVBvaW50ZXIgPSByZXNvdXJjZS5nZXQoKTsKLSAgICBhdXRvIGNsaWVudCA9IHN0ZDo6dW5p
cXVlX3B0cjxQbGF0Zm9ybVJlc291cmNlTWVkaWFMb2FkZXI+KG5ldyBQbGF0Zm9ybVJlc291cmNl
TWVkaWFMb2FkZXIgeyBwYXJlbnQsIHJlc291cmNlLnJlbGVhc2VOb25OdWxsKCkgfSk7CisgICAg
YXV0byBjbGllbnQgPSBhZG9wdFJlZigqbmV3IFBsYXRmb3JtUmVzb3VyY2VNZWRpYUxvYWRlciB7
IHBhcmVudCwgcmVzb3VyY2UucmVsZWFzZU5vbk51bGwoKSB9KTsKICAgICBhdXRvIHJlc3VsdCA9
IG1ha2VXZWFrUHRyKGNsaWVudC5nZXQoKSk7CiAKICAgICByZXNvdXJjZVBvaW50ZXItPnNldENs
aWVudChXVEZNb3ZlKGNsaWVudCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9QYXJzZWRSZXF1ZXN0UmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9QYXJzZWRSZXF1ZXN0UmFuZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzYTBlZWQ3NzUz
ZjhkNzRjNGFmOGQyYTI4NDZjYWE1NTA5ZmU2ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZFJlcXVlc3RSYW5nZS5jcHAKQEAgLTAsMCAr
MSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFyc2VkUmVxdWVzdFJhbmdlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworT3B0aW9uYWw8UGFyc2VkUmVxdWVzdFJhbmdlPiBQYXJzZWRS
ZXF1ZXN0UmFuZ2U6OnBhcnNlKGNvbnN0IFN0cmluZyYgaW5wdXQpCit7CisgICAgLy8gaHR0cHM6
Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzMjc2VjdGlvbi0yLjEgYnV0IGFzc3VtaW5nIHRo
ZXJlIHdpbGwgYWx3YXlzIGJlIGEgYmVnaW4gYW5kIGFuIGVuZCBvciBwYXJzaW5nIHdpbGwgZmFp
bAorICAgIGlmICghaW5wdXQuc3RhcnRzV2l0aCgiYnl0ZXM9Il9zKSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgIHNpemVfdCBiZWdpbiB7IDAgfTsKKyAgICBzaXplX3QgZW5k
IHsgMCB9OworICAgIHNpemVfdCByYW5nZUJlZ2luUG9zaXRpb24gPSA2OworICAgIHNpemVfdCBk
YXNoUG9zaXRpb24gPSBpbnB1dC5maW5kKCctJywgcmFuZ2VCZWdpblBvc2l0aW9uKTsKKyAgICBp
ZiAoZGFzaFBvc2l0aW9uID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworCisgICAgLy8gRklYTUU6IEFkZCBTdHJpbmdWaWV3LnRvVUludDY0U3RyaWN0IHRvIGF2b2lk
IHRoZXNlIHVubmVjZXNzYXJ5IFN0cmluZyBjb3BpZXMuCisgICAgLy8gU2FtZSBpbiBQYXJzZWRD
b250ZW50UmFuZ2UuCisgICAgYm9vbCBvayA9IHRydWU7CisgICAgU3RyaW5nIGJlZ2luU3RyaW5n
ID0gaW5wdXQuc3Vic3RyaW5nKHJhbmdlQmVnaW5Qb3NpdGlvbiwgZGFzaFBvc2l0aW9uIC0gcmFu
Z2VCZWdpblBvc2l0aW9uKTsKKyAgICBiZWdpbiA9IGJlZ2luU3RyaW5nLnRvVUludDY0U3RyaWN0
KCZvayk7CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IFN0cmluZyBlbmRTdHJpbmcgPSBpbnB1dC5zdWJzdHJpbmcoZGFzaFBvc2l0aW9uICsgMSk7Cisg
ICAgZW5kID0gZW5kU3RyaW5nLnRvVUludDY0U3RyaWN0KCZvayk7CisgICAgaWYgKCFvaykKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmIChiZWdpbiA+IGVuZCkKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiB7eyBiZWdpbiwgZW5kIH19Owor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BhcnNl
ZFJlcXVlc3RSYW5nZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QYXJzZWRS
ZXF1ZXN0UmFuZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YWJkYjYzZWFkNWVlZjEzZDkyODU1MDQ5ZjZmMTNm
ZThlMTY5YjVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9QYXJzZWRSZXF1ZXN0UmFuZ2UuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFBhcnNlZFJlcXVlc3RSYW5nZSB7CitwdWJsaWM6CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIE9wdGlvbmFsPFBhcnNlZFJlcXVlc3RSYW5nZT4gcGFyc2UoY29u
c3QgU3RyaW5nJik7CisKKyAgICBzaXplX3QgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2JlZ2lu
OyB9CisgICAgc2l6ZV90IGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9CisKK3ByaXZhdGU6
CisgICAgUGFyc2VkUmVxdWVzdFJhbmdlKHNpemVfdCBiZWdpbiwgc2l6ZV90IGVuZCkKKyAgICAg
ICAgOiBtX2JlZ2luKGJlZ2luKQorICAgICAgICAsIG1fZW5kKGVuZCkgeyB9CisKKyAgICBzaXpl
X3QgbV9iZWdpbiB7IDAgfTsKKyAgICBzaXplX3QgbV9lbmQgeyAwIH07Cit9OworCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1JhbmdlUmVzcG9u
c2VHZW5lcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvUmFu
Z2VSZXNwb25zZUdlbmVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmMjhiYTc1MWY3ZmQyNTJiZWQzZjI0
MGIxMjc2YWExNTgxMWU3YzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NvY29hL1JhbmdlUmVzcG9uc2VHZW5lcmF0b3IuaApAQCAtMCwwICsxLDU4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvVVJMSGFzaC5o
PgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK09CSkNfQ0xBU1MgTlNVUkxSZXF1ZXN0Owor
T0JKQ19DTEFTUyBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2s7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgUGFyc2VkUmVxdWVzdFJhbmdlOworY2xhc3MgUGxhdGZvcm1NZWRpYVJl
c291cmNlOworY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKKworY2xhc3MgUmFuZ2VSZXNwb25zZUdl
bmVyYXRvciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSYW5nZVJlc3BvbnNlR2VuZXJhdG9yPiB7
CitwdWJsaWM6CisgICAgUmFuZ2VSZXNwb25zZUdlbmVyYXRvcigpOworICAgIH5SYW5nZVJlc3Bv
bnNlR2VuZXJhdG9yKCk7CisKKyAgICBib29sIHdpbGxTeW50aGVzaXplUmFuZ2VSZXNwb25zZXMo
V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICosIFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICBib29sIHdpbGxIYW5kbGVSZXF1ZXN0KFdlYkNv
cmVOU1VSTFNlc3Npb25EYXRhVGFzayAqLCBOU1VSTFJlcXVlc3QgKik7CisKK3ByaXZhdGU6Cisg
ICAgc3RydWN0IERhdGE7CisgICAgdm9pZCBnaXZlUmVzcG9uc2VUb1Rhc2tzV2l0aEZpbmlzaGVk
UmFuZ2VzKERhdGEmKTsKKyAgICB2b2lkIGdpdmVSZXNwb25zZVRvVGFza0lmQnl0ZXNJblJhbmdl
UmVjZWl2ZWQoV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICosIGNvbnN0IFBhcnNlZFJlcXVl
c3RSYW5nZSYsIE9wdGlvbmFsPHNpemVfdD4gZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCBjb25zdCBE
YXRhJik7CisgICAgc3RhdGljIE9wdGlvbmFsPHNpemVfdD4gZXhwZWN0ZWRDb250ZW50TGVuZ3Ro
RnJvbURhdGEoY29uc3QgRGF0YSYpOworICAgIHZvaWQgcmVtb3ZlVGFzayhXZWJDb3JlTlNVUkxT
ZXNzaW9uRGF0YVRhc2sgKik7CisKKyAgICBIYXNoTWFwPFVSTCwgc3RkOjp1bmlxdWVfcHRyPERh
dGE+PiBtX21hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvUmFuZ2VSZXNwb25zZUdlbmVyYXRv
ci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvUmFuZ2VSZXNwb25z
ZUdlbmVyYXRvci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MWM5YmQyOWQ5ZDFiNGIwMzkwYzEyM2QxNjJmMTEx
OWVmYmU5OTg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jb2NvYS9SYW5nZVJlc3BvbnNlR2VuZXJhdG9yLm1tCkBAIC0wLDAgKzEsMjg2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSYW5nZVJlc3BvbnNlR2Vu
ZXJhdG9yLmgiCisKKyNpbXBvcnQgIk5ldHdvcmtMb2FkTWV0cmljcy5oIgorI2ltcG9ydCAiUGFy
c2VkUmVxdWVzdFJhbmdlLmgiCisjaW1wb3J0ICJQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIu
aCIKKyNpbXBvcnQgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5o
IgorI2ltcG9ydCAiV2ViQ29yZU5TVVJMU2Vzc2lvbi5oIgorI2ltcG9ydCA8cGFsL3NwaS9jZi9D
Rk5ldHdvcmtTUEkuaD4KKyNpbXBvcnQgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW1wb3J0IDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IFJh
bmdlUmVzcG9uc2VHZW5lcmF0b3I6OkRhdGEgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIERhdGEoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFBs
YXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzb3VyY2UpCisgICAgICAgIDogYnVmZmVyKFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKCkpCisgICAgICAgICwgb3JpZ2luYWxSZXNwb25zZShyZXNwb25zZSkKKyAg
ICAgICAgLCByZXNvdXJjZSgmcmVzb3VyY2UpIHsgfQorCisgICAgc3RydWN0IFRhc2tEYXRhIDog
cHVibGljIENhbk1ha2VXZWFrUHRyPFRhc2tEYXRhPiB7CisgICAgICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgVGFza0RhdGEoUGFyc2VkUmVxdWVzdFJh
bmdlJiYgcmFuZ2UpCisgICAgICAgICAgICA6IHJhbmdlKFdURk1vdmUocmFuZ2UpKQorICAgICAg
ICAgICAgLCBuZXh0Qnl0ZVRvR2l2ZUJ1ZmZlckluZGV4KHJhbmdlLmJlZ2luKCkpIHsgfQorCisg
ICAgICAgIFBhcnNlZFJlcXVlc3RSYW5nZSByYW5nZTsKKyAgICAgICAgc2l6ZV90IG5leHRCeXRl
VG9HaXZlQnVmZmVySW5kZXggeyAwIH07CisgICAgICAgIGJvb2wgc3ludGhlc2l6ZWRSZXNwb25z
ZSB7IGZhbHNlIH07CisgICAgfTsKKyAgICAKKyAgICBIYXNoTWFwPFJldGFpblB0cjxXZWJDb3Jl
TlNVUkxTZXNzaW9uRGF0YVRhc2s+LCBzdGQ6OnVuaXF1ZV9wdHI8VGFza0RhdGE+PiB0YXNrRGF0
YTsKKyAgICBSZWY8U2hhcmVkQnVmZmVyPiBidWZmZXI7CisgICAgUmVzb3VyY2VSZXNwb25zZSBv
cmlnaW5hbFJlc3BvbnNlOworICAgIGVudW0gY2xhc3MgU3VjY2Vzc2Z1bGx5RmluaXNoZWRMb2Fk
aW5nIDogYm9vbCB7IE5vLCBZZXMgfSBzdWNjZXNzZnVsbHlGaW5pc2hlZExvYWRpbmcgeyBTdWNj
ZXNzZnVsbHlGaW5pc2hlZExvYWRpbmc6Ok5vIH07CisgICAgUmVmUHRyPFBsYXRmb3JtTWVkaWFS
ZXNvdXJjZT4gcmVzb3VyY2U7Cit9OworCitSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpSYW5nZVJl
c3BvbnNlR2VuZXJhdG9yKCkgPSBkZWZhdWx0OworUmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6flJh
bmdlUmVzcG9uc2VHZW5lcmF0b3IoKSA9IGRlZmF1bHQ7CisKK3N0YXRpYyBSZXNvdXJjZVJlc3Bv
bnNlIHN5bnRoZXNpemVkUmVzcG9uc2VGb3JSYW5nZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBv
cmlnaW5hbFJlc3BvbnNlLCBjb25zdCBQYXJzZWRSZXF1ZXN0UmFuZ2UmIHBhcnNlZFJlcXVlc3RS
YW5nZSwgT3B0aW9uYWw8c2l6ZV90PiB0b3RhbENvbnRlbnRMZW5ndGgpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBhdXRvIGJlZ2luID0gcGFyc2VkUmVxdWVzdFJhbmdlLmJl
Z2luKCk7CisgICAgYXV0byBlbmQgPSBwYXJzZWRSZXF1ZXN0UmFuZ2UuZW5kKCk7CisKKyAgICBh
dXRvIG5ld0NvbnRlbnRSYW5nZSA9IG1ha2VTdHJpbmcoImJ5dGVzICIsIGJlZ2luLCAiLSIsIGVu
ZCwgIi8iLCAodG90YWxDb250ZW50TGVuZ3RoID8gbWFrZVN0cmluZygqdG90YWxDb250ZW50TGVu
Z3RoKSA6ICIqIikpOworICAgIGF1dG8gbmV3Q29udGVudExlbmd0aCA9IG1ha2VTdHJpbmcoZW5k
IC0gYmVnaW4gKyAxKTsKKworICAgIFJlc291cmNlUmVzcG9uc2UgbmV3UmVzcG9uc2UgPSBvcmln
aW5hbFJlc3BvbnNlOworICAgIG5ld1Jlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVh
ZGVyTmFtZTo6Q29udGVudFJhbmdlLCBuZXdDb250ZW50UmFuZ2UpOworICAgIG5ld1Jlc3BvbnNl
LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudExlbmd0aCwgbmV3Q29u
dGVudExlbmd0aCk7CisgICAgY29uc3RleHByIGF1dG8gcGFydGlhbENvbnRlbnQgPSAyMDY7Cisg
ICAgbmV3UmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUocGFydGlhbENvbnRlbnQpOworCisgICAg
cmV0dXJuIG5ld1Jlc3BvbnNlOworfQorCit2b2lkIFJhbmdlUmVzcG9uc2VHZW5lcmF0b3I6OnJl
bW92ZVRhc2soV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICp0YXNrKQoreworICAgIGNhbGxP
bk1haW5UaHJlYWQoW3Rhc2sgPSByZXRhaW5QdHIodGFzayksIHdlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpXSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGF1dG8qIGRhdGEgPSB3ZWFrVGhpcy0+bV9tYXAuZ2V0KHRhc2suZ2V0KCkub3Jp
Z2luYWxSZXF1ZXN0LlVSTCk7CisgICAgICAgIGlmICghZGF0YSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgZGF0YS0+dGFza0RhdGEucmVtb3ZlKHRhc2spOworICAgIH0pOworfQorCit2
b2lkIFJhbmdlUmVzcG9uc2VHZW5lcmF0b3I6OmdpdmVSZXNwb25zZVRvVGFza0lmQnl0ZXNJblJh
bmdlUmVjZWl2ZWQoV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICp0YXNrLCBjb25zdCBQYXJz
ZWRSZXF1ZXN0UmFuZ2UmIHJhbmdlLCBPcHRpb25hbDxzaXplX3Q+IGV4cGVjdGVkQ29udGVudExl
bmd0aCwgY29uc3QgRGF0YSYgZGF0YSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIGF1dG8gYnVmZmVyID0gZGF0YS5idWZmZXI7CisgICAgYXV0byBidWZmZXJTaXplID0gYnVm
ZmVyLT5zaXplKCk7CisKKyAgICBpZiAoYnVmZmVyU2l6ZSA8IHJhbmdlLmJlZ2luKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBhdXRvKiB0YXNrRGF0YSA9IGRhdGEudGFza0RhdGEuZ2V0
KHRhc2spOworICAgIGlmICghdGFza0RhdGEpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBh
dXRvIGdpdmVCeXRlc1RvVGFzayA9IFt0YXNrID0gcmV0YWluUHRyKHRhc2spLCBidWZmZXIsIHRh
c2tEYXRhID0gbWFrZVdlYWtQdHIoKnRhc2tEYXRhKSwgZ2VuZXJhdG9yID0gbWFrZVdlYWtQdHIo
KnRoaXMpXSB7CisgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIGlmICgh
dGFza0RhdGEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8mIHJhbmdlID0gdGFz
a0RhdGEtPnJhbmdlOworICAgICAgICBhdXRvJiBieXRlSW5kZXggPSB0YXNrRGF0YS0+bmV4dEJ5
dGVUb0dpdmVCdWZmZXJJbmRleDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAg
IGlmIChieXRlSW5kZXggPj0gYnVmZmVyLT5zaXplKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBhdXRvIGJ1ZmZlclZpZXcgPSBidWZmZXItPmdldFNvbWVEYXRhKGJ5dGVJ
bmRleCk7CisgICAgICAgICAgICBpZiAoIWJ1ZmZlclZpZXcuc2l6ZSgpIHx8IGJ5dGVJbmRleCA+
IHJhbmdlLmVuZCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBzaXpl
X3QgYnl0ZXNGcm9tVGhpc1ZpZXdUb0RlbGl2ZXIgPSBzdGQ6Om1pbihidWZmZXJWaWV3LnNpemUo
KSwgcmFuZ2UuZW5kKCkgLSBieXRlSW5kZXggKyAxKTsKKyAgICAgICAgICAgIGJ5dGVJbmRleCAr
PSBieXRlc0Zyb21UaGlzVmlld1RvRGVsaXZlcjsKKyAgICAgICAgICAgIFt0YXNrIHJlc291cmNl
Om51bGxwdHIgcmVjZWl2ZWREYXRhOmJ1ZmZlclZpZXcuZGF0YSgpIGxlbmd0aDpieXRlc0Zyb21U
aGlzVmlld1RvRGVsaXZlcl07CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJ5dGVJbmRleCA+PSBy
YW5nZS5lbmQoKSkgeworICAgICAgICAgICAgW3Rhc2sgcmVzb3VyY2VGaW5pc2hlZDpudWxscHRy
IG1ldHJpY3M6TmV0d29ya0xvYWRNZXRyaWNzIHsgfV07CisgICAgICAgICAgICBpZiAoZ2VuZXJh
dG9yKQorICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+cmVtb3ZlVGFzayh0YXNrLmdldCgpKTsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICBpZiAoIXN0ZDo6ZXhjaGFuZ2UodGFza0RhdGEtPnN5
bnRoZXNpemVkUmVzcG9uc2UsIHRydWUpKSB7CisgICAgICAgIGF1dG8gcmVzcG9uc2UgPSBzeW50
aGVzaXplZFJlc3BvbnNlRm9yUmFuZ2UoZGF0YS5vcmlnaW5hbFJlc3BvbnNlLCByYW5nZSwgZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoKTsKKyAgICAgICAgW3Rhc2sgcmVzb3VyY2U6bnVsbHB0ciByZWNl
aXZlZFJlc3BvbnNlOnJlc3BvbnNlIGNvbXBsZXRpb25IYW5kbGVyOltnaXZlQnl0ZXNUb1Rhc2sg
PSBXVEZNb3ZlKGdpdmVCeXRlc1RvVGFzayldIChXZWJDb3JlOjpTaG91bGRDb250aW51ZVBvbGlj
eUNoZWNrIHNob3VsZENvbnRpbnVlKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkQ29udGludWUg
PT0gU2hvdWxkQ29udGludWVQb2xpY3lDaGVjazo6WWVzKQorICAgICAgICAgICAgICAgIGdpdmVC
eXRlc1RvVGFzaygpOworICAgICAgICB9XTsKKyAgICB9IGVsc2UKKyAgICAgICAgZ2l2ZUJ5dGVz
VG9UYXNrKCk7Cit9CisKK09wdGlvbmFsPHNpemVfdD4gUmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6
ZXhwZWN0ZWRDb250ZW50TGVuZ3RoRnJvbURhdGEoY29uc3QgRGF0YSYgZGF0YSkKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmIChkYXRhLnN1Y2Nlc3NmdWxseUZpbmlzaGVk
TG9hZGluZyA9PSBEYXRhOjpTdWNjZXNzZnVsbHlGaW5pc2hlZExvYWRpbmc6OlllcykKKyAgICAg
ICAgcmV0dXJuIGRhdGEuYnVmZmVyLT5zaXplKCk7CisKKyAgICAvLyBGSVhNRTogUmVzb3VyY2VS
ZXNwb25zZUJhc2U6OmV4cGVjdGVkQ29udGVudExlbmd0aCgpIHNob3VsZCByZXR1cm4gT3B0aW9u
YWw8c2l6ZV90PiBpbnN0ZWFkIG9mIHVzIGRvaW5nIHRoaXMgY2hlY2sgaGVyZS4KKyAgICBhdXRv
IGV4cGVjdGVkQ29udGVudExlbmd0aCA9IGRhdGEub3JpZ2luYWxSZXNwb25zZS5leHBlY3RlZENv
bnRlbnRMZW5ndGgoKTsKKyAgICBpZiAoZXhwZWN0ZWRDb250ZW50TGVuZ3RoID09IE5TVVJMUmVz
cG9uc2VVbmtub3duTGVuZ3RoKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJl
dHVybiBleHBlY3RlZENvbnRlbnRMZW5ndGg7Cit9CisKK3ZvaWQgUmFuZ2VSZXNwb25zZUdlbmVy
YXRvcjo6Z2l2ZVJlc3BvbnNlVG9UYXNrc1dpdGhGaW5pc2hlZFJhbmdlcyhEYXRhJiBkYXRhKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgYXV0byBleHBlY3RlZENvbnRlbnRM
ZW5ndGggPSBleHBlY3RlZENvbnRlbnRMZW5ndGhGcm9tRGF0YShkYXRhKTsKKworICAgIGZvciAo
YXV0byYgcGFpciA6IGRhdGEudGFza0RhdGEpCisgICAgICAgIGdpdmVSZXNwb25zZVRvVGFza0lm
Qnl0ZXNJblJhbmdlUmVjZWl2ZWQocGFpci5rZXkuZ2V0KCksIHBhaXIudmFsdWUtPnJhbmdlLCBl
eHBlY3RlZENvbnRlbnRMZW5ndGgsIGRhdGEpOworfQorCitib29sIFJhbmdlUmVzcG9uc2VHZW5l
cmF0b3I6OndpbGxIYW5kbGVSZXF1ZXN0KFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAqdGFz
aywgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgYXV0byogZGF0YSA9IG1fbWFwLmdldChyZXF1ZXN0LlVSTCk7CisgICAgaWYgKCFkYXRh
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHJhbmdlID0gUGFyc2VkUmVxdWVz
dFJhbmdlOjpwYXJzZShbcmVxdWVzdCB2YWx1ZUZvckhUVFBIZWFkZXJGaWVsZDpAIlJhbmdlIl0p
OworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoID0gZXhwZWN0ZWRDb250ZW50TGVuZ3RoRnJvbURhdGEoKmRhdGEp
OworICAgIGRhdGEtPnRhc2tEYXRhLmFkZCh0YXNrLCBtYWtlVW5pcXVlPERhdGE6OlRhc2tEYXRh
PihXVEZNb3ZlKCpyYW5nZSkpKTsKKyAgICBnaXZlUmVzcG9uc2VUb1Rhc2tJZkJ5dGVzSW5SYW5n
ZVJlY2VpdmVkKHRhc2ssICpyYW5nZSwgZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCAqZGF0YSk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjp3aWxs
U3ludGhlc2l6ZVJhbmdlUmVzcG9uc2VzKFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAqdGFz
aywgUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBOU1VSTFJl
cXVlc3QgKm9yaWdpbmFsUmVxdWVzdCA9IHRhc2sub3JpZ2luYWxSZXF1ZXN0OworICAgIGlmICgh
b3JpZ2luYWxSZXF1ZXN0LlVSTCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChyZXNw
b25zZS5odHRwU3RhdHVzQ29kZSgpICE9IDIwMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmICghcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50UmFu
Z2UpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBwYXJzZWRS
ZXF1ZXN0UmFuZ2UgPSBQYXJzZWRSZXF1ZXN0UmFuZ2U6OnBhcnNlKFtvcmlnaW5hbFJlcXVlc3Qg
dmFsdWVGb3JIVFRQSGVhZGVyRmllbGQ6QCJSYW5nZSJdKTsKKyAgICBpZiAoIXBhcnNlZFJlcXVl
c3RSYW5nZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY2xhc3MgQ2xpZW50IDogcHVi
bGljIFBsYXRmb3JtTWVkaWFSZXNvdXJjZUNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICBD
bGllbnQoUmFuZ2VSZXNwb25zZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBVUkwmJiB1cmwpCisgICAg
ICAgICAgICA6IG1fZ2VuZXJhdG9yKG1ha2VXZWFrUHRyKGdlbmVyYXRvcikpCisgICAgICAgICAg
ICAsIG1fdXJsKFdURk1vdmUodXJsKSkgeyB9CisgICAgcHJpdmF0ZToKKworICAgICAgICAvLyBU
aGVzZSBtZXRob2RzIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIGJlZm9yZSBjaGFuZ2luZyB0aGUg
Y2xpZW50IHRvIHRoaXMuCisgICAgICAgIHZvaWQgcmVzcG9uc2VSZWNlaXZlZChQbGF0Zm9ybU1l
ZGlhUmVzb3VyY2UmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChTaG91bGRDb250aW51ZVBvbGljeUNoZWNrKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgZmlu
YWwKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihTaG91bGRDb250aW51ZVBvbGljeUNoZWNrOjpObyk7Cisg
ICAgICAgIH0KKyAgICAgICAgdm9pZCByZWRpcmVjdFJlY2VpdmVkKFBsYXRmb3JtTWVkaWFSZXNv
dXJjZSYsIFJlc291cmNlUmVxdWVzdCYmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChSZXNvdXJjZVJlcXVlc3QmJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
IGZpbmFsCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKKyAgICAgICAgfQorICAgICAgICB2b2lk
IGRhdGFTZW50KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5z
aWduZWQgbG9uZyBsb25nKSBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGFjY2Vzc0NvbnRyb2xDaGVja0Zh
aWxlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBjb25zdCBSZXNvdXJjZUVycm9yJikgZmluYWwK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHNob3VsZENhY2hlUmVzcG9uc2UoUGxhdGZvcm1NZWRpYVJlc291cmNl
JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIGZpbmFsCisgICAgICAgIHsKKyAgICAgICAgICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGRhdGFSZWNlaXZlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2Um
LCBjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCkgZmluYWwKKyAgICAgICAgeworICAgICAg
ICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgICAgIGlmICghbV9nZW5lcmF0
b3IpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYXV0byogZGF0YSA9IG1f
Z2VuZXJhdG9yLT5tX21hcC5nZXQobV91cmwpOworICAgICAgICAgICAgaWYgKCFkYXRhKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGRhdGEtPmJ1ZmZlci0+YXBwZW5kKGJ5
dGVzLCBsZW5ndGgpOworICAgICAgICAgICAgbV9nZW5lcmF0b3ItPmdpdmVSZXNwb25zZVRvVGFz
a3NXaXRoRmluaXNoZWRSYW5nZXMoKmRhdGEpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBs
b2FkRmFpbGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVy
cm9yKSBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgICAgICAgICAgaWYgKCFtX2dlbmVyYXRvcikKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICBhdXRvIGRhdGEgPSBtX2dlbmVyYXRvci0+bV9tYXAudGFrZShtX3VybCk7
CisgICAgICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgZm9yIChhdXRvJiB0YXNrIDogZGF0YS0+dGFza0RhdGEua2V5cygpKQorICAgICAgICAg
ICAgICAgIFt0YXNrIHJlc291cmNlOm51bGxwdHIgbG9hZEZhaWxlZFdpdGhFcnJvcjplcnJvcl07
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGxvYWRGaW5pc2hlZChQbGF0Zm9ybU1lZGlhUmVz
b3VyY2UmLCBjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmKSBmaW5hbAorICAgICAgICB7CisgICAg
ICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICAgICAgaWYgKCFtX2dlbmVy
YXRvcikKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBhdXRvKiBkYXRhID0g
bV9nZW5lcmF0b3ItPm1fbWFwLmdldChtX3VybCk7CisgICAgICAgICAgICBpZiAoIWRhdGEpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgZGF0YS0+c3VjY2Vzc2Z1bGx5Rmlu
aXNoZWRMb2FkaW5nID0gRGF0YTo6U3VjY2Vzc2Z1bGx5RmluaXNoZWRMb2FkaW5nOjpZZXM7Cisg
ICAgICAgICAgICBkYXRhLT5yZXNvdXJjZSA9IG51bGxwdHI7CisgICAgICAgICAgICBtX2dlbmVy
YXRvci0+Z2l2ZVJlc3BvbnNlVG9UYXNrc1dpdGhGaW5pc2hlZFJhbmdlcygqZGF0YSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIFdlYWtQdHI8UmFuZ2VSZXNwb25zZUdlbmVyYXRvcj4g
bV9nZW5lcmF0b3I7CisgICAgICAgIGNvbnN0IFVSTCBtX3VybDsKKyAgICB9OworCisgICAgcmVz
b3VyY2Uuc2V0Q2xpZW50KGFkb3B0UmVmKG5ldyBDbGllbnQoKnRoaXMsIG9yaWdpbmFsUmVxdWVz
dC5VUkwpKSk7CisKKyAgICBtX21hcC5lbnN1cmUob3JpZ2luYWxSZXF1ZXN0LlVSTCwgWyZdIHsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RGF0YT4ocmVzcG9uc2UsIHJlc291cmNlKTsKKyAg
ICB9KS5pdGVyYXRvci0+dmFsdWUtPnRhc2tEYXRhLmFkZCh0YXNrLCBtYWtlVW5pcXVlPERhdGE6
OlRhc2tEYXRhPihXVEZNb3ZlKCpwYXJzZWRSZXF1ZXN0UmFuZ2UpKSk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24uaApp
bmRleCBhODBlMjA4ODUzOTdjNzEwMmFlMzFlYjcwNDI3NDUzNjRiZTRkYjMyLi43ODc1ZjMwZWE2
Yzg5M2MxOTY4OTU3OTc1YzZjYWI2N2YyN2M2NGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24uaApA
QCAtMjMsOCArMjMsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKKyNpbXBvcnQgIlJhbmdl
UmVzcG9uc2VHZW5lcmF0b3IuaCIKICNpbXBvcnQgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW1wb3J0
IDxGb3VuZGF0aW9uL05TVVJMU2Vzc2lvbi5oPgorI2ltcG9ydCA8d3RmL0NvbXBsZXRpb25IYW5k
bGVyLmg+CiAjaW1wb3J0IDx3dGYvSGFzaFNldC5oPgogI2ltcG9ydCA8d3RmL0xvY2suaD4KICNp
bXBvcnQgPHd0Zi9PU09iamVjdFB0ci5oPgpAQCAtNDEsMTIgKzQzLDE3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIGNsYXNzIENhY2hlZFJlc291cmNlUmVxdWVzdDsKK2NsYXNzIE5ldHdvcmtM
b2FkTWV0cmljczsKIGNsYXNzIFBsYXRmb3JtTWVkaWFSZXNvdXJjZTsKIGNsYXNzIFBsYXRmb3Jt
TWVkaWFSZXNvdXJjZUxvYWRlcjsKK2NsYXNzIFJlc291cmNlRXJyb3I7CitjbGFzcyBSZXNvdXJj
ZVJlcXVlc3Q7CitjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogY2xhc3MgV2ViQ29yZU5TVVJMU2Vz
c2lvbkRhdGFUYXNrQ2xpZW50OworZW51bSBjbGFzcyBTaG91bGRDb250aW51ZVBvbGljeUNoZWNr
IDogYm9vbDsKIH0KIAotZW51bSBjbGFzcyBXZWJDb3JlTlNVUkxTZXNzaW9uQ09SU0FjY2Vzc0No
ZWNrUmVzdWx0cyB7CitlbnVtIGNsYXNzIFdlYkNvcmVOU1VSTFNlc3Npb25DT1JTQWNjZXNzQ2hl
Y2tSZXN1bHRzIDogdWludDhfdCB7CiAgICAgVW5rbm93biwKICAgICBQYXNzLAogICAgIEZhaWws
CkBAIC02Nyw2ICs3NCw3IEBAIFdFQkNPUkVfRVhQT1JUIEBpbnRlcmZhY2UgV2ViQ29yZU5TVVJM
U2Vzc2lvbiA6IE5TT2JqZWN0IHsKICAgICBOU1VJbnRlZ2VyIF9uZXh0VGFza0lkZW50aWZpZXI7
CiAgICAgT1NPYmplY3RQdHI8ZGlzcGF0Y2hfcXVldWVfdD4gX2ludGVybmFsUXVldWU7CiAgICAg
V2ViQ29yZU5TVVJMU2Vzc2lvbkNPUlNBY2Nlc3NDaGVja1Jlc3VsdHMgX2NvcnNSZXN1bHRzOwor
ICAgIFdlYkNvcmU6OlJhbmdlUmVzcG9uc2VHZW5lcmF0b3IgX3JhbmdlUmVzcG9uc2VHZW5lcmF0
b3I7CiB9CiAtIChpZClpbml0V2l0aFJlc291cmNlTG9hZGVyOihXZWJDb3JlOjpQbGF0Zm9ybU1l
ZGlhUmVzb3VyY2VMb2FkZXImKWxvYWRlciBkZWxlZ2F0ZTooaWQ8TlNVUkxTZXNzaW9uVGFza0Rl
bGVnYXRlPilkZWxlZ2F0ZSBkZWxlZ2F0ZVF1ZXVlOihOU09wZXJhdGlvblF1ZXVlKilxdWV1ZTsK
IEBwcm9wZXJ0eSAocmVhZG9ubHksIHJldGFpbikgTlNPcGVyYXRpb25RdWV1ZSAqZGVsZWdhdGVR
dWV1ZTsKQEAgLTE0Myw0ICsxNTEsMTUgQEAgV0VCQ09SRV9FWFBPUlQgQGludGVyZmFjZSBXZWJD
b3JlTlNVUkxTZXNzaW9uIDogTlNPYmplY3QgewogLSAodm9pZClyZXN1bWU7CiBAZW5kCiAKK0Bp
bnRlcmZhY2UgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrIChXZWJLaXRJbnRlcm5hbCkKKy0g
KHZvaWQpcmVzb3VyY2U6KG51bGxhYmxlIFdlYkNvcmU6OlBsYXRmb3JtTWVkaWFSZXNvdXJjZSop
cmVzb3VyY2Ugc2VudEJ5dGVzOih1bnNpZ25lZCBsb25nIGxvbmcpYnl0ZXNTZW50IHRvdGFsQnl0
ZXNUb0JlU2VudDoodW5zaWduZWQgbG9uZyBsb25nKXRvdGFsQnl0ZXNUb0JlU2VudDsKKy0gKHZv
aWQpcmVzb3VyY2U6KG51bGxhYmxlIFdlYkNvcmU6OlBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVz
b3VyY2UgcmVjZWl2ZWRSZXNwb25zZTooY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYp
cmVzcG9uc2UgY29tcGxldGlvbkhhbmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29y
ZTo6U2hvdWxkQ29udGludWVQb2xpY3lDaGVjayk+JiYpY29tcGxldGlvbkhhbmRsZXI7CistIChC
T09MKXJlc291cmNlOihudWxsYWJsZSBXZWJDb3JlOjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJl
c291cmNlIHNob3VsZENhY2hlUmVzcG9uc2U6KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmKXJlc3BvbnNlOworLSAodm9pZClyZXNvdXJjZToobnVsbGFibGUgV2ViQ29yZTo6UGxhdGZv
cm1NZWRpYVJlc291cmNlKilyZXNvdXJjZSByZWNlaXZlZERhdGE6KGNvbnN0IGNoYXIqKWRhdGEg
bGVuZ3RoOihpbnQpbGVuZ3RoOworLSAodm9pZClyZXNvdXJjZToobnVsbGFibGUgV2ViQ29yZTo6
UGxhdGZvcm1NZWRpYVJlc291cmNlKilyZXNvdXJjZSByZWNlaXZlZFJlZGlyZWN0Oihjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJilyZXNwb25zZSByZXF1ZXN0OihXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmJilyZXF1ZXN0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmKT4mJiljb21wbGV0aW9uSGFuZGxlcjsK
Ky0gKHZvaWQpcmVzb3VyY2U6KG51bGxhYmxlIFdlYkNvcmU6OlBsYXRmb3JtTWVkaWFSZXNvdXJj
ZSopcmVzb3VyY2UgYWNjZXNzQ29udHJvbENoZWNrRmFpbGVkV2l0aEVycm9yOihjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZUVycm9yJillcnJvcjsKKy0gKHZvaWQpcmVzb3VyY2U6KG51bGxhYmxlIFdl
YkNvcmU6OlBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3VyY2UgbG9hZEZhaWxlZFdpdGhFcnJv
cjooY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpZXJyb3I7CistICh2b2lkKXJlc291cmNl
RmluaXNoZWQ6KG51bGxhYmxlIFdlYkNvcmU6OlBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3Vy
Y2UgbWV0cmljczooY29uc3QgV2ViQ29yZTo6TmV0d29ya0xvYWRNZXRyaWNzJiltZXRyaWNzOwor
QGVuZAorCiBOU19BU1NVTUVfTk9OTlVMTF9FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5tbQppbmRl
eCA5MDIxMjg3YmRkZjQ3MzdkODQxYTU1ZTE3MGEzZWMxODlhY2VlNGQwLi41ZGIwY2JjNTBlNDc3
YTgyM2M2NTQ5MGE4ZTQxZDViYmU0YzkwMzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24ubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9uLm1tCkBA
IC0yNywxMCArMjcsMTIgQEAKICNpbXBvcnQgIldlYkNvcmVOU1VSTFNlc3Npb24uaCIKIAogI2lt
cG9ydCAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW1wb3J0ICJQYXJzZWRSZXF1ZXN0UmFu
Z2UuaCIKICNpbXBvcnQgIlBsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oIgogI2ltcG9ydCAi
U3VicmVzb3VyY2VMb2FkZXIuaCIKICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8
d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KICNp
bXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKQEAgLTIwMywyNCArMjA1LDE2IEBAIHN0YXRpYyBOU0RhdGUgKiBfX251bGxhYmxlIG5ldHdv
cmtMb2FkTWV0cmljc0RhdGUoU2Vjb25kcyBmZXRjaFN0YXJ0LCBTZWNvbmRzIGRlCiAtICh2b2lk
KWFkZERlbGVnYXRlT3BlcmF0aW9uOihGdW5jdGlvbjx2b2lkKCk+JiYpb3BlcmF0aW9uOwogLSAo
dm9pZCl0YXNrOihXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgKil0YXNrIGRpZFJlY2VpdmVD
T1JTQWNjZXNzQ2hlY2tSZXN1bHQ6KEJPT0wpcmVzdWx0OwogLSAodm9pZCl0YXNrOihXZWJDb3Jl
TlNVUkxTZXNzaW9uRGF0YVRhc2sgKil0YXNrIGRpZFJlY2VpdmVSZXNwb25zZUZyb21PcmlnaW46
KFJlZjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4mJilvcmlnaW47CistIChXZWJDb3JlOjpSYW5n
ZVJlc3BvbnNlR2VuZXJhdG9yJilyYW5nZVJlc3BvbnNlR2VuZXJhdG9yOwogQGVuZAogCiBAaW50
ZXJmYWNlIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAoKQogLSAoaWQpaW5pdFdpdGhTZXNz
aW9uOihXZWJDb3JlTlNVUkxTZXNzaW9uICopc2Vzc2lvbiBpZGVudGlmaWVyOihOU1VJbnRlZ2Vy
KWlkZW50aWZpZXIgcmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdDsKLS0gKGlkKWluaXRX
aXRoU2Vzc2lvbjooV2ViQ29yZU5TVVJMU2Vzc2lvbiAqKXNlc3Npb24gaWRlbnRpZmllcjooTlNV
SW50ZWdlcilpZGVudGlmaWVyIFVSTDooTlNVUkwgKil1cmw7CiAtICh2b2lkKV9yZXN0YXJ0Owog
LSAodm9pZClfY2FuY2VsOwogLSAodm9pZClfZmluaXNoOwogQHByb3BlcnR5IChhc3NpZ24pIFdl
YkNvcmVOU1VSTFNlc3Npb24gKiBfTnVsbGFibGUgc2Vzc2lvbjsKIAotLSAodm9pZClyZXNvdXJj
ZTooUGxhdGZvcm1NZWRpYVJlc291cmNlJilyZXNvdXJjZSBzZW50Qnl0ZXM6KHVuc2lnbmVkIGxv
bmcgbG9uZylieXRlc1NlbnQgdG90YWxCeXRlc1RvQmVTZW50Oih1bnNpZ25lZCBsb25nIGxvbmcp
dG90YWxCeXRlc1RvQmVTZW50OwotLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291
cmNlJilyZXNvdXJjZSByZWNlaXZlZFJlc3BvbnNlOihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJily
ZXNwb25zZSBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTaG91bGRD
b250aW51ZVBvbGljeUNoZWNrKT4mJiljb21wbGV0aW9uSGFuZGxlcjsKLS0gKEJPT0wpcmVzb3Vy
Y2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2Ugc2hvdWxkQ2FjaGVSZXNwb25zZToo
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpcmVzcG9uc2U7Ci0tICh2b2lkKXJlc291cmNlOihQbGF0
Zm9ybU1lZGlhUmVzb3VyY2UmKXJlc291cmNlIHJlY2VpdmVkRGF0YTooY29uc3QgY2hhciopZGF0
YSBsZW5ndGg6KGludClsZW5ndGg7Ci0tICh2b2lkKXJlc291cmNlOihQbGF0Zm9ybU1lZGlhUmVz
b3VyY2UmKXJlc291cmNlIHJlY2VpdmVkUmVkaXJlY3Q6KGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
KXJlc3BvbnNlIHJlcXVlc3Q6KFJlc291cmNlUmVxdWVzdCYmKXJlcXVlc3QgY29tcGxldGlvbkhh
bmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVzb3VyY2VSZXF1ZXN0JiYpPiYmKWNvbXBs
ZXRpb25IYW5kbGVyOwotLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlJily
ZXNvdXJjZSBhY2Nlc3NDb250cm9sQ2hlY2tGYWlsZWRXaXRoRXJyb3I6KGNvbnN0IFJlc291cmNl
RXJyb3ImKWVycm9yOwotLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlJily
ZXNvdXJjZSBsb2FkRmFpbGVkV2l0aEVycm9yOihjb25zdCBSZXNvdXJjZUVycm9yJillcnJvcjsK
LS0gKHZvaWQpcmVzb3VyY2VGaW5pc2hlZDooUGxhdGZvcm1NZWRpYVJlc291cmNlJilyZXNvdXJj
ZSBtZXRyaWNzOihjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmKW1ldHJpY3M7CiBAZW5kCiAKIE5T
X0FTU1VNRV9OT05OVUxMX0VORApAQCAtMzExLDYgKzMwNSwxMSBAQCBOU19BU1NVTUVfTk9OTlVM
TF9FTkQKICAgICBfb3JpZ2lucy5hZGQoV1RGTW92ZShvcmlnaW4pKTsKIH0KIAorLSAoV2ViQ29y
ZTo6UmFuZ2VSZXNwb25zZUdlbmVyYXRvciYpcmFuZ2VSZXNwb25zZUdlbmVyYXRvcgoreworICAg
IHJldHVybiBfcmFuZ2VSZXNwb25zZUdlbmVyYXRvcjsKK30KKwogI3ByYWdtYSBtYXJrIC0gTlNV
UkxTZXNzaW9uIEFQSQogQGR5bmFtaWMgZGVsZWdhdGU7CiAtIChfX251bGxhYmxlIGlkPE5TVVJM
U2Vzc2lvbkRlbGVnYXRlPilkZWxlZ2F0ZQpAQCAtNDU1LDE1ICs0NTQsNyBAQCBOU19BU1NVTUVf
Tk9OTlVMTF9FTkQKIAogLSAoTlNVUkxTZXNzaW9uRGF0YVRhc2sgKilkYXRhVGFza1dpdGhVUkw6
KE5TVVJMICopdXJsCiB7Ci0gICAgaWYgKF9pbnZhbGlkYXRlZCkKLSAgICAgICAgcmV0dXJuIG5p
bDsKLQotICAgIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAqdGFzayA9IFtbV2ViQ29yZU5T
VVJMU2Vzc2lvbkRhdGFUYXNrIGFsbG9jXSBpbml0V2l0aFNlc3Npb246c2VsZiBpZGVudGlmaWVy
Ol9uZXh0VGFza0lkZW50aWZpZXIrKyBVUkw6dXJsXTsKLSAgICB7Ci0gICAgICAgIExvY2tlcjxM
b2NrPiBsb2NrZXIoX2RhdGFUYXNrc0xvY2spOwotICAgICAgICBfZGF0YVRhc2tzLmFkZCh0YXNr
KTsKLSAgICB9Ci0gICAgcmV0dXJuIChOU1VSTFNlc3Npb25EYXRhVGFzayAqKVt0YXNrIGF1dG9y
ZWxlYXNlXTsKKyAgICByZXR1cm4gW3NlbGYgZGF0YVRhc2tXaXRoUmVxdWVzdDpbTlNVUkxSZXF1
ZXN0IHJlcXVlc3RXaXRoVVJMOnVybF1dOwogfQogCiAtICh2b2lkKXNlbmRIMlBpbmc6KE5TVVJM
ICopdXJsIHBvbmdIYW5kbGVyOih2b2lkICheKShOU0Vycm9yICplcnJvciwgTlNUaW1lSW50ZXJ2
YWwgaW50ZXJ2YWwpKXBvbmdIYW5kbGVyCkBAIC01NzEsNyArNTYyLDcgQEAgcHVibGljOgogCiBw
cml2YXRlOgogICAgIExvY2sgbV90YXNrTG9jazsKLSAgICBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0
YVRhc2sgKm1fdGFzazsKKyAgICBXZWFrT2JqQ1B0cjxXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRh
c2s+IG1fdGFzazsKIH07CiAKIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50
OjpjbGVhclRhc2soKQpAQCAtNTg2LDE2ICs1NzcsMTcgQEAgdm9pZCBXZWJDb3JlTlNVUkxTZXNz
aW9uRGF0YVRhc2tDbGllbnQ6OmRhdGFTZW50KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzb3Vy
Y2UKICAgICBpZiAoIW1fdGFzaykKICAgICAgICAgcmV0dXJuOwogCi0gICAgW21fdGFzayByZXNv
dXJjZTpyZXNvdXJjZSBzZW50Qnl0ZXM6Ynl0ZXNTZW50IHRvdGFsQnl0ZXNUb0JlU2VudDp0b3Rh
bEJ5dGVzVG9CZVNlbnRdOworICAgIFttX3Rhc2sgcmVzb3VyY2U6JnJlc291cmNlIHNlbnRCeXRl
czpieXRlc1NlbnQgdG90YWxCeXRlc1RvQmVTZW50OnRvdGFsQnl0ZXNUb0JlU2VudF07CiB9CiAK
IHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjpyZXNwb25zZVJlY2VpdmVk
KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNob3VsZENvbnRpbnVlUG9saWN5Q2hl
Y2spPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogeworICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpOwogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fdGFza0xvY2spOwogICAgIGlm
ICghbV90YXNrKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoU2hvdWxkQ29udGlu
dWVQb2xpY3lDaGVjazo6Tm8pOwogCi0gICAgW21fdGFzayByZXNvdXJjZTpyZXNvdXJjZSByZWNl
aXZlZFJlc3BvbnNlOnJlc3BvbnNlIGNvbXBsZXRpb25IYW5kbGVyOldURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXTsKKyAgICBbbV90YXNrIHJlc291cmNlOiZyZXNvdXJjZSByZWNlaXZlZFJlc3Bv
bnNlOnJlc3BvbnNlIGNvbXBsZXRpb25IYW5kbGVyOldURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XTsKIH0KIAogYm9vbCBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OnNob3VsZENh
Y2hlUmVzcG9uc2UoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvdXJjZSwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UpCkBAIC02MDQsNyArNTk2LDcgQEAgYm9vbCBXZWJDb3JlTlNV
UkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OnNob3VsZENhY2hlUmVzcG9uc2UoUGxhdGZvcm1NZWRp
YVJlc291cmMKICAgICBpZiAoIW1fdGFzaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
cmV0dXJuIFttX3Rhc2sgcmVzb3VyY2U6cmVzb3VyY2Ugc2hvdWxkQ2FjaGVSZXNwb25zZTpyZXNw
b25zZV07CisgICAgcmV0dXJuIFttX3Rhc2sgcmVzb3VyY2U6JnJlc291cmNlIHNob3VsZENhY2hl
UmVzcG9uc2U6cmVzcG9uc2VdOwogfQogCiB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFz
a0NsaWVudDo6ZGF0YVJlY2VpdmVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzb3VyY2UsIGNv
bnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCkBAIC02MTMsNyArNjA1LDcgQEAgdm9pZCBXZWJD
b3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmRhdGFSZWNlaXZlZChQbGF0Zm9ybU1lZGlh
UmVzb3VyY2UmIHJlc28KICAgICBpZiAoIW1fdGFzaykKICAgICAgICAgcmV0dXJuOwogCi0gICAg
W21fdGFzayByZXNvdXJjZTpyZXNvdXJjZSByZWNlaXZlZERhdGE6ZGF0YSBsZW5ndGg6bGVuZ3Ro
XTsKKyAgICBbbV90YXNrIHJlc291cmNlOiZyZXNvdXJjZSByZWNlaXZlZERhdGE6ZGF0YSBsZW5n
dGg6bGVuZ3RoXTsKIH0KIAogdm9pZCBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6
OnJlZGlyZWN0UmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvdXJjZSwgUmVzb3Vy
Y2VSZXF1ZXN0JiYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoUmVzb3VyY2VSZXF1ZXN0JiYpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpAQCAtNjIyLDcgKzYxNCw3IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNr
Q2xpZW50OjpyZWRpcmVjdFJlY2VpdmVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYKICAgICBpZiAo
IW1fdGFzaykKICAgICAgICAgcmV0dXJuOwogCi0gICAgW21fdGFzayByZXNvdXJjZTpyZXNvdXJj
ZSByZWNlaXZlZFJlZGlyZWN0OnJlc3BvbnNlIHJlcXVlc3Q6V1RGTW92ZShyZXF1ZXN0KSBjb21w
bGV0aW9uSGFuZGxlcjogW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildIChhdXRvJiYgcmVxdWVzdCkgbXV0YWJsZSB7CisgICAgW21fdGFzayByZXNvdXJjZTom
cmVzb3VyY2UgcmVjZWl2ZWRSZWRpcmVjdDpyZXNwb25zZSByZXF1ZXN0OldURk1vdmUocmVxdWVz
dCkgY29tcGxldGlvbkhhbmRsZXI6IFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSAoYXV0byYmIHJlcXVlc3QpIG11dGFibGUgewogICAgICAgICBjYWxsT25N
YWluVGhyZWFkKFtyZXF1ZXN0ID0gcmVxdWVzdC5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CiAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlcXVlc3QpKTsKICAgICAgICAgfSk7CkBA
IC02MzUsNyArNjI3LDcgQEAgdm9pZCBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6
OmFjY2Vzc0NvbnRyb2xDaGVja0ZhaWxlZChQbGF0Zm9ybU1lZGlhUmUKICAgICBpZiAoIW1fdGFz
aykKICAgICAgICAgcmV0dXJuOwogCi0gICAgW21fdGFzayByZXNvdXJjZTpyZXNvdXJjZSBhY2Nl
c3NDb250cm9sQ2hlY2tGYWlsZWRXaXRoRXJyb3I6ZXJyb3JdOworICAgIFttX3Rhc2sgcmVzb3Vy
Y2U6JnJlc291cmNlIGFjY2Vzc0NvbnRyb2xDaGVja0ZhaWxlZFdpdGhFcnJvcjplcnJvcl07CiB9
CiAKIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmFpbGVkKFBs
YXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9y
KQpAQCAtNjQ0LDcgKzYzNiw3IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xp
ZW50Ojpsb2FkRmFpbGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzb3VyCiAgICAgaWYgKCFt
X3Rhc2spCiAgICAgICAgIHJldHVybjsKIAotICAgIFttX3Rhc2sgcmVzb3VyY2U6cmVzb3VyY2Ug
bG9hZEZhaWxlZFdpdGhFcnJvcjplcnJvcl07CisgICAgW21fdGFzayByZXNvdXJjZTomcmVzb3Vy
Y2UgbG9hZEZhaWxlZFdpdGhFcnJvcjplcnJvcl07CiB9CiAKIHZvaWQgV2ViQ29yZU5TVVJMU2Vz
c2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiBy
ZXNvdXJjZSwgY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJiBtZXRyaWNzKQpAQCAtNjUzLDcgKzY0
NSw3IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNo
ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvCiAgICAgaWYgKCFtX3Rhc2spCiAgICAgICAg
IHJldHVybjsKIAotICAgIFttX3Rhc2sgcmVzb3VyY2VGaW5pc2hlZDpyZXNvdXJjZSBtZXRyaWNz
Om1ldHJpY3NdOworICAgIFttX3Rhc2sgcmVzb3VyY2VGaW5pc2hlZDomcmVzb3VyY2UgbWV0cmlj
czptZXRyaWNzXTsKIH0KIAogfQpAQCAtNjYxLDE3ICs2NTMsNiBAQCB2b2lkIFdlYkNvcmVOU1VS
TFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZpbmlzaGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJj
ZSYgcmVzbwogI3ByYWdtYSBtYXJrIC0gV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrCiAKIEBp
bXBsZW1lbnRhdGlvbiBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sKLS0gKGlkKWluaXRXaXRo
U2Vzc2lvbjooV2ViQ29yZU5TVVJMU2Vzc2lvbiAqKXNlc3Npb24gaWRlbnRpZmllcjooTlNVSW50
ZWdlcilpZGVudGlmaWVyIFVSTDooTlNVUkwgKil1cmwKLXsKLSAgICBzZWxmLnRhc2tJZGVudGlm
aWVyID0gaWRlbnRpZmllcjsKLSAgICBzZWxmLnNlc3Npb24gPSBzZXNzaW9uOwotICAgIHNlbGYu
c3RhdGUgPSBOU1VSTFNlc3Npb25UYXNrU3RhdGVTdXNwZW5kZWQ7Ci0gICAgc2VsZi5wcmlvcml0
eSA9IE5TVVJMU2Vzc2lvblRhc2tQcmlvcml0eURlZmF1bHQ7Ci0gICAgc2VsZi5vcmlnaW5hbFJl
cXVlc3QgPSBzZWxmLmN1cnJlbnRSZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVS
TDp1cmxdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KIC0gKGlkKWluaXRXaXRoU2Vzc2lvbjoo
V2ViQ29yZU5TVVJMU2Vzc2lvbiAqKXNlc3Npb24gaWRlbnRpZmllcjooTlNVSW50ZWdlcilpZGVu
dGlmaWVyIHJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3QKIHsKICAgICBzZWxmLnRhc2tJ
ZGVudGlmaWVyID0gaWRlbnRpZmllcjsKQEAgLTcwOCw5ICs2ODksMTIgQEAgdm9pZCBXZWJDb3Jl
TlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmxvYWRGaW5pc2hlZChQbGF0Zm9ybU1lZGlhUmVz
b3VyY2UmIHJlc28KIAogICAgIFtzZWxmIF9jYW5jZWxdOwogCisgICAgaWYgKFtzZWxmLnNlc3Np
b24gcmFuZ2VSZXNwb25zZUdlbmVyYXRvcl0ud2lsbEhhbmRsZVJlcXVlc3Qoc2VsZiwgc2VsZi5v
cmlnaW5hbFJlcXVlc3QpKQorICAgICAgICByZXR1cm47CisKICAgICBfcmVzb3VyY2UgPSBzZWxm
LnNlc3Npb24ubG9hZGVyLnJlcXVlc3RSZXNvdXJjZShzZWxmLm9yaWdpbmFsUmVxdWVzdCwgUGxh
dGZvcm1NZWRpYVJlc291cmNlTG9hZGVyOjpMb2FkT3B0aW9uOjpEaXNhbGxvd0NhY2hpbmcpOwog
ICAgIGlmIChfcmVzb3VyY2UpCi0gICAgICAgIF9yZXNvdXJjZS0+c2V0Q2xpZW50KG1ha2VVbmlx
dWU8V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50PihzZWxmKSk7CisgICAgICAgIF9y
ZXNvdXJjZS0+c2V0Q2xpZW50KGFkb3B0UmVmKCpuZXcgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFU
YXNrQ2xpZW50KHNlbGYpKSk7CiB9CiAKIC0gKHZvaWQpX2NhbmNlbApAQCAtNzI3LDcgKzcxMSw3
IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQo
UGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKICAgICBpZiAoX3Jlc291cmNlKQotICAgICAgICBbc2VsZiByZXNvdXJjZUZpbmlzaGVkOipf
cmVzb3VyY2UgbWV0cmljczpOZXR3b3JrTG9hZE1ldHJpY3MgeyB9XTsKKyAgICAgICAgW3NlbGYg
cmVzb3VyY2VGaW5pc2hlZDpfcmVzb3VyY2UuZ2V0KCkgbWV0cmljczpOZXR3b3JrTG9hZE1ldHJp
Y3MgeyB9XTsKIH0KIAogI3ByYWdtYSBtYXJrIC0gTlNVUkxTZXNzaW9uIEFQSQpAQCAtODA2LDIz
ICs3OTAsMjggQEAgdm9pZCBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmxvYWRG
aW5pc2hlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc28KIAogI3ByYWdtYSBtYXJrIC0gUGxh
dGZvcm1NZWRpYVJlc291cmNlQ2xpZW50IGNhbGxiYWNrcwogCi0tICh2b2lkKXJlc291cmNlOihQ
bGF0Zm9ybU1lZGlhUmVzb3VyY2UmKXJlc291cmNlIHNlbnRCeXRlczoodW5zaWduZWQgbG9uZyBs
b25nKWJ5dGVzU2VudCB0b3RhbEJ5dGVzVG9CZVNlbnQ6KHVuc2lnbmVkIGxvbmcgbG9uZyl0b3Rh
bEJ5dGVzVG9CZVNlbnQKKy0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSop
cmVzb3VyY2Ugc2VudEJ5dGVzOih1bnNpZ25lZCBsb25nIGxvbmcpYnl0ZXNTZW50IHRvdGFsQnl0
ZXNUb0JlU2VudDoodW5zaWduZWQgbG9uZyBsb25nKXRvdGFsQnl0ZXNUb0JlU2VudAogewotICAg
IEFTU0VSVF9VTlVTRUQocmVzb3VyY2UsICZyZXNvdXJjZSA9PSBfcmVzb3VyY2UpOworICAgIEFT
U0VSVF9VTlVTRUQocmVzb3VyY2UsICFyZXNvdXJjZSB8fCByZXNvdXJjZSA9PSBfcmVzb3VyY2Up
OwogICAgIFVOVVNFRF9QQVJBTShieXRlc1NlbnQpOwogICAgIFVOVVNFRF9QQVJBTSh0b3RhbEJ5
dGVzVG9CZVNlbnQpOwogICAgIC8vIE5vLW9wLgogfQogCi0tICh2b2lkKXJlc291cmNlOihQbGF0
Zm9ybU1lZGlhUmVzb3VyY2UmKXJlc291cmNlIHJlY2VpdmVkUmVzcG9uc2U6KGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmKXJlc3BvbnNlIGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFNob3VsZENvbnRpbnVlUG9saWN5Q2hlY2spPiYmKWNvbXBsZXRpb25IYW5kbGVyCist
ICh2b2lkKXJlc291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIHJlY2VpdmVk
UmVzcG9uc2U6KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKXJlc3BvbnNlIGNvbXBsZXRpb25IYW5k
bGVyOihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNob3VsZENvbnRpbnVlUG9saWN5Q2hlY2spPiYm
KWNvbXBsZXRpb25IYW5kbGVyCiB7CiAgICAgQVNTRVJUKHJlc3BvbnNlLnNvdXJjZSgpID09IFJl
c291cmNlUmVzcG9uc2U6OlNvdXJjZTo6TmV0d29yayB8fCByZXNwb25zZS5zb3VyY2UoKSA9PSBS
ZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OkRpc2tDYWNoZSB8fCByZXNwb25zZS5zb3VyY2UoKSA9
PSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OkRpc2tDYWNoZUFmdGVyVmFsaWRhdGlvbiB8fCBy
ZXNwb25zZS5zb3VyY2UoKSA9PSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OlNlcnZpY2VXb3Jr
ZXIpOwotICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2UsICZyZXNvdXJjZSA9PSBfcmVzb3VyY2Up
OworICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2UsICFyZXNvdXJjZSB8fCByZXNvdXJjZSA9PSBf
cmVzb3VyY2UpOwogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgW3NlbGYuc2Vzc2lv
biB0YXNrOnNlbGYgZGlkUmVjZWl2ZVJlc3BvbnNlRnJvbU9yaWdpbjpTZWN1cml0eU9yaWdpbjo6
Y3JlYXRlKHJlc3BvbnNlLnVybCgpKV07Ci0gICAgW3NlbGYuc2Vzc2lvbiB0YXNrOnNlbGYgZGlk
UmVjZWl2ZUNPUlNBY2Nlc3NDaGVja1Jlc3VsdDpyZXNvdXJjZS5kaWRQYXNzQWNjZXNzQ29udHJv
bENoZWNrKCldOworICAgIC8vIEZJWE1FOiBUaGluayBhYm91dCB0aGlzIGFuZCBtYWtlIHN1cmUg
aXQncyBzYWZlLgorICAgIFtzZWxmLnNlc3Npb24gdGFzazpzZWxmIGRpZFJlY2VpdmVDT1JTQWNj
ZXNzQ2hlY2tSZXN1bHQ6cmVzb3VyY2UgPyByZXNvdXJjZS0+ZGlkUGFzc0FjY2Vzc0NvbnRyb2xD
aGVjaygpIDogWUVTXTsKICAgICBzZWxmLmNvdW50T2ZCeXRlc0V4cGVjdGVkVG9SZWNlaXZlID0g
cmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCk7Ci0gICAgUmV0YWluUHRyPE5TVVJMUmVz
cG9uc2U+IHN0cm9uZ1Jlc3BvbnNlIHsgcmVzcG9uc2UubnNVUkxSZXNwb25zZSgpIH07CisgICAg
UmV0YWluUHRyPE5TVVJMUmVzcG9uc2U+IHN0cm9uZ1Jlc3BvbnNlID0gcmVzcG9uc2UubnNVUkxS
ZXNwb25zZSgpOworCisgICAgaWYgKHJlc291cmNlICYmIHNlbGYuc2Vzc2lvbiAmJiBbc2VsZi5z
ZXNzaW9uIHJhbmdlUmVzcG9uc2VHZW5lcmF0b3JdLndpbGxTeW50aGVzaXplUmFuZ2VSZXNwb25z
ZXMoc2VsZiwgKnJlc291cmNlLCByZXNwb25zZSkpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9u
SGFuZGxlcihTaG91bGRDb250aW51ZVBvbGljeUNoZWNrOjpZZXMpOworICAgIAogICAgIFJldGFp
blB0cjxXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2s+IHN0cm9uZ1NlbGYgeyBzZWxmIH07CiAg
ICAgaWYgKCFzZWxmLnNlc3Npb24pCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihT
aG91bGRDb250aW51ZVBvbGljeUNoZWNrOjpObyk7CkBAIC04NTAsOSArODM5LDkgQEAgdm9pZCBX
ZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmxvYWRGaW5pc2hlZChQbGF0Zm9ybU1l
ZGlhUmVzb3VyY2UmIHJlc28KICAgICB9XTsKIH0KIAotLSAoQk9PTClyZXNvdXJjZTooUGxhdGZv
cm1NZWRpYVJlc291cmNlJilyZXNvdXJjZSBzaG91bGRDYWNoZVJlc3BvbnNlOihjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJilyZXNwb25zZQorLSAoQk9PTClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJl
c291cmNlKilyZXNvdXJjZSBzaG91bGRDYWNoZVJlc3BvbnNlOihjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJilyZXNwb25zZQogewotICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2UsICZyZXNvdXJjZSA9
PSBfcmVzb3VyY2UpOworICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2UsICFyZXNvdXJjZSB8fCBy
ZXNvdXJjZSA9PSBfcmVzb3VyY2UpOwogCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIApA
QCAtODYwLDkgKzg0OSw5IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50
Ojpsb2FkRmluaXNoZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvCiAgICAgcmV0dXJuIHJl
c3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFJhbmdlKS5pc0Vt
cHR5KCk7CiB9CiAKLS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVz
b3VyY2UgcmVjZWl2ZWREYXRhOihjb25zdCBjaGFyKilkYXRhIGxlbmd0aDooaW50KWxlbmd0aAor
LSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlKilyZXNvdXJjZSByZWNlaXZl
ZERhdGE6KGNvbnN0IGNoYXIqKWRhdGEgbGVuZ3RoOihpbnQpbGVuZ3RoCiB7Ci0gICAgQVNTRVJU
X1VOVVNFRChyZXNvdXJjZSwgJnJlc291cmNlID09IF9yZXNvdXJjZSk7CisgICAgQVNTRVJUX1VO
VVNFRChyZXNvdXJjZSwgIXJlc291cmNlIHx8IHJlc291cmNlID09IF9yZXNvdXJjZSk7CiAgICAg
UmV0YWluUHRyPE5TRGF0YT4gbnNEYXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdp
dGhCeXRlczpkYXRhIGxlbmd0aDpsZW5ndGhdKTsKICAgICBSZXRhaW5QdHI8V2ViQ29yZU5TVVJM
U2Vzc2lvbkRhdGFUYXNrPiBzdHJvbmdTZWxmIHsgc2VsZiB9OwogICAgIFtzZWxmLnNlc3Npb24g
YWRkRGVsZWdhdGVPcGVyYXRpb246W3N0cm9uZ1NlbGYsIGxlbmd0aCwgbnNEYXRhXSB7CkBAIC04
NzMsOSArODYyLDkgQEAgdm9pZCBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6Omxv
YWRGaW5pc2hlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc28KICAgICB9XTsKIH0KIAotLSAo
dm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlJilyZXNvdXJjZSByZWNlaXZlZFJl
ZGlyZWN0Oihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJilyZXNwb25zZSByZXF1ZXN0OihSZXNvdXJj
ZVJlcXVlc3QmJilyZXF1ZXN0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFJlc291cmNlUmVxdWVzdCYmKT4mJiljb21wbGV0aW9uSGFuZGxlcgorLSAodm9pZClyZXNv
dXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlKilyZXNvdXJjZSByZWNlaXZlZFJlZGlyZWN0Oihj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJilyZXNwb25zZSByZXF1ZXN0OihSZXNvdXJjZVJlcXVlc3Qm
JilyZXF1ZXN0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlc291
cmNlUmVxdWVzdCYmKT4mJiljb21wbGV0aW9uSGFuZGxlcgogewotICAgIEFTU0VSVF9VTlVTRUQo
cmVzb3VyY2UsICZyZXNvdXJjZSA9PSBfcmVzb3VyY2UpOworICAgIEFTU0VSVF9VTlVTRUQocmVz
b3VyY2UsICFyZXNvdXJjZSB8fCByZXNvdXJjZSA9PSBfcmVzb3VyY2UpOwogICAgIFtzZWxmLnNl
c3Npb24gYWRkRGVsZWdhdGVPcGVyYXRpb246W3N0cm9uZ1NlbGYgPSByZXRhaW5QdHIoc2VsZiks
IHJlc3BvbnNlID0gcmV0YWluUHRyKHJlc3BvbnNlLm5zVVJMUmVzcG9uc2UoKSksIHJlcXVlc3Qg
PSByZXF1ZXN0Lmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCFbcmVzcG9uc2UgaXNL
aW5kT2ZDbGFzczpbTlNIVFRQVVJMUmVzcG9uc2UgY2xhc3NdXSkgewogICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkBAIC05MDUsOSArODk0LDkgQEAgdm9pZCBXZWJDb3JlTlNVUkxT
ZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmxvYWRGaW5pc2hlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2Um
IHJlc28KICAgICB9XTsKIH0KIAotLSAodm9pZClfcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNv
dXJjZSYpcmVzb3VyY2UgbG9hZEZpbmlzaGVkV2l0aEVycm9yOihOU0Vycm9yICopZXJyb3IgbWV0
cmljczooY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJiltZXRyaWNzCistICh2b2lkKV9yZXNvdXJj
ZTooUGxhdGZvcm1NZWRpYVJlc291cmNlKilyZXNvdXJjZSBsb2FkRmluaXNoZWRXaXRoRXJyb3I6
KE5TRXJyb3IgKillcnJvciBtZXRyaWNzOihjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmKW1ldHJp
Y3MKIHsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAmcmVzb3VyY2UgPT0gX3Jlc291cmNl
KTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAhcmVzb3VyY2UgfHwgcmVzb3VyY2UgPT0g
X3Jlc291cmNlKTsKICAgICBpZiAoc2VsZi5zdGF0ZSA9PSBOU1VSTFNlc3Npb25UYXNrU3RhdGVD
b21wbGV0ZWQpCiAgICAgICAgIHJldHVybjsKICAgICBzZWxmLnN0YXRlID0gTlNVUkxTZXNzaW9u
VGFza1N0YXRlQ29tcGxldGVkOwpAQCAtOTMwLDE3ICs5MTksMTcgQEAgdm9pZCBXZWJDb3JlTlNV
UkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmxvYWRGaW5pc2hlZChQbGF0Zm9ybU1lZGlhUmVzb3Vy
Y2UmIHJlc28KICAgICB9XTsKIH0KIAotLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJl
c291cmNlJilyZXNvdXJjZSBhY2Nlc3NDb250cm9sQ2hlY2tGYWlsZWRXaXRoRXJyb3I6KGNvbnN0
IFJlc291cmNlRXJyb3ImKWVycm9yCistICh2b2lkKXJlc291cmNlOihQbGF0Zm9ybU1lZGlhUmVz
b3VyY2UqKXJlc291cmNlIGFjY2Vzc0NvbnRyb2xDaGVja0ZhaWxlZFdpdGhFcnJvcjooY29uc3Qg
UmVzb3VyY2VFcnJvciYpZXJyb3IKIHsKICAgICBbc2VsZiBfcmVzb3VyY2U6cmVzb3VyY2UgbG9h
ZEZpbmlzaGVkV2l0aEVycm9yOmVycm9yLm5zRXJyb3IoKSBtZXRyaWNzOk5ldHdvcmtMb2FkTWV0
cmljcyB7IH1dOwogfQogCi0tICh2b2lkKXJlc291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2Um
KXJlc291cmNlIGxvYWRGYWlsZWRXaXRoRXJyb3I6KGNvbnN0IFJlc291cmNlRXJyb3ImKWVycm9y
CistICh2b2lkKXJlc291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIGxvYWRG
YWlsZWRXaXRoRXJyb3I6KGNvbnN0IFJlc291cmNlRXJyb3ImKWVycm9yCiB7CiAgICAgW3NlbGYg
X3Jlc291cmNlOnJlc291cmNlIGxvYWRGaW5pc2hlZFdpdGhFcnJvcjplcnJvci5uc0Vycm9yKCkg
bWV0cmljczpOZXR3b3JrTG9hZE1ldHJpY3MgeyB9XTsKIH0KIAotLSAodm9pZClyZXNvdXJjZUZp
bmlzaGVkOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmKXJlc291cmNlIG1ldHJpY3M6KGNvbnN0IE5l
dHdvcmtMb2FkTWV0cmljcyYpbWV0cmljcworLSAodm9pZClyZXNvdXJjZUZpbmlzaGVkOihQbGF0
Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIG1ldHJpY3M6KGNvbnN0IE5ldHdvcmtMb2FkTWV0
cmljcyYpbWV0cmljcwogewogICAgIFtzZWxmIF9yZXNvdXJjZTpyZXNvdXJjZSBsb2FkRmluaXNo
ZWRXaXRoRXJyb3I6bmlsIG1ldHJpY3M6bWV0cmljc107CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJl
bW90ZS5jcHAKaW5kZXggN2ZiM2U1ZmJkZmMzYjFmNWM2ODk1MzJlOGEwYTE4MDMyMTM3MWI1My4u
ODc5NWFiYWNhZjAwMDU2N2ZhM2EyMDE2YmNmMmY0OTEzY2IxMGIwMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvTWVkaWFQbGF5ZXJQ
cml2YXRlUmVtb3RlLmNwcApAQCAtMTE4MCw3ICsxMTgwLDcgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVSZW1vdGU6OnJlcXVlc3RSZXNvdXJjZShSZW1vdGVNZWRpYVJlc291cmNlSWRlbnRpZmll
ciByZW0KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBQbGF0Zm9ybU1lZGlhUmVzb3Vy
Y2Ugb3ducyB0aGUgUGxhdGZvcm1NZWRpYVJlc291cmNlQ2xpZW50Ci0gICAgcmVzb3VyY2UtPnNl
dENsaWVudChtYWtlVW5pcXVlPFJlbW90ZU1lZGlhUmVzb3VyY2VQcm94eT4oY29ubmVjdGlvbigp
LCAqcmVzb3VyY2UsIHJlbW90ZU1lZGlhUmVzb3VyY2VJZGVudGlmaWVyKSk7CisgICAgcmVzb3Vy
Y2UtPnNldENsaWVudChhZG9wdFJlZigqbmV3IFJlbW90ZU1lZGlhUmVzb3VyY2VQcm94eShjb25u
ZWN0aW9uKCksICpyZXNvdXJjZSwgcmVtb3RlTWVkaWFSZXNvdXJjZUlkZW50aWZpZXIpKSk7CiAg
ICAgbV9tZWRpYVJlc291cmNlcy5hZGQocmVtb3RlTWVkaWFSZXNvdXJjZUlkZW50aWZpZXIsIFdU
Rk1vdmUocmVzb3VyY2UpKTsKIAogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDhhMDI4MWM2YzYwMjMw
NzViM2Q0MjQ3M2M3NDk4MTJhODY4YjVlMy4uNzIwMzRjNmFiYjM0M2M4ODI0NzIwNzY0ODM5ZWJj
OGI0ZGRjMjBhNiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIxLTAyLTA2ICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3ludGhlc2l6ZSByYW5nZSByZXNwb25z
ZXMgaWYgbmVlZGVkIGluIFdlYkNvcmVOU1VSTFNlc3Npb24KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTA3MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L1BhcnNlZENvbnRlbnRSYW5nZS5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0NoYWxsZW5nZS5tbToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNsaWVudENlcnRTZXJ2ZXIpOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTWVkaWFMb2FkaW5nLm1tOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6dGVzdFZpZGVvQnl0ZXMpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
cnVuVmlkZW9UZXN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5oOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6SFRUUFJlc3BvbnNlOjpIVFRQUmVzcG9uc2UpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
SFRUUFNlcnZlcjo6SFRUUFJlc3BvbnNlOjpIVFRQUmVzcG9uc2UpOiBEZWxldGVkLgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OkhUVFBTZXJ2ZXI6OlJlcXVlc3REYXRhOjpSZXF1ZXN0RGF0YSk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjphcHBlbmRUb1ZlY3Rvcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpI
VFRQU2VydmVyOjpwYXJzZVBhdGgpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZl
cjo6cmVzcG9uZFRvUmVxdWVzdHMpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFJlc3Bv
bnNlOjpib2R5RnJvbVN0cmluZyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQUmVzcG9u
c2U6OnNlcmlhbGl6ZSk6CisKIDIwMjEtMDItMDUgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNv
bkBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gRGlzYWJsZSBNZWRpYVNlc3Npb25UZXN0IEFQ
SSB0ZXN0cwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1Bh
cnNlZENvbnRlbnRSYW5nZS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
UGFyc2VkQ29udGVudFJhbmdlLmNwcAppbmRleCAyMGE5NTdlNTljODUxNjBjODA4MzE3ZTE1YjAx
MDI4ZDVmYTliNDU4Li4yNWQyZDY3N2ZiODg4NjIyNWZlMzFkYjQ5OGU1ZDc1ZDZjNjAwZjQwIDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvUGFyc2VkQ29udGVu
dFJhbmdlLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvUGFyc2Vk
Q29udGVudFJhbmdlLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
CiAjaW5jbHVkZSA8V2ViQ29yZS9QYXJzZWRDb250ZW50UmFuZ2UuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1BhcnNlZFJlcXVlc3RSYW5nZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTk1LDQgKzk2LDMxIEBAIFRFU1QoV2Vi
Q29yZSwgUGFyc2VkQ29udGVudFJhbmdlVG9TdHJpbmcpCiAgICAgQVNTRVJUX1NUUkVRKCIiLCBQ
YXJzZWRDb250ZW50UmFuZ2UoKS5oZWFkZXJWYWx1ZSgpLnV0ZjgoKS5kYXRhKCkpOwogfQogCitU
RVNUKFdlYkNvcmUsIFBhcnNlZFJlcXVlc3RSYW5nZSkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBm
YWlsdXJlQ2FzZXMgeworICAgICAgICB7IH0sCisgICAgICAgICIiLAorICAgICAgICAiYWJjIiwK
KyAgICAgICAgImJ5dGVzPSIsCisgICAgICAgICJieXRlcz0tIiwKKyAgICAgICAgImJ5dGVzPWFi
Yy0iLAorICAgICAgICAiYnl0ZXM9MS1hYmMiLAorICAgICAgICAiYnl0ZXM9Mi0xIiwKKyAgICAg
ICAgImJ5dGVzPTEtIiwKKyAgICAgICAgImJ5dGVzPS0xIiwKKyAgICAgICAgImJ5dGVzPTEtOTk5
OTk5OTk5OTk5OTk5OTk5OTk5OTk5IgorICAgIH07CisgICAgZm9yIChjb25zdCBhdXRvJiBpbnB1
dCA6IGZhaWx1cmVDYXNlcykKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6bnVsbG9wdCwgUGFyc2Vk
UmVxdWVzdFJhbmdlOjpwYXJzZShpbnB1dCkpOworCisgICAgYXV0byBjb21wYXJlID0gW10gKGNv
bnN0IFN0cmluZyYgaW5wdXQsIE9wdGlvbmFsPHNpemVfdD4gYmVnaW4sIE9wdGlvbmFsPHNpemVf
dD4gZW5kKSB7CisgICAgICAgIGF1dG8gcmFuZ2UgPSBQYXJzZWRSZXF1ZXN0UmFuZ2U6OnBhcnNl
KGlucHV0KTsKKyAgICAgICAgRVhQRUNUX05FKFdURjo6bnVsbG9wdCwgcmFuZ2UpOworICAgICAg
ICAKKyAgICB9OworICAgIGNvbXBhcmUoImJ5dGVzPTEtMSIsIDEsIDEpOworICAgIGNvbXBhcmUo
ImJ5dGVzPTEtMiIsIDEsIDIpOworfQorCiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0NoYWxsZW5nZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvQ2hhbGxlbmdlLm1tCmluZGV4IDk2NDA3NDhiZjYzMDI4ZDJiNzQ0
ODk4Y2QwZDQ2NTNjZmE4YmQ1ZDMuLjBiNzViYTQzYzAzYWUzODg4MTZhMWYzY2MyY2VlNmYxNzcx
YjEwNjEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
Q2hhbGxlbmdlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
Q2hhbGxlbmdlLm1tCkBAIC01ODksNyArNTg5LDcgQEAgc3RhdGljIEhUVFBTZXJ2ZXIgY2xpZW50
Q2VydFNlcnZlcigpCiAgICAgICAgIHsgIi81LnBuZyIsIHsgbG9uZ1N0cmluZyB9IH0sCiAgICAg
ICAgIHsgIi82LnBuZyIsIHsgbG9uZ1N0cmluZyB9IH0sCiAgICAgICAgIHsgIi9yZWRpcmVjdFRv
RXJyb3IiLCB7IDMwMSwge3sgIkxvY2F0aW9uIiwgIi9lcnJvciIgfX0gfSB9LAotICAgICAgICB7
ICIvZXJyb3IiLCB7IEhUVFBTZXJ2ZXI6OkhUVFBSZXNwb25zZTo6VGVybWluYXRlQ29ubmVjdGlv
bjo6WWVzIH0gfSwKKyAgICAgICAgeyAiL2Vycm9yIiwgeyBIVFRQUmVzcG9uc2U6OlRlcm1pbmF0
ZUNvbm5lY3Rpb246OlllcyB9IH0sCiAgICAgfSwgSFRUUFNlcnZlcjo6UHJvdG9jb2w6Okh0dHBz
LCBbXSAoYXV0bywgYXV0bywgYXV0byBjZXJ0aWZpY2F0ZUFsbG93ZWQpIHsKICAgICAgICAgY2Vy
dGlmaWNhdGVBbGxvd2VkKHRydWUpOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9NZWRpYUxvYWRpbmcubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL01lZGlhTG9hZGluZy5tbQppbmRleCA2NGRjNWJmMDU2
Yjk1NWEyNDhmNjdlMjBkMDlmNzQ3MTEzMWMxNDY1Li4xMjZjOGMzMmYzMTdiYmMzNjI1OGUyNTA0
ZDBhMjQxNzc5N2I1NTNmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL01lZGlhTG9hZGluZy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL01lZGlhTG9hZGluZy5tbQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW1wb3J0
ICJIVFRQU2VydmVyLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCAi
VGVzdFVJRGVsZWdhdGUuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgPHd0
Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgogCkBAIC0xMTYsNiArMTE3LDc0IEBA
IFRFU1QoTWVkaWFMb2FkaW5nLCBVc2VyQWdlbnRTdHJpbmdITFMpCiAgICAgVXRpbDo6cnVuKCZy
ZWNlaXZlZE1lZGlhUmVxdWVzdCk7CiB9CiAKK2NvbnN0IGNoYXIqIHZpZGVvUGxheVRlc3RIVE1M
ID0iPHNjcmlwdD4iCisgICAgImZ1bmN0aW9uIGNyZWF0ZVZpZGVvRWxlbWVudCgpIHsiCisgICAg
ICAgICJsZXQgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpOyIKKyAgICAg
ICAgInZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgKCk9PnthbGVydCgnZXJyb3InKX0p
OyIKKyAgICAgICAgInZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCAoKT0+e2FsZXJ0
KCdwbGF5aW5nJyl9KTsiCisgICAgICAgICJ2aWRlby5zcmM9J3ZpZGVvLm1wNCc7IgorICAgICAg
ICAidmlkZW8uYXV0b3BsYXkgPSAxOyIKKyAgICAgICAgImRvY3VtZW50LmJvZHkuYXBwZW5kQ2hp
bGQodmlkZW8pOyIKKyAgICAifSIKKyI8L3NjcmlwdD4iCisiPGJvZHkgb25sb2FkPSdjcmVhdGVW
aWRlb0VsZW1lbnQoKSc+PC9ib2R5PiI7CisKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gdGVzdFZp
ZGVvQnl0ZXMoKQoreworICAgIE5TRGF0YSAqZGF0YSA9IFtOU0RhdGEgZGF0YVdpdGhDb250ZW50
c09mVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJ0ZXN0IiB3aXRo
RXh0ZW5zaW9uOkAibXA0IiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJd
XTsKKyAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOworICAgIHZlY3Rvci5hcHBlbmQoc3RhdGlj
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCk7CisgICAgcmV0
dXJuIHZlY3RvcjsKK30KKworc3RhdGljIHZvaWQgcnVuVmlkZW9UZXN0KE5TVVJMUmVxdWVzdCAq
cmVxdWVzdCwgY29uc3QgY2hhciogZXhwZWN0ZWRNZXNzYWdlID0gInBsYXlpbmciKQoreworICAg
IGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFs
bG9jXSBpbml0XSk7CisgICAgY29uZmlndXJhdGlvbi5nZXQoKS5tZWRpYVR5cGVzUmVxdWlyaW5n
VXNlckFjdGlvbkZvclBsYXliYWNrID0gV0tBdWRpb3Zpc3VhbE1lZGlhVHlwZU5vbmU7CisgICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6TlNNYWtlUmVjdCgwLCAwLCAzMDAsIDMwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9u
LmdldCgpIGFkZFRvV2luZG93OllFU10pOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVl
c3RdOworICAgIEVYUEVDVF9XS19TVFJFUShbd2ViVmlldyBfdGVzdF93YWl0Rm9yQWxlcnRdLCBl
eHBlY3RlZE1lc3NhZ2UpOworfQorCitURVNUKE1lZGlhTG9hZGluZywgUmFuZ2VSZXF1ZXN0U3lu
dGhlc2lzV2l0aENvbnRlbnRMZW5ndGgpCit7CisgICAgSFRUUFNlcnZlciBzZXJ2ZXIoeworICAg
ICAgICB7Ii8iLCB7IHZpZGVvUGxheVRlc3RIVE1MIH19LAorICAgICAgICB7Ii92aWRlby5tcDQi
LCB7IHRlc3RWaWRlb0J5dGVzKCkgfX0KKyAgICB9KTsKKyAgICBydW5WaWRlb1Rlc3Qoc2VydmVy
LnJlcXVlc3QoKSk7CisgICAgRVhQRUNUX0VRKHNlcnZlci50b3RhbFJlcXVlc3RzKCksIDJ1KTsK
IH0KIAorVEVTVChNZWRpYUxvYWRpbmcsIFJhbmdlUmVxdWVzdFN5bnRoZXNpc1dpdGhvdXRDb250
ZW50TGVuZ3RoKQoreworICAgIHNpemVfdCB0b3RhbFJlcXVlc3RzIHsgMCB9OworICAgIEZ1bmN0
aW9uPHZvaWQoQ29ubmVjdGlvbik+IHJlc3BvbmRUb1JlcXVlc3RzOworICAgIHJlc3BvbmRUb1Jl
cXVlc3RzID0gWyZdIChDb25uZWN0aW9uIGNvbm5lY3Rpb24pIHsKKyAgICAgICAgY29ubmVjdGlv
bi5yZWNlaXZlSFRUUFJlcXVlc3QoWyYsIGNvbm5lY3Rpb25dIChWZWN0b3I8Y2hhcj4mJiByZXF1
ZXN0KSB7CisgICAgICAgICAgICBhdXRvIHNlbmRSZXNwb25zZSA9IFsmLCBjb25uZWN0aW9uXSAo
SFRUUFJlc3BvbnNlIHJlc3BvbnNlLCBIVFRQUmVzcG9uc2U6OkluY2x1ZGVDb250ZW50TGVuZ3Ro
IGluY2x1ZGVDb250ZW50TGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5zZW5k
KHJlc3BvbnNlLnNlcmlhbGl6ZShpbmNsdWRlQ29udGVudExlbmd0aCksIFsmLCBjb25uZWN0aW9u
XSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3BvbmRUb1JlcXVlc3RzKGNvbm5lY3Rpb24pOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHRvdGFsUmVx
dWVzdHMrKzsKKyAgICAgICAgICAgIGF1dG8gcGF0aCA9IEhUVFBTZXJ2ZXI6OnBhcnNlUGF0aChy
ZXF1ZXN0KTsKKyAgICAgICAgICAgIGlmIChwYXRoID09ICIvIikKKyAgICAgICAgICAgICAgICBz
ZW5kUmVzcG9uc2UoeyB2aWRlb1BsYXlUZXN0SFRNTCB9LCBIVFRQUmVzcG9uc2U6OkluY2x1ZGVD
b250ZW50TGVuZ3RoOjpZZXMpOworICAgICAgICAgICAgZWxzZSBpZiAocGF0aCA9PSAiL3ZpZGVv
Lm1wNCIpCisgICAgICAgICAgICAgICAgc2VuZFJlc3BvbnNlKHRlc3RWaWRlb0J5dGVzKCksIEhU
VFBSZXNwb25zZTo6SW5jbHVkZUNvbnRlbnRMZW5ndGg6Ok5vKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBBU1NFUlQocGF0aC5pc051bGwoKSk7CisgICAgICAgIH0pOworICAg
IH07CisKKyAgICBIVFRQU2VydmVyIHNlcnZlcihbJl0oQ29ubmVjdGlvbiBjb25uZWN0aW9uKSB7
CisgICAgICAgIHJlc3BvbmRUb1JlcXVlc3RzKGNvbm5lY3Rpb24pOworICAgIH0pOworICAgIHJ1
blZpZGVvVGVzdChzZXJ2ZXIucmVxdWVzdCgpLCAiZXJyb3IiKTsKKyAgICBFWFBFQ1RfRVEodG90
YWxSZXF1ZXN0cywgMnUpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisKICNl
bmRpZiAvLyBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvY29jb2EvSFRUUFNlcnZlci5oCmluZGV4IDM5NWRhZjkzMWUyOGE3MWU3N2I4MGYxMDE3OGY1
NTk0ODVmMzUxYzIuLmMyODBlNWRhYTk4ZWY2NjIzMjZmMWJjZjRmZjI4M2U1ZmEzOTAzNTAgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5oCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5oCkBAIC0zNSwxMCArMzUsMTAgQEAK
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogY2xhc3MgQ29ubmVjdGlvbjsKK3N0cnVjdCBI
VFRQUmVzcG9uc2U7CiAKIGNsYXNzIEhUVFBTZXJ2ZXIgewogcHVibGljOgotICAgIHN0cnVjdCBI
VFRQUmVzcG9uc2U7CiAgICAgc3RydWN0IFJlcXVlc3REYXRhOwogICAgIGVudW0gY2xhc3MgUHJv
dG9jb2wgOiB1aW50OF90IHsgSHR0cCwgSHR0cHMsIEh0dHBzV2l0aExlZ2FjeVRMUywgSHR0cDIg
fTsKICAgICB1c2luZyBDZXJ0aWZpY2F0ZVZlcmlmaWVyID0gRnVuY3Rpb248dm9pZChzZWNfcHJv
dG9jb2xfbWV0YWRhdGFfdCwgc2VjX3RydXN0X3QsIHNlY19wcm90b2NvbF92ZXJpZnlfY29tcGxl
dGVfdCk+OwpAQCAtNTMsNiArNTMsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCByZXNw
b25kV2l0aE9LKENvbm5lY3Rpb24pOwogICAgIHN0YXRpYyB2b2lkIHJlc3BvbmRXaXRoQ2hhbGxl
bmdlVGhlbk9LKENvbm5lY3Rpb24pOworICAgIHN0YXRpYyBTdHJpbmcgcGFyc2VQYXRoKGNvbnN0
IFZlY3RvcjxjaGFyPiYgcmVxdWVzdCk7CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIFJldGFpblB0
cjxud19wYXJhbWV0ZXJzX3Q+IGxpc3RlbmVyUGFyYW1ldGVycyhQcm90b2NvbCwgQ2VydGlmaWNh
dGVWZXJpZmllciYmLCBSZXRhaW5QdHI8U2VjSWRlbnRpdHlSZWY+JiYsIE9wdGlvbmFsPHVpbnQx
Nl90PiBwb3J0KTsKQEAgLTgxLDE4ICs4MiwyMCBAQCBwcml2YXRlOgogICAgIFJldGFpblB0cjxu
d19jb25uZWN0aW9uX3Q+IG1fY29ubmVjdGlvbjsKIH07CiAKLXN0cnVjdCBIVFRQU2VydmVyOjpI
VFRQUmVzcG9uc2Ugeworc3RydWN0IEhUVFBSZXNwb25zZSB7CiAgICAgZW51bSBjbGFzcyBUZXJt
aW5hdGVDb25uZWN0aW9uIHsgTm8sIFllcyB9OwotICAgIAorCisgICAgSFRUUFJlc3BvbnNlKFZl
Y3Rvcjx1aW50OF90PiYmIGJvZHkpCisgICAgICAgIDogYm9keShXVEZNb3ZlKGJvZHkpKSB7IH0K
ICAgICBIVFRQUmVzcG9uc2UoY29uc3QgU3RyaW5nJiBib2R5KQotICAgICAgICA6IGJvZHkoYm9k
eSkgeyB9Ci0gICAgSFRUUFJlc3BvbnNlKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiYgaGVhZGVy
RmllbGRzLCBTdHJpbmcmJiBib2R5KQorICAgICAgICA6IGJvZHkoYm9keUZyb21TdHJpbmcoYm9k
eSkpIHsgfQorICAgIEhUVFBSZXNwb25zZShIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYmIGhlYWRl
ckZpZWxkcywgY29uc3QgU3RyaW5nJiBib2R5KQogICAgICAgICA6IGhlYWRlckZpZWxkcyhXVEZN
b3ZlKGhlYWRlckZpZWxkcykpCi0gICAgICAgICwgYm9keShXVEZNb3ZlKGJvZHkpKSB7IH0KLSAg
ICBIVFRQUmVzcG9uc2UodW5zaWduZWQgc3RhdHVzQ29kZSwgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4mJiBoZWFkZXJGaWVsZHMgPSB7IH0sIFN0cmluZyYmIGJvZHkgPSB7IH0pCisgICAgICAgICwg
Ym9keShib2R5RnJvbVN0cmluZyhib2R5KSkgeyB9CisgICAgSFRUUFJlc3BvbnNlKHVuc2lnbmVk
IHN0YXR1c0NvZGUsIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiYgaGVhZGVyRmllbGRzID0geyB9
LCBjb25zdCBTdHJpbmcmIGJvZHkgPSB7IH0pCiAgICAgICAgIDogc3RhdHVzQ29kZShzdGF0dXND
b2RlKQogICAgICAgICAsIGhlYWRlckZpZWxkcyhXVEZNb3ZlKGhlYWRlckZpZWxkcykpCi0gICAg
ICAgICwgYm9keShXVEZNb3ZlKGJvZHkpKSB7IH0KKyAgICAgICAgLCBib2R5KGJvZHlGcm9tU3Ry
aW5nKGJvZHkpKSB7IH0KICAgICBIVFRQUmVzcG9uc2UoVGVybWluYXRlQ29ubmVjdGlvbiB0ZXJt
aW5hdGVDb25uZWN0aW9uKQogICAgICAgICA6IHRlcm1pbmF0ZUNvbm5lY3Rpb24odGVybWluYXRl
Q29ubmVjdGlvbikgeyB9CiAKQEAgLTEwMSwxMCArMTA0LDE0IEBAIHN0cnVjdCBIVFRQU2VydmVy
OjpIVFRQUmVzcG9uc2UgewogICAgIEhUVFBSZXNwb25zZSgpID0gZGVmYXVsdDsKICAgICBIVFRQ
UmVzcG9uc2UmIG9wZXJhdG9yPShjb25zdCBIVFRQUmVzcG9uc2UmKSA9IGRlZmF1bHQ7CiAgICAg
SFRUUFJlc3BvbnNlJiBvcGVyYXRvcj0oSFRUUFJlc3BvbnNlJiYpID0gZGVmYXVsdDsKLSAgICAK
KworICAgIGVudW0gY2xhc3MgSW5jbHVkZUNvbnRlbnRMZW5ndGggOiBib29sIHsgTm8sIFllcyB9
OworICAgIFZlY3Rvcjx1aW50OF90PiBzZXJpYWxpemUoSW5jbHVkZUNvbnRlbnRMZW5ndGggPSBJ
bmNsdWRlQ29udGVudExlbmd0aDo6WWVzKTsKKyAgICBzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IGJv
ZHlGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCiAgICAgdW5zaWduZWQgc3RhdHVzQ29kZSB7
IDIwMCB9OwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGhlYWRlckZpZWxkczsKLSAgICBT
dHJpbmcgYm9keTsKKyAgICBWZWN0b3I8dWludDhfdD4gYm9keTsKICAgICBUZXJtaW5hdGVDb25u
ZWN0aW9uIHRlcm1pbmF0ZUNvbm5lY3Rpb24geyBUZXJtaW5hdGVDb25uZWN0aW9uOjpObyB9Owog
fTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1t
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCmluZGV4IDEwNzQ0YTVj
NDQzZjViMzlmZWYzNmM4MzhlODA1ODY0ZmFmZWIxNjIuLmJhYmY0ZDAwYjM0MjRmNmY1MWRkYmIz
M2RiYzVlYzJlZjBlYThlZTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2Ev
SFRUUFNlcnZlci5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIu
bW0KQEAgLTM4LDggKzM4LDggQEAgbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiBzdHJ1Y3Qg
SFRUUFNlcnZlcjo6UmVxdWVzdERhdGEgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVx
dWVzdERhdGEsIFdURjo6RGVzdHJ1Y3Rpb25UaHJlYWQ6Ok1haW5SdW5Mb29wPiB7CiAgICAgUmVx
dWVzdERhdGEoc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxTdHJpbmcsIEhUVFBSZXNw
b25zZT4+IHJlc3BvbnNlcykKLSAgICA6IHJlcXVlc3RNYXAoW10oc3RkOjppbml0aWFsaXplcl9s
aXN0PHN0ZDo6cGFpcjxTdHJpbmcsIEhUVFBTZXJ2ZXI6OkhUVFBSZXNwb25zZT4+IGxpc3QpIHsK
LSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIEhUVFBTZXJ2ZXI6OkhUVFBSZXNwb25zZT4gbWFwOwor
ICAgIDogcmVxdWVzdE1hcChbXShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpwYWlyPFN0cmlu
ZywgSFRUUFJlc3BvbnNlPj4gbGlzdCkgeworICAgICAgICBIYXNoTWFwPFN0cmluZywgSFRUUFJl
c3BvbnNlPiBtYXA7CiAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IGxpc3QpCiAgICAgICAgICAg
ICBtYXAuYWRkKHBhaXIuZmlyc3QsIHBhaXIuc2Vjb25kKTsKICAgICAgICAgcmV0dXJuIG1hcDsK
QEAgLTIxMiw2ICsyMTIsMzEgQEAgc3RhdGljIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3JGcm9tRGF0
YShkaXNwYXRjaF9kYXRhX3QgY29udGVudCkKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIAorc3Rh
dGljIHZvaWQgYXBwZW5kVG9WZWN0b3IoVmVjdG9yPHVpbnQ4X3Q+JiB2ZWN0b3IsIGNvbnN0IFN0
cmluZyYgc3RyaW5nKQoreworICAgIGF1dG8gdXRmOCA9IHN0cmluZy51dGY4KCk7CisgICAgdmVj
dG9yLmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih1dGY4LmRhdGEoKSks
IHV0ZjgubGVuZ3RoKCkpOworfQorCitTdHJpbmcgSFRUUFNlcnZlcjo6cGFyc2VQYXRoKGNvbnN0
IFZlY3RvcjxjaGFyPiYgcmVxdWVzdCkKK3sKKyAgICBpZiAoIXJlcXVlc3Quc2l6ZSgpKQorICAg
ICAgICByZXR1cm4geyB9OworICAgIGNvbnN0IGNoYXIqIGdldFBhdGhQcmVmaXggPSAiR0VUICI7
CisgICAgY29uc3QgY2hhciogcG9zdFBhdGhQcmVmaXggPSAiUE9TVCAiOworICAgIGNvbnN0IGNo
YXIqIHBhdGhTdWZmaXggPSAiIEhUVFAvMS4xXHJcbiI7CisgICAgY29uc3QgY2hhciogcGF0aEVu
ZCA9IHN0cm5zdHIocmVxdWVzdC5kYXRhKCksIHBhdGhTdWZmaXgsIHJlcXVlc3Quc2l6ZSgpKTsK
KyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHBhdGhFbmQsICJIVFRQU2VydmVyIGFzc3VtZXMgcmVx
dWVzdCBpcyBIVFRQIDEuMSIpOworICAgIHNpemVfdCBwYXRoUHJlZml4TGVuZ3RoID0gMDsKKyAg
ICBpZiAoIW1lbWNtcChyZXF1ZXN0LmRhdGEoKSwgZ2V0UGF0aFByZWZpeCwgc3RybGVuKGdldFBh
dGhQcmVmaXgpKSkKKyAgICAgICAgcGF0aFByZWZpeExlbmd0aCA9IHN0cmxlbihnZXRQYXRoUHJl
Zml4KTsKKyAgICBlbHNlIGlmICghbWVtY21wKHJlcXVlc3QuZGF0YSgpLCBwb3N0UGF0aFByZWZp
eCwgc3RybGVuKHBvc3RQYXRoUHJlZml4KSkpCisgICAgICAgIHBhdGhQcmVmaXhMZW5ndGggPSBz
dHJsZW4ocG9zdFBhdGhQcmVmaXgpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocGF0aFByZWZp
eExlbmd0aCwgIkhUVFBTZXJ2ZXIgYXNzdW1lcyByZXF1ZXN0IGlzIEdFVCBvciBQT1NUIik7Cisg
ICAgc2l6ZV90IHBhdGhMZW5ndGggPSBwYXRoRW5kIC0gcmVxdWVzdC5kYXRhKCkgLSBwYXRoUHJl
Zml4TGVuZ3RoOworICAgIHJldHVybiBTdHJpbmcocmVxdWVzdC5kYXRhKCkgKyBwYXRoUHJlZml4
TGVuZ3RoLCBwYXRoTGVuZ3RoKTsKK30KKwogdm9pZCBIVFRQU2VydmVyOjpyZXNwb25kVG9SZXF1
ZXN0cyhDb25uZWN0aW9uIGNvbm5lY3Rpb24sIFJlZjxSZXF1ZXN0RGF0YT4gcmVxdWVzdERhdGEp
CiB7CiAgICAgY29ubmVjdGlvbi5yZWNlaXZlSFRUUFJlcXVlc3QoW2Nvbm5lY3Rpb24sIHJlcXVl
c3REYXRhXSAoVmVjdG9yPGNoYXI+JiYgcmVxdWVzdCkgbXV0YWJsZSB7CkBAIC0yMTksMzIgKzI0
NCwxNCBAQCB2b2lkIEhUVFBTZXJ2ZXI6OnJlc3BvbmRUb1JlcXVlc3RzKENvbm5lY3Rpb24gY29u
bmVjdGlvbiwgUmVmPFJlcXVlc3REYXRhPiByZXF1ZQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICByZXF1ZXN0RGF0YS0+cmVxdWVzdENvdW50Kys7CiAKLSAgICAgICAgY29uc3QgY2hhciog
Z2V0UGF0aFByZWZpeCA9ICJHRVQgIjsKLSAgICAgICAgY29uc3QgY2hhciogcG9zdFBhdGhQcmVm
aXggPSAiUE9TVCAiOwotICAgICAgICBjb25zdCBjaGFyKiBwYXRoU3VmZml4ID0gIiBIVFRQLzEu
MVxyXG4iOwotICAgICAgICBjb25zdCBjaGFyKiBwYXRoRW5kID0gc3RybnN0cihyZXF1ZXN0LmRh
dGEoKSwgcGF0aFN1ZmZpeCwgcmVxdWVzdC5zaXplKCkpOwotICAgICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKHBhdGhFbmQsICJIVFRQU2VydmVyIGFzc3VtZXMgcmVxdWVzdCBpcyBIVFRQIDEuMSIp
OwotICAgICAgICBzaXplX3QgcGF0aFByZWZpeExlbmd0aCA9IDA7Ci0gICAgICAgIGlmICghbWVt
Y21wKHJlcXVlc3QuZGF0YSgpLCBnZXRQYXRoUHJlZml4LCBzdHJsZW4oZ2V0UGF0aFByZWZpeCkp
KQotICAgICAgICAgICAgcGF0aFByZWZpeExlbmd0aCA9IHN0cmxlbihnZXRQYXRoUHJlZml4KTsK
LSAgICAgICAgZWxzZSBpZiAoIW1lbWNtcChyZXF1ZXN0LmRhdGEoKSwgcG9zdFBhdGhQcmVmaXgs
IHN0cmxlbihwb3N0UGF0aFByZWZpeCkpKQotICAgICAgICAgICAgcGF0aFByZWZpeExlbmd0aCA9
IHN0cmxlbihwb3N0UGF0aFByZWZpeCk7Ci0gICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocGF0
aFByZWZpeExlbmd0aCwgIkhUVFBTZXJ2ZXIgYXNzdW1lcyByZXF1ZXN0IGlzIEdFVCBvciBQT1NU
Iik7Ci0gICAgICAgIHNpemVfdCBwYXRoTGVuZ3RoID0gcGF0aEVuZCAtIHJlcXVlc3QuZGF0YSgp
IC0gcGF0aFByZWZpeExlbmd0aDsKLSAgICAgICAgU3RyaW5nIHBhdGgocmVxdWVzdC5kYXRhKCkg
KyBwYXRoUHJlZml4TGVuZ3RoLCBwYXRoTGVuZ3RoKTsKKyAgICAgICAgYXV0byBwYXRoID0gcGFy
c2VQYXRoKHJlcXVlc3QpOwogICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHJlcXVlc3REYXRh
LT5yZXF1ZXN0TWFwLmNvbnRhaW5zKHBhdGgpLCAiVGhpcyBIVFRQU2VydmVyIGRvZXMgbm90IGtu
b3cgaG93IHRvIHJlc3BvbmQgdG8gYSByZXF1ZXN0IGZvciAlcyIsIHBhdGgudXRmOCgpLmRhdGEo
KSk7CiAKICAgICAgICAgYXV0byByZXNwb25zZSA9IHJlcXVlc3REYXRhLT5yZXF1ZXN0TWFwLmdl
dChwYXRoKTsKICAgICAgICAgaWYgKHJlc3BvbnNlLnRlcm1pbmF0ZUNvbm5lY3Rpb24gPT0gSFRU
UFJlc3BvbnNlOjpUZXJtaW5hdGVDb25uZWN0aW9uOjpZZXMpCiAgICAgICAgICAgICByZXR1cm4g
Y29ubmVjdGlvbi50ZXJtaW5hdGUoKTsKLSAgICAgICAgU3RyaW5nQnVpbGRlciByZXNwb25zZUJ1
aWxkZXI7Ci0gICAgICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQoIkhUVFAvMS4xICIsIHJlc3Bv
bnNlLnN0YXR1c0NvZGUsICcgJywgc3RhdHVzVGV4dChyZXNwb25zZS5zdGF0dXNDb2RlKSwgIlxy
XG4iKTsKLSAgICAgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZCgiQ29udGVudC1MZW5ndGg6ICIs
IHJlc3BvbnNlLmJvZHkubGVuZ3RoKCksICJcclxuIik7Ci0gICAgICAgIGZvciAoYXV0byYgcGFp
ciA6IHJlc3BvbnNlLmhlYWRlckZpZWxkcykKLSAgICAgICAgICAgIHJlc3BvbnNlQnVpbGRlci5h
cHBlbmQocGFpci5rZXksICI6ICIsIHBhaXIudmFsdWUsICJcclxuIik7Ci0gICAgICAgIHJlc3Bv
bnNlQnVpbGRlci5hcHBlbmQoIlxyXG4iKTsKLSAgICAgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVu
ZChyZXNwb25zZS5ib2R5KTsKLSAgICAgICAgY29ubmVjdGlvbi5zZW5kKHJlc3BvbnNlQnVpbGRl
ci50b1N0cmluZygpLCBbY29ubmVjdGlvbiwgcmVxdWVzdERhdGFdIHsKKworICAgICAgICBjb25u
ZWN0aW9uLnNlbmQocmVzcG9uc2Uuc2VyaWFsaXplKCksIFtjb25uZWN0aW9uLCByZXF1ZXN0RGF0
YV0gewogICAgICAgICAgICAgcmVzcG9uZFRvUmVxdWVzdHMoY29ubmVjdGlvbiwgcmVxdWVzdERh
dGEpOwogICAgICAgICB9KTsKICAgICB9KTsKQEAgLTMzNCw2ICszNDEsMjkgQEAgdm9pZCBDb25u
ZWN0aW9uOjpjYW5jZWwoKQogICAgIG1fY29ubmVjdGlvbiA9IG51bGxwdHI7CiB9CiAKK1ZlY3Rv
cjx1aW50OF90PiBIVFRQUmVzcG9uc2U6OmJvZHlGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQoreworICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3I7CisgICAgYXBwZW5kVG9WZWN0b3Io
dmVjdG9yLCBzdHJpbmcpOworICAgIHJldHVybiB2ZWN0b3I7Cit9CisKK1ZlY3Rvcjx1aW50OF90
PiBIVFRQUmVzcG9uc2U6OnNlcmlhbGl6ZShJbmNsdWRlQ29udGVudExlbmd0aCBpbmNsdWRlQ29u
dGVudExlbmd0aCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3BvbnNlQnVpbGRlcjsKKyAgICBy
ZXNwb25zZUJ1aWxkZXIuYXBwZW5kKCJIVFRQLzEuMSAiLCBzdGF0dXNDb2RlLCAnICcsIHN0YXR1
c1RleHQoc3RhdHVzQ29kZSksICJcclxuIik7CisgICAgaWYgKGluY2x1ZGVDb250ZW50TGVuZ3Ro
ID09IEluY2x1ZGVDb250ZW50TGVuZ3RoOjpZZXMpCisgICAgICAgIHJlc3BvbnNlQnVpbGRlci5h
cHBlbmQoIkNvbnRlbnQtTGVuZ3RoOiAiLCBib2R5LnNpemUoKSwgIlxyXG4iKTsKKyAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBoZWFkZXJGaWVsZHMpCisgICAgICAgIHJlc3BvbnNlQnVpbGRlci5hcHBl
bmQocGFpci5rZXksICI6ICIsIHBhaXIudmFsdWUsICJcclxuIik7CisgICAgcmVzcG9uc2VCdWls
ZGVyLmFwcGVuZCgiXHJcbiIpOworICAgIAorICAgIFZlY3Rvcjx1aW50OF90PiBieXRlc1RvU2Vu
ZDsKKyAgICBhcHBlbmRUb1ZlY3RvcihieXRlc1RvU2VuZCwgcmVzcG9uc2VCdWlsZGVyLnRvU3Ry
aW5nKCkpOworICAgIGJ5dGVzVG9TZW5kLmFwcGVuZFZlY3Rvcihib2R5KTsKKyAgICByZXR1cm4g
Ynl0ZXNUb1NlbmQ7Cit9CisKIHZvaWQgSDI6OkNvbm5lY3Rpb246OnNlbmQoRnJhbWUmJiBmcmFt
ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAog
ewogICAgIGF1dG8gZnJhbWVUeXBlID0gZnJhbWUudHlwZSgpOwo=
</data>
<flag name="commit-queue"
          id="437763"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419522</attachid>
            <date>2021-02-06 19:54:52 -0800</date>
            <delta_ts>2021-02-06 20:13:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221072-20210206195451.patch</filename>
            <type>text/plain</type>
            <size>70744</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyNDYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGQyMGQxZWJjMzE5NWFk
YzY0NzUxOTMzMDQ5ZTQxODczYmM2MmY5OS4uMDkxY2QzZDM1MGFlNThjNzhiMjkxNDY4ZTZjNWU4
MmQ0YzllN2YyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIxLTAyLTA2ICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3ludGhl
c2l6ZSByYW5nZSByZXNwb25zZXMgaWYgbmVlZGVkIGluIFdlYkNvcmVOU1VSTFNlc3Npb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTA3MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gd2UgbWFr
ZSBhIG1lZGlhIHJlcXVlc3Qgd2l0aCBhIFJhbmdlIEhUVFAgaGVhZGVyIGZpZWxkIGFuZCB0aGUg
c2VydmVyIGRvZXNuJ3QgcmVzcG9uZCB3aXRoIGEgMjA2IHdpdGggQ29udGVudC1SYW5nZSBoZWFk
ZXIgZmllbGQsCisgICAgICAgIHVudGlsIG5vdyB3ZSB3b3VsZCBqdXN0IGZhaWwgdG8gcGxheSB0
aGUgdmlkZW8uICBJbiBvcmRlciB0byBzdWNjZXNzZnVsbHkgcGxheSB0aGVzZSB2aWRlb3MsIEkg
aW50cm9kdWNlIHRoZSBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yIGNsYXNzLAorICAgICAgICB3aGlj
aCB3aWxsIHJlY2VpdmUgdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBmb3Igc3VjaCBhIHZpZGVvIGFu
ZCBmZWVkIHRoZSBkYXRhIGludG8gV2ViQ29yZU5TVVJMU2Vzc2lvbiBhcyB0aGUgcmVxdWVzdGVk
IHJhbmdlcyBhcmUgcmVjZWl2ZWQuCisgICAgICAgIFNlZWtpbmcgaXMgcHJvYmxlbWF0aWMsIGJ1
dCBhdCBsZWFzdCB3ZSB3aWxsIHRyeSBvdXIgYmVzdCB0byBwbGF5IHRoZSB2aWRlby4KKworICAg
ICAgICBJIGFkZGVkIEFQSSB0ZXN0cyB0aGF0IHRyeSB0byBwbGF5IGEgdmlkZW8gdGhhdCBkaWRu
J3QgcGxheSBiZWZvcmUgdXNpbmcgYSBzZXJ2ZXIgdGhhdCBkb2Vzbid0IHN1cHBvcnQgcmFuZ2Ug
cmVxdWVzdHMuICBNYW51YWwgdmVyaWZpY2F0aW9uIGlzIGFsc28gbmVjZXNzYXJ5LgorCisgICAg
ICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2U6OnNldENsaWVudCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvV2ViQ29yZUFWRlJlc291cmNlTG9hZGVyLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1SZXNvdXJjZU1lZGlhTG9hZGVyOjpjcmVhdGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUGFyc2VkUmVxdWVzdFJhbmdlLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpQYXJzZWRSZXF1ZXN0UmFuZ2U6OnBhcnNlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZFJlcXVlc3RSYW5nZS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlBhcnNlZFJlcXVlc3RSYW5nZTo6YmVnaW4gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFyc2VkUmVxdWVzdFJhbmdlOjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UGFyc2VkUmVxdWVzdFJhbmdlOjpQYXJzZWRSZXF1ZXN0UmFuZ2UpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY29jb2EvUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5oOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1JhbmdlUmVzcG9uc2VHZW5lcmF0b3IubW06IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6RGF0YTo6RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpEYXRhOjpUYXNr
RGF0YTo6VGFza0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6c3ludGhlc2l6ZWRSZXNwb25zZUZv
clJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlUmVzcG9uc2VHZW5lcmF0b3I6OnJlbW92
ZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6Z2l2ZVJl
c3BvbnNlVG9UYXNrSWZCeXRlc0luUmFuZ2VSZWNlaXZlZCk6CisgICAgICAgIChXZWJDb3JlOjpS
YW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpleHBlY3RlZENvbnRlbnRMZW5ndGhGcm9tRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpnaXZlUmVzcG9uc2VUb1Rh
c2tzV2l0aEZpbmlzaGVkUmFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlUmVzcG9uc2VH
ZW5lcmF0b3I6OndpbGxIYW5kbGVSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlUmVz
cG9uc2VHZW5lcmF0b3I6OndpbGxTeW50aGVzaXplUmFuZ2VSZXNwb25zZXMpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5oOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5tbToKKyAgICAgICAg
KC1bV2ViQ29yZU5TVVJMU2Vzc2lvbiByYW5nZVJlc3BvbnNlR2VuZXJhdG9yXSk6CisgICAgICAg
ICgtW1dlYkNvcmVOU1VSTFNlc3Npb24gZGF0YVRhc2tXaXRoVVJMOl0pOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjpkYXRhU2VudCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OnJlc3BvbnNl
UmVjZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNr
Q2xpZW50OjpzaG91bGRDYWNoZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVO
U1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6ZGF0YVJlY2VpdmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6cmVkaXJlY3RSZWNlaXZlZCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmFj
Y2Vzc0NvbnRyb2xDaGVja0ZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlTlNVUkxT
ZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmxvYWRGYWlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
Q29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQpOgorICAgICAgICAo
LVtXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgX3Jlc3RhcnRdKToKKyAgICAgICAgKC1bV2Vi
Q29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrIF9maW5pc2hdKToKKyAgICAgICAgKC1bV2ViQ29yZU5T
VVJMU2Vzc2lvbkRhdGFUYXNrIHJlc291cmNlOnNlbnRCeXRlczp0b3RhbEJ5dGVzVG9CZVNlbnQ6
XSk6CisgICAgICAgICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayByZXNvdXJjZTpyZWNl
aXZlZFJlc3BvbnNlOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXZWJDb3JlTlNV
UkxTZXNzaW9uRGF0YVRhc2sgcmVzb3VyY2U6c2hvdWxkQ2FjaGVSZXNwb25zZTpdKToKKyAgICAg
ICAgKC1bV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrIHJlc291cmNlOnJlY2VpdmVkRGF0YTps
ZW5ndGg6XSk6CisgICAgICAgICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayByZXNvdXJj
ZTpyZWNlaXZlZFJlZGlyZWN0OnJlcXVlc3Q6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAg
ICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayBfcmVzb3VyY2U6bG9hZEZpbmlzaGVkV2l0
aEVycm9yOm1ldHJpY3M6XSk6CisgICAgICAgICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFz
ayByZXNvdXJjZTphY2Nlc3NDb250cm9sQ2hlY2tGYWlsZWRXaXRoRXJyb3I6XSk6CisgICAgICAg
ICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayByZXNvdXJjZTpsb2FkRmFpbGVkV2l0aEVy
cm9yOl0pOgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgcmVzb3VyY2VG
aW5pc2hlZDptZXRyaWNzOl0pOgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRh
c2sgaW5pdFdpdGhTZXNzaW9uOmlkZW50aWZpZXI6VVJMOl0pOiBEZWxldGVkLgorCiAyMDIxLTAy
LTA2ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSUZD
XVtRdWlya10gS2VlcCB0aGUgcm9vdCBpbmxpbmUgYm94IGJhc2VsaW5lIGFuY2hvcmVkIGF0IDAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggMTZlMTViMTM3YzRiMjJmMTZkZWY5MDdkMTYzZmQyOTA4MDEwMzE3Zi4uY2U4
N2ZlODlmMWU4NTFlZjU1YWI0YmRkNWZmNmY1OGJmMDhjZjE4YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMyBAQAorMjAyMS0wMi0wNiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgorCisgICAgICAgIFN5bnRoZXNpemUgcmFuZ2UgcmVzcG9uc2VzIGlmIG5lZWRlZCBp
biBXZWJDb3JlTlNVUkxTZXNzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjEwNzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJl
bW90ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZTo6cmVx
dWVzdFJlc291cmNlKToKKwogMjAyMS0wMi0wNSAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGUu
Y29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI3MjMzNyk6IGNyYXNoIHVuZGVyIFdlYkNvcmU6
OlNwZWVjaFJlY29nbml6ZXI6OnNldEluYWN0aXZlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggYTVlMTVj
ODUwN2Y2OWU4MTQ4ZWU3N2IzODRkZTEzODFkYTc3OTYwMC4uYzJlY2RiYzJkYzYzNTkxMzQ0ZWVj
ZGRhYTIxZjYzMDc2OTM2ODQ2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIxMTksNiArMjExOSw3IEBA
IHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRlTm90aWZpZXIuY3BwCiBwbGF0Zm9ybS9uZXR3
b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5jcHAKIHBsYXRmb3JtL25ldHdvcmsvUGFyc2VkQ29u
dGVudFJhbmdlLmNwcAogcGxhdGZvcm0vbmV0d29yay9QYXJzZWRDb250ZW50VHlwZS5jcHAKK3Bs
YXRmb3JtL25ldHdvcmsvUGFyc2VkUmVxdWVzdFJhbmdlLmNwcAogcGxhdGZvcm0vbmV0d29yay9Q
cm90ZWN0aW9uU3BhY2VCYXNlLmNwcAogcGxhdGZvcm0vbmV0d29yay9Qcm94eVNlcnZlci5jcHAK
IHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VFcnJvckJhc2UuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dAppbmRleCBkMmIzNDIzNjI1NWE0MTdmM2FhMTYzNjVlMTAzYmI3YzEyMjA3MjQ2Li5kMzE5
ZTE4ZjEyOGFhOGVkNmY1YzBlY2RlZGJiOWU3ZTM2M2Y1MTYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2Nv
YS50eHQKQEAgLTU3MCw2ICs1NzAsNyBAQCBwbGF0Zm9ybS9uZXR3b3JrL2NvY29hL0NyZWRlbnRp
YWxDb2NvYS5tbQogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrTG9hZE1ldHJpY3MubW0K
IHBsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0KIHBs
YXRmb3JtL25ldHdvcmsvY29jb2EvUHJvdGVjdGlvblNwYWNlQ29jb2EubW0KK3BsYXRmb3JtL25l
dHdvcmsvY29jb2EvUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5tbQogcGxhdGZvcm0vbmV0d29yay9j
b2NvYS9SZXNvdXJjZVJlcXVlc3RDb2NvYS5tbQogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9SZXNv
dXJjZVJlc3BvbnNlQ29jb2EubW0gQG5vLXVuaWZ5IC8vIFVuc2FmZSB0byB1bmlmeSB1bnRpbCBy
ZGFyOi8vcHJvYmxlbS80ODg1MzEzNyBpcyByZXNvbHZlZAogcGxhdGZvcm0vbmV0d29yay9jb2Nv
YS9XZWJDb3JlTlNVUkxTZXNzaW9uLm1tIEBuby11bmlmeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGJkM2JjMTYwZDhiYWY0N2I0
MTYyMjg4MDc3NjU2MDJiNWQyYjQ0OTIuLjBlMzk3YWM2MmU3NTZkMWYzN2UzMWYxYmZmYWY3NmFj
MWNhMTBjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTE5NDEsNiArMTk0MSw4IEBACiAJCTVDMkIxQUVDMjIzOTdFQkMwMEI5
MUNGNyAvKiBSZXNvdXJjZVJlc3BvbnNlQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMUY3OEQwQjFDMjU0MjJDMDAyNDU0NDYgLyogUmVzb3Vy
Y2VSZXNwb25zZUNvY29hLm1tICovOyB9OwogCQk1QzQzMDRCMTE5MUFDOTA4MDAwRTJCQzAgLyog
RVhUU2hhZGVyVGV4dHVyZUxPRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUM0MzA0QUUxOTFBQzkwODAwMEUyQkMwIC8qIEVYVFNoYWRlclRleHR1cmVM
T0QuaCAqLzsgfTsKIAkJNUM0MzA0QjYxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4
dHVyZUxPRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUM0MzA0QjQxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oICovOyB9
OworCQk1QzRBMEZENzI1QzM0MzUwMDBEOUVFOTcgLyogUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM0QTBGRDUy
NUMzNDJDODAwRDlFRTk3IC8qIFJhbmdlUmVzcG9uc2VHZW5lcmF0b3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1QzRBMEZEQTI1QzM0NDlBMDBE
OUVFOTcgLyogUGFyc2VkUmVxdWVzdFJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1QzRBMEZEODI1QzM0NDZDMDBEOUVFOTcgLyogUGFyc2VkUmVx
dWVzdFJhbmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNUM1M0RDRTEyNDQ2NURGQzAwQTkzMTI0IC8qIEFwcGxlUGF5U2V0dXBGZWF0dXJlV2Vi
Q29yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM1
M0RDQ0YyNDQ2NDQ5OTAwQTkzMTI0IC8qIEFwcGxlUGF5U2V0dXBGZWF0dXJlV2ViQ29yZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDNTNEQ0U3
MjQ0NjhBRDIwMEE5MzEyNCAvKiBQYXltZW50SW5zdGFsbG1lbnRDb25maWd1cmF0aW9uV2ViQ29y
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM1M0RD
Q0UyNDQ2NDQ5OTAwQTkzMTI0IC8qIFBheW1lbnRJbnN0YWxsbWVudENvbmZpZ3VyYXRpb25XZWJD
b3JlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NUM1M0RDRUEyNDQ2OEZCNDAwQTkzMTI0IC8qIEFwcGxlUGF5U2V0dXBXZWJDb3JlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzUzRENDQjI0NDY0NDk4
MDBBOTMxMjQgLyogQXBwbGVQYXlTZXR1cFdlYkNvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTQ4NSw2ICs5NDg3LDExIEBACiAJCTVDNDMw
NEFGMTkxQUM5MDgwMDBFMkJDMCAvKiBFWFRTaGFkZXJUZXh0dXJlTE9ELmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBFWFRTaGFkZXJUZXh0dXJlTE9ELmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNUM0MzA0QjMxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4dHVy
ZUxPRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVFNoYWRl
clRleHR1cmVMT0QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzQzMDRCNDE5
MUFFRjQ2MDAwRTJCQzAgLyogSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1QzRBMEZEMzI1QzM0MkM3MDBEOUVFOTcgLyogUmFuZ2VSZXNwb25z
ZUdlbmVyYXRvci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJh
bmdlUmVzcG9uc2VHZW5lcmF0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVD
NEEwRkQ1MjVDMzQyQzgwMEQ5RUU5NyAvKiBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmdlUmVzcG9uc2VHZW5lcmF0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QTBGRDYyNUMzNDJEQjAwRDlFRTk3IC8qIENl
cnRpZmljYXRlSW5mb0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gQ2VydGlmaWNhdGVJbmZvQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTVDNEEwRkQ4MjVDMzQ0NkMwMEQ5RUU5NyAvKiBQYXJzZWRSZXF1ZXN0UmFuZ2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VkUmVxdWVzdFJhbmdlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEEwRkQ5MjVDMzQ0NkQwMEQ5RUU5NyAvKiBQYXJz
ZWRSZXF1ZXN0UmFuZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGFyc2VkUmVxdWVzdFJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM1
MzgxQUYxRDg3OTNFMDAwRTJFQkU2IC8qIFVSTFNlYXJjaFBhcmFtcy5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gVVJMU2VhcmNoUGFyYW1zLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNUM1MzgxQjAxRDg3RDQ1NzAwRTJFQkU2IC8qIFVSTFNlYXJjaFBhcmFtcy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxTZWFyY2hQYXJhbXMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzUzODFCMTFEODdENDU3MDBFMkVCRTYgLyog
VVJMU2VhcmNoUGFyYW1zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVSTFNl
YXJjaFBhcmFtcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE4MjQsNiArMjE4
MzEsOCBAQAogCQkJCUNEQ0Q0MUU2MUMzRERCMDkwMDk2NUQ5OSAvKiBQYXJzZWRDb250ZW50UmFu
Z2UuaCAqLywKIAkJCQk0NDc5NTgwMjE2NDNCNDdCMDAxRTBBN0YgLyogUGFyc2VkQ29udGVudFR5
cGUuY3BwICovLAogCQkJCTQ0Nzk1ODAzMTY0M0I0N0IwMDFFMEE3RiAvKiBQYXJzZWRDb250ZW50
VHlwZS5oICovLAorCQkJCTVDNEEwRkQ5MjVDMzQ0NkQwMEQ5RUU5NyAvKiBQYXJzZWRSZXF1ZXN0
UmFuZ2UuY3BwICovLAorCQkJCTVDNEEwRkQ4MjVDMzQ0NkMwMEQ5RUU5NyAvKiBQYXJzZWRSZXF1
ZXN0UmFuZ2UuaCAqLywKIAkJCQkzN0JBQUU1NzE5ODBEMUREMDA1REZFNzEgLyogUHJvdGVjdGlv
blNwYWNlLmggKi8sCiAJCQkJNTE0Qzc2NUYwQ0U5MjNBMTAwN0VGM0NEIC8qIFByb3RlY3Rpb25T
cGFjZUJhc2UuY3BwICovLAogCQkJCTUxNEM3NjYwMENFOTIzQTEwMDdFRjNDRCAvKiBQcm90ZWN0
aW9uU3BhY2VCYXNlLmggKi8sCkBAIC0yMjkwNiw2ICsyMjkxNSw3IEBACiAJCTdFN0RFMUZFMTk1
Q0VGMkQwMDM1MzYzQiAvKiBjb2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJNUM0QTBGRDYyNUMzNDJEQjAwRDlFRTk3IC8qIENlcnRpZmljYXRlSW5m
b0NvY29hLm1tICovLAogCQkJCTUxRDEyNDhDMUU3MzY0NTYwMDJCMjgyMCAvKiBDb29raWVDb2Nv
YS5tbSAqLywKIAkJCQk1MTIwQkJBRDFGMUNFNzcwMDBFRkVCRjEgLyogQ29va2llU3RvcmFnZU9i
c2VydmVyLmggKi8sCiAJCQkJNTEyMEJCQUMxRjFDRTc3MDAwRUZFQkYxIC8qIENvb2tpZVN0b3Jh
Z2VPYnNlcnZlci5tbSAqLywKQEAgLTIyOTE2LDYgKzIyOTI2LDggQEAKIAkJCQk1MUQxMjQ4QTFF
NzM2MjVDMDAyQjI4MjAgLyogTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0gKi8sCiAJCQkJ
MzcyQURBMzcxOTdGNDdCOTAwRkM1MDFFIC8qIFByb3RlY3Rpb25TcGFjZUNvY29hLmggKi8sCiAJ
CQkJMzcyQURBMzkxOTdGNjg3NjAwRkM1MDFFIC8qIFByb3RlY3Rpb25TcGFjZUNvY29hLm1tICov
LAorCQkJCTVDNEEwRkQ1MjVDMzQyQzgwMEQ5RUU5NyAvKiBSYW5nZVJlc3BvbnNlR2VuZXJhdG9y
LmggKi8sCisJCQkJNUM0QTBGRDMyNUMzNDJDNzAwRDlFRTk3IC8qIFJhbmdlUmVzcG9uc2VHZW5l
cmF0b3IubW0gKi8sCiAJCQkJN0U3REUxRkMxOTVDRUYyNjAwMzUzNjNCIC8qIFJlc291cmNlUmVx
dWVzdENvY29hLm1tICovLAogCQkJCUExRjc4RDBCMUMyNTQyMkMwMDI0NTQ0NiAvKiBSZXNvdXJj
ZVJlc3BvbnNlQ29jb2EubW0gKi8sCiAJCQkJQ0QyMjVDMEExQzQ2RkJGNDAwMTQwNzYxIC8qIFdl
YkNvcmVOU1VSTFNlc3Npb24uaCAqLywKQEAgLTMzOTc1LDYgKzMzOTg3LDcgQEAKIAkJCQlBMTg4
OTBBRjFBQTEzRjI1MDAyNkMzMDEgLyogUGFyZW50YWxDb250cm9sc0NvbnRlbnRGaWx0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUNEQ0Q0MUU4MUMzRERCMEEwMDk2NUQ5OSAvKiBQYXJzZWRDb250
ZW50UmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0Nzk1ODA0MTY0M0I0OUEwMDFFMEE3RiAv
KiBQYXJzZWRDb250ZW50VHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUM0QTBGREEyNUMzNDQ5
QTAwRDlFRTk3IC8qIFBhcnNlZFJlcXVlc3RSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM2
RDVBMjMxOTNFOEUwQzAwQ0U0Q0FCIC8qIFBhcnNpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUY1NUIzRENBMTI1MUYxMkQwMDNFRjI2OSAvKiBQYXNzd29yZElucHV0VHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNEIyNzA4QzcwQUYxOUVFNDAwNjUxMjdGIC8qIFBhc3RlYm9hcmQu
aCBpbiBIZWFkZXJzICovLApAQCAtMzQxNzgsNiArMzQxOTEsNyBAQAogCQkJCTkzRjE5OTE4MDgy
NDVFNTkwMDFFOUFCQyAvKiBSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNEOUQ1M0MwREEy
N0UxODAwNzcyMTZDIC8qIFJhbmdlQm91bmRhcnlQb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RjU1QjNEQ0UxMjUxRjEyRDAwM0VGMjY5IC8qIFJhbmdlSW5wdXRUeXBlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1QzRBMEZENzI1QzM0MzUwMDBEOUVFOTcgLyogUmFuZ2VSZXNwb25zZUdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU4NEU5RTExNzY2OEJGMTAwODE1QjY4IC8qIFJhc3Rl
clNoYXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODREODI3QzExRDMzM0VEMDA5NzI5OTAgLyog
UmF3RGF0YURvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTZFNkZFODFCQkQx
MkRGMDAwQTYwNDMgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaAppbmRleCA1N2JmZThhY2Q2Mjg1
ZmViOWIyZWI4YjIyMmEyYjE0MDlhMjEwMTYwLi4zZWQ0ZTA1YzQzOTRkZmY2M2FlNWZjNmJhMWVm
MWE4MDQyNTQzY2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaApAQCAtNDEsNyArNDEs
NyBAQCBjbGFzcyBSZXNvdXJjZUVycm9yOwogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3Mg
UmVzb3VyY2VSZXNwb25zZTsKIAotY2xhc3MgUGxhdGZvcm1NZWRpYVJlc291cmNlQ2xpZW50IHsK
K2NsYXNzIFBsYXRmb3JtTWVkaWFSZXNvdXJjZUNsaWVudCA6IHB1YmxpYyBSZWZDb3VudGVkPFBs
YXRmb3JtTWVkaWFSZXNvdXJjZUNsaWVudD4gewogcHVibGljOgogICAgIHZpcnR1YWwgflBsYXRm
b3JtTWVkaWFSZXNvdXJjZUNsaWVudCgpID0gZGVmYXVsdDsKIApAQCAtODEsMTEgKzgxLDExIEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBk
aWRQYXNzQWNjZXNzQ29udHJvbENoZWNrKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAg
IHZvaWQgc2V0Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybU1lZGlhUmVzb3VyY2VDbGll
bnQ+JiYgY2xpZW50KSB7IG1fY2xpZW50ID0gV1RGTW92ZShjbGllbnQpOyB9CisgICAgdm9pZCBz
ZXRDbGllbnQoUmVmUHRyPFBsYXRmb3JtTWVkaWFSZXNvdXJjZUNsaWVudD4mJiBjbGllbnQpIHsg
bV9jbGllbnQgPSBXVEZNb3ZlKGNsaWVudCk7IH0KICAgICBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VD
bGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50LmdldCgpOyB9CiAKIHByb3RlY3RlZDoK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1NZWRpYVJlc291cmNlQ2xpZW50PiBtX2NsaWVu
dDsKKyAgICBSZWZQdHI8UGxhdGZvcm1NZWRpYVJlc291cmNlQ2xpZW50PiBtX2NsaWVudDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1dlYkNvcmVBVkZSZXNvdXJjZUxvYWRl
ci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L1dlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5tbQppbmRleCBjODU1ZGUwODhiNmQ5NDRkYTZmYzQ1
NTIyZmZiYjJmNTAyOGM2MjFjLi40ZDVmMzU4MGViYWQzMGJmMDBjMzY5ZGEwMTVmMDM4ZTYwZmU1
YmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9XZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvV2ViQ29yZUFWRlJlc291cmNl
TG9hZGVyLm1tCkBAIC0xNzAsNyArMTcwLDcgQEAgV2Vha1B0cjxQbGF0Zm9ybVJlc291cmNlTWVk
aWFMb2FkZXI+IFBsYXRmb3JtUmVzb3VyY2VNZWRpYUxvYWRlcjo6Y3JlYXRlKFdlYkNvcmUKICAg
ICBpZiAoIXJlc291cmNlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBhdXRvKiByZXNv
dXJjZVBvaW50ZXIgPSByZXNvdXJjZS5nZXQoKTsKLSAgICBhdXRvIGNsaWVudCA9IHN0ZDo6dW5p
cXVlX3B0cjxQbGF0Zm9ybVJlc291cmNlTWVkaWFMb2FkZXI+KG5ldyBQbGF0Zm9ybVJlc291cmNl
TWVkaWFMb2FkZXIgeyBwYXJlbnQsIHJlc291cmNlLnJlbGVhc2VOb25OdWxsKCkgfSk7CisgICAg
YXV0byBjbGllbnQgPSBhZG9wdFJlZigqbmV3IFBsYXRmb3JtUmVzb3VyY2VNZWRpYUxvYWRlciB7
IHBhcmVudCwgcmVzb3VyY2UucmVsZWFzZU5vbk51bGwoKSB9KTsKICAgICBhdXRvIHJlc3VsdCA9
IG1ha2VXZWFrUHRyKGNsaWVudC5nZXQoKSk7CiAKICAgICByZXNvdXJjZVBvaW50ZXItPnNldENs
aWVudChXVEZNb3ZlKGNsaWVudCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0
cmVhbWVyLmNwcAppbmRleCBjODQ0YmUyZGQzNzI3ZWYyNzY0YjcyNTcwNmQyMjA2MjY3YmViNDk3
Li5lNzlmODY1ZDg4MDI5ODg0MDE0MTE3MDFkMzdmNTc2OGQyNWFmYmViIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNl
R1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcApAQCAtNjk5LDcgKzY5OSw3IEBAIHN0
YXRpYyB2b2lkIHdlYktpdFdlYlNyY01ha2VSZXF1ZXN0KFdlYktpdFdlYlNyYyogc3JjLCBEYXRh
TXV0ZXg8V2ViS2l0V2ViU3JjUHJpCiAgICAgICAgIFBsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRl
cjo6TG9hZE9wdGlvbnMgbG9hZE9wdGlvbnMgPSAwOwogICAgICAgICBtZW1iZXJzLT5yZXNvdXJj
ZSA9IG1lbWJlcnMtPmxvYWRlci0+cmVxdWVzdFJlc291cmNlKFJlc291cmNlUmVxdWVzdChyZXF1
ZXN0KSwgbG9hZE9wdGlvbnMpOwogICAgICAgICBpZiAobWVtYmVycy0+cmVzb3VyY2UpIHsKLSAg
ICAgICAgICAgIG1lbWJlcnMtPnJlc291cmNlLT5zZXRDbGllbnQobWFrZVVuaXF1ZTxDYWNoZWRS
ZXNvdXJjZVN0cmVhbWluZ0NsaWVudD4ocHJvdGVjdG9yLmdldCgpLCBSZXNvdXJjZVJlcXVlc3Qo
cmVxdWVzdCksIHJlcXVlc3ROdW1iZXIpKTsKKyAgICAgICAgICAgIG1lbWJlcnMtPnJlc291cmNl
LT5zZXRDbGllbnQoYWRvcHRSZWYoKm5ldyBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudChw
cm90ZWN0b3IuZ2V0KCksIFJlc291cmNlUmVxdWVzdChyZXF1ZXN0KSwgcmVxdWVzdE51bWJlcikp
KTsKICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocHJvdGVjdG9yLmdldCgpLCAiU3RhcnRl
ZCByZXF1ZXN0IFIldSIsIHJlcXVlc3ROdW1iZXIpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgR1NUX0VSUk9SX09CSkVDVChwcm90ZWN0b3IuZ2V0KCksICJGYWlsZWQgdG8gc2V0dXAg
c3RyZWFtaW5nIGNsaWVudCB0byBoYW5kbGUgUiV1IiwgcmVxdWVzdE51bWJlcik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZFJlcXVlc3RSYW5nZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZFJlcXVlc3RSYW5nZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMDNhMGVlZDc3NTNmOGQ3NGM0YWY4ZDJhMjg0NmNhYTU1MDlmZTZmOQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGFyc2Vk
UmVxdWVzdFJhbmdlLmNwcApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQ
YXJzZWRSZXF1ZXN0UmFuZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitPcHRpb25hbDxQ
YXJzZWRSZXF1ZXN0UmFuZ2U+IFBhcnNlZFJlcXVlc3RSYW5nZTo6cGFyc2UoY29uc3QgU3RyaW5n
JiBpbnB1dCkKK3sKKyAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMyNz
ZWN0aW9uLTIuMSBidXQgYXNzdW1pbmcgdGhlcmUgd2lsbCBhbHdheXMgYmUgYSBiZWdpbiBhbmQg
YW4gZW5kIG9yIHBhcnNpbmcgd2lsbCBmYWlsCisgICAgaWYgKCFpbnB1dC5zdGFydHNXaXRoKCJi
eXRlcz0iX3MpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgc2l6ZV90IGJl
Z2luIHsgMCB9OworICAgIHNpemVfdCBlbmQgeyAwIH07CisgICAgc2l6ZV90IHJhbmdlQmVnaW5Q
b3NpdGlvbiA9IDY7CisgICAgc2l6ZV90IGRhc2hQb3NpdGlvbiA9IGlucHV0LmZpbmQoJy0nLCBy
YW5nZUJlZ2luUG9zaXRpb24pOworICAgIGlmIChkYXNoUG9zaXRpb24gPT0gbm90Rm91bmQpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAvLyBGSVhNRTogQWRkIFN0cmluZ1Zp
ZXcudG9VSW50NjRTdHJpY3QgdG8gYXZvaWQgdGhlc2UgdW5uZWNlc3NhcnkgU3RyaW5nIGNvcGll
cy4KKyAgICAvLyBTYW1lIGluIFBhcnNlZENvbnRlbnRSYW5nZS4KKyAgICBib29sIG9rID0gdHJ1
ZTsKKyAgICBTdHJpbmcgYmVnaW5TdHJpbmcgPSBpbnB1dC5zdWJzdHJpbmcocmFuZ2VCZWdpblBv
c2l0aW9uLCBkYXNoUG9zaXRpb24gLSByYW5nZUJlZ2luUG9zaXRpb24pOworICAgIGJlZ2luID0g
YmVnaW5TdHJpbmcudG9VSW50NjRTdHJpY3QoJm9rKTsKKyAgICBpZiAoIW9rKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgU3RyaW5nIGVuZFN0cmluZyA9IGlucHV0LnN1YnN0
cmluZyhkYXNoUG9zaXRpb24gKyAxKTsKKyAgICBlbmQgPSBlbmRTdHJpbmcudG9VSW50NjRTdHJp
Y3QoJm9rKTsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisg
ICAgaWYgKGJlZ2luID4gZW5kKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAg
cmV0dXJuIHt7IGJlZ2luLCBlbmQgfX07Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUGFyc2VkUmVxdWVzdFJhbmdlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZFJlcXVlc3RSYW5nZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhYmRi
NjNlYWQ1ZWVmMTNkOTI4NTUwNDlmNmYxM2ZlOGUxNjliNWUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZFJlcXVlc3RSYW5nZS5oCkBAIC0w
LDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9I
YXNoVHJhaXRzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGFyc2VkUmVxdWVz
dFJhbmdlIHsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgT3B0aW9uYWw8UGFy
c2VkUmVxdWVzdFJhbmdlPiBwYXJzZShjb25zdCBTdHJpbmcmKTsKKworICAgIHNpemVfdCBiZWdp
bigpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW47IH0KKyAgICBzaXplX3QgZW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9lbmQ7IH0KKworcHJpdmF0ZToKKyAgICBQYXJzZWRSZXF1ZXN0UmFuZ2Uoc2l6ZV90
IGJlZ2luLCBzaXplX3QgZW5kKQorICAgICAgICA6IG1fYmVnaW4oYmVnaW4pCisgICAgICAgICwg
bV9lbmQoZW5kKSB7IH0KKworICAgIHNpemVfdCBtX2JlZ2luIHsgMCB9OworICAgIHNpemVfdCBt
X2VuZCB7IDAgfTsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY29jb2EvUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jb2NvYS9SYW5nZVJlc3BvbnNlR2VuZXJhdG9yLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYmYyOGJhNzUxZjdmZDI1MmJlZDNmMjQwYjEyNzZhYTE1ODExZTdjMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvUmFuZ2VSZXNwb25z
ZUdlbmVyYXRvci5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9VUkxIYXNoLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKwor
T0JKQ19DTEFTUyBOU1VSTFJlcXVlc3Q7CitPQkpDX0NMQVNTIFdlYkNvcmVOU1VSTFNlc3Npb25E
YXRhVGFzazsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQYXJzZWRSZXF1ZXN0UmFu
Z2U7CitjbGFzcyBQbGF0Zm9ybU1lZGlhUmVzb3VyY2U7CitjbGFzcyBSZXNvdXJjZVJlc3BvbnNl
OworCitjbGFzcyBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yIDogcHVibGljIENhbk1ha2VXZWFrUHRy
PFJhbmdlUmVzcG9uc2VHZW5lcmF0b3I+IHsKK3B1YmxpYzoKKyAgICBSYW5nZVJlc3BvbnNlR2Vu
ZXJhdG9yKCk7CisgICAgflJhbmdlUmVzcG9uc2VHZW5lcmF0b3IoKTsKKworICAgIGJvb2wgd2ls
bFN5bnRoZXNpemVSYW5nZVJlc3BvbnNlcyhXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgKiwg
UGxhdGZvcm1NZWRpYVJlc291cmNlJiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIGJv
b2wgd2lsbEhhbmRsZVJlcXVlc3QoV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICosIE5TVVJM
UmVxdWVzdCAqKTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgRGF0YTsKKyAgICB2b2lkIGdpdmVS
ZXNwb25zZVRvVGFza3NXaXRoRmluaXNoZWRSYW5nZXMoRGF0YSYpOworICAgIHZvaWQgZ2l2ZVJl
c3BvbnNlVG9UYXNrSWZCeXRlc0luUmFuZ2VSZWNlaXZlZChXZWJDb3JlTlNVUkxTZXNzaW9uRGF0
YVRhc2sgKiwgY29uc3QgUGFyc2VkUmVxdWVzdFJhbmdlJiwgT3B0aW9uYWw8c2l6ZV90PiBleHBl
Y3RlZENvbnRlbnRMZW5ndGgsIGNvbnN0IERhdGEmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8c2l6
ZV90PiBleHBlY3RlZENvbnRlbnRMZW5ndGhGcm9tRGF0YShjb25zdCBEYXRhJik7CisgICAgdm9p
ZCByZW1vdmVUYXNrKFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAqKTsKKworICAgIEhhc2hN
YXA8VVJMLCBzdGQ6OnVuaXF1ZV9wdHI8RGF0YT4+IG1fbWFwOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
b2NvYS9SYW5nZVJlc3BvbnNlR2VuZXJhdG9yLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jb2NvYS9SYW5nZVJlc3BvbnNlR2VuZXJhdG9yLm1tCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcxYzli
ZDI5ZDlkMWI0YjAzOTBjMTIzZDE2MmYxMTE5ZWZiZTk5ODUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1JhbmdlUmVzcG9uc2VHZW5lcmF0
b3IubW0KQEAgLTAsMCArMSwyODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlJhbmdlUmVzcG9uc2VHZW5lcmF0b3IuaCIKKworI2ltcG9ydCAiTmV0d29ya0xv
YWRNZXRyaWNzLmgiCisjaW1wb3J0ICJQYXJzZWRSZXF1ZXN0UmFuZ2UuaCIKKyNpbXBvcnQgIlBs
YXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oIgorI2ltcG9ydCAiUmVzb3VyY2VSZXNwb25zZS5o
IgorI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCisjaW1wb3J0ICJXZWJDb3JlTlNVUkxTZXNzaW9u
LmgiCisjaW1wb3J0IDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oPgorI2ltcG9ydCA8d3RmL0Zh
c3RNYWxsb2MuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgUmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6RGF0YSB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRGF0YShjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSwgUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvdXJjZSkK
KyAgICAgICAgOiBidWZmZXIoU2hhcmVkQnVmZmVyOjpjcmVhdGUoKSkKKyAgICAgICAgLCBvcmln
aW5hbFJlc3BvbnNlKHJlc3BvbnNlKQorICAgICAgICAsIHJlc291cmNlKCZyZXNvdXJjZSkgeyB9
CisKKyAgICBzdHJ1Y3QgVGFza0RhdGEgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8VGFza0RhdGE+
IHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAg
ICBUYXNrRGF0YShQYXJzZWRSZXF1ZXN0UmFuZ2UmJiByYW5nZSkKKyAgICAgICAgICAgIDogcmFu
Z2UoV1RGTW92ZShyYW5nZSkpCisgICAgICAgICAgICAsIG5leHRCeXRlVG9HaXZlQnVmZmVySW5k
ZXgocmFuZ2UuYmVnaW4oKSkgeyB9CisKKyAgICAgICAgUGFyc2VkUmVxdWVzdFJhbmdlIHJhbmdl
OworICAgICAgICBzaXplX3QgbmV4dEJ5dGVUb0dpdmVCdWZmZXJJbmRleCB7IDAgfTsKKyAgICAg
ICAgYm9vbCBzeW50aGVzaXplZFJlc3BvbnNlIHsgZmFsc2UgfTsKKyAgICB9OworICAgIAorICAg
IEhhc2hNYXA8UmV0YWluUHRyPFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzaz4sIHN0ZDo6dW5p
cXVlX3B0cjxUYXNrRGF0YT4+IHRhc2tEYXRhOworICAgIFJlZjxTaGFyZWRCdWZmZXI+IGJ1ZmZl
cjsKKyAgICBSZXNvdXJjZVJlc3BvbnNlIG9yaWdpbmFsUmVzcG9uc2U7CisgICAgZW51bSBjbGFz
cyBTdWNjZXNzZnVsbHlGaW5pc2hlZExvYWRpbmcgOiBib29sIHsgTm8sIFllcyB9IHN1Y2Nlc3Nm
dWxseUZpbmlzaGVkTG9hZGluZyB7IFN1Y2Nlc3NmdWxseUZpbmlzaGVkTG9hZGluZzo6Tm8gfTsK
KyAgICBSZWZQdHI8UGxhdGZvcm1NZWRpYVJlc291cmNlPiByZXNvdXJjZTsKK307CisKK1Jhbmdl
UmVzcG9uc2VHZW5lcmF0b3I6OlJhbmdlUmVzcG9uc2VHZW5lcmF0b3IoKSA9IGRlZmF1bHQ7CitS
YW5nZVJlc3BvbnNlR2VuZXJhdG9yOjp+UmFuZ2VSZXNwb25zZUdlbmVyYXRvcigpID0gZGVmYXVs
dDsKKworc3RhdGljIFJlc291cmNlUmVzcG9uc2Ugc3ludGhlc2l6ZWRSZXNwb25zZUZvclJhbmdl
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIG9yaWdpbmFsUmVzcG9uc2UsIGNvbnN0IFBhcnNlZFJl
cXVlc3RSYW5nZSYgcGFyc2VkUmVxdWVzdFJhbmdlLCBPcHRpb25hbDxzaXplX3Q+IHRvdGFsQ29u
dGVudExlbmd0aCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGF1dG8gYmVn
aW4gPSBwYXJzZWRSZXF1ZXN0UmFuZ2UuYmVnaW4oKTsKKyAgICBhdXRvIGVuZCA9IHBhcnNlZFJl
cXVlc3RSYW5nZS5lbmQoKTsKKworICAgIGF1dG8gbmV3Q29udGVudFJhbmdlID0gbWFrZVN0cmlu
ZygiYnl0ZXMgIiwgYmVnaW4sICItIiwgZW5kLCAiLyIsICh0b3RhbENvbnRlbnRMZW5ndGggPyBt
YWtlU3RyaW5nKCp0b3RhbENvbnRlbnRMZW5ndGgpIDogIioiKSk7CisgICAgYXV0byBuZXdDb250
ZW50TGVuZ3RoID0gbWFrZVN0cmluZyhlbmQgLSBiZWdpbiArIDEpOworCisgICAgUmVzb3VyY2VS
ZXNwb25zZSBuZXdSZXNwb25zZSA9IG9yaWdpbmFsUmVzcG9uc2U7CisgICAgbmV3UmVzcG9uc2Uu
c2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50UmFuZ2UsIG5ld0NvbnRl
bnRSYW5nZSk7CisgICAgbmV3UmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJO
YW1lOjpDb250ZW50TGVuZ3RoLCBuZXdDb250ZW50TGVuZ3RoKTsKKyAgICBjb25zdGV4cHIgYXV0
byBwYXJ0aWFsQ29udGVudCA9IDIwNjsKKyAgICBuZXdSZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29k
ZShwYXJ0aWFsQ29udGVudCk7CisKKyAgICByZXR1cm4gbmV3UmVzcG9uc2U7Cit9CisKK3ZvaWQg
UmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6cmVtb3ZlVGFzayhXZWJDb3JlTlNVUkxTZXNzaW9uRGF0
YVRhc2sgKnRhc2spCit7CisgICAgY2FsbE9uTWFpblRocmVhZChbdGFzayA9IHJldGFpblB0cih0
YXNrKSwgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIHsKKyAgICAgICAgaWYgKCF3ZWFr
VGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byogZGF0YSA9IHdlYWtUaGlz
LT5tX21hcC5nZXQodGFzay5nZXQoKS5vcmlnaW5hbFJlcXVlc3QuVVJMKTsKKyAgICAgICAgaWYg
KCFkYXRhKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkYXRhLT50YXNrRGF0YS5yZW1v
dmUodGFzayk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6Z2l2
ZVJlc3BvbnNlVG9UYXNrSWZCeXRlc0luUmFuZ2VSZWNlaXZlZChXZWJDb3JlTlNVUkxTZXNzaW9u
RGF0YVRhc2sgKnRhc2ssIGNvbnN0IFBhcnNlZFJlcXVlc3RSYW5nZSYgcmFuZ2UsIE9wdGlvbmFs
PHNpemVfdD4gZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCBjb25zdCBEYXRhJiBkYXRhKQoreworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgYXV0byBidWZmZXIgPSBkYXRhLmJ1ZmZlcjsK
KyAgICBhdXRvIGJ1ZmZlclNpemUgPSBidWZmZXItPnNpemUoKTsKKworICAgIGlmIChidWZmZXJT
aXplIDwgcmFuZ2UuYmVnaW4oKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGF1dG8qIHRh
c2tEYXRhID0gZGF0YS50YXNrRGF0YS5nZXQodGFzayk7CisgICAgaWYgKCF0YXNrRGF0YSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIGF1dG8gZ2l2ZUJ5dGVzVG9UYXNrID0gW3Rhc2sgPSBy
ZXRhaW5QdHIodGFzayksIGJ1ZmZlciwgdGFza0RhdGEgPSBtYWtlV2Vha1B0cigqdGFza0RhdGEp
LCBnZW5lcmF0b3IgPSBtYWtlV2Vha1B0cigqdGhpcyldIHsKKyAgICAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICAgICAgaWYgKCF0YXNrRGF0YSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgYXV0byYgcmFuZ2UgPSB0YXNrRGF0YS0+cmFuZ2U7CisgICAgICAgIGF1dG8mIGJ5
dGVJbmRleCA9IHRhc2tEYXRhLT5uZXh0Qnl0ZVRvR2l2ZUJ1ZmZlckluZGV4OworICAgICAgICB3
aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYgKGJ5dGVJbmRleCA+PSBidWZmZXItPnNpemUo
KSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGF1dG8gYnVmZmVyVmlldyA9
IGJ1ZmZlci0+Z2V0U29tZURhdGEoYnl0ZUluZGV4KTsKKyAgICAgICAgICAgIGlmICghYnVmZmVy
Vmlldy5zaXplKCkgfHwgYnl0ZUluZGV4ID4gcmFuZ2UuZW5kKCkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgIHNpemVfdCBieXRlc0Zyb21UaGlzVmlld1RvRGVsaXZlciA9
IHN0ZDo6bWluKGJ1ZmZlclZpZXcuc2l6ZSgpLCByYW5nZS5lbmQoKSAtIGJ5dGVJbmRleCArIDEp
OworICAgICAgICAgICAgYnl0ZUluZGV4ICs9IGJ5dGVzRnJvbVRoaXNWaWV3VG9EZWxpdmVyOwor
ICAgICAgICAgICAgW3Rhc2sgcmVzb3VyY2U6bnVsbHB0ciByZWNlaXZlZERhdGE6YnVmZmVyVmll
dy5kYXRhKCkgbGVuZ3RoOmJ5dGVzRnJvbVRoaXNWaWV3VG9EZWxpdmVyXTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoYnl0ZUluZGV4ID49IHJhbmdlLmVuZCgpKSB7CisgICAgICAgICAgICBbdGFz
ayByZXNvdXJjZUZpbmlzaGVkOm51bGxwdHIgbWV0cmljczpOZXR3b3JrTG9hZE1ldHJpY3MgeyB9
XTsKKyAgICAgICAgICAgIGlmIChnZW5lcmF0b3IpCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9y
LT5yZW1vdmVUYXNrKHRhc2suZ2V0KCkpOworICAgICAgICB9CisgICAgfTsKKworICAgIGlmICgh
c3RkOjpleGNoYW5nZSh0YXNrRGF0YS0+c3ludGhlc2l6ZWRSZXNwb25zZSwgdHJ1ZSkpIHsKKyAg
ICAgICAgYXV0byByZXNwb25zZSA9IHN5bnRoZXNpemVkUmVzcG9uc2VGb3JSYW5nZShkYXRhLm9y
aWdpbmFsUmVzcG9uc2UsIHJhbmdlLCBleHBlY3RlZENvbnRlbnRMZW5ndGgpOworICAgICAgICBb
dGFzayByZXNvdXJjZTpudWxscHRyIHJlY2VpdmVkUmVzcG9uc2U6cmVzcG9uc2UgY29tcGxldGlv
bkhhbmRsZXI6W2dpdmVCeXRlc1RvVGFzayA9IFdURk1vdmUoZ2l2ZUJ5dGVzVG9UYXNrKV0gKFdl
YkNvcmU6OlNob3VsZENvbnRpbnVlUG9saWN5Q2hlY2sgc2hvdWxkQ29udGludWUpIHsKKyAgICAg
ICAgICAgIGlmIChzaG91bGRDb250aW51ZSA9PSBTaG91bGRDb250aW51ZVBvbGljeUNoZWNrOjpZ
ZXMpCisgICAgICAgICAgICAgICAgZ2l2ZUJ5dGVzVG9UYXNrKCk7CisgICAgICAgIH1dOworICAg
IH0gZWxzZQorICAgICAgICBnaXZlQnl0ZXNUb1Rhc2soKTsKK30KKworT3B0aW9uYWw8c2l6ZV90
PiBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpleHBlY3RlZENvbnRlbnRMZW5ndGhGcm9tRGF0YShj
b25zdCBEYXRhJiBkYXRhKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYg
KGRhdGEuc3VjY2Vzc2Z1bGx5RmluaXNoZWRMb2FkaW5nID09IERhdGE6OlN1Y2Nlc3NmdWxseUZp
bmlzaGVkTG9hZGluZzo6WWVzKQorICAgICAgICByZXR1cm4gZGF0YS5idWZmZXItPnNpemUoKTsK
KworICAgIC8vIEZJWE1FOiBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6ZXhwZWN0ZWRDb250ZW50TGVu
Z3RoKCkgc2hvdWxkIHJldHVybiBPcHRpb25hbDxzaXplX3Q+IGluc3RlYWQgb2YgdXMgZG9pbmcg
dGhpcyBjaGVjayBoZXJlLgorICAgIGF1dG8gZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gZGF0YS5v
cmlnaW5hbFJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpOworICAgIGlmIChleHBlY3Rl
ZENvbnRlbnRMZW5ndGggPT0gTlNVUkxSZXNwb25zZVVua25vd25MZW5ndGgpCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIGV4cGVjdGVkQ29udGVudExlbmd0aDsKK30K
Kwordm9pZCBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpnaXZlUmVzcG9uc2VUb1Rhc2tzV2l0aEZp
bmlzaGVkUmFuZ2VzKERhdGEmIGRhdGEpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBhdXRvIGV4cGVjdGVkQ29udGVudExlbmd0aCA9IGV4cGVjdGVkQ29udGVudExlbmd0aEZy
b21EYXRhKGRhdGEpOworCisgICAgZm9yIChhdXRvJiBwYWlyIDogZGF0YS50YXNrRGF0YSkKKyAg
ICAgICAgZ2l2ZVJlc3BvbnNlVG9UYXNrSWZCeXRlc0luUmFuZ2VSZWNlaXZlZChwYWlyLmtleS5n
ZXQoKSwgcGFpci52YWx1ZS0+cmFuZ2UsIGV4cGVjdGVkQ29udGVudExlbmd0aCwgZGF0YSk7Cit9
CisKK2Jvb2wgUmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6d2lsbEhhbmRsZVJlcXVlc3QoV2ViQ29y
ZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICp0YXNrLCBOU1VSTFJlcXVlc3QgKnJlcXVlc3QpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBhdXRvKiBkYXRhID0gbV9tYXAuZ2V0KHJl
cXVlc3QuVVJMKTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGF1dG8gcmFuZ2UgPSBQYXJzZWRSZXF1ZXN0UmFuZ2U6OnBhcnNlKFtyZXF1ZXN0IHZhbHVlRm9y
SFRUUEhlYWRlckZpZWxkOkAiUmFuZ2UiXSk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgYXV0byBleHBlY3RlZENvbnRlbnRMZW5ndGggPSBleHBlY3RlZENv
bnRlbnRMZW5ndGhGcm9tRGF0YSgqZGF0YSk7CisgICAgZGF0YS0+dGFza0RhdGEuYWRkKHRhc2ss
IG1ha2VVbmlxdWU8RGF0YTo6VGFza0RhdGE+KFdURk1vdmUoKnJhbmdlKSkpOworICAgIGdpdmVS
ZXNwb25zZVRvVGFza0lmQnl0ZXNJblJhbmdlUmVjZWl2ZWQodGFzaywgKnJhbmdlLCBleHBlY3Rl
ZENvbnRlbnRMZW5ndGgsICpkYXRhKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJh
bmdlUmVzcG9uc2VHZW5lcmF0b3I6OndpbGxTeW50aGVzaXplUmFuZ2VSZXNwb25zZXMoV2ViQ29y
ZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICp0YXNrLCBQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc291
cmNlLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIE5TVVJMUmVxdWVzdCAqb3JpZ2luYWxSZXF1ZXN0ID0gdGFzay5v
cmlnaW5hbFJlcXVlc3Q7CisgICAgaWYgKCFvcmlnaW5hbFJlcXVlc3QuVVJMKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgIT0gMjAwKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFyZXNwb25zZS5odHRwSGVhZGVyRmllbGQo
SFRUUEhlYWRlck5hbWU6OkNvbnRlbnRSYW5nZSkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBhdXRvIHBhcnNlZFJlcXVlc3RSYW5nZSA9IFBhcnNlZFJlcXVlc3RSYW5n
ZTo6cGFyc2UoW29yaWdpbmFsUmVxdWVzdCB2YWx1ZUZvckhUVFBIZWFkZXJGaWVsZDpAIlJhbmdl
Il0pOworICAgIGlmICghcGFyc2VkUmVxdWVzdFJhbmdlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBjbGFzcyBDbGllbnQgOiBwdWJsaWMgUGxhdGZvcm1NZWRpYVJlc291cmNlQ2xpZW50
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIENsaWVudChSYW5nZVJlc3BvbnNlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFVSTCYmIHVybCkKKyAgICAgICAgICAgIDogbV9nZW5lcmF0b3IobWFrZVdlYWtQ
dHIoZ2VuZXJhdG9yKSkKKyAgICAgICAgICAgICwgbV91cmwoV1RGTW92ZSh1cmwpKSB7IH0KKyAg
ICBwcml2YXRlOgorCisgICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgc2hvdWxkIGhhdmUgYmVlbiBj
YWxsZWQgYmVmb3JlIGNoYW5naW5nIHRoZSBjbGllbnQgdG8gdGhpcy4KKyAgICAgICAgdm9pZCBy
ZXNwb25zZVJlY2VpdmVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNob3VsZENvbnRpbnVlUG9saWN5Q2hlY2sp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKSBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFNob3VsZENv
bnRpbnVlUG9saWN5Q2hlY2s6Ok5vKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHJlZGlyZWN0
UmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiwgUmVzb3VyY2VSZXF1ZXN0JiYsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlc291cmNlUmVxdWVz
dCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgZmluYWwKKyAgICAgICAgeworICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0p
OworICAgICAgICB9CisgICAgICAgIHZvaWQgZGF0YVNlbnQoUGxhdGZvcm1NZWRpYVJlc291cmNl
JiwgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcpIGZpbmFsCisgICAgICAg
IHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAg
IHZvaWQgYWNjZXNzQ29udHJvbENoZWNrRmFpbGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNv
bnN0IFJlc291cmNlRXJyb3ImKSBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2hvdWxkQ2FjaGVSZXNw
b25zZShQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgZmlu
YWwKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZGF0YVJlY2Vp
dmVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3Ro
KSBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgICAgICAgICAgaWYgKCFtX2dlbmVyYXRvcikKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBhdXRvKiBkYXRhID0gbV9nZW5lcmF0b3ItPm1fbWFwLmdldChtX3VybCk7Cisg
ICAgICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgZGF0YS0+YnVmZmVyLT5hcHBlbmQoYnl0ZXMsIGxlbmd0aCk7CisgICAgICAgICAgICBtX2dl
bmVyYXRvci0+Z2l2ZVJlc3BvbnNlVG9UYXNrc1dpdGhGaW5pc2hlZFJhbmdlcygqZGF0YSk7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIGxvYWRGYWlsZWQoUGxhdGZvcm1NZWRpYVJlc291cmNl
JiwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpIGZpbmFsCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgICAgICBpZiAoIW1fZ2VuZXJhdG9y
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGF1dG8gZGF0YSA9IG1fZ2Vu
ZXJhdG9yLT5tX21hcC50YWtlKG1fdXJsKTsKKyAgICAgICAgICAgIGlmICghZGF0YSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBmb3IgKGF1dG8mIHRhc2sgOiBkYXRhLT50
YXNrRGF0YS5rZXlzKCkpCisgICAgICAgICAgICAgICAgW3Rhc2sgcmVzb3VyY2U6bnVsbHB0ciBs
b2FkRmFpbGVkV2l0aEVycm9yOmVycm9yXTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgbG9h
ZEZpbmlzaGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbnN0IE5ldHdvcmtMb2FkTWV0cmlj
cyYpIGZpbmFsCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgICAgICAgICBpZiAoIW1fZ2VuZXJhdG9yKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIGF1dG8qIGRhdGEgPSBtX2dlbmVyYXRvci0+bV9tYXAuZ2V0KG1fdXJsKTsK
KyAgICAgICAgICAgIGlmICghZGF0YSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICBkYXRhLT5zdWNjZXNzZnVsbHlGaW5pc2hlZExvYWRpbmcgPSBEYXRhOjpTdWNjZXNzZnVs
bHlGaW5pc2hlZExvYWRpbmc6OlllczsKKyAgICAgICAgICAgIGRhdGEtPnJlc291cmNlID0gbnVs
bHB0cjsKKyAgICAgICAgICAgIG1fZ2VuZXJhdG9yLT5naXZlUmVzcG9uc2VUb1Rhc2tzV2l0aEZp
bmlzaGVkUmFuZ2VzKCpkYXRhKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgV2Vha1B0
cjxSYW5nZVJlc3BvbnNlR2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKKyAgICAgICAgY29uc3QgVVJM
IG1fdXJsOworICAgIH07CisKKyAgICByZXNvdXJjZS5zZXRDbGllbnQoYWRvcHRSZWYobmV3IENs
aWVudCgqdGhpcywgb3JpZ2luYWxSZXF1ZXN0LlVSTCkpKTsKKworICAgIG1fbWFwLmVuc3VyZShv
cmlnaW5hbFJlcXVlc3QuVVJMLCBbJl0geworICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxEYXRh
PihyZXNwb25zZSwgcmVzb3VyY2UpOworICAgIH0pLml0ZXJhdG9yLT52YWx1ZS0+dGFza0RhdGEu
YWRkKHRhc2ssIG1ha2VVbmlxdWU8RGF0YTo6VGFza0RhdGE+KFdURk1vdmUoKnBhcnNlZFJlcXVl
c3RSYW5nZSkpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dl
YkNvcmVOU1VSTFNlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29j
b2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5oCmluZGV4IGE4MGUyMDg4NTM5N2M3MTAyYWUzMWViNzA0
Mjc0NTM2NGJlNGRiMzIuLjc4NzVmMzBlYTZjODkzYzE5Njg5NTc5NzVjNmNhYjY3ZjI3YzY0Yzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29y
ZU5TVVJMU2Vzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29j
b2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5oCkBAIC0yMyw4ICsyMywxMCBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCiAgKi8KIAorI2ltcG9ydCAiUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5oIgogI2ltcG9ydCAi
U2VjdXJpdHlPcmlnaW4uaCIKICNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxTZXNzaW9uLmg+Cisj
aW1wb3J0IDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbXBvcnQgPHd0Zi9IYXNoU2V0Lmg+
CiAjaW1wb3J0IDx3dGYvTG9jay5oPgogI2ltcG9ydCA8d3RmL09TT2JqZWN0UHRyLmg+CkBAIC00
MSwxMiArNDMsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0OworY2xhc3MgTmV0d29ya0xvYWRNZXRyaWNzOwogY2xhc3MgUGxhdGZvcm1NZWRp
YVJlc291cmNlOwogY2xhc3MgUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyOworY2xhc3MgUmVz
b3VyY2VFcnJvcjsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKK2NsYXNzIFJlc291cmNlUmVzcG9u
c2U7CiBjbGFzcyBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ7CitlbnVtIGNsYXNz
IFNob3VsZENvbnRpbnVlUG9saWN5Q2hlY2sgOiBib29sOwogfQogCi1lbnVtIGNsYXNzIFdlYkNv
cmVOU1VSTFNlc3Npb25DT1JTQWNjZXNzQ2hlY2tSZXN1bHRzIHsKK2VudW0gY2xhc3MgV2ViQ29y
ZU5TVVJMU2Vzc2lvbkNPUlNBY2Nlc3NDaGVja1Jlc3VsdHMgOiB1aW50OF90IHsKICAgICBVbmtu
b3duLAogICAgIFBhc3MsCiAgICAgRmFpbCwKQEAgLTY3LDYgKzc0LDcgQEAgV0VCQ09SRV9FWFBP
UlQgQGludGVyZmFjZSBXZWJDb3JlTlNVUkxTZXNzaW9uIDogTlNPYmplY3QgewogICAgIE5TVUlu
dGVnZXIgX25leHRUYXNrSWRlbnRpZmllcjsKICAgICBPU09iamVjdFB0cjxkaXNwYXRjaF9xdWV1
ZV90PiBfaW50ZXJuYWxRdWV1ZTsKICAgICBXZWJDb3JlTlNVUkxTZXNzaW9uQ09SU0FjY2Vzc0No
ZWNrUmVzdWx0cyBfY29yc1Jlc3VsdHM7CisgICAgV2ViQ29yZTo6UmFuZ2VSZXNwb25zZUdlbmVy
YXRvciBfcmFuZ2VSZXNwb25zZUdlbmVyYXRvcjsKIH0KIC0gKGlkKWluaXRXaXRoUmVzb3VyY2VM
b2FkZXI6KFdlYkNvcmU6OlBsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlciYpbG9hZGVyIGRlbGVn
YXRlOihpZDxOU1VSTFNlc3Npb25UYXNrRGVsZWdhdGU+KWRlbGVnYXRlIGRlbGVnYXRlUXVldWU6
KE5TT3BlcmF0aW9uUXVldWUqKXF1ZXVlOwogQHByb3BlcnR5IChyZWFkb25seSwgcmV0YWluKSBO
U09wZXJhdGlvblF1ZXVlICpkZWxlZ2F0ZVF1ZXVlOwpAQCAtMTQzLDQgKzE1MSwxNSBAQCBXRUJD
T1JFX0VYUE9SVCBAaW50ZXJmYWNlIFdlYkNvcmVOU1VSTFNlc3Npb24gOiBOU09iamVjdCB7CiAt
ICh2b2lkKXJlc3VtZTsKIEBlbmQKIAorQGludGVyZmFjZSBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0
YVRhc2sgKFdlYktpdEludGVybmFsKQorLSAodm9pZClyZXNvdXJjZToobnVsbGFibGUgV2ViQ29y
ZTo6UGxhdGZvcm1NZWRpYVJlc291cmNlKilyZXNvdXJjZSBzZW50Qnl0ZXM6KHVuc2lnbmVkIGxv
bmcgbG9uZylieXRlc1NlbnQgdG90YWxCeXRlc1RvQmVTZW50Oih1bnNpZ25lZCBsb25nIGxvbmcp
dG90YWxCeXRlc1RvQmVTZW50OworLSAodm9pZClyZXNvdXJjZToobnVsbGFibGUgV2ViQ29yZTo6
UGxhdGZvcm1NZWRpYVJlc291cmNlKilyZXNvdXJjZSByZWNlaXZlZFJlc3BvbnNlOihjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJilyZXNwb25zZSBjb21wbGV0aW9uSGFuZGxlcjooQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpTaG91bGRDb250aW51ZVBvbGljeUNoZWNrKT4m
Jiljb21wbGV0aW9uSGFuZGxlcjsKKy0gKEJPT0wpcmVzb3VyY2U6KG51bGxhYmxlIFdlYkNvcmU6
OlBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3VyY2Ugc2hvdWxkQ2FjaGVSZXNwb25zZTooY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpcmVzcG9uc2U7CistICh2b2lkKXJlc291cmNl
OihudWxsYWJsZSBXZWJDb3JlOjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIHJlY2Vp
dmVkRGF0YTooY29uc3QgY2hhciopZGF0YSBsZW5ndGg6KGludClsZW5ndGg7CistICh2b2lkKXJl
c291cmNlOihudWxsYWJsZSBXZWJDb3JlOjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNl
IHJlY2VpdmVkUmVkaXJlY3Q6KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKXJlc3Bv
bnNlIHJlcXVlc3Q6KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmKXJlcXVlc3QgY29tcGxldGlv
bkhhbmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiYpPiYmKWNvbXBsZXRpb25IYW5kbGVyOworLSAodm9pZClyZXNvdXJjZToobnVsbGFibGUgV2Vi
Q29yZTo6UGxhdGZvcm1NZWRpYVJlc291cmNlKilyZXNvdXJjZSBhY2Nlc3NDb250cm9sQ2hlY2tG
YWlsZWRXaXRoRXJyb3I6KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKWVycm9yOworLSAo
dm9pZClyZXNvdXJjZToobnVsbGFibGUgV2ViQ29yZTo6UGxhdGZvcm1NZWRpYVJlc291cmNlKily
ZXNvdXJjZSBsb2FkRmFpbGVkV2l0aEVycm9yOihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9y
JillcnJvcjsKKy0gKHZvaWQpcmVzb3VyY2VGaW5pc2hlZDoobnVsbGFibGUgV2ViQ29yZTo6UGxh
dGZvcm1NZWRpYVJlc291cmNlKilyZXNvdXJjZSBtZXRyaWNzOihjb25zdCBXZWJDb3JlOjpOZXR3
b3JrTG9hZE1ldHJpY3MmKW1ldHJpY3M7CitAZW5kCisKIE5TX0FTU1VNRV9OT05OVUxMX0VORApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3Jl
TlNVUkxTZXNzaW9uLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9X
ZWJDb3JlTlNVUkxTZXNzaW9uLm1tCmluZGV4IDkwMjEyODdiZGRmNDczN2Q4NDFhNTVlMTcwYTNl
YzE4OWFjZWU0ZDAuLjVkYjBjYmM1MGU0NzdhODIzYzY1NDkwYThlNDFkNWJiZTRjOTAzMTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5T
VVJMU2Vzc2lvbi5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29h
L1dlYkNvcmVOU1VSTFNlc3Npb24ubW0KQEAgLTI3LDEwICsyNywxMiBAQAogI2ltcG9ydCAiV2Vi
Q29yZU5TVVJMU2Vzc2lvbi5oIgogCiAjaW1wb3J0ICJDYWNoZWRSZXNvdXJjZVJlcXVlc3QuaCIK
KyNpbXBvcnQgIlBhcnNlZFJlcXVlc3RSYW5nZS5oIgogI2ltcG9ydCAiUGxhdGZvcm1NZWRpYVJl
c291cmNlTG9hZGVyLmgiCiAjaW1wb3J0ICJTdWJyZXNvdXJjZUxvYWRlci5oIgogI2ltcG9ydCA8
d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KKyNpbXBv
cnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMjAzLDI0ICsyMDUsMTYgQEAgc3RhdGlj
IE5TRGF0ZSAqIF9fbnVsbGFibGUgbmV0d29ya0xvYWRNZXRyaWNzRGF0ZShTZWNvbmRzIGZldGNo
U3RhcnQsIFNlY29uZHMgZGUKIC0gKHZvaWQpYWRkRGVsZWdhdGVPcGVyYXRpb246KEZ1bmN0aW9u
PHZvaWQoKT4mJilvcGVyYXRpb247CiAtICh2b2lkKXRhc2s6KFdlYkNvcmVOU1VSTFNlc3Npb25E
YXRhVGFzayAqKXRhc2sgZGlkUmVjZWl2ZUNPUlNBY2Nlc3NDaGVja1Jlc3VsdDooQk9PTClyZXN1
bHQ7CiAtICh2b2lkKXRhc2s6KFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAqKXRhc2sgZGlk
UmVjZWl2ZVJlc3BvbnNlRnJvbU9yaWdpbjooUmVmPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiYm
KW9yaWdpbjsKKy0gKFdlYkNvcmU6OlJhbmdlUmVzcG9uc2VHZW5lcmF0b3ImKXJhbmdlUmVzcG9u
c2VHZW5lcmF0b3I7CiBAZW5kCiAKIEBpbnRlcmZhY2UgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFU
YXNrICgpCiAtIChpZClpbml0V2l0aFNlc3Npb246KFdlYkNvcmVOU1VSTFNlc3Npb24gKilzZXNz
aW9uIGlkZW50aWZpZXI6KE5TVUludGVnZXIpaWRlbnRpZmllciByZXF1ZXN0OihOU1VSTFJlcXVl
c3QgKilyZXF1ZXN0OwotLSAoaWQpaW5pdFdpdGhTZXNzaW9uOihXZWJDb3JlTlNVUkxTZXNzaW9u
ICopc2Vzc2lvbiBpZGVudGlmaWVyOihOU1VJbnRlZ2VyKWlkZW50aWZpZXIgVVJMOihOU1VSTCAq
KXVybDsKIC0gKHZvaWQpX3Jlc3RhcnQ7CiAtICh2b2lkKV9jYW5jZWw7CiAtICh2b2lkKV9maW5p
c2g7CiBAcHJvcGVydHkgKGFzc2lnbikgV2ViQ29yZU5TVVJMU2Vzc2lvbiAqIF9OdWxsYWJsZSBz
ZXNzaW9uOwogCi0tICh2b2lkKXJlc291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmKXJlc291
cmNlIHNlbnRCeXRlczoodW5zaWduZWQgbG9uZyBsb25nKWJ5dGVzU2VudCB0b3RhbEJ5dGVzVG9C
ZVNlbnQ6KHVuc2lnbmVkIGxvbmcgbG9uZyl0b3RhbEJ5dGVzVG9CZVNlbnQ7Ci0tICh2b2lkKXJl
c291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmKXJlc291cmNlIHJlY2VpdmVkUmVzcG9uc2U6
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKXJlc3BvbnNlIGNvbXBsZXRpb25IYW5kbGVyOihDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFNob3VsZENvbnRpbnVlUG9saWN5Q2hlY2spPiYmKWNvbXBsZXRp
b25IYW5kbGVyOwotLSAoQk9PTClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlJilyZXNv
dXJjZSBzaG91bGRDYWNoZVJlc3BvbnNlOihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJilyZXNwb25z
ZTsKLS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgcmVj
ZWl2ZWREYXRhOihjb25zdCBjaGFyKilkYXRhIGxlbmd0aDooaW50KWxlbmd0aDsKLS0gKHZvaWQp
cmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgcmVjZWl2ZWRSZWRpcmVj
dDooY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpcmVzcG9uc2UgcmVxdWVzdDooUmVzb3VyY2VSZXF1
ZXN0JiYpcmVxdWVzdCBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChS
ZXNvdXJjZVJlcXVlc3QmJik+JiYpY29tcGxldGlvbkhhbmRsZXI7Ci0tICh2b2lkKXJlc291cmNl
OihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmKXJlc291cmNlIGFjY2Vzc0NvbnRyb2xDaGVja0ZhaWxl
ZFdpdGhFcnJvcjooY29uc3QgUmVzb3VyY2VFcnJvciYpZXJyb3I7Ci0tICh2b2lkKXJlc291cmNl
OihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmKXJlc291cmNlIGxvYWRGYWlsZWRXaXRoRXJyb3I6KGNv
bnN0IFJlc291cmNlRXJyb3ImKWVycm9yOwotLSAodm9pZClyZXNvdXJjZUZpbmlzaGVkOihQbGF0
Zm9ybU1lZGlhUmVzb3VyY2UmKXJlc291cmNlIG1ldHJpY3M6KGNvbnN0IE5ldHdvcmtMb2FkTWV0
cmljcyYpbWV0cmljczsKIEBlbmQKIAogTlNfQVNTVU1FX05PTk5VTExfRU5ECkBAIC0zMTEsNiAr
MzA1LDExIEBAIE5TX0FTU1VNRV9OT05OVUxMX0VORAogICAgIF9vcmlnaW5zLmFkZChXVEZNb3Zl
KG9yaWdpbikpOwogfQogCistIChXZWJDb3JlOjpSYW5nZVJlc3BvbnNlR2VuZXJhdG9yJilyYW5n
ZVJlc3BvbnNlR2VuZXJhdG9yCit7CisgICAgcmV0dXJuIF9yYW5nZVJlc3BvbnNlR2VuZXJhdG9y
OworfQorCiAjcHJhZ21hIG1hcmsgLSBOU1VSTFNlc3Npb24gQVBJCiBAZHluYW1pYyBkZWxlZ2F0
ZTsKIC0gKF9fbnVsbGFibGUgaWQ8TlNVUkxTZXNzaW9uRGVsZWdhdGU+KWRlbGVnYXRlCkBAIC00
NTUsMTUgKzQ1NCw3IEBAIE5TX0FTU1VNRV9OT05OVUxMX0VORAogCiAtIChOU1VSTFNlc3Npb25E
YXRhVGFzayAqKWRhdGFUYXNrV2l0aFVSTDooTlNVUkwgKil1cmwKIHsKLSAgICBpZiAoX2ludmFs
aWRhdGVkKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgV2ViQ29yZU5TVVJMU2Vzc2lvbkRh
dGFUYXNrICp0YXNrID0gW1tXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgYWxsb2NdIGluaXRX
aXRoU2Vzc2lvbjpzZWxmIGlkZW50aWZpZXI6X25leHRUYXNrSWRlbnRpZmllcisrIFVSTDp1cmxd
OwotICAgIHsKLSAgICAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihfZGF0YVRhc2tzTG9jayk7Ci0g
ICAgICAgIF9kYXRhVGFza3MuYWRkKHRhc2spOwotICAgIH0KLSAgICByZXR1cm4gKE5TVVJMU2Vz
c2lvbkRhdGFUYXNrICopW3Rhc2sgYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBbc2VsZiBkYXRh
VGFza1dpdGhSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dXJsXV07CiB9CiAK
IC0gKHZvaWQpc2VuZEgyUGluZzooTlNVUkwgKil1cmwgcG9uZ0hhbmRsZXI6KHZvaWQgKF4pKE5T
RXJyb3IgKmVycm9yLCBOU1RpbWVJbnRlcnZhbCBpbnRlcnZhbCkpcG9uZ0hhbmRsZXIKQEAgLTU3
MSw3ICs1NjIsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgTG9jayBtX3Rhc2tMb2NrOwot
ICAgIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAqbV90YXNrOworICAgIFdlYWtPYmpDUHRy
PFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzaz4gbV90YXNrOwogfTsKIAogdm9pZCBXZWJDb3Jl
TlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmNsZWFyVGFzaygpCkBAIC01ODYsMTYgKzU3Nywx
NyBAQCB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6ZGF0YVNlbnQoUGxh
dGZvcm1NZWRpYVJlc291cmNlJiByZXNvdXJjZQogICAgIGlmICghbV90YXNrKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBbbV90YXNrIHJlc291cmNlOnJlc291cmNlIHNlbnRCeXRlczpieXRlc1Nl
bnQgdG90YWxCeXRlc1RvQmVTZW50OnRvdGFsQnl0ZXNUb0JlU2VudF07CisgICAgW21fdGFzayBy
ZXNvdXJjZTomcmVzb3VyY2Ugc2VudEJ5dGVzOmJ5dGVzU2VudCB0b3RhbEJ5dGVzVG9CZVNlbnQ6
dG90YWxCeXRlc1RvQmVTZW50XTsKIH0KIAogdm9pZCBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRh
c2tDbGllbnQ6OnJlc3BvbnNlUmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvdXJj
ZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoU2hvdWxkQ29udGludWVQb2xpY3lDaGVjayk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Cisg
ICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7CiAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV90YXNrTG9jayk7CiAgICAgaWYgKCFtX3Rhc2spCiAgICAgICAgIHJldHVybiBjb21w
bGV0aW9uSGFuZGxlcihTaG91bGRDb250aW51ZVBvbGljeUNoZWNrOjpObyk7CiAKLSAgICBbbV90
YXNrIHJlc291cmNlOnJlc291cmNlIHJlY2VpdmVkUmVzcG9uc2U6cmVzcG9uc2UgY29tcGxldGlv
bkhhbmRsZXI6V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildOworICAgIFttX3Rhc2sgcmVzb3Vy
Y2U6JnJlc291cmNlIHJlY2VpdmVkUmVzcG9uc2U6cmVzcG9uc2UgY29tcGxldGlvbkhhbmRsZXI6
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildOwogfQogCiBib29sIFdlYkNvcmVOU1VSTFNlc3Np
b25EYXRhVGFza0NsaWVudDo6c2hvdWxkQ2FjaGVSZXNwb25zZShQbGF0Zm9ybU1lZGlhUmVzb3Vy
Y2UmIHJlc291cmNlLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKQEAgLTYwNCw3
ICs1OTYsNyBAQCBib29sIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6c2hvdWxk
Q2FjaGVSZXNwb25zZShQbGF0Zm9ybU1lZGlhUmVzb3VyYwogICAgIGlmICghbV90YXNrKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gW21fdGFzayByZXNvdXJjZTpyZXNvdXJj
ZSBzaG91bGRDYWNoZVJlc3BvbnNlOnJlc3BvbnNlXTsKKyAgICByZXR1cm4gW21fdGFzayByZXNv
dXJjZTomcmVzb3VyY2Ugc2hvdWxkQ2FjaGVSZXNwb25zZTpyZXNwb25zZV07CiB9CiAKIHZvaWQg
V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjpkYXRhUmVjZWl2ZWQoUGxhdGZvcm1N
ZWRpYVJlc291cmNlJiByZXNvdXJjZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKQEAg
LTYxMyw3ICs2MDUsNyBAQCB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6
ZGF0YVJlY2VpdmVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzbwogICAgIGlmICghbV90YXNr
KQogICAgICAgICByZXR1cm47CiAKLSAgICBbbV90YXNrIHJlc291cmNlOnJlc291cmNlIHJlY2Vp
dmVkRGF0YTpkYXRhIGxlbmd0aDpsZW5ndGhdOworICAgIFttX3Rhc2sgcmVzb3VyY2U6JnJlc291
cmNlIHJlY2VpdmVkRGF0YTpkYXRhIGxlbmd0aDpsZW5ndGhdOwogfQogCiB2b2lkIFdlYkNvcmVO
U1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6cmVkaXJlY3RSZWNlaXZlZChQbGF0Zm9ybU1lZGlh
UmVzb3VyY2UmIHJlc291cmNlLCBSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZXNvdXJjZVJl
cXVlc3QmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC02MjIsNyArNjE0LDcgQEAgdm9pZCBX
ZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OnJlZGlyZWN0UmVjZWl2ZWQoUGxhdGZv
cm1NZWRpYVJlc291cmNlJgogICAgIGlmICghbV90YXNrKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBbbV90YXNrIHJlc291cmNlOnJlc291cmNlIHJlY2VpdmVkUmVkaXJlY3Q6cmVzcG9uc2UgcmVx
dWVzdDpXVEZNb3ZlKHJlcXVlc3QpIGNvbXBsZXRpb25IYW5kbGVyOiBbY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiByZXF1ZXN0KSBtdXRhYmxl
IHsKKyAgICBbbV90YXNrIHJlc291cmNlOiZyZXNvdXJjZSByZWNlaXZlZFJlZGlyZWN0OnJlc3Bv
bnNlIHJlcXVlc3Q6V1RGTW92ZShyZXF1ZXN0KSBjb21wbGV0aW9uSGFuZGxlcjogW2NvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChhdXRvJiYgcmVxdWVzdCkg
bXV0YWJsZSB7CiAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3JlcXVlc3QgPSByZXF1ZXN0Lmlz
b2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUo
cmVxdWVzdCkpOwogICAgICAgICB9KTsKQEAgLTYzNSw3ICs2MjcsNyBAQCB2b2lkIFdlYkNvcmVO
U1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6YWNjZXNzQ29udHJvbENoZWNrRmFpbGVkKFBsYXRm
b3JtTWVkaWFSZQogICAgIGlmICghbV90YXNrKQogICAgICAgICByZXR1cm47CiAKLSAgICBbbV90
YXNrIHJlc291cmNlOnJlc291cmNlIGFjY2Vzc0NvbnRyb2xDaGVja0ZhaWxlZFdpdGhFcnJvcjpl
cnJvcl07CisgICAgW21fdGFzayByZXNvdXJjZTomcmVzb3VyY2UgYWNjZXNzQ29udHJvbENoZWNr
RmFpbGVkV2l0aEVycm9yOmVycm9yXTsKIH0KIAogdm9pZCBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0
YVRhc2tDbGllbnQ6OmxvYWRGYWlsZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvdXJjZSwg
Y29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCkBAIC02NDQsNyArNjM2LDcgQEAgdm9pZCBXZWJD
b3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmxvYWRGYWlsZWQoUGxhdGZvcm1NZWRpYVJl
c291cmNlJiByZXNvdXIKICAgICBpZiAoIW1fdGFzaykKICAgICAgICAgcmV0dXJuOwogCi0gICAg
W21fdGFzayByZXNvdXJjZTpyZXNvdXJjZSBsb2FkRmFpbGVkV2l0aEVycm9yOmVycm9yXTsKKyAg
ICBbbV90YXNrIHJlc291cmNlOiZyZXNvdXJjZSBsb2FkRmFpbGVkV2l0aEVycm9yOmVycm9yXTsK
IH0KIAogdm9pZCBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmxvYWRGaW5pc2hl
ZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc291cmNlLCBjb25zdCBOZXR3b3JrTG9hZE1ldHJp
Y3MmIG1ldHJpY3MpCkBAIC02NTMsNyArNjQ1LDcgQEAgdm9pZCBXZWJDb3JlTlNVUkxTZXNzaW9u
RGF0YVRhc2tDbGllbnQ6OmxvYWRGaW5pc2hlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc28K
ICAgICBpZiAoIW1fdGFzaykKICAgICAgICAgcmV0dXJuOwogCi0gICAgW21fdGFzayByZXNvdXJj
ZUZpbmlzaGVkOnJlc291cmNlIG1ldHJpY3M6bWV0cmljc107CisgICAgW21fdGFzayByZXNvdXJj
ZUZpbmlzaGVkOiZyZXNvdXJjZSBtZXRyaWNzOm1ldHJpY3NdOwogfQogCiB9CkBAIC02NjEsMTcg
KzY1Myw2IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmlu
aXNoZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvCiAjcHJhZ21hIG1hcmsgLSBXZWJDb3Jl
TlNVUkxTZXNzaW9uRGF0YVRhc2sKIAogQGltcGxlbWVudGF0aW9uIFdlYkNvcmVOU1VSTFNlc3Np
b25EYXRhVGFzawotLSAoaWQpaW5pdFdpdGhTZXNzaW9uOihXZWJDb3JlTlNVUkxTZXNzaW9uICop
c2Vzc2lvbiBpZGVudGlmaWVyOihOU1VJbnRlZ2VyKWlkZW50aWZpZXIgVVJMOihOU1VSTCAqKXVy
bAotewotICAgIHNlbGYudGFza0lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIHNlbGYuc2Vz
c2lvbiA9IHNlc3Npb247Ci0gICAgc2VsZi5zdGF0ZSA9IE5TVVJMU2Vzc2lvblRhc2tTdGF0ZVN1
c3BlbmRlZDsKLSAgICBzZWxmLnByaW9yaXR5ID0gTlNVUkxTZXNzaW9uVGFza1ByaW9yaXR5RGVm
YXVsdDsKLSAgICBzZWxmLm9yaWdpbmFsUmVxdWVzdCA9IHNlbGYuY3VycmVudFJlcXVlc3QgPSBb
TlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnVybF07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0K
LQogLSAoaWQpaW5pdFdpdGhTZXNzaW9uOihXZWJDb3JlTlNVUkxTZXNzaW9uICopc2Vzc2lvbiBp
ZGVudGlmaWVyOihOU1VJbnRlZ2VyKWlkZW50aWZpZXIgcmVxdWVzdDooTlNVUkxSZXF1ZXN0ICop
cmVxdWVzdAogewogICAgIHNlbGYudGFza0lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwpAQCAtNzA4
LDkgKzY4OSwxMiBAQCB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9h
ZEZpbmlzaGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzbwogCiAgICAgW3NlbGYgX2NhbmNl
bF07CiAKKyAgICBpZiAoW3NlbGYuc2Vzc2lvbiByYW5nZVJlc3BvbnNlR2VuZXJhdG9yXS53aWxs
SGFuZGxlUmVxdWVzdChzZWxmLCBzZWxmLm9yaWdpbmFsUmVxdWVzdCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIF9yZXNvdXJjZSA9IHNlbGYuc2Vzc2lvbi5sb2FkZXIucmVxdWVzdFJlc291cmNl
KHNlbGYub3JpZ2luYWxSZXF1ZXN0LCBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXI6OkxvYWRP
cHRpb246OkRpc2FsbG93Q2FjaGluZyk7CiAgICAgaWYgKF9yZXNvdXJjZSkKLSAgICAgICAgX3Jl
c291cmNlLT5zZXRDbGllbnQobWFrZVVuaXF1ZTxXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tD
bGllbnQ+KHNlbGYpKTsKKyAgICAgICAgX3Jlc291cmNlLT5zZXRDbGllbnQoYWRvcHRSZWYoKm5l
dyBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQoc2VsZikpKTsKIH0KIAogLSAodm9p
ZClfY2FuY2VsCkBAIC03MjcsNyArNzExLDcgQEAgdm9pZCBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0
YVRhc2tDbGllbnQ6OmxvYWRGaW5pc2hlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc28KIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGlmIChfcmVzb3VyY2UpCi0gICAgICAg
IFtzZWxmIHJlc291cmNlRmluaXNoZWQ6Kl9yZXNvdXJjZSBtZXRyaWNzOk5ldHdvcmtMb2FkTWV0
cmljcyB7IH1dOworICAgICAgICBbc2VsZiByZXNvdXJjZUZpbmlzaGVkOl9yZXNvdXJjZS5nZXQo
KSBtZXRyaWNzOk5ldHdvcmtMb2FkTWV0cmljcyB7IH1dOwogfQogCiAjcHJhZ21hIG1hcmsgLSBO
U1VSTFNlc3Npb24gQVBJCkBAIC04MDYsMjMgKzc5MCwyOCBAQCB2b2lkIFdlYkNvcmVOU1VSTFNl
c3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZpbmlzaGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYg
cmVzbwogCiAjcHJhZ21hIG1hcmsgLSBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VDbGllbnQgY2FsbGJh
Y2tzCiAKLS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2Ug
c2VudEJ5dGVzOih1bnNpZ25lZCBsb25nIGxvbmcpYnl0ZXNTZW50IHRvdGFsQnl0ZXNUb0JlU2Vu
dDoodW5zaWduZWQgbG9uZyBsb25nKXRvdGFsQnl0ZXNUb0JlU2VudAorLSAodm9pZClyZXNvdXJj
ZTooUGxhdGZvcm1NZWRpYVJlc291cmNlKilyZXNvdXJjZSBzZW50Qnl0ZXM6KHVuc2lnbmVkIGxv
bmcgbG9uZylieXRlc1NlbnQgdG90YWxCeXRlc1RvQmVTZW50Oih1bnNpZ25lZCBsb25nIGxvbmcp
dG90YWxCeXRlc1RvQmVTZW50CiB7Ci0gICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgJnJlc291
cmNlID09IF9yZXNvdXJjZSk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgIXJlc291cmNl
IHx8IHJlc291cmNlID09IF9yZXNvdXJjZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVzU2VudCk7
CiAgICAgVU5VU0VEX1BBUkFNKHRvdGFsQnl0ZXNUb0JlU2VudCk7CiAgICAgLy8gTm8tb3AuCiB9
CiAKLS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgcmVj
ZWl2ZWRSZXNwb25zZTooY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpcmVzcG9uc2UgY29tcGxldGlv
bkhhbmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2hvdWxkQ29udGludWVQb2xpY3lDaGVj
ayk+JiYpY29tcGxldGlvbkhhbmRsZXIKKy0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFS
ZXNvdXJjZSopcmVzb3VyY2UgcmVjZWl2ZWRSZXNwb25zZTooY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpcmVzcG9uc2UgY29tcGxldGlvbkhhbmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2hv
dWxkQ29udGludWVQb2xpY3lDaGVjayk+JiYpY29tcGxldGlvbkhhbmRsZXIKIHsKICAgICBBU1NF
UlQocmVzcG9uc2Uuc291cmNlKCkgPT0gUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpOZXR3b3Jr
IHx8IHJlc3BvbnNlLnNvdXJjZSgpID09IFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6RGlza0Nh
Y2hlIHx8IHJlc3BvbnNlLnNvdXJjZSgpID09IFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6RGlz
a0NhY2hlQWZ0ZXJWYWxpZGF0aW9uIHx8IHJlc3BvbnNlLnNvdXJjZSgpID09IFJlc291cmNlUmVz
cG9uc2U6OlNvdXJjZTo6U2VydmljZVdvcmtlcik7Ci0gICAgQVNTRVJUX1VOVVNFRChyZXNvdXJj
ZSwgJnJlc291cmNlID09IF9yZXNvdXJjZSk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwg
IXJlc291cmNlIHx8IHJlc291cmNlID09IF9yZXNvdXJjZSk7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKICAgICBbc2VsZi5zZXNzaW9uIHRhc2s6c2VsZiBkaWRSZWNlaXZlUmVzcG9uc2VG
cm9tT3JpZ2luOlNlY3VyaXR5T3JpZ2luOjpjcmVhdGUocmVzcG9uc2UudXJsKCkpXTsKLSAgICBb
c2VsZi5zZXNzaW9uIHRhc2s6c2VsZiBkaWRSZWNlaXZlQ09SU0FjY2Vzc0NoZWNrUmVzdWx0OnJl
c291cmNlLmRpZFBhc3NBY2Nlc3NDb250cm9sQ2hlY2soKV07CisgICAgLy8gRklYTUU6IFRoaW5r
IGFib3V0IHRoaXMgYW5kIG1ha2Ugc3VyZSBpdCdzIHNhZmUuCisgICAgW3NlbGYuc2Vzc2lvbiB0
YXNrOnNlbGYgZGlkUmVjZWl2ZUNPUlNBY2Nlc3NDaGVja1Jlc3VsdDpyZXNvdXJjZSA/IHJlc291
cmNlLT5kaWRQYXNzQWNjZXNzQ29udHJvbENoZWNrKCkgOiBZRVNdOwogICAgIHNlbGYuY291bnRP
ZkJ5dGVzRXhwZWN0ZWRUb1JlY2VpdmUgPSByZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgo
KTsKLSAgICBSZXRhaW5QdHI8TlNVUkxSZXNwb25zZT4gc3Ryb25nUmVzcG9uc2UgeyByZXNwb25z
ZS5uc1VSTFJlc3BvbnNlKCkgfTsKKyAgICBSZXRhaW5QdHI8TlNVUkxSZXNwb25zZT4gc3Ryb25n
UmVzcG9uc2UgPSByZXNwb25zZS5uc1VSTFJlc3BvbnNlKCk7CisKKyAgICBpZiAocmVzb3VyY2Ug
JiYgc2VsZi5zZXNzaW9uICYmIFtzZWxmLnNlc3Npb24gcmFuZ2VSZXNwb25zZUdlbmVyYXRvcl0u
d2lsbFN5bnRoZXNpemVSYW5nZVJlc3BvbnNlcyhzZWxmLCAqcmVzb3VyY2UsIHJlc3BvbnNlKSkK
KyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKFNob3VsZENvbnRpbnVlUG9saWN5Q2hl
Y2s6Olllcyk7CisgICAgCiAgICAgUmV0YWluUHRyPFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFz
az4gc3Ryb25nU2VsZiB7IHNlbGYgfTsKICAgICBpZiAoIXNlbGYuc2Vzc2lvbikKICAgICAgICAg
cmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKFNob3VsZENvbnRpbnVlUG9saWN5Q2hlY2s6Ok5vKTsK
QEAgLTg1MCw5ICs4MzksOSBAQCB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVu
dDo6bG9hZEZpbmlzaGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzbwogICAgIH1dOwogfQog
Ci0tIChCT09MKXJlc291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmKXJlc291cmNlIHNob3Vs
ZENhY2hlUmVzcG9uc2U6KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKXJlc3BvbnNlCistIChCT09M
KXJlc291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIHNob3VsZENhY2hlUmVz
cG9uc2U6KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKXJlc3BvbnNlCiB7Ci0gICAgQVNTRVJUX1VO
VVNFRChyZXNvdXJjZSwgJnJlc291cmNlID09IF9yZXNvdXJjZSk7CisgICAgQVNTRVJUX1VOVVNF
RChyZXNvdXJjZSwgIXJlc291cmNlIHx8IHJlc291cmNlID09IF9yZXNvdXJjZSk7CiAKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCkBAIC04NjAsOSArODQ5LDkgQEAgdm9pZCBXZWJDb3Jl
TlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmxvYWRGaW5pc2hlZChQbGF0Zm9ybU1lZGlhUmVz
b3VyY2UmIHJlc28KICAgICByZXR1cm4gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFk
ZXJOYW1lOjpDb250ZW50UmFuZ2UpLmlzRW1wdHkoKTsKIH0KIAotLSAodm9pZClyZXNvdXJjZToo
UGxhdGZvcm1NZWRpYVJlc291cmNlJilyZXNvdXJjZSByZWNlaXZlZERhdGE6KGNvbnN0IGNoYXIq
KWRhdGEgbGVuZ3RoOihpbnQpbGVuZ3RoCistICh2b2lkKXJlc291cmNlOihQbGF0Zm9ybU1lZGlh
UmVzb3VyY2UqKXJlc291cmNlIHJlY2VpdmVkRGF0YTooY29uc3QgY2hhciopZGF0YSBsZW5ndGg6
KGludClsZW5ndGgKIHsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAmcmVzb3VyY2UgPT0g
X3Jlc291cmNlKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAhcmVzb3VyY2UgfHwgcmVz
b3VyY2UgPT0gX3Jlc291cmNlKTsKICAgICBSZXRhaW5QdHI8TlNEYXRhPiBuc0RhdGEgPSBhZG9w
dE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOmRhdGEgbGVuZ3RoOmxlbmd0aF0pOwog
ICAgIFJldGFpblB0cjxXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2s+IHN0cm9uZ1NlbGYgeyBz
ZWxmIH07CiAgICAgW3NlbGYuc2Vzc2lvbiBhZGREZWxlZ2F0ZU9wZXJhdGlvbjpbc3Ryb25nU2Vs
ZiwgbGVuZ3RoLCBuc0RhdGFdIHsKQEAgLTg3Myw5ICs4NjIsOSBAQCB2b2lkIFdlYkNvcmVOU1VS
TFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZpbmlzaGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJj
ZSYgcmVzbwogICAgIH1dOwogfQogCi0tICh2b2lkKXJlc291cmNlOihQbGF0Zm9ybU1lZGlhUmVz
b3VyY2UmKXJlc291cmNlIHJlY2VpdmVkUmVkaXJlY3Q6KGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
KXJlc3BvbnNlIHJlcXVlc3Q6KFJlc291cmNlUmVxdWVzdCYmKXJlcXVlc3QgY29tcGxldGlvbkhh
bmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVzb3VyY2VSZXF1ZXN0JiYpPiYmKWNvbXBs
ZXRpb25IYW5kbGVyCistICh2b2lkKXJlc291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJl
c291cmNlIHJlY2VpdmVkUmVkaXJlY3Q6KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKXJlc3BvbnNl
IHJlcXVlc3Q6KFJlc291cmNlUmVxdWVzdCYmKXJlcXVlc3QgY29tcGxldGlvbkhhbmRsZXI6KENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoUmVzb3VyY2VSZXF1ZXN0JiYpPiYmKWNvbXBsZXRpb25IYW5k
bGVyCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgJnJlc291cmNlID09IF9yZXNvdXJj
ZSk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgIXJlc291cmNlIHx8IHJlc291cmNlID09
IF9yZXNvdXJjZSk7CiAgICAgW3NlbGYuc2Vzc2lvbiBhZGREZWxlZ2F0ZU9wZXJhdGlvbjpbc3Ry
b25nU2VsZiA9IHJldGFpblB0cihzZWxmKSwgcmVzcG9uc2UgPSByZXRhaW5QdHIocmVzcG9uc2Uu
bnNVUkxSZXNwb25zZSgpKSwgcmVxdWVzdCA9IHJlcXVlc3QuaXNvbGF0ZWRDb3B5KCksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewog
ICAgICAgICBpZiAoIVtyZXNwb25zZSBpc0tpbmRPZkNsYXNzOltOU0hUVFBVUkxSZXNwb25zZSBj
bGFzc11dKSB7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTkwNSw5ICs4
OTQsOSBAQCB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZpbmlz
aGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzbwogICAgIH1dOwogfQogCi0tICh2b2lkKV9y
ZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlJilyZXNvdXJjZSBsb2FkRmluaXNoZWRXaXRo
RXJyb3I6KE5TRXJyb3IgKillcnJvciBtZXRyaWNzOihjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3Mm
KW1ldHJpY3MKKy0gKHZvaWQpX3Jlc291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291
cmNlIGxvYWRGaW5pc2hlZFdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yIG1ldHJpY3M6KGNvbnN0
IE5ldHdvcmtMb2FkTWV0cmljcyYpbWV0cmljcwogewotICAgIEFTU0VSVF9VTlVTRUQocmVzb3Vy
Y2UsICZyZXNvdXJjZSA9PSBfcmVzb3VyY2UpOworICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2Us
ICFyZXNvdXJjZSB8fCByZXNvdXJjZSA9PSBfcmVzb3VyY2UpOwogICAgIGlmIChzZWxmLnN0YXRl
ID09IE5TVVJMU2Vzc2lvblRhc2tTdGF0ZUNvbXBsZXRlZCkKICAgICAgICAgcmV0dXJuOwogICAg
IHNlbGYuc3RhdGUgPSBOU1VSTFNlc3Npb25UYXNrU3RhdGVDb21wbGV0ZWQ7CkBAIC05MzAsMTcg
KzkxOSwxNyBAQCB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZp
bmlzaGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzbwogICAgIH1dOwogfQogCi0tICh2b2lk
KXJlc291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmKXJlc291cmNlIGFjY2Vzc0NvbnRyb2xD
aGVja0ZhaWxlZFdpdGhFcnJvcjooY29uc3QgUmVzb3VyY2VFcnJvciYpZXJyb3IKKy0gKHZvaWQp
cmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3VyY2UgYWNjZXNzQ29udHJvbENo
ZWNrRmFpbGVkV2l0aEVycm9yOihjb25zdCBSZXNvdXJjZUVycm9yJillcnJvcgogewogICAgIFtz
ZWxmIF9yZXNvdXJjZTpyZXNvdXJjZSBsb2FkRmluaXNoZWRXaXRoRXJyb3I6ZXJyb3IubnNFcnJv
cigpIG1ldHJpY3M6TmV0d29ya0xvYWRNZXRyaWNzIHsgfV07CiB9CiAKLS0gKHZvaWQpcmVzb3Vy
Y2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgbG9hZEZhaWxlZFdpdGhFcnJvcjoo
Y29uc3QgUmVzb3VyY2VFcnJvciYpZXJyb3IKKy0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVk
aWFSZXNvdXJjZSopcmVzb3VyY2UgbG9hZEZhaWxlZFdpdGhFcnJvcjooY29uc3QgUmVzb3VyY2VF
cnJvciYpZXJyb3IKIHsKICAgICBbc2VsZiBfcmVzb3VyY2U6cmVzb3VyY2UgbG9hZEZpbmlzaGVk
V2l0aEVycm9yOmVycm9yLm5zRXJyb3IoKSBtZXRyaWNzOk5ldHdvcmtMb2FkTWV0cmljcyB7IH1d
OwogfQogCi0tICh2b2lkKXJlc291cmNlRmluaXNoZWQ6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYp
cmVzb3VyY2UgbWV0cmljczooY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJiltZXRyaWNzCistICh2
b2lkKXJlc291cmNlRmluaXNoZWQ6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3VyY2UgbWV0
cmljczooY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJiltZXRyaWNzCiB7CiAgICAgW3NlbGYgX3Jl
c291cmNlOnJlc291cmNlIGxvYWRGaW5pc2hlZFdpdGhFcnJvcjpuaWwgbWV0cmljczptZXRyaWNz
XTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvTWVk
aWFQbGF5ZXJQcml2YXRlUmVtb3RlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
bWVkaWEvTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlLmNwcAppbmRleCA3ZmIzZTVmYmRmYzNiMWY1
YzY4OTUzMmU4YTBhMTgwMzIxMzcxYjUzLi44Nzk1YWJhY2FmMDAwNTY3ZmEzYTIwMTZiY2YyZjQ5
MTNjYjEwYjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlh
L01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUuY3BwCkBAIC0xMTgwLDcgKzEx
ODAsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZTo6cmVxdWVzdFJlc291cmNlKFJl
bW90ZU1lZGlhUmVzb3VyY2VJZGVudGlmaWVyIHJlbQogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIC8vIFBsYXRmb3JtTWVkaWFSZXNvdXJjZSBvd25zIHRoZSBQbGF0Zm9ybU1lZGlhUmVzb3Vy
Y2VDbGllbnQKLSAgICByZXNvdXJjZS0+c2V0Q2xpZW50KG1ha2VVbmlxdWU8UmVtb3RlTWVkaWFS
ZXNvdXJjZVByb3h5Pihjb25uZWN0aW9uKCksICpyZXNvdXJjZSwgcmVtb3RlTWVkaWFSZXNvdXJj
ZUlkZW50aWZpZXIpKTsKKyAgICByZXNvdXJjZS0+c2V0Q2xpZW50KGFkb3B0UmVmKCpuZXcgUmVt
b3RlTWVkaWFSZXNvdXJjZVByb3h5KGNvbm5lY3Rpb24oKSwgKnJlc291cmNlLCByZW1vdGVNZWRp
YVJlc291cmNlSWRlbnRpZmllcikpKTsKICAgICBtX21lZGlhUmVzb3VyY2VzLmFkZChyZW1vdGVN
ZWRpYVJlc291cmNlSWRlbnRpZmllciwgV1RGTW92ZShyZXNvdXJjZSkpOwogCiAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCAwOGEwMjgxYzZjNjAyMzA3NWIzZDQyNDczYzc0OTgxMmE4NjhiNWUzLi43MjAz
NGM2YWJiMzQzYzg4MjQ3MjA3NjQ4MzllYmM4YjRkZGMyMGE2IDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMjEtMDIt
MDYgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAg
ICBTeW50aGVzaXplIHJhbmdlIHJlc3BvbnNlcyBpZiBuZWVkZWQgaW4gV2ViQ29yZU5TVVJMU2Vz
c2lvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIx
MDcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvUGFyc2VkQ29udGVudFJhbmdlLmNwcDoKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvQ2hhbGxlbmdlLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y2xpZW50
Q2VydFNlcnZlcik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9N
ZWRpYUxvYWRpbmcubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0VmlkZW9CeXRlcyk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpydW5WaWRlb1Rlc3QpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVy
Lmg6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQUmVzcG9uc2U6OkhUVFBSZXNwb25zZSk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjpIVFRQUmVzcG9uc2U6OkhUVFBS
ZXNwb25zZSk6IERlbGV0ZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2Vy
dmVyLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6UmVxdWVzdERhdGE6
OlJlcXVlc3REYXRhKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmFwcGVuZFRvVmVjdG9yKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OnBhcnNlUGF0aCk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjpyZXNwb25kVG9SZXF1ZXN0cyk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpIVFRQUmVzcG9uc2U6OmJvZHlGcm9tU3RyaW5nKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OkhUVFBSZXNwb25zZTo6c2VyaWFsaXplKToKKwogMjAyMS0wMi0wNSAg
RXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBE
aXNhYmxlIE1lZGlhU2Vzc2lvblRlc3QgQVBJIHRlc3RzCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvUGFyc2VkQ29udGVudFJhbmdlLmNwcCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QYXJzZWRDb250ZW50UmFuZ2UuY3BwCmluZGV4IDIw
YTk1N2U1OWM4NTE2MGM4MDgzMTdlMTViMDEwMjhkNWZhOWI0NTguLjI1ZDJkNjc3ZmI4ODg2MjI1
ZmUzMWRiNDk4ZTVkNzVkNmM2MDBmNDAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9QYXJzZWRDb250ZW50UmFuZ2UuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9QYXJzZWRDb250ZW50UmFuZ2UuY3BwCkBAIC0yNiw2ICsyNiw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlIDxXZWJDb3JlL1BhcnNlZENvbnRl
bnRSYW5nZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFyc2VkUmVxdWVzdFJhbmdlLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpA
QCAtOTUsNCArOTYsMzEgQEAgVEVTVChXZWJDb3JlLCBQYXJzZWRDb250ZW50UmFuZ2VUb1N0cmlu
ZykKICAgICBBU1NFUlRfU1RSRVEoIiIsIFBhcnNlZENvbnRlbnRSYW5nZSgpLmhlYWRlclZhbHVl
KCkudXRmOCgpLmRhdGEoKSk7CiB9CiAKK1RFU1QoV2ViQ29yZSwgUGFyc2VkUmVxdWVzdFJhbmdl
KQoreworICAgIFZlY3RvcjxTdHJpbmc+IGZhaWx1cmVDYXNlcyB7CisgICAgICAgIHsgfSwKKyAg
ICAgICAgIiIsCisgICAgICAgICJhYmMiLAorICAgICAgICAiYnl0ZXM9IiwKKyAgICAgICAgImJ5
dGVzPS0iLAorICAgICAgICAiYnl0ZXM9YWJjLSIsCisgICAgICAgICJieXRlcz0xLWFiYyIsCisg
ICAgICAgICJieXRlcz0yLTEiLAorICAgICAgICAiYnl0ZXM9MS0iLAorICAgICAgICAiYnl0ZXM9
LTEiLAorICAgICAgICAiYnl0ZXM9MS05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkiCisgICAgfTsK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIGlucHV0IDogZmFpbHVyZUNhc2VzKQorICAgICAgICBFWFBF
Q1RfRVEoV1RGOjpudWxsb3B0LCBQYXJzZWRSZXF1ZXN0UmFuZ2U6OnBhcnNlKGlucHV0KSk7CisK
KyAgICBhdXRvIGNvbXBhcmUgPSBbXSAoY29uc3QgU3RyaW5nJiBpbnB1dCwgT3B0aW9uYWw8c2l6
ZV90PiBiZWdpbiwgT3B0aW9uYWw8c2l6ZV90PiBlbmQpIHsKKyAgICAgICAgYXV0byByYW5nZSA9
IFBhcnNlZFJlcXVlc3RSYW5nZTo6cGFyc2UoaW5wdXQpOworICAgICAgICBFWFBFQ1RfTkUoV1RG
OjpudWxsb3B0LCByYW5nZSk7CisgICAgICAgIAorICAgIH07CisgICAgY29tcGFyZSgiYnl0ZXM9
MS0xIiwgMSwgMSk7CisgICAgY29tcGFyZSgiYnl0ZXM9MS0yIiwgMSwgMik7Cit9CisKIH0KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQ2hhbGxlbmdl
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9DaGFsbGVuZ2UubW0K
aW5kZXggOTY0MDc0OGJmNjMwMjhkMmI3NDQ4OThjZDBkNDY1M2NmYThiZDVkMy4uMGI3NWJhNDNj
MDNhZTM4ODgxNmExZjNjYzJjZWU2ZjE3NzFiMTA2MSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9DaGFsbGVuZ2UubW0KKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9DaGFsbGVuZ2UubW0KQEAgLTU4OSw3ICs1ODksNyBA
QCBzdGF0aWMgSFRUUFNlcnZlciBjbGllbnRDZXJ0U2VydmVyKCkKICAgICAgICAgeyAiLzUucG5n
IiwgeyBsb25nU3RyaW5nIH0gfSwKICAgICAgICAgeyAiLzYucG5nIiwgeyBsb25nU3RyaW5nIH0g
fSwKICAgICAgICAgeyAiL3JlZGlyZWN0VG9FcnJvciIsIHsgMzAxLCB7eyAiTG9jYXRpb24iLCAi
L2Vycm9yIiB9fSB9IH0sCi0gICAgICAgIHsgIi9lcnJvciIsIHsgSFRUUFNlcnZlcjo6SFRUUFJl
c3BvbnNlOjpUZXJtaW5hdGVDb25uZWN0aW9uOjpZZXMgfSB9LAorICAgICAgICB7ICIvZXJyb3Ii
LCB7IEhUVFBSZXNwb25zZTo6VGVybWluYXRlQ29ubmVjdGlvbjo6WWVzIH0gfSwKICAgICB9LCBI
VFRQU2VydmVyOjpQcm90b2NvbDo6SHR0cHMsIFtdIChhdXRvLCBhdXRvLCBhdXRvIGNlcnRpZmlj
YXRlQWxsb3dlZCkgewogICAgICAgICBjZXJ0aWZpY2F0ZUFsbG93ZWQodHJ1ZSk7CiAgICAgfSk7
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL01lZGlh
TG9hZGluZy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTWVkaWFM
b2FkaW5nLm1tCmluZGV4IDY0ZGM1YmYwNTZiOTU1YTI0OGY2N2UyMGQwOWY3NDcxMTMxYzE0NjUu
LjEyNmM4YzMyZjMxN2JiYzM2MjU4ZTI1MDRkMGEyNDE3Nzk3YjU1M2YgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTWVkaWFMb2FkaW5nLm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTWVkaWFMb2FkaW5nLm1tCkBA
IC0yNyw2ICsyNyw3IEBACiAKICNpbXBvcnQgIkhUVFBTZXJ2ZXIuaCIKICNpbXBvcnQgIlBsYXRm
b3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJUZXN0VUlEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVGVz
dFdLV2ViVmlldy5oIgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJz
Lmg+CiAKQEAgLTExNiw2ICsxMTcsNzQgQEAgVEVTVChNZWRpYUxvYWRpbmcsIFVzZXJBZ2VudFN0
cmluZ0hMUykKICAgICBVdGlsOjpydW4oJnJlY2VpdmVkTWVkaWFSZXF1ZXN0KTsKIH0KIAorY29u
c3QgY2hhciogdmlkZW9QbGF5VGVzdEhUTUwgPSI8c2NyaXB0PiIKKyAgICAiZnVuY3Rpb24gY3Jl
YXRlVmlkZW9FbGVtZW50KCkgeyIKKyAgICAgICAgImxldCB2aWRlbyA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ3ZpZGVvJyk7IgorICAgICAgICAidmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignZXJy
b3InLCAoKT0+e2FsZXJ0KCdlcnJvcicpfSk7IgorICAgICAgICAidmlkZW8uYWRkRXZlbnRMaXN0
ZW5lcigncGxheWluZycsICgpPT57YWxlcnQoJ3BsYXlpbmcnKX0pOyIKKyAgICAgICAgInZpZGVv
LnNyYz0ndmlkZW8ubXA0JzsiCisgICAgICAgICJ2aWRlby5hdXRvcGxheSA9IDE7IgorICAgICAg
ICAiZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh2aWRlbyk7IgorICAgICJ9IgorIjwvc2NyaXB0
PiIKKyI8Ym9keSBvbmxvYWQ9J2NyZWF0ZVZpZGVvRWxlbWVudCgpJz48L2JvZHk+IjsKKworc3Rh
dGljIFZlY3Rvcjx1aW50OF90PiB0ZXN0VmlkZW9CeXRlcygpCit7CisgICAgTlNEYXRhICpkYXRh
ID0gW05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBV
UkxGb3JSZXNvdXJjZTpAInRlc3QiIHdpdGhFeHRlbnNpb246QCJtcDQiIHN1YmRpcmVjdG9yeTpA
IlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOworICAgIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3I7
CisgICAgdmVjdG9yLmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5ieXRl
cyksIGRhdGEubGVuZ3RoKTsKKyAgICByZXR1cm4gdmVjdG9yOworfQorCitzdGF0aWMgdm9pZCBy
dW5WaWRlb1Rlc3QoTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0LCBjb25zdCBjaGFyKiBleHBlY3RlZE1l
c3NhZ2UgPSAicGxheWluZyIpCit7CisgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhb
W1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmF0aW9u
LmdldCgpLm1lZGlhVHlwZXNSZXF1aXJpbmdVc2VyQWN0aW9uRm9yUGxheWJhY2sgPSBXS0F1ZGlv
dmlzdWFsTWVkaWFUeXBlTm9uZTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDMwMCwgMzAwKSBj
b25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCkgYWRkVG9XaW5kb3c6WUVTXSk7CisgICAg
W3dlYlZpZXcgbG9hZFJlcXVlc3Q6cmVxdWVzdF07CisgICAgRVhQRUNUX1dLX1NUUkVRKFt3ZWJW
aWV3IF90ZXN0X3dhaXRGb3JBbGVydF0sIGV4cGVjdGVkTWVzc2FnZSk7Cit9CisKK1RFU1QoTWVk
aWFMb2FkaW5nLCBSYW5nZVJlcXVlc3RTeW50aGVzaXNXaXRoQ29udGVudExlbmd0aCkKK3sKKyAg
ICBIVFRQU2VydmVyIHNlcnZlcih7CisgICAgICAgIHsiLyIsIHsgdmlkZW9QbGF5VGVzdEhUTUwg
fX0sCisgICAgICAgIHsiL3ZpZGVvLm1wNCIsIHsgdGVzdFZpZGVvQnl0ZXMoKSB9fQorICAgIH0p
OworICAgIHJ1blZpZGVvVGVzdChzZXJ2ZXIucmVxdWVzdCgpKTsKKyAgICBFWFBFQ1RfRVEoc2Vy
dmVyLnRvdGFsUmVxdWVzdHMoKSwgMnUpOwogfQogCitURVNUKE1lZGlhTG9hZGluZywgUmFuZ2VS
ZXF1ZXN0U3ludGhlc2lzV2l0aG91dENvbnRlbnRMZW5ndGgpCit7CisgICAgc2l6ZV90IHRvdGFs
UmVxdWVzdHMgeyAwIH07CisgICAgRnVuY3Rpb248dm9pZChDb25uZWN0aW9uKT4gcmVzcG9uZFRv
UmVxdWVzdHM7CisgICAgcmVzcG9uZFRvUmVxdWVzdHMgPSBbJl0gKENvbm5lY3Rpb24gY29ubmVj
dGlvbikgeworICAgICAgICBjb25uZWN0aW9uLnJlY2VpdmVIVFRQUmVxdWVzdChbJiwgY29ubmVj
dGlvbl0gKFZlY3RvcjxjaGFyPiYmIHJlcXVlc3QpIHsKKyAgICAgICAgICAgIGF1dG8gc2VuZFJl
c3BvbnNlID0gWyYsIGNvbm5lY3Rpb25dIChIVFRQUmVzcG9uc2UgcmVzcG9uc2UsIEhUVFBSZXNw
b25zZTo6SW5jbHVkZUNvbnRlbnRMZW5ndGggaW5jbHVkZUNvbnRlbnRMZW5ndGgpIHsKKyAgICAg
ICAgICAgICAgICBjb25uZWN0aW9uLnNlbmQocmVzcG9uc2Uuc2VyaWFsaXplKGluY2x1ZGVDb250
ZW50TGVuZ3RoKSwgWyYsIGNvbm5lY3Rpb25dIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzcG9u
ZFRvUmVxdWVzdHMoY29ubmVjdGlvbik7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgdG90YWxSZXF1ZXN0cysrOworICAgICAgICAgICAgYXV0byBwYXRo
ID0gSFRUUFNlcnZlcjo6cGFyc2VQYXRoKHJlcXVlc3QpOworICAgICAgICAgICAgaWYgKHBhdGgg
PT0gIi8iKQorICAgICAgICAgICAgICAgIHNlbmRSZXNwb25zZSh7IHZpZGVvUGxheVRlc3RIVE1M
IH0sIEhUVFBSZXNwb25zZTo6SW5jbHVkZUNvbnRlbnRMZW5ndGg6Olllcyk7CisgICAgICAgICAg
ICBlbHNlIGlmIChwYXRoID09ICIvdmlkZW8ubXA0IikKKyAgICAgICAgICAgICAgICBzZW5kUmVz
cG9uc2UodGVzdFZpZGVvQnl0ZXMoKSwgSFRUUFJlc3BvbnNlOjpJbmNsdWRlQ29udGVudExlbmd0
aDo6Tm8pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEFTU0VSVChwYXRoLmlz
TnVsbCgpKTsKKyAgICAgICAgfSk7CisgICAgfTsKKworICAgIEhUVFBTZXJ2ZXIgc2VydmVyKFsm
XShDb25uZWN0aW9uIGNvbm5lY3Rpb24pIHsKKyAgICAgICAgcmVzcG9uZFRvUmVxdWVzdHMoY29u
bmVjdGlvbik7CisgICAgfSk7CisgICAgcnVuVmlkZW9UZXN0KHNlcnZlci5yZXF1ZXN0KCksICJl
cnJvciIpOworICAgIEVYUEVDVF9FUSh0b3RhbFJlcXVlc3RzLCAydSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkKKwogI2VuZGlmIC8vIEVOQUJMRShWSURFTykgJiYgVVNFKEFW
Rk9VTkRBVElPTikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNl
cnZlci5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLmgKaW5kZXggMzk1
ZGFmOTMxZTI4YTcxZTc3YjgwZjEwMTc4ZjU1OTQ4NWYzNTFjMi4uYzI4MGU1ZGFhOThlZjY2MjMy
NmYxYmNmNGZmMjgzZTVmYTM5MDM1MCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9j
b2NvYS9IVFRQU2VydmVyLmgKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2Vy
dmVyLmgKQEAgLTM1LDEwICszNSwxMCBAQAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiBj
bGFzcyBDb25uZWN0aW9uOworc3RydWN0IEhUVFBSZXNwb25zZTsKIAogY2xhc3MgSFRUUFNlcnZl
ciB7CiBwdWJsaWM6Ci0gICAgc3RydWN0IEhUVFBSZXNwb25zZTsKICAgICBzdHJ1Y3QgUmVxdWVz
dERhdGE7CiAgICAgZW51bSBjbGFzcyBQcm90b2NvbCA6IHVpbnQ4X3QgeyBIdHRwLCBIdHRwcywg
SHR0cHNXaXRoTGVnYWN5VExTLCBIdHRwMiB9OwogICAgIHVzaW5nIENlcnRpZmljYXRlVmVyaWZp
ZXIgPSBGdW5jdGlvbjx2b2lkKHNlY19wcm90b2NvbF9tZXRhZGF0YV90LCBzZWNfdHJ1c3RfdCwg
c2VjX3Byb3RvY29sX3ZlcmlmeV9jb21wbGV0ZV90KT47CkBAIC01Myw2ICs1Myw3IEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyB2b2lkIHJlc3BvbmRXaXRoT0soQ29ubmVjdGlvbik7CiAgICAgc3Rh
dGljIHZvaWQgcmVzcG9uZFdpdGhDaGFsbGVuZ2VUaGVuT0soQ29ubmVjdGlvbik7CisgICAgc3Rh
dGljIFN0cmluZyBwYXJzZVBhdGgoY29uc3QgVmVjdG9yPGNoYXI+JiByZXF1ZXN0KTsKIAogcHJp
dmF0ZToKICAgICBzdGF0aWMgUmV0YWluUHRyPG53X3BhcmFtZXRlcnNfdD4gbGlzdGVuZXJQYXJh
bWV0ZXJzKFByb3RvY29sLCBDZXJ0aWZpY2F0ZVZlcmlmaWVyJiYsIFJldGFpblB0cjxTZWNJZGVu
dGl0eVJlZj4mJiwgT3B0aW9uYWw8dWludDE2X3Q+IHBvcnQpOwpAQCAtODEsMTggKzgyLDIwIEBA
IHByaXZhdGU6CiAgICAgUmV0YWluUHRyPG53X2Nvbm5lY3Rpb25fdD4gbV9jb25uZWN0aW9uOwog
fTsKIAotc3RydWN0IEhUVFBTZXJ2ZXI6OkhUVFBSZXNwb25zZSB7CitzdHJ1Y3QgSFRUUFJlc3Bv
bnNlIHsKICAgICBlbnVtIGNsYXNzIFRlcm1pbmF0ZUNvbm5lY3Rpb24geyBObywgWWVzIH07Ci0g
ICAgCisKKyAgICBIVFRQUmVzcG9uc2UoVmVjdG9yPHVpbnQ4X3Q+JiYgYm9keSkKKyAgICAgICAg
OiBib2R5KFdURk1vdmUoYm9keSkpIHsgfQogICAgIEhUVFBSZXNwb25zZShjb25zdCBTdHJpbmcm
IGJvZHkpCi0gICAgICAgIDogYm9keShib2R5KSB7IH0KLSAgICBIVFRQUmVzcG9uc2UoSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4mJiBoZWFkZXJGaWVsZHMsIFN0cmluZyYmIGJvZHkpCisgICAgICAg
IDogYm9keShib2R5RnJvbVN0cmluZyhib2R5KSkgeyB9CisgICAgSFRUUFJlc3BvbnNlKEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+JiYgaGVhZGVyRmllbGRzLCBjb25zdCBTdHJpbmcmIGJvZHkpCiAg
ICAgICAgIDogaGVhZGVyRmllbGRzKFdURk1vdmUoaGVhZGVyRmllbGRzKSkKLSAgICAgICAgLCBi
b2R5KFdURk1vdmUoYm9keSkpIHsgfQotICAgIEhUVFBSZXNwb25zZSh1bnNpZ25lZCBzdGF0dXND
b2RlLCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYmIGhlYWRlckZpZWxkcyA9IHsgfSwgU3RyaW5n
JiYgYm9keSA9IHsgfSkKKyAgICAgICAgLCBib2R5KGJvZHlGcm9tU3RyaW5nKGJvZHkpKSB7IH0K
KyAgICBIVFRQUmVzcG9uc2UodW5zaWduZWQgc3RhdHVzQ29kZSwgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4mJiBoZWFkZXJGaWVsZHMgPSB7IH0sIGNvbnN0IFN0cmluZyYgYm9keSA9IHsgfSkKICAg
ICAgICAgOiBzdGF0dXNDb2RlKHN0YXR1c0NvZGUpCiAgICAgICAgICwgaGVhZGVyRmllbGRzKFdU
Rk1vdmUoaGVhZGVyRmllbGRzKSkKLSAgICAgICAgLCBib2R5KFdURk1vdmUoYm9keSkpIHsgfQor
ICAgICAgICAsIGJvZHkoYm9keUZyb21TdHJpbmcoYm9keSkpIHsgfQogICAgIEhUVFBSZXNwb25z
ZShUZXJtaW5hdGVDb25uZWN0aW9uIHRlcm1pbmF0ZUNvbm5lY3Rpb24pCiAgICAgICAgIDogdGVy
bWluYXRlQ29ubmVjdGlvbih0ZXJtaW5hdGVDb25uZWN0aW9uKSB7IH0KIApAQCAtMTAxLDEwICsx
MDQsMTQgQEAgc3RydWN0IEhUVFBTZXJ2ZXI6OkhUVFBSZXNwb25zZSB7CiAgICAgSFRUUFJlc3Bv
bnNlKCkgPSBkZWZhdWx0OwogICAgIEhUVFBSZXNwb25zZSYgb3BlcmF0b3I9KGNvbnN0IEhUVFBS
ZXNwb25zZSYpID0gZGVmYXVsdDsKICAgICBIVFRQUmVzcG9uc2UmIG9wZXJhdG9yPShIVFRQUmVz
cG9uc2UmJikgPSBkZWZhdWx0OwotICAgIAorCisgICAgZW51bSBjbGFzcyBJbmNsdWRlQ29udGVu
dExlbmd0aCA6IGJvb2wgeyBObywgWWVzIH07CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHNlcmlhbGl6
ZShJbmNsdWRlQ29udGVudExlbmd0aCA9IEluY2x1ZGVDb250ZW50TGVuZ3RoOjpZZXMpOworICAg
IHN0YXRpYyBWZWN0b3I8dWludDhfdD4gYm9keUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisK
ICAgICB1bnNpZ25lZCBzdGF0dXNDb2RlIHsgMjAwIH07CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4gaGVhZGVyRmllbGRzOwotICAgIFN0cmluZyBib2R5OworICAgIFZlY3Rvcjx1aW50OF90
PiBib2R5OwogICAgIFRlcm1pbmF0ZUNvbm5lY3Rpb24gdGVybWluYXRlQ29ubmVjdGlvbiB7IFRl
cm1pbmF0ZUNvbm5lY3Rpb246Ok5vIH07CiB9OwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hU
VFBTZXJ2ZXIubW0KaW5kZXggMTA3NDRhNWM0NDNmNWIzOWZlZjM2YzgzOGU4MDU4NjRmYWZlYjE2
Mi4uYmFiZjRkMDBiMzQyNGY2ZjUxZGRiYjMzZGJjNWVjMmVmMGVhOGVlOSAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQpAQCAtMzgsOCArMzgsOCBAQCBuYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSSB7CiAKIHN0cnVjdCBIVFRQU2VydmVyOjpSZXF1ZXN0RGF0YSA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxSZXF1ZXN0RGF0YSwgV1RGOjpEZXN0cnVjdGlvblRocmVh
ZDo6TWFpblJ1bkxvb3A+IHsKICAgICBSZXF1ZXN0RGF0YShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8
c3RkOjpwYWlyPFN0cmluZywgSFRUUFJlc3BvbnNlPj4gcmVzcG9uc2VzKQotICAgIDogcmVxdWVz
dE1hcChbXShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpwYWlyPFN0cmluZywgSFRUUFNlcnZl
cjo6SFRUUFJlc3BvbnNlPj4gbGlzdCkgewotICAgICAgICBIYXNoTWFwPFN0cmluZywgSFRUUFNl
cnZlcjo6SFRUUFJlc3BvbnNlPiBtYXA7CisgICAgOiByZXF1ZXN0TWFwKFtdKHN0ZDo6aW5pdGlh
bGl6ZXJfbGlzdDxzdGQ6OnBhaXI8U3RyaW5nLCBIVFRQUmVzcG9uc2U+PiBsaXN0KSB7CisgICAg
ICAgIEhhc2hNYXA8U3RyaW5nLCBIVFRQUmVzcG9uc2U+IG1hcDsKICAgICAgICAgZm9yIChhdXRv
JiBwYWlyIDogbGlzdCkKICAgICAgICAgICAgIG1hcC5hZGQocGFpci5maXJzdCwgcGFpci5zZWNv
bmQpOwogICAgICAgICByZXR1cm4gbWFwOwpAQCAtMjEyLDYgKzIxMiwzMSBAQCBzdGF0aWMgVmVj
dG9yPHVpbnQ4X3Q+IHZlY3RvckZyb21EYXRhKGRpc3BhdGNoX2RhdGFfdCBjb250ZW50KQogICAg
IHJldHVybiByZXF1ZXN0OwogfQogCitzdGF0aWMgdm9pZCBhcHBlbmRUb1ZlY3RvcihWZWN0b3I8
dWludDhfdD4mIHZlY3RvciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgYXV0byB1dGY4
ID0gc3RyaW5nLnV0ZjgoKTsKKyAgICB2ZWN0b3IuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KHV0ZjguZGF0YSgpKSwgdXRmOC5sZW5ndGgoKSk7Cit9CisKK1N0cmluZyBI
VFRQU2VydmVyOjpwYXJzZVBhdGgoY29uc3QgVmVjdG9yPGNoYXI+JiByZXF1ZXN0KQoreworICAg
IGlmICghcmVxdWVzdC5zaXplKCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgY29uc3QgY2hh
ciogZ2V0UGF0aFByZWZpeCA9ICJHRVQgIjsKKyAgICBjb25zdCBjaGFyKiBwb3N0UGF0aFByZWZp
eCA9ICJQT1NUICI7CisgICAgY29uc3QgY2hhciogcGF0aFN1ZmZpeCA9ICIgSFRUUC8xLjFcclxu
IjsKKyAgICBjb25zdCBjaGFyKiBwYXRoRW5kID0gc3RybnN0cihyZXF1ZXN0LmRhdGEoKSwgcGF0
aFN1ZmZpeCwgcmVxdWVzdC5zaXplKCkpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocGF0aEVu
ZCwgIkhUVFBTZXJ2ZXIgYXNzdW1lcyByZXF1ZXN0IGlzIEhUVFAgMS4xIik7CisgICAgc2l6ZV90
IHBhdGhQcmVmaXhMZW5ndGggPSAwOworICAgIGlmICghbWVtY21wKHJlcXVlc3QuZGF0YSgpLCBn
ZXRQYXRoUHJlZml4LCBzdHJsZW4oZ2V0UGF0aFByZWZpeCkpKQorICAgICAgICBwYXRoUHJlZml4
TGVuZ3RoID0gc3RybGVuKGdldFBhdGhQcmVmaXgpOworICAgIGVsc2UgaWYgKCFtZW1jbXAocmVx
dWVzdC5kYXRhKCksIHBvc3RQYXRoUHJlZml4LCBzdHJsZW4ocG9zdFBhdGhQcmVmaXgpKSkKKyAg
ICAgICAgcGF0aFByZWZpeExlbmd0aCA9IHN0cmxlbihwb3N0UGF0aFByZWZpeCk7CisgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShwYXRoUHJlZml4TGVuZ3RoLCAiSFRUUFNlcnZlciBhc3N1bWVzIHJl
cXVlc3QgaXMgR0VUIG9yIFBPU1QiKTsKKyAgICBzaXplX3QgcGF0aExlbmd0aCA9IHBhdGhFbmQg
LSByZXF1ZXN0LmRhdGEoKSAtIHBhdGhQcmVmaXhMZW5ndGg7CisgICAgcmV0dXJuIFN0cmluZyhy
ZXF1ZXN0LmRhdGEoKSArIHBhdGhQcmVmaXhMZW5ndGgsIHBhdGhMZW5ndGgpOworfQorCiB2b2lk
IEhUVFBTZXJ2ZXI6OnJlc3BvbmRUb1JlcXVlc3RzKENvbm5lY3Rpb24gY29ubmVjdGlvbiwgUmVm
PFJlcXVlc3REYXRhPiByZXF1ZXN0RGF0YSkKIHsKICAgICBjb25uZWN0aW9uLnJlY2VpdmVIVFRQ
UmVxdWVzdChbY29ubmVjdGlvbiwgcmVxdWVzdERhdGFdIChWZWN0b3I8Y2hhcj4mJiByZXF1ZXN0
KSBtdXRhYmxlIHsKQEAgLTIxOSwzMiArMjQ0LDE0IEBAIHZvaWQgSFRUUFNlcnZlcjo6cmVzcG9u
ZFRvUmVxdWVzdHMoQ29ubmVjdGlvbiBjb25uZWN0aW9uLCBSZWY8UmVxdWVzdERhdGE+IHJlcXVl
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHJlcXVlc3REYXRhLT5yZXF1ZXN0Q291bnQr
KzsKIAotICAgICAgICBjb25zdCBjaGFyKiBnZXRQYXRoUHJlZml4ID0gIkdFVCAiOwotICAgICAg
ICBjb25zdCBjaGFyKiBwb3N0UGF0aFByZWZpeCA9ICJQT1NUICI7Ci0gICAgICAgIGNvbnN0IGNo
YXIqIHBhdGhTdWZmaXggPSAiIEhUVFAvMS4xXHJcbiI7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHBh
dGhFbmQgPSBzdHJuc3RyKHJlcXVlc3QuZGF0YSgpLCBwYXRoU3VmZml4LCByZXF1ZXN0LnNpemUo
KSk7Ci0gICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocGF0aEVuZCwgIkhUVFBTZXJ2ZXIgYXNz
dW1lcyByZXF1ZXN0IGlzIEhUVFAgMS4xIik7Ci0gICAgICAgIHNpemVfdCBwYXRoUHJlZml4TGVu
Z3RoID0gMDsKLSAgICAgICAgaWYgKCFtZW1jbXAocmVxdWVzdC5kYXRhKCksIGdldFBhdGhQcmVm
aXgsIHN0cmxlbihnZXRQYXRoUHJlZml4KSkpCi0gICAgICAgICAgICBwYXRoUHJlZml4TGVuZ3Ro
ID0gc3RybGVuKGdldFBhdGhQcmVmaXgpOwotICAgICAgICBlbHNlIGlmICghbWVtY21wKHJlcXVl
c3QuZGF0YSgpLCBwb3N0UGF0aFByZWZpeCwgc3RybGVuKHBvc3RQYXRoUHJlZml4KSkpCi0gICAg
ICAgICAgICBwYXRoUHJlZml4TGVuZ3RoID0gc3RybGVuKHBvc3RQYXRoUHJlZml4KTsKLSAgICAg
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRShwYXRoUHJlZml4TGVuZ3RoLCAiSFRUUFNlcnZlciBhc3N1
bWVzIHJlcXVlc3QgaXMgR0VUIG9yIFBPU1QiKTsKLSAgICAgICAgc2l6ZV90IHBhdGhMZW5ndGgg
PSBwYXRoRW5kIC0gcmVxdWVzdC5kYXRhKCkgLSBwYXRoUHJlZml4TGVuZ3RoOwotICAgICAgICBT
dHJpbmcgcGF0aChyZXF1ZXN0LmRhdGEoKSArIHBhdGhQcmVmaXhMZW5ndGgsIHBhdGhMZW5ndGgp
OworICAgICAgICBhdXRvIHBhdGggPSBwYXJzZVBhdGgocmVxdWVzdCk7CiAgICAgICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UocmVxdWVzdERhdGEtPnJlcXVlc3RNYXAuY29udGFpbnMocGF0aCksICJU
aGlzIEhUVFBTZXJ2ZXIgZG9lcyBub3Qga25vdyBob3cgdG8gcmVzcG9uZCB0byBhIHJlcXVlc3Qg
Zm9yICVzIiwgcGF0aC51dGY4KCkuZGF0YSgpKTsKIAogICAgICAgICBhdXRvIHJlc3BvbnNlID0g
cmVxdWVzdERhdGEtPnJlcXVlc3RNYXAuZ2V0KHBhdGgpOwogICAgICAgICBpZiAocmVzcG9uc2Uu
dGVybWluYXRlQ29ubmVjdGlvbiA9PSBIVFRQUmVzcG9uc2U6OlRlcm1pbmF0ZUNvbm5lY3Rpb246
OlllcykKICAgICAgICAgICAgIHJldHVybiBjb25uZWN0aW9uLnRlcm1pbmF0ZSgpOwotICAgICAg
ICBTdHJpbmdCdWlsZGVyIHJlc3BvbnNlQnVpbGRlcjsKLSAgICAgICAgcmVzcG9uc2VCdWlsZGVy
LmFwcGVuZCgiSFRUUC8xLjEgIiwgcmVzcG9uc2Uuc3RhdHVzQ29kZSwgJyAnLCBzdGF0dXNUZXh0
KHJlc3BvbnNlLnN0YXR1c0NvZGUpLCAiXHJcbiIpOwotICAgICAgICByZXNwb25zZUJ1aWxkZXIu
YXBwZW5kKCJDb250ZW50LUxlbmd0aDogIiwgcmVzcG9uc2UuYm9keS5sZW5ndGgoKSwgIlxyXG4i
KTsKLSAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogcmVzcG9uc2UuaGVhZGVyRmllbGRzKQotICAg
ICAgICAgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZChwYWlyLmtleSwgIjogIiwgcGFpci52YWx1
ZSwgIlxyXG4iKTsKLSAgICAgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZCgiXHJcbiIpOwotICAg
ICAgICByZXNwb25zZUJ1aWxkZXIuYXBwZW5kKHJlc3BvbnNlLmJvZHkpOwotICAgICAgICBjb25u
ZWN0aW9uLnNlbmQocmVzcG9uc2VCdWlsZGVyLnRvU3RyaW5nKCksIFtjb25uZWN0aW9uLCByZXF1
ZXN0RGF0YV0geworCisgICAgICAgIGNvbm5lY3Rpb24uc2VuZChyZXNwb25zZS5zZXJpYWxpemUo
KSwgW2Nvbm5lY3Rpb24sIHJlcXVlc3REYXRhXSB7CiAgICAgICAgICAgICByZXNwb25kVG9SZXF1
ZXN0cyhjb25uZWN0aW9uLCByZXF1ZXN0RGF0YSk7CiAgICAgICAgIH0pOwogICAgIH0pOwpAQCAt
MzM0LDYgKzM0MSwyOSBAQCB2b2lkIENvbm5lY3Rpb246OmNhbmNlbCgpCiAgICAgbV9jb25uZWN0
aW9uID0gbnVsbHB0cjsKIH0KIAorVmVjdG9yPHVpbnQ4X3Q+IEhUVFBSZXNwb25zZTo6Ym9keUZy
b21TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHZl
Y3RvcjsKKyAgICBhcHBlbmRUb1ZlY3Rvcih2ZWN0b3IsIHN0cmluZyk7CisgICAgcmV0dXJuIHZl
Y3RvcjsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEhUVFBSZXNwb25zZTo6c2VyaWFsaXplKEluY2x1
ZGVDb250ZW50TGVuZ3RoIGluY2x1ZGVDb250ZW50TGVuZ3RoKQoreworICAgIFN0cmluZ0J1aWxk
ZXIgcmVzcG9uc2VCdWlsZGVyOworICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQoIkhUVFAvMS4x
ICIsIHN0YXR1c0NvZGUsICcgJywgc3RhdHVzVGV4dChzdGF0dXNDb2RlKSwgIlxyXG4iKTsKKyAg
ICBpZiAoaW5jbHVkZUNvbnRlbnRMZW5ndGggPT0gSW5jbHVkZUNvbnRlbnRMZW5ndGg6OlllcykK
KyAgICAgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZCgiQ29udGVudC1MZW5ndGg6ICIsIGJvZHku
c2l6ZSgpLCAiXHJcbiIpOworICAgIGZvciAoYXV0byYgcGFpciA6IGhlYWRlckZpZWxkcykKKyAg
ICAgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZChwYWlyLmtleSwgIjogIiwgcGFpci52YWx1ZSwg
IlxyXG4iKTsKKyAgICByZXNwb25zZUJ1aWxkZXIuYXBwZW5kKCJcclxuIik7CisgICAgCisgICAg
VmVjdG9yPHVpbnQ4X3Q+IGJ5dGVzVG9TZW5kOworICAgIGFwcGVuZFRvVmVjdG9yKGJ5dGVzVG9T
ZW5kLCByZXNwb25zZUJ1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgYnl0ZXNUb1NlbmQuYXBwZW5k
VmVjdG9yKGJvZHkpOworICAgIHJldHVybiBieXRlc1RvU2VuZDsKK30KKwogdm9pZCBIMjo6Q29u
bmVjdGlvbjo6c2VuZChGcmFtZSYmIGZyYW1lLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7CiAgICAgYXV0byBmcmFtZVR5cGUgPSBmcmFtZS50
eXBlKCk7Cg==
</data>
<flag name="commit-queue"
          id="437769"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419523</attachid>
            <date>2021-02-06 20:05:52 -0800</date>
            <delta_ts>2021-02-06 20:32:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221072-20210206200552.patch</filename>
            <type>text/plain</type>
            <size>70779</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyNDYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGQyMGQxZWJjMzE5NWFk
YzY0NzUxOTMzMDQ5ZTQxODczYmM2MmY5OS4uMDkxY2QzZDM1MGFlNThjNzhiMjkxNDY4ZTZjNWU4
MmQ0YzllN2YyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIxLTAyLTA2ICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3ludGhl
c2l6ZSByYW5nZSByZXNwb25zZXMgaWYgbmVlZGVkIGluIFdlYkNvcmVOU1VSTFNlc3Npb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTA3MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gd2UgbWFr
ZSBhIG1lZGlhIHJlcXVlc3Qgd2l0aCBhIFJhbmdlIEhUVFAgaGVhZGVyIGZpZWxkIGFuZCB0aGUg
c2VydmVyIGRvZXNuJ3QgcmVzcG9uZCB3aXRoIGEgMjA2IHdpdGggQ29udGVudC1SYW5nZSBoZWFk
ZXIgZmllbGQsCisgICAgICAgIHVudGlsIG5vdyB3ZSB3b3VsZCBqdXN0IGZhaWwgdG8gcGxheSB0
aGUgdmlkZW8uICBJbiBvcmRlciB0byBzdWNjZXNzZnVsbHkgcGxheSB0aGVzZSB2aWRlb3MsIEkg
aW50cm9kdWNlIHRoZSBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yIGNsYXNzLAorICAgICAgICB3aGlj
aCB3aWxsIHJlY2VpdmUgdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBmb3Igc3VjaCBhIHZpZGVvIGFu
ZCBmZWVkIHRoZSBkYXRhIGludG8gV2ViQ29yZU5TVVJMU2Vzc2lvbiBhcyB0aGUgcmVxdWVzdGVk
IHJhbmdlcyBhcmUgcmVjZWl2ZWQuCisgICAgICAgIFNlZWtpbmcgaXMgcHJvYmxlbWF0aWMsIGJ1
dCBhdCBsZWFzdCB3ZSB3aWxsIHRyeSBvdXIgYmVzdCB0byBwbGF5IHRoZSB2aWRlby4KKworICAg
ICAgICBJIGFkZGVkIEFQSSB0ZXN0cyB0aGF0IHRyeSB0byBwbGF5IGEgdmlkZW8gdGhhdCBkaWRu
J3QgcGxheSBiZWZvcmUgdXNpbmcgYSBzZXJ2ZXIgdGhhdCBkb2Vzbid0IHN1cHBvcnQgcmFuZ2Ug
cmVxdWVzdHMuICBNYW51YWwgdmVyaWZpY2F0aW9uIGlzIGFsc28gbmVjZXNzYXJ5LgorCisgICAg
ICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2U6OnNldENsaWVudCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvV2ViQ29yZUFWRlJlc291cmNlTG9hZGVyLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1SZXNvdXJjZU1lZGlhTG9hZGVyOjpjcmVhdGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUGFyc2VkUmVxdWVzdFJhbmdlLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpQYXJzZWRSZXF1ZXN0UmFuZ2U6OnBhcnNlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZFJlcXVlc3RSYW5nZS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlBhcnNlZFJlcXVlc3RSYW5nZTo6YmVnaW4gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFyc2VkUmVxdWVzdFJhbmdlOjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UGFyc2VkUmVxdWVzdFJhbmdlOjpQYXJzZWRSZXF1ZXN0UmFuZ2UpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY29jb2EvUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5oOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1JhbmdlUmVzcG9uc2VHZW5lcmF0b3IubW06IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6RGF0YTo6RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpEYXRhOjpUYXNr
RGF0YTo6VGFza0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6c3ludGhlc2l6ZWRSZXNwb25zZUZv
clJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlUmVzcG9uc2VHZW5lcmF0b3I6OnJlbW92
ZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6Z2l2ZVJl
c3BvbnNlVG9UYXNrSWZCeXRlc0luUmFuZ2VSZWNlaXZlZCk6CisgICAgICAgIChXZWJDb3JlOjpS
YW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpleHBlY3RlZENvbnRlbnRMZW5ndGhGcm9tRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpnaXZlUmVzcG9uc2VUb1Rh
c2tzV2l0aEZpbmlzaGVkUmFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlUmVzcG9uc2VH
ZW5lcmF0b3I6OndpbGxIYW5kbGVSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlUmVz
cG9uc2VHZW5lcmF0b3I6OndpbGxTeW50aGVzaXplUmFuZ2VSZXNwb25zZXMpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5oOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5tbToKKyAgICAgICAg
KC1bV2ViQ29yZU5TVVJMU2Vzc2lvbiByYW5nZVJlc3BvbnNlR2VuZXJhdG9yXSk6CisgICAgICAg
ICgtW1dlYkNvcmVOU1VSTFNlc3Npb24gZGF0YVRhc2tXaXRoVVJMOl0pOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjpkYXRhU2VudCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OnJlc3BvbnNl
UmVjZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNr
Q2xpZW50OjpzaG91bGRDYWNoZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVO
U1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6ZGF0YVJlY2VpdmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6cmVkaXJlY3RSZWNlaXZlZCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmFj
Y2Vzc0NvbnRyb2xDaGVja0ZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlTlNVUkxT
ZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmxvYWRGYWlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
Q29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQpOgorICAgICAgICAo
LVtXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgX3Jlc3RhcnRdKToKKyAgICAgICAgKC1bV2Vi
Q29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrIF9maW5pc2hdKToKKyAgICAgICAgKC1bV2ViQ29yZU5T
VVJMU2Vzc2lvbkRhdGFUYXNrIHJlc291cmNlOnNlbnRCeXRlczp0b3RhbEJ5dGVzVG9CZVNlbnQ6
XSk6CisgICAgICAgICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayByZXNvdXJjZTpyZWNl
aXZlZFJlc3BvbnNlOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXZWJDb3JlTlNV
UkxTZXNzaW9uRGF0YVRhc2sgcmVzb3VyY2U6c2hvdWxkQ2FjaGVSZXNwb25zZTpdKToKKyAgICAg
ICAgKC1bV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrIHJlc291cmNlOnJlY2VpdmVkRGF0YTps
ZW5ndGg6XSk6CisgICAgICAgICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayByZXNvdXJj
ZTpyZWNlaXZlZFJlZGlyZWN0OnJlcXVlc3Q6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAg
ICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayBfcmVzb3VyY2U6bG9hZEZpbmlzaGVkV2l0
aEVycm9yOm1ldHJpY3M6XSk6CisgICAgICAgICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFz
ayByZXNvdXJjZTphY2Nlc3NDb250cm9sQ2hlY2tGYWlsZWRXaXRoRXJyb3I6XSk6CisgICAgICAg
ICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayByZXNvdXJjZTpsb2FkRmFpbGVkV2l0aEVy
cm9yOl0pOgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgcmVzb3VyY2VG
aW5pc2hlZDptZXRyaWNzOl0pOgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRh
c2sgaW5pdFdpdGhTZXNzaW9uOmlkZW50aWZpZXI6VVJMOl0pOiBEZWxldGVkLgorCiAyMDIxLTAy
LTA2ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSUZD
XVtRdWlya10gS2VlcCB0aGUgcm9vdCBpbmxpbmUgYm94IGJhc2VsaW5lIGFuY2hvcmVkIGF0IDAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggMTZlMTViMTM3YzRiMjJmMTZkZWY5MDdkMTYzZmQyOTA4MDEwMzE3Zi4uY2U4
N2ZlODlmMWU4NTFlZjU1YWI0YmRkNWZmNmY1OGJmMDhjZjE4YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMyBAQAorMjAyMS0wMi0wNiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgorCisgICAgICAgIFN5bnRoZXNpemUgcmFuZ2UgcmVzcG9uc2VzIGlmIG5lZWRlZCBp
biBXZWJDb3JlTlNVUkxTZXNzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjEwNzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJl
bW90ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZTo6cmVx
dWVzdFJlc291cmNlKToKKwogMjAyMS0wMi0wNSAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGUu
Y29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI3MjMzNyk6IGNyYXNoIHVuZGVyIFdlYkNvcmU6
OlNwZWVjaFJlY29nbml6ZXI6OnNldEluYWN0aXZlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggYTVlMTVj
ODUwN2Y2OWU4MTQ4ZWU3N2IzODRkZTEzODFkYTc3OTYwMC4uYzJlY2RiYzJkYzYzNTkxMzQ0ZWVj
ZGRhYTIxZjYzMDc2OTM2ODQ2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIxMTksNiArMjExOSw3IEBA
IHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRlTm90aWZpZXIuY3BwCiBwbGF0Zm9ybS9uZXR3
b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5jcHAKIHBsYXRmb3JtL25ldHdvcmsvUGFyc2VkQ29u
dGVudFJhbmdlLmNwcAogcGxhdGZvcm0vbmV0d29yay9QYXJzZWRDb250ZW50VHlwZS5jcHAKK3Bs
YXRmb3JtL25ldHdvcmsvUGFyc2VkUmVxdWVzdFJhbmdlLmNwcAogcGxhdGZvcm0vbmV0d29yay9Q
cm90ZWN0aW9uU3BhY2VCYXNlLmNwcAogcGxhdGZvcm0vbmV0d29yay9Qcm94eVNlcnZlci5jcHAK
IHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VFcnJvckJhc2UuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dAppbmRleCBkMmIzNDIzNjI1NWE0MTdmM2FhMTYzNjVlMTAzYmI3YzEyMjA3MjQ2Li5kMzE5
ZTE4ZjEyOGFhOGVkNmY1YzBlY2RlZGJiOWU3ZTM2M2Y1MTYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2Nv
YS50eHQKQEAgLTU3MCw2ICs1NzAsNyBAQCBwbGF0Zm9ybS9uZXR3b3JrL2NvY29hL0NyZWRlbnRp
YWxDb2NvYS5tbQogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrTG9hZE1ldHJpY3MubW0K
IHBsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0KIHBs
YXRmb3JtL25ldHdvcmsvY29jb2EvUHJvdGVjdGlvblNwYWNlQ29jb2EubW0KK3BsYXRmb3JtL25l
dHdvcmsvY29jb2EvUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5tbQogcGxhdGZvcm0vbmV0d29yay9j
b2NvYS9SZXNvdXJjZVJlcXVlc3RDb2NvYS5tbQogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9SZXNv
dXJjZVJlc3BvbnNlQ29jb2EubW0gQG5vLXVuaWZ5IC8vIFVuc2FmZSB0byB1bmlmeSB1bnRpbCBy
ZGFyOi8vcHJvYmxlbS80ODg1MzEzNyBpcyByZXNvbHZlZAogcGxhdGZvcm0vbmV0d29yay9jb2Nv
YS9XZWJDb3JlTlNVUkxTZXNzaW9uLm1tIEBuby11bmlmeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGJkM2JjMTYwZDhiYWY0N2I0
MTYyMjg4MDc3NjU2MDJiNWQyYjQ0OTIuLjBlMzk3YWM2MmU3NTZkMWYzN2UzMWYxYmZmYWY3NmFj
MWNhMTBjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTE5NDEsNiArMTk0MSw4IEBACiAJCTVDMkIxQUVDMjIzOTdFQkMwMEI5
MUNGNyAvKiBSZXNvdXJjZVJlc3BvbnNlQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMUY3OEQwQjFDMjU0MjJDMDAyNDU0NDYgLyogUmVzb3Vy
Y2VSZXNwb25zZUNvY29hLm1tICovOyB9OwogCQk1QzQzMDRCMTE5MUFDOTA4MDAwRTJCQzAgLyog
RVhUU2hhZGVyVGV4dHVyZUxPRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUM0MzA0QUUxOTFBQzkwODAwMEUyQkMwIC8qIEVYVFNoYWRlclRleHR1cmVM
T0QuaCAqLzsgfTsKIAkJNUM0MzA0QjYxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4
dHVyZUxPRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUM0MzA0QjQxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oICovOyB9
OworCQk1QzRBMEZENzI1QzM0MzUwMDBEOUVFOTcgLyogUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM0QTBGRDUy
NUMzNDJDODAwRDlFRTk3IC8qIFJhbmdlUmVzcG9uc2VHZW5lcmF0b3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1QzRBMEZEQTI1QzM0NDlBMDBE
OUVFOTcgLyogUGFyc2VkUmVxdWVzdFJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1QzRBMEZEODI1QzM0NDZDMDBEOUVFOTcgLyogUGFyc2VkUmVx
dWVzdFJhbmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNUM1M0RDRTEyNDQ2NURGQzAwQTkzMTI0IC8qIEFwcGxlUGF5U2V0dXBGZWF0dXJlV2Vi
Q29yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM1
M0RDQ0YyNDQ2NDQ5OTAwQTkzMTI0IC8qIEFwcGxlUGF5U2V0dXBGZWF0dXJlV2ViQ29yZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVDNTNEQ0U3
MjQ0NjhBRDIwMEE5MzEyNCAvKiBQYXltZW50SW5zdGFsbG1lbnRDb25maWd1cmF0aW9uV2ViQ29y
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM1M0RD
Q0UyNDQ2NDQ5OTAwQTkzMTI0IC8qIFBheW1lbnRJbnN0YWxsbWVudENvbmZpZ3VyYXRpb25XZWJD
b3JlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NUM1M0RDRUEyNDQ2OEZCNDAwQTkzMTI0IC8qIEFwcGxlUGF5U2V0dXBXZWJDb3JlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzUzRENDQjI0NDY0NDk4
MDBBOTMxMjQgLyogQXBwbGVQYXlTZXR1cFdlYkNvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTQ4NSw2ICs5NDg3LDExIEBACiAJCTVDNDMw
NEFGMTkxQUM5MDgwMDBFMkJDMCAvKiBFWFRTaGFkZXJUZXh0dXJlTE9ELmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBFWFRTaGFkZXJUZXh0dXJlTE9ELmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNUM0MzA0QjMxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4dHVy
ZUxPRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVFNoYWRl
clRleHR1cmVMT0QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzQzMDRCNDE5
MUFFRjQ2MDAwRTJCQzAgLyogSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1QzRBMEZEMzI1QzM0MkM3MDBEOUVFOTcgLyogUmFuZ2VSZXNwb25z
ZUdlbmVyYXRvci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJh
bmdlUmVzcG9uc2VHZW5lcmF0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVD
NEEwRkQ1MjVDMzQyQzgwMEQ5RUU5NyAvKiBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmdlUmVzcG9uc2VHZW5lcmF0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QTBGRDYyNUMzNDJEQjAwRDlFRTk3IC8qIENl
cnRpZmljYXRlSW5mb0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gQ2VydGlmaWNhdGVJbmZvQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTVDNEEwRkQ4MjVDMzQ0NkMwMEQ5RUU5NyAvKiBQYXJzZWRSZXF1ZXN0UmFuZ2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VkUmVxdWVzdFJhbmdlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEEwRkQ5MjVDMzQ0NkQwMEQ5RUU5NyAvKiBQYXJz
ZWRSZXF1ZXN0UmFuZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGFyc2VkUmVxdWVzdFJhbmdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM1
MzgxQUYxRDg3OTNFMDAwRTJFQkU2IC8qIFVSTFNlYXJjaFBhcmFtcy5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gVVJMU2VhcmNoUGFyYW1zLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNUM1MzgxQjAxRDg3RDQ1NzAwRTJFQkU2IC8qIFVSTFNlYXJjaFBhcmFtcy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxTZWFyY2hQYXJhbXMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzUzODFCMTFEODdENDU3MDBFMkVCRTYgLyog
VVJMU2VhcmNoUGFyYW1zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVSTFNl
YXJjaFBhcmFtcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE4MjQsNiArMjE4
MzEsOCBAQAogCQkJCUNEQ0Q0MUU2MUMzRERCMDkwMDk2NUQ5OSAvKiBQYXJzZWRDb250ZW50UmFu
Z2UuaCAqLywKIAkJCQk0NDc5NTgwMjE2NDNCNDdCMDAxRTBBN0YgLyogUGFyc2VkQ29udGVudFR5
cGUuY3BwICovLAogCQkJCTQ0Nzk1ODAzMTY0M0I0N0IwMDFFMEE3RiAvKiBQYXJzZWRDb250ZW50
VHlwZS5oICovLAorCQkJCTVDNEEwRkQ5MjVDMzQ0NkQwMEQ5RUU5NyAvKiBQYXJzZWRSZXF1ZXN0
UmFuZ2UuY3BwICovLAorCQkJCTVDNEEwRkQ4MjVDMzQ0NkMwMEQ5RUU5NyAvKiBQYXJzZWRSZXF1
ZXN0UmFuZ2UuaCAqLywKIAkJCQkzN0JBQUU1NzE5ODBEMUREMDA1REZFNzEgLyogUHJvdGVjdGlv
blNwYWNlLmggKi8sCiAJCQkJNTE0Qzc2NUYwQ0U5MjNBMTAwN0VGM0NEIC8qIFByb3RlY3Rpb25T
cGFjZUJhc2UuY3BwICovLAogCQkJCTUxNEM3NjYwMENFOTIzQTEwMDdFRjNDRCAvKiBQcm90ZWN0
aW9uU3BhY2VCYXNlLmggKi8sCkBAIC0yMjkwNiw2ICsyMjkxNSw3IEBACiAJCTdFN0RFMUZFMTk1
Q0VGMkQwMDM1MzYzQiAvKiBjb2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJNUM0QTBGRDYyNUMzNDJEQjAwRDlFRTk3IC8qIENlcnRpZmljYXRlSW5m
b0NvY29hLm1tICovLAogCQkJCTUxRDEyNDhDMUU3MzY0NTYwMDJCMjgyMCAvKiBDb29raWVDb2Nv
YS5tbSAqLywKIAkJCQk1MTIwQkJBRDFGMUNFNzcwMDBFRkVCRjEgLyogQ29va2llU3RvcmFnZU9i
c2VydmVyLmggKi8sCiAJCQkJNTEyMEJCQUMxRjFDRTc3MDAwRUZFQkYxIC8qIENvb2tpZVN0b3Jh
Z2VPYnNlcnZlci5tbSAqLywKQEAgLTIyOTE2LDYgKzIyOTI2LDggQEAKIAkJCQk1MUQxMjQ4QTFF
NzM2MjVDMDAyQjI4MjAgLyogTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0gKi8sCiAJCQkJ
MzcyQURBMzcxOTdGNDdCOTAwRkM1MDFFIC8qIFByb3RlY3Rpb25TcGFjZUNvY29hLmggKi8sCiAJ
CQkJMzcyQURBMzkxOTdGNjg3NjAwRkM1MDFFIC8qIFByb3RlY3Rpb25TcGFjZUNvY29hLm1tICov
LAorCQkJCTVDNEEwRkQ1MjVDMzQyQzgwMEQ5RUU5NyAvKiBSYW5nZVJlc3BvbnNlR2VuZXJhdG9y
LmggKi8sCisJCQkJNUM0QTBGRDMyNUMzNDJDNzAwRDlFRTk3IC8qIFJhbmdlUmVzcG9uc2VHZW5l
cmF0b3IubW0gKi8sCiAJCQkJN0U3REUxRkMxOTVDRUYyNjAwMzUzNjNCIC8qIFJlc291cmNlUmVx
dWVzdENvY29hLm1tICovLAogCQkJCUExRjc4RDBCMUMyNTQyMkMwMDI0NTQ0NiAvKiBSZXNvdXJj
ZVJlc3BvbnNlQ29jb2EubW0gKi8sCiAJCQkJQ0QyMjVDMEExQzQ2RkJGNDAwMTQwNzYxIC8qIFdl
YkNvcmVOU1VSTFNlc3Npb24uaCAqLywKQEAgLTMzOTc1LDYgKzMzOTg3LDcgQEAKIAkJCQlBMTg4
OTBBRjFBQTEzRjI1MDAyNkMzMDEgLyogUGFyZW50YWxDb250cm9sc0NvbnRlbnRGaWx0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUNEQ0Q0MUU4MUMzRERCMEEwMDk2NUQ5OSAvKiBQYXJzZWRDb250
ZW50UmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0Nzk1ODA0MTY0M0I0OUEwMDFFMEE3RiAv
KiBQYXJzZWRDb250ZW50VHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUM0QTBGREEyNUMzNDQ5
QTAwRDlFRTk3IC8qIFBhcnNlZFJlcXVlc3RSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM2
RDVBMjMxOTNFOEUwQzAwQ0U0Q0FCIC8qIFBhcnNpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUY1NUIzRENBMTI1MUYxMkQwMDNFRjI2OSAvKiBQYXNzd29yZElucHV0VHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNEIyNzA4QzcwQUYxOUVFNDAwNjUxMjdGIC8qIFBhc3RlYm9hcmQu
aCBpbiBIZWFkZXJzICovLApAQCAtMzQxNzgsNiArMzQxOTEsNyBAQAogCQkJCTkzRjE5OTE4MDgy
NDVFNTkwMDFFOUFCQyAvKiBSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNEOUQ1M0MwREEy
N0UxODAwNzcyMTZDIC8qIFJhbmdlQm91bmRhcnlQb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RjU1QjNEQ0UxMjUxRjEyRDAwM0VGMjY5IC8qIFJhbmdlSW5wdXRUeXBlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1QzRBMEZENzI1QzM0MzUwMDBEOUVFOTcgLyogUmFuZ2VSZXNwb25zZUdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU4NEU5RTExNzY2OEJGMTAwODE1QjY4IC8qIFJhc3Rl
clNoYXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODREODI3QzExRDMzM0VEMDA5NzI5OTAgLyog
UmF3RGF0YURvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTZFNkZFODFCQkQx
MkRGMDAwQTYwNDMgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaAppbmRleCA1N2JmZThhY2Q2Mjg1
ZmViOWIyZWI4YjIyMmEyYjE0MDlhMjEwMTYwLi4zZWQ0ZTA1YzQzOTRkZmY2M2FlNWZjNmJhMWVm
MWE4MDQyNTQzY2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaApAQCAtNDEsNyArNDEs
NyBAQCBjbGFzcyBSZXNvdXJjZUVycm9yOwogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3Mg
UmVzb3VyY2VSZXNwb25zZTsKIAotY2xhc3MgUGxhdGZvcm1NZWRpYVJlc291cmNlQ2xpZW50IHsK
K2NsYXNzIFBsYXRmb3JtTWVkaWFSZXNvdXJjZUNsaWVudCA6IHB1YmxpYyBSZWZDb3VudGVkPFBs
YXRmb3JtTWVkaWFSZXNvdXJjZUNsaWVudD4gewogcHVibGljOgogICAgIHZpcnR1YWwgflBsYXRm
b3JtTWVkaWFSZXNvdXJjZUNsaWVudCgpID0gZGVmYXVsdDsKIApAQCAtODEsMTEgKzgxLDExIEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBk
aWRQYXNzQWNjZXNzQ29udHJvbENoZWNrKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAg
IHZvaWQgc2V0Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybU1lZGlhUmVzb3VyY2VDbGll
bnQ+JiYgY2xpZW50KSB7IG1fY2xpZW50ID0gV1RGTW92ZShjbGllbnQpOyB9CisgICAgdm9pZCBz
ZXRDbGllbnQoUmVmUHRyPFBsYXRmb3JtTWVkaWFSZXNvdXJjZUNsaWVudD4mJiBjbGllbnQpIHsg
bV9jbGllbnQgPSBXVEZNb3ZlKGNsaWVudCk7IH0KICAgICBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VD
bGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50LmdldCgpOyB9CiAKIHByb3RlY3RlZDoK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1NZWRpYVJlc291cmNlQ2xpZW50PiBtX2NsaWVu
dDsKKyAgICBSZWZQdHI8UGxhdGZvcm1NZWRpYVJlc291cmNlQ2xpZW50PiBtX2NsaWVudDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1dlYkNvcmVBVkZSZXNvdXJjZUxvYWRl
ci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L1dlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5tbQppbmRleCBjODU1ZGUwODhiNmQ5NDRkYTZmYzQ1
NTIyZmZiYjJmNTAyOGM2MjFjLi40ZDVmMzU4MGViYWQzMGJmMDBjMzY5ZGEwMTVmMDM4ZTYwZmU1
YmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9XZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvV2ViQ29yZUFWRlJlc291cmNl
TG9hZGVyLm1tCkBAIC0xNzAsNyArMTcwLDcgQEAgV2Vha1B0cjxQbGF0Zm9ybVJlc291cmNlTWVk
aWFMb2FkZXI+IFBsYXRmb3JtUmVzb3VyY2VNZWRpYUxvYWRlcjo6Y3JlYXRlKFdlYkNvcmUKICAg
ICBpZiAoIXJlc291cmNlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBhdXRvKiByZXNv
dXJjZVBvaW50ZXIgPSByZXNvdXJjZS5nZXQoKTsKLSAgICBhdXRvIGNsaWVudCA9IHN0ZDo6dW5p
cXVlX3B0cjxQbGF0Zm9ybVJlc291cmNlTWVkaWFMb2FkZXI+KG5ldyBQbGF0Zm9ybVJlc291cmNl
TWVkaWFMb2FkZXIgeyBwYXJlbnQsIHJlc291cmNlLnJlbGVhc2VOb25OdWxsKCkgfSk7CisgICAg
YXV0byBjbGllbnQgPSBhZG9wdFJlZigqbmV3IFBsYXRmb3JtUmVzb3VyY2VNZWRpYUxvYWRlciB7
IHBhcmVudCwgcmVzb3VyY2UucmVsZWFzZU5vbk51bGwoKSB9KTsKICAgICBhdXRvIHJlc3VsdCA9
IG1ha2VXZWFrUHRyKGNsaWVudC5nZXQoKSk7CiAKICAgICByZXNvdXJjZVBvaW50ZXItPnNldENs
aWVudChXVEZNb3ZlKGNsaWVudCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0
cmVhbWVyLmNwcAppbmRleCBjODQ0YmUyZGQzNzI3ZWYyNzY0YjcyNTcwNmQyMjA2MjY3YmViNDk3
Li5lNzlmODY1ZDg4MDI5ODg0MDE0MTE3MDFkMzdmNTc2OGQyNWFmYmViIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNl
R1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcApAQCAtNjk5LDcgKzY5OSw3IEBAIHN0
YXRpYyB2b2lkIHdlYktpdFdlYlNyY01ha2VSZXF1ZXN0KFdlYktpdFdlYlNyYyogc3JjLCBEYXRh
TXV0ZXg8V2ViS2l0V2ViU3JjUHJpCiAgICAgICAgIFBsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRl
cjo6TG9hZE9wdGlvbnMgbG9hZE9wdGlvbnMgPSAwOwogICAgICAgICBtZW1iZXJzLT5yZXNvdXJj
ZSA9IG1lbWJlcnMtPmxvYWRlci0+cmVxdWVzdFJlc291cmNlKFJlc291cmNlUmVxdWVzdChyZXF1
ZXN0KSwgbG9hZE9wdGlvbnMpOwogICAgICAgICBpZiAobWVtYmVycy0+cmVzb3VyY2UpIHsKLSAg
ICAgICAgICAgIG1lbWJlcnMtPnJlc291cmNlLT5zZXRDbGllbnQobWFrZVVuaXF1ZTxDYWNoZWRS
ZXNvdXJjZVN0cmVhbWluZ0NsaWVudD4ocHJvdGVjdG9yLmdldCgpLCBSZXNvdXJjZVJlcXVlc3Qo
cmVxdWVzdCksIHJlcXVlc3ROdW1iZXIpKTsKKyAgICAgICAgICAgIG1lbWJlcnMtPnJlc291cmNl
LT5zZXRDbGllbnQoYWRvcHRSZWYoKm5ldyBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudChw
cm90ZWN0b3IuZ2V0KCksIFJlc291cmNlUmVxdWVzdChyZXF1ZXN0KSwgcmVxdWVzdE51bWJlcikp
KTsKICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocHJvdGVjdG9yLmdldCgpLCAiU3RhcnRl
ZCByZXF1ZXN0IFIldSIsIHJlcXVlc3ROdW1iZXIpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgR1NUX0VSUk9SX09CSkVDVChwcm90ZWN0b3IuZ2V0KCksICJGYWlsZWQgdG8gc2V0dXAg
c3RyZWFtaW5nIGNsaWVudCB0byBoYW5kbGUgUiV1IiwgcmVxdWVzdE51bWJlcik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZFJlcXVlc3RSYW5nZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZFJlcXVlc3RSYW5nZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYmQ5YWNmYTlhZjFhNmFiYjA5YWM1ZWUyMTFiODcyZDg1MWIxNDlhNAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGFyc2Vk
UmVxdWVzdFJhbmdlLmNwcApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQ
YXJzZWRSZXF1ZXN0UmFuZ2UuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK09wdGlvbmFsPFBhcnNlZFJlcXVlc3RSYW5nZT4gUGFy
c2VkUmVxdWVzdFJhbmdlOjpwYXJzZShjb25zdCBTdHJpbmcmIGlucHV0KQoreworICAgIC8vIGh0
dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMzI3NlY3Rpb24tMi4xIGJ1dCBhc3N1bWlu
ZyB0aGVyZSB3aWxsIGFsd2F5cyBiZSBhIGJlZ2luIGFuZCBhbiBlbmQgb3IgcGFyc2luZyB3aWxs
IGZhaWwKKyAgICBpZiAoIWlucHV0LnN0YXJ0c1dpdGgoImJ5dGVzPSJfcykpCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBzaXplX3QgYmVnaW4geyAwIH07CisgICAgc2l6ZV90
IGVuZCB7IDAgfTsKKyAgICBzaXplX3QgcmFuZ2VCZWdpblBvc2l0aW9uID0gNjsKKyAgICBzaXpl
X3QgZGFzaFBvc2l0aW9uID0gaW5wdXQuZmluZCgnLScsIHJhbmdlQmVnaW5Qb3NpdGlvbik7Cisg
ICAgaWYgKGRhc2hQb3NpdGlvbiA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgIC8vIEZJWE1FOiBBZGQgU3RyaW5nVmlldy50b1VJbnQ2NFN0cmljdCB0byBh
dm9pZCB0aGVzZSB1bm5lY2Vzc2FyeSBTdHJpbmcgY29waWVzLgorICAgIC8vIFNhbWUgaW4gUGFy
c2VkQ29udGVudFJhbmdlLgorICAgIGJvb2wgb2sgPSB0cnVlOworICAgIFN0cmluZyBiZWdpblN0
cmluZyA9IGlucHV0LnN1YnN0cmluZyhyYW5nZUJlZ2luUG9zaXRpb24sIGRhc2hQb3NpdGlvbiAt
IHJhbmdlQmVnaW5Qb3NpdGlvbik7CisgICAgYmVnaW4gPSBiZWdpblN0cmluZy50b1VJbnQ2NFN0
cmljdCgmb2spOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
KyAgICBTdHJpbmcgZW5kU3RyaW5nID0gaW5wdXQuc3Vic3RyaW5nKGRhc2hQb3NpdGlvbiArIDEp
OworICAgIGVuZCA9IGVuZFN0cmluZy50b1VJbnQ2NFN0cmljdCgmb2spOworICAgIGlmICghb2sp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoYmVnaW4gPiBlbmQpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4ge3sgYmVnaW4sIGVuZCB9
fTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Q
YXJzZWRSZXF1ZXN0UmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGFy
c2VkUmVxdWVzdFJhbmdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGFiZGI2M2VhZDVlZWYxM2Q5Mjg1NTA0OWY2
ZjEzZmU4ZTE2OWI1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUGFyc2VkUmVxdWVzdFJhbmdlLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBQYXJzZWRSZXF1ZXN0UmFuZ2UgeworcHVibGljOgorICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBPcHRpb25hbDxQYXJzZWRSZXF1ZXN0UmFuZ2U+IHBhcnNl
KGNvbnN0IFN0cmluZyYpOworCisgICAgc2l6ZV90IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9i
ZWdpbjsgfQorICAgIHNpemVfdCBlbmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQorCitwcml2
YXRlOgorICAgIFBhcnNlZFJlcXVlc3RSYW5nZShzaXplX3QgYmVnaW4sIHNpemVfdCBlbmQpCisg
ICAgICAgIDogbV9iZWdpbihiZWdpbikKKyAgICAgICAgLCBtX2VuZChlbmQpIHsgfQorCisgICAg
c2l6ZV90IG1fYmVnaW4geyAwIH07CisgICAgc2l6ZV90IG1fZW5kIHsgMCB9OworfTsKKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9SYW5nZVJl
c3BvbnNlR2VuZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29h
L1JhbmdlUmVzcG9uc2VHZW5lcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZjI4YmE3NTFmN2ZkMjUyYmVk
M2YyNDBiMTI3NmFhMTU4MTFlN2MyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jb2NvYS9SYW5nZVJlc3BvbnNlR2VuZXJhdG9yLmgKQEAgLTAsMCAr
MSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1VSTEhh
c2guaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCitPQkpDX0NMQVNTIE5TVVJMUmVxdWVz
dDsKK09CSkNfQ0xBU1MgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFBhcnNlZFJlcXVlc3RSYW5nZTsKK2NsYXNzIFBsYXRmb3JtTWVk
aWFSZXNvdXJjZTsKK2NsYXNzIFJlc291cmNlUmVzcG9uc2U7CisKK2NsYXNzIFJhbmdlUmVzcG9u
c2VHZW5lcmF0b3IgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmFuZ2VSZXNwb25zZUdlbmVyYXRv
cj4geworcHVibGljOgorICAgIFJhbmdlUmVzcG9uc2VHZW5lcmF0b3IoKTsKKyAgICB+UmFuZ2VS
ZXNwb25zZUdlbmVyYXRvcigpOworCisgICAgYm9vbCB3aWxsU3ludGhlc2l6ZVJhbmdlUmVzcG9u
c2VzKFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAqLCBQbGF0Zm9ybU1lZGlhUmVzb3VyY2Um
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgYm9vbCB3aWxsSGFuZGxlUmVxdWVzdChX
ZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgKiwgTlNVUkxSZXF1ZXN0ICopOworCitwcml2YXRl
OgorICAgIHN0cnVjdCBEYXRhOworICAgIHZvaWQgZ2l2ZVJlc3BvbnNlVG9UYXNrc1dpdGhGaW5p
c2hlZFJhbmdlcyhEYXRhJik7CisgICAgdm9pZCBnaXZlUmVzcG9uc2VUb1Rhc2tJZkJ5dGVzSW5S
YW5nZVJlY2VpdmVkKFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAqLCBjb25zdCBQYXJzZWRS
ZXF1ZXN0UmFuZ2UmLCBPcHRpb25hbDxzaXplX3Q+IGV4cGVjdGVkQ29udGVudExlbmd0aCwgY29u
c3QgRGF0YSYpOworICAgIHN0YXRpYyBPcHRpb25hbDxzaXplX3Q+IGV4cGVjdGVkQ29udGVudExl
bmd0aEZyb21EYXRhKGNvbnN0IERhdGEmKTsKKyAgICB2b2lkIHJlbW92ZVRhc2soV2ViQ29yZU5T
VVJMU2Vzc2lvbkRhdGFUYXNrICopOworCisgICAgSGFzaE1hcDxVUkwsIHN0ZDo6dW5pcXVlX3B0
cjxEYXRhPj4gbV9tYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1JhbmdlUmVzcG9uc2VHZW5l
cmF0b3IubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1JhbmdlUmVz
cG9uc2VHZW5lcmF0b3IubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzFjOWJkMjlkOWQxYjRiMDM5MGMxMjNkMTYy
ZjExMTllZmJlOTk4NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY29jb2EvUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5tbQpAQCAtMCwwICsxLDI4NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUmFuZ2VSZXNwb25z
ZUdlbmVyYXRvci5oIgorCisjaW1wb3J0ICJOZXR3b3JrTG9hZE1ldHJpY3MuaCIKKyNpbXBvcnQg
IlBhcnNlZFJlcXVlc3RSYW5nZS5oIgorI2ltcG9ydCAiUGxhdGZvcm1NZWRpYVJlc291cmNlTG9h
ZGVyLmgiCisjaW1wb3J0ICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW1wb3J0ICJTaGFyZWRCdWZm
ZXIuaCIKKyNpbXBvcnQgIldlYkNvcmVOU1VSTFNlc3Npb24uaCIKKyNpbXBvcnQgPHBhbC9zcGkv
Y2YvQ0ZOZXR3b3JrU1BJLmg+CisjaW1wb3J0IDx3dGYvRmFzdE1hbGxvYy5oPgorI2ltcG9ydCA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVj
dCBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpEYXRhIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBEYXRhKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
LCBQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc291cmNlKQorICAgICAgICA6IGJ1ZmZlcihTaGFy
ZWRCdWZmZXI6OmNyZWF0ZSgpKQorICAgICAgICAsIG9yaWdpbmFsUmVzcG9uc2UocmVzcG9uc2Up
CisgICAgICAgICwgcmVzb3VyY2UoJnJlc291cmNlKSB7IH0KKworICAgIHN0cnVjdCBUYXNrRGF0
YSA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxUYXNrRGF0YT4geworICAgICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIFRhc2tEYXRhKFBhcnNlZFJlcXVl
c3RSYW5nZSYmIHJhbmdlKQorICAgICAgICAgICAgOiByYW5nZShXVEZNb3ZlKHJhbmdlKSkKKyAg
ICAgICAgICAgICwgbmV4dEJ5dGVUb0dpdmVCdWZmZXJJbmRleChyYW5nZS5iZWdpbigpKSB7IH0K
KworICAgICAgICBQYXJzZWRSZXF1ZXN0UmFuZ2UgcmFuZ2U7CisgICAgICAgIHNpemVfdCBuZXh0
Qnl0ZVRvR2l2ZUJ1ZmZlckluZGV4IHsgMCB9OworICAgICAgICBib29sIHN5bnRoZXNpemVkUmVz
cG9uc2UgeyBmYWxzZSB9OworICAgIH07CisgICAgCisgICAgSGFzaE1hcDxSZXRhaW5QdHI8V2Vi
Q29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrPiwgc3RkOjp1bmlxdWVfcHRyPFRhc2tEYXRhPj4gdGFz
a0RhdGE7CisgICAgUmVmPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyOworICAgIFJlc291cmNlUmVzcG9u
c2Ugb3JpZ2luYWxSZXNwb25zZTsKKyAgICBlbnVtIGNsYXNzIFN1Y2Nlc3NmdWxseUZpbmlzaGVk
TG9hZGluZyA6IGJvb2wgeyBObywgWWVzIH0gc3VjY2Vzc2Z1bGx5RmluaXNoZWRMb2FkaW5nIHsg
U3VjY2Vzc2Z1bGx5RmluaXNoZWRMb2FkaW5nOjpObyB9OworICAgIFJlZlB0cjxQbGF0Zm9ybU1l
ZGlhUmVzb3VyY2U+IHJlc291cmNlOworfTsKKworUmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6UmFu
Z2VSZXNwb25zZUdlbmVyYXRvcigpID0gZGVmYXVsdDsKK1JhbmdlUmVzcG9uc2VHZW5lcmF0b3I6
On5SYW5nZVJlc3BvbnNlR2VuZXJhdG9yKCkgPSBkZWZhdWx0OworCitzdGF0aWMgUmVzb3VyY2VS
ZXNwb25zZSBzeW50aGVzaXplZFJlc3BvbnNlRm9yUmFuZ2UoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgb3JpZ2luYWxSZXNwb25zZSwgY29uc3QgUGFyc2VkUmVxdWVzdFJhbmdlJiBwYXJzZWRSZXF1
ZXN0UmFuZ2UsIE9wdGlvbmFsPHNpemVfdD4gdG90YWxDb250ZW50TGVuZ3RoKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgYXV0byBiZWdpbiA9IHBhcnNlZFJlcXVlc3RSYW5n
ZS5iZWdpbigpOworICAgIGF1dG8gZW5kID0gcGFyc2VkUmVxdWVzdFJhbmdlLmVuZCgpOworCisg
ICAgYXV0byBuZXdDb250ZW50UmFuZ2UgPSBtYWtlU3RyaW5nKCJieXRlcyAiLCBiZWdpbiwgIi0i
LCBlbmQsICIvIiwgKHRvdGFsQ29udGVudExlbmd0aCA/IG1ha2VTdHJpbmcoKnRvdGFsQ29udGVu
dExlbmd0aCkgOiAiKiIpKTsKKyAgICBhdXRvIG5ld0NvbnRlbnRMZW5ndGggPSBtYWtlU3RyaW5n
KGVuZCAtIGJlZ2luICsgMSk7CisKKyAgICBSZXNvdXJjZVJlc3BvbnNlIG5ld1Jlc3BvbnNlID0g
b3JpZ2luYWxSZXNwb25zZTsKKyAgICBuZXdSZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoSFRU
UEhlYWRlck5hbWU6OkNvbnRlbnRSYW5nZSwgbmV3Q29udGVudFJhbmdlKTsKKyAgICBuZXdSZXNw
b25zZS5zZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRMZW5ndGgsIG5l
d0NvbnRlbnRMZW5ndGgpOworICAgIGNvbnN0ZXhwciBhdXRvIHBhcnRpYWxDb250ZW50ID0gMjA2
OworICAgIG5ld1Jlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKHBhcnRpYWxDb250ZW50KTsKKwor
ICAgIHJldHVybiBuZXdSZXNwb25zZTsKK30KKwordm9pZCBSYW5nZVJlc3BvbnNlR2VuZXJhdG9y
OjpyZW1vdmVUYXNrKFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAqdGFzaykKK3sKKyAgICBj
YWxsT25NYWluVGhyZWFkKFt0YXNrID0gcmV0YWluUHRyKHRhc2spLCB3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKCp0aGlzKV0geworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBhdXRvKiBkYXRhID0gd2Vha1RoaXMtPm1fbWFwLmdldCh0YXNrLmdldCgp
Lm9yaWdpbmFsUmVxdWVzdC5VUkwpOworICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGRhdGEtPnRhc2tEYXRhLnJlbW92ZSh0YXNrKTsKKyAgICB9KTsKK30K
Kwordm9pZCBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpnaXZlUmVzcG9uc2VUb1Rhc2tJZkJ5dGVz
SW5SYW5nZVJlY2VpdmVkKFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAqdGFzaywgY29uc3Qg
UGFyc2VkUmVxdWVzdFJhbmdlJiByYW5nZSwgT3B0aW9uYWw8c2l6ZV90PiBleHBlY3RlZENvbnRl
bnRMZW5ndGgsIGNvbnN0IERhdGEmIGRhdGEpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICBhdXRvIGJ1ZmZlciA9IGRhdGEuYnVmZmVyOworICAgIGF1dG8gYnVmZmVyU2l6ZSA9
IGJ1ZmZlci0+c2l6ZSgpOworCisgICAgaWYgKGJ1ZmZlclNpemUgPCByYW5nZS5iZWdpbigpKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0byogdGFza0RhdGEgPSBkYXRhLnRhc2tEYXRh
LmdldCh0YXNrKTsKKyAgICBpZiAoIXRhc2tEYXRhKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgYXV0byBnaXZlQnl0ZXNUb1Rhc2sgPSBbdGFzayA9IHJldGFpblB0cih0YXNrKSwgYnVmZmVy
LCB0YXNrRGF0YSA9IG1ha2VXZWFrUHRyKCp0YXNrRGF0YSksIGdlbmVyYXRvciA9IG1ha2VXZWFr
UHRyKCp0aGlzKV0geworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBp
ZiAoIXRhc2tEYXRhKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvJiByYW5nZSA9
IHRhc2tEYXRhLT5yYW5nZTsKKyAgICAgICAgYXV0byYgYnl0ZUluZGV4ID0gdGFza0RhdGEtPm5l
eHRCeXRlVG9HaXZlQnVmZmVySW5kZXg7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAg
ICAgICBpZiAoYnl0ZUluZGV4ID49IGJ1ZmZlci0+c2l6ZSgpKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgYXV0byBidWZmZXJWaWV3ID0gYnVmZmVyLT5nZXRTb21lRGF0YShi
eXRlSW5kZXgpOworICAgICAgICAgICAgaWYgKCFidWZmZXJWaWV3LnNpemUoKSB8fCBieXRlSW5k
ZXggPiByYW5nZS5lbmQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
c2l6ZV90IGJ5dGVzRnJvbVRoaXNWaWV3VG9EZWxpdmVyID0gc3RkOjptaW4oYnVmZmVyVmlldy5z
aXplKCksIHJhbmdlLmVuZCgpIC0gYnl0ZUluZGV4ICsgMSk7CisgICAgICAgICAgICBieXRlSW5k
ZXggKz0gYnl0ZXNGcm9tVGhpc1ZpZXdUb0RlbGl2ZXI7CisgICAgICAgICAgICBbdGFzayByZXNv
dXJjZTpudWxscHRyIHJlY2VpdmVkRGF0YTpidWZmZXJWaWV3LmRhdGEoKSBsZW5ndGg6Ynl0ZXNG
cm9tVGhpc1ZpZXdUb0RlbGl2ZXJdOworICAgICAgICB9CisgICAgICAgIGlmIChieXRlSW5kZXgg
Pj0gcmFuZ2UuZW5kKCkpIHsKKyAgICAgICAgICAgIFt0YXNrIHJlc291cmNlRmluaXNoZWQ6bnVs
bHB0ciBtZXRyaWNzOk5ldHdvcmtMb2FkTWV0cmljcyB7IH1dOworICAgICAgICAgICAgaWYgKGdl
bmVyYXRvcikKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnJlbW92ZVRhc2sodGFzay5nZXQo
KSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgaWYgKCFzdGQ6OmV4Y2hhbmdlKHRhc2tEYXRh
LT5zeW50aGVzaXplZFJlc3BvbnNlLCB0cnVlKSkgeworICAgICAgICBhdXRvIHJlc3BvbnNlID0g
c3ludGhlc2l6ZWRSZXNwb25zZUZvclJhbmdlKGRhdGEub3JpZ2luYWxSZXNwb25zZSwgcmFuZ2Us
IGV4cGVjdGVkQ29udGVudExlbmd0aCk7CisgICAgICAgIFt0YXNrIHJlc291cmNlOm51bGxwdHIg
cmVjZWl2ZWRSZXNwb25zZTpyZXNwb25zZSBjb21wbGV0aW9uSGFuZGxlcjpbZ2l2ZUJ5dGVzVG9U
YXNrID0gV1RGTW92ZShnaXZlQnl0ZXNUb1Rhc2spXSAoV2ViQ29yZTo6U2hvdWxkQ29udGludWVQ
b2xpY3lDaGVjayBzaG91bGRDb250aW51ZSkgeworICAgICAgICAgICAgaWYgKHNob3VsZENvbnRp
bnVlID09IFNob3VsZENvbnRpbnVlUG9saWN5Q2hlY2s6OlllcykKKyAgICAgICAgICAgICAgICBn
aXZlQnl0ZXNUb1Rhc2soKTsKKyAgICAgICAgfV07CisgICAgfSBlbHNlCisgICAgICAgIGdpdmVC
eXRlc1RvVGFzaygpOworfQorCitPcHRpb25hbDxzaXplX3Q+IFJhbmdlUmVzcG9uc2VHZW5lcmF0
b3I6OmV4cGVjdGVkQ29udGVudExlbmd0aEZyb21EYXRhKGNvbnN0IERhdGEmIGRhdGEpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoZGF0YS5zdWNjZXNzZnVsbHlGaW5p
c2hlZExvYWRpbmcgPT0gRGF0YTo6U3VjY2Vzc2Z1bGx5RmluaXNoZWRMb2FkaW5nOjpZZXMpCisg
ICAgICAgIHJldHVybiBkYXRhLmJ1ZmZlci0+c2l6ZSgpOworCisgICAgLy8gRklYTUU6IFJlc291
cmNlUmVzcG9uc2VCYXNlOjpleHBlY3RlZENvbnRlbnRMZW5ndGgoKSBzaG91bGQgcmV0dXJuIE9w
dGlvbmFsPHNpemVfdD4gaW5zdGVhZCBvZiB1cyBkb2luZyB0aGlzIGNoZWNrIGhlcmUuCisgICAg
YXV0byBleHBlY3RlZENvbnRlbnRMZW5ndGggPSBkYXRhLm9yaWdpbmFsUmVzcG9uc2UuZXhwZWN0
ZWRDb250ZW50TGVuZ3RoKCk7CisgICAgaWYgKGV4cGVjdGVkQ29udGVudExlbmd0aCA9PSBOU1VS
TFJlc3BvbnNlVW5rbm93bkxlbmd0aCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICByZXR1cm4gZXhwZWN0ZWRDb250ZW50TGVuZ3RoOworfQorCit2b2lkIFJhbmdlUmVzcG9uc2VH
ZW5lcmF0b3I6OmdpdmVSZXNwb25zZVRvVGFza3NXaXRoRmluaXNoZWRSYW5nZXMoRGF0YSYgZGF0
YSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGF1dG8gZXhwZWN0ZWRDb250
ZW50TGVuZ3RoID0gZXhwZWN0ZWRDb250ZW50TGVuZ3RoRnJvbURhdGEoZGF0YSk7CisKKyAgICBm
b3IgKGF1dG8mIHBhaXIgOiBkYXRhLnRhc2tEYXRhKQorICAgICAgICBnaXZlUmVzcG9uc2VUb1Rh
c2tJZkJ5dGVzSW5SYW5nZVJlY2VpdmVkKHBhaXIua2V5LmdldCgpLCBwYWlyLnZhbHVlLT5yYW5n
ZSwgZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCBkYXRhKTsKK30KKworYm9vbCBSYW5nZVJlc3BvbnNl
R2VuZXJhdG9yOjp3aWxsSGFuZGxlUmVxdWVzdChXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sg
KnRhc2ssIE5TVVJMUmVxdWVzdCAqcmVxdWVzdCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIGF1dG8qIGRhdGEgPSBtX21hcC5nZXQocmVxdWVzdC5VUkwpOworICAgIGlmICgh
ZGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byByYW5nZSA9IFBhcnNlZFJl
cXVlc3RSYW5nZTo6cGFyc2UoW3JlcXVlc3QgdmFsdWVGb3JIVFRQSGVhZGVyRmllbGQ6QCJSYW5n
ZSJdKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRv
IGV4cGVjdGVkQ29udGVudExlbmd0aCA9IGV4cGVjdGVkQ29udGVudExlbmd0aEZyb21EYXRhKCpk
YXRhKTsKKyAgICBkYXRhLT50YXNrRGF0YS5hZGQodGFzaywgbWFrZVVuaXF1ZTxEYXRhOjpUYXNr
RGF0YT4oV1RGTW92ZSgqcmFuZ2UpKSk7CisgICAgZ2l2ZVJlc3BvbnNlVG9UYXNrSWZCeXRlc0lu
UmFuZ2VSZWNlaXZlZCh0YXNrLCAqcmFuZ2UsIGV4cGVjdGVkQ29udGVudExlbmd0aCwgKmRhdGEp
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6
d2lsbFN5bnRoZXNpemVSYW5nZVJlc3BvbnNlcyhXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sg
KnRhc2ssIFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgTlNV
UkxSZXF1ZXN0ICpvcmlnaW5hbFJlcXVlc3QgPSB0YXNrLm9yaWdpbmFsUmVxdWVzdDsKKyAgICBp
ZiAoIW9yaWdpbmFsUmVxdWVzdC5VUkwpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
cmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAhPSAyMDApCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoIXJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVu
dFJhbmdlKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcGFy
c2VkUmVxdWVzdFJhbmdlID0gUGFyc2VkUmVxdWVzdFJhbmdlOjpwYXJzZShbb3JpZ2luYWxSZXF1
ZXN0IHZhbHVlRm9ySFRUUEhlYWRlckZpZWxkOkAiUmFuZ2UiXSk7CisgICAgaWYgKCFwYXJzZWRS
ZXF1ZXN0UmFuZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNsYXNzIENsaWVudCA6
IHB1YmxpYyBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgQ2xpZW50KFJhbmdlUmVzcG9uc2VHZW5lcmF0b3ImIGdlbmVyYXRvciwgVVJMJiYgdXJsKQor
ICAgICAgICAgICAgOiBtX2dlbmVyYXRvcihtYWtlV2Vha1B0cihnZW5lcmF0b3IpKQorICAgICAg
ICAgICAgLCBtX3VybChXVEZNb3ZlKHVybCkpIHsgfQorICAgIHByaXZhdGU6CisKKyAgICAgICAg
Ly8gVGhlc2UgbWV0aG9kcyBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBiZWZvcmUgY2hhbmdpbmcg
dGhlIGNsaWVudCB0byB0aGlzLgorICAgICAgICB2b2lkIHJlc3BvbnNlUmVjZWl2ZWQoUGxhdGZv
cm1NZWRpYVJlc291cmNlJiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoU2hvdWxkQ29udGludWVQb2xpY3lDaGVjayk+JiYgY29tcGxldGlvbkhhbmRsZXIp
IGZpbmFsCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU2hvdWxkQ29udGludWVQb2xpY3lDaGVjazo6Tm8p
OworICAgICAgICB9CisgICAgICAgIHZvaWQgcmVkaXJlY3RSZWNlaXZlZChQbGF0Zm9ybU1lZGlh
UmVzb3VyY2UmLCBSZXNvdXJjZVJlcXVlc3QmJiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoUmVzb3VyY2VSZXF1ZXN0JiYpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKSBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CisgICAgICAgIH0KKyAgICAgICAg
dm9pZCBkYXRhU2VudChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCB1bnNpZ25lZCBsb25nIGxvbmcs
IHVuc2lnbmVkIGxvbmcgbG9uZykgZmluYWwKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBhY2Nlc3NDb250cm9sQ2hl
Y2tGYWlsZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiwgY29uc3QgUmVzb3VyY2VFcnJvciYpIGZp
bmFsCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRDYWNoZVJlc3BvbnNlKFBsYXRmb3JtTWVkaWFSZXNv
dXJjZSYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSBmaW5hbAorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkYXRhUmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJlc291
cmNlJiwgY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpIGZpbmFsCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgICAgICBpZiAoIW1fZ2Vu
ZXJhdG9yKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGF1dG8qIGRhdGEg
PSBtX2dlbmVyYXRvci0+bV9tYXAuZ2V0KG1fdXJsKTsKKyAgICAgICAgICAgIGlmICghZGF0YSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBkYXRhLT5idWZmZXItPmFwcGVu
ZChieXRlcywgbGVuZ3RoKTsKKyAgICAgICAgICAgIG1fZ2VuZXJhdG9yLT5naXZlUmVzcG9uc2VU
b1Rhc2tzV2l0aEZpbmlzaGVkUmFuZ2VzKCpkYXRhKTsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgbG9hZEZhaWxlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBjb25zdCBSZXNvdXJjZUVycm9y
JiBlcnJvcikgZmluYWwKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKyAgICAgICAgICAgIGlmICghbV9nZW5lcmF0b3IpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgYXV0byBkYXRhID0gbV9nZW5lcmF0b3ItPm1fbWFwLnRha2UobV91
cmwpOworICAgICAgICAgICAgaWYgKCFkYXRhKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIGZvciAoYXV0byYgdGFzayA6IGRhdGEtPnRhc2tEYXRhLmtleXMoKSkKKyAgICAg
ICAgICAgICAgICBbdGFzayByZXNvdXJjZTpudWxscHRyIGxvYWRGYWlsZWRXaXRoRXJyb3I6ZXJy
b3JdOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBsb2FkRmluaXNoZWQoUGxhdGZvcm1NZWRp
YVJlc291cmNlJiwgY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJikgZmluYWwKKyAgICAgICAgewor
ICAgICAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgICAgIGlmICghbV9n
ZW5lcmF0b3IpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYXV0byogZGF0
YSA9IG1fZ2VuZXJhdG9yLT5tX21hcC5nZXQobV91cmwpOworICAgICAgICAgICAgaWYgKCFkYXRh
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGRhdGEtPnN1Y2Nlc3NmdWxs
eUZpbmlzaGVkTG9hZGluZyA9IERhdGE6OlN1Y2Nlc3NmdWxseUZpbmlzaGVkTG9hZGluZzo6WWVz
OworICAgICAgICAgICAgZGF0YS0+cmVzb3VyY2UgPSBudWxscHRyOworICAgICAgICAgICAgbV9n
ZW5lcmF0b3ItPmdpdmVSZXNwb25zZVRvVGFza3NXaXRoRmluaXNoZWRSYW5nZXMoKmRhdGEpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBXZWFrUHRyPFJhbmdlUmVzcG9uc2VHZW5lcmF0
b3I+IG1fZ2VuZXJhdG9yOworICAgICAgICBjb25zdCBVUkwgbV91cmw7CisgICAgfTsKKworICAg
IHJlc291cmNlLnNldENsaWVudChhZG9wdFJlZihuZXcgQ2xpZW50KCp0aGlzLCBvcmlnaW5hbFJl
cXVlc3QuVVJMKSkpOworCisgICAgbV9tYXAuZW5zdXJlKG9yaWdpbmFsUmVxdWVzdC5VUkwsIFsm
XSB7CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPERhdGE+KHJlc3BvbnNlLCByZXNvdXJjZSk7
CisgICAgfSkuaXRlcmF0b3ItPnZhbHVlLT50YXNrRGF0YS5hZGQodGFzaywgbWFrZVVuaXF1ZTxE
YXRhOjpUYXNrRGF0YT4oV1RGTW92ZSgqcGFyc2VkUmVxdWVzdFJhbmdlKSkpOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9u
LmgKaW5kZXggYTgwZTIwODg1Mzk3YzcxMDJhZTMxZWI3MDQyNzQ1MzY0YmU0ZGIzMi4uNzg3NWYz
MGVhNmM4OTNjMTk2ODk1Nzk3NWM2Y2FiNjdmMjdjNjRjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9uLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9u
LmgKQEAgLTIzLDggKzIzLDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCisjaW1wb3J0ICJS
YW5nZVJlc3BvbnNlR2VuZXJhdG9yLmgiCiAjaW1wb3J0ICJTZWN1cml0eU9yaWdpbi5oIgogI2lt
cG9ydCA8Rm91bmRhdGlvbi9OU1VSTFNlc3Npb24uaD4KKyNpbXBvcnQgPHd0Zi9Db21wbGV0aW9u
SGFuZGxlci5oPgogI2ltcG9ydCA8d3RmL0hhc2hTZXQuaD4KICNpbXBvcnQgPHd0Zi9Mb2NrLmg+
CiAjaW1wb3J0IDx3dGYvT1NPYmplY3RQdHIuaD4KQEAgLTQxLDEyICs0MywxNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q7CitjbGFzcyBOZXR3
b3JrTG9hZE1ldHJpY3M7CiBjbGFzcyBQbGF0Zm9ybU1lZGlhUmVzb3VyY2U7CiBjbGFzcyBQbGF0
Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXI7CitjbGFzcyBSZXNvdXJjZUVycm9yOworY2xhc3MgUmVz
b3VyY2VSZXF1ZXN0OworY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKIGNsYXNzIFdlYkNvcmVOU1VS
TFNlc3Npb25EYXRhVGFza0NsaWVudDsKK2VudW0gY2xhc3MgU2hvdWxkQ29udGludWVQb2xpY3lD
aGVjayA6IGJvb2w7CiB9CiAKLWVudW0gY2xhc3MgV2ViQ29yZU5TVVJMU2Vzc2lvbkNPUlNBY2Nl
c3NDaGVja1Jlc3VsdHMgeworZW51bSBjbGFzcyBXZWJDb3JlTlNVUkxTZXNzaW9uQ09SU0FjY2Vz
c0NoZWNrUmVzdWx0cyA6IHVpbnQ4X3QgewogICAgIFVua25vd24sCiAgICAgUGFzcywKICAgICBG
YWlsLApAQCAtNjcsNiArNzQsNyBAQCBXRUJDT1JFX0VYUE9SVCBAaW50ZXJmYWNlIFdlYkNvcmVO
U1VSTFNlc3Npb24gOiBOU09iamVjdCB7CiAgICAgTlNVSW50ZWdlciBfbmV4dFRhc2tJZGVudGlm
aWVyOwogICAgIE9TT2JqZWN0UHRyPGRpc3BhdGNoX3F1ZXVlX3Q+IF9pbnRlcm5hbFF1ZXVlOwog
ICAgIFdlYkNvcmVOU1VSTFNlc3Npb25DT1JTQWNjZXNzQ2hlY2tSZXN1bHRzIF9jb3JzUmVzdWx0
czsKKyAgICBXZWJDb3JlOjpSYW5nZVJlc3BvbnNlR2VuZXJhdG9yIF9yYW5nZVJlc3BvbnNlR2Vu
ZXJhdG9yOwogfQogLSAoaWQpaW5pdFdpdGhSZXNvdXJjZUxvYWRlcjooV2ViQ29yZTo6UGxhdGZv
cm1NZWRpYVJlc291cmNlTG9hZGVyJilsb2FkZXIgZGVsZWdhdGU6KGlkPE5TVVJMU2Vzc2lvblRh
c2tEZWxlZ2F0ZT4pZGVsZWdhdGUgZGVsZWdhdGVRdWV1ZTooTlNPcGVyYXRpb25RdWV1ZSopcXVl
dWU7CiBAcHJvcGVydHkgKHJlYWRvbmx5LCByZXRhaW4pIE5TT3BlcmF0aW9uUXVldWUgKmRlbGVn
YXRlUXVldWU7CkBAIC0xNDMsNCArMTUxLDE1IEBAIFdFQkNPUkVfRVhQT1JUIEBpbnRlcmZhY2Ug
V2ViQ29yZU5TVVJMU2Vzc2lvbiA6IE5TT2JqZWN0IHsKIC0gKHZvaWQpcmVzdW1lOwogQGVuZAog
CitAaW50ZXJmYWNlIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAoV2ViS2l0SW50ZXJuYWwp
CistICh2b2lkKXJlc291cmNlOihudWxsYWJsZSBXZWJDb3JlOjpQbGF0Zm9ybU1lZGlhUmVzb3Vy
Y2UqKXJlc291cmNlIHNlbnRCeXRlczoodW5zaWduZWQgbG9uZyBsb25nKWJ5dGVzU2VudCB0b3Rh
bEJ5dGVzVG9CZVNlbnQ6KHVuc2lnbmVkIGxvbmcgbG9uZyl0b3RhbEJ5dGVzVG9CZVNlbnQ7Cist
ICh2b2lkKXJlc291cmNlOihudWxsYWJsZSBXZWJDb3JlOjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2Uq
KXJlc291cmNlIHJlY2VpdmVkUmVzcG9uc2U6KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmKXJlc3BvbnNlIGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdl
YkNvcmU6OlNob3VsZENvbnRpbnVlUG9saWN5Q2hlY2spPiYmKWNvbXBsZXRpb25IYW5kbGVyOwor
LSAoQk9PTClyZXNvdXJjZToobnVsbGFibGUgV2ViQ29yZTo6UGxhdGZvcm1NZWRpYVJlc291cmNl
KilyZXNvdXJjZSBzaG91bGRDYWNoZVJlc3BvbnNlOihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJilyZXNwb25zZTsKKy0gKHZvaWQpcmVzb3VyY2U6KG51bGxhYmxlIFdlYkNvcmU6OlBs
YXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3VyY2UgcmVjZWl2ZWREYXRhOihjb25zdCBjaGFyKilk
YXRhIGxlbmd0aDooaW50KWxlbmd0aDsKKy0gKHZvaWQpcmVzb3VyY2U6KG51bGxhYmxlIFdlYkNv
cmU6OlBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3VyY2UgcmVjZWl2ZWRSZWRpcmVjdDooY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpcmVzcG9uc2UgcmVxdWVzdDooV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiYpcmVxdWVzdCBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJik+JiYpY29tcGxldGlvbkhhbmRs
ZXI7CistICh2b2lkKXJlc291cmNlOihudWxsYWJsZSBXZWJDb3JlOjpQbGF0Zm9ybU1lZGlhUmVz
b3VyY2UqKXJlc291cmNlIGFjY2Vzc0NvbnRyb2xDaGVja0ZhaWxlZFdpdGhFcnJvcjooY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpZXJyb3I7CistICh2b2lkKXJlc291cmNlOihudWxsYWJs
ZSBXZWJDb3JlOjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIGxvYWRGYWlsZWRXaXRo
RXJyb3I6KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKWVycm9yOworLSAodm9pZClyZXNv
dXJjZUZpbmlzaGVkOihudWxsYWJsZSBXZWJDb3JlOjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJl
c291cmNlIG1ldHJpY3M6KGNvbnN0IFdlYkNvcmU6Ok5ldHdvcmtMb2FkTWV0cmljcyYpbWV0cmlj
czsKK0BlbmQKKwogTlNfQVNTVU1FX05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24ubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24ubW0K
aW5kZXggOTAyMTI4N2JkZGY0NzM3ZDg0MWE1NWUxNzBhM2VjMTg5YWNlZTRkMC4uNWRiMGNiYzUw
ZTQ3N2E4MjNjNjU0OTBhOGU0MWQ1YmJlNGM5MDMxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9uLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5t
bQpAQCAtMjcsMTAgKzI3LDEyIEBACiAjaW1wb3J0ICJXZWJDb3JlTlNVUkxTZXNzaW9uLmgiCiAK
ICNpbXBvcnQgIkNhY2hlZFJlc291cmNlUmVxdWVzdC5oIgorI2ltcG9ydCAiUGFyc2VkUmVxdWVz
dFJhbmdlLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCIKICNpbXBv
cnQgIlN1YnJlc291cmNlTG9hZGVyLmgiCiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBv
cnQgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+
CiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CkBAIC0yMDMsMjQgKzIwNSwxNiBAQCBzdGF0aWMgTlNEYXRlICogX19udWxsYWJsZSBu
ZXR3b3JrTG9hZE1ldHJpY3NEYXRlKFNlY29uZHMgZmV0Y2hTdGFydCwgU2Vjb25kcyBkZQogLSAo
dm9pZClhZGREZWxlZ2F0ZU9wZXJhdGlvbjooRnVuY3Rpb248dm9pZCgpPiYmKW9wZXJhdGlvbjsK
IC0gKHZvaWQpdGFzazooV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICopdGFzayBkaWRSZWNl
aXZlQ09SU0FjY2Vzc0NoZWNrUmVzdWx0OihCT09MKXJlc3VsdDsKIC0gKHZvaWQpdGFzazooV2Vi
Q29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICopdGFzayBkaWRSZWNlaXZlUmVzcG9uc2VGcm9tT3Jp
Z2luOihSZWY8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+JiYpb3JpZ2luOworLSAoV2ViQ29yZTo6
UmFuZ2VSZXNwb25zZUdlbmVyYXRvciYpcmFuZ2VSZXNwb25zZUdlbmVyYXRvcjsKIEBlbmQKIAog
QGludGVyZmFjZSBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgKCkKIC0gKGlkKWluaXRXaXRo
U2Vzc2lvbjooV2ViQ29yZU5TVVJMU2Vzc2lvbiAqKXNlc3Npb24gaWRlbnRpZmllcjooTlNVSW50
ZWdlcilpZGVudGlmaWVyIHJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3Q7Ci0tIChpZClp
bml0V2l0aFNlc3Npb246KFdlYkNvcmVOU1VSTFNlc3Npb24gKilzZXNzaW9uIGlkZW50aWZpZXI6
KE5TVUludGVnZXIpaWRlbnRpZmllciBVUkw6KE5TVVJMICopdXJsOwogLSAodm9pZClfcmVzdGFy
dDsKIC0gKHZvaWQpX2NhbmNlbDsKIC0gKHZvaWQpX2ZpbmlzaDsKIEBwcm9wZXJ0eSAoYXNzaWdu
KSBXZWJDb3JlTlNVUkxTZXNzaW9uICogX051bGxhYmxlIHNlc3Npb247CiAKLS0gKHZvaWQpcmVz
b3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2Ugc2VudEJ5dGVzOih1bnNpZ25l
ZCBsb25nIGxvbmcpYnl0ZXNTZW50IHRvdGFsQnl0ZXNUb0JlU2VudDoodW5zaWduZWQgbG9uZyBs
b25nKXRvdGFsQnl0ZXNUb0JlU2VudDsKLS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFS
ZXNvdXJjZSYpcmVzb3VyY2UgcmVjZWl2ZWRSZXNwb25zZTooY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpcmVzcG9uc2UgY29tcGxldGlvbkhhbmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2hv
dWxkQ29udGludWVQb2xpY3lDaGVjayk+JiYpY29tcGxldGlvbkhhbmRsZXI7Ci0tIChCT09MKXJl
c291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmKXJlc291cmNlIHNob3VsZENhY2hlUmVzcG9u
c2U6KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKXJlc3BvbnNlOwotLSAodm9pZClyZXNvdXJjZToo
UGxhdGZvcm1NZWRpYVJlc291cmNlJilyZXNvdXJjZSByZWNlaXZlZERhdGE6KGNvbnN0IGNoYXIq
KWRhdGEgbGVuZ3RoOihpbnQpbGVuZ3RoOwotLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRp
YVJlc291cmNlJilyZXNvdXJjZSByZWNlaXZlZFJlZGlyZWN0Oihjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJilyZXNwb25zZSByZXF1ZXN0OihSZXNvdXJjZVJlcXVlc3QmJilyZXF1ZXN0IGNvbXBsZXRp
b25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlc291cmNlUmVxdWVzdCYmKT4mJilj
b21wbGV0aW9uSGFuZGxlcjsKLS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJj
ZSYpcmVzb3VyY2UgYWNjZXNzQ29udHJvbENoZWNrRmFpbGVkV2l0aEVycm9yOihjb25zdCBSZXNv
dXJjZUVycm9yJillcnJvcjsKLS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJj
ZSYpcmVzb3VyY2UgbG9hZEZhaWxlZFdpdGhFcnJvcjooY29uc3QgUmVzb3VyY2VFcnJvciYpZXJy
b3I7Ci0tICh2b2lkKXJlc291cmNlRmluaXNoZWQ6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVz
b3VyY2UgbWV0cmljczooY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJiltZXRyaWNzOwogQGVuZAog
CiBOU19BU1NVTUVfTk9OTlVMTF9FTkQKQEAgLTMxMSw2ICszMDUsMTEgQEAgTlNfQVNTVU1FX05P
Tk5VTExfRU5ECiAgICAgX29yaWdpbnMuYWRkKFdURk1vdmUob3JpZ2luKSk7CiB9CiAKKy0gKFdl
YkNvcmU6OlJhbmdlUmVzcG9uc2VHZW5lcmF0b3ImKXJhbmdlUmVzcG9uc2VHZW5lcmF0b3IKK3sK
KyAgICByZXR1cm4gX3JhbmdlUmVzcG9uc2VHZW5lcmF0b3I7Cit9CisKICNwcmFnbWEgbWFyayAt
IE5TVVJMU2Vzc2lvbiBBUEkKIEBkeW5hbWljIGRlbGVnYXRlOwogLSAoX19udWxsYWJsZSBpZDxO
U1VSTFNlc3Npb25EZWxlZ2F0ZT4pZGVsZWdhdGUKQEAgLTQ1NSwxNSArNDU0LDcgQEAgTlNfQVNT
VU1FX05PTk5VTExfRU5ECiAKIC0gKE5TVVJMU2Vzc2lvbkRhdGFUYXNrICopZGF0YVRhc2tXaXRo
VVJMOihOU1VSTCAqKXVybAogewotICAgIGlmIChfaW52YWxpZGF0ZWQpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgKnRhc2sgPSBbW1dlYkNv
cmVOU1VSTFNlc3Npb25EYXRhVGFzayBhbGxvY10gaW5pdFdpdGhTZXNzaW9uOnNlbGYgaWRlbnRp
ZmllcjpfbmV4dFRhc2tJZGVudGlmaWVyKysgVVJMOnVybF07Ci0gICAgewotICAgICAgICBMb2Nr
ZXI8TG9jaz4gbG9ja2VyKF9kYXRhVGFza3NMb2NrKTsKLSAgICAgICAgX2RhdGFUYXNrcy5hZGQo
dGFzayk7Ci0gICAgfQotICAgIHJldHVybiAoTlNVUkxTZXNzaW9uRGF0YVRhc2sgKilbdGFzayBh
dXRvcmVsZWFzZV07CisgICAgcmV0dXJuIFtzZWxmIGRhdGFUYXNrV2l0aFJlcXVlc3Q6W05TVVJM
UmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp1cmxdXTsKIH0KIAogLSAodm9pZClzZW5kSDJQaW5nOihO
U1VSTCAqKXVybCBwb25nSGFuZGxlcjoodm9pZCAoXikoTlNFcnJvciAqZXJyb3IsIE5TVGltZUlu
dGVydmFsIGludGVydmFsKSlwb25nSGFuZGxlcgpAQCAtNTcxLDcgKzU2Miw3IEBAIHB1YmxpYzoK
IAogcHJpdmF0ZToKICAgICBMb2NrIG1fdGFza0xvY2s7Ci0gICAgV2ViQ29yZU5TVVJMU2Vzc2lv
bkRhdGFUYXNrICptX3Rhc2s7CisgICAgV2Vha09iakNQdHI8V2ViQ29yZU5TVVJMU2Vzc2lvbkRh
dGFUYXNrPiBtX3Rhc2s7CiB9OwogCiB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0Ns
aWVudDo6Y2xlYXJUYXNrKCkKQEAgLTU4NiwxNiArNTc3LDE3IEBAIHZvaWQgV2ViQ29yZU5TVVJM
U2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjpkYXRhU2VudChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJl
c291cmNlCiAgICAgaWYgKCFtX3Rhc2spCiAgICAgICAgIHJldHVybjsKIAotICAgIFttX3Rhc2sg
cmVzb3VyY2U6cmVzb3VyY2Ugc2VudEJ5dGVzOmJ5dGVzU2VudCB0b3RhbEJ5dGVzVG9CZVNlbnQ6
dG90YWxCeXRlc1RvQmVTZW50XTsKKyAgICBbbV90YXNrIHJlc291cmNlOiZyZXNvdXJjZSBzZW50
Qnl0ZXM6Ynl0ZXNTZW50IHRvdGFsQnl0ZXNUb0JlU2VudDp0b3RhbEJ5dGVzVG9CZVNlbnRdOwog
fQogCiB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6cmVzcG9uc2VSZWNl
aXZlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc291cmNlLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTaG91bGRDb250aW51ZVBvbGlj
eUNoZWNrKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKKyAgICBhdXRvIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKTsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Rhc2tMb2NrKTsKICAg
ICBpZiAoIW1fdGFzaykKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKFNob3VsZENv
bnRpbnVlUG9saWN5Q2hlY2s6Ok5vKTsKIAotICAgIFttX3Rhc2sgcmVzb3VyY2U6cmVzb3VyY2Ug
cmVjZWl2ZWRSZXNwb25zZTpyZXNwb25zZSBjb21wbGV0aW9uSGFuZGxlcjpXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV07CisgICAgW21fdGFzayByZXNvdXJjZTomcmVzb3VyY2UgcmVjZWl2ZWRS
ZXNwb25zZTpyZXNwb25zZSBjb21wbGV0aW9uSGFuZGxlcjpXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV07CiB9CiAKIGJvb2wgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjpzaG91
bGRDYWNoZVJlc3BvbnNlKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzb3VyY2UsIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQpAQCAtNjA0LDcgKzU5Niw3IEBAIGJvb2wgV2ViQ29y
ZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjpzaG91bGRDYWNoZVJlc3BvbnNlKFBsYXRmb3Jt
TWVkaWFSZXNvdXJjCiAgICAgaWYgKCFtX3Rhc2spCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIHJldHVybiBbbV90YXNrIHJlc291cmNlOnJlc291cmNlIHNob3VsZENhY2hlUmVzcG9uc2U6
cmVzcG9uc2VdOworICAgIHJldHVybiBbbV90YXNrIHJlc291cmNlOiZyZXNvdXJjZSBzaG91bGRD
YWNoZVJlc3BvbnNlOnJlc3BvbnNlXTsKIH0KIAogdm9pZCBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0
YVRhc2tDbGllbnQ6OmRhdGFSZWNlaXZlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc291cmNl
LCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQpAQCAtNjEzLDcgKzYwNSw3IEBAIHZvaWQg
V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjpkYXRhUmVjZWl2ZWQoUGxhdGZvcm1N
ZWRpYVJlc291cmNlJiByZXNvCiAgICAgaWYgKCFtX3Rhc2spCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFttX3Rhc2sgcmVzb3VyY2U6cmVzb3VyY2UgcmVjZWl2ZWREYXRhOmRhdGEgbGVuZ3RoOmxl
bmd0aF07CisgICAgW21fdGFzayByZXNvdXJjZTomcmVzb3VyY2UgcmVjZWl2ZWREYXRhOmRhdGEg
bGVuZ3RoOmxlbmd0aF07CiB9CiAKIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xp
ZW50OjpyZWRpcmVjdFJlY2VpdmVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzb3VyY2UsIFJl
c291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlc291cmNlUmVxdWVzdCYmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKQEAgLTYyMiw3ICs2MTQsNyBAQCB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRh
VGFza0NsaWVudDo6cmVkaXJlY3RSZWNlaXZlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmCiAgICAg
aWYgKCFtX3Rhc2spCiAgICAgICAgIHJldHVybjsKIAotICAgIFttX3Rhc2sgcmVzb3VyY2U6cmVz
b3VyY2UgcmVjZWl2ZWRSZWRpcmVjdDpyZXNwb25zZSByZXF1ZXN0OldURk1vdmUocmVxdWVzdCkg
Y29tcGxldGlvbkhhbmRsZXI6IFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSAoYXV0byYmIHJlcXVlc3QpIG11dGFibGUgeworICAgIFttX3Rhc2sgcmVzb3Vy
Y2U6JnJlc291cmNlIHJlY2VpdmVkUmVkaXJlY3Q6cmVzcG9uc2UgcmVxdWVzdDpXVEZNb3ZlKHJl
cXVlc3QpIGNvbXBsZXRpb25IYW5kbGVyOiBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiByZXF1ZXN0KSBtdXRhYmxlIHsKICAgICAgICAgY2Fs
bE9uTWFpblRocmVhZChbcmVxdWVzdCA9IHJlcXVlc3QuaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewogICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXF1ZXN0KSk7CiAgICAgICAgIH0p
OwpAQCAtNjM1LDcgKzYyNyw3IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xp
ZW50OjphY2Nlc3NDb250cm9sQ2hlY2tGYWlsZWQoUGxhdGZvcm1NZWRpYVJlCiAgICAgaWYgKCFt
X3Rhc2spCiAgICAgICAgIHJldHVybjsKIAotICAgIFttX3Rhc2sgcmVzb3VyY2U6cmVzb3VyY2Ug
YWNjZXNzQ29udHJvbENoZWNrRmFpbGVkV2l0aEVycm9yOmVycm9yXTsKKyAgICBbbV90YXNrIHJl
c291cmNlOiZyZXNvdXJjZSBhY2Nlc3NDb250cm9sQ2hlY2tGYWlsZWRXaXRoRXJyb3I6ZXJyb3Jd
OwogfQogCiB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZhaWxl
ZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc291cmNlLCBjb25zdCBSZXNvdXJjZUVycm9yJiBl
cnJvcikKQEAgLTY0NCw3ICs2MzYsNyBAQCB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFz
a0NsaWVudDo6bG9hZEZhaWxlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc291cgogICAgIGlm
ICghbV90YXNrKQogICAgICAgICByZXR1cm47CiAKLSAgICBbbV90YXNrIHJlc291cmNlOnJlc291
cmNlIGxvYWRGYWlsZWRXaXRoRXJyb3I6ZXJyb3JdOworICAgIFttX3Rhc2sgcmVzb3VyY2U6JnJl
c291cmNlIGxvYWRGYWlsZWRXaXRoRXJyb3I6ZXJyb3JdOwogfQogCiB2b2lkIFdlYkNvcmVOU1VS
TFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZpbmlzaGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJj
ZSYgcmVzb3VyY2UsIGNvbnN0IE5ldHdvcmtMb2FkTWV0cmljcyYgbWV0cmljcykKQEAgLTY1Myw3
ICs2NDUsNyBAQCB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZp
bmlzaGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzbwogICAgIGlmICghbV90YXNrKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBbbV90YXNrIHJlc291cmNlRmluaXNoZWQ6cmVzb3VyY2UgbWV0
cmljczptZXRyaWNzXTsKKyAgICBbbV90YXNrIHJlc291cmNlRmluaXNoZWQ6JnJlc291cmNlIG1l
dHJpY3M6bWV0cmljc107CiB9CiAKIH0KQEAgLTY2MSwxNyArNjUzLDYgQEAgdm9pZCBXZWJDb3Jl
TlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmxvYWRGaW5pc2hlZChQbGF0Zm9ybU1lZGlhUmVz
b3VyY2UmIHJlc28KICNwcmFnbWEgbWFyayAtIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzawog
CiBAaW1wbGVtZW50YXRpb24gV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrCi0tIChpZClpbml0
V2l0aFNlc3Npb246KFdlYkNvcmVOU1VSTFNlc3Npb24gKilzZXNzaW9uIGlkZW50aWZpZXI6KE5T
VUludGVnZXIpaWRlbnRpZmllciBVUkw6KE5TVVJMICopdXJsCi17Ci0gICAgc2VsZi50YXNrSWRl
bnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAgc2VsZi5zZXNzaW9uID0gc2Vzc2lvbjsKLSAgICBz
ZWxmLnN0YXRlID0gTlNVUkxTZXNzaW9uVGFza1N0YXRlU3VzcGVuZGVkOwotICAgIHNlbGYucHJp
b3JpdHkgPSBOU1VSTFNlc3Npb25UYXNrUHJpb3JpdHlEZWZhdWx0OwotICAgIHNlbGYub3JpZ2lu
YWxSZXF1ZXN0ID0gc2VsZi5jdXJyZW50UmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdp
dGhVUkw6dXJsXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCiAtIChpZClpbml0V2l0aFNlc3Np
b246KFdlYkNvcmVOU1VSTFNlc3Npb24gKilzZXNzaW9uIGlkZW50aWZpZXI6KE5TVUludGVnZXIp
aWRlbnRpZmllciByZXF1ZXN0OihOU1VSTFJlcXVlc3QgKilyZXF1ZXN0CiB7CiAgICAgc2VsZi50
YXNrSWRlbnRpZmllciA9IGlkZW50aWZpZXI7CkBAIC03MDgsOSArNjg5LDEyIEBAIHZvaWQgV2Vi
Q29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQoUGxhdGZvcm1NZWRp
YVJlc291cmNlJiByZXNvCiAKICAgICBbc2VsZiBfY2FuY2VsXTsKIAorICAgIGlmIChbc2VsZi5z
ZXNzaW9uIHJhbmdlUmVzcG9uc2VHZW5lcmF0b3JdLndpbGxIYW5kbGVSZXF1ZXN0KHNlbGYsIHNl
bGYub3JpZ2luYWxSZXF1ZXN0KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgX3Jlc291cmNlID0g
c2VsZi5zZXNzaW9uLmxvYWRlci5yZXF1ZXN0UmVzb3VyY2Uoc2VsZi5vcmlnaW5hbFJlcXVlc3Qs
IFBsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlcjo6TG9hZE9wdGlvbjo6RGlzYWxsb3dDYWNoaW5n
KTsKICAgICBpZiAoX3Jlc291cmNlKQotICAgICAgICBfcmVzb3VyY2UtPnNldENsaWVudChtYWtl
VW5pcXVlPFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudD4oc2VsZikpOworICAgICAg
ICBfcmVzb3VyY2UtPnNldENsaWVudChhZG9wdFJlZigqbmV3IFdlYkNvcmVOU1VSTFNlc3Npb25E
YXRhVGFza0NsaWVudChzZWxmKSkpOwogfQogCiAtICh2b2lkKV9jYW5jZWwKQEAgLTcyNyw3ICs3
MTEsNyBAQCB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZpbmlz
aGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzbwogewogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CiAgICAgaWYgKF9yZXNvdXJjZSkKLSAgICAgICAgW3NlbGYgcmVzb3VyY2VGaW5pc2hl
ZDoqX3Jlc291cmNlIG1ldHJpY3M6TmV0d29ya0xvYWRNZXRyaWNzIHsgfV07CisgICAgICAgIFtz
ZWxmIHJlc291cmNlRmluaXNoZWQ6X3Jlc291cmNlLmdldCgpIG1ldHJpY3M6TmV0d29ya0xvYWRN
ZXRyaWNzIHsgfV07CiB9CiAKICNwcmFnbWEgbWFyayAtIE5TVVJMU2Vzc2lvbiBBUEkKQEAgLTgw
NiwyMyArNzkwLDI4IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojps
b2FkRmluaXNoZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvCiAKICNwcmFnbWEgbWFyayAt
IFBsYXRmb3JtTWVkaWFSZXNvdXJjZUNsaWVudCBjYWxsYmFja3MKIAotLSAodm9pZClyZXNvdXJj
ZTooUGxhdGZvcm1NZWRpYVJlc291cmNlJilyZXNvdXJjZSBzZW50Qnl0ZXM6KHVuc2lnbmVkIGxv
bmcgbG9uZylieXRlc1NlbnQgdG90YWxCeXRlc1RvQmVTZW50Oih1bnNpZ25lZCBsb25nIGxvbmcp
dG90YWxCeXRlc1RvQmVTZW50CistICh2b2lkKXJlc291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3Vy
Y2UqKXJlc291cmNlIHNlbnRCeXRlczoodW5zaWduZWQgbG9uZyBsb25nKWJ5dGVzU2VudCB0b3Rh
bEJ5dGVzVG9CZVNlbnQ6KHVuc2lnbmVkIGxvbmcgbG9uZyl0b3RhbEJ5dGVzVG9CZVNlbnQKIHsK
LSAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAmcmVzb3VyY2UgPT0gX3Jlc291cmNlKTsKKyAg
ICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAhcmVzb3VyY2UgfHwgcmVzb3VyY2UgPT0gX3Jlc291
cmNlKTsKICAgICBVTlVTRURfUEFSQU0oYnl0ZXNTZW50KTsKICAgICBVTlVTRURfUEFSQU0odG90
YWxCeXRlc1RvQmVTZW50KTsKICAgICAvLyBOby1vcC4KIH0KIAotLSAodm9pZClyZXNvdXJjZToo
UGxhdGZvcm1NZWRpYVJlc291cmNlJilyZXNvdXJjZSByZWNlaXZlZFJlc3BvbnNlOihjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJilyZXNwb25zZSBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChTaG91bGRDb250aW51ZVBvbGljeUNoZWNrKT4mJiljb21wbGV0aW9uSGFuZGxl
cgorLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlKilyZXNvdXJjZSByZWNl
aXZlZFJlc3BvbnNlOihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJilyZXNwb25zZSBjb21wbGV0aW9u
SGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTaG91bGRDb250aW51ZVBvbGljeUNoZWNr
KT4mJiljb21wbGV0aW9uSGFuZGxlcgogewogICAgIEFTU0VSVChyZXNwb25zZS5zb3VyY2UoKSA9
PSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6Ok5ldHdvcmsgfHwgcmVzcG9uc2Uuc291cmNlKCkg
PT0gUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpEaXNrQ2FjaGUgfHwgcmVzcG9uc2Uuc291cmNl
KCkgPT0gUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpEaXNrQ2FjaGVBZnRlclZhbGlkYXRpb24g
fHwgcmVzcG9uc2Uuc291cmNlKCkgPT0gUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpTZXJ2aWNl
V29ya2VyKTsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAmcmVzb3VyY2UgPT0gX3Jlc291
cmNlKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAhcmVzb3VyY2UgfHwgcmVzb3VyY2Ug
PT0gX3Jlc291cmNlKTsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIFtzZWxmLnNl
c3Npb24gdGFzazpzZWxmIGRpZFJlY2VpdmVSZXNwb25zZUZyb21PcmlnaW46U2VjdXJpdHlPcmln
aW46OmNyZWF0ZShyZXNwb25zZS51cmwoKSldOwotICAgIFtzZWxmLnNlc3Npb24gdGFzazpzZWxm
IGRpZFJlY2VpdmVDT1JTQWNjZXNzQ2hlY2tSZXN1bHQ6cmVzb3VyY2UuZGlkUGFzc0FjY2Vzc0Nv
bnRyb2xDaGVjaygpXTsKKyAgICAvLyBGSVhNRTogVGhpbmsgYWJvdXQgdGhpcyBhbmQgbWFrZSBz
dXJlIGl0J3Mgc2FmZS4KKyAgICBbc2VsZi5zZXNzaW9uIHRhc2s6c2VsZiBkaWRSZWNlaXZlQ09S
U0FjY2Vzc0NoZWNrUmVzdWx0OnJlc291cmNlID8gcmVzb3VyY2UtPmRpZFBhc3NBY2Nlc3NDb250
cm9sQ2hlY2soKSA6IFlFU107CiAgICAgc2VsZi5jb3VudE9mQnl0ZXNFeHBlY3RlZFRvUmVjZWl2
ZSA9IHJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpOwotICAgIFJldGFpblB0cjxOU1VS
TFJlc3BvbnNlPiBzdHJvbmdSZXNwb25zZSB7IHJlc3BvbnNlLm5zVVJMUmVzcG9uc2UoKSB9Owor
ICAgIFJldGFpblB0cjxOU1VSTFJlc3BvbnNlPiBzdHJvbmdSZXNwb25zZSA9IHJlc3BvbnNlLm5z
VVJMUmVzcG9uc2UoKTsKKworICAgIGlmIChyZXNvdXJjZSAmJiBzZWxmLnNlc3Npb24gJiYgW3Nl
bGYuc2Vzc2lvbiByYW5nZVJlc3BvbnNlR2VuZXJhdG9yXS53aWxsU3ludGhlc2l6ZVJhbmdlUmVz
cG9uc2VzKHNlbGYsICpyZXNvdXJjZSwgcmVzcG9uc2UpKQorICAgICAgICByZXR1cm4gY29tcGxl
dGlvbkhhbmRsZXIoU2hvdWxkQ29udGludWVQb2xpY3lDaGVjazo6WWVzKTsKKyAgICAKICAgICBS
ZXRhaW5QdHI8V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrPiBzdHJvbmdTZWxmIHsgc2VsZiB9
OwogICAgIGlmICghc2VsZi5zZXNzaW9uKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRs
ZXIoU2hvdWxkQ29udGludWVQb2xpY3lDaGVjazo6Tm8pOwpAQCAtODUwLDkgKzgzOSw5IEBAIHZv
aWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQoUGxhdGZv
cm1NZWRpYVJlc291cmNlJiByZXNvCiAgICAgfV07CiB9CiAKLS0gKEJPT0wpcmVzb3VyY2U6KFBs
YXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2Ugc2hvdWxkQ2FjaGVSZXNwb25zZTooY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYpcmVzcG9uc2UKKy0gKEJPT0wpcmVzb3VyY2U6KFBsYXRmb3JtTWVk
aWFSZXNvdXJjZSopcmVzb3VyY2Ugc2hvdWxkQ2FjaGVSZXNwb25zZTooY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpcmVzcG9uc2UKIHsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAmcmVzb3Vy
Y2UgPT0gX3Jlc291cmNlKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAhcmVzb3VyY2Ug
fHwgcmVzb3VyY2UgPT0gX3Jlc291cmNlKTsKIAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAKQEAgLTg2MCw5ICs4NDksOSBAQCB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0Ns
aWVudDo6bG9hZEZpbmlzaGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzbwogICAgIHJldHVy
biByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRSYW5nZSku
aXNFbXB0eSgpOwogfQogCi0tICh2b2lkKXJlc291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2Um
KXJlc291cmNlIHJlY2VpdmVkRGF0YTooY29uc3QgY2hhciopZGF0YSBsZW5ndGg6KGludClsZW5n
dGgKKy0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3VyY2UgcmVj
ZWl2ZWREYXRhOihjb25zdCBjaGFyKilkYXRhIGxlbmd0aDooaW50KWxlbmd0aAogewotICAgIEFT
U0VSVF9VTlVTRUQocmVzb3VyY2UsICZyZXNvdXJjZSA9PSBfcmVzb3VyY2UpOworICAgIEFTU0VS
VF9VTlVTRUQocmVzb3VyY2UsICFyZXNvdXJjZSB8fCByZXNvdXJjZSA9PSBfcmVzb3VyY2UpOwog
ICAgIFJldGFpblB0cjxOU0RhdGE+IG5zRGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGlu
aXRXaXRoQnl0ZXM6ZGF0YSBsZW5ndGg6bGVuZ3RoXSk7CiAgICAgUmV0YWluUHRyPFdlYkNvcmVO
U1VSTFNlc3Npb25EYXRhVGFzaz4gc3Ryb25nU2VsZiB7IHNlbGYgfTsKICAgICBbc2VsZi5zZXNz
aW9uIGFkZERlbGVnYXRlT3BlcmF0aW9uOltzdHJvbmdTZWxmLCBsZW5ndGgsIG5zRGF0YV0gewpA
QCAtODczLDkgKzg2Miw5IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50
Ojpsb2FkRmluaXNoZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvCiAgICAgfV07CiB9CiAK
LS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgcmVjZWl2
ZWRSZWRpcmVjdDooY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpcmVzcG9uc2UgcmVxdWVzdDooUmVz
b3VyY2VSZXF1ZXN0JiYpcmVxdWVzdCBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChSZXNvdXJjZVJlcXVlc3QmJik+JiYpY29tcGxldGlvbkhhbmRsZXIKKy0gKHZvaWQp
cmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3VyY2UgcmVjZWl2ZWRSZWRpcmVj
dDooY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpcmVzcG9uc2UgcmVxdWVzdDooUmVzb3VyY2VSZXF1
ZXN0JiYpcmVxdWVzdCBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChS
ZXNvdXJjZVJlcXVlc3QmJik+JiYpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBBU1NFUlRfVU5V
U0VEKHJlc291cmNlLCAmcmVzb3VyY2UgPT0gX3Jlc291cmNlKTsKKyAgICBBU1NFUlRfVU5VU0VE
KHJlc291cmNlLCAhcmVzb3VyY2UgfHwgcmVzb3VyY2UgPT0gX3Jlc291cmNlKTsKICAgICBbc2Vs
Zi5zZXNzaW9uIGFkZERlbGVnYXRlT3BlcmF0aW9uOltzdHJvbmdTZWxmID0gcmV0YWluUHRyKHNl
bGYpLCByZXNwb25zZSA9IHJldGFpblB0cihyZXNwb25zZS5uc1VSTFJlc3BvbnNlKCkpLCByZXF1
ZXN0ID0gcmVxdWVzdC5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghW3Jlc3BvbnNl
IGlzS2luZE9mQ2xhc3M6W05TSFRUUFVSTFJlc3BvbnNlIGNsYXNzXV0pIHsKICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtOTA1LDkgKzg5NCw5IEBAIHZvaWQgV2ViQ29yZU5T
VVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQoUGxhdGZvcm1NZWRpYVJlc291
cmNlJiByZXNvCiAgICAgfV07CiB9CiAKLS0gKHZvaWQpX3Jlc291cmNlOihQbGF0Zm9ybU1lZGlh
UmVzb3VyY2UmKXJlc291cmNlIGxvYWRGaW5pc2hlZFdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9y
IG1ldHJpY3M6KGNvbnN0IE5ldHdvcmtMb2FkTWV0cmljcyYpbWV0cmljcworLSAodm9pZClfcmVz
b3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3VyY2UgbG9hZEZpbmlzaGVkV2l0aEVy
cm9yOihOU0Vycm9yICopZXJyb3IgbWV0cmljczooY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJilt
ZXRyaWNzCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgJnJlc291cmNlID09IF9yZXNv
dXJjZSk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgIXJlc291cmNlIHx8IHJlc291cmNl
ID09IF9yZXNvdXJjZSk7CiAgICAgaWYgKHNlbGYuc3RhdGUgPT0gTlNVUkxTZXNzaW9uVGFza1N0
YXRlQ29tcGxldGVkKQogICAgICAgICByZXR1cm47CiAgICAgc2VsZi5zdGF0ZSA9IE5TVVJMU2Vz
c2lvblRhc2tTdGF0ZUNvbXBsZXRlZDsKQEAgLTkzMCwxNyArOTE5LDE3IEBAIHZvaWQgV2ViQ29y
ZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQoUGxhdGZvcm1NZWRpYVJl
c291cmNlJiByZXNvCiAgICAgfV07CiB9CiAKLS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVk
aWFSZXNvdXJjZSYpcmVzb3VyY2UgYWNjZXNzQ29udHJvbENoZWNrRmFpbGVkV2l0aEVycm9yOihj
b25zdCBSZXNvdXJjZUVycm9yJillcnJvcgorLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRp
YVJlc291cmNlKilyZXNvdXJjZSBhY2Nlc3NDb250cm9sQ2hlY2tGYWlsZWRXaXRoRXJyb3I6KGNv
bnN0IFJlc291cmNlRXJyb3ImKWVycm9yCiB7CiAgICAgW3NlbGYgX3Jlc291cmNlOnJlc291cmNl
IGxvYWRGaW5pc2hlZFdpdGhFcnJvcjplcnJvci5uc0Vycm9yKCkgbWV0cmljczpOZXR3b3JrTG9h
ZE1ldHJpY3MgeyB9XTsKIH0KIAotLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291
cmNlJilyZXNvdXJjZSBsb2FkRmFpbGVkV2l0aEVycm9yOihjb25zdCBSZXNvdXJjZUVycm9yJill
cnJvcgorLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlKilyZXNvdXJjZSBs
b2FkRmFpbGVkV2l0aEVycm9yOihjb25zdCBSZXNvdXJjZUVycm9yJillcnJvcgogewogICAgIFtz
ZWxmIF9yZXNvdXJjZTpyZXNvdXJjZSBsb2FkRmluaXNoZWRXaXRoRXJyb3I6ZXJyb3IubnNFcnJv
cigpIG1ldHJpY3M6TmV0d29ya0xvYWRNZXRyaWNzIHsgfV07CiB9CiAKLS0gKHZvaWQpcmVzb3Vy
Y2VGaW5pc2hlZDooUGxhdGZvcm1NZWRpYVJlc291cmNlJilyZXNvdXJjZSBtZXRyaWNzOihjb25z
dCBOZXR3b3JrTG9hZE1ldHJpY3MmKW1ldHJpY3MKKy0gKHZvaWQpcmVzb3VyY2VGaW5pc2hlZDoo
UGxhdGZvcm1NZWRpYVJlc291cmNlKilyZXNvdXJjZSBtZXRyaWNzOihjb25zdCBOZXR3b3JrTG9h
ZE1ldHJpY3MmKW1ldHJpY3MKIHsKICAgICBbc2VsZiBfcmVzb3VyY2U6cmVzb3VyY2UgbG9hZEZp
bmlzaGVkV2l0aEVycm9yOm5pbCBtZXRyaWNzOm1ldHJpY3NdOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZh
dGVSZW1vdGUuY3BwCmluZGV4IDdmYjNlNWZiZGZjM2IxZjVjNjg5NTMyZThhMGExODAzMjEzNzFi
NTMuLjg3OTVhYmFjYWYwMDA1NjdmYTNhMjAxNmJjZjJmNDkxM2NiMTBiMDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvTWVkaWFQbGF5ZXJQcml2YXRlUmVt
b3RlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhUGxh
eWVyUHJpdmF0ZVJlbW90ZS5jcHAKQEAgLTExODAsNyArMTE4MCw3IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlUmVtb3RlOjpyZXF1ZXN0UmVzb3VyY2UoUmVtb3RlTWVkaWFSZXNvdXJjZUlkZW50
aWZpZXIgcmVtCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gUGxhdGZvcm1NZWRpYVJl
c291cmNlIG93bnMgdGhlIFBsYXRmb3JtTWVkaWFSZXNvdXJjZUNsaWVudAotICAgIHJlc291cmNl
LT5zZXRDbGllbnQobWFrZVVuaXF1ZTxSZW1vdGVNZWRpYVJlc291cmNlUHJveHk+KGNvbm5lY3Rp
b24oKSwgKnJlc291cmNlLCByZW1vdGVNZWRpYVJlc291cmNlSWRlbnRpZmllcikpOworICAgIHJl
c291cmNlLT5zZXRDbGllbnQoYWRvcHRSZWYoKm5ldyBSZW1vdGVNZWRpYVJlc291cmNlUHJveHko
Y29ubmVjdGlvbigpLCAqcmVzb3VyY2UsIHJlbW90ZU1lZGlhUmVzb3VyY2VJZGVudGlmaWVyKSkp
OwogICAgIG1fbWVkaWFSZXNvdXJjZXMuYWRkKHJlbW90ZU1lZGlhUmVzb3VyY2VJZGVudGlmaWVy
LCBXVEZNb3ZlKHJlc291cmNlKSk7CiAKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDA4YTAyODFjNmM2
MDIzMDc1YjNkNDI0NzNjNzQ5ODEyYTg2OGI1ZTMuLjcyMDM0YzZhYmIzNDNjODgyNDcyMDc2NDgz
OWViYzhiNGRkYzIwYTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAyMS0wMi0wNiAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFN5bnRoZXNpemUgcmFuZ2UgcmVz
cG9uc2VzIGlmIG5lZWRlZCBpbiBXZWJDb3JlTlNVUkxTZXNzaW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjEwNzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9QYXJzZWRDb250ZW50UmFuZ2UuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVT
VCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9DaGFsbGVuZ2Uu
bW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpjbGllbnRDZXJ0U2VydmVyKToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL01lZGlhTG9hZGluZy5tbToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OnRlc3RWaWRlb0J5dGVzKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OnJ1blZpZGVvVGVzdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIuaDoKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OkhUVFBSZXNwb25zZTo6SFRUUFJlc3BvbnNlKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OkhUVFBTZXJ2ZXI6OkhUVFBSZXNwb25zZTo6SFRUUFJlc3BvbnNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW06CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpIVFRQU2VydmVyOjpSZXF1ZXN0RGF0YTo6UmVxdWVzdERhdGEpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6YXBwZW5kVG9WZWN0b3IpOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6SFRUUFNlcnZlcjo6cGFyc2VQYXRoKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBT
ZXJ2ZXI6OnJlc3BvbmRUb1JlcXVlc3RzKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBS
ZXNwb25zZTo6Ym9keUZyb21TdHJpbmcpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFJl
c3BvbnNlOjpzZXJpYWxpemUpOgorCiAyMDIxLTAyLTA1ICBFcmljIENhcmxzb24gIDxlcmljLmNh
cmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIERpc2FibGUgTWVkaWFTZXNzaW9uVGVz
dCBBUEkgdGVzdHMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9QYXJzZWRDb250ZW50UmFuZ2UuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL1BhcnNlZENvbnRlbnRSYW5nZS5jcHAKaW5kZXggMjBhOTU3ZTU5Yzg1MTYwYzgwODMxN2Ux
NWIwMTAyOGQ1ZmE5YjQ1OC4uMjVkMmQ2NzdmYjg4ODYyMjVmZTMxZGI0OThlNWQ3NWQ2YzYwMGY0
MCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1BhcnNlZENv
bnRlbnRSYW5nZS5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1Bh
cnNlZENvbnRlbnRSYW5nZS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKIAogI2luY2x1ZGUgPFdlYkNvcmUvUGFyc2VkQ29udGVudFJhbmdlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9QYXJzZWRSZXF1ZXN0UmFuZ2UuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC05NSw0ICs5NiwzMSBAQCBURVNU
KFdlYkNvcmUsIFBhcnNlZENvbnRlbnRSYW5nZVRvU3RyaW5nKQogICAgIEFTU0VSVF9TVFJFUSgi
IiwgUGFyc2VkQ29udGVudFJhbmdlKCkuaGVhZGVyVmFsdWUoKS51dGY4KCkuZGF0YSgpKTsKIH0K
IAorVEVTVChXZWJDb3JlLCBQYXJzZWRSZXF1ZXN0UmFuZ2UpCit7CisgICAgVmVjdG9yPFN0cmlu
Zz4gZmFpbHVyZUNhc2VzIHsKKyAgICAgICAgeyB9LAorICAgICAgICAiIiwKKyAgICAgICAgImFi
YyIsCisgICAgICAgICJieXRlcz0iLAorICAgICAgICAiYnl0ZXM9LSIsCisgICAgICAgICJieXRl
cz1hYmMtIiwKKyAgICAgICAgImJ5dGVzPTEtYWJjIiwKKyAgICAgICAgImJ5dGVzPTItMSIsCisg
ICAgICAgICJieXRlcz0xLSIsCisgICAgICAgICJieXRlcz0tMSIsCisgICAgICAgICJieXRlcz0x
LTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSIKKyAgICB9OworICAgIGZvciAoY29uc3QgYXV0byYg
aW5wdXQgOiBmYWlsdXJlQ2FzZXMpCisgICAgICAgIEVYUEVDVF9FUShXVEY6Om51bGxvcHQsIFBh
cnNlZFJlcXVlc3RSYW5nZTo6cGFyc2UoaW5wdXQpKTsKKworICAgIGF1dG8gY29tcGFyZSA9IFtd
IChjb25zdCBTdHJpbmcmIGlucHV0LCBPcHRpb25hbDxzaXplX3Q+IGJlZ2luLCBPcHRpb25hbDxz
aXplX3Q+IGVuZCkgeworICAgICAgICBhdXRvIHJhbmdlID0gUGFyc2VkUmVxdWVzdFJhbmdlOjpw
YXJzZShpbnB1dCk7CisgICAgICAgIEVYUEVDVF9ORShXVEY6Om51bGxvcHQsIHJhbmdlKTsKKyAg
ICAgICAgCisgICAgfTsKKyAgICBjb21wYXJlKCJieXRlcz0xLTEiLCAxLCAxKTsKKyAgICBjb21w
YXJlKCJieXRlcz0xLTIiLCAxLCAyKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9DaGFsbGVuZ2UubW0gYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0NoYWxsZW5nZS5tbQppbmRleCA5NjQwNzQ4YmY2MzAyOGQy
Yjc0NDg5OGNkMGQ0NjUzY2ZhOGJkNWQzLi4wYjc1YmE0M2MwM2FlMzg4ODE2YTFmM2NjMmNlZTZm
MTc3MWIxMDYxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0NoYWxsZW5nZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0NoYWxsZW5nZS5tbQpAQCAtNTg5LDcgKzU4OSw3IEBAIHN0YXRpYyBIVFRQU2VydmVyIGNs
aWVudENlcnRTZXJ2ZXIoKQogICAgICAgICB7ICIvNS5wbmciLCB7IGxvbmdTdHJpbmcgfSB9LAog
ICAgICAgICB7ICIvNi5wbmciLCB7IGxvbmdTdHJpbmcgfSB9LAogICAgICAgICB7ICIvcmVkaXJl
Y3RUb0Vycm9yIiwgeyAzMDEsIHt7ICJMb2NhdGlvbiIsICIvZXJyb3IiIH19IH0gfSwKLSAgICAg
ICAgeyAiL2Vycm9yIiwgeyBIVFRQU2VydmVyOjpIVFRQUmVzcG9uc2U6OlRlcm1pbmF0ZUNvbm5l
Y3Rpb246OlllcyB9IH0sCisgICAgICAgIHsgIi9lcnJvciIsIHsgSFRUUFJlc3BvbnNlOjpUZXJt
aW5hdGVDb25uZWN0aW9uOjpZZXMgfSB9LAogICAgIH0sIEhUVFBTZXJ2ZXI6OlByb3RvY29sOjpI
dHRwcywgW10gKGF1dG8sIGF1dG8sIGF1dG8gY2VydGlmaWNhdGVBbGxvd2VkKSB7CiAgICAgICAg
IGNlcnRpZmljYXRlQWxsb3dlZCh0cnVlKTsKICAgICB9KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTWVkaWFMb2FkaW5nLm1tIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9NZWRpYUxvYWRpbmcubW0KaW5kZXggNjRkYzVi
ZjA1NmI5NTVhMjQ4ZjY3ZTIwZDA5Zjc0NzExMzFjMTQ2NS4uMTI2YzhjMzJmMzE3YmJjMzYyNThl
MjUwNGQwYTI0MTc3OTdiNTUzZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9NZWRpYUxvYWRpbmcubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9NZWRpYUxvYWRpbmcubW0KQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lt
cG9ydCAiSFRUUFNlcnZlci5oIgogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBv
cnQgIlRlc3RVSURlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0
IDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KIApAQCAtMTE2LDYgKzExNyw3
NCBAQCBURVNUKE1lZGlhTG9hZGluZywgVXNlckFnZW50U3RyaW5nSExTKQogICAgIFV0aWw6OnJ1
bigmcmVjZWl2ZWRNZWRpYVJlcXVlc3QpOwogfQogCitjb25zdCBjaGFyKiB2aWRlb1BsYXlUZXN0
SFRNTCA9IjxzY3JpcHQ+IgorICAgICJmdW5jdGlvbiBjcmVhdGVWaWRlb0VsZW1lbnQoKSB7Igor
ICAgICAgICAibGV0IHZpZGVvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTsiCisg
ICAgICAgICJ2aWRlby5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsICgpPT57YWxlcnQoJ2Vycm9y
Jyl9KTsiCisgICAgICAgICJ2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgKCk9Pnth
bGVydCgncGxheWluZycpfSk7IgorICAgICAgICAidmlkZW8uc3JjPSd2aWRlby5tcDQnOyIKKyAg
ICAgICAgInZpZGVvLmF1dG9wbGF5ID0gMTsiCisgICAgICAgICJkb2N1bWVudC5ib2R5LmFwcGVu
ZENoaWxkKHZpZGVvKTsiCisgICAgIn0iCisiPC9zY3JpcHQ+IgorIjxib2R5IG9ubG9hZD0nY3Jl
YXRlVmlkZW9FbGVtZW50KCknPjwvYm9keT4iOworCitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IHRl
c3RWaWRlb0J5dGVzKCkKK3sKKyAgICBOU0RhdGEgKmRhdGEgPSBbTlNEYXRhIGRhdGFXaXRoQ29u
dGVudHNPZlVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAidGVzdCIg
d2l0aEV4dGVuc2lvbjpAIm1wNCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJj
ZXMiXV07CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvcjsKKyAgICB2ZWN0b3IuYXBwZW5kKHN0
YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ5dGVzKSwgZGF0YS5sZW5ndGgpOworICAg
IHJldHVybiB2ZWN0b3I7Cit9CisKK3N0YXRpYyB2b2lkIHJ1blZpZGVvVGVzdChOU1VSTFJlcXVl
c3QgKnJlcXVlc3QsIGNvbnN0IGNoYXIqIGV4cGVjdGVkTWVzc2FnZSA9ICJwbGF5aW5nIikKK3sK
KyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlv
biBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyYXRpb24uZ2V0KCkubWVkaWFUeXBlc1JlcXVp
cmluZ1VzZXJBY3Rpb25Gb3JQbGF5YmFjayA9IFdLQXVkaW92aXN1YWxNZWRpYVR5cGVOb25lOwor
ICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgMzAwLCAzMDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJh
dGlvbi5nZXQoKSBhZGRUb1dpbmRvdzpZRVNdKTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpy
ZXF1ZXN0XTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW3dlYlZpZXcgX3Rlc3Rfd2FpdEZvckFsZXJ0
XSwgZXhwZWN0ZWRNZXNzYWdlKTsKK30KKworVEVTVChNZWRpYUxvYWRpbmcsIFJhbmdlUmVxdWVz
dFN5bnRoZXNpc1dpdGhDb250ZW50TGVuZ3RoKQoreworICAgIEhUVFBTZXJ2ZXIgc2VydmVyKHsK
KyAgICAgICAgeyIvIiwgeyB2aWRlb1BsYXlUZXN0SFRNTCB9fSwKKyAgICAgICAgeyIvdmlkZW8u
bXA0IiwgeyB0ZXN0VmlkZW9CeXRlcygpIH19CisgICAgfSk7CisgICAgcnVuVmlkZW9UZXN0KHNl
cnZlci5yZXF1ZXN0KCkpOworICAgIEVYUEVDVF9FUShzZXJ2ZXIudG90YWxSZXF1ZXN0cygpLCAy
dSk7CiB9CiAKK1RFU1QoTWVkaWFMb2FkaW5nLCBSYW5nZVJlcXVlc3RTeW50aGVzaXNXaXRob3V0
Q29udGVudExlbmd0aCkKK3sKKyAgICBzaXplX3QgdG90YWxSZXF1ZXN0cyB7IDAgfTsKKyAgICBG
dW5jdGlvbjx2b2lkKENvbm5lY3Rpb24pPiByZXNwb25kVG9SZXF1ZXN0czsKKyAgICByZXNwb25k
VG9SZXF1ZXN0cyA9IFsmXSAoQ29ubmVjdGlvbiBjb25uZWN0aW9uKSB7CisgICAgICAgIGNvbm5l
Y3Rpb24ucmVjZWl2ZUhUVFBSZXF1ZXN0KFsmLCBjb25uZWN0aW9uXSAoVmVjdG9yPGNoYXI+JiYg
cmVxdWVzdCkgeworICAgICAgICAgICAgYXV0byBzZW5kUmVzcG9uc2UgPSBbJiwgY29ubmVjdGlv
bl0gKEhUVFBSZXNwb25zZSByZXNwb25zZSwgSFRUUFJlc3BvbnNlOjpJbmNsdWRlQ29udGVudExl
bmd0aCBpbmNsdWRlQ29udGVudExlbmd0aCkgeworICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24u
c2VuZChyZXNwb25zZS5zZXJpYWxpemUoaW5jbHVkZUNvbnRlbnRMZW5ndGgpLCBbJiwgY29ubmVj
dGlvbl0geworICAgICAgICAgICAgICAgICAgICByZXNwb25kVG9SZXF1ZXN0cyhjb25uZWN0aW9u
KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICB0b3Rh
bFJlcXVlc3RzKys7CisgICAgICAgICAgICBhdXRvIHBhdGggPSBIVFRQU2VydmVyOjpwYXJzZVBh
dGgocmVxdWVzdCk7CisgICAgICAgICAgICBpZiAocGF0aCA9PSAiLyIpCisgICAgICAgICAgICAg
ICAgc2VuZFJlc3BvbnNlKHsgdmlkZW9QbGF5VGVzdEhUTUwgfSwgSFRUUFJlc3BvbnNlOjpJbmNs
dWRlQ29udGVudExlbmd0aDo6WWVzKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHBhdGggPT0gIi92
aWRlby5tcDQiKQorICAgICAgICAgICAgICAgIHNlbmRSZXNwb25zZSh0ZXN0VmlkZW9CeXRlcygp
LCBIVFRQUmVzcG9uc2U6OkluY2x1ZGVDb250ZW50TGVuZ3RoOjpObyk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgQVNTRVJUKHBhdGguaXNOdWxsKCkpOworICAgICAgICB9KTsK
KyAgICB9OworCisgICAgSFRUUFNlcnZlciBzZXJ2ZXIoWyZdKENvbm5lY3Rpb24gY29ubmVjdGlv
bikgeworICAgICAgICByZXNwb25kVG9SZXF1ZXN0cyhjb25uZWN0aW9uKTsKKyAgICB9KTsKKyAg
ICBydW5WaWRlb1Rlc3Qoc2VydmVyLnJlcXVlc3QoKSwgImVycm9yIik7CisgICAgRVhQRUNUX0VR
KHRvdGFsUmVxdWVzdHMsIDJ1KTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQor
CiAjZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAmJiBVU0UoQVZGT1VOREFUSU9OKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLmggYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIuaAppbmRleCAzOTVkYWY5MzFlMjhhNzFlNzdiODBmMTAx
NzhmNTU5NDg1ZjM1MWMyLi5jMjgwZTVkYWE5OGVmNjYyMzI2ZjFiY2Y0ZmYyODNlNWZhMzkwMzUw
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIuaAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIuaApAQCAtMzUsMTAgKzM1LDEw
IEBACiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKIGNsYXNzIENvbm5lY3Rpb247CitzdHJ1
Y3QgSFRUUFJlc3BvbnNlOwogCiBjbGFzcyBIVFRQU2VydmVyIHsKIHB1YmxpYzoKLSAgICBzdHJ1
Y3QgSFRUUFJlc3BvbnNlOwogICAgIHN0cnVjdCBSZXF1ZXN0RGF0YTsKICAgICBlbnVtIGNsYXNz
IFByb3RvY29sIDogdWludDhfdCB7IEh0dHAsIEh0dHBzLCBIdHRwc1dpdGhMZWdhY3lUTFMsIEh0
dHAyIH07CiAgICAgdXNpbmcgQ2VydGlmaWNhdGVWZXJpZmllciA9IEZ1bmN0aW9uPHZvaWQoc2Vj
X3Byb3RvY29sX21ldGFkYXRhX3QsIHNlY190cnVzdF90LCBzZWNfcHJvdG9jb2xfdmVyaWZ5X2Nv
bXBsZXRlX3QpPjsKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQg
cmVzcG9uZFdpdGhPSyhDb25uZWN0aW9uKTsKICAgICBzdGF0aWMgdm9pZCByZXNwb25kV2l0aENo
YWxsZW5nZVRoZW5PSyhDb25uZWN0aW9uKTsKKyAgICBzdGF0aWMgU3RyaW5nIHBhcnNlUGF0aChj
b25zdCBWZWN0b3I8Y2hhcj4mIHJlcXVlc3QpOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBSZXRh
aW5QdHI8bndfcGFyYW1ldGVyc190PiBsaXN0ZW5lclBhcmFtZXRlcnMoUHJvdG9jb2wsIENlcnRp
ZmljYXRlVmVyaWZpZXImJiwgUmV0YWluUHRyPFNlY0lkZW50aXR5UmVmPiYmLCBPcHRpb25hbDx1
aW50MTZfdD4gcG9ydCk7CkBAIC04MSwxOCArODIsMjAgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5Q
dHI8bndfY29ubmVjdGlvbl90PiBtX2Nvbm5lY3Rpb247CiB9OwogCi1zdHJ1Y3QgSFRUUFNlcnZl
cjo6SFRUUFJlc3BvbnNlIHsKK3N0cnVjdCBIVFRQUmVzcG9uc2UgewogICAgIGVudW0gY2xhc3Mg
VGVybWluYXRlQ29ubmVjdGlvbiB7IE5vLCBZZXMgfTsKLSAgICAKKworICAgIEhUVFBSZXNwb25z
ZShWZWN0b3I8dWludDhfdD4mJiBib2R5KQorICAgICAgICA6IGJvZHkoV1RGTW92ZShib2R5KSkg
eyB9CiAgICAgSFRUUFJlc3BvbnNlKGNvbnN0IFN0cmluZyYgYm9keSkKLSAgICAgICAgOiBib2R5
KGJvZHkpIHsgfQotICAgIEhUVFBSZXNwb25zZShIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYmIGhl
YWRlckZpZWxkcywgU3RyaW5nJiYgYm9keSkKKyAgICAgICAgOiBib2R5KGJvZHlGcm9tU3RyaW5n
KGJvZHkpKSB7IH0KKyAgICBIVFRQUmVzcG9uc2UoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mJiBo
ZWFkZXJGaWVsZHMsIGNvbnN0IFN0cmluZyYgYm9keSkKICAgICAgICAgOiBoZWFkZXJGaWVsZHMo
V1RGTW92ZShoZWFkZXJGaWVsZHMpKQotICAgICAgICAsIGJvZHkoV1RGTW92ZShib2R5KSkgeyB9
Ci0gICAgSFRUUFJlc3BvbnNlKHVuc2lnbmVkIHN0YXR1c0NvZGUsIEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+JiYgaGVhZGVyRmllbGRzID0geyB9LCBTdHJpbmcmJiBib2R5ID0geyB9KQorICAgICAg
ICAsIGJvZHkoYm9keUZyb21TdHJpbmcoYm9keSkpIHsgfQorICAgIEhUVFBSZXNwb25zZSh1bnNp
Z25lZCBzdGF0dXNDb2RlLCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYmIGhlYWRlckZpZWxkcyA9
IHsgfSwgY29uc3QgU3RyaW5nJiBib2R5ID0geyB9KQogICAgICAgICA6IHN0YXR1c0NvZGUoc3Rh
dHVzQ29kZSkKICAgICAgICAgLCBoZWFkZXJGaWVsZHMoV1RGTW92ZShoZWFkZXJGaWVsZHMpKQot
ICAgICAgICAsIGJvZHkoV1RGTW92ZShib2R5KSkgeyB9CisgICAgICAgICwgYm9keShib2R5RnJv
bVN0cmluZyhib2R5KSkgeyB9CiAgICAgSFRUUFJlc3BvbnNlKFRlcm1pbmF0ZUNvbm5lY3Rpb24g
dGVybWluYXRlQ29ubmVjdGlvbikKICAgICAgICAgOiB0ZXJtaW5hdGVDb25uZWN0aW9uKHRlcm1p
bmF0ZUNvbm5lY3Rpb24pIHsgfQogCkBAIC0xMDEsMTAgKzEwNCwxNCBAQCBzdHJ1Y3QgSFRUUFNl
cnZlcjo6SFRUUFJlc3BvbnNlIHsKICAgICBIVFRQUmVzcG9uc2UoKSA9IGRlZmF1bHQ7CiAgICAg
SFRUUFJlc3BvbnNlJiBvcGVyYXRvcj0oY29uc3QgSFRUUFJlc3BvbnNlJikgPSBkZWZhdWx0Owog
ICAgIEhUVFBSZXNwb25zZSYgb3BlcmF0b3I9KEhUVFBSZXNwb25zZSYmKSA9IGRlZmF1bHQ7Ci0g
ICAgCisKKyAgICBlbnVtIGNsYXNzIEluY2x1ZGVDb250ZW50TGVuZ3RoIDogYm9vbCB7IE5vLCBZ
ZXMgfTsKKyAgICBWZWN0b3I8dWludDhfdD4gc2VyaWFsaXplKEluY2x1ZGVDb250ZW50TGVuZ3Ro
ID0gSW5jbHVkZUNvbnRlbnRMZW5ndGg6Olllcyk7CisgICAgc3RhdGljIFZlY3Rvcjx1aW50OF90
PiBib2R5RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKKwogICAgIHVuc2lnbmVkIHN0YXR1c0Nv
ZGUgeyAyMDAgfTsKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBoZWFkZXJGaWVsZHM7Ci0g
ICAgU3RyaW5nIGJvZHk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJvZHk7CiAgICAgVGVybWluYXRl
Q29ubmVjdGlvbiB0ZXJtaW5hdGVDb25uZWN0aW9uIHsgVGVybWluYXRlQ29ubmVjdGlvbjo6Tm8g
fTsKIH07CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZl
ci5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQppbmRleCAxMDc0
NGE1YzQ0M2Y1YjM5ZmVmMzZjODM4ZTgwNTg2NGZhZmViMTYyLi5iYWJmNGQwMGIzNDI0ZjZmNTFk
ZGJiMzNkYmM1ZWMyZWYwZWE4ZWU5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2Nv
Y29hL0hUVFBTZXJ2ZXIubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2Vy
dmVyLm1tCkBAIC0zOCw4ICszOCw4IEBAIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogc3Ry
dWN0IEhUVFBTZXJ2ZXI6OlJlcXVlc3REYXRhIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PFJlcXVlc3REYXRhLCBXVEY6OkRlc3RydWN0aW9uVGhyZWFkOjpNYWluUnVuTG9vcD4gewogICAg
IFJlcXVlc3REYXRhKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8U3RyaW5nLCBIVFRQ
UmVzcG9uc2U+PiByZXNwb25zZXMpCi0gICAgOiByZXF1ZXN0TWFwKFtdKHN0ZDo6aW5pdGlhbGl6
ZXJfbGlzdDxzdGQ6OnBhaXI8U3RyaW5nLCBIVFRQU2VydmVyOjpIVFRQUmVzcG9uc2U+PiBsaXN0
KSB7Ci0gICAgICAgIEhhc2hNYXA8U3RyaW5nLCBIVFRQU2VydmVyOjpIVFRQUmVzcG9uc2U+IG1h
cDsKKyAgICA6IHJlcXVlc3RNYXAoW10oc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxT
dHJpbmcsIEhUVFBSZXNwb25zZT4+IGxpc3QpIHsKKyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIEhU
VFBSZXNwb25zZT4gbWFwOwogICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBsaXN0KQogICAgICAg
ICAgICAgbWFwLmFkZChwYWlyLmZpcnN0LCBwYWlyLnNlY29uZCk7CiAgICAgICAgIHJldHVybiBt
YXA7CkBAIC0yMTIsNiArMjEyLDMxIEBAIHN0YXRpYyBWZWN0b3I8dWludDhfdD4gdmVjdG9yRnJv
bURhdGEoZGlzcGF0Y2hfZGF0YV90IGNvbnRlbnQpCiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAK
K3N0YXRpYyB2b2lkIGFwcGVuZFRvVmVjdG9yKFZlY3Rvcjx1aW50OF90PiYgdmVjdG9yLCBjb25z
dCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBhdXRvIHV0ZjggPSBzdHJpbmcudXRmOCgpOworICAg
IHZlY3Rvci5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odXRmOC5kYXRh
KCkpLCB1dGY4Lmxlbmd0aCgpKTsKK30KKworU3RyaW5nIEhUVFBTZXJ2ZXI6OnBhcnNlUGF0aChj
b25zdCBWZWN0b3I8Y2hhcj4mIHJlcXVlc3QpCit7CisgICAgaWYgKCFyZXF1ZXN0LnNpemUoKSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBjb25zdCBjaGFyKiBnZXRQYXRoUHJlZml4ID0gIkdF
VCAiOworICAgIGNvbnN0IGNoYXIqIHBvc3RQYXRoUHJlZml4ID0gIlBPU1QgIjsKKyAgICBjb25z
dCBjaGFyKiBwYXRoU3VmZml4ID0gIiBIVFRQLzEuMVxyXG4iOworICAgIGNvbnN0IGNoYXIqIHBh
dGhFbmQgPSBzdHJuc3RyKHJlcXVlc3QuZGF0YSgpLCBwYXRoU3VmZml4LCByZXF1ZXN0LnNpemUo
KSk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShwYXRoRW5kLCAiSFRUUFNlcnZlciBhc3N1bWVz
IHJlcXVlc3QgaXMgSFRUUCAxLjEiKTsKKyAgICBzaXplX3QgcGF0aFByZWZpeExlbmd0aCA9IDA7
CisgICAgaWYgKCFtZW1jbXAocmVxdWVzdC5kYXRhKCksIGdldFBhdGhQcmVmaXgsIHN0cmxlbihn
ZXRQYXRoUHJlZml4KSkpCisgICAgICAgIHBhdGhQcmVmaXhMZW5ndGggPSBzdHJsZW4oZ2V0UGF0
aFByZWZpeCk7CisgICAgZWxzZSBpZiAoIW1lbWNtcChyZXF1ZXN0LmRhdGEoKSwgcG9zdFBhdGhQ
cmVmaXgsIHN0cmxlbihwb3N0UGF0aFByZWZpeCkpKQorICAgICAgICBwYXRoUHJlZml4TGVuZ3Ro
ID0gc3RybGVuKHBvc3RQYXRoUHJlZml4KTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHBhdGhQ
cmVmaXhMZW5ndGgsICJIVFRQU2VydmVyIGFzc3VtZXMgcmVxdWVzdCBpcyBHRVQgb3IgUE9TVCIp
OworICAgIHNpemVfdCBwYXRoTGVuZ3RoID0gcGF0aEVuZCAtIHJlcXVlc3QuZGF0YSgpIC0gcGF0
aFByZWZpeExlbmd0aDsKKyAgICByZXR1cm4gU3RyaW5nKHJlcXVlc3QuZGF0YSgpICsgcGF0aFBy
ZWZpeExlbmd0aCwgcGF0aExlbmd0aCk7Cit9CisKIHZvaWQgSFRUUFNlcnZlcjo6cmVzcG9uZFRv
UmVxdWVzdHMoQ29ubmVjdGlvbiBjb25uZWN0aW9uLCBSZWY8UmVxdWVzdERhdGE+IHJlcXVlc3RE
YXRhKQogewogICAgIGNvbm5lY3Rpb24ucmVjZWl2ZUhUVFBSZXF1ZXN0KFtjb25uZWN0aW9uLCBy
ZXF1ZXN0RGF0YV0gKFZlY3RvcjxjaGFyPiYmIHJlcXVlc3QpIG11dGFibGUgewpAQCAtMjE5LDMy
ICsyNDQsMTQgQEAgdm9pZCBIVFRQU2VydmVyOjpyZXNwb25kVG9SZXF1ZXN0cyhDb25uZWN0aW9u
IGNvbm5lY3Rpb24sIFJlZjxSZXF1ZXN0RGF0YT4gcmVxdWUKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgcmVxdWVzdERhdGEtPnJlcXVlc3RDb3VudCsrOwogCi0gICAgICAgIGNvbnN0IGNo
YXIqIGdldFBhdGhQcmVmaXggPSAiR0VUICI7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHBvc3RQYXRo
UHJlZml4ID0gIlBPU1QgIjsKLSAgICAgICAgY29uc3QgY2hhciogcGF0aFN1ZmZpeCA9ICIgSFRU
UC8xLjFcclxuIjsKLSAgICAgICAgY29uc3QgY2hhciogcGF0aEVuZCA9IHN0cm5zdHIocmVxdWVz
dC5kYXRhKCksIHBhdGhTdWZmaXgsIHJlcXVlc3Quc2l6ZSgpKTsKLSAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShwYXRoRW5kLCAiSFRUUFNlcnZlciBhc3N1bWVzIHJlcXVlc3QgaXMgSFRUUCAx
LjEiKTsKLSAgICAgICAgc2l6ZV90IHBhdGhQcmVmaXhMZW5ndGggPSAwOwotICAgICAgICBpZiAo
IW1lbWNtcChyZXF1ZXN0LmRhdGEoKSwgZ2V0UGF0aFByZWZpeCwgc3RybGVuKGdldFBhdGhQcmVm
aXgpKSkKLSAgICAgICAgICAgIHBhdGhQcmVmaXhMZW5ndGggPSBzdHJsZW4oZ2V0UGF0aFByZWZp
eCk7Ci0gICAgICAgIGVsc2UgaWYgKCFtZW1jbXAocmVxdWVzdC5kYXRhKCksIHBvc3RQYXRoUHJl
Zml4LCBzdHJsZW4ocG9zdFBhdGhQcmVmaXgpKSkKLSAgICAgICAgICAgIHBhdGhQcmVmaXhMZW5n
dGggPSBzdHJsZW4ocG9zdFBhdGhQcmVmaXgpOwotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KHBhdGhQcmVmaXhMZW5ndGgsICJIVFRQU2VydmVyIGFzc3VtZXMgcmVxdWVzdCBpcyBHRVQgb3Ig
UE9TVCIpOwotICAgICAgICBzaXplX3QgcGF0aExlbmd0aCA9IHBhdGhFbmQgLSByZXF1ZXN0LmRh
dGEoKSAtIHBhdGhQcmVmaXhMZW5ndGg7Ci0gICAgICAgIFN0cmluZyBwYXRoKHJlcXVlc3QuZGF0
YSgpICsgcGF0aFByZWZpeExlbmd0aCwgcGF0aExlbmd0aCk7CisgICAgICAgIGF1dG8gcGF0aCA9
IHBhcnNlUGF0aChyZXF1ZXN0KTsKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShyZXF1ZXN0
RGF0YS0+cmVxdWVzdE1hcC5jb250YWlucyhwYXRoKSwgIlRoaXMgSFRUUFNlcnZlciBkb2VzIG5v
dCBrbm93IGhvdyB0byByZXNwb25kIHRvIGEgcmVxdWVzdCBmb3IgJXMiLCBwYXRoLnV0ZjgoKS5k
YXRhKCkpOwogCiAgICAgICAgIGF1dG8gcmVzcG9uc2UgPSByZXF1ZXN0RGF0YS0+cmVxdWVzdE1h
cC5nZXQocGF0aCk7CiAgICAgICAgIGlmIChyZXNwb25zZS50ZXJtaW5hdGVDb25uZWN0aW9uID09
IEhUVFBSZXNwb25zZTo6VGVybWluYXRlQ29ubmVjdGlvbjo6WWVzKQogICAgICAgICAgICAgcmV0
dXJuIGNvbm5lY3Rpb24udGVybWluYXRlKCk7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgcmVzcG9u
c2VCdWlsZGVyOwotICAgICAgICByZXNwb25zZUJ1aWxkZXIuYXBwZW5kKCJIVFRQLzEuMSAiLCBy
ZXNwb25zZS5zdGF0dXNDb2RlLCAnICcsIHN0YXR1c1RleHQocmVzcG9uc2Uuc3RhdHVzQ29kZSks
ICJcclxuIik7Ci0gICAgICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQoIkNvbnRlbnQtTGVuZ3Ro
OiAiLCByZXNwb25zZS5ib2R5Lmxlbmd0aCgpLCAiXHJcbiIpOwotICAgICAgICBmb3IgKGF1dG8m
IHBhaXIgOiByZXNwb25zZS5oZWFkZXJGaWVsZHMpCi0gICAgICAgICAgICByZXNwb25zZUJ1aWxk
ZXIuYXBwZW5kKHBhaXIua2V5LCAiOiAiLCBwYWlyLnZhbHVlLCAiXHJcbiIpOwotICAgICAgICBy
ZXNwb25zZUJ1aWxkZXIuYXBwZW5kKCJcclxuIik7Ci0gICAgICAgIHJlc3BvbnNlQnVpbGRlci5h
cHBlbmQocmVzcG9uc2UuYm9keSk7Ci0gICAgICAgIGNvbm5lY3Rpb24uc2VuZChyZXNwb25zZUJ1
aWxkZXIudG9TdHJpbmcoKSwgW2Nvbm5lY3Rpb24sIHJlcXVlc3REYXRhXSB7CisKKyAgICAgICAg
Y29ubmVjdGlvbi5zZW5kKHJlc3BvbnNlLnNlcmlhbGl6ZSgpLCBbY29ubmVjdGlvbiwgcmVxdWVz
dERhdGFdIHsKICAgICAgICAgICAgIHJlc3BvbmRUb1JlcXVlc3RzKGNvbm5lY3Rpb24sIHJlcXVl
c3REYXRhKTsKICAgICAgICAgfSk7CiAgICAgfSk7CkBAIC0zMzQsNiArMzQxLDI5IEBAIHZvaWQg
Q29ubmVjdGlvbjo6Y2FuY2VsKCkKICAgICBtX2Nvbm5lY3Rpb24gPSBudWxscHRyOwogfQogCitW
ZWN0b3I8dWludDhfdD4gSFRUUFJlc3BvbnNlOjpib2R5RnJvbVN0cmluZyhjb25zdCBTdHJpbmcm
IHN0cmluZykKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOworICAgIGFwcGVuZFRvVmVj
dG9yKHZlY3Rvciwgc3RyaW5nKTsKKyAgICByZXR1cm4gdmVjdG9yOworfQorCitWZWN0b3I8dWlu
dDhfdD4gSFRUUFJlc3BvbnNlOjpzZXJpYWxpemUoSW5jbHVkZUNvbnRlbnRMZW5ndGggaW5jbHVk
ZUNvbnRlbnRMZW5ndGgpCit7CisgICAgU3RyaW5nQnVpbGRlciByZXNwb25zZUJ1aWxkZXI7Cisg
ICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZCgiSFRUUC8xLjEgIiwgc3RhdHVzQ29kZSwgJyAnLCBz
dGF0dXNUZXh0KHN0YXR1c0NvZGUpLCAiXHJcbiIpOworICAgIGlmIChpbmNsdWRlQ29udGVudExl
bmd0aCA9PSBJbmNsdWRlQ29udGVudExlbmd0aDo6WWVzKQorICAgICAgICByZXNwb25zZUJ1aWxk
ZXIuYXBwZW5kKCJDb250ZW50LUxlbmd0aDogIiwgYm9keS5zaXplKCksICJcclxuIik7CisgICAg
Zm9yIChhdXRvJiBwYWlyIDogaGVhZGVyRmllbGRzKQorICAgICAgICByZXNwb25zZUJ1aWxkZXIu
YXBwZW5kKHBhaXIua2V5LCAiOiAiLCBwYWlyLnZhbHVlLCAiXHJcbiIpOworICAgIHJlc3BvbnNl
QnVpbGRlci5hcHBlbmQoIlxyXG4iKTsKKyAgICAKKyAgICBWZWN0b3I8dWludDhfdD4gYnl0ZXNU
b1NlbmQ7CisgICAgYXBwZW5kVG9WZWN0b3IoYnl0ZXNUb1NlbmQsIHJlc3BvbnNlQnVpbGRlci50
b1N0cmluZygpKTsKKyAgICBieXRlc1RvU2VuZC5hcHBlbmRWZWN0b3IoYm9keSk7CisgICAgcmV0
dXJuIGJ5dGVzVG9TZW5kOworfQorCiB2b2lkIEgyOjpDb25uZWN0aW9uOjpzZW5kKEZyYW1lJiYg
ZnJhbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29u
c3QKIHsKICAgICBhdXRvIGZyYW1lVHlwZSA9IGZyYW1lLnR5cGUoKTsK
</data>
<flag name="commit-queue"
          id="437772"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419524</attachid>
            <date>2021-02-06 20:24:53 -0800</date>
            <delta_ts>2021-02-09 12:04:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221072-20210206202452.patch</filename>
            <type>text/plain</type>
            <size>71376</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyNDYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGQyMGQxZWJjMzE5NWFk
YzY0NzUxOTMzMDQ5ZTQxODczYmM2MmY5OS4uMDkxY2QzZDM1MGFlNThjNzhiMjkxNDY4ZTZjNWU4
MmQ0YzllN2YyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIxLTAyLTA2ICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3ludGhl
c2l6ZSByYW5nZSByZXNwb25zZXMgaWYgbmVlZGVkIGluIFdlYkNvcmVOU1VSTFNlc3Npb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTA3MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gd2UgbWFr
ZSBhIG1lZGlhIHJlcXVlc3Qgd2l0aCBhIFJhbmdlIEhUVFAgaGVhZGVyIGZpZWxkIGFuZCB0aGUg
c2VydmVyIGRvZXNuJ3QgcmVzcG9uZCB3aXRoIGEgMjA2IHdpdGggQ29udGVudC1SYW5nZSBoZWFk
ZXIgZmllbGQsCisgICAgICAgIHVudGlsIG5vdyB3ZSB3b3VsZCBqdXN0IGZhaWwgdG8gcGxheSB0
aGUgdmlkZW8uICBJbiBvcmRlciB0byBzdWNjZXNzZnVsbHkgcGxheSB0aGVzZSB2aWRlb3MsIEkg
aW50cm9kdWNlIHRoZSBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yIGNsYXNzLAorICAgICAgICB3aGlj
aCB3aWxsIHJlY2VpdmUgdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBmb3Igc3VjaCBhIHZpZGVvIGFu
ZCBmZWVkIHRoZSBkYXRhIGludG8gV2ViQ29yZU5TVVJMU2Vzc2lvbiBhcyB0aGUgcmVxdWVzdGVk
IHJhbmdlcyBhcmUgcmVjZWl2ZWQuCisgICAgICAgIFNlZWtpbmcgaXMgcHJvYmxlbWF0aWMsIGJ1
dCBhdCBsZWFzdCB3ZSB3aWxsIHRyeSBvdXIgYmVzdCB0byBwbGF5IHRoZSB2aWRlby4KKworICAg
ICAgICBJIGFkZGVkIEFQSSB0ZXN0cyB0aGF0IHRyeSB0byBwbGF5IGEgdmlkZW8gdGhhdCBkaWRu
J3QgcGxheSBiZWZvcmUgdXNpbmcgYSBzZXJ2ZXIgdGhhdCBkb2Vzbid0IHN1cHBvcnQgcmFuZ2Ug
cmVxdWVzdHMuICBNYW51YWwgdmVyaWZpY2F0aW9uIGlzIGFsc28gbmVjZXNzYXJ5LgorCisgICAg
ICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2U6OnNldENsaWVudCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvV2ViQ29yZUFWRlJlc291cmNlTG9hZGVyLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1SZXNvdXJjZU1lZGlhTG9hZGVyOjpjcmVhdGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUGFyc2VkUmVxdWVzdFJhbmdlLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpQYXJzZWRSZXF1ZXN0UmFuZ2U6OnBhcnNlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZFJlcXVlc3RSYW5nZS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlBhcnNlZFJlcXVlc3RSYW5nZTo6YmVnaW4gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFyc2VkUmVxdWVzdFJhbmdlOjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UGFyc2VkUmVxdWVzdFJhbmdlOjpQYXJzZWRSZXF1ZXN0UmFuZ2UpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY29jb2EvUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5oOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1JhbmdlUmVzcG9uc2VHZW5lcmF0b3IubW06IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6RGF0YTo6RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpEYXRhOjpUYXNr
RGF0YTo6VGFza0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6c3ludGhlc2l6ZWRSZXNwb25zZUZv
clJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlUmVzcG9uc2VHZW5lcmF0b3I6OnJlbW92
ZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6Z2l2ZVJl
c3BvbnNlVG9UYXNrSWZCeXRlc0luUmFuZ2VSZWNlaXZlZCk6CisgICAgICAgIChXZWJDb3JlOjpS
YW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpleHBlY3RlZENvbnRlbnRMZW5ndGhGcm9tRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpnaXZlUmVzcG9uc2VUb1Rh
c2tzV2l0aEZpbmlzaGVkUmFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlUmVzcG9uc2VH
ZW5lcmF0b3I6OndpbGxIYW5kbGVSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlUmVz
cG9uc2VHZW5lcmF0b3I6OndpbGxTeW50aGVzaXplUmFuZ2VSZXNwb25zZXMpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5oOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5tbToKKyAgICAgICAg
KC1bV2ViQ29yZU5TVVJMU2Vzc2lvbiByYW5nZVJlc3BvbnNlR2VuZXJhdG9yXSk6CisgICAgICAg
ICgtW1dlYkNvcmVOU1VSTFNlc3Npb24gZGF0YVRhc2tXaXRoVVJMOl0pOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjpkYXRhU2VudCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OnJlc3BvbnNl
UmVjZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNr
Q2xpZW50OjpzaG91bGRDYWNoZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVO
U1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6ZGF0YVJlY2VpdmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6cmVkaXJlY3RSZWNlaXZlZCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmFj
Y2Vzc0NvbnRyb2xDaGVja0ZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlTlNVUkxT
ZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmxvYWRGYWlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
Q29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQpOgorICAgICAgICAo
LVtXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgX3Jlc3RhcnRdKToKKyAgICAgICAgKC1bV2Vi
Q29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrIF9maW5pc2hdKToKKyAgICAgICAgKC1bV2ViQ29yZU5T
VVJMU2Vzc2lvbkRhdGFUYXNrIHJlc291cmNlOnNlbnRCeXRlczp0b3RhbEJ5dGVzVG9CZVNlbnQ6
XSk6CisgICAgICAgICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayByZXNvdXJjZTpyZWNl
aXZlZFJlc3BvbnNlOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXZWJDb3JlTlNV
UkxTZXNzaW9uRGF0YVRhc2sgcmVzb3VyY2U6c2hvdWxkQ2FjaGVSZXNwb25zZTpdKToKKyAgICAg
ICAgKC1bV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrIHJlc291cmNlOnJlY2VpdmVkRGF0YTps
ZW5ndGg6XSk6CisgICAgICAgICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayByZXNvdXJj
ZTpyZWNlaXZlZFJlZGlyZWN0OnJlcXVlc3Q6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAg
ICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayBfcmVzb3VyY2U6bG9hZEZpbmlzaGVkV2l0
aEVycm9yOm1ldHJpY3M6XSk6CisgICAgICAgICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFz
ayByZXNvdXJjZTphY2Nlc3NDb250cm9sQ2hlY2tGYWlsZWRXaXRoRXJyb3I6XSk6CisgICAgICAg
ICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayByZXNvdXJjZTpsb2FkRmFpbGVkV2l0aEVy
cm9yOl0pOgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgcmVzb3VyY2VG
aW5pc2hlZDptZXRyaWNzOl0pOgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRh
c2sgaW5pdFdpdGhTZXNzaW9uOmlkZW50aWZpZXI6VVJMOl0pOiBEZWxldGVkLgorCiAyMDIxLTAy
LTA2ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSUZD
XVtRdWlya10gS2VlcCB0aGUgcm9vdCBpbmxpbmUgYm94IGJhc2VsaW5lIGFuY2hvcmVkIGF0IDAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggMTZlMTViMTM3YzRiMjJmMTZkZWY5MDdkMTYzZmQyOTA4MDEwMzE3Zi4uY2U4
N2ZlODlmMWU4NTFlZjU1YWI0YmRkNWZmNmY1OGJmMDhjZjE4YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMyBAQAorMjAyMS0wMi0wNiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgorCisgICAgICAgIFN5bnRoZXNpemUgcmFuZ2UgcmVzcG9uc2VzIGlmIG5lZWRlZCBp
biBXZWJDb3JlTlNVUkxTZXNzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjEwNzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJl
bW90ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZTo6cmVx
dWVzdFJlc291cmNlKToKKwogMjAyMS0wMi0wNSAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGUu
Y29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI3MjMzNyk6IGNyYXNoIHVuZGVyIFdlYkNvcmU6
OlNwZWVjaFJlY29nbml6ZXI6OnNldEluYWN0aXZlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGFh
NTVmMGZhYTdkMDI5YTI4YmJiODVhMWE0M2UwNTNhZDM2M2I4MWMuLmVjY2Y5MWE3ZTAwNDZiMTJh
NTNlMWUxOTA5ZTEwNGU0YmE3MjU1YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRl
cnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtMTQwNyw2ICsx
NDA3LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRm
b3JtL25ldHdvcmsvTmV0d29ya2luZ0NvbnRleHQuaAogICAgIHBsYXRmb3JtL25ldHdvcmsvUGFy
c2VkQ29udGVudFJhbmdlLmgKICAgICBwbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZENvbnRlbnRUeXBl
LmgKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZFJlcXVlc3RSYW5nZS5oCiAgICAgcGxhdGZv
cm0vbmV0d29yay9Qcm90ZWN0aW9uU3BhY2UuaAogICAgIHBsYXRmb3JtL25ldHdvcmsvUHJvdGVj
dGlvblNwYWNlQmFzZS5oCiAgICAgcGxhdGZvcm0vbmV0d29yay9Qcm90ZWN0aW9uU3BhY2VIYXNo
LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKaW5kZXggYTVlMTVjODUwN2Y2OWU4MTQ4ZWU3N2IzODRkZTEzODFkYTc3
OTYwMC4uYzJlY2RiYzJkYzYzNTkxMzQ0ZWVjZGRhYTIxZjYzMDc2OTM2ODQ2NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKQEAgLTIxMTksNiArMjExOSw3IEBAIHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRl
Tm90aWZpZXIuY3BwCiBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5jcHAK
IHBsYXRmb3JtL25ldHdvcmsvUGFyc2VkQ29udGVudFJhbmdlLmNwcAogcGxhdGZvcm0vbmV0d29y
ay9QYXJzZWRDb250ZW50VHlwZS5jcHAKK3BsYXRmb3JtL25ldHdvcmsvUGFyc2VkUmVxdWVzdFJh
bmdlLmNwcAogcGxhdGZvcm0vbmV0d29yay9Qcm90ZWN0aW9uU3BhY2VCYXNlLmNwcAogcGxhdGZv
cm0vbmV0d29yay9Qcm94eVNlcnZlci5jcHAKIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VFcnJv
ckJhc2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIv
U291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCBkMmIzNDIzNjI1NWE0MTdmM2Fh
MTYzNjVlMTAzYmI3YzEyMjA3MjQ2Li5kMzE5ZTE4ZjEyOGFhOGVkNmY1YzBlY2RlZGJiOWU3ZTM2
M2Y1MTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTU3MCw2ICs1NzAsNyBAQCBwbGF0
Zm9ybS9uZXR3b3JrL2NvY29hL0NyZWRlbnRpYWxDb2NvYS5tbQogcGxhdGZvcm0vbmV0d29yay9j
b2NvYS9OZXR3b3JrTG9hZE1ldHJpY3MubW0KIHBsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29y
a1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0KIHBsYXRmb3JtL25ldHdvcmsvY29jb2EvUHJvdGVjdGlv
blNwYWNlQ29jb2EubW0KK3BsYXRmb3JtL25ldHdvcmsvY29jb2EvUmFuZ2VSZXNwb25zZUdlbmVy
YXRvci5tbQogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9SZXNvdXJjZVJlcXVlc3RDb2NvYS5tbQog
cGxhdGZvcm0vbmV0d29yay9jb2NvYS9SZXNvdXJjZVJlc3BvbnNlQ29jb2EubW0gQG5vLXVuaWZ5
IC8vIFVuc2FmZSB0byB1bmlmeSB1bnRpbCByZGFyOi8vcHJvYmxlbS80ODg1MzEzNyBpcyByZXNv
bHZlZAogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9uLm1tIEBuby11
bmlmeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGJkM2JjMTYwZDhiYWY0N2I0MTYyMjg4MDc3NjU2MDJiNWQyYjQ0OTIuLjBlMzk3
YWM2MmU3NTZkMWYzN2UzMWYxYmZmYWY3NmFjMWNhMTBjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE5NDEsNiArMTk0MSw4
IEBACiAJCTVDMkIxQUVDMjIzOTdFQkMwMEI5MUNGNyAvKiBSZXNvdXJjZVJlc3BvbnNlQ29jb2Eu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMUY3OEQw
QjFDMjU0MjJDMDAyNDU0NDYgLyogUmVzb3VyY2VSZXNwb25zZUNvY29hLm1tICovOyB9OwogCQk1
QzQzMDRCMTE5MUFDOTA4MDAwRTJCQzAgLyogRVhUU2hhZGVyVGV4dHVyZUxPRC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM0MzA0QUUxOTFBQzkwODAw
MEUyQkMwIC8qIEVYVFNoYWRlclRleHR1cmVMT0QuaCAqLzsgfTsKIAkJNUM0MzA0QjYxOTFBRUY0
NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM0MzA0QjQxOTFBRUY0NjAwMEUyQkMwIC8qIEpT
RVhUU2hhZGVyVGV4dHVyZUxPRC5oICovOyB9OworCQk1QzRBMEZENzI1QzM0MzUwMDBEOUVFOTcg
LyogUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUM0QTBGRDUyNUMzNDJDODAwRDlFRTk3IC8qIFJhbmdlUmVzcG9u
c2VHZW5lcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk1QzRBMEZEQTI1QzM0NDlBMDBEOUVFOTcgLyogUGFyc2VkUmVxdWVzdFJhbmdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzRBMEZEODI1
QzM0NDZDMDBEOUVFOTcgLyogUGFyc2VkUmVxdWVzdFJhbmdlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUM1M0RDRTEyNDQ2NURGQzAwQTkzMTI0
IC8qIEFwcGxlUGF5U2V0dXBGZWF0dXJlV2ViQ29yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM1M0RDQ0YyNDQ2NDQ5OTAwQTkzMTI0IC8qIEFwcGxl
UGF5U2V0dXBGZWF0dXJlV2ViQ29yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTVDNTNEQ0U3MjQ0NjhBRDIwMEE5MzEyNCAvKiBQYXltZW50SW5z
dGFsbG1lbnRDb25maWd1cmF0aW9uV2ViQ29yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUM1M0RDQ0UyNDQ2NDQ5OTAwQTkzMTI0IC8qIFBheW1lbnRJ
bnN0YWxsbWVudENvbmZpZ3VyYXRpb25XZWJDb3JlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUM1M0RDRUEyNDQ2OEZCNDAwQTkzMTI0IC8qIEFw
cGxlUGF5U2V0dXBXZWJDb3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1QzUzRENDQjI0NDY0NDk4MDBBOTMxMjQgLyogQXBwbGVQYXlTZXR1cFdlYkNv
cmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
OTQ4NSw2ICs5NDg3LDExIEBACiAJCTVDNDMwNEFGMTkxQUM5MDgwMDBFMkJDMCAvKiBFWFRTaGFk
ZXJUZXh0dXJlTE9ELmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFWFRTaGFkZXJUZXh0dXJl
TE9ELmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM0MzA0QjMxOTFBRUY0NjAw
MEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0VYVFNoYWRlclRleHR1cmVMT0QuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1QzQzMDRCNDE5MUFFRjQ2MDAwRTJCQzAgLyogSlNFWFRTaGFkZXJU
ZXh0dXJlTE9ELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUU2hhZGVy
VGV4dHVyZUxPRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzRBMEZEMzI1QzM0
MkM3MDBEOUVFOTcgLyogUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJhbmdlUmVzcG9uc2VHZW5lcmF0b3IubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEEwRkQ1MjVDMzQyQzgwMEQ5RUU5NyAvKiBSYW5n
ZVJlc3BvbnNlR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJh
bmdlUmVzcG9uc2VHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0
QTBGRDYyNUMzNDJEQjAwRDlFRTk3IC8qIENlcnRpZmljYXRlSW5mb0NvY29hLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ2VydGlmaWNhdGVJbmZvQ29jb2EubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEEwRkQ4MjVDMzQ0NkMwMEQ5RUU5NyAv
KiBQYXJzZWRSZXF1ZXN0UmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGFyc2VkUmVxdWVzdFJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEEw
RkQ5MjVDMzQ0NkQwMEQ5RUU5NyAvKiBQYXJzZWRSZXF1ZXN0UmFuZ2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFyc2VkUmVxdWVzdFJhbmdlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM1MzgxQUYxRDg3OTNFMDAwRTJFQkU2IC8qIFVSTFNl
YXJjaFBhcmFtcy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gVVJMU2VhcmNoUGFyYW1zLmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM1MzgxQjAxRDg3RDQ1NzAwRTJFQkU2
IC8qIFVSTFNlYXJjaFBhcmFtcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBVUkxTZWFyY2hQYXJhbXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
QzUzODFCMTFEODdENDU3MDBFMkVCRTYgLyogVVJMU2VhcmNoUGFyYW1zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVSTFNlYXJjaFBhcmFtcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjE4MjQsNiArMjE4MzEsOCBAQAogCQkJCUNEQ0Q0MUU2MUMzRERCMDkw
MDk2NUQ5OSAvKiBQYXJzZWRDb250ZW50UmFuZ2UuaCAqLywKIAkJCQk0NDc5NTgwMjE2NDNCNDdC
MDAxRTBBN0YgLyogUGFyc2VkQ29udGVudFR5cGUuY3BwICovLAogCQkJCTQ0Nzk1ODAzMTY0M0I0
N0IwMDFFMEE3RiAvKiBQYXJzZWRDb250ZW50VHlwZS5oICovLAorCQkJCTVDNEEwRkQ5MjVDMzQ0
NkQwMEQ5RUU5NyAvKiBQYXJzZWRSZXF1ZXN0UmFuZ2UuY3BwICovLAorCQkJCTVDNEEwRkQ4MjVD
MzQ0NkMwMEQ5RUU5NyAvKiBQYXJzZWRSZXF1ZXN0UmFuZ2UuaCAqLywKIAkJCQkzN0JBQUU1NzE5
ODBEMUREMDA1REZFNzEgLyogUHJvdGVjdGlvblNwYWNlLmggKi8sCiAJCQkJNTE0Qzc2NUYwQ0U5
MjNBMTAwN0VGM0NEIC8qIFByb3RlY3Rpb25TcGFjZUJhc2UuY3BwICovLAogCQkJCTUxNEM3NjYw
MENFOTIzQTEwMDdFRjNDRCAvKiBQcm90ZWN0aW9uU3BhY2VCYXNlLmggKi8sCkBAIC0yMjkwNiw2
ICsyMjkxNSw3IEBACiAJCTdFN0RFMUZFMTk1Q0VGMkQwMDM1MzYzQiAvKiBjb2NvYSAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNUM0QTBGRDYyNUMzNDJE
QjAwRDlFRTk3IC8qIENlcnRpZmljYXRlSW5mb0NvY29hLm1tICovLAogCQkJCTUxRDEyNDhDMUU3
MzY0NTYwMDJCMjgyMCAvKiBDb29raWVDb2NvYS5tbSAqLywKIAkJCQk1MTIwQkJBRDFGMUNFNzcw
MDBFRkVCRjEgLyogQ29va2llU3RvcmFnZU9ic2VydmVyLmggKi8sCiAJCQkJNTEyMEJCQUMxRjFD
RTc3MDAwRUZFQkYxIC8qIENvb2tpZVN0b3JhZ2VPYnNlcnZlci5tbSAqLywKQEAgLTIyOTE2LDYg
KzIyOTI2LDggQEAKIAkJCQk1MUQxMjQ4QTFFNzM2MjVDMDAyQjI4MjAgLyogTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uQ29jb2EubW0gKi8sCiAJCQkJMzcyQURBMzcxOTdGNDdCOTAwRkM1MDFFIC8qIFBy
b3RlY3Rpb25TcGFjZUNvY29hLmggKi8sCiAJCQkJMzcyQURBMzkxOTdGNjg3NjAwRkM1MDFFIC8q
IFByb3RlY3Rpb25TcGFjZUNvY29hLm1tICovLAorCQkJCTVDNEEwRkQ1MjVDMzQyQzgwMEQ5RUU5
NyAvKiBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yLmggKi8sCisJCQkJNUM0QTBGRDMyNUMzNDJDNzAw
RDlFRTk3IC8qIFJhbmdlUmVzcG9uc2VHZW5lcmF0b3IubW0gKi8sCiAJCQkJN0U3REUxRkMxOTVD
RUYyNjAwMzUzNjNCIC8qIFJlc291cmNlUmVxdWVzdENvY29hLm1tICovLAogCQkJCUExRjc4RDBC
MUMyNTQyMkMwMDI0NTQ0NiAvKiBSZXNvdXJjZVJlc3BvbnNlQ29jb2EubW0gKi8sCiAJCQkJQ0Qy
MjVDMEExQzQ2RkJGNDAwMTQwNzYxIC8qIFdlYkNvcmVOU1VSTFNlc3Npb24uaCAqLywKQEAgLTMz
OTc1LDYgKzMzOTg3LDcgQEAKIAkJCQlBMTg4OTBBRjFBQTEzRjI1MDAyNkMzMDEgLyogUGFyZW50
YWxDb250cm9sc0NvbnRlbnRGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEQ0Q0MUU4MUMz
RERCMEEwMDk2NUQ5OSAvKiBQYXJzZWRDb250ZW50UmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ0Nzk1ODA0MTY0M0I0OUEwMDFFMEE3RiAvKiBQYXJzZWRDb250ZW50VHlwZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNUM0QTBGREEyNUMzNDQ5QTAwRDlFRTk3IC8qIFBhcnNlZFJlcXVlc3RSYW5n
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM2RDVBMjMxOTNFOEUwQzAwQ0U0Q0FCIC8qIFBhcnNp
bmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzRENBMTI1MUYxMkQwMDNFRjI2
OSAvKiBQYXNzd29yZElucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEIyNzA4QzcwQUYx
OUVFNDAwNjUxMjdGIC8qIFBhc3RlYm9hcmQuaCBpbiBIZWFkZXJzICovLApAQCAtMzQxNzgsNiAr
MzQxOTEsNyBAQAogCQkJCTkzRjE5OTE4MDgyNDVFNTkwMDFFOUFCQyAvKiBSYW5nZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTNEOUQ1M0MwREEyN0UxODAwNzcyMTZDIC8qIFJhbmdlQm91bmRhcnlQ
b2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQ0UxMjUxRjEyRDAwM0VGMjY5IC8qIFJh
bmdlSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1QzRBMEZENzI1QzM0MzUwMDBEOUVF
OTcgLyogUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU4NEU5
RTExNzY2OEJGMTAwODE1QjY4IC8qIFJhc3RlclNoYXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
ODREODI3QzExRDMzM0VEMDA5NzI5OTAgLyogUmF3RGF0YURvY3VtZW50UGFyc2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVhZGFibGVCeXRlU3Ry
ZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybU1lZGlhUmVzb3VyY2VM
b2FkZXIuaAppbmRleCA1N2JmZThhY2Q2Mjg1ZmViOWIyZWI4YjIyMmEyYjE0MDlhMjEwMTYwLi4z
ZWQ0ZTA1YzQzOTRkZmY2M2FlNWZjNmJhMWVmMWE4MDQyNTQzY2I3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybU1lZGlhUmVz
b3VyY2VMb2FkZXIuaApAQCAtNDEsNyArNDEsNyBAQCBjbGFzcyBSZXNvdXJjZUVycm9yOwogY2xh
c3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKIAotY2xhc3MgUGxh
dGZvcm1NZWRpYVJlc291cmNlQ2xpZW50IHsKK2NsYXNzIFBsYXRmb3JtTWVkaWFSZXNvdXJjZUNs
aWVudCA6IHB1YmxpYyBSZWZDb3VudGVkPFBsYXRmb3JtTWVkaWFSZXNvdXJjZUNsaWVudD4gewog
cHVibGljOgogICAgIHZpcnR1YWwgflBsYXRmb3JtTWVkaWFSZXNvdXJjZUNsaWVudCgpID0gZGVm
YXVsdDsKIApAQCAtODEsMTEgKzgxLDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3Rv
cCgpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBkaWRQYXNzQWNjZXNzQ29udHJvbENoZWNrKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZvaWQgc2V0Q2xpZW50KHN0ZDo6dW5pcXVlX3B0
cjxQbGF0Zm9ybU1lZGlhUmVzb3VyY2VDbGllbnQ+JiYgY2xpZW50KSB7IG1fY2xpZW50ID0gV1RG
TW92ZShjbGllbnQpOyB9CisgICAgdm9pZCBzZXRDbGllbnQoUmVmUHRyPFBsYXRmb3JtTWVkaWFS
ZXNvdXJjZUNsaWVudD4mJiBjbGllbnQpIHsgbV9jbGllbnQgPSBXVEZNb3ZlKGNsaWVudCk7IH0K
ICAgICBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xp
ZW50LmdldCgpOyB9CiAKIHByb3RlY3RlZDoKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1N
ZWRpYVJlc291cmNlQ2xpZW50PiBtX2NsaWVudDsKKyAgICBSZWZQdHI8UGxhdGZvcm1NZWRpYVJl
c291cmNlQ2xpZW50PiBtX2NsaWVudDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL1dlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1dlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5tbQpp
bmRleCBjODU1ZGUwODhiNmQ5NDRkYTZmYzQ1NTIyZmZiYjJmNTAyOGM2MjFjLi40ZDVmMzU4MGVi
YWQzMGJmMDBjMzY5ZGEwMTVmMDM4ZTYwZmU1YmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9XZWJDb3JlQVZGUmVzb3VyY2VM
b2FkZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvV2ViQ29yZUFWRlJlc291cmNlTG9hZGVyLm1tCkBAIC0xNzAsNyArMTcwLDcgQEAg
V2Vha1B0cjxQbGF0Zm9ybVJlc291cmNlTWVkaWFMb2FkZXI+IFBsYXRmb3JtUmVzb3VyY2VNZWRp
YUxvYWRlcjo6Y3JlYXRlKFdlYkNvcmUKICAgICBpZiAoIXJlc291cmNlKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICBhdXRvKiByZXNvdXJjZVBvaW50ZXIgPSByZXNvdXJjZS5nZXQoKTsK
LSAgICBhdXRvIGNsaWVudCA9IHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVJlc291cmNlTWVkaWFM
b2FkZXI+KG5ldyBQbGF0Zm9ybVJlc291cmNlTWVkaWFMb2FkZXIgeyBwYXJlbnQsIHJlc291cmNl
LnJlbGVhc2VOb25OdWxsKCkgfSk7CisgICAgYXV0byBjbGllbnQgPSBhZG9wdFJlZigqbmV3IFBs
YXRmb3JtUmVzb3VyY2VNZWRpYUxvYWRlciB7IHBhcmVudCwgcmVzb3VyY2UucmVsZWFzZU5vbk51
bGwoKSB9KTsKICAgICBhdXRvIHJlc3VsdCA9IG1ha2VXZWFrUHRyKGNsaWVudC5nZXQoKSk7CiAK
ICAgICByZXNvdXJjZVBvaW50ZXItPnNldENsaWVudChXVEZNb3ZlKGNsaWVudCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdl
YlNvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcAppbmRleCBjODQ0YmUyZGQzNzI3
ZWYyNzY0YjcyNTcwNmQyMjA2MjY3YmViNDk3Li5lNzlmODY1ZDg4MDI5ODg0MDE0MTE3MDFkMzdm
NTc2OGQyNWFmYmViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVy
LmNwcApAQCAtNjk5LDcgKzY5OSw3IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY01ha2VSZXF1
ZXN0KFdlYktpdFdlYlNyYyogc3JjLCBEYXRhTXV0ZXg8V2ViS2l0V2ViU3JjUHJpCiAgICAgICAg
IFBsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlcjo6TG9hZE9wdGlvbnMgbG9hZE9wdGlvbnMgPSAw
OwogICAgICAgICBtZW1iZXJzLT5yZXNvdXJjZSA9IG1lbWJlcnMtPmxvYWRlci0+cmVxdWVzdFJl
c291cmNlKFJlc291cmNlUmVxdWVzdChyZXF1ZXN0KSwgbG9hZE9wdGlvbnMpOwogICAgICAgICBp
ZiAobWVtYmVycy0+cmVzb3VyY2UpIHsKLSAgICAgICAgICAgIG1lbWJlcnMtPnJlc291cmNlLT5z
ZXRDbGllbnQobWFrZVVuaXF1ZTxDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudD4ocHJvdGVj
dG9yLmdldCgpLCBSZXNvdXJjZVJlcXVlc3QocmVxdWVzdCksIHJlcXVlc3ROdW1iZXIpKTsKKyAg
ICAgICAgICAgIG1lbWJlcnMtPnJlc291cmNlLT5zZXRDbGllbnQoYWRvcHRSZWYoKm5ldyBDYWNo
ZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudChwcm90ZWN0b3IuZ2V0KCksIFJlc291cmNlUmVxdWVz
dChyZXF1ZXN0KSwgcmVxdWVzdE51bWJlcikpKTsKICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpF
Q1QocHJvdGVjdG9yLmdldCgpLCAiU3RhcnRlZCByZXF1ZXN0IFIldSIsIHJlcXVlc3ROdW1iZXIp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChwcm90ZWN0
b3IuZ2V0KCksICJGYWlsZWQgdG8gc2V0dXAgc3RyZWFtaW5nIGNsaWVudCB0byBoYW5kbGUgUiV1
IiwgcmVxdWVzdE51bWJlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1BhcnNlZFJlcXVlc3RSYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1BhcnNlZFJlcXVlc3RSYW5nZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmQ5YWNmYTlhZjFhNmFi
YjA5YWM1ZWUyMTFiODcyZDg1MWIxNDlhNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUGFyc2VkUmVxdWVzdFJhbmdlLmNwcApAQCAtMCwwICsxLDY1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYXJzZWRSZXF1ZXN0UmFuZ2UuaCIKKworI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK09wdGlv
bmFsPFBhcnNlZFJlcXVlc3RSYW5nZT4gUGFyc2VkUmVxdWVzdFJhbmdlOjpwYXJzZShjb25zdCBT
dHJpbmcmIGlucHV0KQoreworICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3
MjMzI3NlY3Rpb24tMi4xIGJ1dCBhc3N1bWluZyB0aGVyZSB3aWxsIGFsd2F5cyBiZSBhIGJlZ2lu
IGFuZCBhbiBlbmQgb3IgcGFyc2luZyB3aWxsIGZhaWwKKyAgICBpZiAoIWlucHV0LnN0YXJ0c1dp
dGgoImJ5dGVzPSJfcykpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBzaXpl
X3QgYmVnaW4geyAwIH07CisgICAgc2l6ZV90IGVuZCB7IDAgfTsKKyAgICBzaXplX3QgcmFuZ2VC
ZWdpblBvc2l0aW9uID0gNjsKKyAgICBzaXplX3QgZGFzaFBvc2l0aW9uID0gaW5wdXQuZmluZCgn
LScsIHJhbmdlQmVnaW5Qb3NpdGlvbik7CisgICAgaWYgKGRhc2hQb3NpdGlvbiA9PSBub3RGb3Vu
ZCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIC8vIEZJWE1FOiBBZGQgU3Ry
aW5nVmlldy50b1VJbnQ2NFN0cmljdCB0byBhdm9pZCB0aGVzZSB1bm5lY2Vzc2FyeSBTdHJpbmcg
Y29waWVzLgorICAgIC8vIFNhbWUgaW4gUGFyc2VkQ29udGVudFJhbmdlLgorICAgIGJvb2wgb2sg
PSB0cnVlOworICAgIFN0cmluZyBiZWdpblN0cmluZyA9IGlucHV0LnN1YnN0cmluZyhyYW5nZUJl
Z2luUG9zaXRpb24sIGRhc2hQb3NpdGlvbiAtIHJhbmdlQmVnaW5Qb3NpdGlvbik7CisgICAgYmVn
aW4gPSBiZWdpblN0cmluZy50b1VJbnQ2NFN0cmljdCgmb2spOworICAgIGlmICghb2spCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBTdHJpbmcgZW5kU3RyaW5nID0gaW5wdXQu
c3Vic3RyaW5nKGRhc2hQb3NpdGlvbiArIDEpOworICAgIGVuZCA9IGVuZFN0cmluZy50b1VJbnQ2
NFN0cmljdCgmb2spOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisKKyAgICBpZiAoYmVnaW4gPiBlbmQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
KyAgICByZXR1cm4ge3sgYmVnaW4sIGVuZCB9fTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QYXJzZWRSZXF1ZXN0UmFuZ2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGFyc2VkUmVxdWVzdFJhbmdlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OGFiZGI2M2VhZDVlZWYxM2Q5Mjg1NTA0OWY2ZjEzZmU4ZTE2OWI1ZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGFyc2VkUmVxdWVzdFJhbmdlLmgK
QEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL0hhc2hUcmFpdHMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQYXJzZWRS
ZXF1ZXN0UmFuZ2UgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBPcHRpb25h
bDxQYXJzZWRSZXF1ZXN0UmFuZ2U+IHBhcnNlKGNvbnN0IFN0cmluZyYpOworCisgICAgc2l6ZV90
IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbjsgfQorICAgIHNpemVfdCBlbmQoKSBjb25z
dCB7IHJldHVybiBtX2VuZDsgfQorCitwcml2YXRlOgorICAgIFBhcnNlZFJlcXVlc3RSYW5nZShz
aXplX3QgYmVnaW4sIHNpemVfdCBlbmQpCisgICAgICAgIDogbV9iZWdpbihiZWdpbikKKyAgICAg
ICAgLCBtX2VuZChlbmQpIHsgfQorCisgICAgc2l6ZV90IG1fYmVnaW4geyAwIH07CisgICAgc2l6
ZV90IG1fZW5kIHsgMCB9OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jb2NvYS9SYW5nZVJlc3BvbnNlR2VuZXJhdG9yLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1JhbmdlUmVzcG9uc2VHZW5lcmF0b3IuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iZjI4YmE3NTFmN2ZkMjUyYmVkM2YyNDBiMTI3NmFhMTU4MTFlN2MyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9SYW5nZVJl
c3BvbnNlR2VuZXJhdG9yLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8d3RmL1VSTEhhc2guaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5o
PgorCitPQkpDX0NMQVNTIE5TVVJMUmVxdWVzdDsKK09CSkNfQ0xBU1MgV2ViQ29yZU5TVVJMU2Vz
c2lvbkRhdGFUYXNrOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBhcnNlZFJlcXVl
c3RSYW5nZTsKK2NsYXNzIFBsYXRmb3JtTWVkaWFSZXNvdXJjZTsKK2NsYXNzIFJlc291cmNlUmVz
cG9uc2U7CisKK2NsYXNzIFJhbmdlUmVzcG9uc2VHZW5lcmF0b3IgOiBwdWJsaWMgQ2FuTWFrZVdl
YWtQdHI8UmFuZ2VSZXNwb25zZUdlbmVyYXRvcj4geworcHVibGljOgorICAgIFJhbmdlUmVzcG9u
c2VHZW5lcmF0b3IoKTsKKyAgICB+UmFuZ2VSZXNwb25zZUdlbmVyYXRvcigpOworCisgICAgYm9v
bCB3aWxsU3ludGhlc2l6ZVJhbmdlUmVzcG9uc2VzKFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFz
ayAqLCBQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Cisg
ICAgYm9vbCB3aWxsSGFuZGxlUmVxdWVzdChXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgKiwg
TlNVUkxSZXF1ZXN0ICopOworCitwcml2YXRlOgorICAgIHN0cnVjdCBEYXRhOworICAgIHZvaWQg
Z2l2ZVJlc3BvbnNlVG9UYXNrc1dpdGhGaW5pc2hlZFJhbmdlcyhEYXRhJik7CisgICAgdm9pZCBn
aXZlUmVzcG9uc2VUb1Rhc2tJZkJ5dGVzSW5SYW5nZVJlY2VpdmVkKFdlYkNvcmVOU1VSTFNlc3Np
b25EYXRhVGFzayAqLCBjb25zdCBQYXJzZWRSZXF1ZXN0UmFuZ2UmLCBPcHRpb25hbDxzaXplX3Q+
IGV4cGVjdGVkQ29udGVudExlbmd0aCwgY29uc3QgRGF0YSYpOworICAgIHN0YXRpYyBPcHRpb25h
bDxzaXplX3Q+IGV4cGVjdGVkQ29udGVudExlbmd0aEZyb21EYXRhKGNvbnN0IERhdGEmKTsKKyAg
ICB2b2lkIHJlbW92ZVRhc2soV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICopOworCisgICAg
SGFzaE1hcDxVUkwsIHN0ZDo6dW5pcXVlX3B0cjxEYXRhPj4gbV9tYXA7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NvY29hL1JhbmdlUmVzcG9uc2VHZW5lcmF0b3IubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NvY29hL1JhbmdlUmVzcG9uc2VHZW5lcmF0b3IubW0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NzFjOWJkMjlkOWQxYjRiMDM5MGMxMjNkMTYyZjExMTllZmJlOTk4NQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvUmFuZ2VSZXNwb25zZUdl
bmVyYXRvci5tbQpAQCAtMCwwICsxLDI4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5oIgorCisjaW1wb3J0ICJOZXR3
b3JrTG9hZE1ldHJpY3MuaCIKKyNpbXBvcnQgIlBhcnNlZFJlcXVlc3RSYW5nZS5oIgorI2ltcG9y
dCAiUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmgiCisjaW1wb3J0ICJSZXNvdXJjZVJlc3Bv
bnNlLmgiCisjaW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKKyNpbXBvcnQgIldlYkNvcmVOU1VSTFNl
c3Npb24uaCIKKyNpbXBvcnQgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+CisjaW1wb3J0IDx3
dGYvRmFzdE1hbGxvYy5oPgorI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpEYXRh
IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBEYXRhKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc291
cmNlKQorICAgICAgICA6IGJ1ZmZlcihTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpKQorICAgICAgICAs
IG9yaWdpbmFsUmVzcG9uc2UocmVzcG9uc2UpCisgICAgICAgICwgcmVzb3VyY2UoJnJlc291cmNl
KSB7IH0KKworICAgIHN0cnVjdCBUYXNrRGF0YSA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxUYXNr
RGF0YT4geworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFRhc2tEYXRhKFBhcnNlZFJlcXVlc3RSYW5nZSYmIHJhbmdlKQorICAgICAgICAgICAg
OiByYW5nZShXVEZNb3ZlKHJhbmdlKSkKKyAgICAgICAgICAgICwgbmV4dEJ5dGVUb0dpdmVCdWZm
ZXJJbmRleChyYW5nZS5iZWdpbigpKSB7IH0KKworICAgICAgICBQYXJzZWRSZXF1ZXN0UmFuZ2Ug
cmFuZ2U7CisgICAgICAgIHNpemVfdCBuZXh0Qnl0ZVRvR2l2ZUJ1ZmZlckluZGV4IHsgMCB9Owor
ICAgICAgICBib29sIHN5bnRoZXNpemVkUmVzcG9uc2UgeyBmYWxzZSB9OworICAgIH07CisgICAg
CisgICAgSGFzaE1hcDxSZXRhaW5QdHI8V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrPiwgc3Rk
Ojp1bmlxdWVfcHRyPFRhc2tEYXRhPj4gdGFza0RhdGE7CisgICAgUmVmPFNoYXJlZEJ1ZmZlcj4g
YnVmZmVyOworICAgIFJlc291cmNlUmVzcG9uc2Ugb3JpZ2luYWxSZXNwb25zZTsKKyAgICBlbnVt
IGNsYXNzIFN1Y2Nlc3NmdWxseUZpbmlzaGVkTG9hZGluZyA6IGJvb2wgeyBObywgWWVzIH0gc3Vj
Y2Vzc2Z1bGx5RmluaXNoZWRMb2FkaW5nIHsgU3VjY2Vzc2Z1bGx5RmluaXNoZWRMb2FkaW5nOjpO
byB9OworICAgIFJlZlB0cjxQbGF0Zm9ybU1lZGlhUmVzb3VyY2U+IHJlc291cmNlOworfTsKKwor
UmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6UmFuZ2VSZXNwb25zZUdlbmVyYXRvcigpID0gZGVmYXVs
dDsKK1JhbmdlUmVzcG9uc2VHZW5lcmF0b3I6On5SYW5nZVJlc3BvbnNlR2VuZXJhdG9yKCkgPSBk
ZWZhdWx0OworCitzdGF0aWMgUmVzb3VyY2VSZXNwb25zZSBzeW50aGVzaXplZFJlc3BvbnNlRm9y
UmFuZ2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgb3JpZ2luYWxSZXNwb25zZSwgY29uc3QgUGFy
c2VkUmVxdWVzdFJhbmdlJiBwYXJzZWRSZXF1ZXN0UmFuZ2UsIE9wdGlvbmFsPHNpemVfdD4gdG90
YWxDb250ZW50TGVuZ3RoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgYXV0
byBiZWdpbiA9IHBhcnNlZFJlcXVlc3RSYW5nZS5iZWdpbigpOworICAgIGF1dG8gZW5kID0gcGFy
c2VkUmVxdWVzdFJhbmdlLmVuZCgpOworCisgICAgYXV0byBuZXdDb250ZW50UmFuZ2UgPSBtYWtl
U3RyaW5nKCJieXRlcyAiLCBiZWdpbiwgIi0iLCBlbmQsICIvIiwgKHRvdGFsQ29udGVudExlbmd0
aCA/IG1ha2VTdHJpbmcoKnRvdGFsQ29udGVudExlbmd0aCkgOiAiKiIpKTsKKyAgICBhdXRvIG5l
d0NvbnRlbnRMZW5ndGggPSBtYWtlU3RyaW5nKGVuZCAtIGJlZ2luICsgMSk7CisKKyAgICBSZXNv
dXJjZVJlc3BvbnNlIG5ld1Jlc3BvbnNlID0gb3JpZ2luYWxSZXNwb25zZTsKKyAgICBuZXdSZXNw
b25zZS5zZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRSYW5nZSwgbmV3
Q29udGVudFJhbmdlKTsKKyAgICBuZXdSZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhl
YWRlck5hbWU6OkNvbnRlbnRMZW5ndGgsIG5ld0NvbnRlbnRMZW5ndGgpOworICAgIGNvbnN0ZXhw
ciBhdXRvIHBhcnRpYWxDb250ZW50ID0gMjA2OworICAgIG5ld1Jlc3BvbnNlLnNldEhUVFBTdGF0
dXNDb2RlKHBhcnRpYWxDb250ZW50KTsKKworICAgIHJldHVybiBuZXdSZXNwb25zZTsKK30KKwor
dm9pZCBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpyZW1vdmVUYXNrKFdlYkNvcmVOU1VSTFNlc3Np
b25EYXRhVGFzayAqdGFzaykKK3sKKyAgICBjYWxsT25NYWluVGhyZWFkKFt0YXNrID0gcmV0YWlu
UHRyKHRhc2spLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0geworICAgICAgICBpZiAo
IXdlYWtUaGlzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvKiBkYXRhID0gd2Vh
a1RoaXMtPm1fbWFwLmdldCh0YXNrLmdldCgpLm9yaWdpbmFsUmVxdWVzdC5VUkwpOworICAgICAg
ICBpZiAoIWRhdGEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRhdGEtPnRhc2tEYXRh
LnJlbW92ZSh0YXNrKTsKKyAgICB9KTsKK30KKwordm9pZCBSYW5nZVJlc3BvbnNlR2VuZXJhdG9y
OjpnaXZlUmVzcG9uc2VUb1Rhc2tJZkJ5dGVzSW5SYW5nZVJlY2VpdmVkKFdlYkNvcmVOU1VSTFNl
c3Npb25EYXRhVGFzayAqdGFzaywgY29uc3QgUGFyc2VkUmVxdWVzdFJhbmdlJiByYW5nZSwgT3B0
aW9uYWw8c2l6ZV90PiBleHBlY3RlZENvbnRlbnRMZW5ndGgsIGNvbnN0IERhdGEmIGRhdGEpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBhdXRvIGJ1ZmZlciA9IGRhdGEuYnVm
ZmVyOworICAgIGF1dG8gYnVmZmVyU2l6ZSA9IGJ1ZmZlci0+c2l6ZSgpOworCisgICAgaWYgKGJ1
ZmZlclNpemUgPCByYW5nZS5iZWdpbigpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0
byogdGFza0RhdGEgPSBkYXRhLnRhc2tEYXRhLmdldCh0YXNrKTsKKyAgICBpZiAoIXRhc2tEYXRh
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0byBnaXZlQnl0ZXNUb1Rhc2sgPSBbdGFz
ayA9IHJldGFpblB0cih0YXNrKSwgYnVmZmVyLCB0YXNrRGF0YSA9IG1ha2VXZWFrUHRyKCp0YXNr
RGF0YSksIGdlbmVyYXRvciA9IG1ha2VXZWFrUHRyKCp0aGlzKV0geworICAgICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgICAgICBpZiAoIXRhc2tEYXRhKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBhdXRvJiByYW5nZSA9IHRhc2tEYXRhLT5yYW5nZTsKKyAgICAgICAgYXV0
byYgYnl0ZUluZGV4ID0gdGFza0RhdGEtPm5leHRCeXRlVG9HaXZlQnVmZmVySW5kZXg7CisgICAg
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpZiAoYnl0ZUluZGV4ID49IGJ1ZmZlci0+
c2l6ZSgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYXV0byBidWZmZXJW
aWV3ID0gYnVmZmVyLT5nZXRTb21lRGF0YShieXRlSW5kZXgpOworICAgICAgICAgICAgaWYgKCFi
dWZmZXJWaWV3LnNpemUoKSB8fCBieXRlSW5kZXggPiByYW5nZS5lbmQoKSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgc2l6ZV90IGJ5dGVzRnJvbVRoaXNWaWV3VG9EZWxp
dmVyID0gc3RkOjptaW4oYnVmZmVyVmlldy5zaXplKCksIHJhbmdlLmVuZCgpIC0gYnl0ZUluZGV4
ICsgMSk7CisgICAgICAgICAgICBieXRlSW5kZXggKz0gYnl0ZXNGcm9tVGhpc1ZpZXdUb0RlbGl2
ZXI7CisgICAgICAgICAgICBbdGFzayByZXNvdXJjZTpudWxscHRyIHJlY2VpdmVkRGF0YTpidWZm
ZXJWaWV3LmRhdGEoKSBsZW5ndGg6Ynl0ZXNGcm9tVGhpc1ZpZXdUb0RlbGl2ZXJdOworICAgICAg
ICB9CisgICAgICAgIGlmIChieXRlSW5kZXggPj0gcmFuZ2UuZW5kKCkpIHsKKyAgICAgICAgICAg
IFt0YXNrIHJlc291cmNlRmluaXNoZWQ6bnVsbHB0ciBtZXRyaWNzOk5ldHdvcmtMb2FkTWV0cmlj
cyB7IH1dOworICAgICAgICAgICAgaWYgKGdlbmVyYXRvcikKKyAgICAgICAgICAgICAgICBnZW5l
cmF0b3ItPnJlbW92ZVRhc2sodGFzay5nZXQoKSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
aWYgKCFzdGQ6OmV4Y2hhbmdlKHRhc2tEYXRhLT5zeW50aGVzaXplZFJlc3BvbnNlLCB0cnVlKSkg
eworICAgICAgICBhdXRvIHJlc3BvbnNlID0gc3ludGhlc2l6ZWRSZXNwb25zZUZvclJhbmdlKGRh
dGEub3JpZ2luYWxSZXNwb25zZSwgcmFuZ2UsIGV4cGVjdGVkQ29udGVudExlbmd0aCk7CisgICAg
ICAgIFt0YXNrIHJlc291cmNlOm51bGxwdHIgcmVjZWl2ZWRSZXNwb25zZTpyZXNwb25zZSBjb21w
bGV0aW9uSGFuZGxlcjpbZ2l2ZUJ5dGVzVG9UYXNrID0gV1RGTW92ZShnaXZlQnl0ZXNUb1Rhc2sp
XSAoV2ViQ29yZTo6U2hvdWxkQ29udGludWVQb2xpY3lDaGVjayBzaG91bGRDb250aW51ZSkgewor
ICAgICAgICAgICAgaWYgKHNob3VsZENvbnRpbnVlID09IFNob3VsZENvbnRpbnVlUG9saWN5Q2hl
Y2s6OlllcykKKyAgICAgICAgICAgICAgICBnaXZlQnl0ZXNUb1Rhc2soKTsKKyAgICAgICAgfV07
CisgICAgfSBlbHNlCisgICAgICAgIGdpdmVCeXRlc1RvVGFzaygpOworfQorCitPcHRpb25hbDxz
aXplX3Q+IFJhbmdlUmVzcG9uc2VHZW5lcmF0b3I6OmV4cGVjdGVkQ29udGVudExlbmd0aEZyb21E
YXRhKGNvbnN0IERhdGEmIGRhdGEpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBpZiAoZGF0YS5zdWNjZXNzZnVsbHlGaW5pc2hlZExvYWRpbmcgPT0gRGF0YTo6U3VjY2Vzc2Z1
bGx5RmluaXNoZWRMb2FkaW5nOjpZZXMpCisgICAgICAgIHJldHVybiBkYXRhLmJ1ZmZlci0+c2l6
ZSgpOworCisgICAgLy8gRklYTUU6IFJlc291cmNlUmVzcG9uc2VCYXNlOjpleHBlY3RlZENvbnRl
bnRMZW5ndGgoKSBzaG91bGQgcmV0dXJuIE9wdGlvbmFsPHNpemVfdD4gaW5zdGVhZCBvZiB1cyBk
b2luZyB0aGlzIGNoZWNrIGhlcmUuCisgICAgYXV0byBleHBlY3RlZENvbnRlbnRMZW5ndGggPSBk
YXRhLm9yaWdpbmFsUmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCk7CisgICAgaWYgKGV4
cGVjdGVkQ29udGVudExlbmd0aCA9PSBOU1VSTFJlc3BvbnNlVW5rbm93bkxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gZXhwZWN0ZWRDb250ZW50TGVuZ3Ro
OworfQorCit2b2lkIFJhbmdlUmVzcG9uc2VHZW5lcmF0b3I6OmdpdmVSZXNwb25zZVRvVGFza3NX
aXRoRmluaXNoZWRSYW5nZXMoRGF0YSYgZGF0YSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIGF1dG8gZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gZXhwZWN0ZWRDb250ZW50TGVu
Z3RoRnJvbURhdGEoZGF0YSk7CisKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBkYXRhLnRhc2tEYXRh
KQorICAgICAgICBnaXZlUmVzcG9uc2VUb1Rhc2tJZkJ5dGVzSW5SYW5nZVJlY2VpdmVkKHBhaXIu
a2V5LmdldCgpLCBwYWlyLnZhbHVlLT5yYW5nZSwgZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCBkYXRh
KTsKK30KKworYm9vbCBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjp3aWxsSGFuZGxlUmVxdWVzdChX
ZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgKnRhc2ssIE5TVVJMUmVxdWVzdCAqcmVxdWVzdCkK
K3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGF1dG8qIGRhdGEgPSBtX21hcC5n
ZXQocmVxdWVzdC5VUkwpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgYXV0byByYW5nZSA9IFBhcnNlZFJlcXVlc3RSYW5nZTo6cGFyc2UoW3JlcXVlc3QgdmFs
dWVGb3JIVFRQSGVhZGVyRmllbGQ6QCJSYW5nZSJdKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGV4cGVjdGVkQ29udGVudExlbmd0aCA9IGV4cGVj
dGVkQ29udGVudExlbmd0aEZyb21EYXRhKCpkYXRhKTsKKyAgICBkYXRhLT50YXNrRGF0YS5hZGQo
dGFzaywgbWFrZVVuaXF1ZTxEYXRhOjpUYXNrRGF0YT4oV1RGTW92ZSgqcmFuZ2UpKSk7CisgICAg
Z2l2ZVJlc3BvbnNlVG9UYXNrSWZCeXRlc0luUmFuZ2VSZWNlaXZlZCh0YXNrLCAqcmFuZ2UsIGV4
cGVjdGVkQ29udGVudExlbmd0aCwgKmRhdGEpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgUmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6d2lsbFN5bnRoZXNpemVSYW5nZVJlc3BvbnNlcyhX
ZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgKnRhc2ssIFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYg
cmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgTlNVUkxSZXF1ZXN0ICpvcmlnaW5hbFJlcXVlc3QgPSB0
YXNrLm9yaWdpbmFsUmVxdWVzdDsKKyAgICBpZiAoIW9yaWdpbmFsUmVxdWVzdC5VUkwpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAhPSAy
MDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXJlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFJhbmdlKS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGF1dG8gcGFyc2VkUmVxdWVzdFJhbmdlID0gUGFyc2VkUmVxdWVz
dFJhbmdlOjpwYXJzZShbb3JpZ2luYWxSZXF1ZXN0IHZhbHVlRm9ySFRUUEhlYWRlckZpZWxkOkAi
UmFuZ2UiXSk7CisgICAgaWYgKCFwYXJzZWRSZXF1ZXN0UmFuZ2UpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGNsYXNzIENsaWVudCA6IHB1YmxpYyBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VD
bGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgQ2xpZW50KFJhbmdlUmVzcG9uc2VHZW5lcmF0
b3ImIGdlbmVyYXRvciwgVVJMJiYgdXJsKQorICAgICAgICAgICAgOiBtX2dlbmVyYXRvcihtYWtl
V2Vha1B0cihnZW5lcmF0b3IpKQorICAgICAgICAgICAgLCBtX3VybChXVEZNb3ZlKHVybCkpIHsg
fQorICAgIHByaXZhdGU6CisKKyAgICAgICAgLy8gVGhlc2UgbWV0aG9kcyBzaG91bGQgaGF2ZSBi
ZWVuIGNhbGxlZCBiZWZvcmUgY2hhbmdpbmcgdGhlIGNsaWVudCB0byB0aGlzLgorICAgICAgICB2
b2lkIHJlc3BvbnNlUmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2hvdWxkQ29udGludWVQb2xpY3lD
aGVjayk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGZpbmFsCisgICAgICAgIHsKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU2hv
dWxkQ29udGludWVQb2xpY3lDaGVjazo6Tm8pOworICAgICAgICB9CisgICAgICAgIHZvaWQgcmVk
aXJlY3RSZWNlaXZlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBSZXNvdXJjZVJlcXVlc3QmJiwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVzb3VyY2VS
ZXF1ZXN0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBmaW5hbAorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KHsgfSk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBkYXRhU2VudChQbGF0Zm9ybU1lZGlhUmVz
b3VyY2UmLCB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZykgZmluYWwKKyAg
ICAgICAgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAg
ICAgICAgdm9pZCBhY2Nlc3NDb250cm9sQ2hlY2tGYWlsZWQoUGxhdGZvcm1NZWRpYVJlc291cmNl
JiwgY29uc3QgUmVzb3VyY2VFcnJvciYpIGZpbmFsCisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRDYWNo
ZVJlc3BvbnNlKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
KSBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkYXRh
UmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiwgY29uc3QgY2hhciogYnl0ZXMsIGludCBs
ZW5ndGgpIGZpbmFsCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisgICAgICAgICAgICBpZiAoIW1fZ2VuZXJhdG9yKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIGF1dG8qIGRhdGEgPSBtX2dlbmVyYXRvci0+bV9tYXAuZ2V0KG1fdXJs
KTsKKyAgICAgICAgICAgIGlmICghZGF0YSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICBkYXRhLT5idWZmZXItPmFwcGVuZChieXRlcywgbGVuZ3RoKTsKKyAgICAgICAgICAg
IG1fZ2VuZXJhdG9yLT5naXZlUmVzcG9uc2VUb1Rhc2tzV2l0aEZpbmlzaGVkUmFuZ2VzKCpkYXRh
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgbG9hZEZhaWxlZChQbGF0Zm9ybU1lZGlhUmVz
b3VyY2UmLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikgZmluYWwKKyAgICAgICAgeworICAg
ICAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgICAgIGlmICghbV9nZW5l
cmF0b3IpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYXV0byBkYXRhID0g
bV9nZW5lcmF0b3ItPm1fbWFwLnRha2UobV91cmwpOworICAgICAgICAgICAgaWYgKCFkYXRhKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGZvciAoYXV0byYgdGFzayA6IGRh
dGEtPnRhc2tEYXRhLmtleXMoKSkKKyAgICAgICAgICAgICAgICBbdGFzayByZXNvdXJjZTpudWxs
cHRyIGxvYWRGYWlsZWRXaXRoRXJyb3I6ZXJyb3JdOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBsb2FkRmluaXNoZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiwgY29uc3QgTmV0d29ya0xvYWRN
ZXRyaWNzJikgZmluYWwKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKyAgICAgICAgICAgIGlmICghbV9nZW5lcmF0b3IpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgYXV0byogZGF0YSA9IG1fZ2VuZXJhdG9yLT5tX21hcC5nZXQobV91
cmwpOworICAgICAgICAgICAgaWYgKCFkYXRhKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIGRhdGEtPnN1Y2Nlc3NmdWxseUZpbmlzaGVkTG9hZGluZyA9IERhdGE6OlN1Y2Nl
c3NmdWxseUZpbmlzaGVkTG9hZGluZzo6WWVzOworICAgICAgICAgICAgZGF0YS0+cmVzb3VyY2Ug
PSBudWxscHRyOworICAgICAgICAgICAgbV9nZW5lcmF0b3ItPmdpdmVSZXNwb25zZVRvVGFza3NX
aXRoRmluaXNoZWRSYW5nZXMoKmRhdGEpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBX
ZWFrUHRyPFJhbmdlUmVzcG9uc2VHZW5lcmF0b3I+IG1fZ2VuZXJhdG9yOworICAgICAgICBjb25z
dCBVUkwgbV91cmw7CisgICAgfTsKKworICAgIHJlc291cmNlLnNldENsaWVudChhZG9wdFJlZihu
ZXcgQ2xpZW50KCp0aGlzLCBvcmlnaW5hbFJlcXVlc3QuVVJMKSkpOworCisgICAgbV9tYXAuZW5z
dXJlKG9yaWdpbmFsUmVxdWVzdC5VUkwsIFsmXSB7CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVl
PERhdGE+KHJlc3BvbnNlLCByZXNvdXJjZSk7CisgICAgfSkuaXRlcmF0b3ItPnZhbHVlLT50YXNr
RGF0YS5hZGQodGFzaywgbWFrZVVuaXF1ZTxEYXRhOjpUYXNrRGF0YT4oV1RGTW92ZSgqcGFyc2Vk
UmVxdWVzdFJhbmdlKSkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29j
b2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9uLmgKaW5kZXggYTgwZTIwODg1Mzk3YzcxMDJhZTMx
ZWI3MDQyNzQ1MzY0YmU0ZGIzMi4uNzg3NWYzMGVhNmM4OTNjMTk2ODk1Nzk3NWM2Y2FiNjdmMjdj
NjRjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9X
ZWJDb3JlTlNVUkxTZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9uLmgKQEAgLTIzLDggKzIzLDEwIEBACiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKICAqLwogCisjaW1wb3J0ICJSYW5nZVJlc3BvbnNlR2VuZXJhdG9yLmgiCiAjaW1w
b3J0ICJTZWN1cml0eU9yaWdpbi5oIgogI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1VSTFNlc3Npb24u
aD4KKyNpbXBvcnQgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2ltcG9ydCA8d3RmL0hhc2hT
ZXQuaD4KICNpbXBvcnQgPHd0Zi9Mb2NrLmg+CiAjaW1wb3J0IDx3dGYvT1NPYmplY3RQdHIuaD4K
QEAgLTQxLDEyICs0MywxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDYWNoZWRS
ZXNvdXJjZVJlcXVlc3Q7CitjbGFzcyBOZXR3b3JrTG9hZE1ldHJpY3M7CiBjbGFzcyBQbGF0Zm9y
bU1lZGlhUmVzb3VyY2U7CiBjbGFzcyBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXI7CitjbGFz
cyBSZXNvdXJjZUVycm9yOworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworY2xhc3MgUmVzb3VyY2VS
ZXNwb25zZTsKIGNsYXNzIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDsKK2VudW0g
Y2xhc3MgU2hvdWxkQ29udGludWVQb2xpY3lDaGVjayA6IGJvb2w7CiB9CiAKLWVudW0gY2xhc3Mg
V2ViQ29yZU5TVVJMU2Vzc2lvbkNPUlNBY2Nlc3NDaGVja1Jlc3VsdHMgeworZW51bSBjbGFzcyBX
ZWJDb3JlTlNVUkxTZXNzaW9uQ09SU0FjY2Vzc0NoZWNrUmVzdWx0cyA6IHVpbnQ4X3QgewogICAg
IFVua25vd24sCiAgICAgUGFzcywKICAgICBGYWlsLApAQCAtNjcsNiArNzQsNyBAQCBXRUJDT1JF
X0VYUE9SVCBAaW50ZXJmYWNlIFdlYkNvcmVOU1VSTFNlc3Npb24gOiBOU09iamVjdCB7CiAgICAg
TlNVSW50ZWdlciBfbmV4dFRhc2tJZGVudGlmaWVyOwogICAgIE9TT2JqZWN0UHRyPGRpc3BhdGNo
X3F1ZXVlX3Q+IF9pbnRlcm5hbFF1ZXVlOwogICAgIFdlYkNvcmVOU1VSTFNlc3Npb25DT1JTQWNj
ZXNzQ2hlY2tSZXN1bHRzIF9jb3JzUmVzdWx0czsKKyAgICBXZWJDb3JlOjpSYW5nZVJlc3BvbnNl
R2VuZXJhdG9yIF9yYW5nZVJlc3BvbnNlR2VuZXJhdG9yOwogfQogLSAoaWQpaW5pdFdpdGhSZXNv
dXJjZUxvYWRlcjooV2ViQ29yZTo6UGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyJilsb2FkZXIg
ZGVsZWdhdGU6KGlkPE5TVVJMU2Vzc2lvblRhc2tEZWxlZ2F0ZT4pZGVsZWdhdGUgZGVsZWdhdGVR
dWV1ZTooTlNPcGVyYXRpb25RdWV1ZSopcXVldWU7CiBAcHJvcGVydHkgKHJlYWRvbmx5LCByZXRh
aW4pIE5TT3BlcmF0aW9uUXVldWUgKmRlbGVnYXRlUXVldWU7CkBAIC0xNDMsNCArMTUxLDE1IEBA
IFdFQkNPUkVfRVhQT1JUIEBpbnRlcmZhY2UgV2ViQ29yZU5TVVJMU2Vzc2lvbiA6IE5TT2JqZWN0
IHsKIC0gKHZvaWQpcmVzdW1lOwogQGVuZAogCitAaW50ZXJmYWNlIFdlYkNvcmVOU1VSTFNlc3Np
b25EYXRhVGFzayAoV2ViS2l0SW50ZXJuYWwpCistICh2b2lkKXJlc291cmNlOihudWxsYWJsZSBX
ZWJDb3JlOjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIHNlbnRCeXRlczoodW5zaWdu
ZWQgbG9uZyBsb25nKWJ5dGVzU2VudCB0b3RhbEJ5dGVzVG9CZVNlbnQ6KHVuc2lnbmVkIGxvbmcg
bG9uZyl0b3RhbEJ5dGVzVG9CZVNlbnQ7CistICh2b2lkKXJlc291cmNlOihudWxsYWJsZSBXZWJD
b3JlOjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIHJlY2VpdmVkUmVzcG9uc2U6KGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKXJlc3BvbnNlIGNvbXBsZXRpb25IYW5kbGVy
OihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlNob3VsZENvbnRpbnVlUG9saWN5Q2hl
Y2spPiYmKWNvbXBsZXRpb25IYW5kbGVyOworLSAoQk9PTClyZXNvdXJjZToobnVsbGFibGUgV2Vi
Q29yZTo6UGxhdGZvcm1NZWRpYVJlc291cmNlKilyZXNvdXJjZSBzaG91bGRDYWNoZVJlc3BvbnNl
Oihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJilyZXNwb25zZTsKKy0gKHZvaWQpcmVz
b3VyY2U6KG51bGxhYmxlIFdlYkNvcmU6OlBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3VyY2Ug
cmVjZWl2ZWREYXRhOihjb25zdCBjaGFyKilkYXRhIGxlbmd0aDooaW50KWxlbmd0aDsKKy0gKHZv
aWQpcmVzb3VyY2U6KG51bGxhYmxlIFdlYkNvcmU6OlBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVz
b3VyY2UgcmVjZWl2ZWRSZWRpcmVjdDooY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYp
cmVzcG9uc2UgcmVxdWVzdDooV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYpcmVxdWVzdCBjb21w
bGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmJik+JiYpY29tcGxldGlvbkhhbmRsZXI7CistICh2b2lkKXJlc291cmNlOihudWxsYWJs
ZSBXZWJDb3JlOjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIGFjY2Vzc0NvbnRyb2xD
aGVja0ZhaWxlZFdpdGhFcnJvcjooY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpZXJyb3I7
CistICh2b2lkKXJlc291cmNlOihudWxsYWJsZSBXZWJDb3JlOjpQbGF0Zm9ybU1lZGlhUmVzb3Vy
Y2UqKXJlc291cmNlIGxvYWRGYWlsZWRXaXRoRXJyb3I6KGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
RXJyb3ImKWVycm9yOworLSAodm9pZClyZXNvdXJjZUZpbmlzaGVkOihudWxsYWJsZSBXZWJDb3Jl
OjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIG1ldHJpY3M6KGNvbnN0IFdlYkNvcmU6
Ok5ldHdvcmtMb2FkTWV0cmljcyYpbWV0cmljczsKK0BlbmQKKwogTlNfQVNTVU1FX05PTk5VTExf
RU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dl
YkNvcmVOU1VSTFNlc3Npb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nv
Y29hL1dlYkNvcmVOU1VSTFNlc3Npb24ubW0KaW5kZXggOTAyMTI4N2JkZGY0NzM3ZDg0MWE1NWUx
NzBhM2VjMTg5YWNlZTRkMC4uNWRiMGNiYzUwZTQ3N2E4MjNjNjU0OTBhOGU0MWQ1YmJlNGM5MDMx
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJD
b3JlTlNVUkxTZXNzaW9uLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5tbQpAQCAtMjcsMTAgKzI3LDEyIEBACiAjaW1wb3J0
ICJXZWJDb3JlTlNVUkxTZXNzaW9uLmgiCiAKICNpbXBvcnQgIkNhY2hlZFJlc291cmNlUmVxdWVz
dC5oIgorI2ltcG9ydCAiUGFyc2VkUmVxdWVzdFJhbmdlLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybU1l
ZGlhUmVzb3VyY2VMb2FkZXIuaCIKICNpbXBvcnQgIlN1YnJlc291cmNlTG9hZGVyLmgiCiAjaW1w
b3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgor
I2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29j
b2EuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yMDMsMjQgKzIwNSwxNiBAQCBz
dGF0aWMgTlNEYXRlICogX19udWxsYWJsZSBuZXR3b3JrTG9hZE1ldHJpY3NEYXRlKFNlY29uZHMg
ZmV0Y2hTdGFydCwgU2Vjb25kcyBkZQogLSAodm9pZClhZGREZWxlZ2F0ZU9wZXJhdGlvbjooRnVu
Y3Rpb248dm9pZCgpPiYmKW9wZXJhdGlvbjsKIC0gKHZvaWQpdGFzazooV2ViQ29yZU5TVVJMU2Vz
c2lvbkRhdGFUYXNrICopdGFzayBkaWRSZWNlaXZlQ09SU0FjY2Vzc0NoZWNrUmVzdWx0OihCT09M
KXJlc3VsdDsKIC0gKHZvaWQpdGFzazooV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICopdGFz
ayBkaWRSZWNlaXZlUmVzcG9uc2VGcm9tT3JpZ2luOihSZWY8V2ViQ29yZTo6U2VjdXJpdHlPcmln
aW4+JiYpb3JpZ2luOworLSAoV2ViQ29yZTo6UmFuZ2VSZXNwb25zZUdlbmVyYXRvciYpcmFuZ2VS
ZXNwb25zZUdlbmVyYXRvcjsKIEBlbmQKIAogQGludGVyZmFjZSBXZWJDb3JlTlNVUkxTZXNzaW9u
RGF0YVRhc2sgKCkKIC0gKGlkKWluaXRXaXRoU2Vzc2lvbjooV2ViQ29yZU5TVVJMU2Vzc2lvbiAq
KXNlc3Npb24gaWRlbnRpZmllcjooTlNVSW50ZWdlcilpZGVudGlmaWVyIHJlcXVlc3Q6KE5TVVJM
UmVxdWVzdCAqKXJlcXVlc3Q7Ci0tIChpZClpbml0V2l0aFNlc3Npb246KFdlYkNvcmVOU1VSTFNl
c3Npb24gKilzZXNzaW9uIGlkZW50aWZpZXI6KE5TVUludGVnZXIpaWRlbnRpZmllciBVUkw6KE5T
VVJMICopdXJsOwogLSAodm9pZClfcmVzdGFydDsKIC0gKHZvaWQpX2NhbmNlbDsKIC0gKHZvaWQp
X2ZpbmlzaDsKIEBwcm9wZXJ0eSAoYXNzaWduKSBXZWJDb3JlTlNVUkxTZXNzaW9uICogX051bGxh
YmxlIHNlc3Npb247CiAKLS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYp
cmVzb3VyY2Ugc2VudEJ5dGVzOih1bnNpZ25lZCBsb25nIGxvbmcpYnl0ZXNTZW50IHRvdGFsQnl0
ZXNUb0JlU2VudDoodW5zaWduZWQgbG9uZyBsb25nKXRvdGFsQnl0ZXNUb0JlU2VudDsKLS0gKHZv
aWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgcmVjZWl2ZWRSZXNw
b25zZTooY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpcmVzcG9uc2UgY29tcGxldGlvbkhhbmRsZXI6
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2hvdWxkQ29udGludWVQb2xpY3lDaGVjayk+JiYpY29t
cGxldGlvbkhhbmRsZXI7Ci0tIChCT09MKXJlc291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2Um
KXJlc291cmNlIHNob3VsZENhY2hlUmVzcG9uc2U6KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKXJl
c3BvbnNlOwotLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlJilyZXNvdXJj
ZSByZWNlaXZlZERhdGE6KGNvbnN0IGNoYXIqKWRhdGEgbGVuZ3RoOihpbnQpbGVuZ3RoOwotLSAo
dm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlJilyZXNvdXJjZSByZWNlaXZlZFJl
ZGlyZWN0Oihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJilyZXNwb25zZSByZXF1ZXN0OihSZXNvdXJj
ZVJlcXVlc3QmJilyZXF1ZXN0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFJlc291cmNlUmVxdWVzdCYmKT4mJiljb21wbGV0aW9uSGFuZGxlcjsKLS0gKHZvaWQpcmVz
b3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgYWNjZXNzQ29udHJvbENoZWNr
RmFpbGVkV2l0aEVycm9yOihjb25zdCBSZXNvdXJjZUVycm9yJillcnJvcjsKLS0gKHZvaWQpcmVz
b3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgbG9hZEZhaWxlZFdpdGhFcnJv
cjooY29uc3QgUmVzb3VyY2VFcnJvciYpZXJyb3I7Ci0tICh2b2lkKXJlc291cmNlRmluaXNoZWQ6
KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgbWV0cmljczooY29uc3QgTmV0d29ya0xv
YWRNZXRyaWNzJiltZXRyaWNzOwogQGVuZAogCiBOU19BU1NVTUVfTk9OTlVMTF9FTkQKQEAgLTMx
MSw2ICszMDUsMTEgQEAgTlNfQVNTVU1FX05PTk5VTExfRU5ECiAgICAgX29yaWdpbnMuYWRkKFdU
Rk1vdmUob3JpZ2luKSk7CiB9CiAKKy0gKFdlYkNvcmU6OlJhbmdlUmVzcG9uc2VHZW5lcmF0b3Im
KXJhbmdlUmVzcG9uc2VHZW5lcmF0b3IKK3sKKyAgICByZXR1cm4gX3JhbmdlUmVzcG9uc2VHZW5l
cmF0b3I7Cit9CisKICNwcmFnbWEgbWFyayAtIE5TVVJMU2Vzc2lvbiBBUEkKIEBkeW5hbWljIGRl
bGVnYXRlOwogLSAoX19udWxsYWJsZSBpZDxOU1VSTFNlc3Npb25EZWxlZ2F0ZT4pZGVsZWdhdGUK
QEAgLTQ1NSwxNSArNDU0LDcgQEAgTlNfQVNTVU1FX05PTk5VTExfRU5ECiAKIC0gKE5TVVJMU2Vz
c2lvbkRhdGFUYXNrICopZGF0YVRhc2tXaXRoVVJMOihOU1VSTCAqKXVybAogewotICAgIGlmIChf
aW52YWxpZGF0ZWQpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBXZWJDb3JlTlNVUkxTZXNz
aW9uRGF0YVRhc2sgKnRhc2sgPSBbW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayBhbGxvY10g
aW5pdFdpdGhTZXNzaW9uOnNlbGYgaWRlbnRpZmllcjpfbmV4dFRhc2tJZGVudGlmaWVyKysgVVJM
OnVybF07Ci0gICAgewotICAgICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKF9kYXRhVGFza3NMb2Nr
KTsKLSAgICAgICAgX2RhdGFUYXNrcy5hZGQodGFzayk7Ci0gICAgfQotICAgIHJldHVybiAoTlNV
UkxTZXNzaW9uRGF0YVRhc2sgKilbdGFzayBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJuIFtzZWxm
IGRhdGFUYXNrV2l0aFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp1cmxdXTsK
IH0KIAogLSAodm9pZClzZW5kSDJQaW5nOihOU1VSTCAqKXVybCBwb25nSGFuZGxlcjoodm9pZCAo
XikoTlNFcnJvciAqZXJyb3IsIE5TVGltZUludGVydmFsIGludGVydmFsKSlwb25nSGFuZGxlcgpA
QCAtNTcxLDcgKzU2Miw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBMb2NrIG1fdGFza0xv
Y2s7Ci0gICAgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICptX3Rhc2s7CisgICAgV2Vha09i
akNQdHI8V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrPiBtX3Rhc2s7CiB9OwogCiB2b2lkIFdl
YkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6Y2xlYXJUYXNrKCkKQEAgLTU4NiwxNiAr
NTc3LDE3IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjpkYXRhU2Vu
dChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc291cmNlCiAgICAgaWYgKCFtX3Rhc2spCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFttX3Rhc2sgcmVzb3VyY2U6cmVzb3VyY2Ugc2VudEJ5dGVzOmJ5
dGVzU2VudCB0b3RhbEJ5dGVzVG9CZVNlbnQ6dG90YWxCeXRlc1RvQmVTZW50XTsKKyAgICBbbV90
YXNrIHJlc291cmNlOiZyZXNvdXJjZSBzZW50Qnl0ZXM6Ynl0ZXNTZW50IHRvdGFsQnl0ZXNUb0Jl
U2VudDp0b3RhbEJ5dGVzVG9CZVNlbnRdOwogfQogCiB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25E
YXRhVGFza0NsaWVudDo6cmVzcG9uc2VSZWNlaXZlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJl
c291cmNlLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChTaG91bGRDb250aW51ZVBvbGljeUNoZWNrKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKKyAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKICAgICBMb2NrSG9s
ZGVyIGxvY2tlcihtX3Rhc2tMb2NrKTsKICAgICBpZiAoIW1fdGFzaykKICAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb25IYW5kbGVyKFNob3VsZENvbnRpbnVlUG9saWN5Q2hlY2s6Ok5vKTsKIAotICAg
IFttX3Rhc2sgcmVzb3VyY2U6cmVzb3VyY2UgcmVjZWl2ZWRSZXNwb25zZTpyZXNwb25zZSBjb21w
bGV0aW9uSGFuZGxlcjpXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV07CisgICAgW21fdGFzayBy
ZXNvdXJjZTomcmVzb3VyY2UgcmVjZWl2ZWRSZXNwb25zZTpyZXNwb25zZSBjb21wbGV0aW9uSGFu
ZGxlcjpXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV07CiB9CiAKIGJvb2wgV2ViQ29yZU5TVVJM
U2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjpzaG91bGRDYWNoZVJlc3BvbnNlKFBsYXRmb3JtTWVkaWFS
ZXNvdXJjZSYgcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQpAQCAt
NjA0LDcgKzU5Niw3IEBAIGJvb2wgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpz
aG91bGRDYWNoZVJlc3BvbnNlKFBsYXRmb3JtTWVkaWFSZXNvdXJjCiAgICAgaWYgKCFtX3Rhc2sp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBbbV90YXNrIHJlc291cmNlOnJl
c291cmNlIHNob3VsZENhY2hlUmVzcG9uc2U6cmVzcG9uc2VdOworICAgIHJldHVybiBbbV90YXNr
IHJlc291cmNlOiZyZXNvdXJjZSBzaG91bGRDYWNoZVJlc3BvbnNlOnJlc3BvbnNlXTsKIH0KIAog
dm9pZCBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmRhdGFSZWNlaXZlZChQbGF0
Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc291cmNlLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3Ro
KQpAQCAtNjEzLDcgKzYwNSw3IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xp
ZW50OjpkYXRhUmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvCiAgICAgaWYgKCFt
X3Rhc2spCiAgICAgICAgIHJldHVybjsKIAotICAgIFttX3Rhc2sgcmVzb3VyY2U6cmVzb3VyY2Ug
cmVjZWl2ZWREYXRhOmRhdGEgbGVuZ3RoOmxlbmd0aF07CisgICAgW21fdGFzayByZXNvdXJjZTom
cmVzb3VyY2UgcmVjZWl2ZWREYXRhOmRhdGEgbGVuZ3RoOmxlbmd0aF07CiB9CiAKIHZvaWQgV2Vi
Q29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjpyZWRpcmVjdFJlY2VpdmVkKFBsYXRmb3Jt
TWVkaWFSZXNvdXJjZSYgcmVzb3VyY2UsIFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlc291
cmNlUmVxdWVzdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTYyMiw3ICs2MTQsNyBAQCB2
b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6cmVkaXJlY3RSZWNlaXZlZChQ
bGF0Zm9ybU1lZGlhUmVzb3VyY2UmCiAgICAgaWYgKCFtX3Rhc2spCiAgICAgICAgIHJldHVybjsK
IAotICAgIFttX3Rhc2sgcmVzb3VyY2U6cmVzb3VyY2UgcmVjZWl2ZWRSZWRpcmVjdDpyZXNwb25z
ZSByZXF1ZXN0OldURk1vdmUocmVxdWVzdCkgY29tcGxldGlvbkhhbmRsZXI6IFtjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHJlcXVlc3QpIG11
dGFibGUgeworICAgIFttX3Rhc2sgcmVzb3VyY2U6JnJlc291cmNlIHJlY2VpdmVkUmVkaXJlY3Q6
cmVzcG9uc2UgcmVxdWVzdDpXVEZNb3ZlKHJlcXVlc3QpIGNvbXBsZXRpb25IYW5kbGVyOiBbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiByZXF1
ZXN0KSBtdXRhYmxlIHsKICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbcmVxdWVzdCA9IHJlcXVl
c3QuaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildICgpIG11dGFibGUgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RG
TW92ZShyZXF1ZXN0KSk7CiAgICAgICAgIH0pOwpAQCAtNjM1LDcgKzYyNyw3IEBAIHZvaWQgV2Vi
Q29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjphY2Nlc3NDb250cm9sQ2hlY2tGYWlsZWQo
UGxhdGZvcm1NZWRpYVJlCiAgICAgaWYgKCFtX3Rhc2spCiAgICAgICAgIHJldHVybjsKIAotICAg
IFttX3Rhc2sgcmVzb3VyY2U6cmVzb3VyY2UgYWNjZXNzQ29udHJvbENoZWNrRmFpbGVkV2l0aEVy
cm9yOmVycm9yXTsKKyAgICBbbV90YXNrIHJlc291cmNlOiZyZXNvdXJjZSBhY2Nlc3NDb250cm9s
Q2hlY2tGYWlsZWRXaXRoRXJyb3I6ZXJyb3JdOwogfQogCiB2b2lkIFdlYkNvcmVOU1VSTFNlc3Np
b25EYXRhVGFza0NsaWVudDo6bG9hZEZhaWxlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc291
cmNlLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKQEAgLTY0NCw3ICs2MzYsNyBAQCB2b2lk
IFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZhaWxlZChQbGF0Zm9ybU1l
ZGlhUmVzb3VyY2UmIHJlc291cgogICAgIGlmICghbV90YXNrKQogICAgICAgICByZXR1cm47CiAK
LSAgICBbbV90YXNrIHJlc291cmNlOnJlc291cmNlIGxvYWRGYWlsZWRXaXRoRXJyb3I6ZXJyb3Jd
OworICAgIFttX3Rhc2sgcmVzb3VyY2U6JnJlc291cmNlIGxvYWRGYWlsZWRXaXRoRXJyb3I6ZXJy
b3JdOwogfQogCiB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZp
bmlzaGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzb3VyY2UsIGNvbnN0IE5ldHdvcmtMb2Fk
TWV0cmljcyYgbWV0cmljcykKQEAgLTY1Myw3ICs2NDUsNyBAQCB2b2lkIFdlYkNvcmVOU1VSTFNl
c3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZpbmlzaGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYg
cmVzbwogICAgIGlmICghbV90YXNrKQogICAgICAgICByZXR1cm47CiAKLSAgICBbbV90YXNrIHJl
c291cmNlRmluaXNoZWQ6cmVzb3VyY2UgbWV0cmljczptZXRyaWNzXTsKKyAgICBbbV90YXNrIHJl
c291cmNlRmluaXNoZWQ6JnJlc291cmNlIG1ldHJpY3M6bWV0cmljc107CiB9CiAKIH0KQEAgLTY2
MSwxNyArNjUzLDYgQEAgdm9pZCBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6Omxv
YWRGaW5pc2hlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc28KICNwcmFnbWEgbWFyayAtIFdl
YkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzawogCiBAaW1wbGVtZW50YXRpb24gV2ViQ29yZU5TVVJM
U2Vzc2lvbkRhdGFUYXNrCi0tIChpZClpbml0V2l0aFNlc3Npb246KFdlYkNvcmVOU1VSTFNlc3Np
b24gKilzZXNzaW9uIGlkZW50aWZpZXI6KE5TVUludGVnZXIpaWRlbnRpZmllciBVUkw6KE5TVVJM
ICopdXJsCi17Ci0gICAgc2VsZi50YXNrSWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAgc2Vs
Zi5zZXNzaW9uID0gc2Vzc2lvbjsKLSAgICBzZWxmLnN0YXRlID0gTlNVUkxTZXNzaW9uVGFza1N0
YXRlU3VzcGVuZGVkOwotICAgIHNlbGYucHJpb3JpdHkgPSBOU1VSTFNlc3Npb25UYXNrUHJpb3Jp
dHlEZWZhdWx0OwotICAgIHNlbGYub3JpZ2luYWxSZXF1ZXN0ID0gc2VsZi5jdXJyZW50UmVxdWVz
dCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dXJsXTsKLQotICAgIHJldHVybiBzZWxm
OwotfQotCiAtIChpZClpbml0V2l0aFNlc3Npb246KFdlYkNvcmVOU1VSTFNlc3Npb24gKilzZXNz
aW9uIGlkZW50aWZpZXI6KE5TVUludGVnZXIpaWRlbnRpZmllciByZXF1ZXN0OihOU1VSTFJlcXVl
c3QgKilyZXF1ZXN0CiB7CiAgICAgc2VsZi50YXNrSWRlbnRpZmllciA9IGlkZW50aWZpZXI7CkBA
IC03MDgsOSArNjg5LDEyIEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50
Ojpsb2FkRmluaXNoZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvCiAKICAgICBbc2VsZiBf
Y2FuY2VsXTsKIAorICAgIGlmIChbc2VsZi5zZXNzaW9uIHJhbmdlUmVzcG9uc2VHZW5lcmF0b3Jd
LndpbGxIYW5kbGVSZXF1ZXN0KHNlbGYsIHNlbGYub3JpZ2luYWxSZXF1ZXN0KSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgX3Jlc291cmNlID0gc2VsZi5zZXNzaW9uLmxvYWRlci5yZXF1ZXN0UmVz
b3VyY2Uoc2VsZi5vcmlnaW5hbFJlcXVlc3QsIFBsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlcjo6
TG9hZE9wdGlvbjo6RGlzYWxsb3dDYWNoaW5nKTsKICAgICBpZiAoX3Jlc291cmNlKQotICAgICAg
ICBfcmVzb3VyY2UtPnNldENsaWVudChtYWtlVW5pcXVlPFdlYkNvcmVOU1VSTFNlc3Npb25EYXRh
VGFza0NsaWVudD4oc2VsZikpOworICAgICAgICBfcmVzb3VyY2UtPnNldENsaWVudChhZG9wdFJl
ZigqbmV3IFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudChzZWxmKSkpOwogfQogCiAt
ICh2b2lkKV9jYW5jZWwKQEAgLTcyNyw3ICs3MTEsNyBAQCB2b2lkIFdlYkNvcmVOU1VSTFNlc3Np
b25EYXRhVGFza0NsaWVudDo6bG9hZEZpbmlzaGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVz
bwogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgaWYgKF9yZXNvdXJjZSkKLSAg
ICAgICAgW3NlbGYgcmVzb3VyY2VGaW5pc2hlZDoqX3Jlc291cmNlIG1ldHJpY3M6TmV0d29ya0xv
YWRNZXRyaWNzIHsgfV07CisgICAgICAgIFtzZWxmIHJlc291cmNlRmluaXNoZWQ6X3Jlc291cmNl
LmdldCgpIG1ldHJpY3M6TmV0d29ya0xvYWRNZXRyaWNzIHsgfV07CiB9CiAKICNwcmFnbWEgbWFy
ayAtIE5TVVJMU2Vzc2lvbiBBUEkKQEAgLTgwNiwyMyArNzkwLDI4IEBAIHZvaWQgV2ViQ29yZU5T
VVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQoUGxhdGZvcm1NZWRpYVJlc291
cmNlJiByZXNvCiAKICNwcmFnbWEgbWFyayAtIFBsYXRmb3JtTWVkaWFSZXNvdXJjZUNsaWVudCBj
YWxsYmFja3MKIAotLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlJilyZXNv
dXJjZSBzZW50Qnl0ZXM6KHVuc2lnbmVkIGxvbmcgbG9uZylieXRlc1NlbnQgdG90YWxCeXRlc1Rv
QmVTZW50Oih1bnNpZ25lZCBsb25nIGxvbmcpdG90YWxCeXRlc1RvQmVTZW50CistICh2b2lkKXJl
c291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIHNlbnRCeXRlczoodW5zaWdu
ZWQgbG9uZyBsb25nKWJ5dGVzU2VudCB0b3RhbEJ5dGVzVG9CZVNlbnQ6KHVuc2lnbmVkIGxvbmcg
bG9uZyl0b3RhbEJ5dGVzVG9CZVNlbnQKIHsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAm
cmVzb3VyY2UgPT0gX3Jlc291cmNlKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAhcmVz
b3VyY2UgfHwgcmVzb3VyY2UgPT0gX3Jlc291cmNlKTsKICAgICBVTlVTRURfUEFSQU0oYnl0ZXNT
ZW50KTsKICAgICBVTlVTRURfUEFSQU0odG90YWxCeXRlc1RvQmVTZW50KTsKICAgICAvLyBOby1v
cC4KIH0KIAotLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlJilyZXNvdXJj
ZSByZWNlaXZlZFJlc3BvbnNlOihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJilyZXNwb25zZSBjb21w
bGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTaG91bGRDb250aW51ZVBvbGlj
eUNoZWNrKT4mJiljb21wbGV0aW9uSGFuZGxlcgorLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1N
ZWRpYVJlc291cmNlKilyZXNvdXJjZSByZWNlaXZlZFJlc3BvbnNlOihjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJilyZXNwb25zZSBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChTaG91bGRDb250aW51ZVBvbGljeUNoZWNrKT4mJiljb21wbGV0aW9uSGFuZGxlcgogewogICAg
IEFTU0VSVChyZXNwb25zZS5zb3VyY2UoKSA9PSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6Ok5l
dHdvcmsgfHwgcmVzcG9uc2Uuc291cmNlKCkgPT0gUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpE
aXNrQ2FjaGUgfHwgcmVzcG9uc2Uuc291cmNlKCkgPT0gUmVzb3VyY2VSZXNwb25zZTo6U291cmNl
OjpEaXNrQ2FjaGVBZnRlclZhbGlkYXRpb24gfHwgcmVzcG9uc2Uuc291cmNlKCkgPT0gUmVzb3Vy
Y2VSZXNwb25zZTo6U291cmNlOjpTZXJ2aWNlV29ya2VyKTsKLSAgICBBU1NFUlRfVU5VU0VEKHJl
c291cmNlLCAmcmVzb3VyY2UgPT0gX3Jlc291cmNlKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc291
cmNlLCAhcmVzb3VyY2UgfHwgcmVzb3VyY2UgPT0gX3Jlc291cmNlKTsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogICAgIFtzZWxmLnNlc3Npb24gdGFzazpzZWxmIGRpZFJlY2VpdmVSZXNw
b25zZUZyb21PcmlnaW46U2VjdXJpdHlPcmlnaW46OmNyZWF0ZShyZXNwb25zZS51cmwoKSldOwot
ICAgIFtzZWxmLnNlc3Npb24gdGFzazpzZWxmIGRpZFJlY2VpdmVDT1JTQWNjZXNzQ2hlY2tSZXN1
bHQ6cmVzb3VyY2UuZGlkUGFzc0FjY2Vzc0NvbnRyb2xDaGVjaygpXTsKKyAgICAvLyBGSVhNRTog
VGhpbmsgYWJvdXQgdGhpcyBhbmQgbWFrZSBzdXJlIGl0J3Mgc2FmZS4KKyAgICBbc2VsZi5zZXNz
aW9uIHRhc2s6c2VsZiBkaWRSZWNlaXZlQ09SU0FjY2Vzc0NoZWNrUmVzdWx0OnJlc291cmNlID8g
cmVzb3VyY2UtPmRpZFBhc3NBY2Nlc3NDb250cm9sQ2hlY2soKSA6IFlFU107CiAgICAgc2VsZi5j
b3VudE9mQnl0ZXNFeHBlY3RlZFRvUmVjZWl2ZSA9IHJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExl
bmd0aCgpOwotICAgIFJldGFpblB0cjxOU1VSTFJlc3BvbnNlPiBzdHJvbmdSZXNwb25zZSB7IHJl
c3BvbnNlLm5zVVJMUmVzcG9uc2UoKSB9OworICAgIFJldGFpblB0cjxOU1VSTFJlc3BvbnNlPiBz
dHJvbmdSZXNwb25zZSA9IHJlc3BvbnNlLm5zVVJMUmVzcG9uc2UoKTsKKworICAgIGlmIChyZXNv
dXJjZSAmJiBzZWxmLnNlc3Npb24gJiYgW3NlbGYuc2Vzc2lvbiByYW5nZVJlc3BvbnNlR2VuZXJh
dG9yXS53aWxsU3ludGhlc2l6ZVJhbmdlUmVzcG9uc2VzKHNlbGYsICpyZXNvdXJjZSwgcmVzcG9u
c2UpKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoU2hvdWxkQ29udGludWVQb2xp
Y3lDaGVjazo6WWVzKTsKKyAgICAKICAgICBSZXRhaW5QdHI8V2ViQ29yZU5TVVJMU2Vzc2lvbkRh
dGFUYXNrPiBzdHJvbmdTZWxmIHsgc2VsZiB9OwogICAgIGlmICghc2VsZi5zZXNzaW9uKQogICAg
ICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoU2hvdWxkQ29udGludWVQb2xpY3lDaGVjazo6
Tm8pOwpAQCAtODUwLDkgKzgzOSw5IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNr
Q2xpZW50Ojpsb2FkRmluaXNoZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvCiAgICAgfV07
CiB9CiAKLS0gKEJPT0wpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2Ug
c2hvdWxkQ2FjaGVSZXNwb25zZTooY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpcmVzcG9uc2UKKy0g
KEJPT0wpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3VyY2Ugc2hvdWxkQ2Fj
aGVSZXNwb25zZTooY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpcmVzcG9uc2UKIHsKLSAgICBBU1NF
UlRfVU5VU0VEKHJlc291cmNlLCAmcmVzb3VyY2UgPT0gX3Jlc291cmNlKTsKKyAgICBBU1NFUlRf
VU5VU0VEKHJlc291cmNlLCAhcmVzb3VyY2UgfHwgcmVzb3VyY2UgPT0gX3Jlc291cmNlKTsKIAog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKQEAgLTg2MCw5ICs4NDksOSBAQCB2b2lkIFdl
YkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZpbmlzaGVkKFBsYXRmb3JtTWVk
aWFSZXNvdXJjZSYgcmVzbwogICAgIHJldHVybiByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRU
UEhlYWRlck5hbWU6OkNvbnRlbnRSYW5nZSkuaXNFbXB0eSgpOwogfQogCi0tICh2b2lkKXJlc291
cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmKXJlc291cmNlIHJlY2VpdmVkRGF0YTooY29uc3Qg
Y2hhciopZGF0YSBsZW5ndGg6KGludClsZW5ndGgKKy0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3Jt
TWVkaWFSZXNvdXJjZSopcmVzb3VyY2UgcmVjZWl2ZWREYXRhOihjb25zdCBjaGFyKilkYXRhIGxl
bmd0aDooaW50KWxlbmd0aAogewotICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2UsICZyZXNvdXJj
ZSA9PSBfcmVzb3VyY2UpOworICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2UsICFyZXNvdXJjZSB8
fCByZXNvdXJjZSA9PSBfcmVzb3VyY2UpOwogICAgIFJldGFpblB0cjxOU0RhdGE+IG5zRGF0YSA9
IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6ZGF0YSBsZW5ndGg6bGVuZ3Ro
XSk7CiAgICAgUmV0YWluUHRyPFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzaz4gc3Ryb25nU2Vs
ZiB7IHNlbGYgfTsKICAgICBbc2VsZi5zZXNzaW9uIGFkZERlbGVnYXRlT3BlcmF0aW9uOltzdHJv
bmdTZWxmLCBsZW5ndGgsIG5zRGF0YV0gewpAQCAtODczLDkgKzg2Miw5IEBAIHZvaWQgV2ViQ29y
ZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQoUGxhdGZvcm1NZWRpYVJl
c291cmNlJiByZXNvCiAgICAgfV07CiB9CiAKLS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVk
aWFSZXNvdXJjZSYpcmVzb3VyY2UgcmVjZWl2ZWRSZWRpcmVjdDooY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYpcmVzcG9uc2UgcmVxdWVzdDooUmVzb3VyY2VSZXF1ZXN0JiYpcmVxdWVzdCBjb21wbGV0
aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZXNvdXJjZVJlcXVlc3QmJik+JiYp
Y29tcGxldGlvbkhhbmRsZXIKKy0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJj
ZSopcmVzb3VyY2UgcmVjZWl2ZWRSZWRpcmVjdDooY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpcmVz
cG9uc2UgcmVxdWVzdDooUmVzb3VyY2VSZXF1ZXN0JiYpcmVxdWVzdCBjb21wbGV0aW9uSGFuZGxl
cjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZXNvdXJjZVJlcXVlc3QmJik+JiYpY29tcGxldGlv
bkhhbmRsZXIKIHsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAmcmVzb3VyY2UgPT0gX3Jl
c291cmNlKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAhcmVzb3VyY2UgfHwgcmVzb3Vy
Y2UgPT0gX3Jlc291cmNlKTsKICAgICBbc2VsZi5zZXNzaW9uIGFkZERlbGVnYXRlT3BlcmF0aW9u
OltzdHJvbmdTZWxmID0gcmV0YWluUHRyKHNlbGYpLCByZXNwb25zZSA9IHJldGFpblB0cihyZXNw
b25zZS5uc1VSTFJlc3BvbnNlKCkpLCByZXF1ZXN0ID0gcmVxdWVzdC5pc29sYXRlZENvcHkoKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJs
ZSB7CiAgICAgICAgIGlmICghW3Jlc3BvbnNlIGlzS2luZE9mQ2xhc3M6W05TSFRUUFVSTFJlc3Bv
bnNlIGNsYXNzXV0pIHsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtOTA1
LDkgKzg5NCw5IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2Fk
RmluaXNoZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvCiAgICAgfV07CiB9CiAKLS0gKHZv
aWQpX3Jlc291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmKXJlc291cmNlIGxvYWRGaW5pc2hl
ZFdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yIG1ldHJpY3M6KGNvbnN0IE5ldHdvcmtMb2FkTWV0
cmljcyYpbWV0cmljcworLSAodm9pZClfcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSop
cmVzb3VyY2UgbG9hZEZpbmlzaGVkV2l0aEVycm9yOihOU0Vycm9yICopZXJyb3IgbWV0cmljczoo
Y29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJiltZXRyaWNzCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChy
ZXNvdXJjZSwgJnJlc291cmNlID09IF9yZXNvdXJjZSk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNv
dXJjZSwgIXJlc291cmNlIHx8IHJlc291cmNlID09IF9yZXNvdXJjZSk7CiAgICAgaWYgKHNlbGYu
c3RhdGUgPT0gTlNVUkxTZXNzaW9uVGFza1N0YXRlQ29tcGxldGVkKQogICAgICAgICByZXR1cm47
CiAgICAgc2VsZi5zdGF0ZSA9IE5TVVJMU2Vzc2lvblRhc2tTdGF0ZUNvbXBsZXRlZDsKQEAgLTkz
MCwxNyArOTE5LDE3IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojps
b2FkRmluaXNoZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvCiAgICAgfV07CiB9CiAKLS0g
KHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgYWNjZXNzQ29u
dHJvbENoZWNrRmFpbGVkV2l0aEVycm9yOihjb25zdCBSZXNvdXJjZUVycm9yJillcnJvcgorLSAo
dm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlKilyZXNvdXJjZSBhY2Nlc3NDb250
cm9sQ2hlY2tGYWlsZWRXaXRoRXJyb3I6KGNvbnN0IFJlc291cmNlRXJyb3ImKWVycm9yCiB7CiAg
ICAgW3NlbGYgX3Jlc291cmNlOnJlc291cmNlIGxvYWRGaW5pc2hlZFdpdGhFcnJvcjplcnJvci5u
c0Vycm9yKCkgbWV0cmljczpOZXR3b3JrTG9hZE1ldHJpY3MgeyB9XTsKIH0KIAotLSAodm9pZCly
ZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlJilyZXNvdXJjZSBsb2FkRmFpbGVkV2l0aEVy
cm9yOihjb25zdCBSZXNvdXJjZUVycm9yJillcnJvcgorLSAodm9pZClyZXNvdXJjZTooUGxhdGZv
cm1NZWRpYVJlc291cmNlKilyZXNvdXJjZSBsb2FkRmFpbGVkV2l0aEVycm9yOihjb25zdCBSZXNv
dXJjZUVycm9yJillcnJvcgogewogICAgIFtzZWxmIF9yZXNvdXJjZTpyZXNvdXJjZSBsb2FkRmlu
aXNoZWRXaXRoRXJyb3I6ZXJyb3IubnNFcnJvcigpIG1ldHJpY3M6TmV0d29ya0xvYWRNZXRyaWNz
IHsgfV07CiB9CiAKLS0gKHZvaWQpcmVzb3VyY2VGaW5pc2hlZDooUGxhdGZvcm1NZWRpYVJlc291
cmNlJilyZXNvdXJjZSBtZXRyaWNzOihjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmKW1ldHJpY3MK
Ky0gKHZvaWQpcmVzb3VyY2VGaW5pc2hlZDooUGxhdGZvcm1NZWRpYVJlc291cmNlKilyZXNvdXJj
ZSBtZXRyaWNzOihjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmKW1ldHJpY3MKIHsKICAgICBbc2Vs
ZiBfcmVzb3VyY2U6cmVzb3VyY2UgbG9hZEZpbmlzaGVkV2l0aEVycm9yOm5pbCBtZXRyaWNzOm1l
dHJpY3NdOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRp
YS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUuY3BwCmluZGV4IDdmYjNlNWZiZGZj
M2IxZjVjNjg5NTMyZThhMGExODAzMjEzNzFiNTMuLjg3OTVhYmFjYWYwMDA1NjdmYTNhMjAxNmJj
ZjJmNDkxM2NiMTBiMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
bWVkaWEvTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZS5jcHAKQEAgLTExODAs
NyArMTE4MCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlOjpyZXF1ZXN0UmVzb3Vy
Y2UoUmVtb3RlTWVkaWFSZXNvdXJjZUlkZW50aWZpZXIgcmVtCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgLy8gUGxhdGZvcm1NZWRpYVJlc291cmNlIG93bnMgdGhlIFBsYXRmb3JtTWVkaWFS
ZXNvdXJjZUNsaWVudAotICAgIHJlc291cmNlLT5zZXRDbGllbnQobWFrZVVuaXF1ZTxSZW1vdGVN
ZWRpYVJlc291cmNlUHJveHk+KGNvbm5lY3Rpb24oKSwgKnJlc291cmNlLCByZW1vdGVNZWRpYVJl
c291cmNlSWRlbnRpZmllcikpOworICAgIHJlc291cmNlLT5zZXRDbGllbnQoYWRvcHRSZWYoKm5l
dyBSZW1vdGVNZWRpYVJlc291cmNlUHJveHkoY29ubmVjdGlvbigpLCAqcmVzb3VyY2UsIHJlbW90
ZU1lZGlhUmVzb3VyY2VJZGVudGlmaWVyKSkpOwogICAgIG1fbWVkaWFSZXNvdXJjZXMuYWRkKHJl
bW90ZU1lZGlhUmVzb3VyY2VJZGVudGlmaWVyLCBXVEZNb3ZlKHJlc291cmNlKSk7CiAKICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMv
Q2hhbmdlTG9nCmluZGV4IDA4YTAyODFjNmM2MDIzMDc1YjNkNDI0NzNjNzQ5ODEyYTg2OGI1ZTMu
LjcyMDM0YzZhYmIzNDNjODgyNDcyMDc2NDgzOWViYzhiNGRkYzIwYTYgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAy
MS0wMi0wNiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisg
ICAgICAgIFN5bnRoZXNpemUgcmFuZ2UgcmVzcG9uc2VzIGlmIG5lZWRlZCBpbiBXZWJDb3JlTlNV
UkxTZXNzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjEwNzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QYXJzZWRDb250ZW50UmFuZ2UuY3BwOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9DaGFsbGVuZ2UubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpj
bGllbnRDZXJ0U2VydmVyKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL01lZGlhTG9hZGluZy5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRlc3RWaWRlb0J5
dGVzKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnJ1blZpZGVvVGVzdCk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBT
ZXJ2ZXIuaDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBSZXNwb25zZTo6SFRUUFJlc3Bv
bnNlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OkhUVFBSZXNwb25zZTo6
SFRUUFJlc3BvbnNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL0hU
VFBTZXJ2ZXIubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjpSZXF1ZXN0
RGF0YTo6UmVxdWVzdERhdGEpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6YXBwZW5kVG9WZWN0
b3IpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6cGFyc2VQYXRoKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OnJlc3BvbmRUb1JlcXVlc3RzKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBSZXNwb25zZTo6Ym9keUZyb21TdHJpbmcpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFJlc3BvbnNlOjpzZXJpYWxpemUpOgorCiAyMDIxLTAy
LTA1ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFtN
YWNdIERpc2FibGUgTWVkaWFTZXNzaW9uVGVzdCBBUEkgdGVzdHMKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QYXJzZWRDb250ZW50UmFuZ2UuY3BwIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1BhcnNlZENvbnRlbnRSYW5nZS5jcHAKaW5k
ZXggMjBhOTU3ZTU5Yzg1MTYwYzgwODMxN2UxNWIwMTAyOGQ1ZmE5YjQ1OC4uMjVkMmQ2NzdmYjg4
ODYyMjVmZTMxZGI0OThlNWQ3NWQ2YzYwMGY0MCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL1BhcnNlZENvbnRlbnRSYW5nZS5jcHAKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1BhcnNlZENvbnRlbnRSYW5nZS5jcHAKQEAgLTI2LDYg
KzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2luY2x1ZGUgPFdlYkNvcmUvUGFyc2Vk
Q29udGVudFJhbmdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYXJzZWRSZXF1ZXN0UmFuZ2UuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CkBAIC05NSw0ICs5NiwzMSBAQCBURVNUKFdlYkNvcmUsIFBhcnNlZENvbnRlbnRSYW5nZVRv
U3RyaW5nKQogICAgIEFTU0VSVF9TVFJFUSgiIiwgUGFyc2VkQ29udGVudFJhbmdlKCkuaGVhZGVy
VmFsdWUoKS51dGY4KCkuZGF0YSgpKTsKIH0KIAorVEVTVChXZWJDb3JlLCBQYXJzZWRSZXF1ZXN0
UmFuZ2UpCit7CisgICAgVmVjdG9yPFN0cmluZz4gZmFpbHVyZUNhc2VzIHsKKyAgICAgICAgeyB9
LAorICAgICAgICAiIiwKKyAgICAgICAgImFiYyIsCisgICAgICAgICJieXRlcz0iLAorICAgICAg
ICAiYnl0ZXM9LSIsCisgICAgICAgICJieXRlcz1hYmMtIiwKKyAgICAgICAgImJ5dGVzPTEtYWJj
IiwKKyAgICAgICAgImJ5dGVzPTItMSIsCisgICAgICAgICJieXRlcz0xLSIsCisgICAgICAgICJi
eXRlcz0tMSIsCisgICAgICAgICJieXRlcz0xLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSIKKyAg
ICB9OworICAgIGZvciAoY29uc3QgYXV0byYgaW5wdXQgOiBmYWlsdXJlQ2FzZXMpCisgICAgICAg
IEVYUEVDVF9FUShXVEY6Om51bGxvcHQsIFBhcnNlZFJlcXVlc3RSYW5nZTo6cGFyc2UoaW5wdXQp
KTsKKworICAgIGF1dG8gY29tcGFyZSA9IFtdIChjb25zdCBTdHJpbmcmIGlucHV0LCBPcHRpb25h
bDxzaXplX3Q+IGJlZ2luLCBPcHRpb25hbDxzaXplX3Q+IGVuZCkgeworICAgICAgICBhdXRvIHJh
bmdlID0gUGFyc2VkUmVxdWVzdFJhbmdlOjpwYXJzZShpbnB1dCk7CisgICAgICAgIEVYUEVDVF9O
RShXVEY6Om51bGxvcHQsIHJhbmdlKTsKKyAgICAgICAgCisgICAgfTsKKyAgICBjb21wYXJlKCJi
eXRlcz0xLTEiLCAxLCAxKTsKKyAgICBjb21wYXJlKCJieXRlcz0xLTIiLCAxLCAyKTsKK30KKwog
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9DaGFs
bGVuZ2UubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0NoYWxsZW5n
ZS5tbQppbmRleCA5NjQwNzQ4YmY2MzAyOGQyYjc0NDg5OGNkMGQ0NjUzY2ZhOGJkNWQzLi4wYjc1
YmE0M2MwM2FlMzg4ODE2YTFmM2NjMmNlZTZmMTc3MWIxMDYxIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0NoYWxsZW5nZS5tbQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0NoYWxsZW5nZS5tbQpAQCAtNTg5LDcgKzU4
OSw3IEBAIHN0YXRpYyBIVFRQU2VydmVyIGNsaWVudENlcnRTZXJ2ZXIoKQogICAgICAgICB7ICIv
NS5wbmciLCB7IGxvbmdTdHJpbmcgfSB9LAogICAgICAgICB7ICIvNi5wbmciLCB7IGxvbmdTdHJp
bmcgfSB9LAogICAgICAgICB7ICIvcmVkaXJlY3RUb0Vycm9yIiwgeyAzMDEsIHt7ICJMb2NhdGlv
biIsICIvZXJyb3IiIH19IH0gfSwKLSAgICAgICAgeyAiL2Vycm9yIiwgeyBIVFRQU2VydmVyOjpI
VFRQUmVzcG9uc2U6OlRlcm1pbmF0ZUNvbm5lY3Rpb246OlllcyB9IH0sCisgICAgICAgIHsgIi9l
cnJvciIsIHsgSFRUUFJlc3BvbnNlOjpUZXJtaW5hdGVDb25uZWN0aW9uOjpZZXMgfSB9LAogICAg
IH0sIEhUVFBTZXJ2ZXI6OlByb3RvY29sOjpIdHRwcywgW10gKGF1dG8sIGF1dG8sIGF1dG8gY2Vy
dGlmaWNhdGVBbGxvd2VkKSB7CiAgICAgICAgIGNlcnRpZmljYXRlQWxsb3dlZCh0cnVlKTsKICAg
ICB9KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
TWVkaWFMb2FkaW5nLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9N
ZWRpYUxvYWRpbmcubW0KaW5kZXggNjRkYzViZjA1NmI5NTVhMjQ4ZjY3ZTIwZDA5Zjc0NzExMzFj
MTQ2NS4uMTI2YzhjMzJmMzE3YmJjMzYyNThlMjUwNGQwYTI0MTc3OTdiNTUzZiAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9NZWRpYUxvYWRpbmcubW0K
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9NZWRpYUxvYWRpbmcu
bW0KQEAgLTI3LDYgKzI3LDcgQEAKIAogI2ltcG9ydCAiSFRUUFNlcnZlci5oIgogI2ltcG9ydCAi
UGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQgIlRlc3RVSURlbGVnYXRlLmgiCiAjaW1wb3J0
ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51
bWJlcnMuaD4KIApAQCAtMTE2LDYgKzExNyw3NCBAQCBURVNUKE1lZGlhTG9hZGluZywgVXNlckFn
ZW50U3RyaW5nSExTKQogICAgIFV0aWw6OnJ1bigmcmVjZWl2ZWRNZWRpYVJlcXVlc3QpOwogfQog
Citjb25zdCBjaGFyKiB2aWRlb1BsYXlUZXN0SFRNTCA9IjxzY3JpcHQ+IgorICAgICJmdW5jdGlv
biBjcmVhdGVWaWRlb0VsZW1lbnQoKSB7IgorICAgICAgICAibGV0IHZpZGVvID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgndmlkZW8nKTsiCisgICAgICAgICJ2aWRlby5hZGRFdmVudExpc3RlbmVy
KCdlcnJvcicsICgpPT57YWxlcnQoJ2Vycm9yJyl9KTsiCisgICAgICAgICJ2aWRlby5hZGRFdmVu
dExpc3RlbmVyKCdwbGF5aW5nJywgKCk9PnthbGVydCgncGxheWluZycpfSk7IgorICAgICAgICAi
dmlkZW8uc3JjPSd2aWRlby5tcDQnOyIKKyAgICAgICAgInZpZGVvLmF1dG9wbGF5ID0gMTsiCisg
ICAgICAgICJkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHZpZGVvKTsiCisgICAgIn0iCisiPC9z
Y3JpcHQ+IgorIjxib2R5IG9ubG9hZD0nY3JlYXRlVmlkZW9FbGVtZW50KCknPjwvYm9keT4iOwor
CitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IHRlc3RWaWRlb0J5dGVzKCkKK3sKKyAgICBOU0RhdGEg
KmRhdGEgPSBbTlNEYXRhIGRhdGFXaXRoQ29udGVudHNPZlVSTDpbW05TQnVuZGxlIG1haW5CdW5k
bGVdIFVSTEZvclJlc291cmNlOkAidGVzdCIgd2l0aEV4dGVuc2lvbjpAIm1wNCIgc3ViZGlyZWN0
b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXV07CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHZl
Y3RvcjsKKyAgICB2ZWN0b3IuYXBwZW5kKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRh
LmJ5dGVzKSwgZGF0YS5sZW5ndGgpOworICAgIHJldHVybiB2ZWN0b3I7Cit9CisKK3N0YXRpYyB2
b2lkIHJ1blZpZGVvVGVzdChOU1VSTFJlcXVlc3QgKnJlcXVlc3QsIGNvbnN0IGNoYXIqIGV4cGVj
dGVkTWVzc2FnZSA9ICJwbGF5aW5nIikKK3sKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9w
dE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3Vy
YXRpb24uZ2V0KCkubWVkaWFUeXBlc1JlcXVpcmluZ1VzZXJBY3Rpb25Gb3JQbGF5YmFjayA9IFdL
QXVkaW92aXN1YWxNZWRpYVR5cGVOb25lOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tU
ZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgMzAwLCAz
MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKSBhZGRUb1dpbmRvdzpZRVNdKTsK
KyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpyZXF1ZXN0XTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
W3dlYlZpZXcgX3Rlc3Rfd2FpdEZvckFsZXJ0XSwgZXhwZWN0ZWRNZXNzYWdlKTsKK30KKworVEVT
VChNZWRpYUxvYWRpbmcsIFJhbmdlUmVxdWVzdFN5bnRoZXNpc1dpdGhDb250ZW50TGVuZ3RoKQor
eworICAgIEhUVFBTZXJ2ZXIgc2VydmVyKHsKKyAgICAgICAgeyIvIiwgeyB2aWRlb1BsYXlUZXN0
SFRNTCB9fSwKKyAgICAgICAgeyIvdmlkZW8ubXA0IiwgeyB0ZXN0VmlkZW9CeXRlcygpIH19Cisg
ICAgfSk7CisgICAgcnVuVmlkZW9UZXN0KHNlcnZlci5yZXF1ZXN0KCkpOworICAgIEVYUEVDVF9F
UShzZXJ2ZXIudG90YWxSZXF1ZXN0cygpLCAydSk7CiB9CiAKK1RFU1QoTWVkaWFMb2FkaW5nLCBS
YW5nZVJlcXVlc3RTeW50aGVzaXNXaXRob3V0Q29udGVudExlbmd0aCkKK3sKKyAgICBzaXplX3Qg
dG90YWxSZXF1ZXN0cyB7IDAgfTsKKyAgICBGdW5jdGlvbjx2b2lkKENvbm5lY3Rpb24pPiByZXNw
b25kVG9SZXF1ZXN0czsKKyAgICByZXNwb25kVG9SZXF1ZXN0cyA9IFsmXSAoQ29ubmVjdGlvbiBj
b25uZWN0aW9uKSB7CisgICAgICAgIGNvbm5lY3Rpb24ucmVjZWl2ZUhUVFBSZXF1ZXN0KFsmLCBj
b25uZWN0aW9uXSAoVmVjdG9yPGNoYXI+JiYgcmVxdWVzdCkgeworICAgICAgICAgICAgYXV0byBz
ZW5kUmVzcG9uc2UgPSBbJiwgY29ubmVjdGlvbl0gKEhUVFBSZXNwb25zZSByZXNwb25zZSwgSFRU
UFJlc3BvbnNlOjpJbmNsdWRlQ29udGVudExlbmd0aCBpbmNsdWRlQ29udGVudExlbmd0aCkgewor
ICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uc2VuZChyZXNwb25zZS5zZXJpYWxpemUoaW5jbHVk
ZUNvbnRlbnRMZW5ndGgpLCBbJiwgY29ubmVjdGlvbl0geworICAgICAgICAgICAgICAgICAgICBy
ZXNwb25kVG9SZXF1ZXN0cyhjb25uZWN0aW9uKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH07CisgICAgICAgICAgICB0b3RhbFJlcXVlc3RzKys7CisgICAgICAgICAgICBhdXRv
IHBhdGggPSBIVFRQU2VydmVyOjpwYXJzZVBhdGgocmVxdWVzdCk7CisgICAgICAgICAgICBpZiAo
cGF0aCA9PSAiLyIpCisgICAgICAgICAgICAgICAgc2VuZFJlc3BvbnNlKHsgdmlkZW9QbGF5VGVz
dEhUTUwgfSwgSFRUUFJlc3BvbnNlOjpJbmNsdWRlQ29udGVudExlbmd0aDo6WWVzKTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKHBhdGggPT0gIi92aWRlby5tcDQiKQorICAgICAgICAgICAgICAgIHNl
bmRSZXNwb25zZSh0ZXN0VmlkZW9CeXRlcygpLCBIVFRQUmVzcG9uc2U6OkluY2x1ZGVDb250ZW50
TGVuZ3RoOjpObyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgQVNTRVJUKHBh
dGguaXNOdWxsKCkpOworICAgICAgICB9KTsKKyAgICB9OworCisgICAgSFRUUFNlcnZlciBzZXJ2
ZXIoWyZdKENvbm5lY3Rpb24gY29ubmVjdGlvbikgeworICAgICAgICByZXNwb25kVG9SZXF1ZXN0
cyhjb25uZWN0aW9uKTsKKyAgICB9KTsKKyAgICBydW5WaWRlb1Rlc3Qoc2VydmVyLnJlcXVlc3Qo
KSwgImVycm9yIik7CisgICAgRVhQRUNUX0VRKHRvdGFsUmVxdWVzdHMsIDJ1KTsKK30KKworfSAv
LyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCiAjZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAmJiBV
U0UoQVZGT1VOREFUSU9OKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9I
VFRQU2VydmVyLmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIuaAppbmRl
eCAzOTVkYWY5MzFlMjhhNzFlNzdiODBmMTAxNzhmNTU5NDg1ZjM1MWMyLi5jMjgwZTVkYWE5OGVm
NjYyMzI2ZjFiY2Y0ZmYyODNlNWZhMzkwMzUwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL2NvY29hL0hUVFBTZXJ2ZXIuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hU
VFBTZXJ2ZXIuaApAQCAtMzUsMTAgKzM1LDEwIEBACiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7
CiAKIGNsYXNzIENvbm5lY3Rpb247CitzdHJ1Y3QgSFRUUFJlc3BvbnNlOwogCiBjbGFzcyBIVFRQ
U2VydmVyIHsKIHB1YmxpYzoKLSAgICBzdHJ1Y3QgSFRUUFJlc3BvbnNlOwogICAgIHN0cnVjdCBS
ZXF1ZXN0RGF0YTsKICAgICBlbnVtIGNsYXNzIFByb3RvY29sIDogdWludDhfdCB7IEh0dHAsIEh0
dHBzLCBIdHRwc1dpdGhMZWdhY3lUTFMsIEh0dHAyIH07CiAgICAgdXNpbmcgQ2VydGlmaWNhdGVW
ZXJpZmllciA9IEZ1bmN0aW9uPHZvaWQoc2VjX3Byb3RvY29sX21ldGFkYXRhX3QsIHNlY190cnVz
dF90LCBzZWNfcHJvdG9jb2xfdmVyaWZ5X2NvbXBsZXRlX3QpPjsKQEAgLTUzLDYgKzUzLDcgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgcmVzcG9uZFdpdGhPSyhDb25uZWN0aW9uKTsKICAg
ICBzdGF0aWMgdm9pZCByZXNwb25kV2l0aENoYWxsZW5nZVRoZW5PSyhDb25uZWN0aW9uKTsKKyAg
ICBzdGF0aWMgU3RyaW5nIHBhcnNlUGF0aChjb25zdCBWZWN0b3I8Y2hhcj4mIHJlcXVlc3QpOwog
CiBwcml2YXRlOgogICAgIHN0YXRpYyBSZXRhaW5QdHI8bndfcGFyYW1ldGVyc190PiBsaXN0ZW5l
clBhcmFtZXRlcnMoUHJvdG9jb2wsIENlcnRpZmljYXRlVmVyaWZpZXImJiwgUmV0YWluUHRyPFNl
Y0lkZW50aXR5UmVmPiYmLCBPcHRpb25hbDx1aW50MTZfdD4gcG9ydCk7CkBAIC04MSwxOCArODIs
MjAgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8bndfY29ubmVjdGlvbl90PiBtX2Nvbm5lY3Rp
b247CiB9OwogCi1zdHJ1Y3QgSFRUUFNlcnZlcjo6SFRUUFJlc3BvbnNlIHsKK3N0cnVjdCBIVFRQ
UmVzcG9uc2UgewogICAgIGVudW0gY2xhc3MgVGVybWluYXRlQ29ubmVjdGlvbiB7IE5vLCBZZXMg
fTsKLSAgICAKKworICAgIEhUVFBSZXNwb25zZShWZWN0b3I8dWludDhfdD4mJiBib2R5KQorICAg
ICAgICA6IGJvZHkoV1RGTW92ZShib2R5KSkgeyB9CiAgICAgSFRUUFJlc3BvbnNlKGNvbnN0IFN0
cmluZyYgYm9keSkKLSAgICAgICAgOiBib2R5KGJvZHkpIHsgfQotICAgIEhUVFBSZXNwb25zZShI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiYmIGhlYWRlckZpZWxkcywgU3RyaW5nJiYgYm9keSkKKyAg
ICAgICAgOiBib2R5KGJvZHlGcm9tU3RyaW5nKGJvZHkpKSB7IH0KKyAgICBIVFRQUmVzcG9uc2Uo
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mJiBoZWFkZXJGaWVsZHMsIGNvbnN0IFN0cmluZyYgYm9k
eSkKICAgICAgICAgOiBoZWFkZXJGaWVsZHMoV1RGTW92ZShoZWFkZXJGaWVsZHMpKQotICAgICAg
ICAsIGJvZHkoV1RGTW92ZShib2R5KSkgeyB9Ci0gICAgSFRUUFJlc3BvbnNlKHVuc2lnbmVkIHN0
YXR1c0NvZGUsIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiYgaGVhZGVyRmllbGRzID0geyB9LCBT
dHJpbmcmJiBib2R5ID0geyB9KQorICAgICAgICAsIGJvZHkoYm9keUZyb21TdHJpbmcoYm9keSkp
IHsgfQorICAgIEhUVFBSZXNwb25zZSh1bnNpZ25lZCBzdGF0dXNDb2RlLCBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiYmIGhlYWRlckZpZWxkcyA9IHsgfSwgY29uc3QgU3RyaW5nJiBib2R5ID0geyB9
KQogICAgICAgICA6IHN0YXR1c0NvZGUoc3RhdHVzQ29kZSkKICAgICAgICAgLCBoZWFkZXJGaWVs
ZHMoV1RGTW92ZShoZWFkZXJGaWVsZHMpKQotICAgICAgICAsIGJvZHkoV1RGTW92ZShib2R5KSkg
eyB9CisgICAgICAgICwgYm9keShib2R5RnJvbVN0cmluZyhib2R5KSkgeyB9CiAgICAgSFRUUFJl
c3BvbnNlKFRlcm1pbmF0ZUNvbm5lY3Rpb24gdGVybWluYXRlQ29ubmVjdGlvbikKICAgICAgICAg
OiB0ZXJtaW5hdGVDb25uZWN0aW9uKHRlcm1pbmF0ZUNvbm5lY3Rpb24pIHsgfQogCkBAIC0xMDEs
MTAgKzEwNCwxNCBAQCBzdHJ1Y3QgSFRUUFNlcnZlcjo6SFRUUFJlc3BvbnNlIHsKICAgICBIVFRQ
UmVzcG9uc2UoKSA9IGRlZmF1bHQ7CiAgICAgSFRUUFJlc3BvbnNlJiBvcGVyYXRvcj0oY29uc3Qg
SFRUUFJlc3BvbnNlJikgPSBkZWZhdWx0OwogICAgIEhUVFBSZXNwb25zZSYgb3BlcmF0b3I9KEhU
VFBSZXNwb25zZSYmKSA9IGRlZmF1bHQ7Ci0gICAgCisKKyAgICBlbnVtIGNsYXNzIEluY2x1ZGVD
b250ZW50TGVuZ3RoIDogYm9vbCB7IE5vLCBZZXMgfTsKKyAgICBWZWN0b3I8dWludDhfdD4gc2Vy
aWFsaXplKEluY2x1ZGVDb250ZW50TGVuZ3RoID0gSW5jbHVkZUNvbnRlbnRMZW5ndGg6Olllcyk7
CisgICAgc3RhdGljIFZlY3Rvcjx1aW50OF90PiBib2R5RnJvbVN0cmluZyhjb25zdCBTdHJpbmcm
KTsKKwogICAgIHVuc2lnbmVkIHN0YXR1c0NvZGUgeyAyMDAgfTsKICAgICBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiBoZWFkZXJGaWVsZHM7Ci0gICAgU3RyaW5nIGJvZHk7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IGJvZHk7CiAgICAgVGVybWluYXRlQ29ubmVjdGlvbiB0ZXJtaW5hdGVDb25uZWN0aW9u
IHsgVGVybWluYXRlQ29ubmVjdGlvbjo6Tm8gfTsKIH07CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29j
b2EvSFRUUFNlcnZlci5tbQppbmRleCAxMDc0NGE1YzQ0M2Y1YjM5ZmVmMzZjODM4ZTgwNTg2NGZh
ZmViMTYyLi5iYWJmNGQwMGIzNDI0ZjZmNTFkZGJiMzNkYmM1ZWMyZWYwZWE4ZWU5IDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0KKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCkBAIC0zOCw4ICszOCw4IEBAIG5hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogc3RydWN0IEhUVFBTZXJ2ZXI6OlJlcXVlc3REYXRhIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFJlcXVlc3REYXRhLCBXVEY6OkRlc3RydWN0aW9u
VGhyZWFkOjpNYWluUnVuTG9vcD4gewogICAgIFJlcXVlc3REYXRhKHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxzdGQ6OnBhaXI8U3RyaW5nLCBIVFRQUmVzcG9uc2U+PiByZXNwb25zZXMpCi0gICAgOiBy
ZXF1ZXN0TWFwKFtdKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8U3RyaW5nLCBIVFRQ
U2VydmVyOjpIVFRQUmVzcG9uc2U+PiBsaXN0KSB7Ci0gICAgICAgIEhhc2hNYXA8U3RyaW5nLCBI
VFRQU2VydmVyOjpIVFRQUmVzcG9uc2U+IG1hcDsKKyAgICA6IHJlcXVlc3RNYXAoW10oc3RkOjpp
bml0aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxTdHJpbmcsIEhUVFBSZXNwb25zZT4+IGxpc3QpIHsK
KyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIEhUVFBSZXNwb25zZT4gbWFwOwogICAgICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBsaXN0KQogICAgICAgICAgICAgbWFwLmFkZChwYWlyLmZpcnN0LCBwYWly
LnNlY29uZCk7CiAgICAgICAgIHJldHVybiBtYXA7CkBAIC0yMTIsNiArMjEyLDMxIEBAIHN0YXRp
YyBWZWN0b3I8dWludDhfdD4gdmVjdG9yRnJvbURhdGEoZGlzcGF0Y2hfZGF0YV90IGNvbnRlbnQp
CiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAKK3N0YXRpYyB2b2lkIGFwcGVuZFRvVmVjdG9yKFZl
Y3Rvcjx1aW50OF90PiYgdmVjdG9yLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBhdXRv
IHV0ZjggPSBzdHJpbmcudXRmOCgpOworICAgIHZlY3Rvci5hcHBlbmQocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50OF90Kj4odXRmOC5kYXRhKCkpLCB1dGY4Lmxlbmd0aCgpKTsKK30KKworU3Ry
aW5nIEhUVFBTZXJ2ZXI6OnBhcnNlUGF0aChjb25zdCBWZWN0b3I8Y2hhcj4mIHJlcXVlc3QpCit7
CisgICAgaWYgKCFyZXF1ZXN0LnNpemUoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBjb25z
dCBjaGFyKiBnZXRQYXRoUHJlZml4ID0gIkdFVCAiOworICAgIGNvbnN0IGNoYXIqIHBvc3RQYXRo
UHJlZml4ID0gIlBPU1QgIjsKKyAgICBjb25zdCBjaGFyKiBwYXRoU3VmZml4ID0gIiBIVFRQLzEu
MVxyXG4iOworICAgIGNvbnN0IGNoYXIqIHBhdGhFbmQgPSBzdHJuc3RyKHJlcXVlc3QuZGF0YSgp
LCBwYXRoU3VmZml4LCByZXF1ZXN0LnNpemUoKSk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShw
YXRoRW5kLCAiSFRUUFNlcnZlciBhc3N1bWVzIHJlcXVlc3QgaXMgSFRUUCAxLjEiKTsKKyAgICBz
aXplX3QgcGF0aFByZWZpeExlbmd0aCA9IDA7CisgICAgaWYgKCFtZW1jbXAocmVxdWVzdC5kYXRh
KCksIGdldFBhdGhQcmVmaXgsIHN0cmxlbihnZXRQYXRoUHJlZml4KSkpCisgICAgICAgIHBhdGhQ
cmVmaXhMZW5ndGggPSBzdHJsZW4oZ2V0UGF0aFByZWZpeCk7CisgICAgZWxzZSBpZiAoIW1lbWNt
cChyZXF1ZXN0LmRhdGEoKSwgcG9zdFBhdGhQcmVmaXgsIHN0cmxlbihwb3N0UGF0aFByZWZpeCkp
KQorICAgICAgICBwYXRoUHJlZml4TGVuZ3RoID0gc3RybGVuKHBvc3RQYXRoUHJlZml4KTsKKyAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKHBhdGhQcmVmaXhMZW5ndGgsICJIVFRQU2VydmVyIGFzc3Vt
ZXMgcmVxdWVzdCBpcyBHRVQgb3IgUE9TVCIpOworICAgIHNpemVfdCBwYXRoTGVuZ3RoID0gcGF0
aEVuZCAtIHJlcXVlc3QuZGF0YSgpIC0gcGF0aFByZWZpeExlbmd0aDsKKyAgICByZXR1cm4gU3Ry
aW5nKHJlcXVlc3QuZGF0YSgpICsgcGF0aFByZWZpeExlbmd0aCwgcGF0aExlbmd0aCk7Cit9CisK
IHZvaWQgSFRUUFNlcnZlcjo6cmVzcG9uZFRvUmVxdWVzdHMoQ29ubmVjdGlvbiBjb25uZWN0aW9u
LCBSZWY8UmVxdWVzdERhdGE+IHJlcXVlc3REYXRhKQogewogICAgIGNvbm5lY3Rpb24ucmVjZWl2
ZUhUVFBSZXF1ZXN0KFtjb25uZWN0aW9uLCByZXF1ZXN0RGF0YV0gKFZlY3RvcjxjaGFyPiYmIHJl
cXVlc3QpIG11dGFibGUgewpAQCAtMjE5LDMyICsyNDQsMTQgQEAgdm9pZCBIVFRQU2VydmVyOjpy
ZXNwb25kVG9SZXF1ZXN0cyhDb25uZWN0aW9uIGNvbm5lY3Rpb24sIFJlZjxSZXF1ZXN0RGF0YT4g
cmVxdWUKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgcmVxdWVzdERhdGEtPnJlcXVlc3RD
b3VudCsrOwogCi0gICAgICAgIGNvbnN0IGNoYXIqIGdldFBhdGhQcmVmaXggPSAiR0VUICI7Ci0g
ICAgICAgIGNvbnN0IGNoYXIqIHBvc3RQYXRoUHJlZml4ID0gIlBPU1QgIjsKLSAgICAgICAgY29u
c3QgY2hhciogcGF0aFN1ZmZpeCA9ICIgSFRUUC8xLjFcclxuIjsKLSAgICAgICAgY29uc3QgY2hh
ciogcGF0aEVuZCA9IHN0cm5zdHIocmVxdWVzdC5kYXRhKCksIHBhdGhTdWZmaXgsIHJlcXVlc3Qu
c2l6ZSgpKTsKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShwYXRoRW5kLCAiSFRUUFNlcnZl
ciBhc3N1bWVzIHJlcXVlc3QgaXMgSFRUUCAxLjEiKTsKLSAgICAgICAgc2l6ZV90IHBhdGhQcmVm
aXhMZW5ndGggPSAwOwotICAgICAgICBpZiAoIW1lbWNtcChyZXF1ZXN0LmRhdGEoKSwgZ2V0UGF0
aFByZWZpeCwgc3RybGVuKGdldFBhdGhQcmVmaXgpKSkKLSAgICAgICAgICAgIHBhdGhQcmVmaXhM
ZW5ndGggPSBzdHJsZW4oZ2V0UGF0aFByZWZpeCk7Ci0gICAgICAgIGVsc2UgaWYgKCFtZW1jbXAo
cmVxdWVzdC5kYXRhKCksIHBvc3RQYXRoUHJlZml4LCBzdHJsZW4ocG9zdFBhdGhQcmVmaXgpKSkK
LSAgICAgICAgICAgIHBhdGhQcmVmaXhMZW5ndGggPSBzdHJsZW4ocG9zdFBhdGhQcmVmaXgpOwot
ICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHBhdGhQcmVmaXhMZW5ndGgsICJIVFRQU2VydmVy
IGFzc3VtZXMgcmVxdWVzdCBpcyBHRVQgb3IgUE9TVCIpOwotICAgICAgICBzaXplX3QgcGF0aExl
bmd0aCA9IHBhdGhFbmQgLSByZXF1ZXN0LmRhdGEoKSAtIHBhdGhQcmVmaXhMZW5ndGg7Ci0gICAg
ICAgIFN0cmluZyBwYXRoKHJlcXVlc3QuZGF0YSgpICsgcGF0aFByZWZpeExlbmd0aCwgcGF0aExl
bmd0aCk7CisgICAgICAgIGF1dG8gcGF0aCA9IHBhcnNlUGF0aChyZXF1ZXN0KTsKICAgICAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRShyZXF1ZXN0RGF0YS0+cmVxdWVzdE1hcC5jb250YWlucyhwYXRo
KSwgIlRoaXMgSFRUUFNlcnZlciBkb2VzIG5vdCBrbm93IGhvdyB0byByZXNwb25kIHRvIGEgcmVx
dWVzdCBmb3IgJXMiLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgICAgIGF1dG8gcmVzcG9u
c2UgPSByZXF1ZXN0RGF0YS0+cmVxdWVzdE1hcC5nZXQocGF0aCk7CiAgICAgICAgIGlmIChyZXNw
b25zZS50ZXJtaW5hdGVDb25uZWN0aW9uID09IEhUVFBSZXNwb25zZTo6VGVybWluYXRlQ29ubmVj
dGlvbjo6WWVzKQogICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb24udGVybWluYXRlKCk7Ci0g
ICAgICAgIFN0cmluZ0J1aWxkZXIgcmVzcG9uc2VCdWlsZGVyOwotICAgICAgICByZXNwb25zZUJ1
aWxkZXIuYXBwZW5kKCJIVFRQLzEuMSAiLCByZXNwb25zZS5zdGF0dXNDb2RlLCAnICcsIHN0YXR1
c1RleHQocmVzcG9uc2Uuc3RhdHVzQ29kZSksICJcclxuIik7Ci0gICAgICAgIHJlc3BvbnNlQnVp
bGRlci5hcHBlbmQoIkNvbnRlbnQtTGVuZ3RoOiAiLCByZXNwb25zZS5ib2R5Lmxlbmd0aCgpLCAi
XHJcbiIpOwotICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiByZXNwb25zZS5oZWFkZXJGaWVsZHMp
Ci0gICAgICAgICAgICByZXNwb25zZUJ1aWxkZXIuYXBwZW5kKHBhaXIua2V5LCAiOiAiLCBwYWly
LnZhbHVlLCAiXHJcbiIpOwotICAgICAgICByZXNwb25zZUJ1aWxkZXIuYXBwZW5kKCJcclxuIik7
Ci0gICAgICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQocmVzcG9uc2UuYm9keSk7Ci0gICAgICAg
IGNvbm5lY3Rpb24uc2VuZChyZXNwb25zZUJ1aWxkZXIudG9TdHJpbmcoKSwgW2Nvbm5lY3Rpb24s
IHJlcXVlc3REYXRhXSB7CisKKyAgICAgICAgY29ubmVjdGlvbi5zZW5kKHJlc3BvbnNlLnNlcmlh
bGl6ZSgpLCBbY29ubmVjdGlvbiwgcmVxdWVzdERhdGFdIHsKICAgICAgICAgICAgIHJlc3BvbmRU
b1JlcXVlc3RzKGNvbm5lY3Rpb24sIHJlcXVlc3REYXRhKTsKICAgICAgICAgfSk7CiAgICAgfSk7
CkBAIC0zMzQsNiArMzQxLDI5IEBAIHZvaWQgQ29ubmVjdGlvbjo6Y2FuY2VsKCkKICAgICBtX2Nv
bm5lY3Rpb24gPSBudWxscHRyOwogfQogCitWZWN0b3I8dWludDhfdD4gSFRUUFJlc3BvbnNlOjpi
b2R5RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBWZWN0b3I8dWludDhf
dD4gdmVjdG9yOworICAgIGFwcGVuZFRvVmVjdG9yKHZlY3Rvciwgc3RyaW5nKTsKKyAgICByZXR1
cm4gdmVjdG9yOworfQorCitWZWN0b3I8dWludDhfdD4gSFRUUFJlc3BvbnNlOjpzZXJpYWxpemUo
SW5jbHVkZUNvbnRlbnRMZW5ndGggaW5jbHVkZUNvbnRlbnRMZW5ndGgpCit7CisgICAgU3RyaW5n
QnVpbGRlciByZXNwb25zZUJ1aWxkZXI7CisgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZCgiSFRU
UC8xLjEgIiwgc3RhdHVzQ29kZSwgJyAnLCBzdGF0dXNUZXh0KHN0YXR1c0NvZGUpLCAiXHJcbiIp
OworICAgIGlmIChpbmNsdWRlQ29udGVudExlbmd0aCA9PSBJbmNsdWRlQ29udGVudExlbmd0aDo6
WWVzKQorICAgICAgICByZXNwb25zZUJ1aWxkZXIuYXBwZW5kKCJDb250ZW50LUxlbmd0aDogIiwg
Ym9keS5zaXplKCksICJcclxuIik7CisgICAgZm9yIChhdXRvJiBwYWlyIDogaGVhZGVyRmllbGRz
KQorICAgICAgICByZXNwb25zZUJ1aWxkZXIuYXBwZW5kKHBhaXIua2V5LCAiOiAiLCBwYWlyLnZh
bHVlLCAiXHJcbiIpOworICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQoIlxyXG4iKTsKKyAgICAK
KyAgICBWZWN0b3I8dWludDhfdD4gYnl0ZXNUb1NlbmQ7CisgICAgYXBwZW5kVG9WZWN0b3IoYnl0
ZXNUb1NlbmQsIHJlc3BvbnNlQnVpbGRlci50b1N0cmluZygpKTsKKyAgICBieXRlc1RvU2VuZC5h
cHBlbmRWZWN0b3IoYm9keSk7CisgICAgcmV0dXJuIGJ5dGVzVG9TZW5kOworfQorCiB2b2lkIEgy
OjpDb25uZWN0aW9uOjpzZW5kKEZyYW1lJiYgZnJhbWUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKICAgICBhdXRvIGZyYW1lVHlwZSA9IGZy
YW1lLnR5cGUoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419750</attachid>
            <date>2021-02-09 12:04:37 -0800</date>
            <delta_ts>2021-02-15 17:34:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221072-20210209120436.patch</filename>
            <type>text/plain</type>
            <size>71216</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyNTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTY5YTcxNDBjOTY3ZGFl
MzgzNDc0MTQ0MGZiZjBkMmIxNDAyMmQ2ZC4uNTRkMWE1MTIxOTg4YmVmZmY1ZDVmZjRlNTFmN2M0
MjllNzI2Mjg3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIxLTAyLTA5ICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3ludGhl
c2l6ZSByYW5nZSByZXNwb25zZXMgaWYgbmVlZGVkIGluIFdlYkNvcmVOU1VSTFNlc3Npb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTA3MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmIEdhcmVuLgorCisgICAgICAgIFdoZW4gd2UgbWFrZSBh
IG1lZGlhIHJlcXVlc3Qgd2l0aCBhIFJhbmdlIEhUVFAgaGVhZGVyIGZpZWxkIGFuZCB0aGUgc2Vy
dmVyIGRvZXNuJ3QgcmVzcG9uZCB3aXRoIGEgMjA2IHdpdGggQ29udGVudC1SYW5nZSBoZWFkZXIg
ZmllbGQsCisgICAgICAgIHVudGlsIG5vdyB3ZSB3b3VsZCBqdXN0IGZhaWwgdG8gcGxheSB0aGUg
dmlkZW8uICBJbiBvcmRlciB0byBzdWNjZXNzZnVsbHkgcGxheSB0aGVzZSB2aWRlb3MsIEkgaW50
cm9kdWNlIHRoZSBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yIGNsYXNzLAorICAgICAgICB3aGljaCB3
aWxsIHJlY2VpdmUgdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBmb3Igc3VjaCBhIHZpZGVvIGFuZCBm
ZWVkIHRoZSBkYXRhIGludG8gV2ViQ29yZU5TVVJMU2Vzc2lvbiBhcyB0aGUgcmVxdWVzdGVkIHJh
bmdlcyBhcmUgcmVjZWl2ZWQuCisgICAgICAgIFNlZWtpbmcgaXMgcHJvYmxlbWF0aWMsIGJ1dCBh
dCBsZWFzdCB3ZSB3aWxsIHRyeSBvdXIgYmVzdCB0byBwbGF5IHRoZSB2aWRlby4KKworICAgICAg
ICBJIGFkZGVkIEFQSSB0ZXN0cyB0aGF0IHRyeSB0byBwbGF5IGEgdmlkZW8gdGhhdCBkaWRuJ3Qg
cGxheSBiZWZvcmUgdXNpbmcgYSBzZXJ2ZXIgdGhhdCBkb2Vzbid0IHN1cHBvcnQgcmFuZ2UgcmVx
dWVzdHMuICBNYW51YWwgdmVyaWZpY2F0aW9uIGlzIGFsc28gbmVjZXNzYXJ5LgorCisgICAgICAg
ICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybU1lZGlhUmVzb3VyY2U6OnNldENsaWVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvV2ViQ29yZUFWRlJlc291cmNlTG9hZGVyLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1SZXNvdXJjZU1lZGlhTG9hZGVyOjpjcmVhdGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUGFyc2VkUmVxdWVzdFJhbmdlLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpQYXJzZWRSZXF1ZXN0UmFuZ2U6OnBhcnNlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL1BhcnNlZFJlcXVlc3RSYW5nZS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlBhcnNlZFJlcXVlc3RSYW5nZTo6YmVnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UGFyc2VkUmVxdWVzdFJhbmdlOjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGFy
c2VkUmVxdWVzdFJhbmdlOjpQYXJzZWRSZXF1ZXN0UmFuZ2UpOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvY29jb2EvUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1JhbmdlUmVzcG9uc2VHZW5lcmF0b3IubW06IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6RGF0YTo6RGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpEYXRhOjpUYXNrRGF0
YTo6VGFza0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6c3ludGhlc2l6ZWRSZXNwb25zZUZvclJh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlUmVzcG9uc2VHZW5lcmF0b3I6OnJlbW92ZVRh
c2spOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6Z2l2ZVJlc3Bv
bnNlVG9UYXNrSWZCeXRlc0luUmFuZ2VSZWNlaXZlZCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5n
ZVJlc3BvbnNlR2VuZXJhdG9yOjpleHBlY3RlZENvbnRlbnRMZW5ndGhGcm9tRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpnaXZlUmVzcG9uc2VUb1Rhc2tz
V2l0aEZpbmlzaGVkUmFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlUmVzcG9uc2VHZW5l
cmF0b3I6OndpbGxIYW5kbGVSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlUmVzcG9u
c2VHZW5lcmF0b3I6OndpbGxTeW50aGVzaXplUmFuZ2VSZXNwb25zZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5oOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5tbToKKyAgICAgICAgKC1b
V2ViQ29yZU5TVVJMU2Vzc2lvbiByYW5nZVJlc3BvbnNlR2VuZXJhdG9yXSk6CisgICAgICAgICgt
W1dlYkNvcmVOU1VSTFNlc3Npb24gZGF0YVRhc2tXaXRoVVJMOl0pOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjpkYXRhU2VudCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OnJlc3BvbnNlUmVj
ZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xp
ZW50OjpzaG91bGRDYWNoZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVOU1VS
TFNlc3Npb25EYXRhVGFza0NsaWVudDo6ZGF0YVJlY2VpdmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6cmVkaXJlY3RSZWNlaXZlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmFjY2Vz
c0NvbnRyb2xDaGVja0ZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlTlNVUkxTZXNz
aW9uRGF0YVRhc2tDbGllbnQ6OmxvYWRGYWlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29y
ZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQpOgorICAgICAgICAoLVtX
ZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgX3Jlc3RhcnRdKToKKyAgICAgICAgKC1bV2ViQ29y
ZU5TVVJMU2Vzc2lvbkRhdGFUYXNrIF9maW5pc2hdKToKKyAgICAgICAgKC1bV2ViQ29yZU5TVVJM
U2Vzc2lvbkRhdGFUYXNrIHJlc291cmNlOnNlbnRCeXRlczp0b3RhbEJ5dGVzVG9CZVNlbnQ6XSk6
CisgICAgICAgICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayByZXNvdXJjZTpyZWNlaXZl
ZFJlc3BvbnNlOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxT
ZXNzaW9uRGF0YVRhc2sgcmVzb3VyY2U6c2hvdWxkQ2FjaGVSZXNwb25zZTpdKToKKyAgICAgICAg
KC1bV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrIHJlc291cmNlOnJlY2VpdmVkRGF0YTpsZW5n
dGg6XSk6CisgICAgICAgICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayByZXNvdXJjZTpy
ZWNlaXZlZFJlZGlyZWN0OnJlcXVlc3Q6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgt
W1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayBfcmVzb3VyY2U6bG9hZEZpbmlzaGVkV2l0aEVy
cm9yOm1ldHJpY3M6XSk6CisgICAgICAgICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayBy
ZXNvdXJjZTphY2Nlc3NDb250cm9sQ2hlY2tGYWlsZWRXaXRoRXJyb3I6XSk6CisgICAgICAgICgt
W1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayByZXNvdXJjZTpsb2FkRmFpbGVkV2l0aEVycm9y
Ol0pOgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgcmVzb3VyY2VGaW5p
c2hlZDptZXRyaWNzOl0pOgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sg
aW5pdFdpdGhTZXNzaW9uOmlkZW50aWZpZXI6VVJMOl0pOiBEZWxldGVkLgorCiAyMDIxLTAyLTA5
ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNd
IENvbm5lY3QgTWVkaWFTZXNzaW9uIHdpdGggTWVkaWFSZW1vdGUgYW5kIE5vd1BsYXlpbmcKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKaW5kZXggMTdlNWVmMDIyNmJlNmY0ODdjYzNlOGNhNjE1MmVlYzYzMTFjNWIwZC4uZDM5MDdm
NDk1NDNkMmI2M2ExN2ZjMzI0YWI0OGY1YTY0YzBhODA4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MyBAQAorMjAyMS0wMi0wOSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQu
b3JnPgorCisgICAgICAgIFN5bnRoZXNpemUgcmFuZ2UgcmVzcG9uc2VzIGlmIG5lZWRlZCBpbiBX
ZWJDb3JlTlNVUkxTZXNzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMjEwNzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZTo6cmVxdWVz
dFJlc291cmNlKToKKwogMjAyMS0wMi0wOSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNl
bkB3ZWJraXQub3JnPgogCiAgICAgICAgIFVzZSBDb21wbGV0aW9uSGFuZGxlciBpbnN0ZWFkIG9m
IERyYXdUb1BERkNhbGxiYWNrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCA3MWFmZmZlOGRiZTdjMjk2
OWY0N2U4ZGVlNjAwYzRkNmMwMmE0YWFhLi4yZDJmNGJjMGM0ODkwZDNjZDU4NGJhNTA5ZjE1N2Ey
MTVkNWNiZTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0MTEsNiArMTQxMSw3IEBAIHNldChX
ZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL05l
dHdvcmtpbmdDb250ZXh0LmgKICAgICBwbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZENvbnRlbnRSYW5n
ZS5oCiAgICAgcGxhdGZvcm0vbmV0d29yay9QYXJzZWRDb250ZW50VHlwZS5oCisgICAgcGxhdGZv
cm0vbmV0d29yay9QYXJzZWRSZXF1ZXN0UmFuZ2UuaAogICAgIHBsYXRmb3JtL25ldHdvcmsvUHJv
dGVjdGlvblNwYWNlLmgKICAgICBwbGF0Zm9ybS9uZXR3b3JrL1Byb3RlY3Rpb25TcGFjZUJhc2Uu
aAogICAgIHBsYXRmb3JtL25ldHdvcmsvUHJvdGVjdGlvblNwYWNlSGFzaC5oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CmluZGV4IDA0NWNmMjcwNmMwMzY3ZTRjZjkwYjMyZGRkNzkxNDZkNWZhMTFkZmYuLjhjMDNiOTMy
NjQ5ODVmMGJiMWVlOWY2ZDIwMjNlMzQ4MzA5MmY0NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMTIy
LDYgKzIxMjIsNyBAQCBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdGF0ZU5vdGlmaWVyLmNwcAog
cGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb24uY3BwCiBwbGF0Zm9ybS9uZXR3
b3JrL1BhcnNlZENvbnRlbnRSYW5nZS5jcHAKIHBsYXRmb3JtL25ldHdvcmsvUGFyc2VkQ29udGVu
dFR5cGUuY3BwCitwbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZFJlcXVlc3RSYW5nZS5jcHAKIHBsYXRm
b3JtL25ldHdvcmsvUHJvdGVjdGlvblNwYWNlQmFzZS5jcHAKIHBsYXRmb3JtL25ldHdvcmsvUHJv
eHlTZXJ2ZXIuY3BwCiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlRXJyb3JCYXNlLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggZDJiMzQyMzYyNTVhNDE3ZjNhYTE2MzY1ZTEwM2JiN2Mx
MjIwNzI0Ni4uZDMxOWUxOGYxMjhhYThlZDZmNWMwZWNkZWRiYjllN2UzNjNmNTE2MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC01NzAsNiArNTcwLDcgQEAgcGxhdGZvcm0vbmV0d29yay9j
b2NvYS9DcmVkZW50aWFsQ29jb2EubW0KIHBsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya0xv
YWRNZXRyaWNzLm1tCiBwbGF0Zm9ybS9uZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lv
bkNvY29hLm1tCiBwbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1Byb3RlY3Rpb25TcGFjZUNvY29hLm1t
CitwbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1JhbmdlUmVzcG9uc2VHZW5lcmF0b3IubW0KIHBsYXRm
b3JtL25ldHdvcmsvY29jb2EvUmVzb3VyY2VSZXF1ZXN0Q29jb2EubW0KIHBsYXRmb3JtL25ldHdv
cmsvY29jb2EvUmVzb3VyY2VSZXNwb25zZUNvY29hLm1tIEBuby11bmlmeSAvLyBVbnNhZmUgdG8g
dW5pZnkgdW50aWwgcmRhcjovL3Byb2JsZW0vNDg4NTMxMzcgaXMgcmVzb2x2ZWQKIHBsYXRmb3Jt
L25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5tbSBAbm8tdW5pZnkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5YTZm
OTBiMDg2ZmMyNzdkMjM5NmE1NzU3OGMyMjI0MjRmNzA3NDkyLi4xMGMwNGY0Nzg0ZDA2MTQyNWVi
MDAyM2FlOTUwMzgxODM4ZmQ0OTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xOTQyLDYgKzE5NDIsOCBAQAogCQk1QzJCMUFF
QzIyMzk3RUJDMDBCOTFDRjcgLyogUmVzb3VyY2VSZXNwb25zZUNvY29hLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTFGNzhEMEIxQzI1NDIyQzAwMjQ1
NDQ2IC8qIFJlc291cmNlUmVzcG9uc2VDb2NvYS5tbSAqLzsgfTsKIAkJNUM0MzA0QjExOTFBQzkw
ODAwMEUyQkMwIC8qIEVYVFNoYWRlclRleHR1cmVMT0QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNDMwNEFFMTkxQUM5MDgwMDBFMkJDMCAvKiBFWFRT
aGFkZXJUZXh0dXJlTE9ELmggKi87IH07CiAJCTVDNDMwNEI2MTkxQUVGNDYwMDBFMkJDMCAvKiBK
U0VYVFNoYWRlclRleHR1cmVMT0QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVDNDMwNEI0MTkxQUVGNDYwMDBFMkJDMCAvKiBKU0VYVFNoYWRlclRleHR1
cmVMT0QuaCAqLzsgfTsKKwkJNUM0QTBGRDcyNUMzNDM1MDAwRDlFRTk3IC8qIFJhbmdlUmVzcG9u
c2VHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDVDNEEwRkQ1MjVDMzQyQzgwMEQ5RUU5NyAvKiBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNUM0QTBG
REEyNUMzNDQ5QTAwRDlFRTk3IC8qIFBhcnNlZFJlcXVlc3RSYW5nZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM0QTBGRDgyNUMzNDQ2QzAwRDlFRTk3
IC8qIFBhcnNlZFJlcXVlc3RSYW5nZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTVDNTNEQ0UxMjQ0NjVERkMwMEE5MzEyNCAvKiBBcHBsZVBheVNl
dHVwRmVhdHVyZVdlYkNvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDNTNEQ0NGMjQ0NjQ0OTkwMEE5MzEyNCAvKiBBcHBsZVBheVNldHVwRmVhdHVy
ZVdlYkNvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1QzUzRENFNzI0NDY4QUQyMDBBOTMxMjQgLyogUGF5bWVudEluc3RhbGxtZW50Q29uZmln
dXJhdGlvbldlYkNvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDVDNTNEQ0NFMjQ0NjQ0OTkwMEE5MzEyNCAvKiBQYXltZW50SW5zdGFsbG1lbnRDb25m
aWd1cmF0aW9uV2ViQ29yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTVDNTNEQ0VBMjQ0NjhGQjQwMEE5MzEyNCAvKiBBcHBsZVBheVNldHVwV2Vi
Q29yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM1
M0RDQ0IyNDQ2NDQ5ODAwQTkzMTI0IC8qIEFwcGxlUGF5U2V0dXBXZWJDb3JlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk0OTIsNiArOTQ5NCwx
MSBAQAogCQk1QzQzMDRBRjE5MUFDOTA4MDAwRTJCQzAgLyogRVhUU2hhZGVyVGV4dHVyZUxPRC5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUU2hhZGVyVGV4dHVyZUxPRC5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDNDMwNEIzMTkxQUVGNDYwMDBFMkJDMCAvKiBKU0VY
VFNoYWRlclRleHR1cmVMT0QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNUM0MzA0QjQxOTFBRUY0NjAwMEUyQkMwIC8qIEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0VYVFNoYWRlclRleHR1cmVMT0QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QTBGRDMyNUMzNDJDNzAwRDlFRTk3IC8q
IFJhbmdlUmVzcG9uc2VHZW5lcmF0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1QzRBMEZENTI1QzM0MkM4MDBEOUVFOTcgLyogUmFuZ2VSZXNwb25zZUdlbmVy
YXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYW5nZVJlc3BvbnNlR2Vu
ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEEwRkQ2MjVDMzQyREIw
MEQ5RUU5NyAvKiBDZXJ0aWZpY2F0ZUluZm9Db2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IENlcnRpZmljYXRlSW5mb0NvY29hLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1QzRBMEZEODI1QzM0NDZDMDBEOUVFOTcgLyogUGFyc2VkUmVxdWVz
dFJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlZFJlcXVlc3RS
YW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzRBMEZEOTI1QzM0NDZEMDBE
OUVFOTcgLyogUGFyc2VkUmVxdWVzdFJhbmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFBhcnNlZFJlcXVlc3RSYW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTVDNTM4MUFGMUQ4NzkzRTAwMEUyRUJFNiAvKiBVUkxTZWFyY2hQYXJhbXMuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFVSTFNlYXJjaFBhcmFtcy5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTVDNTM4MUIwMUQ4N0Q0NTcwMEUyRUJFNiAvKiBVUkxTZWFyY2hQ
YXJhbXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVVJMU2VhcmNo
UGFyYW1zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM1MzgxQjExRDg3RDQ1
NzAwRTJFQkU2IC8qIFVSTFNlYXJjaFBhcmFtcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBVUkxTZWFyY2hQYXJhbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTIxODQwLDYgKzIxODQ3LDggQEAKIAkJCQlDRENENDFFNjFDM0REQjA5MDA5NjVEOTkgLyogUGFy
c2VkQ29udGVudFJhbmdlLmggKi8sCiAJCQkJNDQ3OTU4MDIxNjQzQjQ3QjAwMUUwQTdGIC8qIFBh
cnNlZENvbnRlbnRUeXBlLmNwcCAqLywKIAkJCQk0NDc5NTgwMzE2NDNCNDdCMDAxRTBBN0YgLyog
UGFyc2VkQ29udGVudFR5cGUuaCAqLywKKwkJCQk1QzRBMEZEOTI1QzM0NDZEMDBEOUVFOTcgLyog
UGFyc2VkUmVxdWVzdFJhbmdlLmNwcCAqLywKKwkJCQk1QzRBMEZEODI1QzM0NDZDMDBEOUVFOTcg
LyogUGFyc2VkUmVxdWVzdFJhbmdlLmggKi8sCiAJCQkJMzdCQUFFNTcxOTgwRDFERDAwNURGRTcx
IC8qIFByb3RlY3Rpb25TcGFjZS5oICovLAogCQkJCTUxNEM3NjVGMENFOTIzQTEwMDdFRjNDRCAv
KiBQcm90ZWN0aW9uU3BhY2VCYXNlLmNwcCAqLywKIAkJCQk1MTRDNzY2MDBDRTkyM0ExMDA3RUYz
Q0QgLyogUHJvdGVjdGlvblNwYWNlQmFzZS5oICovLApAQCAtMjI5MjIsNiArMjI5MzEsNyBAQAog
CQk3RTdERTFGRTE5NUNFRjJEMDAzNTM2M0IgLyogY29jb2EgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTVDNEEwRkQ2MjVDMzQyREIwMEQ5RUU5NyAvKiBD
ZXJ0aWZpY2F0ZUluZm9Db2NvYS5tbSAqLywKIAkJCQk1MUQxMjQ4QzFFNzM2NDU2MDAyQjI4MjAg
LyogQ29va2llQ29jb2EubW0gKi8sCiAJCQkJNTEyMEJCQUQxRjFDRTc3MDAwRUZFQkYxIC8qIENv
b2tpZVN0b3JhZ2VPYnNlcnZlci5oICovLAogCQkJCTUxMjBCQkFDMUYxQ0U3NzAwMEVGRUJGMSAv
KiBDb29raWVTdG9yYWdlT2JzZXJ2ZXIubW0gKi8sCkBAIC0yMjkzMiw2ICsyMjk0Miw4IEBACiAJ
CQkJNTFEMTI0OEExRTczNjI1QzAwMkIyODIwIC8qIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29h
Lm1tICovLAogCQkJCTM3MkFEQTM3MTk3RjQ3QjkwMEZDNTAxRSAvKiBQcm90ZWN0aW9uU3BhY2VD
b2NvYS5oICovLAogCQkJCTM3MkFEQTM5MTk3RjY4NzYwMEZDNTAxRSAvKiBQcm90ZWN0aW9uU3Bh
Y2VDb2NvYS5tbSAqLywKKwkJCQk1QzRBMEZENTI1QzM0MkM4MDBEOUVFOTcgLyogUmFuZ2VSZXNw
b25zZUdlbmVyYXRvci5oICovLAorCQkJCTVDNEEwRkQzMjVDMzQyQzcwMEQ5RUU5NyAvKiBSYW5n
ZVJlc3BvbnNlR2VuZXJhdG9yLm1tICovLAogCQkJCTdFN0RFMUZDMTk1Q0VGMjYwMDM1MzYzQiAv
KiBSZXNvdXJjZVJlcXVlc3RDb2NvYS5tbSAqLywKIAkJCQlBMUY3OEQwQjFDMjU0MjJDMDAyNDU0
NDYgLyogUmVzb3VyY2VSZXNwb25zZUNvY29hLm1tICovLAogCQkJCUNEMjI1QzBBMUM0NkZCRjQw
MDE0MDc2MSAvKiBXZWJDb3JlTlNVUkxTZXNzaW9uLmggKi8sCkBAIC0zMzk5OSw2ICszNDAxMSw3
IEBACiAJCQkJQTE4ODkwQUYxQUExM0YyNTAwMjZDMzAxIC8qIFBhcmVudGFsQ29udHJvbHNDb250
ZW50RmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRENENDFFODFDM0REQjBBMDA5NjVEOTkg
LyogUGFyc2VkQ29udGVudFJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NDc5NTgwNDE2NDNC
NDlBMDAxRTBBN0YgLyogUGFyc2VkQ29udGVudFR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTVD
NEEwRkRBMjVDMzQ0OUEwMEQ5RUU5NyAvKiBQYXJzZWRSZXF1ZXN0UmFuZ2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUzNkQ1QTIzMTkzRThFMEMwMENFNENBQiAvKiBQYXJzaW5nVXRpbGl0aWVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RDQTEyNTFGMTJEMDAzRUYyNjkgLyogUGFzc3dvcmRJ
bnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTRCMjcwOEM3MEFGMTlFRTQwMDY1MTI3RiAv
KiBQYXN0ZWJvYXJkLmggaW4gSGVhZGVycyAqLywKQEAgLTM0MjAyLDYgKzM0MjE1LDcgQEAKIAkJ
CQk5M0YxOTkxODA4MjQ1RTU5MDAxRTlBQkMgLyogUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzRDlENTNDMERBMjdFMTgwMDc3MjE2QyAvKiBSYW5nZUJvdW5kYXJ5UG9pbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUY1NUIzRENFMTI1MUYxMkQwMDNFRjI2OSAvKiBSYW5nZUlucHV0VHlwZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNUM0QTBGRDcyNUMzNDM1MDAwRDlFRTk3IC8qIFJhbmdlUmVz
cG9uc2VHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFODRFOUUxMTc2NjhCRjEwMDgx
NUI2OCAvKiBSYXN0ZXJTaGFwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg0RDgyN0MxMUQzMzNF
RDAwOTcyOTkwIC8qIFJhd0RhdGFEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDE2RTZGRTgxQkJEMTJERjAwMEE2MDQzIC8qIFJlYWRhYmxlQnl0ZVN0cmVhbUludGVybmFsc0J1
aWx0aW5zLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmgKaW5kZXgg
NTdiZmU4YWNkNjI4NWZlYjliMmViOGIyMjJhMmIxNDA5YTIxMDE2MC4uM2VkNGUwNWM0Mzk0ZGZm
NjNhZTVmYzZiYTFlZjFhODA0MjU0M2NiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmgK
QEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKIGNsYXNzIFJlc291cmNlUmVx
dWVzdDsKIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CiAKLWNsYXNzIFBsYXRmb3JtTWVkaWFSZXNv
dXJjZUNsaWVudCB7CitjbGFzcyBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VDbGllbnQgOiBwdWJsaWMg
UmVmQ291bnRlZDxQbGF0Zm9ybU1lZGlhUmVzb3VyY2VDbGllbnQ+IHsKIHB1YmxpYzoKICAgICB2
aXJ0dWFsIH5QbGF0Zm9ybU1lZGlhUmVzb3VyY2VDbGllbnQoKSA9IGRlZmF1bHQ7CiAKQEAgLTgx
LDExICs4MSwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKSB7IH0KICAgICB2
aXJ0dWFsIGJvb2wgZGlkUGFzc0FjY2Vzc0NvbnRyb2xDaGVjaygpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAKLSAgICB2b2lkIHNldENsaWVudChzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1NZWRp
YVJlc291cmNlQ2xpZW50PiYmIGNsaWVudCkgeyBtX2NsaWVudCA9IFdURk1vdmUoY2xpZW50KTsg
fQorICAgIHZvaWQgc2V0Q2xpZW50KFJlZlB0cjxQbGF0Zm9ybU1lZGlhUmVzb3VyY2VDbGllbnQ+
JiYgY2xpZW50KSB7IG1fY2xpZW50ID0gV1RGTW92ZShjbGllbnQpOyB9CiAgICAgUGxhdGZvcm1N
ZWRpYVJlc291cmNlQ2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudC5nZXQoKTsgfQog
CiBwcm90ZWN0ZWQ6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtTWVkaWFSZXNvdXJjZUNs
aWVudD4gbV9jbGllbnQ7CisgICAgUmVmUHRyPFBsYXRmb3JtTWVkaWFSZXNvdXJjZUNsaWVudD4g
bV9jbGllbnQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9XZWJDb3JlQVZG
UmVzb3VyY2VMb2FkZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9XZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIubW0KaW5kZXggYzg1NWRlMDg4
YjZkOTQ0ZGE2ZmM0NTUyMmZmYmIyZjUwMjhjNjIxYy4uNGQ1ZjM1ODBlYmFkMzBiZjAwYzM2OWRh
MDE1ZjAzOGU2MGZlNWJhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvV2ViQ29yZUFWRlJlc291cmNlTG9hZGVyLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1dlYkNv
cmVBVkZSZXNvdXJjZUxvYWRlci5tbQpAQCAtMTcwLDcgKzE3MCw3IEBAIFdlYWtQdHI8UGxhdGZv
cm1SZXNvdXJjZU1lZGlhTG9hZGVyPiBQbGF0Zm9ybVJlc291cmNlTWVkaWFMb2FkZXI6OmNyZWF0
ZShXZWJDb3JlCiAgICAgaWYgKCFyZXNvdXJjZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgYXV0byogcmVzb3VyY2VQb2ludGVyID0gcmVzb3VyY2UuZ2V0KCk7Ci0gICAgYXV0byBjbGll
bnQgPSBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1SZXNvdXJjZU1lZGlhTG9hZGVyPihuZXcgUGxh
dGZvcm1SZXNvdXJjZU1lZGlhTG9hZGVyIHsgcGFyZW50LCByZXNvdXJjZS5yZWxlYXNlTm9uTnVs
bCgpIH0pOworICAgIGF1dG8gY2xpZW50ID0gYWRvcHRSZWYoKm5ldyBQbGF0Zm9ybVJlc291cmNl
TWVkaWFMb2FkZXIgeyBwYXJlbnQsIHJlc291cmNlLnJlbGVhc2VOb25OdWxsKCkgfSk7CiAgICAg
YXV0byByZXN1bHQgPSBtYWtlV2Vha1B0cihjbGllbnQuZ2V0KCkpOwogCiAgICAgcmVzb3VyY2VQ
b2ludGVyLT5zZXRDbGllbnQoV1RGTW92ZShjbGllbnQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFt
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktp
dFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKaW5kZXggYzg0NGJlMmRkMzcyN2VmMjc2NGI3MjU3MDZk
MjIwNjI2N2JlYjQ5Ny4uZTc5Zjg2NWQ4ODAyOTg4NDAxNDExNzAxZDM3ZjU3NjhkMjVhZmJlYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dl
YktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTY5OSw3
ICs2OTksNyBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNNYWtlUmVxdWVzdChXZWJLaXRXZWJT
cmMqIHNyYywgRGF0YU11dGV4PFdlYktpdFdlYlNyY1ByaQogICAgICAgICBQbGF0Zm9ybU1lZGlh
UmVzb3VyY2VMb2FkZXI6OkxvYWRPcHRpb25zIGxvYWRPcHRpb25zID0gMDsKICAgICAgICAgbWVt
YmVycy0+cmVzb3VyY2UgPSBtZW1iZXJzLT5sb2FkZXItPnJlcXVlc3RSZXNvdXJjZShSZXNvdXJj
ZVJlcXVlc3QocmVxdWVzdCksIGxvYWRPcHRpb25zKTsKICAgICAgICAgaWYgKG1lbWJlcnMtPnJl
c291cmNlKSB7Ci0gICAgICAgICAgICBtZW1iZXJzLT5yZXNvdXJjZS0+c2V0Q2xpZW50KG1ha2VV
bmlxdWU8Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ+KHByb3RlY3Rvci5nZXQoKSwgUmVz
b3VyY2VSZXF1ZXN0KHJlcXVlc3QpLCByZXF1ZXN0TnVtYmVyKSk7CisgICAgICAgICAgICBtZW1i
ZXJzLT5yZXNvdXJjZS0+c2V0Q2xpZW50KGFkb3B0UmVmKCpuZXcgQ2FjaGVkUmVzb3VyY2VTdHJl
YW1pbmdDbGllbnQocHJvdGVjdG9yLmdldCgpLCBSZXNvdXJjZVJlcXVlc3QocmVxdWVzdCksIHJl
cXVlc3ROdW1iZXIpKSk7CiAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHByb3RlY3Rvci5n
ZXQoKSwgIlN0YXJ0ZWQgcmVxdWVzdCBSJXUiLCByZXF1ZXN0TnVtYmVyKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QocHJvdGVjdG9yLmdldCgpLCAiRmFp
bGVkIHRvIHNldHVwIHN0cmVhbWluZyBjbGllbnQgdG8gaGFuZGxlIFIldSIsIHJlcXVlc3ROdW1i
ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QYXJzZWRS
ZXF1ZXN0UmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QYXJzZWRS
ZXF1ZXN0UmFuZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJkOWFjZmE5YWYxYTZhYmIwOWFjNWVlMjExYjg3
MmQ4NTFiMTQ5YTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1BhcnNlZFJlcXVlc3RSYW5nZS5jcHAKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUGFyc2VkUmVxdWVzdFJhbmdlLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitPcHRpb25hbDxQYXJzZWRSZXF1
ZXN0UmFuZ2U+IFBhcnNlZFJlcXVlc3RSYW5nZTo6cGFyc2UoY29uc3QgU3RyaW5nJiBpbnB1dCkK
K3sKKyAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMyNzZWN0aW9uLTIu
MSBidXQgYXNzdW1pbmcgdGhlcmUgd2lsbCBhbHdheXMgYmUgYSBiZWdpbiBhbmQgYW4gZW5kIG9y
IHBhcnNpbmcgd2lsbCBmYWlsCisgICAgaWYgKCFpbnB1dC5zdGFydHNXaXRoKCJieXRlcz0iX3Mp
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgc2l6ZV90IGJlZ2luIHsgMCB9
OworICAgIHNpemVfdCBlbmQgeyAwIH07CisgICAgc2l6ZV90IHJhbmdlQmVnaW5Qb3NpdGlvbiA9
IDY7CisgICAgc2l6ZV90IGRhc2hQb3NpdGlvbiA9IGlucHV0LmZpbmQoJy0nLCByYW5nZUJlZ2lu
UG9zaXRpb24pOworICAgIGlmIChkYXNoUG9zaXRpb24gPT0gbm90Rm91bmQpCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAvLyBGSVhNRTogQWRkIFN0cmluZ1ZpZXcudG9VSW50
NjRTdHJpY3QgdG8gYXZvaWQgdGhlc2UgdW5uZWNlc3NhcnkgU3RyaW5nIGNvcGllcy4KKyAgICAv
LyBTYW1lIGluIFBhcnNlZENvbnRlbnRSYW5nZS4KKyAgICBib29sIG9rID0gdHJ1ZTsKKyAgICBT
dHJpbmcgYmVnaW5TdHJpbmcgPSBpbnB1dC5zdWJzdHJpbmcocmFuZ2VCZWdpblBvc2l0aW9uLCBk
YXNoUG9zaXRpb24gLSByYW5nZUJlZ2luUG9zaXRpb24pOworICAgIGJlZ2luID0gYmVnaW5TdHJp
bmcudG9VSW50NjRTdHJpY3QoJm9rKTsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgU3RyaW5nIGVuZFN0cmluZyA9IGlucHV0LnN1YnN0cmluZyhkYXNo
UG9zaXRpb24gKyAxKTsKKyAgICBlbmQgPSBlbmRTdHJpbmcudG9VSW50NjRTdHJpY3QoJm9rKTsK
KyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYgKGJl
Z2luID4gZW5kKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHt7
IGJlZ2luLCBlbmQgfX07Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUGFyc2VkUmVxdWVzdFJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1BhcnNlZFJlcXVlc3RSYW5nZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhYmRiNjNlYWQ1ZWVm
MTNkOTI4NTUwNDlmNmYxM2ZlOGUxNjliNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZFJlcXVlc3RSYW5nZS5oCkBAIC0wLDAgKzEsNDgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRz
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGFyc2VkUmVxdWVzdFJhbmdlIHsK
K3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgT3B0aW9uYWw8UGFyc2VkUmVxdWVz
dFJhbmdlPiBwYXJzZShjb25zdCBTdHJpbmcmKTsKKworICAgIHNpemVfdCBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fYmVnaW47IH0KKyAgICBzaXplX3QgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9l
bmQ7IH0KKworcHJpdmF0ZToKKyAgICBQYXJzZWRSZXF1ZXN0UmFuZ2Uoc2l6ZV90IGJlZ2luLCBz
aXplX3QgZW5kKQorICAgICAgICA6IG1fYmVnaW4oYmVnaW4pCisgICAgICAgICwgbV9lbmQoZW5k
KSB7IH0KKworICAgIHNpemVfdCBtX2JlZ2luIHsgMCB9OworICAgIHNpemVfdCBtX2VuZCB7IDAg
fTsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y29jb2EvUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jb2NvYS9SYW5nZVJlc3BvbnNlR2VuZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTFiMzhm
N2E3MTAzMzAzODdhYzNjY2VhY2I4MTg0M2U1YTM0ZmNkNwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvUmFuZ2VSZXNwb25zZUdlbmVyYXRv
ci5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgPHd0Zi9VUkxIYXNoLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworT0JKQ19DTEFT
UyBOU1VSTFJlcXVlc3Q7CitPQkpDX0NMQVNTIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzazsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQYXJzZWRSZXF1ZXN0UmFuZ2U7CitjbGFz
cyBQbGF0Zm9ybU1lZGlhUmVzb3VyY2U7CitjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworCitjbGFz
cyBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFJhbmdlUmVz
cG9uc2VHZW5lcmF0b3I+IHsKK3B1YmxpYzoKKyAgICBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yKCk7
CisgICAgflJhbmdlUmVzcG9uc2VHZW5lcmF0b3IoKTsKKworICAgIGJvb2wgd2lsbFN5bnRoZXNp
emVSYW5nZVJlc3BvbnNlcyhXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgKiwgUGxhdGZvcm1N
ZWRpYVJlc291cmNlJiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIGJvb2wgd2lsbEhh
bmRsZVJlcXVlc3QoV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICosIE5TVVJMUmVxdWVzdCAq
KTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgRGF0YTsKKyAgICBjbGFzcyBNZWRpYVJlc291cmNl
Q2xpZW50OworICAgIHZvaWQgZ2l2ZVJlc3BvbnNlVG9UYXNrc1dpdGhGaW5pc2hlZFJhbmdlcyhE
YXRhJik7CisgICAgdm9pZCBnaXZlUmVzcG9uc2VUb1Rhc2tJZkJ5dGVzSW5SYW5nZVJlY2VpdmVk
KFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAqLCBjb25zdCBQYXJzZWRSZXF1ZXN0UmFuZ2Um
LCBPcHRpb25hbDxzaXplX3Q+IGV4cGVjdGVkQ29udGVudExlbmd0aCwgY29uc3QgRGF0YSYpOwor
ICAgIHN0YXRpYyBPcHRpb25hbDxzaXplX3Q+IGV4cGVjdGVkQ29udGVudExlbmd0aEZyb21EYXRh
KGNvbnN0IERhdGEmKTsKKyAgICB2b2lkIHJlbW92ZVRhc2soV2ViQ29yZU5TVVJMU2Vzc2lvbkRh
dGFUYXNrICopOworCisgICAgSGFzaE1hcDxVUkwsIHN0ZDo6dW5pcXVlX3B0cjxEYXRhPj4gbV9t
YXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1JhbmdlUmVzcG9uc2VHZW5lcmF0b3IubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1JhbmdlUmVzcG9uc2VHZW5lcmF0
b3IubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNGFlNTdkMWJiMTNlZmU3YTIzMjY1MWFjYzk2OWRkMjEwYWZjY2E3
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29j
b2EvUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5tbQpAQCAtMCwwICsxLDI4NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5o
IgorCisjaW1wb3J0ICJOZXR3b3JrTG9hZE1ldHJpY3MuaCIKKyNpbXBvcnQgIlBhcnNlZFJlcXVl
c3RSYW5nZS5oIgorI2ltcG9ydCAiUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmgiCisjaW1w
b3J0ICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKKyNpbXBv
cnQgIldlYkNvcmVOU1VSTFNlc3Npb24uaCIKKyNpbXBvcnQgPHBhbC9zcGkvY2YvQ0ZOZXR3b3Jr
U1BJLmg+CisjaW1wb3J0IDx3dGYvRmFzdE1hbGxvYy5oPgorI2ltcG9ydCA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBSYW5nZVJlc3Bv
bnNlR2VuZXJhdG9yOjpEYXRhIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBEYXRhKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBQbGF0Zm9ybU1l
ZGlhUmVzb3VyY2UmIHJlc291cmNlKQorICAgICAgICA6IGJ1ZmZlcihTaGFyZWRCdWZmZXI6OmNy
ZWF0ZSgpKQorICAgICAgICAsIG9yaWdpbmFsUmVzcG9uc2UocmVzcG9uc2UpCisgICAgICAgICwg
cmVzb3VyY2UoJnJlc291cmNlKSB7IH0KKworICAgIHN0cnVjdCBUYXNrRGF0YSA6IHB1YmxpYyBD
YW5NYWtlV2Vha1B0cjxUYXNrRGF0YT4geworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKKyAgICBwdWJsaWM6CisgICAgICAgIFRhc2tEYXRhKFBhcnNlZFJlcXVlc3RSYW5nZSYmIHJh
bmdlKQorICAgICAgICAgICAgOiByYW5nZShXVEZNb3ZlKHJhbmdlKSkKKyAgICAgICAgICAgICwg
bmV4dEJ5dGVUb0dpdmVCdWZmZXJJbmRleChyYW5nZS5iZWdpbigpKSB7IH0KKworICAgICAgICBQ
YXJzZWRSZXF1ZXN0UmFuZ2UgcmFuZ2U7CisgICAgICAgIHNpemVfdCBuZXh0Qnl0ZVRvR2l2ZUJ1
ZmZlckluZGV4IHsgMCB9OworICAgICAgICBib29sIHN5bnRoZXNpemVkUmVzcG9uc2UgeyBmYWxz
ZSB9OworICAgIH07CisgICAgCisgICAgSGFzaE1hcDxSZXRhaW5QdHI8V2ViQ29yZU5TVVJMU2Vz
c2lvbkRhdGFUYXNrPiwgc3RkOjp1bmlxdWVfcHRyPFRhc2tEYXRhPj4gdGFza0RhdGE7CisgICAg
UmVmPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyOworICAgIFJlc291cmNlUmVzcG9uc2Ugb3JpZ2luYWxS
ZXNwb25zZTsKKyAgICBlbnVtIGNsYXNzIFN1Y2Nlc3NmdWxseUZpbmlzaGVkTG9hZGluZyA6IGJv
b2wgeyBObywgWWVzIH0gc3VjY2Vzc2Z1bGx5RmluaXNoZWRMb2FkaW5nIHsgU3VjY2Vzc2Z1bGx5
RmluaXNoZWRMb2FkaW5nOjpObyB9OworICAgIFJlZlB0cjxQbGF0Zm9ybU1lZGlhUmVzb3VyY2U+
IHJlc291cmNlOworfTsKKworUmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6UmFuZ2VSZXNwb25zZUdl
bmVyYXRvcigpID0gZGVmYXVsdDsKK1JhbmdlUmVzcG9uc2VHZW5lcmF0b3I6On5SYW5nZVJlc3Bv
bnNlR2VuZXJhdG9yKCkgPSBkZWZhdWx0OworCitzdGF0aWMgUmVzb3VyY2VSZXNwb25zZSBzeW50
aGVzaXplZFJlc3BvbnNlRm9yUmFuZ2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgb3JpZ2luYWxS
ZXNwb25zZSwgY29uc3QgUGFyc2VkUmVxdWVzdFJhbmdlJiBwYXJzZWRSZXF1ZXN0UmFuZ2UsIE9w
dGlvbmFsPHNpemVfdD4gdG90YWxDb250ZW50TGVuZ3RoKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgYXV0byBiZWdpbiA9IHBhcnNlZFJlcXVlc3RSYW5nZS5iZWdpbigpOwor
ICAgIGF1dG8gZW5kID0gcGFyc2VkUmVxdWVzdFJhbmdlLmVuZCgpOworCisgICAgYXV0byBuZXdD
b250ZW50UmFuZ2UgPSBtYWtlU3RyaW5nKCJieXRlcyAiLCBiZWdpbiwgIi0iLCBlbmQsICIvIiwg
KHRvdGFsQ29udGVudExlbmd0aCA/IG1ha2VTdHJpbmcoKnRvdGFsQ29udGVudExlbmd0aCkgOiAi
KiIpKTsKKyAgICBhdXRvIG5ld0NvbnRlbnRMZW5ndGggPSBtYWtlU3RyaW5nKGVuZCAtIGJlZ2lu
ICsgMSk7CisKKyAgICBSZXNvdXJjZVJlc3BvbnNlIG5ld1Jlc3BvbnNlID0gb3JpZ2luYWxSZXNw
b25zZTsKKyAgICBuZXdSZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6
OkNvbnRlbnRSYW5nZSwgbmV3Q29udGVudFJhbmdlKTsKKyAgICBuZXdSZXNwb25zZS5zZXRIVFRQ
SGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRMZW5ndGgsIG5ld0NvbnRlbnRMZW5n
dGgpOworICAgIGNvbnN0ZXhwciBhdXRvIHBhcnRpYWxDb250ZW50ID0gMjA2OworICAgIG5ld1Jl
c3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKHBhcnRpYWxDb250ZW50KTsKKworICAgIHJldHVybiBu
ZXdSZXNwb25zZTsKK30KKwordm9pZCBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpyZW1vdmVUYXNr
KFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAqdGFzaykKK3sKKyAgICBjYWxsT25NYWluVGhy
ZWFkKFt0YXNrID0gcmV0YWluUHRyKHRhc2spLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlz
KV0geworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBhdXRvKiBkYXRhID0gd2Vha1RoaXMtPm1fbWFwLmdldCh0YXNrLmdldCgpLm9yaWdpbmFsUmVx
dWVzdC5VUkwpOworICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGRhdGEtPnRhc2tEYXRhLnJlbW92ZSh0YXNrKTsKKyAgICB9KTsKK30KKwordm9pZCBSYW5n
ZVJlc3BvbnNlR2VuZXJhdG9yOjpnaXZlUmVzcG9uc2VUb1Rhc2tJZkJ5dGVzSW5SYW5nZVJlY2Vp
dmVkKFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAqdGFzaywgY29uc3QgUGFyc2VkUmVxdWVz
dFJhbmdlJiByYW5nZSwgT3B0aW9uYWw8c2l6ZV90PiBleHBlY3RlZENvbnRlbnRMZW5ndGgsIGNv
bnN0IERhdGEmIGRhdGEpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBhdXRv
IGJ1ZmZlciA9IGRhdGEuYnVmZmVyOworICAgIGF1dG8gYnVmZmVyU2l6ZSA9IGJ1ZmZlci0+c2l6
ZSgpOworCisgICAgaWYgKGJ1ZmZlclNpemUgPCByYW5nZS5iZWdpbigpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgYXV0byogdGFza0RhdGEgPSBkYXRhLnRhc2tEYXRhLmdldCh0YXNrKTsK
KyAgICBpZiAoIXRhc2tEYXRhKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0byBnaXZl
Qnl0ZXNUb1Rhc2sgPSBbdGFzayA9IHJldGFpblB0cih0YXNrKSwgYnVmZmVyLCB0YXNrRGF0YSA9
IG1ha2VXZWFrUHRyKCp0YXNrRGF0YSksIGdlbmVyYXRvciA9IG1ha2VXZWFrUHRyKCp0aGlzKV0g
eworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBpZiAoIXRhc2tEYXRh
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvJiByYW5nZSA9IHRhc2tEYXRhLT5y
YW5nZTsKKyAgICAgICAgYXV0byYgYnl0ZUluZGV4ID0gdGFza0RhdGEtPm5leHRCeXRlVG9HaXZl
QnVmZmVySW5kZXg7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpZiAoYnl0
ZUluZGV4ID49IGJ1ZmZlci0+c2l6ZSgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgYXV0byBidWZmZXJWaWV3ID0gYnVmZmVyLT5nZXRTb21lRGF0YShieXRlSW5kZXgpOwor
ICAgICAgICAgICAgaWYgKCFidWZmZXJWaWV3LnNpemUoKSB8fCBieXRlSW5kZXggPiByYW5nZS5l
bmQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgc2l6ZV90IGJ5dGVz
RnJvbVRoaXNWaWV3VG9EZWxpdmVyID0gc3RkOjptaW4oYnVmZmVyVmlldy5zaXplKCksIHJhbmdl
LmVuZCgpIC0gYnl0ZUluZGV4ICsgMSk7CisgICAgICAgICAgICBieXRlSW5kZXggKz0gYnl0ZXNG
cm9tVGhpc1ZpZXdUb0RlbGl2ZXI7CisgICAgICAgICAgICBbdGFzayByZXNvdXJjZTpudWxscHRy
IHJlY2VpdmVkRGF0YTpidWZmZXJWaWV3LmRhdGEoKSBsZW5ndGg6Ynl0ZXNGcm9tVGhpc1ZpZXdU
b0RlbGl2ZXJdOworICAgICAgICB9CisgICAgICAgIGlmIChieXRlSW5kZXggPj0gcmFuZ2UuZW5k
KCkpIHsKKyAgICAgICAgICAgIFt0YXNrIHJlc291cmNlRmluaXNoZWQ6bnVsbHB0ciBtZXRyaWNz
Ok5ldHdvcmtMb2FkTWV0cmljcyB7IH1dOworICAgICAgICAgICAgaWYgKGdlbmVyYXRvcikKKyAg
ICAgICAgICAgICAgICBnZW5lcmF0b3ItPnJlbW92ZVRhc2sodGFzay5nZXQoKSk7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgaWYgKCFzdGQ6OmV4Y2hhbmdlKHRhc2tEYXRhLT5zeW50aGVzaXpl
ZFJlc3BvbnNlLCB0cnVlKSkgeworICAgICAgICBhdXRvIHJlc3BvbnNlID0gc3ludGhlc2l6ZWRS
ZXNwb25zZUZvclJhbmdlKGRhdGEub3JpZ2luYWxSZXNwb25zZSwgcmFuZ2UsIGV4cGVjdGVkQ29u
dGVudExlbmd0aCk7CisgICAgICAgIFt0YXNrIHJlc291cmNlOm51bGxwdHIgcmVjZWl2ZWRSZXNw
b25zZTpyZXNwb25zZSBjb21wbGV0aW9uSGFuZGxlcjpbZ2l2ZUJ5dGVzVG9UYXNrID0gV1RGTW92
ZShnaXZlQnl0ZXNUb1Rhc2spXSAoV2ViQ29yZTo6U2hvdWxkQ29udGludWVQb2xpY3lDaGVjayBz
aG91bGRDb250aW51ZSkgeworICAgICAgICAgICAgaWYgKHNob3VsZENvbnRpbnVlID09IFNob3Vs
ZENvbnRpbnVlUG9saWN5Q2hlY2s6OlllcykKKyAgICAgICAgICAgICAgICBnaXZlQnl0ZXNUb1Rh
c2soKTsKKyAgICAgICAgfV07CisgICAgfSBlbHNlCisgICAgICAgIGdpdmVCeXRlc1RvVGFzaygp
OworfQorCitPcHRpb25hbDxzaXplX3Q+IFJhbmdlUmVzcG9uc2VHZW5lcmF0b3I6OmV4cGVjdGVk
Q29udGVudExlbmd0aEZyb21EYXRhKGNvbnN0IERhdGEmIGRhdGEpCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBpZiAoZGF0YS5zdWNjZXNzZnVsbHlGaW5pc2hlZExvYWRpbmcg
PT0gRGF0YTo6U3VjY2Vzc2Z1bGx5RmluaXNoZWRMb2FkaW5nOjpZZXMpCisgICAgICAgIHJldHVy
biBkYXRhLmJ1ZmZlci0+c2l6ZSgpOworCisgICAgLy8gRklYTUU6IFJlc291cmNlUmVzcG9uc2VC
YXNlOjpleHBlY3RlZENvbnRlbnRMZW5ndGgoKSBzaG91bGQgcmV0dXJuIE9wdGlvbmFsPHNpemVf
dD4gaW5zdGVhZCBvZiB1cyBkb2luZyB0aGlzIGNoZWNrIGhlcmUuCisgICAgYXV0byBleHBlY3Rl
ZENvbnRlbnRMZW5ndGggPSBkYXRhLm9yaWdpbmFsUmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVu
Z3RoKCk7CisgICAgaWYgKGV4cGVjdGVkQ29udGVudExlbmd0aCA9PSBOU1VSTFJlc3BvbnNlVW5r
bm93bkxlbmd0aCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoOworfQorCit2b2lkIFJhbmdlUmVzcG9uc2VHZW5lcmF0b3I6Omdp
dmVSZXNwb25zZVRvVGFza3NXaXRoRmluaXNoZWRSYW5nZXMoRGF0YSYgZGF0YSkKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGF1dG8gZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0g
ZXhwZWN0ZWRDb250ZW50TGVuZ3RoRnJvbURhdGEoZGF0YSk7CisKKyAgICBmb3IgKGF1dG8mIHBh
aXIgOiBkYXRhLnRhc2tEYXRhKQorICAgICAgICBnaXZlUmVzcG9uc2VUb1Rhc2tJZkJ5dGVzSW5S
YW5nZVJlY2VpdmVkKHBhaXIua2V5LmdldCgpLCBwYWlyLnZhbHVlLT5yYW5nZSwgZXhwZWN0ZWRD
b250ZW50TGVuZ3RoLCBkYXRhKTsKK30KKworYm9vbCBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjp3
aWxsSGFuZGxlUmVxdWVzdChXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgKnRhc2ssIE5TVVJM
UmVxdWVzdCAqcmVxdWVzdCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGF1
dG8qIGRhdGEgPSBtX21hcC5nZXQocmVxdWVzdC5VUkwpOworICAgIGlmICghZGF0YSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byByYW5nZSA9IFBhcnNlZFJlcXVlc3RSYW5nZTo6
cGFyc2UoW3JlcXVlc3QgdmFsdWVGb3JIVFRQSGVhZGVyRmllbGQ6QCJSYW5nZSJdKTsKKyAgICBp
ZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGV4cGVjdGVkQ29u
dGVudExlbmd0aCA9IGV4cGVjdGVkQ29udGVudExlbmd0aEZyb21EYXRhKCpkYXRhKTsKKyAgICBk
YXRhLT50YXNrRGF0YS5hZGQodGFzaywgbWFrZVVuaXF1ZTxEYXRhOjpUYXNrRGF0YT4oV1RGTW92
ZSgqcmFuZ2UpKSk7CisgICAgZ2l2ZVJlc3BvbnNlVG9UYXNrSWZCeXRlc0luUmFuZ2VSZWNlaXZl
ZCh0YXNrLCAqcmFuZ2UsIGV4cGVjdGVkQ29udGVudExlbmd0aCwgKmRhdGEpOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2NsYXNzIFJhbmdlUmVzcG9uc2VHZW5lcmF0b3I6Ok1lZGlhUmVzb3Vy
Y2VDbGllbnQgOiBwdWJsaWMgUGxhdGZvcm1NZWRpYVJlc291cmNlQ2xpZW50IHsKK3B1YmxpYzoK
KyAgICBNZWRpYVJlc291cmNlQ2xpZW50KFJhbmdlUmVzcG9uc2VHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgVVJMJiYgdXJsKQorICAgICAgICA6IG1fZ2VuZXJhdG9yKG1ha2VXZWFrUHRyKGdlbmVyYXRv
cikpCisgICAgICAgICwgbV91cmwoV1RGTW92ZSh1cmwpKSB7IH0KK3ByaXZhdGU6CisKKyAgICAv
LyBUaGVzZSBtZXRob2RzIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIGJlZm9yZSBjaGFuZ2luZyB0
aGUgY2xpZW50IHRvIHRoaXMuCisgICAgdm9pZCByZXNwb25zZVJlY2VpdmVkKFBsYXRmb3JtTWVk
aWFSZXNvdXJjZSYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFNob3VsZENvbnRpbnVlUG9saWN5Q2hlY2spPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBmaW5h
bAorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoU2hvdWxkQ29udGludWVQb2xpY3lDaGVjazo6Tm8pOworICAgIH0K
KyAgICB2b2lkIHJlZGlyZWN0UmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiwgUmVzb3Vy
Y2VSZXF1ZXN0JiYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFJlc291cmNlUmVxdWVzdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgZmluYWwKKyAgICB7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKHsgfSk7CisgICAgfQorICAgIHZvaWQgZGF0YVNlbnQoUGxhdGZvcm1NZWRpYVJl
c291cmNlJiwgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcpIGZpbmFsCisg
ICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICB2
b2lkIGFjY2Vzc0NvbnRyb2xDaGVja0ZhaWxlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBjb25z
dCBSZXNvdXJjZUVycm9yJikgZmluYWwKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgYm9vbCBzaG91bGRDYWNoZVJlc3BvbnNlKFBsYXRm
b3JtTWVkaWFSZXNvdXJjZSYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSBmaW5hbAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHZvaWQgZGF0YVJlY2VpdmVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNv
bnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKSBmaW5hbAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgaWYgKCFtX2dlbmVyYXRvcikKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgYXV0byogZGF0YSA9IG1fZ2VuZXJhdG9yLT5tX21hcC5nZXQobV91
cmwpOworICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRh
dGEtPmJ1ZmZlci0+YXBwZW5kKGJ5dGVzLCBsZW5ndGgpOworICAgICAgICBtX2dlbmVyYXRvci0+
Z2l2ZVJlc3BvbnNlVG9UYXNrc1dpdGhGaW5pc2hlZFJhbmdlcygqZGF0YSk7CisgICAgfQorCisg
ICAgdm9pZCBsb2FkRmFpbGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbnN0IFJlc291cmNl
RXJyb3ImIGVycm9yKSBmaW5hbAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICAgICAgaWYgKCFtX2dlbmVyYXRvcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgYXV0byBkYXRhID0gbV9nZW5lcmF0b3ItPm1fbWFwLnRha2UobV91cmwpOworICAgICAgICBp
ZiAoIWRhdGEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGZvciAoYXV0byYgdGFzayA6
IGRhdGEtPnRhc2tEYXRhLmtleXMoKSkKKyAgICAgICAgICAgIFt0YXNrIHJlc291cmNlOm51bGxw
dHIgbG9hZEZhaWxlZFdpdGhFcnJvcjplcnJvcl07CisgICAgfQorCisgICAgdm9pZCBsb2FkRmlu
aXNoZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiwgY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJikg
ZmluYWwKKyAgICB7CisgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIGlm
ICghbV9nZW5lcmF0b3IpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8qIGRhdGEg
PSBtX2dlbmVyYXRvci0+bV9tYXAuZ2V0KG1fdXJsKTsKKyAgICAgICAgaWYgKCFkYXRhKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBkYXRhLT5zdWNjZXNzZnVsbHlGaW5pc2hlZExvYWRp
bmcgPSBEYXRhOjpTdWNjZXNzZnVsbHlGaW5pc2hlZExvYWRpbmc6OlllczsKKyAgICAgICAgZGF0
YS0+cmVzb3VyY2UgPSBudWxscHRyOworICAgICAgICBtX2dlbmVyYXRvci0+Z2l2ZVJlc3BvbnNl
VG9UYXNrc1dpdGhGaW5pc2hlZFJhbmdlcygqZGF0YSk7CisgICAgfQorICAgIAorICAgIFdlYWtQ
dHI8UmFuZ2VSZXNwb25zZUdlbmVyYXRvcj4gbV9nZW5lcmF0b3I7CisgICAgY29uc3QgVVJMIG1f
dXJsOworfTsKKworYm9vbCBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjp3aWxsU3ludGhlc2l6ZVJh
bmdlUmVzcG9uc2VzKFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAqdGFzaywgUGxhdGZvcm1N
ZWRpYVJlc291cmNlJiByZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Up
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBOU1VSTFJlcXVlc3QgKm9yaWdp
bmFsUmVxdWVzdCA9IHRhc2sub3JpZ2luYWxSZXF1ZXN0OworICAgIGlmICghb3JpZ2luYWxSZXF1
ZXN0LlVSTCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChyZXNwb25zZS5odHRwU3Rh
dHVzQ29kZSgpICE9IDIwMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghcmVzcG9u
c2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50UmFuZ2UpLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBwYXJzZWRSZXF1ZXN0UmFuZ2Ug
PSBQYXJzZWRSZXF1ZXN0UmFuZ2U6OnBhcnNlKFtvcmlnaW5hbFJlcXVlc3QgdmFsdWVGb3JIVFRQ
SGVhZGVyRmllbGQ6QCJSYW5nZSJdKTsKKyAgICBpZiAoIXBhcnNlZFJlcXVlc3RSYW5nZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVzb3VyY2Uuc2V0Q2xpZW50KGFkb3B0UmVmKG5l
dyBNZWRpYVJlc291cmNlQ2xpZW50KCp0aGlzLCBvcmlnaW5hbFJlcXVlc3QuVVJMKSkpOworCisg
ICAgbV9tYXAuZW5zdXJlKG9yaWdpbmFsUmVxdWVzdC5VUkwsIFsmXSB7CisgICAgICAgIHJldHVy
biBtYWtlVW5pcXVlPERhdGE+KHJlc3BvbnNlLCByZXNvdXJjZSk7CisgICAgfSkuaXRlcmF0b3It
PnZhbHVlLT50YXNrRGF0YS5hZGQodGFzaywgbWFrZVVuaXF1ZTxEYXRhOjpUYXNrRGF0YT4oV1RG
TW92ZSgqcGFyc2VkUmVxdWVzdFJhbmdlKSkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9uLmgKaW5kZXggYTgwZTIwODg1
Mzk3YzcxMDJhZTMxZWI3MDQyNzQ1MzY0YmU0ZGIzMi4uNzg3NWYzMGVhNmM4OTNjMTk2ODk1Nzk3
NWM2Y2FiNjdmMjdjNjRjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9uLmgKQEAgLTIzLDggKzIzLDEw
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCisjaW1wb3J0ICJSYW5nZVJlc3BvbnNlR2VuZXJh
dG9yLmgiCiAjaW1wb3J0ICJTZWN1cml0eU9yaWdpbi5oIgogI2ltcG9ydCA8Rm91bmRhdGlvbi9O
U1VSTFNlc3Npb24uaD4KKyNpbXBvcnQgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2ltcG9y
dCA8d3RmL0hhc2hTZXQuaD4KICNpbXBvcnQgPHd0Zi9Mb2NrLmg+CiAjaW1wb3J0IDx3dGYvT1NP
YmplY3RQdHIuaD4KQEAgLTQxLDEyICs0MywxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q7CitjbGFzcyBOZXR3b3JrTG9hZE1ldHJpY3M7CiBj
bGFzcyBQbGF0Zm9ybU1lZGlhUmVzb3VyY2U7CiBjbGFzcyBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VM
b2FkZXI7CitjbGFzcyBSZXNvdXJjZUVycm9yOworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworY2xh
c3MgUmVzb3VyY2VSZXNwb25zZTsKIGNsYXNzIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0Ns
aWVudDsKK2VudW0gY2xhc3MgU2hvdWxkQ29udGludWVQb2xpY3lDaGVjayA6IGJvb2w7CiB9CiAK
LWVudW0gY2xhc3MgV2ViQ29yZU5TVVJMU2Vzc2lvbkNPUlNBY2Nlc3NDaGVja1Jlc3VsdHMgewor
ZW51bSBjbGFzcyBXZWJDb3JlTlNVUkxTZXNzaW9uQ09SU0FjY2Vzc0NoZWNrUmVzdWx0cyA6IHVp
bnQ4X3QgewogICAgIFVua25vd24sCiAgICAgUGFzcywKICAgICBGYWlsLApAQCAtNjcsNiArNzQs
NyBAQCBXRUJDT1JFX0VYUE9SVCBAaW50ZXJmYWNlIFdlYkNvcmVOU1VSTFNlc3Npb24gOiBOU09i
amVjdCB7CiAgICAgTlNVSW50ZWdlciBfbmV4dFRhc2tJZGVudGlmaWVyOwogICAgIE9TT2JqZWN0
UHRyPGRpc3BhdGNoX3F1ZXVlX3Q+IF9pbnRlcm5hbFF1ZXVlOwogICAgIFdlYkNvcmVOU1VSTFNl
c3Npb25DT1JTQWNjZXNzQ2hlY2tSZXN1bHRzIF9jb3JzUmVzdWx0czsKKyAgICBXZWJDb3JlOjpS
YW5nZVJlc3BvbnNlR2VuZXJhdG9yIF9yYW5nZVJlc3BvbnNlR2VuZXJhdG9yOwogfQogLSAoaWQp
aW5pdFdpdGhSZXNvdXJjZUxvYWRlcjooV2ViQ29yZTo6UGxhdGZvcm1NZWRpYVJlc291cmNlTG9h
ZGVyJilsb2FkZXIgZGVsZWdhdGU6KGlkPE5TVVJMU2Vzc2lvblRhc2tEZWxlZ2F0ZT4pZGVsZWdh
dGUgZGVsZWdhdGVRdWV1ZTooTlNPcGVyYXRpb25RdWV1ZSopcXVldWU7CiBAcHJvcGVydHkgKHJl
YWRvbmx5LCByZXRhaW4pIE5TT3BlcmF0aW9uUXVldWUgKmRlbGVnYXRlUXVldWU7CkBAIC0xNDMs
NCArMTUxLDE1IEBAIFdFQkNPUkVfRVhQT1JUIEBpbnRlcmZhY2UgV2ViQ29yZU5TVVJMU2Vzc2lv
biA6IE5TT2JqZWN0IHsKIC0gKHZvaWQpcmVzdW1lOwogQGVuZAogCitAaW50ZXJmYWNlIFdlYkNv
cmVOU1VSTFNlc3Npb25EYXRhVGFzayAoV2ViS2l0SW50ZXJuYWwpCistICh2b2lkKXJlc291cmNl
OihudWxsYWJsZSBXZWJDb3JlOjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIHNlbnRC
eXRlczoodW5zaWduZWQgbG9uZyBsb25nKWJ5dGVzU2VudCB0b3RhbEJ5dGVzVG9CZVNlbnQ6KHVu
c2lnbmVkIGxvbmcgbG9uZyl0b3RhbEJ5dGVzVG9CZVNlbnQ7CistICh2b2lkKXJlc291cmNlOihu
dWxsYWJsZSBXZWJDb3JlOjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIHJlY2VpdmVk
UmVzcG9uc2U6KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKXJlc3BvbnNlIGNvbXBs
ZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlNob3VsZENvbnRp
bnVlUG9saWN5Q2hlY2spPiYmKWNvbXBsZXRpb25IYW5kbGVyOworLSAoQk9PTClyZXNvdXJjZToo
bnVsbGFibGUgV2ViQ29yZTo6UGxhdGZvcm1NZWRpYVJlc291cmNlKilyZXNvdXJjZSBzaG91bGRD
YWNoZVJlc3BvbnNlOihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJilyZXNwb25zZTsK
Ky0gKHZvaWQpcmVzb3VyY2U6KG51bGxhYmxlIFdlYkNvcmU6OlBsYXRmb3JtTWVkaWFSZXNvdXJj
ZSopcmVzb3VyY2UgcmVjZWl2ZWREYXRhOihjb25zdCBjaGFyKilkYXRhIGxlbmd0aDooaW50KWxl
bmd0aDsKKy0gKHZvaWQpcmVzb3VyY2U6KG51bGxhYmxlIFdlYkNvcmU6OlBsYXRmb3JtTWVkaWFS
ZXNvdXJjZSopcmVzb3VyY2UgcmVjZWl2ZWRSZWRpcmVjdDooY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYpcmVzcG9uc2UgcmVxdWVzdDooV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYp
cmVxdWVzdCBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmJik+JiYpY29tcGxldGlvbkhhbmRsZXI7CistICh2b2lkKXJlc291
cmNlOihudWxsYWJsZSBXZWJDb3JlOjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIGFj
Y2Vzc0NvbnRyb2xDaGVja0ZhaWxlZFdpdGhFcnJvcjooY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VF
cnJvciYpZXJyb3I7CistICh2b2lkKXJlc291cmNlOihudWxsYWJsZSBXZWJDb3JlOjpQbGF0Zm9y
bU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIGxvYWRGYWlsZWRXaXRoRXJyb3I6KGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlRXJyb3ImKWVycm9yOworLSAodm9pZClyZXNvdXJjZUZpbmlzaGVkOihudWxs
YWJsZSBXZWJDb3JlOjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIG1ldHJpY3M6KGNv
bnN0IFdlYkNvcmU6Ok5ldHdvcmtMb2FkTWV0cmljcyYpbWV0cmljczsKK0BlbmQKKwogTlNfQVNT
VU1FX05PTk5VTExfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24ubW0KaW5kZXggOTAyMTI4N2JkZGY0
NzM3ZDg0MWE1NWUxNzBhM2VjMTg5YWNlZTRkMC4uNWRiMGNiYzUwZTQ3N2E4MjNjNjU0OTBhOGU0
MWQ1YmJlNGM5MDMxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9uLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5tbQpAQCAtMjcsMTAgKzI3LDEy
IEBACiAjaW1wb3J0ICJXZWJDb3JlTlNVUkxTZXNzaW9uLmgiCiAKICNpbXBvcnQgIkNhY2hlZFJl
c291cmNlUmVxdWVzdC5oIgorI2ltcG9ydCAiUGFyc2VkUmVxdWVzdFJhbmdlLmgiCiAjaW1wb3J0
ICJQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCIKICNpbXBvcnQgIlN1YnJlc291cmNlTG9h
ZGVyLmgiCiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9Db21wbGV0aW9u
SGFuZGxlci5oPgorI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+CiAjaW1wb3J0IDx3dGYvY29j
b2EvVmVjdG9yQ29jb2EuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yMDMsMjQg
KzIwNSwxNiBAQCBzdGF0aWMgTlNEYXRlICogX19udWxsYWJsZSBuZXR3b3JrTG9hZE1ldHJpY3NE
YXRlKFNlY29uZHMgZmV0Y2hTdGFydCwgU2Vjb25kcyBkZQogLSAodm9pZClhZGREZWxlZ2F0ZU9w
ZXJhdGlvbjooRnVuY3Rpb248dm9pZCgpPiYmKW9wZXJhdGlvbjsKIC0gKHZvaWQpdGFzazooV2Vi
Q29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICopdGFzayBkaWRSZWNlaXZlQ09SU0FjY2Vzc0NoZWNr
UmVzdWx0OihCT09MKXJlc3VsdDsKIC0gKHZvaWQpdGFzazooV2ViQ29yZU5TVVJMU2Vzc2lvbkRh
dGFUYXNrICopdGFzayBkaWRSZWNlaXZlUmVzcG9uc2VGcm9tT3JpZ2luOihSZWY8V2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW4+JiYpb3JpZ2luOworLSAoV2ViQ29yZTo6UmFuZ2VSZXNwb25zZUdlbmVy
YXRvciYpcmFuZ2VSZXNwb25zZUdlbmVyYXRvcjsKIEBlbmQKIAogQGludGVyZmFjZSBXZWJDb3Jl
TlNVUkxTZXNzaW9uRGF0YVRhc2sgKCkKIC0gKGlkKWluaXRXaXRoU2Vzc2lvbjooV2ViQ29yZU5T
VVJMU2Vzc2lvbiAqKXNlc3Npb24gaWRlbnRpZmllcjooTlNVSW50ZWdlcilpZGVudGlmaWVyIHJl
cXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVlc3Q7Ci0tIChpZClpbml0V2l0aFNlc3Npb246KFdl
YkNvcmVOU1VSTFNlc3Npb24gKilzZXNzaW9uIGlkZW50aWZpZXI6KE5TVUludGVnZXIpaWRlbnRp
ZmllciBVUkw6KE5TVVJMICopdXJsOwogLSAodm9pZClfcmVzdGFydDsKIC0gKHZvaWQpX2NhbmNl
bDsKIC0gKHZvaWQpX2ZpbmlzaDsKIEBwcm9wZXJ0eSAoYXNzaWduKSBXZWJDb3JlTlNVUkxTZXNz
aW9uICogX051bGxhYmxlIHNlc3Npb247CiAKLS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVk
aWFSZXNvdXJjZSYpcmVzb3VyY2Ugc2VudEJ5dGVzOih1bnNpZ25lZCBsb25nIGxvbmcpYnl0ZXNT
ZW50IHRvdGFsQnl0ZXNUb0JlU2VudDoodW5zaWduZWQgbG9uZyBsb25nKXRvdGFsQnl0ZXNUb0Jl
U2VudDsKLS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2Ug
cmVjZWl2ZWRSZXNwb25zZTooY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpcmVzcG9uc2UgY29tcGxl
dGlvbkhhbmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2hvdWxkQ29udGludWVQb2xpY3lD
aGVjayk+JiYpY29tcGxldGlvbkhhbmRsZXI7Ci0tIChCT09MKXJlc291cmNlOihQbGF0Zm9ybU1l
ZGlhUmVzb3VyY2UmKXJlc291cmNlIHNob3VsZENhY2hlUmVzcG9uc2U6KGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKXJlc3BvbnNlOwotLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291
cmNlJilyZXNvdXJjZSByZWNlaXZlZERhdGE6KGNvbnN0IGNoYXIqKWRhdGEgbGVuZ3RoOihpbnQp
bGVuZ3RoOwotLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlJilyZXNvdXJj
ZSByZWNlaXZlZFJlZGlyZWN0Oihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJilyZXNwb25zZSByZXF1
ZXN0OihSZXNvdXJjZVJlcXVlc3QmJilyZXF1ZXN0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFJlc291cmNlUmVxdWVzdCYmKT4mJiljb21wbGV0aW9uSGFuZGxlcjsK
LS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgYWNjZXNz
Q29udHJvbENoZWNrRmFpbGVkV2l0aEVycm9yOihjb25zdCBSZXNvdXJjZUVycm9yJillcnJvcjsK
LS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgbG9hZEZh
aWxlZFdpdGhFcnJvcjooY29uc3QgUmVzb3VyY2VFcnJvciYpZXJyb3I7Ci0tICh2b2lkKXJlc291
cmNlRmluaXNoZWQ6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgbWV0cmljczooY29u
c3QgTmV0d29ya0xvYWRNZXRyaWNzJiltZXRyaWNzOwogQGVuZAogCiBOU19BU1NVTUVfTk9OTlVM
TF9FTkQKQEAgLTMxMSw2ICszMDUsMTEgQEAgTlNfQVNTVU1FX05PTk5VTExfRU5ECiAgICAgX29y
aWdpbnMuYWRkKFdURk1vdmUob3JpZ2luKSk7CiB9CiAKKy0gKFdlYkNvcmU6OlJhbmdlUmVzcG9u
c2VHZW5lcmF0b3ImKXJhbmdlUmVzcG9uc2VHZW5lcmF0b3IKK3sKKyAgICByZXR1cm4gX3Jhbmdl
UmVzcG9uc2VHZW5lcmF0b3I7Cit9CisKICNwcmFnbWEgbWFyayAtIE5TVVJMU2Vzc2lvbiBBUEkK
IEBkeW5hbWljIGRlbGVnYXRlOwogLSAoX19udWxsYWJsZSBpZDxOU1VSTFNlc3Npb25EZWxlZ2F0
ZT4pZGVsZWdhdGUKQEAgLTQ1NSwxNSArNDU0LDcgQEAgTlNfQVNTVU1FX05PTk5VTExfRU5ECiAK
IC0gKE5TVVJMU2Vzc2lvbkRhdGFUYXNrICopZGF0YVRhc2tXaXRoVVJMOihOU1VSTCAqKXVybAog
ewotICAgIGlmIChfaW52YWxpZGF0ZWQpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBXZWJD
b3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgKnRhc2sgPSBbW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRh
VGFzayBhbGxvY10gaW5pdFdpdGhTZXNzaW9uOnNlbGYgaWRlbnRpZmllcjpfbmV4dFRhc2tJZGVu
dGlmaWVyKysgVVJMOnVybF07Ci0gICAgewotICAgICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKF9k
YXRhVGFza3NMb2NrKTsKLSAgICAgICAgX2RhdGFUYXNrcy5hZGQodGFzayk7Ci0gICAgfQotICAg
IHJldHVybiAoTlNVUkxTZXNzaW9uRGF0YVRhc2sgKilbdGFzayBhdXRvcmVsZWFzZV07CisgICAg
cmV0dXJuIFtzZWxmIGRhdGFUYXNrV2l0aFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0
aFVSTDp1cmxdXTsKIH0KIAogLSAodm9pZClzZW5kSDJQaW5nOihOU1VSTCAqKXVybCBwb25nSGFu
ZGxlcjoodm9pZCAoXikoTlNFcnJvciAqZXJyb3IsIE5TVGltZUludGVydmFsIGludGVydmFsKSlw
b25nSGFuZGxlcgpAQCAtNTcxLDcgKzU2Miw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBM
b2NrIG1fdGFza0xvY2s7Ci0gICAgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICptX3Rhc2s7
CisgICAgV2Vha09iakNQdHI8V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrPiBtX3Rhc2s7CiB9
OwogCiB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6Y2xlYXJUYXNrKCkK
QEAgLTU4NiwxNiArNTc3LDE3IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xp
ZW50OjpkYXRhU2VudChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc291cmNlCiAgICAgaWYgKCFt
X3Rhc2spCiAgICAgICAgIHJldHVybjsKIAotICAgIFttX3Rhc2sgcmVzb3VyY2U6cmVzb3VyY2Ug
c2VudEJ5dGVzOmJ5dGVzU2VudCB0b3RhbEJ5dGVzVG9CZVNlbnQ6dG90YWxCeXRlc1RvQmVTZW50
XTsKKyAgICBbbV90YXNrIHJlc291cmNlOiZyZXNvdXJjZSBzZW50Qnl0ZXM6Ynl0ZXNTZW50IHRv
dGFsQnl0ZXNUb0JlU2VudDp0b3RhbEJ5dGVzVG9CZVNlbnRdOwogfQogCiB2b2lkIFdlYkNvcmVO
U1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6cmVzcG9uc2VSZWNlaXZlZChQbGF0Zm9ybU1lZGlh
UmVzb3VyY2UmIHJlc291cmNlLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChTaG91bGRDb250aW51ZVBvbGljeUNoZWNrKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKKyAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsK
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Rhc2tMb2NrKTsKICAgICBpZiAoIW1fdGFzaykKICAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKFNob3VsZENvbnRpbnVlUG9saWN5Q2hlY2s6
Ok5vKTsKIAotICAgIFttX3Rhc2sgcmVzb3VyY2U6cmVzb3VyY2UgcmVjZWl2ZWRSZXNwb25zZTpy
ZXNwb25zZSBjb21wbGV0aW9uSGFuZGxlcjpXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV07Cisg
ICAgW21fdGFzayByZXNvdXJjZTomcmVzb3VyY2UgcmVjZWl2ZWRSZXNwb25zZTpyZXNwb25zZSBj
b21wbGV0aW9uSGFuZGxlcjpXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV07CiB9CiAKIGJvb2wg
V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjpzaG91bGRDYWNoZVJlc3BvbnNlKFBs
YXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKQpAQCAtNjA0LDcgKzU5Niw3IEBAIGJvb2wgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFU
YXNrQ2xpZW50OjpzaG91bGRDYWNoZVJlc3BvbnNlKFBsYXRmb3JtTWVkaWFSZXNvdXJjCiAgICAg
aWYgKCFtX3Rhc2spCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBbbV90YXNr
IHJlc291cmNlOnJlc291cmNlIHNob3VsZENhY2hlUmVzcG9uc2U6cmVzcG9uc2VdOworICAgIHJl
dHVybiBbbV90YXNrIHJlc291cmNlOiZyZXNvdXJjZSBzaG91bGRDYWNoZVJlc3BvbnNlOnJlc3Bv
bnNlXTsKIH0KIAogdm9pZCBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmRhdGFS
ZWNlaXZlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc291cmNlLCBjb25zdCBjaGFyKiBkYXRh
LCBpbnQgbGVuZ3RoKQpAQCAtNjEzLDcgKzYwNSw3IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lv
bkRhdGFUYXNrQ2xpZW50OjpkYXRhUmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNv
CiAgICAgaWYgKCFtX3Rhc2spCiAgICAgICAgIHJldHVybjsKIAotICAgIFttX3Rhc2sgcmVzb3Vy
Y2U6cmVzb3VyY2UgcmVjZWl2ZWREYXRhOmRhdGEgbGVuZ3RoOmxlbmd0aF07CisgICAgW21fdGFz
ayByZXNvdXJjZTomcmVzb3VyY2UgcmVjZWl2ZWREYXRhOmRhdGEgbGVuZ3RoOmxlbmd0aF07CiB9
CiAKIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjpyZWRpcmVjdFJlY2Vp
dmVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzb3VyY2UsIFJlc291cmNlUmVxdWVzdCYmIHJl
cXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFJlc291cmNlUmVxdWVzdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTYyMiw3
ICs2MTQsNyBAQCB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6cmVkaXJl
Y3RSZWNlaXZlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmCiAgICAgaWYgKCFtX3Rhc2spCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFttX3Rhc2sgcmVzb3VyY2U6cmVzb3VyY2UgcmVjZWl2ZWRSZWRp
cmVjdDpyZXNwb25zZSByZXF1ZXN0OldURk1vdmUocmVxdWVzdCkgY29tcGxldGlvbkhhbmRsZXI6
IFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYm
IHJlcXVlc3QpIG11dGFibGUgeworICAgIFttX3Rhc2sgcmVzb3VyY2U6JnJlc291cmNlIHJlY2Vp
dmVkUmVkaXJlY3Q6cmVzcG9uc2UgcmVxdWVzdDpXVEZNb3ZlKHJlcXVlc3QpIGNvbXBsZXRpb25I
YW5kbGVyOiBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0g
KGF1dG8mJiByZXF1ZXN0KSBtdXRhYmxlIHsKICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbcmVx
dWVzdCA9IHJlcXVlc3QuaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewogICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoV1RGTW92ZShyZXF1ZXN0KSk7CiAgICAgICAgIH0pOwpAQCAtNjM1LDcgKzYyNyw3
IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjphY2Nlc3NDb250cm9s
Q2hlY2tGYWlsZWQoUGxhdGZvcm1NZWRpYVJlCiAgICAgaWYgKCFtX3Rhc2spCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFttX3Rhc2sgcmVzb3VyY2U6cmVzb3VyY2UgYWNjZXNzQ29udHJvbENoZWNr
RmFpbGVkV2l0aEVycm9yOmVycm9yXTsKKyAgICBbbV90YXNrIHJlc291cmNlOiZyZXNvdXJjZSBh
Y2Nlc3NDb250cm9sQ2hlY2tGYWlsZWRXaXRoRXJyb3I6ZXJyb3JdOwogfQogCiB2b2lkIFdlYkNv
cmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZhaWxlZChQbGF0Zm9ybU1lZGlhUmVz
b3VyY2UmIHJlc291cmNlLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKQEAgLTY0NCw3ICs2
MzYsNyBAQCB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZhaWxl
ZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc291cgogICAgIGlmICghbV90YXNrKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBbbV90YXNrIHJlc291cmNlOnJlc291cmNlIGxvYWRGYWlsZWRXaXRo
RXJyb3I6ZXJyb3JdOworICAgIFttX3Rhc2sgcmVzb3VyY2U6JnJlc291cmNlIGxvYWRGYWlsZWRX
aXRoRXJyb3I6ZXJyb3JdOwogfQogCiB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0Ns
aWVudDo6bG9hZEZpbmlzaGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzb3VyY2UsIGNvbnN0
IE5ldHdvcmtMb2FkTWV0cmljcyYgbWV0cmljcykKQEAgLTY1Myw3ICs2NDUsNyBAQCB2b2lkIFdl
YkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZpbmlzaGVkKFBsYXRmb3JtTWVk
aWFSZXNvdXJjZSYgcmVzbwogICAgIGlmICghbV90YXNrKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBbbV90YXNrIHJlc291cmNlRmluaXNoZWQ6cmVzb3VyY2UgbWV0cmljczptZXRyaWNzXTsKKyAg
ICBbbV90YXNrIHJlc291cmNlRmluaXNoZWQ6JnJlc291cmNlIG1ldHJpY3M6bWV0cmljc107CiB9
CiAKIH0KQEAgLTY2MSwxNyArNjUzLDYgQEAgdm9pZCBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRh
c2tDbGllbnQ6OmxvYWRGaW5pc2hlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc28KICNwcmFn
bWEgbWFyayAtIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzawogCiBAaW1wbGVtZW50YXRpb24g
V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrCi0tIChpZClpbml0V2l0aFNlc3Npb246KFdlYkNv
cmVOU1VSTFNlc3Npb24gKilzZXNzaW9uIGlkZW50aWZpZXI6KE5TVUludGVnZXIpaWRlbnRpZmll
ciBVUkw6KE5TVVJMICopdXJsCi17Ci0gICAgc2VsZi50YXNrSWRlbnRpZmllciA9IGlkZW50aWZp
ZXI7Ci0gICAgc2VsZi5zZXNzaW9uID0gc2Vzc2lvbjsKLSAgICBzZWxmLnN0YXRlID0gTlNVUkxT
ZXNzaW9uVGFza1N0YXRlU3VzcGVuZGVkOwotICAgIHNlbGYucHJpb3JpdHkgPSBOU1VSTFNlc3Np
b25UYXNrUHJpb3JpdHlEZWZhdWx0OwotICAgIHNlbGYub3JpZ2luYWxSZXF1ZXN0ID0gc2VsZi5j
dXJyZW50UmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dXJsXTsKLQotICAg
IHJldHVybiBzZWxmOwotfQotCiAtIChpZClpbml0V2l0aFNlc3Npb246KFdlYkNvcmVOU1VSTFNl
c3Npb24gKilzZXNzaW9uIGlkZW50aWZpZXI6KE5TVUludGVnZXIpaWRlbnRpZmllciByZXF1ZXN0
OihOU1VSTFJlcXVlc3QgKilyZXF1ZXN0CiB7CiAgICAgc2VsZi50YXNrSWRlbnRpZmllciA9IGlk
ZW50aWZpZXI7CkBAIC03MDgsOSArNjg5LDEyIEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRh
dGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvCiAK
ICAgICBbc2VsZiBfY2FuY2VsXTsKIAorICAgIGlmIChbc2VsZi5zZXNzaW9uIHJhbmdlUmVzcG9u
c2VHZW5lcmF0b3JdLndpbGxIYW5kbGVSZXF1ZXN0KHNlbGYsIHNlbGYub3JpZ2luYWxSZXF1ZXN0
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgX3Jlc291cmNlID0gc2VsZi5zZXNzaW9uLmxvYWRl
ci5yZXF1ZXN0UmVzb3VyY2Uoc2VsZi5vcmlnaW5hbFJlcXVlc3QsIFBsYXRmb3JtTWVkaWFSZXNv
dXJjZUxvYWRlcjo6TG9hZE9wdGlvbjo6RGlzYWxsb3dDYWNoaW5nKTsKICAgICBpZiAoX3Jlc291
cmNlKQotICAgICAgICBfcmVzb3VyY2UtPnNldENsaWVudChtYWtlVW5pcXVlPFdlYkNvcmVOU1VS
TFNlc3Npb25EYXRhVGFza0NsaWVudD4oc2VsZikpOworICAgICAgICBfcmVzb3VyY2UtPnNldENs
aWVudChhZG9wdFJlZigqbmV3IFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudChzZWxm
KSkpOwogfQogCiAtICh2b2lkKV9jYW5jZWwKQEAgLTcyNyw3ICs3MTEsNyBAQCB2b2lkIFdlYkNv
cmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZpbmlzaGVkKFBsYXRmb3JtTWVkaWFS
ZXNvdXJjZSYgcmVzbwogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgaWYgKF9y
ZXNvdXJjZSkKLSAgICAgICAgW3NlbGYgcmVzb3VyY2VGaW5pc2hlZDoqX3Jlc291cmNlIG1ldHJp
Y3M6TmV0d29ya0xvYWRNZXRyaWNzIHsgfV07CisgICAgICAgIFtzZWxmIHJlc291cmNlRmluaXNo
ZWQ6X3Jlc291cmNlLmdldCgpIG1ldHJpY3M6TmV0d29ya0xvYWRNZXRyaWNzIHsgfV07CiB9CiAK
ICNwcmFnbWEgbWFyayAtIE5TVVJMU2Vzc2lvbiBBUEkKQEAgLTgwNiwyMyArNzkwLDI4IEBAIHZv
aWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQoUGxhdGZv
cm1NZWRpYVJlc291cmNlJiByZXNvCiAKICNwcmFnbWEgbWFyayAtIFBsYXRmb3JtTWVkaWFSZXNv
dXJjZUNsaWVudCBjYWxsYmFja3MKIAotLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJl
c291cmNlJilyZXNvdXJjZSBzZW50Qnl0ZXM6KHVuc2lnbmVkIGxvbmcgbG9uZylieXRlc1NlbnQg
dG90YWxCeXRlc1RvQmVTZW50Oih1bnNpZ25lZCBsb25nIGxvbmcpdG90YWxCeXRlc1RvQmVTZW50
CistICh2b2lkKXJlc291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIHNlbnRC
eXRlczoodW5zaWduZWQgbG9uZyBsb25nKWJ5dGVzU2VudCB0b3RhbEJ5dGVzVG9CZVNlbnQ6KHVu
c2lnbmVkIGxvbmcgbG9uZyl0b3RhbEJ5dGVzVG9CZVNlbnQKIHsKLSAgICBBU1NFUlRfVU5VU0VE
KHJlc291cmNlLCAmcmVzb3VyY2UgPT0gX3Jlc291cmNlKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJl
c291cmNlLCAhcmVzb3VyY2UgfHwgcmVzb3VyY2UgPT0gX3Jlc291cmNlKTsKICAgICBVTlVTRURf
UEFSQU0oYnl0ZXNTZW50KTsKICAgICBVTlVTRURfUEFSQU0odG90YWxCeXRlc1RvQmVTZW50KTsK
ICAgICAvLyBOby1vcC4KIH0KIAotLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291
cmNlJilyZXNvdXJjZSByZWNlaXZlZFJlc3BvbnNlOihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJily
ZXNwb25zZSBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTaG91bGRD
b250aW51ZVBvbGljeUNoZWNrKT4mJiljb21wbGV0aW9uSGFuZGxlcgorLSAodm9pZClyZXNvdXJj
ZTooUGxhdGZvcm1NZWRpYVJlc291cmNlKilyZXNvdXJjZSByZWNlaXZlZFJlc3BvbnNlOihjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJilyZXNwb25zZSBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChTaG91bGRDb250aW51ZVBvbGljeUNoZWNrKT4mJiljb21wbGV0aW9uSGFu
ZGxlcgogewogICAgIEFTU0VSVChyZXNwb25zZS5zb3VyY2UoKSA9PSBSZXNvdXJjZVJlc3BvbnNl
OjpTb3VyY2U6Ok5ldHdvcmsgfHwgcmVzcG9uc2Uuc291cmNlKCkgPT0gUmVzb3VyY2VSZXNwb25z
ZTo6U291cmNlOjpEaXNrQ2FjaGUgfHwgcmVzcG9uc2Uuc291cmNlKCkgPT0gUmVzb3VyY2VSZXNw
b25zZTo6U291cmNlOjpEaXNrQ2FjaGVBZnRlclZhbGlkYXRpb24gfHwgcmVzcG9uc2Uuc291cmNl
KCkgPT0gUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpTZXJ2aWNlV29ya2VyKTsKLSAgICBBU1NF
UlRfVU5VU0VEKHJlc291cmNlLCAmcmVzb3VyY2UgPT0gX3Jlc291cmNlKTsKKyAgICBBU1NFUlRf
VU5VU0VEKHJlc291cmNlLCAhcmVzb3VyY2UgfHwgcmVzb3VyY2UgPT0gX3Jlc291cmNlKTsKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIFtzZWxmLnNlc3Npb24gdGFzazpzZWxmIGRp
ZFJlY2VpdmVSZXNwb25zZUZyb21PcmlnaW46U2VjdXJpdHlPcmlnaW46OmNyZWF0ZShyZXNwb25z
ZS51cmwoKSldOwotICAgIFtzZWxmLnNlc3Npb24gdGFzazpzZWxmIGRpZFJlY2VpdmVDT1JTQWNj
ZXNzQ2hlY2tSZXN1bHQ6cmVzb3VyY2UuZGlkUGFzc0FjY2Vzc0NvbnRyb2xDaGVjaygpXTsKKyAg
ICAvLyBGSVhNRTogVGhpbmsgYWJvdXQgdGhpcyBhbmQgbWFrZSBzdXJlIGl0J3Mgc2FmZS4KKyAg
ICBbc2VsZi5zZXNzaW9uIHRhc2s6c2VsZiBkaWRSZWNlaXZlQ09SU0FjY2Vzc0NoZWNrUmVzdWx0
OnJlc291cmNlID8gcmVzb3VyY2UtPmRpZFBhc3NBY2Nlc3NDb250cm9sQ2hlY2soKSA6IFlFU107
CiAgICAgc2VsZi5jb3VudE9mQnl0ZXNFeHBlY3RlZFRvUmVjZWl2ZSA9IHJlc3BvbnNlLmV4cGVj
dGVkQ29udGVudExlbmd0aCgpOwotICAgIFJldGFpblB0cjxOU1VSTFJlc3BvbnNlPiBzdHJvbmdS
ZXNwb25zZSB7IHJlc3BvbnNlLm5zVVJMUmVzcG9uc2UoKSB9OworICAgIFJldGFpblB0cjxOU1VS
TFJlc3BvbnNlPiBzdHJvbmdSZXNwb25zZSA9IHJlc3BvbnNlLm5zVVJMUmVzcG9uc2UoKTsKKwor
ICAgIGlmIChyZXNvdXJjZSAmJiBzZWxmLnNlc3Npb24gJiYgW3NlbGYuc2Vzc2lvbiByYW5nZVJl
c3BvbnNlR2VuZXJhdG9yXS53aWxsU3ludGhlc2l6ZVJhbmdlUmVzcG9uc2VzKHNlbGYsICpyZXNv
dXJjZSwgcmVzcG9uc2UpKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoU2hvdWxk
Q29udGludWVQb2xpY3lDaGVjazo6WWVzKTsKKyAgICAKICAgICBSZXRhaW5QdHI8V2ViQ29yZU5T
VVJMU2Vzc2lvbkRhdGFUYXNrPiBzdHJvbmdTZWxmIHsgc2VsZiB9OwogICAgIGlmICghc2VsZi5z
ZXNzaW9uKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoU2hvdWxkQ29udGludWVQ
b2xpY3lDaGVjazo6Tm8pOwpAQCAtODUwLDkgKzgzOSw5IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vz
c2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiBy
ZXNvCiAgICAgfV07CiB9CiAKLS0gKEJPT0wpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJj
ZSYpcmVzb3VyY2Ugc2hvdWxkQ2FjaGVSZXNwb25zZTooY29uc3QgUmVzb3VyY2VSZXNwb25zZSYp
cmVzcG9uc2UKKy0gKEJPT0wpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3Vy
Y2Ugc2hvdWxkQ2FjaGVSZXNwb25zZTooY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpcmVzcG9uc2UK
IHsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAmcmVzb3VyY2UgPT0gX3Jlc291cmNlKTsK
KyAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAhcmVzb3VyY2UgfHwgcmVzb3VyY2UgPT0gX3Jl
c291cmNlKTsKIAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKQEAgLTg2MCw5ICs4NDks
OSBAQCB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZpbmlzaGVk
KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzbwogICAgIHJldHVybiByZXNwb25zZS5odHRwSGVh
ZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRSYW5nZSkuaXNFbXB0eSgpOwogfQogCi0t
ICh2b2lkKXJlc291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmKXJlc291cmNlIHJlY2VpdmVk
RGF0YTooY29uc3QgY2hhciopZGF0YSBsZW5ndGg6KGludClsZW5ndGgKKy0gKHZvaWQpcmVzb3Vy
Y2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3VyY2UgcmVjZWl2ZWREYXRhOihjb25zdCBj
aGFyKilkYXRhIGxlbmd0aDooaW50KWxlbmd0aAogewotICAgIEFTU0VSVF9VTlVTRUQocmVzb3Vy
Y2UsICZyZXNvdXJjZSA9PSBfcmVzb3VyY2UpOworICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2Us
ICFyZXNvdXJjZSB8fCByZXNvdXJjZSA9PSBfcmVzb3VyY2UpOwogICAgIFJldGFpblB0cjxOU0Rh
dGE+IG5zRGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6ZGF0YSBs
ZW5ndGg6bGVuZ3RoXSk7CiAgICAgUmV0YWluUHRyPFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFz
az4gc3Ryb25nU2VsZiB7IHNlbGYgfTsKICAgICBbc2VsZi5zZXNzaW9uIGFkZERlbGVnYXRlT3Bl
cmF0aW9uOltzdHJvbmdTZWxmLCBsZW5ndGgsIG5zRGF0YV0gewpAQCAtODczLDkgKzg2Miw5IEBA
IHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQoUGxh
dGZvcm1NZWRpYVJlc291cmNlJiByZXNvCiAgICAgfV07CiB9CiAKLS0gKHZvaWQpcmVzb3VyY2U6
KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgcmVjZWl2ZWRSZWRpcmVjdDooY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYpcmVzcG9uc2UgcmVxdWVzdDooUmVzb3VyY2VSZXF1ZXN0JiYpcmVx
dWVzdCBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZXNvdXJjZVJl
cXVlc3QmJik+JiYpY29tcGxldGlvbkhhbmRsZXIKKy0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3Jt
TWVkaWFSZXNvdXJjZSopcmVzb3VyY2UgcmVjZWl2ZWRSZWRpcmVjdDooY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpcmVzcG9uc2UgcmVxdWVzdDooUmVzb3VyY2VSZXF1ZXN0JiYpcmVxdWVzdCBjb21w
bGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZXNvdXJjZVJlcXVlc3QmJik+
JiYpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAmcmVz
b3VyY2UgPT0gX3Jlc291cmNlKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAhcmVzb3Vy
Y2UgfHwgcmVzb3VyY2UgPT0gX3Jlc291cmNlKTsKICAgICBbc2VsZi5zZXNzaW9uIGFkZERlbGVn
YXRlT3BlcmF0aW9uOltzdHJvbmdTZWxmID0gcmV0YWluUHRyKHNlbGYpLCByZXNwb25zZSA9IHJl
dGFpblB0cihyZXNwb25zZS5uc1VSTFJlc3BvbnNlKCkpLCByZXF1ZXN0ID0gcmVxdWVzdC5pc29s
YXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0gKCkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghW3Jlc3BvbnNlIGlzS2luZE9mQ2xhc3M6W05T
SFRUUFVSTFJlc3BvbnNlIGNsYXNzXV0pIHsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtOTA1LDkgKzg5NCw5IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNr
Q2xpZW50Ojpsb2FkRmluaXNoZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvCiAgICAgfV07
CiB9CiAKLS0gKHZvaWQpX3Jlc291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmKXJlc291cmNl
IGxvYWRGaW5pc2hlZFdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yIG1ldHJpY3M6KGNvbnN0IE5l
dHdvcmtMb2FkTWV0cmljcyYpbWV0cmljcworLSAodm9pZClfcmVzb3VyY2U6KFBsYXRmb3JtTWVk
aWFSZXNvdXJjZSopcmVzb3VyY2UgbG9hZEZpbmlzaGVkV2l0aEVycm9yOihOU0Vycm9yICopZXJy
b3IgbWV0cmljczooY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJiltZXRyaWNzCiB7Ci0gICAgQVNT
RVJUX1VOVVNFRChyZXNvdXJjZSwgJnJlc291cmNlID09IF9yZXNvdXJjZSk7CisgICAgQVNTRVJU
X1VOVVNFRChyZXNvdXJjZSwgIXJlc291cmNlIHx8IHJlc291cmNlID09IF9yZXNvdXJjZSk7CiAg
ICAgaWYgKHNlbGYuc3RhdGUgPT0gTlNVUkxTZXNzaW9uVGFza1N0YXRlQ29tcGxldGVkKQogICAg
ICAgICByZXR1cm47CiAgICAgc2VsZi5zdGF0ZSA9IE5TVVJMU2Vzc2lvblRhc2tTdGF0ZUNvbXBs
ZXRlZDsKQEAgLTkzMCwxNyArOTE5LDE3IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFU
YXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvCiAgICAg
fV07CiB9CiAKLS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3Vy
Y2UgYWNjZXNzQ29udHJvbENoZWNrRmFpbGVkV2l0aEVycm9yOihjb25zdCBSZXNvdXJjZUVycm9y
JillcnJvcgorLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlKilyZXNvdXJj
ZSBhY2Nlc3NDb250cm9sQ2hlY2tGYWlsZWRXaXRoRXJyb3I6KGNvbnN0IFJlc291cmNlRXJyb3Im
KWVycm9yCiB7CiAgICAgW3NlbGYgX3Jlc291cmNlOnJlc291cmNlIGxvYWRGaW5pc2hlZFdpdGhF
cnJvcjplcnJvci5uc0Vycm9yKCkgbWV0cmljczpOZXR3b3JrTG9hZE1ldHJpY3MgeyB9XTsKIH0K
IAotLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlJilyZXNvdXJjZSBsb2Fk
RmFpbGVkV2l0aEVycm9yOihjb25zdCBSZXNvdXJjZUVycm9yJillcnJvcgorLSAodm9pZClyZXNv
dXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlKilyZXNvdXJjZSBsb2FkRmFpbGVkV2l0aEVycm9y
Oihjb25zdCBSZXNvdXJjZUVycm9yJillcnJvcgogewogICAgIFtzZWxmIF9yZXNvdXJjZTpyZXNv
dXJjZSBsb2FkRmluaXNoZWRXaXRoRXJyb3I6ZXJyb3IubnNFcnJvcigpIG1ldHJpY3M6TmV0d29y
a0xvYWRNZXRyaWNzIHsgfV07CiB9CiAKLS0gKHZvaWQpcmVzb3VyY2VGaW5pc2hlZDooUGxhdGZv
cm1NZWRpYVJlc291cmNlJilyZXNvdXJjZSBtZXRyaWNzOihjb25zdCBOZXR3b3JrTG9hZE1ldHJp
Y3MmKW1ldHJpY3MKKy0gKHZvaWQpcmVzb3VyY2VGaW5pc2hlZDooUGxhdGZvcm1NZWRpYVJlc291
cmNlKilyZXNvdXJjZSBtZXRyaWNzOihjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmKW1ldHJpY3MK
IHsKICAgICBbc2VsZiBfcmVzb3VyY2U6cmVzb3VyY2UgbG9hZEZpbmlzaGVkV2l0aEVycm9yOm5p
bCBtZXRyaWNzOm1ldHJpY3NdOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUuY3BwCmluZGV4
IDdmYjNlNWZiZGZjM2IxZjVjNjg5NTMyZThhMGExODAzMjEzNzFiNTMuLjg3OTVhYmFjYWYwMDA1
NjdmYTNhMjAxNmJjZjJmNDkxM2NiMTBiMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvbWVkaWEvTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZS5j
cHAKQEAgLTExODAsNyArMTE4MCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlOjpy
ZXF1ZXN0UmVzb3VyY2UoUmVtb3RlTWVkaWFSZXNvdXJjZUlkZW50aWZpZXIgcmVtCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgLy8gUGxhdGZvcm1NZWRpYVJlc291cmNlIG93bnMgdGhlIFBs
YXRmb3JtTWVkaWFSZXNvdXJjZUNsaWVudAotICAgIHJlc291cmNlLT5zZXRDbGllbnQobWFrZVVu
aXF1ZTxSZW1vdGVNZWRpYVJlc291cmNlUHJveHk+KGNvbm5lY3Rpb24oKSwgKnJlc291cmNlLCBy
ZW1vdGVNZWRpYVJlc291cmNlSWRlbnRpZmllcikpOworICAgIHJlc291cmNlLT5zZXRDbGllbnQo
YWRvcHRSZWYoKm5ldyBSZW1vdGVNZWRpYVJlc291cmNlUHJveHkoY29ubmVjdGlvbigpLCAqcmVz
b3VyY2UsIHJlbW90ZU1lZGlhUmVzb3VyY2VJZGVudGlmaWVyKSkpOwogICAgIG1fbWVkaWFSZXNv
dXJjZXMuYWRkKHJlbW90ZU1lZGlhUmVzb3VyY2VJZGVudGlmaWVyLCBXVEZNb3ZlKHJlc291cmNl
KSk7CiAKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDY5YjY1MzRiMmFjZmM2NmJlZTJkOTIyNzM3NjMz
ZGFlMTM2Yjk2ODguLjZjZTU3MDhjYzczM2EwZDQzZWZiNGI5MDYzMmI3ODUyMmRjZDExMjQgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyOSBAQAorMjAyMS0wMi0wOSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgorCisgICAgICAgIFN5bnRoZXNpemUgcmFuZ2UgcmVzcG9uc2VzIGlmIG5lZWRlZCBp
biBXZWJDb3JlTlNVUkxTZXNzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjEwNzIKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZiBHYXJlbi4K
KworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QYXJzZWRDb250ZW50UmFu
Z2UuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9DaGFsbGVuZ2UubW06CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpjbGllbnRDZXJ0U2VydmVyKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL01lZGlhTG9hZGluZy5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRl
c3RWaWRlb0J5dGVzKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnJ1blZpZGVvVGVzdCk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2Nv
Y29hL0hUVFBTZXJ2ZXIuaDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBSZXNwb25zZTo6
SFRUUFJlc3BvbnNlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OkhUVFBS
ZXNwb25zZTo6SFRUUFJlc3BvbnNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L2NvY29hL0hUVFBTZXJ2ZXIubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVy
OjpSZXF1ZXN0RGF0YTo6UmVxdWVzdERhdGEpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6YXBw
ZW5kVG9WZWN0b3IpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6cGFyc2VQ
YXRoKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OnJlc3BvbmRUb1JlcXVl
c3RzKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBSZXNwb25zZTo6Ym9keUZyb21TdHJp
bmcpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFJlc3BvbnNlOjpzZXJpYWxpemUpOgor
CiAyMDIxLTAyLTA5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbd2Via2l0c2NtcHldIENvcnJlY3RseSBwYXJzZSBicmFuY2ggY29tbWl0cwpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1BhcnNlZENvbnRlbnRSYW5n
ZS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvUGFyc2VkQ29udGVudFJh
bmdlLmNwcAppbmRleCAyMGE5NTdlNTljODUxNjBjODA4MzE3ZTE1YjAxMDI4ZDVmYTliNDU4Li4y
NWQyZDY3N2ZiODg4NjIyNWZlMzFkYjQ5OGU1ZDc1ZDZjNjAwZjQwIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvUGFyc2VkQ29udGVudFJhbmdlLmNwcAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvUGFyc2VkQ29udGVudFJhbmdlLmNw
cApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSA8V2Vi
Q29yZS9QYXJzZWRDb250ZW50UmFuZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhcnNlZFJlcXVl
c3RSYW5nZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKQEAgLTk1LDQgKzk2LDMxIEBAIFRFU1QoV2ViQ29yZSwgUGFyc2VkQ29u
dGVudFJhbmdlVG9TdHJpbmcpCiAgICAgQVNTRVJUX1NUUkVRKCIiLCBQYXJzZWRDb250ZW50UmFu
Z2UoKS5oZWFkZXJWYWx1ZSgpLnV0ZjgoKS5kYXRhKCkpOwogfQogCitURVNUKFdlYkNvcmUsIFBh
cnNlZFJlcXVlc3RSYW5nZSkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBmYWlsdXJlQ2FzZXMgewor
ICAgICAgICB7IH0sCisgICAgICAgICIiLAorICAgICAgICAiYWJjIiwKKyAgICAgICAgImJ5dGVz
PSIsCisgICAgICAgICJieXRlcz0tIiwKKyAgICAgICAgImJ5dGVzPWFiYy0iLAorICAgICAgICAi
Ynl0ZXM9MS1hYmMiLAorICAgICAgICAiYnl0ZXM9Mi0xIiwKKyAgICAgICAgImJ5dGVzPTEtIiwK
KyAgICAgICAgImJ5dGVzPS0xIiwKKyAgICAgICAgImJ5dGVzPTEtOTk5OTk5OTk5OTk5OTk5OTk5
OTk5OTk5IgorICAgIH07CisgICAgZm9yIChjb25zdCBhdXRvJiBpbnB1dCA6IGZhaWx1cmVDYXNl
cykKKyAgICAgICAgRVhQRUNUX0VRKFdURjo6bnVsbG9wdCwgUGFyc2VkUmVxdWVzdFJhbmdlOjpw
YXJzZShpbnB1dCkpOworCisgICAgYXV0byBjb21wYXJlID0gW10gKGNvbnN0IFN0cmluZyYgaW5w
dXQsIE9wdGlvbmFsPHNpemVfdD4gYmVnaW4sIE9wdGlvbmFsPHNpemVfdD4gZW5kKSB7CisgICAg
ICAgIGF1dG8gcmFuZ2UgPSBQYXJzZWRSZXF1ZXN0UmFuZ2U6OnBhcnNlKGlucHV0KTsKKyAgICAg
ICAgRVhQRUNUX05FKFdURjo6bnVsbG9wdCwgcmFuZ2UpOworICAgICAgICAKKyAgICB9OworICAg
IGNvbXBhcmUoImJ5dGVzPTEtMSIsIDEsIDEpOworICAgIGNvbXBhcmUoImJ5dGVzPTEtMiIsIDEs
IDIpOworfQorCiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0NoYWxsZW5nZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvQ2hhbGxlbmdlLm1tCmluZGV4IDk2NDA3NDhiZjYzMDI4ZDJiNzQ0ODk4Y2QwZDQ2NTNjZmE4
YmQ1ZDMuLjBiNzViYTQzYzAzYWUzODg4MTZhMWYzY2MyY2VlNmYxNzcxYjEwNjEgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQ2hhbGxlbmdlLm1tCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQ2hhbGxlbmdlLm1tCkBA
IC01ODksNyArNTg5LDcgQEAgc3RhdGljIEhUVFBTZXJ2ZXIgY2xpZW50Q2VydFNlcnZlcigpCiAg
ICAgICAgIHsgIi81LnBuZyIsIHsgbG9uZ1N0cmluZyB9IH0sCiAgICAgICAgIHsgIi82LnBuZyIs
IHsgbG9uZ1N0cmluZyB9IH0sCiAgICAgICAgIHsgIi9yZWRpcmVjdFRvRXJyb3IiLCB7IDMwMSwg
e3sgIkxvY2F0aW9uIiwgIi9lcnJvciIgfX0gfSB9LAotICAgICAgICB7ICIvZXJyb3IiLCB7IEhU
VFBTZXJ2ZXI6OkhUVFBSZXNwb25zZTo6VGVybWluYXRlQ29ubmVjdGlvbjo6WWVzIH0gfSwKKyAg
ICAgICAgeyAiL2Vycm9yIiwgeyBIVFRQUmVzcG9uc2U6OlRlcm1pbmF0ZUNvbm5lY3Rpb246Olll
cyB9IH0sCiAgICAgfSwgSFRUUFNlcnZlcjo6UHJvdG9jb2w6Okh0dHBzLCBbXSAoYXV0bywgYXV0
bywgYXV0byBjZXJ0aWZpY2F0ZUFsbG93ZWQpIHsKICAgICAgICAgY2VydGlmaWNhdGVBbGxvd2Vk
KHRydWUpOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9NZWRpYUxvYWRpbmcubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL01lZGlhTG9hZGluZy5tbQppbmRleCA2NGRjNWJmMDU2Yjk1NWEyNDhmNjdlMjBk
MDlmNzQ3MTEzMWMxNDY1Li4xMjZjOGMzMmYzMTdiYmMzNjI1OGUyNTA0ZDBhMjQxNzc5N2I1NTNm
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL01lZGlh
TG9hZGluZy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL01l
ZGlhTG9hZGluZy5tbQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW1wb3J0ICJIVFRQU2VydmVyLmgi
CiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCAiVGVzdFVJRGVsZWdhdGUu
aCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0Nv
bmNhdGVuYXRlTnVtYmVycy5oPgogCkBAIC0xMTYsNiArMTE3LDc0IEBAIFRFU1QoTWVkaWFMb2Fk
aW5nLCBVc2VyQWdlbnRTdHJpbmdITFMpCiAgICAgVXRpbDo6cnVuKCZyZWNlaXZlZE1lZGlhUmVx
dWVzdCk7CiB9CiAKK2NvbnN0IGNoYXIqIHZpZGVvUGxheVRlc3RIVE1MID0iPHNjcmlwdD4iCisg
ICAgImZ1bmN0aW9uIGNyZWF0ZVZpZGVvRWxlbWVudCgpIHsiCisgICAgICAgICJsZXQgdmlkZW8g
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpOyIKKyAgICAgICAgInZpZGVvLmFkZEV2
ZW50TGlzdGVuZXIoJ2Vycm9yJywgKCk9PnthbGVydCgnZXJyb3InKX0pOyIKKyAgICAgICAgInZp
ZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCAoKT0+e2FsZXJ0KCdwbGF5aW5nJyl9KTsi
CisgICAgICAgICJ2aWRlby5zcmM9J3ZpZGVvLm1wNCc7IgorICAgICAgICAidmlkZW8uYXV0b3Bs
YXkgPSAxOyIKKyAgICAgICAgImRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodmlkZW8pOyIKKyAg
ICAifSIKKyI8L3NjcmlwdD4iCisiPGJvZHkgb25sb2FkPSdjcmVhdGVWaWRlb0VsZW1lbnQoKSc+
PC9ib2R5PiI7CisKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gdGVzdFZpZGVvQnl0ZXMoKQorewor
ICAgIE5TRGF0YSAqZGF0YSA9IFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09mVVJMOltbTlNCdW5k
bGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJ0ZXN0IiB3aXRoRXh0ZW5zaW9uOkAibXA0
IiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKKyAgICBWZWN0b3I8
dWludDhfdD4gdmVjdG9yOworICAgIHZlY3Rvci5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCk7CisgICAgcmV0dXJuIHZlY3RvcjsKK30K
Kworc3RhdGljIHZvaWQgcnVuVmlkZW9UZXN0KE5TVVJMUmVxdWVzdCAqcmVxdWVzdCwgY29uc3Qg
Y2hhciogZXhwZWN0ZWRNZXNzYWdlID0gInBsYXlpbmciKQoreworICAgIGF1dG8gY29uZmlndXJh
dGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7Cisg
ICAgY29uZmlndXJhdGlvbi5nZXQoKS5tZWRpYVR5cGVzUmVxdWlyaW5nVXNlckFjdGlvbkZvclBs
YXliYWNrID0gV0tBdWRpb3Zpc3VhbE1lZGlhVHlwZU5vbmU7CisgICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCAzMDAsIDMwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpIGFkZFRvV2lu
ZG93OllFU10pOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOworICAgIEVYUEVD
VF9XS19TVFJFUShbd2ViVmlldyBfdGVzdF93YWl0Rm9yQWxlcnRdLCBleHBlY3RlZE1lc3NhZ2Up
OworfQorCitURVNUKE1lZGlhTG9hZGluZywgUmFuZ2VSZXF1ZXN0U3ludGhlc2lzV2l0aENvbnRl
bnRMZW5ndGgpCit7CisgICAgSFRUUFNlcnZlciBzZXJ2ZXIoeworICAgICAgICB7Ii8iLCB7IHZp
ZGVvUGxheVRlc3RIVE1MIH19LAorICAgICAgICB7Ii92aWRlby5tcDQiLCB7IHRlc3RWaWRlb0J5
dGVzKCkgfX0KKyAgICB9KTsKKyAgICBydW5WaWRlb1Rlc3Qoc2VydmVyLnJlcXVlc3QoKSk7Cisg
ICAgRVhQRUNUX0VRKHNlcnZlci50b3RhbFJlcXVlc3RzKCksIDJ1KTsKIH0KIAorVEVTVChNZWRp
YUxvYWRpbmcsIFJhbmdlUmVxdWVzdFN5bnRoZXNpc1dpdGhvdXRDb250ZW50TGVuZ3RoKQorewor
ICAgIHNpemVfdCB0b3RhbFJlcXVlc3RzIHsgMCB9OworICAgIEZ1bmN0aW9uPHZvaWQoQ29ubmVj
dGlvbik+IHJlc3BvbmRUb1JlcXVlc3RzOworICAgIHJlc3BvbmRUb1JlcXVlc3RzID0gWyZdIChD
b25uZWN0aW9uIGNvbm5lY3Rpb24pIHsKKyAgICAgICAgY29ubmVjdGlvbi5yZWNlaXZlSFRUUFJl
cXVlc3QoWyYsIGNvbm5lY3Rpb25dIChWZWN0b3I8Y2hhcj4mJiByZXF1ZXN0KSB7CisgICAgICAg
ICAgICBhdXRvIHNlbmRSZXNwb25zZSA9IFsmLCBjb25uZWN0aW9uXSAoSFRUUFJlc3BvbnNlIHJl
c3BvbnNlLCBIVFRQUmVzcG9uc2U6OkluY2x1ZGVDb250ZW50TGVuZ3RoIGluY2x1ZGVDb250ZW50
TGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5zZW5kKHJlc3BvbnNlLnNlcmlh
bGl6ZShpbmNsdWRlQ29udGVudExlbmd0aCksIFsmLCBjb25uZWN0aW9uXSB7CisgICAgICAgICAg
ICAgICAgICAgIHJlc3BvbmRUb1JlcXVlc3RzKGNvbm5lY3Rpb24pOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHRvdGFsUmVxdWVzdHMrKzsKKyAgICAg
ICAgICAgIGF1dG8gcGF0aCA9IEhUVFBTZXJ2ZXI6OnBhcnNlUGF0aChyZXF1ZXN0KTsKKyAgICAg
ICAgICAgIGlmIChwYXRoID09ICIvIikKKyAgICAgICAgICAgICAgICBzZW5kUmVzcG9uc2UoeyB2
aWRlb1BsYXlUZXN0SFRNTCB9LCBIVFRQUmVzcG9uc2U6OkluY2x1ZGVDb250ZW50TGVuZ3RoOjpZ
ZXMpOworICAgICAgICAgICAgZWxzZSBpZiAocGF0aCA9PSAiL3ZpZGVvLm1wNCIpCisgICAgICAg
ICAgICAgICAgc2VuZFJlc3BvbnNlKHRlc3RWaWRlb0J5dGVzKCksIEhUVFBSZXNwb25zZTo6SW5j
bHVkZUNvbnRlbnRMZW5ndGg6Ok5vKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBBU1NFUlQocGF0aC5pc051bGwoKSk7CisgICAgICAgIH0pOworICAgIH07CisKKyAgICBIVFRQ
U2VydmVyIHNlcnZlcihbJl0oQ29ubmVjdGlvbiBjb25uZWN0aW9uKSB7CisgICAgICAgIHJlc3Bv
bmRUb1JlcXVlc3RzKGNvbm5lY3Rpb24pOworICAgIH0pOworICAgIHJ1blZpZGVvVGVzdChzZXJ2
ZXIucmVxdWVzdCgpLCAiZXJyb3IiKTsKKyAgICBFWFBFQ1RfRVEodG90YWxSZXF1ZXN0cywgMnUp
OworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisKICNlbmRpZiAvLyBFTkFCTEUo
VklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL2NvY29hL0hUVFBTZXJ2ZXIuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNl
cnZlci5oCmluZGV4IDM5NWRhZjkzMWUyOGE3MWU3N2I4MGYxMDE3OGY1NTk0ODVmMzUxYzIuLmMy
ODBlNWRhYTk4ZWY2NjIzMjZmMWJjZjRmZjI4M2U1ZmEzOTAzNTAgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvY29jb2EvSFRUUFNlcnZlci5oCkBAIC0zNSwxMCArMzUsMTAgQEAKIG5hbWVzcGFjZSBUZXN0
V2ViS2l0QVBJIHsKIAogY2xhc3MgQ29ubmVjdGlvbjsKK3N0cnVjdCBIVFRQUmVzcG9uc2U7CiAK
IGNsYXNzIEhUVFBTZXJ2ZXIgewogcHVibGljOgotICAgIHN0cnVjdCBIVFRQUmVzcG9uc2U7CiAg
ICAgc3RydWN0IFJlcXVlc3REYXRhOwogICAgIGVudW0gY2xhc3MgUHJvdG9jb2wgOiB1aW50OF90
IHsgSHR0cCwgSHR0cHMsIEh0dHBzV2l0aExlZ2FjeVRMUywgSHR0cDIgfTsKICAgICB1c2luZyBD
ZXJ0aWZpY2F0ZVZlcmlmaWVyID0gRnVuY3Rpb248dm9pZChzZWNfcHJvdG9jb2xfbWV0YWRhdGFf
dCwgc2VjX3RydXN0X3QsIHNlY19wcm90b2NvbF92ZXJpZnlfY29tcGxldGVfdCk+OwpAQCAtNTMs
NiArNTMsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCByZXNwb25kV2l0aE9LKENvbm5l
Y3Rpb24pOwogICAgIHN0YXRpYyB2b2lkIHJlc3BvbmRXaXRoQ2hhbGxlbmdlVGhlbk9LKENvbm5l
Y3Rpb24pOworICAgIHN0YXRpYyBTdHJpbmcgcGFyc2VQYXRoKGNvbnN0IFZlY3RvcjxjaGFyPiYg
cmVxdWVzdCk7CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIFJldGFpblB0cjxud19wYXJhbWV0ZXJz
X3Q+IGxpc3RlbmVyUGFyYW1ldGVycyhQcm90b2NvbCwgQ2VydGlmaWNhdGVWZXJpZmllciYmLCBS
ZXRhaW5QdHI8U2VjSWRlbnRpdHlSZWY+JiYsIE9wdGlvbmFsPHVpbnQxNl90PiBwb3J0KTsKQEAg
LTgxLDE4ICs4MiwyMCBAQCBwcml2YXRlOgogICAgIFJldGFpblB0cjxud19jb25uZWN0aW9uX3Q+
IG1fY29ubmVjdGlvbjsKIH07CiAKLXN0cnVjdCBIVFRQU2VydmVyOjpIVFRQUmVzcG9uc2Ugewor
c3RydWN0IEhUVFBSZXNwb25zZSB7CiAgICAgZW51bSBjbGFzcyBUZXJtaW5hdGVDb25uZWN0aW9u
IHsgTm8sIFllcyB9OwotICAgIAorCisgICAgSFRUUFJlc3BvbnNlKFZlY3Rvcjx1aW50OF90PiYm
IGJvZHkpCisgICAgICAgIDogYm9keShXVEZNb3ZlKGJvZHkpKSB7IH0KICAgICBIVFRQUmVzcG9u
c2UoY29uc3QgU3RyaW5nJiBib2R5KQotICAgICAgICA6IGJvZHkoYm9keSkgeyB9Ci0gICAgSFRU
UFJlc3BvbnNlKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiYgaGVhZGVyRmllbGRzLCBTdHJpbmcm
JiBib2R5KQorICAgICAgICA6IGJvZHkoYm9keUZyb21TdHJpbmcoYm9keSkpIHsgfQorICAgIEhU
VFBSZXNwb25zZShIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYmIGhlYWRlckZpZWxkcywgY29uc3Qg
U3RyaW5nJiBib2R5KQogICAgICAgICA6IGhlYWRlckZpZWxkcyhXVEZNb3ZlKGhlYWRlckZpZWxk
cykpCi0gICAgICAgICwgYm9keShXVEZNb3ZlKGJvZHkpKSB7IH0KLSAgICBIVFRQUmVzcG9uc2Uo
dW5zaWduZWQgc3RhdHVzQ29kZSwgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mJiBoZWFkZXJGaWVs
ZHMgPSB7IH0sIFN0cmluZyYmIGJvZHkgPSB7IH0pCisgICAgICAgICwgYm9keShib2R5RnJvbVN0
cmluZyhib2R5KSkgeyB9CisgICAgSFRUUFJlc3BvbnNlKHVuc2lnbmVkIHN0YXR1c0NvZGUsIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+JiYgaGVhZGVyRmllbGRzID0geyB9LCBjb25zdCBTdHJpbmcm
IGJvZHkgPSB7IH0pCiAgICAgICAgIDogc3RhdHVzQ29kZShzdGF0dXNDb2RlKQogICAgICAgICAs
IGhlYWRlckZpZWxkcyhXVEZNb3ZlKGhlYWRlckZpZWxkcykpCi0gICAgICAgICwgYm9keShXVEZN
b3ZlKGJvZHkpKSB7IH0KKyAgICAgICAgLCBib2R5KGJvZHlGcm9tU3RyaW5nKGJvZHkpKSB7IH0K
ICAgICBIVFRQUmVzcG9uc2UoVGVybWluYXRlQ29ubmVjdGlvbiB0ZXJtaW5hdGVDb25uZWN0aW9u
KQogICAgICAgICA6IHRlcm1pbmF0ZUNvbm5lY3Rpb24odGVybWluYXRlQ29ubmVjdGlvbikgeyB9
CiAKQEAgLTEwMSwxMCArMTA0LDE0IEBAIHN0cnVjdCBIVFRQU2VydmVyOjpIVFRQUmVzcG9uc2Ug
ewogICAgIEhUVFBSZXNwb25zZSgpID0gZGVmYXVsdDsKICAgICBIVFRQUmVzcG9uc2UmIG9wZXJh
dG9yPShjb25zdCBIVFRQUmVzcG9uc2UmKSA9IGRlZmF1bHQ7CiAgICAgSFRUUFJlc3BvbnNlJiBv
cGVyYXRvcj0oSFRUUFJlc3BvbnNlJiYpID0gZGVmYXVsdDsKLSAgICAKKworICAgIGVudW0gY2xh
c3MgSW5jbHVkZUNvbnRlbnRMZW5ndGggOiBib29sIHsgTm8sIFllcyB9OworICAgIFZlY3Rvcjx1
aW50OF90PiBzZXJpYWxpemUoSW5jbHVkZUNvbnRlbnRMZW5ndGggPSBJbmNsdWRlQ29udGVudExl
bmd0aDo6WWVzKTsKKyAgICBzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IGJvZHlGcm9tU3RyaW5nKGNv
bnN0IFN0cmluZyYpOworCiAgICAgdW5zaWduZWQgc3RhdHVzQ29kZSB7IDIwMCB9OwogICAgIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+IGhlYWRlckZpZWxkczsKLSAgICBTdHJpbmcgYm9keTsKKyAg
ICBWZWN0b3I8dWludDhfdD4gYm9keTsKICAgICBUZXJtaW5hdGVDb25uZWN0aW9uIHRlcm1pbmF0
ZUNvbm5lY3Rpb24geyBUZXJtaW5hdGVDb25uZWN0aW9uOjpObyB9OwogfTsKIApkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCmluZGV4IDEwNzQ0YTVjNDQzZjViMzlmZWYzNmM4
MzhlODA1ODY0ZmFmZWIxNjIuLmJhYmY0ZDAwYjM0MjRmNmY1MWRkYmIzM2RiYzVlYzJlZjBlYThl
ZTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0KQEAgLTM4LDggKzM4
LDggQEAgbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiBzdHJ1Y3QgSFRUUFNlcnZlcjo6UmVx
dWVzdERhdGEgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVxdWVzdERhdGEsIFdURjo6
RGVzdHJ1Y3Rpb25UaHJlYWQ6Ok1haW5SdW5Mb29wPiB7CiAgICAgUmVxdWVzdERhdGEoc3RkOjpp
bml0aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxTdHJpbmcsIEhUVFBSZXNwb25zZT4+IHJlc3BvbnNl
cykKLSAgICA6IHJlcXVlc3RNYXAoW10oc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxT
dHJpbmcsIEhUVFBTZXJ2ZXI6OkhUVFBSZXNwb25zZT4+IGxpc3QpIHsKLSAgICAgICAgSGFzaE1h
cDxTdHJpbmcsIEhUVFBTZXJ2ZXI6OkhUVFBSZXNwb25zZT4gbWFwOworICAgIDogcmVxdWVzdE1h
cChbXShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpwYWlyPFN0cmluZywgSFRUUFJlc3BvbnNl
Pj4gbGlzdCkgeworICAgICAgICBIYXNoTWFwPFN0cmluZywgSFRUUFJlc3BvbnNlPiBtYXA7CiAg
ICAgICAgIGZvciAoYXV0byYgcGFpciA6IGxpc3QpCiAgICAgICAgICAgICBtYXAuYWRkKHBhaXIu
Zmlyc3QsIHBhaXIuc2Vjb25kKTsKICAgICAgICAgcmV0dXJuIG1hcDsKQEAgLTIxMiw2ICsyMTIs
MzEgQEAgc3RhdGljIFZlY3Rvcjx1aW50OF90PiB2ZWN0b3JGcm9tRGF0YShkaXNwYXRjaF9kYXRh
X3QgY29udGVudCkKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIAorc3RhdGljIHZvaWQgYXBwZW5k
VG9WZWN0b3IoVmVjdG9yPHVpbnQ4X3Q+JiB2ZWN0b3IsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQor
eworICAgIGF1dG8gdXRmOCA9IHN0cmluZy51dGY4KCk7CisgICAgdmVjdG9yLmFwcGVuZChyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih1dGY4LmRhdGEoKSksIHV0ZjgubGVuZ3RoKCkp
OworfQorCitTdHJpbmcgSFRUUFNlcnZlcjo6cGFyc2VQYXRoKGNvbnN0IFZlY3RvcjxjaGFyPiYg
cmVxdWVzdCkKK3sKKyAgICBpZiAoIXJlcXVlc3Quc2l6ZSgpKQorICAgICAgICByZXR1cm4geyB9
OworICAgIGNvbnN0IGNoYXIqIGdldFBhdGhQcmVmaXggPSAiR0VUICI7CisgICAgY29uc3QgY2hh
ciogcG9zdFBhdGhQcmVmaXggPSAiUE9TVCAiOworICAgIGNvbnN0IGNoYXIqIHBhdGhTdWZmaXgg
PSAiIEhUVFAvMS4xXHJcbiI7CisgICAgY29uc3QgY2hhciogcGF0aEVuZCA9IHN0cm5zdHIocmVx
dWVzdC5kYXRhKCksIHBhdGhTdWZmaXgsIHJlcXVlc3Quc2l6ZSgpKTsKKyAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKHBhdGhFbmQsICJIVFRQU2VydmVyIGFzc3VtZXMgcmVxdWVzdCBpcyBIVFRQIDEu
MSIpOworICAgIHNpemVfdCBwYXRoUHJlZml4TGVuZ3RoID0gMDsKKyAgICBpZiAoIW1lbWNtcChy
ZXF1ZXN0LmRhdGEoKSwgZ2V0UGF0aFByZWZpeCwgc3RybGVuKGdldFBhdGhQcmVmaXgpKSkKKyAg
ICAgICAgcGF0aFByZWZpeExlbmd0aCA9IHN0cmxlbihnZXRQYXRoUHJlZml4KTsKKyAgICBlbHNl
IGlmICghbWVtY21wKHJlcXVlc3QuZGF0YSgpLCBwb3N0UGF0aFByZWZpeCwgc3RybGVuKHBvc3RQ
YXRoUHJlZml4KSkpCisgICAgICAgIHBhdGhQcmVmaXhMZW5ndGggPSBzdHJsZW4ocG9zdFBhdGhQ
cmVmaXgpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocGF0aFByZWZpeExlbmd0aCwgIkhUVFBT
ZXJ2ZXIgYXNzdW1lcyByZXF1ZXN0IGlzIEdFVCBvciBQT1NUIik7CisgICAgc2l6ZV90IHBhdGhM
ZW5ndGggPSBwYXRoRW5kIC0gcmVxdWVzdC5kYXRhKCkgLSBwYXRoUHJlZml4TGVuZ3RoOworICAg
IHJldHVybiBTdHJpbmcocmVxdWVzdC5kYXRhKCkgKyBwYXRoUHJlZml4TGVuZ3RoLCBwYXRoTGVu
Z3RoKTsKK30KKwogdm9pZCBIVFRQU2VydmVyOjpyZXNwb25kVG9SZXF1ZXN0cyhDb25uZWN0aW9u
IGNvbm5lY3Rpb24sIFJlZjxSZXF1ZXN0RGF0YT4gcmVxdWVzdERhdGEpCiB7CiAgICAgY29ubmVj
dGlvbi5yZWNlaXZlSFRUUFJlcXVlc3QoW2Nvbm5lY3Rpb24sIHJlcXVlc3REYXRhXSAoVmVjdG9y
PGNoYXI+JiYgcmVxdWVzdCkgbXV0YWJsZSB7CkBAIC0yMTksMzIgKzI0NCwxNCBAQCB2b2lkIEhU
VFBTZXJ2ZXI6OnJlc3BvbmRUb1JlcXVlc3RzKENvbm5lY3Rpb24gY29ubmVjdGlvbiwgUmVmPFJl
cXVlc3REYXRhPiByZXF1ZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICByZXF1ZXN0RGF0
YS0+cmVxdWVzdENvdW50Kys7CiAKLSAgICAgICAgY29uc3QgY2hhciogZ2V0UGF0aFByZWZpeCA9
ICJHRVQgIjsKLSAgICAgICAgY29uc3QgY2hhciogcG9zdFBhdGhQcmVmaXggPSAiUE9TVCAiOwot
ICAgICAgICBjb25zdCBjaGFyKiBwYXRoU3VmZml4ID0gIiBIVFRQLzEuMVxyXG4iOwotICAgICAg
ICBjb25zdCBjaGFyKiBwYXRoRW5kID0gc3RybnN0cihyZXF1ZXN0LmRhdGEoKSwgcGF0aFN1ZmZp
eCwgcmVxdWVzdC5zaXplKCkpOwotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHBhdGhFbmQs
ICJIVFRQU2VydmVyIGFzc3VtZXMgcmVxdWVzdCBpcyBIVFRQIDEuMSIpOwotICAgICAgICBzaXpl
X3QgcGF0aFByZWZpeExlbmd0aCA9IDA7Ci0gICAgICAgIGlmICghbWVtY21wKHJlcXVlc3QuZGF0
YSgpLCBnZXRQYXRoUHJlZml4LCBzdHJsZW4oZ2V0UGF0aFByZWZpeCkpKQotICAgICAgICAgICAg
cGF0aFByZWZpeExlbmd0aCA9IHN0cmxlbihnZXRQYXRoUHJlZml4KTsKLSAgICAgICAgZWxzZSBp
ZiAoIW1lbWNtcChyZXF1ZXN0LmRhdGEoKSwgcG9zdFBhdGhQcmVmaXgsIHN0cmxlbihwb3N0UGF0
aFByZWZpeCkpKQotICAgICAgICAgICAgcGF0aFByZWZpeExlbmd0aCA9IHN0cmxlbihwb3N0UGF0
aFByZWZpeCk7Ci0gICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocGF0aFByZWZpeExlbmd0aCwg
IkhUVFBTZXJ2ZXIgYXNzdW1lcyByZXF1ZXN0IGlzIEdFVCBvciBQT1NUIik7Ci0gICAgICAgIHNp
emVfdCBwYXRoTGVuZ3RoID0gcGF0aEVuZCAtIHJlcXVlc3QuZGF0YSgpIC0gcGF0aFByZWZpeExl
bmd0aDsKLSAgICAgICAgU3RyaW5nIHBhdGgocmVxdWVzdC5kYXRhKCkgKyBwYXRoUHJlZml4TGVu
Z3RoLCBwYXRoTGVuZ3RoKTsKKyAgICAgICAgYXV0byBwYXRoID0gcGFyc2VQYXRoKHJlcXVlc3Qp
OwogICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHJlcXVlc3REYXRhLT5yZXF1ZXN0TWFwLmNv
bnRhaW5zKHBhdGgpLCAiVGhpcyBIVFRQU2VydmVyIGRvZXMgbm90IGtub3cgaG93IHRvIHJlc3Bv
bmQgdG8gYSByZXF1ZXN0IGZvciAlcyIsIHBhdGgudXRmOCgpLmRhdGEoKSk7CiAKICAgICAgICAg
YXV0byByZXNwb25zZSA9IHJlcXVlc3REYXRhLT5yZXF1ZXN0TWFwLmdldChwYXRoKTsKICAgICAg
ICAgaWYgKHJlc3BvbnNlLnRlcm1pbmF0ZUNvbm5lY3Rpb24gPT0gSFRUUFJlc3BvbnNlOjpUZXJt
aW5hdGVDb25uZWN0aW9uOjpZZXMpCiAgICAgICAgICAgICByZXR1cm4gY29ubmVjdGlvbi50ZXJt
aW5hdGUoKTsKLSAgICAgICAgU3RyaW5nQnVpbGRlciByZXNwb25zZUJ1aWxkZXI7Ci0gICAgICAg
IHJlc3BvbnNlQnVpbGRlci5hcHBlbmQoIkhUVFAvMS4xICIsIHJlc3BvbnNlLnN0YXR1c0NvZGUs
ICcgJywgc3RhdHVzVGV4dChyZXNwb25zZS5zdGF0dXNDb2RlKSwgIlxyXG4iKTsKLSAgICAgICAg
cmVzcG9uc2VCdWlsZGVyLmFwcGVuZCgiQ29udGVudC1MZW5ndGg6ICIsIHJlc3BvbnNlLmJvZHku
bGVuZ3RoKCksICJcclxuIik7Ci0gICAgICAgIGZvciAoYXV0byYgcGFpciA6IHJlc3BvbnNlLmhl
YWRlckZpZWxkcykKLSAgICAgICAgICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQocGFpci5rZXks
ICI6ICIsIHBhaXIudmFsdWUsICJcclxuIik7Ci0gICAgICAgIHJlc3BvbnNlQnVpbGRlci5hcHBl
bmQoIlxyXG4iKTsKLSAgICAgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZChyZXNwb25zZS5ib2R5
KTsKLSAgICAgICAgY29ubmVjdGlvbi5zZW5kKHJlc3BvbnNlQnVpbGRlci50b1N0cmluZygpLCBb
Y29ubmVjdGlvbiwgcmVxdWVzdERhdGFdIHsKKworICAgICAgICBjb25uZWN0aW9uLnNlbmQocmVz
cG9uc2Uuc2VyaWFsaXplKCksIFtjb25uZWN0aW9uLCByZXF1ZXN0RGF0YV0gewogICAgICAgICAg
ICAgcmVzcG9uZFRvUmVxdWVzdHMoY29ubmVjdGlvbiwgcmVxdWVzdERhdGEpOwogICAgICAgICB9
KTsKICAgICB9KTsKQEAgLTMzNCw2ICszNDEsMjkgQEAgdm9pZCBDb25uZWN0aW9uOjpjYW5jZWwo
KQogICAgIG1fY29ubmVjdGlvbiA9IG51bGxwdHI7CiB9CiAKK1ZlY3Rvcjx1aW50OF90PiBIVFRQ
UmVzcG9uc2U6OmJvZHlGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIFZl
Y3Rvcjx1aW50OF90PiB2ZWN0b3I7CisgICAgYXBwZW5kVG9WZWN0b3IodmVjdG9yLCBzdHJpbmcp
OworICAgIHJldHVybiB2ZWN0b3I7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBIVFRQUmVzcG9uc2U6
OnNlcmlhbGl6ZShJbmNsdWRlQ29udGVudExlbmd0aCBpbmNsdWRlQ29udGVudExlbmd0aCkKK3sK
KyAgICBTdHJpbmdCdWlsZGVyIHJlc3BvbnNlQnVpbGRlcjsKKyAgICByZXNwb25zZUJ1aWxkZXIu
YXBwZW5kKCJIVFRQLzEuMSAiLCBzdGF0dXNDb2RlLCAnICcsIHN0YXR1c1RleHQoc3RhdHVzQ29k
ZSksICJcclxuIik7CisgICAgaWYgKGluY2x1ZGVDb250ZW50TGVuZ3RoID09IEluY2x1ZGVDb250
ZW50TGVuZ3RoOjpZZXMpCisgICAgICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQoIkNvbnRlbnQt
TGVuZ3RoOiAiLCBib2R5LnNpemUoKSwgIlxyXG4iKTsKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBo
ZWFkZXJGaWVsZHMpCisgICAgICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQocGFpci5rZXksICI6
ICIsIHBhaXIudmFsdWUsICJcclxuIik7CisgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZCgiXHJc
biIpOworICAgIAorICAgIFZlY3Rvcjx1aW50OF90PiBieXRlc1RvU2VuZDsKKyAgICBhcHBlbmRU
b1ZlY3RvcihieXRlc1RvU2VuZCwgcmVzcG9uc2VCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIGJ5
dGVzVG9TZW5kLmFwcGVuZFZlY3Rvcihib2R5KTsKKyAgICByZXR1cm4gYnl0ZXNUb1NlbmQ7Cit9
CisKIHZvaWQgSDI6OkNvbm5lY3Rpb246OnNlbmQoRnJhbWUmJiBmcmFtZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewogICAgIGF1dG8gZnJh
bWVUeXBlID0gZnJhbWUudHlwZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420405</attachid>
            <date>2021-02-15 17:35:02 -0800</date>
            <delta_ts>2021-02-15 17:43:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221072-20210215173501.patch</filename>
            <type>text/plain</type>
            <size>73792</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyODU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTIxY2IyNTJiMTJjMTA4
M2Q1YzEyMjYzZTk5YWU2ZTMwOThkNzljMC4uZWE4MmViMGExMjYyNDhmNDJiYzZhYjZhNGUyMzkx
ZTgyY2ViNzY3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIxLTAyLTE1ICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3ludGhl
c2l6ZSByYW5nZSByZXNwb25zZXMgaWYgbmVlZGVkIGluIFdlYkNvcmVOU1VSTFNlc3Npb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTA3MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmIEdhcmVuLgorCisgICAgICAgIFdoZW4gd2UgbWFrZSBh
IG1lZGlhIHJlcXVlc3Qgd2l0aCBhIFJhbmdlIEhUVFAgaGVhZGVyIGZpZWxkIGFuZCB0aGUgc2Vy
dmVyIGRvZXNuJ3QgcmVzcG9uZCB3aXRoIGEgMjA2IHdpdGggQ29udGVudC1SYW5nZSBoZWFkZXIg
ZmllbGQsCisgICAgICAgIHVudGlsIG5vdyB3ZSB3b3VsZCBqdXN0IGZhaWwgdG8gcGxheSB0aGUg
dmlkZW8uICBJbiBvcmRlciB0byBzdWNjZXNzZnVsbHkgcGxheSB0aGVzZSB2aWRlb3MsIEkgaW50
cm9kdWNlIHRoZSBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yIGNsYXNzLAorICAgICAgICB3aGljaCB3
aWxsIHJlY2VpdmUgdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBmb3Igc3VjaCBhIHZpZGVvIGFuZCBm
ZWVkIHRoZSBkYXRhIGludG8gV2ViQ29yZU5TVVJMU2Vzc2lvbiBhcyB0aGUgcmVxdWVzdGVkIHJh
bmdlcyBhcmUgcmVjZWl2ZWQuCisgICAgICAgIFNlZWtpbmcgaXMgcHJvYmxlbWF0aWMsIGJ1dCBh
dCBsZWFzdCB3ZSB3aWxsIHRyeSBvdXIgYmVzdCB0byBwbGF5IHRoZSB2aWRlby4KKworICAgICAg
ICBJIGFkZGVkIEFQSSB0ZXN0cyB0aGF0IHRyeSB0byBwbGF5IGEgdmlkZW8gdGhhdCBkaWRuJ3Qg
cGxheSBiZWZvcmUgdXNpbmcgYSBzZXJ2ZXIgdGhhdCBkb2Vzbid0IHN1cHBvcnQgcmFuZ2UgcmVx
dWVzdHMuICBNYW51YWwgdmVyaWZpY2F0aW9uIGlzIGFsc28gbmVjZXNzYXJ5LgorCisgICAgICAg
ICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybU1lZGlhUmVzb3VyY2U6OnNldENsaWVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvV2ViQ29yZUFWRlJlc291cmNlTG9hZGVyLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1SZXNvdXJjZU1lZGlhTG9hZGVyOjpjcmVhdGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUGFyc2VkUmVxdWVzdFJhbmdlLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpQYXJzZWRSZXF1ZXN0UmFuZ2U6OnBhcnNlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL1BhcnNlZFJlcXVlc3RSYW5nZS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlBhcnNlZFJlcXVlc3RSYW5nZTo6YmVnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UGFyc2VkUmVxdWVzdFJhbmdlOjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGFy
c2VkUmVxdWVzdFJhbmdlOjpQYXJzZWRSZXF1ZXN0UmFuZ2UpOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvY29jb2EvUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1JhbmdlUmVzcG9uc2VHZW5lcmF0b3IubW06IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6RGF0YTo6RGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpEYXRhOjpUYXNrRGF0
YTo6VGFza0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6c3ludGhlc2l6ZWRSZXNwb25zZUZvclJh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlUmVzcG9uc2VHZW5lcmF0b3I6OnJlbW92ZVRh
c2spOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6Z2l2ZVJlc3Bv
bnNlVG9UYXNrSWZCeXRlc0luUmFuZ2VSZWNlaXZlZCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5n
ZVJlc3BvbnNlR2VuZXJhdG9yOjpleHBlY3RlZENvbnRlbnRMZW5ndGhGcm9tRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpnaXZlUmVzcG9uc2VUb1Rhc2tz
V2l0aEZpbmlzaGVkUmFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlUmVzcG9uc2VHZW5l
cmF0b3I6OndpbGxIYW5kbGVSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlUmVzcG9u
c2VHZW5lcmF0b3I6OndpbGxTeW50aGVzaXplUmFuZ2VSZXNwb25zZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5oOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5tbToKKyAgICAgICAgKC1b
V2ViQ29yZU5TVVJMU2Vzc2lvbiByYW5nZVJlc3BvbnNlR2VuZXJhdG9yXSk6CisgICAgICAgICgt
W1dlYkNvcmVOU1VSTFNlc3Npb24gZGF0YVRhc2tXaXRoVVJMOl0pOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjpkYXRhU2VudCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OnJlc3BvbnNlUmVj
ZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xp
ZW50OjpzaG91bGRDYWNoZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVOU1VS
TFNlc3Npb25EYXRhVGFza0NsaWVudDo6ZGF0YVJlY2VpdmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6cmVkaXJlY3RSZWNlaXZlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmFjY2Vz
c0NvbnRyb2xDaGVja0ZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlTlNVUkxTZXNz
aW9uRGF0YVRhc2tDbGllbnQ6OmxvYWRGYWlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29y
ZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQpOgorICAgICAgICAoLVtX
ZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgX3Jlc3RhcnRdKToKKyAgICAgICAgKC1bV2ViQ29y
ZU5TVVJMU2Vzc2lvbkRhdGFUYXNrIF9maW5pc2hdKToKKyAgICAgICAgKC1bV2ViQ29yZU5TVVJM
U2Vzc2lvbkRhdGFUYXNrIHJlc291cmNlOnNlbnRCeXRlczp0b3RhbEJ5dGVzVG9CZVNlbnQ6XSk6
CisgICAgICAgICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayByZXNvdXJjZTpyZWNlaXZl
ZFJlc3BvbnNlOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxT
ZXNzaW9uRGF0YVRhc2sgcmVzb3VyY2U6c2hvdWxkQ2FjaGVSZXNwb25zZTpdKToKKyAgICAgICAg
KC1bV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrIHJlc291cmNlOnJlY2VpdmVkRGF0YTpsZW5n
dGg6XSk6CisgICAgICAgICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayByZXNvdXJjZTpy
ZWNlaXZlZFJlZGlyZWN0OnJlcXVlc3Q6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgt
W1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayBfcmVzb3VyY2U6bG9hZEZpbmlzaGVkV2l0aEVy
cm9yOm1ldHJpY3M6XSk6CisgICAgICAgICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayBy
ZXNvdXJjZTphY2Nlc3NDb250cm9sQ2hlY2tGYWlsZWRXaXRoRXJyb3I6XSk6CisgICAgICAgICgt
W1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayByZXNvdXJjZTpsb2FkRmFpbGVkV2l0aEVycm9y
Ol0pOgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgcmVzb3VyY2VGaW5p
c2hlZDptZXRyaWNzOl0pOgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sg
aW5pdFdpdGhTZXNzaW9uOmlkZW50aWZpZXI6VVJMOl0pOiBEZWxldGVkLgorCiAyMDIxLTAyLTE1
ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSUZDXSBE
byBub3QgcmUtbWVhc3VyZSB3cmFwcGVkIGNvbnRlbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYTE0ZTIyY2EwNWE5
ZDZlN2YwOGY3YmExNDE1YjIyMWE1NTE4YjgzMi4uOGY1MDYwNmQ2MzllODFiYTNhNDdjZDMxZGEw
MzExNTkyZDM3MDAyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMS0wMi0xNSAgQWxl
eCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFN5bnRo
ZXNpemUgcmFuZ2UgcmVzcG9uc2VzIGlmIG5lZWRlZCBpbiBXZWJDb3JlTlNVUkxTZXNzaW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjEwNzIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6Ok1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZTo6cmVxdWVzdFJlc291cmNlKToKKwogMjAyMS0w
Mi0xNSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgU2hhcmUg
bW9yZSBjb2RlIGJldHdlZW4gUmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZSBhbmQgUmVtb3RlUmVh
bHRpbWVWaWRlb1NvdXJjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFr
ZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggZjg4NTkxNWZlOGJlNzllNTEy
NThmZmY4ZDgzMTgyYzk1ZDdkMzJjYi4uNGYzOGZiMDY4NGJjNTllZTZmN2M5ODk4MjllYzg4MmNl
ODA1ODZjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9T
b3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xNDEyLDYgKzE0MTIsNyBAQCBzZXQoV2Vi
Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3
b3JraW5nQ29udGV4dC5oCiAgICAgcGxhdGZvcm0vbmV0d29yay9QYXJzZWRDb250ZW50UmFuZ2Uu
aAogICAgIHBsYXRmb3JtL25ldHdvcmsvUGFyc2VkQ29udGVudFR5cGUuaAorICAgIHBsYXRmb3Jt
L25ldHdvcmsvUGFyc2VkUmVxdWVzdFJhbmdlLmgKICAgICBwbGF0Zm9ybS9uZXR3b3JrL1Byb3Rl
Y3Rpb25TcGFjZS5oCiAgICAgcGxhdGZvcm0vbmV0d29yay9Qcm90ZWN0aW9uU3BhY2VCYXNlLmgK
ICAgICBwbGF0Zm9ybS9uZXR3b3JrL1Byb3RlY3Rpb25TcGFjZUhhc2guaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApp
bmRleCAwNDVjZjI3MDZjMDM2N2U0Y2Y5MGIzMmRkZDc5MTQ2ZDVmYTExZGZmLi44YzAzYjkzMjY0
OTg1ZjBiYjFlZTlmNmQyMDIzZTM0ODMwOTJmNDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjEyMiw2
ICsyMTIyLDcgQEAgcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RhdGVOb3RpZmllci5jcHAKIHBs
YXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmNwcAogcGxhdGZvcm0vbmV0d29y
ay9QYXJzZWRDb250ZW50UmFuZ2UuY3BwCiBwbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZENvbnRlbnRU
eXBlLmNwcAorcGxhdGZvcm0vbmV0d29yay9QYXJzZWRSZXF1ZXN0UmFuZ2UuY3BwCiBwbGF0Zm9y
bS9uZXR3b3JrL1Byb3RlY3Rpb25TcGFjZUJhc2UuY3BwCiBwbGF0Zm9ybS9uZXR3b3JrL1Byb3h5
U2VydmVyLmNwcAogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUVycm9yQmFzZS5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzQ29jb2EudHh0CmluZGV4IDc5N2Y1MzFjODVmNjYyN2U0MzU1YzU0ZGI1YjljYzdmNTgz
YzE5ZWMuLjg5ZDMwZmNmZjcyYWE1NTY2MzIxNWIwYzgxZDc0ZjJmZGMzMWY5ZmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
U291cmNlc0NvY29hLnR4dApAQCAtNTcxLDYgKzU3MSw3IEBAIHBsYXRmb3JtL25ldHdvcmsvY29j
b2EvQ3JlZGVudGlhbENvY29hLm1tCiBwbGF0Zm9ybS9uZXR3b3JrL2NvY29hL05ldHdvcmtMb2Fk
TWV0cmljcy5tbQogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25D
b2NvYS5tbQogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9Qcm90ZWN0aW9uU3BhY2VDb2NvYS5tbQor
cGxhdGZvcm0vbmV0d29yay9jb2NvYS9SYW5nZVJlc3BvbnNlR2VuZXJhdG9yLm1tCiBwbGF0Zm9y
bS9uZXR3b3JrL2NvY29hL1Jlc291cmNlUmVxdWVzdENvY29hLm1tCiBwbGF0Zm9ybS9uZXR3b3Jr
L2NvY29hL1Jlc291cmNlUmVzcG9uc2VDb2NvYS5tbSBAbm8tdW5pZnkgLy8gVW5zYWZlIHRvIHVu
aWZ5IHVudGlsIHJkYXI6Ly9wcm9ibGVtLzQ4ODUzMTM3IGlzIHJlc29sdmVkCiBwbGF0Zm9ybS9u
ZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24ubW0gQG5vLXVuaWZ5CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGMxNWVi
NjQ4MDM3MzA1ODA3YjcwM2QwYmRiYWIzZjNiZmE1NzE1Yi4uMmUzYmEyZDhiYmFhMTc2MjQ0ZGE2
MjNjNjkyOTZlNWZlYmYwNzMwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTk0NCw2ICsxOTQ0LDggQEAKIAkJNUMyQjFBRUMy
MjM5N0VCQzAwQjkxQ0Y3IC8qIFJlc291cmNlUmVzcG9uc2VDb2NvYS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExRjc4RDBCMUMyNTQyMkMwMDI0NTQ0
NiAvKiBSZXNvdXJjZVJlc3BvbnNlQ29jb2EubW0gKi87IH07CiAJCTVDNDMwNEIxMTkxQUM5MDgw
MDBFMkJDMCAvKiBFWFRTaGFkZXJUZXh0dXJlTE9ELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzQzMDRBRTE5MUFDOTA4MDAwRTJCQzAgLyogRVhUU2hh
ZGVyVGV4dHVyZUxPRC5oICovOyB9OwogCQk1QzQzMDRCNjE5MUFFRjQ2MDAwRTJCQzAgLyogSlNF
WFRTaGFkZXJUZXh0dXJlTE9ELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1QzQzMDRCNDE5MUFFRjQ2MDAwRTJCQzAgLyogSlNFWFRTaGFkZXJUZXh0dXJl
TE9ELmggKi87IH07CisJCTVDNEEwRkQ3MjVDMzQzNTAwMEQ5RUU5NyAvKiBSYW5nZVJlc3BvbnNl
R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1QzRBMEZENTI1QzM0MkM4MDBEOUVFOTcgLyogUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTVDNEEwRkRB
MjVDMzQ0OUEwMEQ5RUU5NyAvKiBQYXJzZWRSZXF1ZXN0UmFuZ2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNEEwRkQ4MjVDMzQ0NkMwMEQ5RUU5NyAv
KiBQYXJzZWRSZXF1ZXN0UmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1QzUzRENFMTI0NDY1REZDMDBBOTMxMjQgLyogQXBwbGVQYXlTZXR1
cEZlYXR1cmVXZWJDb3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1QzUzRENDRjI0NDY0NDk5MDBBOTMxMjQgLyogQXBwbGVQYXlTZXR1cEZlYXR1cmVX
ZWJDb3JlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNUM1M0RDRTcyNDQ2OEFEMjAwQTkzMTI0IC8qIFBheW1lbnRJbnN0YWxsbWVudENvbmZpZ3Vy
YXRpb25XZWJDb3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1QzUzRENDRTI0NDY0NDk5MDBBOTMxMjQgLyogUGF5bWVudEluc3RhbGxtZW50Q29uZmln
dXJhdGlvbldlYkNvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk1QzUzRENFQTI0NDY4RkI0MDBBOTMxMjQgLyogQXBwbGVQYXlTZXR1cFdlYkNv
cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNTNE
Q0NCMjQ0NjQ0OTgwMEE5MzEyNCAvKiBBcHBsZVBheVNldHVwV2ViQ29yZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05NDk4LDYgKzk1MDAsMTEg
QEAKIAkJNUM0MzA0QUYxOTFBQzkwODAwMEUyQkMwIC8qIEVYVFNoYWRlclRleHR1cmVMT0QuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVFNoYWRlclRleHR1cmVMT0QuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1QzQzMDRCMzE5MUFFRjQ2MDAwRTJCQzAgLyogSlNFWFRT
aGFkZXJUZXh0dXJlTE9ELmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTVDNDMwNEI0MTkxQUVGNDYwMDBFMkJDMCAvKiBKU0VYVFNoYWRlclRleHR1cmVMT0QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEEwRkQzMjVDMzQyQzcwMEQ5RUU5NyAvKiBS
YW5nZVJlc3BvbnNlR2VuZXJhdG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNUM0QTBGRDUyNUMzNDJDODAwRDlFRTk3IC8qIFJhbmdlUmVzcG9uc2VHZW5lcmF0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmFuZ2VSZXNwb25zZUdlbmVy
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzRBMEZENjI1QzM0MkRCMDBE
OUVFOTcgLyogQ2VydGlmaWNhdGVJbmZvQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBDZXJ0aWZpY2F0ZUluZm9Db2NvYS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNUM0QTBGRDgyNUMzNDQ2QzAwRDlFRTk3IC8qIFBhcnNlZFJlcXVlc3RS
YW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZWRSZXF1ZXN0UmFu
Z2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QTBGRDkyNUMzNDQ2RDAwRDlF
RTk3IC8qIFBhcnNlZFJlcXVlc3RSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQYXJzZWRSZXF1ZXN0UmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1QzUzODFBRjFEODc5M0UwMDBFMkVCRTYgLyogVVJMU2VhcmNoUGFyYW1zLmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBVUkxTZWFyY2hQYXJhbXMuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1QzUzODFCMDFEODdENDU3MDBFMkVCRTYgLyogVVJMU2VhcmNoUGFy
YW1zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTFNlYXJjaFBh
cmFtcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDNTM4MUIxMUQ4N0Q0NTcw
MEUyRUJFNiAvKiBVUkxTZWFyY2hQYXJhbXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVVJMU2VhcmNoUGFyYW1zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
MTg0Nyw2ICsyMTg1NCw4IEBACiAJCQkJQ0RDRDQxRTYxQzNEREIwOTAwOTY1RDk5IC8qIFBhcnNl
ZENvbnRlbnRSYW5nZS5oICovLAogCQkJCTQ0Nzk1ODAyMTY0M0I0N0IwMDFFMEE3RiAvKiBQYXJz
ZWRDb250ZW50VHlwZS5jcHAgKi8sCiAJCQkJNDQ3OTU4MDMxNjQzQjQ3QjAwMUUwQTdGIC8qIFBh
cnNlZENvbnRlbnRUeXBlLmggKi8sCisJCQkJNUM0QTBGRDkyNUMzNDQ2RDAwRDlFRTk3IC8qIFBh
cnNlZFJlcXVlc3RSYW5nZS5jcHAgKi8sCisJCQkJNUM0QTBGRDgyNUMzNDQ2QzAwRDlFRTk3IC8q
IFBhcnNlZFJlcXVlc3RSYW5nZS5oICovLAogCQkJCTM3QkFBRTU3MTk4MEQxREQwMDVERkU3MSAv
KiBQcm90ZWN0aW9uU3BhY2UuaCAqLywKIAkJCQk1MTRDNzY1RjBDRTkyM0ExMDA3RUYzQ0QgLyog
UHJvdGVjdGlvblNwYWNlQmFzZS5jcHAgKi8sCiAJCQkJNTE0Qzc2NjAwQ0U5MjNBMTAwN0VGM0NE
IC8qIFByb3RlY3Rpb25TcGFjZUJhc2UuaCAqLywKQEAgLTIyOTMwLDYgKzIyOTM5LDcgQEAKIAkJ
N0U3REUxRkUxOTVDRUYyRDAwMzUzNjNCIC8qIGNvY29hICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1QzRBMEZENjI1QzM0MkRCMDBEOUVFOTcgLyogQ2Vy
dGlmaWNhdGVJbmZvQ29jb2EubW0gKi8sCiAJCQkJNTFEMTI0OEMxRTczNjQ1NjAwMkIyODIwIC8q
IENvb2tpZUNvY29hLm1tICovLAogCQkJCTUxMjBCQkFEMUYxQ0U3NzAwMEVGRUJGMSAvKiBDb29r
aWVTdG9yYWdlT2JzZXJ2ZXIuaCAqLywKIAkJCQk1MTIwQkJBQzFGMUNFNzcwMDBFRkVCRjEgLyog
Q29va2llU3RvcmFnZU9ic2VydmVyLm1tICovLApAQCAtMjI5NDAsNiArMjI5NTAsOCBAQAogCQkJ
CTUxRDEyNDhBMUU3MzYyNUMwMDJCMjgyMCAvKiBOZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5t
bSAqLywKIAkJCQkzNzJBREEzNzE5N0Y0N0I5MDBGQzUwMUUgLyogUHJvdGVjdGlvblNwYWNlQ29j
b2EuaCAqLywKIAkJCQkzNzJBREEzOTE5N0Y2ODc2MDBGQzUwMUUgLyogUHJvdGVjdGlvblNwYWNl
Q29jb2EubW0gKi8sCisJCQkJNUM0QTBGRDUyNUMzNDJDODAwRDlFRTk3IC8qIFJhbmdlUmVzcG9u
c2VHZW5lcmF0b3IuaCAqLywKKwkJCQk1QzRBMEZEMzI1QzM0MkM3MDBEOUVFOTcgLyogUmFuZ2VS
ZXNwb25zZUdlbmVyYXRvci5tbSAqLywKIAkJCQk3RTdERTFGQzE5NUNFRjI2MDAzNTM2M0IgLyog
UmVzb3VyY2VSZXF1ZXN0Q29jb2EubW0gKi8sCiAJCQkJQTFGNzhEMEIxQzI1NDIyQzAwMjQ1NDQ2
IC8qIFJlc291cmNlUmVzcG9uc2VDb2NvYS5tbSAqLywKIAkJCQlDRDIyNUMwQTFDNDZGQkY0MDAx
NDA3NjEgLyogV2ViQ29yZU5TVVJMU2Vzc2lvbi5oICovLApAQCAtMzQwMTMsNiArMzQwMjUsNyBA
QAogCQkJCUExODg5MEFGMUFBMTNGMjUwMDI2QzMwMSAvKiBQYXJlbnRhbENvbnRyb2xzQ29udGVu
dEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RDRDQxRTgxQzNEREIwQTAwOTY1RDk5IC8q
IFBhcnNlZENvbnRlbnRSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDQ3OTU4MDQxNjQzQjQ5
QTAwMUUwQTdGIC8qIFBhcnNlZENvbnRlbnRUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1QzRB
MEZEQTI1QzM0NDlBMDBEOUVFOTcgLyogUGFyc2VkUmVxdWVzdFJhbmdlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MzZENUEyMzE5M0U4RTBDMDBDRTRDQUIgLyogUGFyc2luZ1V0aWxpdGllcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQ0ExMjUxRjEyRDAwM0VGMjY5IC8qIFBhc3N3b3JkSW5w
dXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0QjI3MDhDNzBBRjE5RUU0MDA2NTEyN0YgLyog
UGFzdGVib2FyZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDIxNiw2ICszNDIyOSw3IEBACiAJCQkJ
OTNGMTk5MTgwODI0NUU1OTAwMUU5QUJDIC8qIFJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
M0Q5RDUzQzBEQTI3RTE4MDA3NzIxNkMgLyogUmFuZ2VCb3VuZGFyeVBvaW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGNTVCM0RDRTEyNTFGMTJEMDAzRUYyNjkgLyogUmFuZ2VJbnB1dFR5cGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTVDNEEwRkQ3MjVDMzQzNTAwMEQ5RUU5NyAvKiBSYW5nZVJlc3Bv
bnNlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTg0RTlFMTE3NjY4QkYxMDA4MTVC
NjggLyogUmFzdGVyU2hhcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NEQ4MjdDMTFEMzMzRUQw
MDk3Mjk5MCAvKiBSYXdEYXRhRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQx
NkU2RkU4MUJCRDEyREYwMDBBNjA0MyAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oCmluZGV4IDU3
YmZlOGFjZDYyODVmZWI5YjJlYjhiMjIyYTJiMTQwOWEyMTAxNjAuLjNlZDRlMDVjNDM5NGRmZjYz
YWU1ZmM2YmExZWYxYTgwNDI1NDNjYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oCkBA
IC00MSw3ICs0MSw3IEBAIGNsYXNzIFJlc291cmNlRXJyb3I7CiBjbGFzcyBSZXNvdXJjZVJlcXVl
c3Q7CiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogCi1jbGFzcyBQbGF0Zm9ybU1lZGlhUmVzb3Vy
Y2VDbGllbnQgeworY2xhc3MgUGxhdGZvcm1NZWRpYVJlc291cmNlQ2xpZW50IDogcHVibGljIFJl
ZkNvdW50ZWQ8UGxhdGZvcm1NZWRpYVJlc291cmNlQ2xpZW50PiB7CiBwdWJsaWM6CiAgICAgdmly
dHVhbCB+UGxhdGZvcm1NZWRpYVJlc291cmNlQ2xpZW50KCkgPSBkZWZhdWx0OwogCkBAIC04MSwx
MSArODEsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgeyB9CiAgICAgdmly
dHVhbCBib29sIGRpZFBhc3NBY2Nlc3NDb250cm9sQ2hlY2soKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogCi0gICAgdm9pZCBzZXRDbGllbnQoc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtTWVkaWFS
ZXNvdXJjZUNsaWVudD4mJiBjbGllbnQpIHsgbV9jbGllbnQgPSBXVEZNb3ZlKGNsaWVudCk7IH0K
KyAgICB2b2lkIHNldENsaWVudChSZWZQdHI8UGxhdGZvcm1NZWRpYVJlc291cmNlQ2xpZW50PiYm
IGNsaWVudCkgeyBtX2NsaWVudCA9IFdURk1vdmUoY2xpZW50KTsgfQogICAgIFBsYXRmb3JtTWVk
aWFSZXNvdXJjZUNsaWVudCogY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQuZ2V0KCk7IH0KIAog
cHJvdGVjdGVkOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybU1lZGlhUmVzb3VyY2VDbGll
bnQ+IG1fY2xpZW50OworICAgIFJlZlB0cjxQbGF0Zm9ybU1lZGlhUmVzb3VyY2VDbGllbnQ+IG1f
Y2xpZW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvV2ViQ29yZUFWRlJl
c291cmNlTG9hZGVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvV2ViQ29yZUFWRlJlc291cmNlTG9hZGVyLm1tCmluZGV4IGM4NTVkZTA4OGI2
ZDk0NGRhNmZjNDU1MjJmZmJiMmY1MDI4YzYyMWMuLjRkNWYzNTgwZWJhZDMwYmYwMGMzNjlkYTAx
NWYwMzhlNjBmZTViYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL1dlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9XZWJDb3Jl
QVZGUmVzb3VyY2VMb2FkZXIubW0KQEAgLTE3MCw3ICsxNzAsNyBAQCBXZWFrUHRyPFBsYXRmb3Jt
UmVzb3VyY2VNZWRpYUxvYWRlcj4gUGxhdGZvcm1SZXNvdXJjZU1lZGlhTG9hZGVyOjpjcmVhdGUo
V2ViQ29yZQogICAgIGlmICghcmVzb3VyY2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IGF1dG8qIHJlc291cmNlUG9pbnRlciA9IHJlc291cmNlLmdldCgpOwotICAgIGF1dG8gY2xpZW50
ID0gc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtUmVzb3VyY2VNZWRpYUxvYWRlcj4obmV3IFBsYXRm
b3JtUmVzb3VyY2VNZWRpYUxvYWRlciB7IHBhcmVudCwgcmVzb3VyY2UucmVsZWFzZU5vbk51bGwo
KSB9KTsKKyAgICBhdXRvIGNsaWVudCA9IGFkb3B0UmVmKCpuZXcgUGxhdGZvcm1SZXNvdXJjZU1l
ZGlhTG9hZGVyIHsgcGFyZW50LCByZXNvdXJjZS5yZWxlYXNlTm9uTnVsbCgpIH0pOwogICAgIGF1
dG8gcmVzdWx0ID0gbWFrZVdlYWtQdHIoY2xpZW50LmdldCgpKTsKIAogICAgIHJlc291cmNlUG9p
bnRlci0+c2V0Q2xpZW50KFdURk1vdmUoY2xpZW50KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRX
ZWJTb3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4IDU4YmE2MmQ3NDE2YzQ2Mzk4NDNkNTVmMjg4ZmI4
MzRlY2MxOWJkOTguLjBjYjdlNzJiNTAwMzUyNmFmZGI5MTE4N2U4Y2QxZDc1MWIyMzVmZGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJL
aXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC02OTksNyAr
Njk5LDcgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjTWFrZVJlcXVlc3QoV2ViS2l0V2ViU3Jj
KiBzcmMsIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcmkKICAgICAgICAgUGxhdGZvcm1NZWRpYVJl
c291cmNlTG9hZGVyOjpMb2FkT3B0aW9ucyBsb2FkT3B0aW9ucyA9IDA7CiAgICAgICAgIG1lbWJl
cnMtPnJlc291cmNlID0gbWVtYmVycy0+bG9hZGVyLT5yZXF1ZXN0UmVzb3VyY2UoUmVzb3VyY2VS
ZXF1ZXN0KHJlcXVlc3QpLCBsb2FkT3B0aW9ucyk7CiAgICAgICAgIGlmIChtZW1iZXJzLT5yZXNv
dXJjZSkgewotICAgICAgICAgICAgbWVtYmVycy0+cmVzb3VyY2UtPnNldENsaWVudChtYWtlVW5p
cXVlPENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Pihwcm90ZWN0b3IuZ2V0KCksIFJlc291
cmNlUmVxdWVzdChyZXF1ZXN0KSwgcmVxdWVzdE51bWJlcikpOworICAgICAgICAgICAgbWVtYmVy
cy0+cmVzb3VyY2UtPnNldENsaWVudChhZG9wdFJlZigqbmV3IENhY2hlZFJlc291cmNlU3RyZWFt
aW5nQ2xpZW50KHByb3RlY3Rvci5nZXQoKSwgUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpLCByZXF1
ZXN0TnVtYmVyKSkpOwogICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwcm90ZWN0b3IuZ2V0
KCksICJTdGFydGVkIHJlcXVlc3QgUiV1IiwgcmVxdWVzdE51bWJlcik7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHByb3RlY3Rvci5nZXQoKSwgIkZhaWxl
ZCB0byBzZXR1cCBzdHJlYW1pbmcgY2xpZW50IHRvIGhhbmRsZSBSJXUiLCByZXF1ZXN0TnVtYmVy
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGFyc2VkUmVx
dWVzdFJhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGFyc2VkUmVx
dWVzdFJhbmdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NDJmMTU3Y2Q5NDczMjg0NTg2YjhkMDM4NzlkZDll
NjFlMTQyYzMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9QYXJzZWRSZXF1ZXN0UmFuZ2UuY3BwCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBhcnNlZFJlcXVlc3RSYW5nZS5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworT3B0aW9uYWw8UGFyc2VkUmVxdWVz
dFJhbmdlPiBQYXJzZWRSZXF1ZXN0UmFuZ2U6OnBhcnNlKFN0cmluZ1ZpZXcgaW5wdXQpCit7Cisg
ICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzMjc2VjdGlvbi0yLjEgYnV0
IGFzc3VtaW5nIHRoZXJlIHdpbGwgYWx3YXlzIGJlIGEgYmVnaW4gYW5kIGFuIGVuZCBvciBwYXJz
aW5nIHdpbGwgZmFpbAorICAgIGlmICghaW5wdXQuc3RhcnRzV2l0aChTdHJpbmdWaWV3KCJieXRl
cz0iX3MpKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHNpemVfdCBiZWdp
biB7IDAgfTsKKyAgICBzaXplX3QgZW5kIHsgMCB9OworICAgIHNpemVfdCByYW5nZUJlZ2luUG9z
aXRpb24gPSA2OworICAgIHNpemVfdCBkYXNoUG9zaXRpb24gPSBpbnB1dC5maW5kKCctJywgcmFu
Z2VCZWdpblBvc2l0aW9uKTsKKyAgICBpZiAoZGFzaFBvc2l0aW9uID09IG5vdEZvdW5kKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgYXV0byBiZWdpblN0cmluZyA9IGlucHV0
LnN1YnN0cmluZyhyYW5nZUJlZ2luUG9zaXRpb24sIGRhc2hQb3NpdGlvbiAtIHJhbmdlQmVnaW5Q
b3NpdGlvbik7CisgICAgYXV0byBvcHRpb25hbEJlZ2luID0gYmVnaW5TdHJpbmcudG9VSW50NjRT
dHJpY3QoKTsKKyAgICBpZiAoIW9wdGlvbmFsQmVnaW4pCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgYmVnaW4gPSAqb3B0aW9uYWxCZWdpbjsKKworICAgIGF1dG8gZW5kU3RyaW5n
ID0gaW5wdXQuc3Vic3RyaW5nKGRhc2hQb3NpdGlvbiArIDEpOworICAgIGF1dG8gb3B0aW9uYWxF
bmQgPSBlbmRTdHJpbmcudG9VSW50NjRTdHJpY3QoKTsKKyAgICBpZiAoIW9wdGlvbmFsRW5kKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGVuZCA9ICpvcHRpb25hbEVuZDsKKwor
ICAgIGlmIChiZWdpbiA+IGVuZCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IHJldHVybiB7eyBiZWdpbiwgZW5kIH19OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZFJlcXVlc3RSYW5nZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9QYXJzZWRSZXF1ZXN0UmFuZ2UuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMTVj
ZmMyZWQ4ZDYyMWI1NDhmYWZjMTAwOTM0NmQ1Zjk5YmMwZWZiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QYXJzZWRSZXF1ZXN0UmFuZ2UuaApAQCAt
MCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nVmlldy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBQYXJzZWRS
ZXF1ZXN0UmFuZ2UgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBPcHRpb25h
bDxQYXJzZWRSZXF1ZXN0UmFuZ2U+IHBhcnNlKFN0cmluZ1ZpZXcpOworICAgIHN0YXRpYyBPcHRp
b25hbDxQYXJzZWRSZXF1ZXN0UmFuZ2U+IHBhcnNlKGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7IHJl
dHVybiBwYXJzZShTdHJpbmdWaWV3KHN0cmluZykpOyB9CisKKyAgICBjb25zdCBzaXplX3QgYmVn
aW4geyAwIH07CisgICAgY29uc3Qgc2l6ZV90IGVuZCB7IDAgfTsKKworcHJpdmF0ZToKKyAgICBQ
YXJzZWRSZXF1ZXN0UmFuZ2Uoc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5kKQorICAgICAgICA6IGJl
Z2luKGJlZ2luKQorICAgICAgICAsIGVuZChlbmQpIHsgfQorfTsKKworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9SYW5nZVJlc3BvbnNlR2VuZXJh
dG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1JhbmdlUmVzcG9u
c2VHZW5lcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYmZmYzc5MTAwZTJhZTc3ZjFmN2NmZmZkN2FjOWNj
YzM0NGQxMjg2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jb2NvYS9SYW5nZVJlc3BvbnNlR2VuZXJhdG9yLmgKQEAgLTAsMCArMSw1OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1VSTEhhc2guaD4KKyNpbmNs
dWRlIDx3dGYvV2Vha1B0ci5oPgorCitPQkpDX0NMQVNTIE5TVVJMUmVxdWVzdDsKK09CSkNfQ0xB
U1MgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0cnVjdCBQYXJzZWRSZXF1ZXN0UmFuZ2U7CitjbGFzcyBQbGF0Zm9ybU1lZGlhUmVzb3VyY2U7
CitjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworCitjbGFzcyBSYW5nZVJlc3BvbnNlR2VuZXJhdG9y
IDogcHVibGljIENhbk1ha2VXZWFrUHRyPFJhbmdlUmVzcG9uc2VHZW5lcmF0b3I+IHsKK3B1Ymxp
YzoKKyAgICBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yKCk7CisgICAgflJhbmdlUmVzcG9uc2VHZW5l
cmF0b3IoKTsKKworICAgIGJvb2wgd2lsbFN5bnRoZXNpemVSYW5nZVJlc3BvbnNlcyhXZWJDb3Jl
TlNVUkxTZXNzaW9uRGF0YVRhc2sgKiwgUGxhdGZvcm1NZWRpYVJlc291cmNlJiwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpOworICAgIGJvb2wgd2lsbEhhbmRsZVJlcXVlc3QoV2ViQ29yZU5TVVJM
U2Vzc2lvbkRhdGFUYXNrICosIE5TVVJMUmVxdWVzdCAqKTsKKworcHJpdmF0ZToKKyAgICBzdHJ1
Y3QgRGF0YTsKKyAgICBjbGFzcyBNZWRpYVJlc291cmNlQ2xpZW50OworICAgIHZvaWQgZ2l2ZVJl
c3BvbnNlVG9UYXNrc1dpdGhGaW5pc2hlZFJhbmdlcyhEYXRhJik7CisgICAgdm9pZCBnaXZlUmVz
cG9uc2VUb1Rhc2tJZkJ5dGVzSW5SYW5nZVJlY2VpdmVkKFdlYkNvcmVOU1VSTFNlc3Npb25EYXRh
VGFzayAqLCBjb25zdCBQYXJzZWRSZXF1ZXN0UmFuZ2UmLCBPcHRpb25hbDxzaXplX3Q+IGV4cGVj
dGVkQ29udGVudExlbmd0aCwgY29uc3QgRGF0YSYpOworICAgIHN0YXRpYyBPcHRpb25hbDxzaXpl
X3Q+IGV4cGVjdGVkQ29udGVudExlbmd0aEZyb21EYXRhKGNvbnN0IERhdGEmKTsKKyAgICB2b2lk
IHJlbW92ZVRhc2soV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICopOworCisgICAgSGFzaE1h
cDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxEYXRhPj4gbV9tYXA7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NvY29hL1JhbmdlUmVzcG9uc2VHZW5lcmF0b3IubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NvY29hL1JhbmdlUmVzcG9uc2VHZW5lcmF0b3IubW0KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDI0
OTNhMGRjYTUyZDkyNWUxMWZhOTIxOTQ3MDI3YWYzNjFhN2U3MgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvUmFuZ2VSZXNwb25zZUdlbmVy
YXRvci5tbQpAQCAtMCwwICsxLDI5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5oIgorCisjaW1wb3J0ICJOZXR3b3Jr
TG9hZE1ldHJpY3MuaCIKKyNpbXBvcnQgIlBhcnNlZFJlcXVlc3RSYW5nZS5oIgorI2ltcG9ydCAi
UGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmgiCisjaW1wb3J0ICJSZXNvdXJjZVJlc3BvbnNl
LmgiCisjaW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKKyNpbXBvcnQgIldlYkNvcmVOU1VSTFNlc3Np
b24uaCIKKyNpbXBvcnQgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+CisjaW1wb3J0IDx3dGYv
RmFzdE1hbGxvYy5oPgorI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpEYXRhIHsK
KyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgRGF0YShjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSwgUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvdXJjZSkK
KyAgICAgICAgOiBidWZmZXIoU2hhcmVkQnVmZmVyOjpjcmVhdGUoKSkKKyAgICAgICAgLCBvcmln
aW5hbFJlc3BvbnNlKHJlc3BvbnNlKQorICAgICAgICAsIHJlc291cmNlKCZyZXNvdXJjZSkgeyB9
CisKKyAgICBzdHJ1Y3QgVGFza0RhdGEgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8VGFza0RhdGE+
IHsKKyAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBUYXNr
RGF0YShQYXJzZWRSZXF1ZXN0UmFuZ2UmJiByYW5nZSkKKyAgICAgICAgICAgIDogcmFuZ2UoV1RG
TW92ZShyYW5nZSkpCisgICAgICAgICAgICAsIG5leHRCeXRlVG9HaXZlQnVmZmVySW5kZXgocmFu
Z2UuYmVnaW4pIHsgfQorCisgICAgICAgIFBhcnNlZFJlcXVlc3RSYW5nZSByYW5nZTsKKyAgICAg
ICAgc2l6ZV90IG5leHRCeXRlVG9HaXZlQnVmZmVySW5kZXggeyAwIH07CisgICAgICAgIGVudW0g
Y2xhc3MgUmVzcG9uc2VTdGF0ZSA6IHVpbnQ4X3QgeyBOb3RTeW50aGVzaXplZFlldCwgV2FpdGlu
Z0ZvclNlc3Npb24sIFNlc3Npb25DYWxsZWRDb21wbGV0aW9uSGFuZGxlciB9IHJlc3BvbnNlU3Rh
dGUgeyBSZXNwb25zZVN0YXRlOjpOb3RTeW50aGVzaXplZFlldCB9OworICAgIH07CisgICAgCisg
ICAgSGFzaE1hcDxSZXRhaW5QdHI8V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrPiwgc3RkOjp1
bmlxdWVfcHRyPFRhc2tEYXRhPj4gdGFza0RhdGE7CisgICAgUmVmPFNoYXJlZEJ1ZmZlcj4gYnVm
ZmVyOworICAgIFJlc291cmNlUmVzcG9uc2Ugb3JpZ2luYWxSZXNwb25zZTsKKyAgICBlbnVtIGNs
YXNzIFN1Y2Nlc3NmdWxseUZpbmlzaGVkTG9hZGluZyA6IGJvb2wgeyBObywgWWVzIH0gc3VjY2Vz
c2Z1bGx5RmluaXNoZWRMb2FkaW5nIHsgU3VjY2Vzc2Z1bGx5RmluaXNoZWRMb2FkaW5nOjpObyB9
OworICAgIFJlZlB0cjxQbGF0Zm9ybU1lZGlhUmVzb3VyY2U+IHJlc291cmNlOworfTsKKworUmFu
Z2VSZXNwb25zZUdlbmVyYXRvcjo6UmFuZ2VSZXNwb25zZUdlbmVyYXRvcigpID0gZGVmYXVsdDsK
K1JhbmdlUmVzcG9uc2VHZW5lcmF0b3I6On5SYW5nZVJlc3BvbnNlR2VuZXJhdG9yKCkgPSBkZWZh
dWx0OworCitzdGF0aWMgUmVzb3VyY2VSZXNwb25zZSBzeW50aGVzaXplZFJlc3BvbnNlRm9yUmFu
Z2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgb3JpZ2luYWxSZXNwb25zZSwgY29uc3QgUGFyc2Vk
UmVxdWVzdFJhbmdlJiBwYXJzZWRSZXF1ZXN0UmFuZ2UsIE9wdGlvbmFsPHNpemVfdD4gdG90YWxD
b250ZW50TGVuZ3RoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgYXV0byBi
ZWdpbiA9IHBhcnNlZFJlcXVlc3RSYW5nZS5iZWdpbjsKKyAgICBhdXRvIGVuZCA9IHBhcnNlZFJl
cXVlc3RSYW5nZS5lbmQ7CisKKyAgICBhdXRvIG5ld0NvbnRlbnRSYW5nZSA9IG1ha2VTdHJpbmco
ImJ5dGVzICIsIGJlZ2luLCAiLSIsIGVuZCwgIi8iLCAodG90YWxDb250ZW50TGVuZ3RoID8gbWFr
ZVN0cmluZygqdG90YWxDb250ZW50TGVuZ3RoKSA6ICIqIikpOworICAgIGF1dG8gbmV3Q29udGVu
dExlbmd0aCA9IG1ha2VTdHJpbmcoZW5kIC0gYmVnaW4gKyAxKTsKKworICAgIFJlc291cmNlUmVz
cG9uc2UgbmV3UmVzcG9uc2UgPSBvcmlnaW5hbFJlc3BvbnNlOworICAgIG5ld1Jlc3BvbnNlLnNl
dEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFJhbmdlLCBuZXdDb250ZW50
UmFuZ2UpOworICAgIG5ld1Jlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFt
ZTo6Q29udGVudExlbmd0aCwgbmV3Q29udGVudExlbmd0aCk7CisgICAgY29uc3RleHByIGF1dG8g
cGFydGlhbENvbnRlbnQgPSAyMDY7CisgICAgbmV3UmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUo
cGFydGlhbENvbnRlbnQpOworCisgICAgcmV0dXJuIG5ld1Jlc3BvbnNlOworfQorCit2b2lkIFJh
bmdlUmVzcG9uc2VHZW5lcmF0b3I6OnJlbW92ZVRhc2soV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFU
YXNrICp0YXNrKQoreworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Rhc2sgPSByZXRhaW5QdHIodGFz
ayksIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXSB7CisgICAgICAgIGlmICghd2Vha1Ro
aXMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8qIGRhdGEgPSB3ZWFrVGhpcy0+
bV9tYXAuZ2V0KHRhc2suZ2V0KCkub3JpZ2luYWxSZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZyk7
CisgICAgICAgIGlmICghZGF0YSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGF0YS0+
dGFza0RhdGEucmVtb3ZlKHRhc2spOworICAgIH0pOworfQorCit2b2lkIFJhbmdlUmVzcG9uc2VH
ZW5lcmF0b3I6OmdpdmVSZXNwb25zZVRvVGFza0lmQnl0ZXNJblJhbmdlUmVjZWl2ZWQoV2ViQ29y
ZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICp0YXNrLCBjb25zdCBQYXJzZWRSZXF1ZXN0UmFuZ2UmIHJh
bmdlLCBPcHRpb25hbDxzaXplX3Q+IGV4cGVjdGVkQ29udGVudExlbmd0aCwgY29uc3QgRGF0YSYg
ZGF0YSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGF1dG8gYnVmZmVyID0g
ZGF0YS5idWZmZXI7CisgICAgYXV0byBidWZmZXJTaXplID0gYnVmZmVyLT5zaXplKCk7CisKKyAg
ICBpZiAoYnVmZmVyU2l6ZSA8IHJhbmdlLmJlZ2luKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgYXV0byogdGFza0RhdGEgPSBkYXRhLnRhc2tEYXRhLmdldCh0YXNrKTsKKyAgICBpZiAoIXRh
c2tEYXRhKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0byBnaXZlQnl0ZXNUb1Rhc2sg
PSBbdGFzayA9IHJldGFpblB0cih0YXNrKSwgYnVmZmVyLCB0YXNrRGF0YSA9IG1ha2VXZWFrUHRy
KCp0YXNrRGF0YSksIGdlbmVyYXRvciA9IG1ha2VXZWFrUHRyKCp0aGlzKV0geworICAgICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBpZiAoIXRhc2tEYXRhKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBhdXRvJiByYW5nZSA9IHRhc2tEYXRhLT5yYW5nZTsKKyAgICAg
ICAgYXV0byYgYnl0ZUluZGV4ID0gdGFza0RhdGEtPm5leHRCeXRlVG9HaXZlQnVmZmVySW5kZXg7
CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpZiAoYnl0ZUluZGV4ID49IGJ1
ZmZlci0+c2l6ZSgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYXV0byBi
dWZmZXJWaWV3ID0gYnVmZmVyLT5nZXRTb21lRGF0YShieXRlSW5kZXgpOworICAgICAgICAgICAg
aWYgKCFidWZmZXJWaWV3LnNpemUoKSB8fCBieXRlSW5kZXggPiByYW5nZS5lbmQpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIHNpemVfdCBieXRlc0Zyb21UaGlzVmlld1Rv
RGVsaXZlciA9IHN0ZDo6bWluKGJ1ZmZlclZpZXcuc2l6ZSgpLCByYW5nZS5lbmQgLSBieXRlSW5k
ZXggKyAxKTsKKyAgICAgICAgICAgIGJ5dGVJbmRleCArPSBieXRlc0Zyb21UaGlzVmlld1RvRGVs
aXZlcjsKKyAgICAgICAgICAgIFt0YXNrIHJlc291cmNlOm51bGxwdHIgcmVjZWl2ZWREYXRhOmJ1
ZmZlclZpZXcuZGF0YSgpIGxlbmd0aDpieXRlc0Zyb21UaGlzVmlld1RvRGVsaXZlcl07CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGJ5dGVJbmRleCA+PSByYW5nZS5lbmQpIHsKKyAgICAgICAgICAg
IFt0YXNrIHJlc291cmNlRmluaXNoZWQ6bnVsbHB0ciBtZXRyaWNzOk5ldHdvcmtMb2FkTWV0cmlj
cyB7IH1dOworICAgICAgICAgICAgaWYgKGdlbmVyYXRvcikKKyAgICAgICAgICAgICAgICBnZW5l
cmF0b3ItPnJlbW92ZVRhc2sodGFzay5nZXQoKSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
c3dpdGNoICh0YXNrRGF0YS0+cmVzcG9uc2VTdGF0ZSkgeworICAgIGNhc2UgRGF0YTo6VGFza0Rh
dGE6OlJlc3BvbnNlU3RhdGU6Ok5vdFN5bnRoZXNpemVkWWV0OiB7CisgICAgICAgIGF1dG8gcmVz
cG9uc2UgPSBzeW50aGVzaXplZFJlc3BvbnNlRm9yUmFuZ2UoZGF0YS5vcmlnaW5hbFJlc3BvbnNl
LCByYW5nZSwgZXhwZWN0ZWRDb250ZW50TGVuZ3RoKTsKKyAgICAgICAgW3Rhc2sgcmVzb3VyY2U6
bnVsbHB0ciByZWNlaXZlZFJlc3BvbnNlOnJlc3BvbnNlIGNvbXBsZXRpb25IYW5kbGVyOltnaXZl
Qnl0ZXNUb1Rhc2sgPSBXVEZNb3ZlKGdpdmVCeXRlc1RvVGFzayksIHRhc2tEYXRhID0gbWFrZVdl
YWtQdHIodGFza0RhdGEpXSAoV2ViQ29yZTo6U2hvdWxkQ29udGludWVQb2xpY3lDaGVjayBzaG91
bGRDb250aW51ZSkgeworICAgICAgICAgICAgaWYgKHRhc2tEYXRhKQorICAgICAgICAgICAgICAg
IHRhc2tEYXRhLT5yZXNwb25zZVN0YXRlID0gRGF0YTo6VGFza0RhdGE6OlJlc3BvbnNlU3RhdGU6
OlNlc3Npb25DYWxsZWRDb21wbGV0aW9uSGFuZGxlcjsKKyAgICAgICAgICAgIGlmIChzaG91bGRD
b250aW51ZSA9PSBTaG91bGRDb250aW51ZVBvbGljeUNoZWNrOjpZZXMpCisgICAgICAgICAgICAg
ICAgZ2l2ZUJ5dGVzVG9UYXNrKCk7CisgICAgICAgIH1dOworICAgICAgICB0YXNrRGF0YS0+cmVz
cG9uc2VTdGF0ZSA9IERhdGE6OlRhc2tEYXRhOjpSZXNwb25zZVN0YXRlOjpXYWl0aW5nRm9yU2Vz
c2lvbjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRGF0YTo6VGFza0RhdGE6OlJl
c3BvbnNlU3RhdGU6OldhaXRpbmdGb3JTZXNzaW9uOgorICAgICAgICBicmVhazsKKyAgICBjYXNl
IERhdGE6OlRhc2tEYXRhOjpSZXNwb25zZVN0YXRlOjpTZXNzaW9uQ2FsbGVkQ29tcGxldGlvbkhh
bmRsZXI6CisgICAgICAgIGdpdmVCeXRlc1RvVGFzaygpOworICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKK09wdGlvbmFsPHNpemVfdD4gUmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6ZXhwZWN0ZWRD
b250ZW50TGVuZ3RoRnJvbURhdGEoY29uc3QgRGF0YSYgZGF0YSkKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIGlmIChkYXRhLnN1Y2Nlc3NmdWxseUZpbmlzaGVkTG9hZGluZyA9
PSBEYXRhOjpTdWNjZXNzZnVsbHlGaW5pc2hlZExvYWRpbmc6OlllcykKKyAgICAgICAgcmV0dXJu
IGRhdGEuYnVmZmVyLT5zaXplKCk7CisKKyAgICAvLyBGSVhNRTogUmVzb3VyY2VSZXNwb25zZUJh
c2U6OmV4cGVjdGVkQ29udGVudExlbmd0aCgpIHNob3VsZCByZXR1cm4gT3B0aW9uYWw8c2l6ZV90
PiBpbnN0ZWFkIG9mIHVzIGRvaW5nIHRoaXMgY2hlY2sgaGVyZS4KKyAgICBhdXRvIGV4cGVjdGVk
Q29udGVudExlbmd0aCA9IGRhdGEub3JpZ2luYWxSZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5n
dGgoKTsKKyAgICBpZiAoZXhwZWN0ZWRDb250ZW50TGVuZ3RoID09IE5TVVJMUmVzcG9uc2VVbmtu
b3duTGVuZ3RoKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBleHBl
Y3RlZENvbnRlbnRMZW5ndGg7Cit9CisKK3ZvaWQgUmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6Z2l2
ZVJlc3BvbnNlVG9UYXNrc1dpdGhGaW5pc2hlZFJhbmdlcyhEYXRhJiBkYXRhKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgYXV0byBleHBlY3RlZENvbnRlbnRMZW5ndGggPSBl
eHBlY3RlZENvbnRlbnRMZW5ndGhGcm9tRGF0YShkYXRhKTsKKworICAgIGZvciAoYXV0byYgcGFp
ciA6IGRhdGEudGFza0RhdGEpCisgICAgICAgIGdpdmVSZXNwb25zZVRvVGFza0lmQnl0ZXNJblJh
bmdlUmVjZWl2ZWQocGFpci5rZXkuZ2V0KCksIHBhaXIudmFsdWUtPnJhbmdlLCBleHBlY3RlZENv
bnRlbnRMZW5ndGgsIGRhdGEpOworfQorCitib29sIFJhbmdlUmVzcG9uc2VHZW5lcmF0b3I6Ondp
bGxIYW5kbGVSZXF1ZXN0KFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAqdGFzaywgTlNVUkxS
ZXF1ZXN0ICpyZXF1ZXN0KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgYXV0
byogZGF0YSA9IG1fbWFwLmdldChyZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZyk7CisgICAgaWYg
KCFkYXRhKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHJhbmdlID0gUGFyc2Vk
UmVxdWVzdFJhbmdlOjpwYXJzZShbcmVxdWVzdCB2YWx1ZUZvckhUVFBIZWFkZXJGaWVsZDpAIlJh
bmdlIl0pOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1
dG8gZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gZXhwZWN0ZWRDb250ZW50TGVuZ3RoRnJvbURhdGEo
KmRhdGEpOworICAgIGRhdGEtPnRhc2tEYXRhLmFkZCh0YXNrLCBtYWtlVW5pcXVlPERhdGE6OlRh
c2tEYXRhPihXVEZNb3ZlKCpyYW5nZSkpKTsKKyAgICBnaXZlUmVzcG9uc2VUb1Rhc2tJZkJ5dGVz
SW5SYW5nZVJlY2VpdmVkKHRhc2ssICpyYW5nZSwgZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCAqZGF0
YSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworY2xhc3MgUmFuZ2VSZXNwb25zZUdlbmVyYXRv
cjo6TWVkaWFSZXNvdXJjZUNsaWVudCA6IHB1YmxpYyBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VDbGll
bnQgeworcHVibGljOgorICAgIE1lZGlhUmVzb3VyY2VDbGllbnQoUmFuZ2VSZXNwb25zZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBVUkwmJiB1cmwpCisgICAgICAgIDogbV9nZW5lcmF0b3IobWFrZVdl
YWtQdHIoZ2VuZXJhdG9yKSkKKyAgICAgICAgLCBtX3VybFN0cmluZyhXVEZNb3ZlKHVybCkuc3Ry
aW5nKCkpIHsgfQorcHJpdmF0ZToKKworICAgIC8vIFRoZXNlIG1ldGhvZHMgc2hvdWxkIGhhdmUg
YmVlbiBjYWxsZWQgYmVmb3JlIGNoYW5naW5nIHRoZSBjbGllbnQgdG8gdGhpcy4KKyAgICB2b2lk
IHJlc3BvbnNlUmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2hvdWxkQ29udGludWVQb2xpY3lDaGVj
ayk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGZpbmFsCisgICAgeworICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTaG91bGRDb250
aW51ZVBvbGljeUNoZWNrOjpObyk7CisgICAgfQorICAgIHZvaWQgcmVkaXJlY3RSZWNlaXZlZChQ
bGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCBSZXNvdXJjZVJlcXVlc3QmJiwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVzb3VyY2VSZXF1ZXN0JiYpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKSBmaW5hbAorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKKyAgICB9CisgICAg
dm9pZCBkYXRhU2VudChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmLCB1bnNpZ25lZCBsb25nIGxvbmcs
IHVuc2lnbmVkIGxvbmcgbG9uZykgZmluYWwKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHZvaWQgYWNjZXNzQ29udHJvbENoZWNrRmFpbGVk
KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbnN0IFJlc291cmNlRXJyb3ImKSBmaW5hbAorICAg
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBi
b29sIHNob3VsZENhY2hlUmVzcG9uc2UoUGxhdGZvcm1NZWRpYVJlc291cmNlJiwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpIGZpbmFsCisgICAgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCBkYXRhUmVjZWl2
ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiwgY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgp
IGZpbmFsCisgICAgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBp
ZiAoIW1fZ2VuZXJhdG9yKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvKiBkYXRh
ID0gbV9nZW5lcmF0b3ItPm1fbWFwLmdldChtX3VybFN0cmluZyk7CisgICAgICAgIGlmICghZGF0
YSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGF0YS0+YnVmZmVyLT5hcHBlbmQoYnl0
ZXMsIGxlbmd0aCk7CisgICAgICAgIG1fZ2VuZXJhdG9yLT5naXZlUmVzcG9uc2VUb1Rhc2tzV2l0
aEZpbmlzaGVkUmFuZ2VzKCpkYXRhKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWRGYWlsZWQoUGxh
dGZvcm1NZWRpYVJlc291cmNlJiwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpIGZpbmFsCisg
ICAgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBpZiAoIW1fZ2Vu
ZXJhdG9yKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGRhdGEgPSBtX2dlbmVy
YXRvci0+bV9tYXAudGFrZShtX3VybFN0cmluZyk7CisgICAgICAgIGlmICghZGF0YSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgZm9yIChhdXRvJiB0YXNrIDogZGF0YS0+dGFza0RhdGEu
a2V5cygpKQorICAgICAgICAgICAgW3Rhc2sgcmVzb3VyY2U6bnVsbHB0ciBsb2FkRmFpbGVkV2l0
aEVycm9yOmVycm9yXTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWRGaW5pc2hlZChQbGF0Zm9ybU1l
ZGlhUmVzb3VyY2UmLCBjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmKSBmaW5hbAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgaWYgKCFtX2dlbmVyYXRvcikK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byogZGF0YSA9IG1fZ2VuZXJhdG9yLT5t
X21hcC5nZXQobV91cmxTdHJpbmcpOworICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGRhdGEtPnN1Y2Nlc3NmdWxseUZpbmlzaGVkTG9hZGluZyA9IERhdGE6
OlN1Y2Nlc3NmdWxseUZpbmlzaGVkTG9hZGluZzo6WWVzOworICAgICAgICBkYXRhLT5yZXNvdXJj
ZSA9IG51bGxwdHI7CisgICAgICAgIG1fZ2VuZXJhdG9yLT5naXZlUmVzcG9uc2VUb1Rhc2tzV2l0
aEZpbmlzaGVkUmFuZ2VzKCpkYXRhKTsKKyAgICB9CisgICAgCisgICAgV2Vha1B0cjxSYW5nZVJl
c3BvbnNlR2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKKyAgICBjb25zdCBTdHJpbmcgbV91cmxTdHJp
bmc7Cit9OworCitib29sIFJhbmdlUmVzcG9uc2VHZW5lcmF0b3I6OndpbGxTeW50aGVzaXplUmFu
Z2VSZXNwb25zZXMoV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICp0YXNrLCBQbGF0Zm9ybU1l
ZGlhUmVzb3VyY2UmIHJlc291cmNlLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkK
K3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIE5TVVJMUmVxdWVzdCAqb3JpZ2lu
YWxSZXF1ZXN0ID0gdGFzay5vcmlnaW5hbFJlcXVlc3Q7CisgICAgaWYgKCFvcmlnaW5hbFJlcXVl
c3QuVVJMKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHJlc3BvbnNlLmh0dHBTdGF0
dXNDb2RlKCkgIT0gMjAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFyZXNwb25z
ZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRSYW5nZSkuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHBhcnNlZFJlcXVlc3RSYW5nZSA9
IFBhcnNlZFJlcXVlc3RSYW5nZTo6cGFyc2UoW29yaWdpbmFsUmVxdWVzdCB2YWx1ZUZvckhUVFBI
ZWFkZXJGaWVsZDpAIlJhbmdlIl0pOworICAgIGlmICghcGFyc2VkUmVxdWVzdFJhbmdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXNvdXJjZS5zZXRDbGllbnQoYWRvcHRSZWYobmV3
IE1lZGlhUmVzb3VyY2VDbGllbnQoKnRoaXMsIG9yaWdpbmFsUmVxdWVzdC5VUkwpKSk7CisKKyAg
ICBtX21hcC5lbnN1cmUob3JpZ2luYWxSZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZywgWyZdIHsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RGF0YT4ocmVzcG9uc2UsIHJlc291cmNlKTsKKyAg
ICB9KS5pdGVyYXRvci0+dmFsdWUtPnRhc2tEYXRhLmFkZCh0YXNrLCBtYWtlVW5pcXVlPERhdGE6
OlRhc2tEYXRhPihXVEZNb3ZlKCpwYXJzZWRSZXF1ZXN0UmFuZ2UpKSk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24uaApp
bmRleCBhODBlMjA4ODUzOTdjNzEwMmFlMzFlYjcwNDI3NDUzNjRiZTRkYjMyLi42MDFhNWRjNDA4
ZDAxNzg1MTc3NWI3ZWYwNzllYWU5NWVkZTIyZWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24uaApA
QCAtMjMsOCArMjMsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKKyNpbXBvcnQgIlJhbmdl
UmVzcG9uc2VHZW5lcmF0b3IuaCIKICNpbXBvcnQgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW1wb3J0
IDxGb3VuZGF0aW9uL05TVVJMU2Vzc2lvbi5oPgorI2ltcG9ydCA8d3RmL0NvbXBsZXRpb25IYW5k
bGVyLmg+CiAjaW1wb3J0IDx3dGYvSGFzaFNldC5oPgogI2ltcG9ydCA8d3RmL0xvY2suaD4KICNp
bXBvcnQgPHd0Zi9PU09iamVjdFB0ci5oPgpAQCAtNDEsMTIgKzQzLDE3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIGNsYXNzIENhY2hlZFJlc291cmNlUmVxdWVzdDsKK2NsYXNzIE5ldHdvcmtM
b2FkTWV0cmljczsKIGNsYXNzIFBsYXRmb3JtTWVkaWFSZXNvdXJjZTsKIGNsYXNzIFBsYXRmb3Jt
TWVkaWFSZXNvdXJjZUxvYWRlcjsKK2NsYXNzIFJlc291cmNlRXJyb3I7CitjbGFzcyBSZXNvdXJj
ZVJlcXVlc3Q7CitjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogY2xhc3MgV2ViQ29yZU5TVVJMU2Vz
c2lvbkRhdGFUYXNrQ2xpZW50OworZW51bSBjbGFzcyBTaG91bGRDb250aW51ZVBvbGljeUNoZWNr
IDogYm9vbDsKIH0KIAotZW51bSBjbGFzcyBXZWJDb3JlTlNVUkxTZXNzaW9uQ09SU0FjY2Vzc0No
ZWNrUmVzdWx0cyB7CitlbnVtIGNsYXNzIFdlYkNvcmVOU1VSTFNlc3Npb25DT1JTQWNjZXNzQ2hl
Y2tSZXN1bHRzIDogdWludDhfdCB7CiAgICAgVW5rbm93biwKICAgICBQYXNzLAogICAgIEZhaWws
CkBAIC02Nyw2ICs3NCw3IEBAIFdFQkNPUkVfRVhQT1JUIEBpbnRlcmZhY2UgV2ViQ29yZU5TVVJM
U2Vzc2lvbiA6IE5TT2JqZWN0IHsKICAgICBOU1VJbnRlZ2VyIF9uZXh0VGFza0lkZW50aWZpZXI7
CiAgICAgT1NPYmplY3RQdHI8ZGlzcGF0Y2hfcXVldWVfdD4gX2ludGVybmFsUXVldWU7CiAgICAg
V2ViQ29yZU5TVVJMU2Vzc2lvbkNPUlNBY2Nlc3NDaGVja1Jlc3VsdHMgX2NvcnNSZXN1bHRzOwor
ICAgIFdlYkNvcmU6OlJhbmdlUmVzcG9uc2VHZW5lcmF0b3IgX3JhbmdlUmVzcG9uc2VHZW5lcmF0
b3I7CiB9CiAtIChpZClpbml0V2l0aFJlc291cmNlTG9hZGVyOihXZWJDb3JlOjpQbGF0Zm9ybU1l
ZGlhUmVzb3VyY2VMb2FkZXImKWxvYWRlciBkZWxlZ2F0ZTooaWQ8TlNVUkxTZXNzaW9uVGFza0Rl
bGVnYXRlPilkZWxlZ2F0ZSBkZWxlZ2F0ZVF1ZXVlOihOU09wZXJhdGlvblF1ZXVlKilxdWV1ZTsK
IEBwcm9wZXJ0eSAocmVhZG9ubHksIHJldGFpbikgTlNPcGVyYXRpb25RdWV1ZSAqZGVsZWdhdGVR
dWV1ZTsKQEAgLTExMCw3ICsxMTgsNyBAQCBXRUJDT1JFX0VYUE9SVCBAaW50ZXJmYWNlIFdlYkNv
cmVOU1VSTFNlc3Npb24gOiBOU09iamVjdCB7CiBAZW5kCiAKIEBpbnRlcmZhY2UgV2ViQ29yZU5T
VVJMU2Vzc2lvbkRhdGFUYXNrIDogTlNPYmplY3QgewotICAgIF9fdW5zYWZlX3VucmV0YWluZWQg
V2ViQ29yZU5TVVJMU2Vzc2lvbiAqX3Nlc3Npb247CisgICAgV2Vha09iakNQdHI8V2ViQ29yZU5T
VVJMU2Vzc2lvbj4gX3Nlc3Npb247CiAgICAgUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtTWVkaWFS
ZXNvdXJjZT4gX3Jlc291cmNlOwogICAgIFJldGFpblB0cjxOU1VSTFJlc3BvbnNlPiBfcmVzcG9u
c2U7CiAgICAgTlNVSW50ZWdlciBfdGFza0lkZW50aWZpZXI7CkBAIC0xNDMsNCArMTUxLDE1IEBA
IFdFQkNPUkVfRVhQT1JUIEBpbnRlcmZhY2UgV2ViQ29yZU5TVVJMU2Vzc2lvbiA6IE5TT2JqZWN0
IHsKIC0gKHZvaWQpcmVzdW1lOwogQGVuZAogCitAaW50ZXJmYWNlIFdlYkNvcmVOU1VSTFNlc3Np
b25EYXRhVGFzayAoV2ViS2l0SW50ZXJuYWwpCistICh2b2lkKXJlc291cmNlOihudWxsYWJsZSBX
ZWJDb3JlOjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIHNlbnRCeXRlczoodW5zaWdu
ZWQgbG9uZyBsb25nKWJ5dGVzU2VudCB0b3RhbEJ5dGVzVG9CZVNlbnQ6KHVuc2lnbmVkIGxvbmcg
bG9uZyl0b3RhbEJ5dGVzVG9CZVNlbnQ7CistICh2b2lkKXJlc291cmNlOihudWxsYWJsZSBXZWJD
b3JlOjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIHJlY2VpdmVkUmVzcG9uc2U6KGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKXJlc3BvbnNlIGNvbXBsZXRpb25IYW5kbGVy
OihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlNob3VsZENvbnRpbnVlUG9saWN5Q2hl
Y2spPiYmKWNvbXBsZXRpb25IYW5kbGVyOworLSAoQk9PTClyZXNvdXJjZToobnVsbGFibGUgV2Vi
Q29yZTo6UGxhdGZvcm1NZWRpYVJlc291cmNlKilyZXNvdXJjZSBzaG91bGRDYWNoZVJlc3BvbnNl
Oihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJilyZXNwb25zZTsKKy0gKHZvaWQpcmVz
b3VyY2U6KG51bGxhYmxlIFdlYkNvcmU6OlBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3VyY2Ug
cmVjZWl2ZWREYXRhOihjb25zdCBjaGFyKilkYXRhIGxlbmd0aDooaW50KWxlbmd0aDsKKy0gKHZv
aWQpcmVzb3VyY2U6KG51bGxhYmxlIFdlYkNvcmU6OlBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVz
b3VyY2UgcmVjZWl2ZWRSZWRpcmVjdDooY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYp
cmVzcG9uc2UgcmVxdWVzdDooV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYpcmVxdWVzdCBjb21w
bGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmJik+JiYpY29tcGxldGlvbkhhbmRsZXI7CistICh2b2lkKXJlc291cmNlOihudWxsYWJs
ZSBXZWJDb3JlOjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIGFjY2Vzc0NvbnRyb2xD
aGVja0ZhaWxlZFdpdGhFcnJvcjooY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpZXJyb3I7
CistICh2b2lkKXJlc291cmNlOihudWxsYWJsZSBXZWJDb3JlOjpQbGF0Zm9ybU1lZGlhUmVzb3Vy
Y2UqKXJlc291cmNlIGxvYWRGYWlsZWRXaXRoRXJyb3I6KGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
RXJyb3ImKWVycm9yOworLSAodm9pZClyZXNvdXJjZUZpbmlzaGVkOihudWxsYWJsZSBXZWJDb3Jl
OjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIG1ldHJpY3M6KGNvbnN0IFdlYkNvcmU6
Ok5ldHdvcmtMb2FkTWV0cmljcyYpbWV0cmljczsKK0BlbmQKKwogTlNfQVNTVU1FX05PTk5VTExf
RU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dl
YkNvcmVOU1VSTFNlc3Npb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nv
Y29hL1dlYkNvcmVOU1VSTFNlc3Npb24ubW0KaW5kZXggYmUxMTg3MDkzYjU5MjM2NjUzYTI2NzNl
ZjQ2MjZhNjE3NWMzMTA2Yy4uYzIyZTg3ZDg2OGRkMzE3ZDlkZGY5OWRlNGVhMWYzNGZlN2M4ODM3
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJD
b3JlTlNVUkxTZXNzaW9uLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5tbQpAQCAtMjcsMTAgKzI3LDEyIEBACiAjaW1wb3J0
ICJXZWJDb3JlTlNVUkxTZXNzaW9uLmgiCiAKICNpbXBvcnQgIkNhY2hlZFJlc291cmNlUmVxdWVz
dC5oIgorI2ltcG9ydCAiUGFyc2VkUmVxdWVzdFJhbmdlLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybU1l
ZGlhUmVzb3VyY2VMb2FkZXIuaCIKICNpbXBvcnQgIlN1YnJlc291cmNlTG9hZGVyLmgiCiAjaW1w
b3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgor
I2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+CiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29j
b2EuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yMDMsMjQgKzIwNSwxNSBAQCBz
dGF0aWMgTlNEYXRlICogX19udWxsYWJsZSBuZXR3b3JrTG9hZE1ldHJpY3NEYXRlKFNlY29uZHMg
ZmV0Y2hTdGFydCwgU2Vjb25kcyBkZQogLSAodm9pZClhZGREZWxlZ2F0ZU9wZXJhdGlvbjooRnVu
Y3Rpb248dm9pZCgpPiYmKW9wZXJhdGlvbjsKIC0gKHZvaWQpdGFzazooV2ViQ29yZU5TVVJMU2Vz
c2lvbkRhdGFUYXNrICopdGFzayBkaWRSZWNlaXZlQ09SU0FjY2Vzc0NoZWNrUmVzdWx0OihCT09M
KXJlc3VsdDsKIC0gKHZvaWQpdGFzazooV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICopdGFz
ayBkaWRSZWNlaXZlUmVzcG9uc2VGcm9tT3JpZ2luOihSZWY8V2ViQ29yZTo6U2VjdXJpdHlPcmln
aW4+JiYpb3JpZ2luOworLSAoV2ViQ29yZTo6UmFuZ2VSZXNwb25zZUdlbmVyYXRvciYpcmFuZ2VS
ZXNwb25zZUdlbmVyYXRvcjsKIEBlbmQKIAogQGludGVyZmFjZSBXZWJDb3JlTlNVUkxTZXNzaW9u
RGF0YVRhc2sgKCkKIC0gKGlkKWluaXRXaXRoU2Vzc2lvbjooV2ViQ29yZU5TVVJMU2Vzc2lvbiAq
KXNlc3Npb24gaWRlbnRpZmllcjooTlNVSW50ZWdlcilpZGVudGlmaWVyIHJlcXVlc3Q6KE5TVVJM
UmVxdWVzdCAqKXJlcXVlc3Q7Ci0tIChpZClpbml0V2l0aFNlc3Npb246KFdlYkNvcmVOU1VSTFNl
c3Npb24gKilzZXNzaW9uIGlkZW50aWZpZXI6KE5TVUludGVnZXIpaWRlbnRpZmllciBVUkw6KE5T
VVJMICopdXJsOwogLSAodm9pZClfcmVzdGFydDsKIC0gKHZvaWQpX2NhbmNlbDsKLS0gKHZvaWQp
X2ZpbmlzaDsKIEBwcm9wZXJ0eSAoYXNzaWduKSBXZWJDb3JlTlNVUkxTZXNzaW9uICogX051bGxh
YmxlIHNlc3Npb247CiAKLS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYp
cmVzb3VyY2Ugc2VudEJ5dGVzOih1bnNpZ25lZCBsb25nIGxvbmcpYnl0ZXNTZW50IHRvdGFsQnl0
ZXNUb0JlU2VudDoodW5zaWduZWQgbG9uZyBsb25nKXRvdGFsQnl0ZXNUb0JlU2VudDsKLS0gKHZv
aWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgcmVjZWl2ZWRSZXNw
b25zZTooY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpcmVzcG9uc2UgY29tcGxldGlvbkhhbmRsZXI6
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2hvdWxkQ29udGludWVQb2xpY3lDaGVjayk+JiYpY29t
cGxldGlvbkhhbmRsZXI7Ci0tIChCT09MKXJlc291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2Um
KXJlc291cmNlIHNob3VsZENhY2hlUmVzcG9uc2U6KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKXJl
c3BvbnNlOwotLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlJilyZXNvdXJj
ZSByZWNlaXZlZERhdGE6KGNvbnN0IGNoYXIqKWRhdGEgbGVuZ3RoOihpbnQpbGVuZ3RoOwotLSAo
dm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlJilyZXNvdXJjZSByZWNlaXZlZFJl
ZGlyZWN0Oihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJilyZXNwb25zZSByZXF1ZXN0OihSZXNvdXJj
ZVJlcXVlc3QmJilyZXF1ZXN0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFJlc291cmNlUmVxdWVzdCYmKT4mJiljb21wbGV0aW9uSGFuZGxlcjsKLS0gKHZvaWQpcmVz
b3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgYWNjZXNzQ29udHJvbENoZWNr
RmFpbGVkV2l0aEVycm9yOihjb25zdCBSZXNvdXJjZUVycm9yJillcnJvcjsKLS0gKHZvaWQpcmVz
b3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgbG9hZEZhaWxlZFdpdGhFcnJv
cjooY29uc3QgUmVzb3VyY2VFcnJvciYpZXJyb3I7Ci0tICh2b2lkKXJlc291cmNlRmluaXNoZWQ6
KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgbWV0cmljczooY29uc3QgTmV0d29ya0xv
YWRNZXRyaWNzJiltZXRyaWNzOwogQGVuZAogCiBOU19BU1NVTUVfTk9OTlVMTF9FTkQKQEAgLTMx
MSw2ICszMDQsMTEgQEAgTlNfQVNTVU1FX05PTk5VTExfRU5ECiAgICAgX29yaWdpbnMuYWRkKFdU
Rk1vdmUob3JpZ2luKSk7CiB9CiAKKy0gKFdlYkNvcmU6OlJhbmdlUmVzcG9uc2VHZW5lcmF0b3Im
KXJhbmdlUmVzcG9uc2VHZW5lcmF0b3IKK3sKKyAgICByZXR1cm4gX3JhbmdlUmVzcG9uc2VHZW5l
cmF0b3I7Cit9CisKICNwcmFnbWEgbWFyayAtIE5TVVJMU2Vzc2lvbiBBUEkKIEBkeW5hbWljIGRl
bGVnYXRlOwogLSAoX19udWxsYWJsZSBpZDxOU1VSTFNlc3Npb25EZWxlZ2F0ZT4pZGVsZWdhdGUK
QEAgLTQ1NSwxNSArNDUzLDcgQEAgTlNfQVNTVU1FX05PTk5VTExfRU5ECiAKIC0gKE5TVVJMU2Vz
c2lvbkRhdGFUYXNrICopZGF0YVRhc2tXaXRoVVJMOihOU1VSTCAqKXVybAogewotICAgIGlmIChf
aW52YWxpZGF0ZWQpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBXZWJDb3JlTlNVUkxTZXNz
aW9uRGF0YVRhc2sgKnRhc2sgPSBbW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayBhbGxvY10g
aW5pdFdpdGhTZXNzaW9uOnNlbGYgaWRlbnRpZmllcjpfbmV4dFRhc2tJZGVudGlmaWVyKysgVVJM
OnVybF07Ci0gICAgewotICAgICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKF9kYXRhVGFza3NMb2Nr
KTsKLSAgICAgICAgX2RhdGFUYXNrcy5hZGQodGFzayk7Ci0gICAgfQotICAgIHJldHVybiAoTlNV
UkxTZXNzaW9uRGF0YVRhc2sgKilbdGFzayBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJuIFtzZWxm
IGRhdGFUYXNrV2l0aFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp1cmxdXTsK
IH0KIAogLSAodm9pZClzZW5kSDJQaW5nOihOU1VSTCAqKXVybCBwb25nSGFuZGxlcjoodm9pZCAo
XikoTlNFcnJvciAqZXJyb3IsIE5TVGltZUludGVydmFsIGludGVydmFsKSlwb25nSGFuZGxlcgpA
QCAtNTcxLDcgKzU2MSw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBMb2NrIG1fdGFza0xv
Y2s7Ci0gICAgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICptX3Rhc2s7CisgICAgV2Vha09i
akNQdHI8V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrPiBtX3Rhc2s7CiB9OwogCiB2b2lkIFdl
YkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6Y2xlYXJUYXNrKCkKQEAgLTU4NiwxNiAr
NTc2LDE3IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjpkYXRhU2Vu
dChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc291cmNlCiAgICAgaWYgKCFtX3Rhc2spCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFttX3Rhc2sgcmVzb3VyY2U6cmVzb3VyY2Ugc2VudEJ5dGVzOmJ5
dGVzU2VudCB0b3RhbEJ5dGVzVG9CZVNlbnQ6dG90YWxCeXRlc1RvQmVTZW50XTsKKyAgICBbbV90
YXNrIHJlc291cmNlOiZyZXNvdXJjZSBzZW50Qnl0ZXM6Ynl0ZXNTZW50IHRvdGFsQnl0ZXNUb0Jl
U2VudDp0b3RhbEJ5dGVzVG9CZVNlbnRdOwogfQogCiB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25E
YXRhVGFza0NsaWVudDo6cmVzcG9uc2VSZWNlaXZlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJl
c291cmNlLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChTaG91bGRDb250aW51ZVBvbGljeUNoZWNrKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKKyAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTsKICAgICBMb2NrSG9s
ZGVyIGxvY2tlcihtX3Rhc2tMb2NrKTsKICAgICBpZiAoIW1fdGFzaykKICAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb25IYW5kbGVyKFNob3VsZENvbnRpbnVlUG9saWN5Q2hlY2s6Ok5vKTsKIAotICAg
IFttX3Rhc2sgcmVzb3VyY2U6cmVzb3VyY2UgcmVjZWl2ZWRSZXNwb25zZTpyZXNwb25zZSBjb21w
bGV0aW9uSGFuZGxlcjpXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV07CisgICAgW21fdGFzayBy
ZXNvdXJjZTomcmVzb3VyY2UgcmVjZWl2ZWRSZXNwb25zZTpyZXNwb25zZSBjb21wbGV0aW9uSGFu
ZGxlcjpXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV07CiB9CiAKIGJvb2wgV2ViQ29yZU5TVVJM
U2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjpzaG91bGRDYWNoZVJlc3BvbnNlKFBsYXRmb3JtTWVkaWFS
ZXNvdXJjZSYgcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQpAQCAt
NjA0LDcgKzU5NSw3IEBAIGJvb2wgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpz
aG91bGRDYWNoZVJlc3BvbnNlKFBsYXRmb3JtTWVkaWFSZXNvdXJjCiAgICAgaWYgKCFtX3Rhc2sp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBbbV90YXNrIHJlc291cmNlOnJl
c291cmNlIHNob3VsZENhY2hlUmVzcG9uc2U6cmVzcG9uc2VdOworICAgIHJldHVybiBbbV90YXNr
IHJlc291cmNlOiZyZXNvdXJjZSBzaG91bGRDYWNoZVJlc3BvbnNlOnJlc3BvbnNlXTsKIH0KIAog
dm9pZCBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmRhdGFSZWNlaXZlZChQbGF0
Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc291cmNlLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3Ro
KQpAQCAtNjEzLDcgKzYwNCw3IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xp
ZW50OjpkYXRhUmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvCiAgICAgaWYgKCFt
X3Rhc2spCiAgICAgICAgIHJldHVybjsKIAotICAgIFttX3Rhc2sgcmVzb3VyY2U6cmVzb3VyY2Ug
cmVjZWl2ZWREYXRhOmRhdGEgbGVuZ3RoOmxlbmd0aF07CisgICAgW21fdGFzayByZXNvdXJjZTom
cmVzb3VyY2UgcmVjZWl2ZWREYXRhOmRhdGEgbGVuZ3RoOmxlbmd0aF07CiB9CiAKIHZvaWQgV2Vi
Q29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjpyZWRpcmVjdFJlY2VpdmVkKFBsYXRmb3Jt
TWVkaWFSZXNvdXJjZSYgcmVzb3VyY2UsIFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlc291
cmNlUmVxdWVzdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTYyMiw3ICs2MTMsNyBAQCB2
b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6cmVkaXJlY3RSZWNlaXZlZChQ
bGF0Zm9ybU1lZGlhUmVzb3VyY2UmCiAgICAgaWYgKCFtX3Rhc2spCiAgICAgICAgIHJldHVybjsK
IAotICAgIFttX3Rhc2sgcmVzb3VyY2U6cmVzb3VyY2UgcmVjZWl2ZWRSZWRpcmVjdDpyZXNwb25z
ZSByZXF1ZXN0OldURk1vdmUocmVxdWVzdCkgY29tcGxldGlvbkhhbmRsZXI6IFtjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHJlcXVlc3QpIG11
dGFibGUgeworICAgIFttX3Rhc2sgcmVzb3VyY2U6JnJlc291cmNlIHJlY2VpdmVkUmVkaXJlY3Q6
cmVzcG9uc2UgcmVxdWVzdDpXVEZNb3ZlKHJlcXVlc3QpIGNvbXBsZXRpb25IYW5kbGVyOiBbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiByZXF1
ZXN0KSBtdXRhYmxlIHsKICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbcmVxdWVzdCA9IHJlcXVl
c3QuaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildICgpIG11dGFibGUgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RG
TW92ZShyZXF1ZXN0KSk7CiAgICAgICAgIH0pOwpAQCAtNjM1LDcgKzYyNiw3IEBAIHZvaWQgV2Vi
Q29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjphY2Nlc3NDb250cm9sQ2hlY2tGYWlsZWQo
UGxhdGZvcm1NZWRpYVJlCiAgICAgaWYgKCFtX3Rhc2spCiAgICAgICAgIHJldHVybjsKIAotICAg
IFttX3Rhc2sgcmVzb3VyY2U6cmVzb3VyY2UgYWNjZXNzQ29udHJvbENoZWNrRmFpbGVkV2l0aEVy
cm9yOmVycm9yXTsKKyAgICBbbV90YXNrIHJlc291cmNlOiZyZXNvdXJjZSBhY2Nlc3NDb250cm9s
Q2hlY2tGYWlsZWRXaXRoRXJyb3I6ZXJyb3JdOwogfQogCiB2b2lkIFdlYkNvcmVOU1VSTFNlc3Np
b25EYXRhVGFza0NsaWVudDo6bG9hZEZhaWxlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc291
cmNlLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKQEAgLTY0NCw3ICs2MzUsNyBAQCB2b2lk
IFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZhaWxlZChQbGF0Zm9ybU1l
ZGlhUmVzb3VyY2UmIHJlc291cgogICAgIGlmICghbV90YXNrKQogICAgICAgICByZXR1cm47CiAK
LSAgICBbbV90YXNrIHJlc291cmNlOnJlc291cmNlIGxvYWRGYWlsZWRXaXRoRXJyb3I6ZXJyb3Jd
OworICAgIFttX3Rhc2sgcmVzb3VyY2U6JnJlc291cmNlIGxvYWRGYWlsZWRXaXRoRXJyb3I6ZXJy
b3JdOwogfQogCiB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZp
bmlzaGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzb3VyY2UsIGNvbnN0IE5ldHdvcmtMb2Fk
TWV0cmljcyYgbWV0cmljcykKQEAgLTY1Myw3ICs2NDQsNyBAQCB2b2lkIFdlYkNvcmVOU1VSTFNl
c3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZpbmlzaGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYg
cmVzbwogICAgIGlmICghbV90YXNrKQogICAgICAgICByZXR1cm47CiAKLSAgICBbbV90YXNrIHJl
c291cmNlRmluaXNoZWQ6cmVzb3VyY2UgbWV0cmljczptZXRyaWNzXTsKKyAgICBbbV90YXNrIHJl
c291cmNlRmluaXNoZWQ6JnJlc291cmNlIG1ldHJpY3M6bWV0cmljc107CiB9CiAKIH0KQEAgLTY2
MSwxNyArNjUyLDYgQEAgdm9pZCBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6Omxv
YWRGaW5pc2hlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc28KICNwcmFnbWEgbWFyayAtIFdl
YkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzawogCiBAaW1wbGVtZW50YXRpb24gV2ViQ29yZU5TVVJM
U2Vzc2lvbkRhdGFUYXNrCi0tIChpZClpbml0V2l0aFNlc3Npb246KFdlYkNvcmVOU1VSTFNlc3Np
b24gKilzZXNzaW9uIGlkZW50aWZpZXI6KE5TVUludGVnZXIpaWRlbnRpZmllciBVUkw6KE5TVVJM
ICopdXJsCi17Ci0gICAgc2VsZi50YXNrSWRlbnRpZmllciA9IGlkZW50aWZpZXI7Ci0gICAgc2Vs
Zi5zZXNzaW9uID0gc2Vzc2lvbjsKLSAgICBzZWxmLnN0YXRlID0gTlNVUkxTZXNzaW9uVGFza1N0
YXRlU3VzcGVuZGVkOwotICAgIHNlbGYucHJpb3JpdHkgPSBOU1VSTFNlc3Npb25UYXNrUHJpb3Jp
dHlEZWZhdWx0OwotICAgIHNlbGYub3JpZ2luYWxSZXF1ZXN0ID0gc2VsZi5jdXJyZW50UmVxdWVz
dCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dXJsXTsKLQotICAgIHJldHVybiBzZWxm
OwotfQotCiAtIChpZClpbml0V2l0aFNlc3Npb246KFdlYkNvcmVOU1VSTFNlc3Npb24gKilzZXNz
aW9uIGlkZW50aWZpZXI6KE5TVUludGVnZXIpaWRlbnRpZmllciByZXF1ZXN0OihOU1VSTFJlcXVl
c3QgKilyZXF1ZXN0CiB7CiAgICAgc2VsZi50YXNrSWRlbnRpZmllciA9IGlkZW50aWZpZXI7CkBA
IC03MDgsOSArNjg4LDEyIEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50
Ojpsb2FkRmluaXNoZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvCiAKICAgICBbc2VsZiBf
Y2FuY2VsXTsKIAorICAgIGlmIChbc2VsZi5zZXNzaW9uIHJhbmdlUmVzcG9uc2VHZW5lcmF0b3Jd
LndpbGxIYW5kbGVSZXF1ZXN0KHNlbGYsIHNlbGYub3JpZ2luYWxSZXF1ZXN0KSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgX3Jlc291cmNlID0gc2VsZi5zZXNzaW9uLmxvYWRlci5yZXF1ZXN0UmVz
b3VyY2Uoc2VsZi5vcmlnaW5hbFJlcXVlc3QsIFBsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlcjo6
TG9hZE9wdGlvbjo6RGlzYWxsb3dDYWNoaW5nKTsKICAgICBpZiAoX3Jlc291cmNlKQotICAgICAg
ICBfcmVzb3VyY2UtPnNldENsaWVudChtYWtlVW5pcXVlPFdlYkNvcmVOU1VSTFNlc3Npb25EYXRh
VGFza0NsaWVudD4oc2VsZikpOworICAgICAgICBfcmVzb3VyY2UtPnNldENsaWVudChhZG9wdFJl
ZigqbmV3IFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudChzZWxmKSkpOwogfQogCiAt
ICh2b2lkKV9jYW5jZWwKQEAgLTcyMywxNSArNzA2LDcgQEAgdm9pZCBXZWJDb3JlTlNVUkxTZXNz
aW9uRGF0YVRhc2tDbGllbnQ6OmxvYWRGaW5pc2hlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJl
c28KICAgICB9CiB9CiAKLS0gKHZvaWQpX2ZpbmlzaAotewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgaWYgKF9yZXNvdXJjZSkKLSAgICAgICAgW3NlbGYgcmVzb3VyY2VGaW5pc2hl
ZDoqX3Jlc291cmNlIG1ldHJpY3M6TmV0d29ya0xvYWRNZXRyaWNzIHsgfV07Ci19Ci0KICNwcmFn
bWEgbWFyayAtIE5TVVJMU2Vzc2lvbiBBUEkKLUBzeW50aGVzaXplIHNlc3Npb24gPSBfc2Vzc2lv
bjsKIEBzeW50aGVzaXplIHRhc2tJZGVudGlmaWVyID0gX3Rhc2tJZGVudGlmaWVyOwogQHN5bnRo
ZXNpemUgb3JpZ2luYWxSZXF1ZXN0ID0gX29yaWdpbmFsUmVxdWVzdDsKIEBzeW50aGVzaXplIGN1
cnJlbnRSZXF1ZXN0ID0gX2N1cnJlbnRSZXF1ZXN0OwpAQCAtNzQ0LDYgKzcxOSwxNiBAQCB2b2lk
IFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZpbmlzaGVkKFBsYXRmb3Jt
TWVkaWFSZXNvdXJjZSYgcmVzbwogQHN5bnRoZXNpemUgdGFza0Rlc2NyaXB0aW9uID0gX3Rhc2tE
ZXNjcmlwdGlvbjsKIEBzeW50aGVzaXplIHByaW9yaXR5ID0gX3ByaW9yaXR5OwogCistIChXZWJD
b3JlTlNVUkxTZXNzaW9uICopc2Vzc2lvbgoreworICAgIHJldHVybiBfc2Vzc2lvbi5nZXQoKS5n
ZXQoKTsKK30KKworLSAodm9pZClzZXRTZXNzaW9uOihXZWJDb3JlTlNVUkxTZXNzaW9uICopc2Vz
c2lvbgoreworICAgIF9zZXNzaW9uID0gc2Vzc2lvbjsKK30KKwogLSAoTlNVUkxSZXNwb25zZSAq
KXJlc3BvbnNlCiB7CiAgICAgcmV0dXJuIF9yZXNwb25zZS5nZXQoKTsKQEAgLTc1MSwxMCArNzM2
LDEyIEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNo
ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvCiAKIC0gKHZvaWQpY2FuY2VsCiB7CisgICAg
aWYgKHNlbGYuc3RhdGUgPT0gTlNVUkxTZXNzaW9uVGFza1N0YXRlQ29tcGxldGVkKQorICAgICAg
ICByZXR1cm47CiAgICAgc2VsZi5zdGF0ZSA9IE5TVVJMU2Vzc2lvblRhc2tTdGF0ZUNhbmNlbGlu
ZzsKLSAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRyPFdlYkNv
cmVOU1VSTFNlc3Npb25EYXRhVGFzaz4oc2VsZildIHsKKyAgICBjYWxsT25NYWluVGhyZWFkKFtw
cm90ZWN0ZWRTZWxmID0gcmV0YWluUHRyKHNlbGYpXSB7CiAgICAgICAgIFtwcm90ZWN0ZWRTZWxm
IF9jYW5jZWxdOwotICAgICAgICBbcHJvdGVjdGVkU2VsZiBfZmluaXNoXTsKKyAgICAgICAgW3By
b3RlY3RlZFNlbGYgX3Jlc291cmNlOm51bGxwdHIgbG9hZEZpbmlzaGVkV2l0aEVycm9yOltOU0Vy
cm9yIGVycm9yV2l0aERvbWFpbjpOU1VSTEVycm9yRG9tYWluIGNvZGU6TlNVUkxFcnJvckNhbmNl
bGxlZCB1c2VySW5mbzpuaWxdIG1ldHJpY3M6TmV0d29ya0xvYWRNZXRyaWNzIHsgfV07CiAgICAg
fSk7CiB9CiAKQEAgLTgwNiwyMyArNzkzLDI4IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRh
dGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvCiAK
ICNwcmFnbWEgbWFyayAtIFBsYXRmb3JtTWVkaWFSZXNvdXJjZUNsaWVudCBjYWxsYmFja3MKIAot
LSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlJilyZXNvdXJjZSBzZW50Qnl0
ZXM6KHVuc2lnbmVkIGxvbmcgbG9uZylieXRlc1NlbnQgdG90YWxCeXRlc1RvQmVTZW50Oih1bnNp
Z25lZCBsb25nIGxvbmcpdG90YWxCeXRlc1RvQmVTZW50CistICh2b2lkKXJlc291cmNlOihQbGF0
Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIHNlbnRCeXRlczoodW5zaWduZWQgbG9uZyBsb25n
KWJ5dGVzU2VudCB0b3RhbEJ5dGVzVG9CZVNlbnQ6KHVuc2lnbmVkIGxvbmcgbG9uZyl0b3RhbEJ5
dGVzVG9CZVNlbnQKIHsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAmcmVzb3VyY2UgPT0g
X3Jlc291cmNlKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAhcmVzb3VyY2UgfHwgcmVz
b3VyY2UgPT0gX3Jlc291cmNlKTsKICAgICBVTlVTRURfUEFSQU0oYnl0ZXNTZW50KTsKICAgICBV
TlVTRURfUEFSQU0odG90YWxCeXRlc1RvQmVTZW50KTsKICAgICAvLyBOby1vcC4KIH0KIAotLSAo
dm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlJilyZXNvdXJjZSByZWNlaXZlZFJl
c3BvbnNlOihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJilyZXNwb25zZSBjb21wbGV0aW9uSGFuZGxl
cjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTaG91bGRDb250aW51ZVBvbGljeUNoZWNrKT4mJilj
b21wbGV0aW9uSGFuZGxlcgorLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNl
KilyZXNvdXJjZSByZWNlaXZlZFJlc3BvbnNlOihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJilyZXNw
b25zZSBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTaG91bGRDb250
aW51ZVBvbGljeUNoZWNrKT4mJiljb21wbGV0aW9uSGFuZGxlcgogewogICAgIEFTU0VSVChyZXNw
b25zZS5zb3VyY2UoKSA9PSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6Ok5ldHdvcmsgfHwgcmVz
cG9uc2Uuc291cmNlKCkgPT0gUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpEaXNrQ2FjaGUgfHwg
cmVzcG9uc2Uuc291cmNlKCkgPT0gUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpEaXNrQ2FjaGVB
ZnRlclZhbGlkYXRpb24gfHwgcmVzcG9uc2Uuc291cmNlKCkgPT0gUmVzb3VyY2VSZXNwb25zZTo6
U291cmNlOjpTZXJ2aWNlV29ya2VyKTsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAmcmVz
b3VyY2UgPT0gX3Jlc291cmNlKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAhcmVzb3Vy
Y2UgfHwgcmVzb3VyY2UgPT0gX3Jlc291cmNlKTsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIFtzZWxmLnNlc3Npb24gdGFzazpzZWxmIGRpZFJlY2VpdmVSZXNwb25zZUZyb21Pcmln
aW46U2VjdXJpdHlPcmlnaW46OmNyZWF0ZShyZXNwb25zZS51cmwoKSldOwotICAgIFtzZWxmLnNl
c3Npb24gdGFzazpzZWxmIGRpZFJlY2VpdmVDT1JTQWNjZXNzQ2hlY2tSZXN1bHQ6cmVzb3VyY2Uu
ZGlkUGFzc0FjY2Vzc0NvbnRyb2xDaGVjaygpXTsKKyAgICAvLyBGSVhNRTogVGhpbmsgYWJvdXQg
dGhpcyBhbmQgbWFrZSBzdXJlIGl0J3Mgc2FmZS4KKyAgICBbc2VsZi5zZXNzaW9uIHRhc2s6c2Vs
ZiBkaWRSZWNlaXZlQ09SU0FjY2Vzc0NoZWNrUmVzdWx0OnJlc291cmNlID8gcmVzb3VyY2UtPmRp
ZFBhc3NBY2Nlc3NDb250cm9sQ2hlY2soKSA6IFlFU107CiAgICAgc2VsZi5jb3VudE9mQnl0ZXNF
eHBlY3RlZFRvUmVjZWl2ZSA9IHJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpOwotICAg
IFJldGFpblB0cjxOU1VSTFJlc3BvbnNlPiBzdHJvbmdSZXNwb25zZSB7IHJlc3BvbnNlLm5zVVJM
UmVzcG9uc2UoKSB9OworICAgIFJldGFpblB0cjxOU1VSTFJlc3BvbnNlPiBzdHJvbmdSZXNwb25z
ZSA9IHJlc3BvbnNlLm5zVVJMUmVzcG9uc2UoKTsKKworICAgIGlmIChyZXNvdXJjZSAmJiBzZWxm
LnNlc3Npb24gJiYgW3NlbGYuc2Vzc2lvbiByYW5nZVJlc3BvbnNlR2VuZXJhdG9yXS53aWxsU3lu
dGhlc2l6ZVJhbmdlUmVzcG9uc2VzKHNlbGYsICpyZXNvdXJjZSwgcmVzcG9uc2UpKQorICAgICAg
ICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoU2hvdWxkQ29udGludWVQb2xpY3lDaGVjazo6WWVz
KTsKKyAgICAKICAgICBSZXRhaW5QdHI8V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrPiBzdHJv
bmdTZWxmIHsgc2VsZiB9OwogICAgIGlmICghc2VsZi5zZXNzaW9uKQogICAgICAgICByZXR1cm4g
Y29tcGxldGlvbkhhbmRsZXIoU2hvdWxkQ29udGludWVQb2xpY3lDaGVjazo6Tm8pOwpAQCAtODUw
LDkgKzg0Miw5IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2Fk
RmluaXNoZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvCiAgICAgfV07CiB9CiAKLS0gKEJP
T0wpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2Ugc2hvdWxkQ2FjaGVS
ZXNwb25zZTooY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpcmVzcG9uc2UKKy0gKEJPT0wpcmVzb3Vy
Y2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3VyY2Ugc2hvdWxkQ2FjaGVSZXNwb25zZToo
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpcmVzcG9uc2UKIHsKLSAgICBBU1NFUlRfVU5VU0VEKHJl
c291cmNlLCAmcmVzb3VyY2UgPT0gX3Jlc291cmNlKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc291
cmNlLCAhcmVzb3VyY2UgfHwgcmVzb3VyY2UgPT0gX3Jlc291cmNlKTsKIAogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CiAKQEAgLTg2MCw5ICs4NTIsOSBAQCB2b2lkIFdlYkNvcmVOU1VSTFNl
c3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZpbmlzaGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYg
cmVzbwogICAgIHJldHVybiByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6
OkNvbnRlbnRSYW5nZSkuaXNFbXB0eSgpOwogfQogCi0tICh2b2lkKXJlc291cmNlOihQbGF0Zm9y
bU1lZGlhUmVzb3VyY2UmKXJlc291cmNlIHJlY2VpdmVkRGF0YTooY29uc3QgY2hhciopZGF0YSBs
ZW5ndGg6KGludClsZW5ndGgKKy0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJj
ZSopcmVzb3VyY2UgcmVjZWl2ZWREYXRhOihjb25zdCBjaGFyKilkYXRhIGxlbmd0aDooaW50KWxl
bmd0aAogewotICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2UsICZyZXNvdXJjZSA9PSBfcmVzb3Vy
Y2UpOworICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2UsICFyZXNvdXJjZSB8fCByZXNvdXJjZSA9
PSBfcmVzb3VyY2UpOwogICAgIFJldGFpblB0cjxOU0RhdGE+IG5zRGF0YSA9IGFkb3B0TlMoW1tO
U0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6ZGF0YSBsZW5ndGg6bGVuZ3RoXSk7CiAgICAgUmV0
YWluUHRyPFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzaz4gc3Ryb25nU2VsZiB7IHNlbGYgfTsK
ICAgICBbc2VsZi5zZXNzaW9uIGFkZERlbGVnYXRlT3BlcmF0aW9uOltzdHJvbmdTZWxmLCBsZW5n
dGgsIG5zRGF0YV0gewpAQCAtODczLDkgKzg2NSw5IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lv
bkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNv
CiAgICAgfV07CiB9CiAKLS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYp
cmVzb3VyY2UgcmVjZWl2ZWRSZWRpcmVjdDooY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpcmVzcG9u
c2UgcmVxdWVzdDooUmVzb3VyY2VSZXF1ZXN0JiYpcmVxdWVzdCBjb21wbGV0aW9uSGFuZGxlcjoo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChSZXNvdXJjZVJlcXVlc3QmJik+JiYpY29tcGxldGlvbkhh
bmRsZXIKKy0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3VyY2Ug
cmVjZWl2ZWRSZWRpcmVjdDooY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpcmVzcG9uc2UgcmVxdWVz
dDooUmVzb3VyY2VSZXF1ZXN0JiYpcmVxdWVzdCBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChSZXNvdXJjZVJlcXVlc3QmJik+JiYpY29tcGxldGlvbkhhbmRsZXIKIHsK
LSAgICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAmcmVzb3VyY2UgPT0gX3Jlc291cmNlKTsKKyAg
ICBBU1NFUlRfVU5VU0VEKHJlc291cmNlLCAhcmVzb3VyY2UgfHwgcmVzb3VyY2UgPT0gX3Jlc291
cmNlKTsKICAgICBbc2VsZi5zZXNzaW9uIGFkZERlbGVnYXRlT3BlcmF0aW9uOltzdHJvbmdTZWxm
ID0gcmV0YWluUHRyKHNlbGYpLCByZXNwb25zZSA9IHJldGFpblB0cihyZXNwb25zZS5uc1VSTFJl
c3BvbnNlKCkpLCByZXF1ZXN0ID0gcmVxdWVzdC5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CiAgICAgICAg
IGlmICghW3Jlc3BvbnNlIGlzS2luZE9mQ2xhc3M6W05TSFRUUFVSTFJlc3BvbnNlIGNsYXNzXV0p
IHsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtOTA1LDkgKzg5Nyw5IEBA
IHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQoUGxh
dGZvcm1NZWRpYVJlc291cmNlJiByZXNvCiAgICAgfV07CiB9CiAKLS0gKHZvaWQpX3Jlc291cmNl
OihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmKXJlc291cmNlIGxvYWRGaW5pc2hlZFdpdGhFcnJvcjoo
TlNFcnJvciAqKWVycm9yIG1ldHJpY3M6KGNvbnN0IE5ldHdvcmtMb2FkTWV0cmljcyYpbWV0cmlj
cworLSAodm9pZClfcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3VyY2UgbG9h
ZEZpbmlzaGVkV2l0aEVycm9yOihOU0Vycm9yICopZXJyb3IgbWV0cmljczooY29uc3QgTmV0d29y
a0xvYWRNZXRyaWNzJiltZXRyaWNzCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgJnJl
c291cmNlID09IF9yZXNvdXJjZSk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgIXJlc291
cmNlIHx8IHJlc291cmNlID09IF9yZXNvdXJjZSk7CiAgICAgaWYgKHNlbGYuc3RhdGUgPT0gTlNV
UkxTZXNzaW9uVGFza1N0YXRlQ29tcGxldGVkKQogICAgICAgICByZXR1cm47CiAgICAgc2VsZi5z
dGF0ZSA9IE5TVVJMU2Vzc2lvblRhc2tTdGF0ZUNvbXBsZXRlZDsKQEAgLTkzMCwxNyArOTIyLDE3
IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQo
UGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvCiAgICAgfV07CiB9CiAKLS0gKHZvaWQpcmVzb3Vy
Y2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgYWNjZXNzQ29udHJvbENoZWNrRmFp
bGVkV2l0aEVycm9yOihjb25zdCBSZXNvdXJjZUVycm9yJillcnJvcgorLSAodm9pZClyZXNvdXJj
ZTooUGxhdGZvcm1NZWRpYVJlc291cmNlKilyZXNvdXJjZSBhY2Nlc3NDb250cm9sQ2hlY2tGYWls
ZWRXaXRoRXJyb3I6KGNvbnN0IFJlc291cmNlRXJyb3ImKWVycm9yCiB7CiAgICAgW3NlbGYgX3Jl
c291cmNlOnJlc291cmNlIGxvYWRGaW5pc2hlZFdpdGhFcnJvcjplcnJvci5uc0Vycm9yKCkgbWV0
cmljczpOZXR3b3JrTG9hZE1ldHJpY3MgeyB9XTsKIH0KIAotLSAodm9pZClyZXNvdXJjZTooUGxh
dGZvcm1NZWRpYVJlc291cmNlJilyZXNvdXJjZSBsb2FkRmFpbGVkV2l0aEVycm9yOihjb25zdCBS
ZXNvdXJjZUVycm9yJillcnJvcgorLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291
cmNlKilyZXNvdXJjZSBsb2FkRmFpbGVkV2l0aEVycm9yOihjb25zdCBSZXNvdXJjZUVycm9yJill
cnJvcgogewogICAgIFtzZWxmIF9yZXNvdXJjZTpyZXNvdXJjZSBsb2FkRmluaXNoZWRXaXRoRXJy
b3I6ZXJyb3IubnNFcnJvcigpIG1ldHJpY3M6TmV0d29ya0xvYWRNZXRyaWNzIHsgfV07CiB9CiAK
LS0gKHZvaWQpcmVzb3VyY2VGaW5pc2hlZDooUGxhdGZvcm1NZWRpYVJlc291cmNlJilyZXNvdXJj
ZSBtZXRyaWNzOihjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmKW1ldHJpY3MKKy0gKHZvaWQpcmVz
b3VyY2VGaW5pc2hlZDooUGxhdGZvcm1NZWRpYVJlc291cmNlKilyZXNvdXJjZSBtZXRyaWNzOihj
b25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmKW1ldHJpY3MKIHsKICAgICBbc2VsZiBfcmVzb3VyY2U6
cmVzb3VyY2UgbG9hZEZpbmlzaGVkV2l0aEVycm9yOm5pbCBtZXRyaWNzOm1ldHJpY3NdOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3Jl
TlNVUkxTZXNzaW9uSW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbkludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY5ZGUyOWJi
MmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUu
Y3BwCmluZGV4IDlhYjkwODZiNWIzOWVlNDY4MzFjOWQ5YWE5NTE5OWRiY2ZhNzIyNjIuLmEyZjAx
NjdlZjljOWQ2ZTNkM2FhYTk1ZDE4NDdlZTkzMGQ0Y2ViZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0
ZVJlbW90ZS5jcHAKQEAgLTExODAsNyArMTE4MCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
UmVtb3RlOjpyZXF1ZXN0UmVzb3VyY2UoUmVtb3RlTWVkaWFSZXNvdXJjZUlkZW50aWZpZXIgcmVt
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gUGxhdGZvcm1NZWRpYVJlc291cmNlIG93
bnMgdGhlIFBsYXRmb3JtTWVkaWFSZXNvdXJjZUNsaWVudAotICAgIHJlc291cmNlLT5zZXRDbGll
bnQobWFrZVVuaXF1ZTxSZW1vdGVNZWRpYVJlc291cmNlUHJveHk+KGNvbm5lY3Rpb24oKSwgKnJl
c291cmNlLCByZW1vdGVNZWRpYVJlc291cmNlSWRlbnRpZmllcikpOworICAgIHJlc291cmNlLT5z
ZXRDbGllbnQoYWRvcHRSZWYoKm5ldyBSZW1vdGVNZWRpYVJlc291cmNlUHJveHkoY29ubmVjdGlv
bigpLCAqcmVzb3VyY2UsIHJlbW90ZU1lZGlhUmVzb3VyY2VJZGVudGlmaWVyKSkpOwogICAgIG1f
bWVkaWFSZXNvdXJjZXMuYWRkKHJlbW90ZU1lZGlhUmVzb3VyY2VJZGVudGlmaWVyLCBXVEZNb3Zl
KHJlc291cmNlKSk7CiAKICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGNlN2EwNDJlN2I5N2M5MTdmNjlj
MTkwNDNjMTVmMThlNzlmOWNlOTYuLjMzNmU2YmY0ZjEwYzI5N2QzZjc4NTZjM2YxN2NlZDg4Nzlk
ZTYyOGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyOSBAQAorMjAyMS0wMi0xNSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFN5bnRoZXNpemUgcmFuZ2UgcmVzcG9uc2VzIGlm
IG5lZWRlZCBpbiBXZWJDb3JlTlNVUkxTZXNzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjEwNzIKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9m
ZiBHYXJlbi4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QYXJzZWRD
b250ZW50UmFuZ2UuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9DaGFsbGVuZ2UubW06CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpjbGllbnRDZXJ0U2VydmVyKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL01lZGlhTG9hZGluZy5tbToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OnRlc3RWaWRlb0J5dGVzKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnJ1blZpZGVv
VGVzdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIuaDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBS
ZXNwb25zZTo6SFRUUFJlc3BvbnNlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2
ZXI6OkhUVFBSZXNwb25zZTo6SFRUUFJlc3BvbnNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpI
VFRQU2VydmVyOjpSZXF1ZXN0RGF0YTo6UmVxdWVzdERhdGEpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6YXBwZW5kVG9WZWN0b3IpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZl
cjo6cGFyc2VQYXRoKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OnJlc3Bv
bmRUb1JlcXVlc3RzKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBSZXNwb25zZTo6Ym9k
eUZyb21TdHJpbmcpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFJlc3BvbnNlOjpzZXJp
YWxpemUpOgorCiAyMDIxLTAyLTE0ICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBsZS5jb20+CiAK
ICAgICAgICAgW0dQVVBdIE1vdmUgVXNlR1BVUHJvY2Vzc0Zvck1lZGlhRW5hYmxlZCBmcm9tIFdl
YlByZWZlcmVuY2VzSW50ZXJuYWwgdG8gV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QYXJzZWRDb250ZW50UmFu
Z2UuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1BhcnNlZENvbnRlbnRS
YW5nZS5jcHAKaW5kZXggMjBhOTU3ZTU5Yzg1MTYwYzgwODMxN2UxNWIwMTAyOGQ1ZmE5YjQ1OC4u
MjVkMmQ2NzdmYjg4ODYyMjVmZTMxZGI0OThlNWQ3NWQ2YzYwMGY0MCAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1BhcnNlZENvbnRlbnRSYW5nZS5jcHAKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1BhcnNlZENvbnRlbnRSYW5nZS5j
cHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2luY2x1ZGUgPFdl
YkNvcmUvUGFyc2VkQ29udGVudFJhbmdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYXJzZWRSZXF1
ZXN0UmFuZ2UuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CkBAIC05NSw0ICs5NiwzMSBAQCBURVNUKFdlYkNvcmUsIFBhcnNlZENv
bnRlbnRSYW5nZVRvU3RyaW5nKQogICAgIEFTU0VSVF9TVFJFUSgiIiwgUGFyc2VkQ29udGVudFJh
bmdlKCkuaGVhZGVyVmFsdWUoKS51dGY4KCkuZGF0YSgpKTsKIH0KIAorVEVTVChXZWJDb3JlLCBQ
YXJzZWRSZXF1ZXN0UmFuZ2UpCit7CisgICAgVmVjdG9yPFN0cmluZz4gZmFpbHVyZUNhc2VzIHsK
KyAgICAgICAgeyB9LAorICAgICAgICAiIiwKKyAgICAgICAgImFiYyIsCisgICAgICAgICJieXRl
cz0iLAorICAgICAgICAiYnl0ZXM9LSIsCisgICAgICAgICJieXRlcz1hYmMtIiwKKyAgICAgICAg
ImJ5dGVzPTEtYWJjIiwKKyAgICAgICAgImJ5dGVzPTItMSIsCisgICAgICAgICJieXRlcz0xLSIs
CisgICAgICAgICJieXRlcz0tMSIsCisgICAgICAgICJieXRlcz0xLTk5OTk5OTk5OTk5OTk5OTk5
OTk5OTk5OSIKKyAgICB9OworICAgIGZvciAoY29uc3QgYXV0byYgaW5wdXQgOiBmYWlsdXJlQ2Fz
ZXMpCisgICAgICAgIEVYUEVDVF9FUShXVEY6Om51bGxvcHQsIFBhcnNlZFJlcXVlc3RSYW5nZTo6
cGFyc2UoaW5wdXQpKTsKKworICAgIGF1dG8gY29tcGFyZSA9IFtdIChjb25zdCBTdHJpbmcmIGlu
cHV0LCBPcHRpb25hbDxzaXplX3Q+IGJlZ2luLCBPcHRpb25hbDxzaXplX3Q+IGVuZCkgeworICAg
ICAgICBhdXRvIHJhbmdlID0gUGFyc2VkUmVxdWVzdFJhbmdlOjpwYXJzZShpbnB1dCk7CisgICAg
ICAgIEVYUEVDVF9ORShXVEY6Om51bGxvcHQsIHJhbmdlKTsKKyAgICAgICAgCisgICAgfTsKKyAg
ICBjb21wYXJlKCJieXRlcz0xLTEiLCAxLCAxKTsKKyAgICBjb21wYXJlKCJieXRlcz0xLTIiLCAx
LCAyKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9DaGFsbGVuZ2UubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0NoYWxsZW5nZS5tbQppbmRleCA5NjQwNzQ4YmY2MzAyOGQyYjc0NDg5OGNkMGQ0NjUzY2Zh
OGJkNWQzLi4wYjc1YmE0M2MwM2FlMzg4ODE2YTFmM2NjMmNlZTZmMTc3MWIxMDYxIDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0NoYWxsZW5nZS5tbQor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0NoYWxsZW5nZS5tbQpA
QCAtNTg5LDcgKzU4OSw3IEBAIHN0YXRpYyBIVFRQU2VydmVyIGNsaWVudENlcnRTZXJ2ZXIoKQog
ICAgICAgICB7ICIvNS5wbmciLCB7IGxvbmdTdHJpbmcgfSB9LAogICAgICAgICB7ICIvNi5wbmci
LCB7IGxvbmdTdHJpbmcgfSB9LAogICAgICAgICB7ICIvcmVkaXJlY3RUb0Vycm9yIiwgeyAzMDEs
IHt7ICJMb2NhdGlvbiIsICIvZXJyb3IiIH19IH0gfSwKLSAgICAgICAgeyAiL2Vycm9yIiwgeyBI
VFRQU2VydmVyOjpIVFRQUmVzcG9uc2U6OlRlcm1pbmF0ZUNvbm5lY3Rpb246OlllcyB9IH0sCisg
ICAgICAgIHsgIi9lcnJvciIsIHsgSFRUUFJlc3BvbnNlOjpUZXJtaW5hdGVDb25uZWN0aW9uOjpZ
ZXMgfSB9LAogICAgIH0sIEhUVFBTZXJ2ZXI6OlByb3RvY29sOjpIdHRwcywgW10gKGF1dG8sIGF1
dG8sIGF1dG8gY2VydGlmaWNhdGVBbGxvd2VkKSB7CiAgICAgICAgIGNlcnRpZmljYXRlQWxsb3dl
ZCh0cnVlKTsKICAgICB9KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvTWVkaWFMb2FkaW5nLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9NZWRpYUxvYWRpbmcubW0KaW5kZXggNjRkYzViZjA1NmI5NTVhMjQ4ZjY3ZTIw
ZDA5Zjc0NzExMzFjMTQ2NS4uZGZlNzE1ZDY4NTE3MWQ4ZGNlMTMxZGYzYzI1MTFiYzZmMmUxMDNj
YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9NZWRp
YUxvYWRpbmcubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9N
ZWRpYUxvYWRpbmcubW0KQEAgLTI3LDYgKzI3LDcgQEAKIAogI2ltcG9ydCAiSFRUUFNlcnZlci5o
IgogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQgIlRlc3RVSURlbGVnYXRl
LmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdD
b25jYXRlbmF0ZU51bWJlcnMuaD4KIApAQCAtMTE2LDYgKzExNyw3NCBAQCBURVNUKE1lZGlhTG9h
ZGluZywgVXNlckFnZW50U3RyaW5nSExTKQogICAgIFV0aWw6OnJ1bigmcmVjZWl2ZWRNZWRpYVJl
cXVlc3QpOwogfQogCitjb25zdCBjaGFyKiB2aWRlb1BsYXlUZXN0SFRNTCA9IjxzY3JpcHQ+Igor
ICAgICJmdW5jdGlvbiBjcmVhdGVWaWRlb0VsZW1lbnQoKSB7IgorICAgICAgICAibGV0IHZpZGVv
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTsiCisgICAgICAgICJ2aWRlby5hZGRF
dmVudExpc3RlbmVyKCdlcnJvcicsICgpPT57YWxlcnQoJ2Vycm9yJyl9KTsiCisgICAgICAgICJ2
aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgKCk9PnthbGVydCgncGxheWluZycpfSk7
IgorICAgICAgICAidmlkZW8uc3JjPSd2aWRlby5tcDQnOyIKKyAgICAgICAgInZpZGVvLmF1dG9w
bGF5PTE7IgorICAgICAgICAiZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh2aWRlbyk7IgorICAg
ICJ9IgorIjwvc2NyaXB0PiIKKyI8Ym9keSBvbmxvYWQ9J2NyZWF0ZVZpZGVvRWxlbWVudCgpJz48
L2JvZHk+IjsKKworc3RhdGljIFZlY3Rvcjx1aW50OF90PiB0ZXN0VmlkZW9CeXRlcygpCit7Cisg
ICAgTlNEYXRhICpkYXRhID0gW05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZVUkw6W1tOU0J1bmRs
ZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInRlc3QiIHdpdGhFeHRlbnNpb246QCJtcDQi
IHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOworICAgIFZlY3Rvcjx1
aW50OF90PiB2ZWN0b3I7CisgICAgdmVjdG9yLmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCB1aW50
OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoKTsKKyAgICByZXR1cm4gdmVjdG9yOworfQor
CitzdGF0aWMgdm9pZCBydW5WaWRlb1Rlc3QoTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0LCBjb25zdCBj
aGFyKiBleHBlY3RlZE1lc3NhZ2UgPSAicGxheWluZyIpCit7CisgICAgYXV0byBjb25maWd1cmF0
aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAg
ICBjb25maWd1cmF0aW9uLmdldCgpLm1lZGlhVHlwZXNSZXF1aXJpbmdVc2VyQWN0aW9uRm9yUGxh
eWJhY2sgPSBXS0F1ZGlvdmlzdWFsTWVkaWFUeXBlTm9uZTsKKyAgICBhdXRvIHdlYlZpZXcgPSBh
ZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAs
IDAsIDMwMCwgMzAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCkgYWRkVG9XaW5k
b3c6WUVTXSk7CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6cmVxdWVzdF07CisgICAgRVhQRUNU
X1dLX1NUUkVRKFt3ZWJWaWV3IF90ZXN0X3dhaXRGb3JBbGVydF0sIGV4cGVjdGVkTWVzc2FnZSk7
Cit9CisKK1RFU1QoTWVkaWFMb2FkaW5nLCBSYW5nZVJlcXVlc3RTeW50aGVzaXNXaXRoQ29udGVu
dExlbmd0aCkKK3sKKyAgICBIVFRQU2VydmVyIHNlcnZlcih7CisgICAgICAgIHsiLyIsIHsgdmlk
ZW9QbGF5VGVzdEhUTUwgfX0sCisgICAgICAgIHsiL3ZpZGVvLm1wNCIsIHsgdGVzdFZpZGVvQnl0
ZXMoKSB9fQorICAgIH0pOworICAgIHJ1blZpZGVvVGVzdChzZXJ2ZXIucmVxdWVzdCgpKTsKKyAg
ICBFWFBFQ1RfRVEoc2VydmVyLnRvdGFsUmVxdWVzdHMoKSwgMnUpOwogfQogCitURVNUKE1lZGlh
TG9hZGluZywgUmFuZ2VSZXF1ZXN0U3ludGhlc2lzV2l0aG91dENvbnRlbnRMZW5ndGgpCit7Cisg
ICAgc2l6ZV90IHRvdGFsUmVxdWVzdHMgeyAwIH07CisgICAgRnVuY3Rpb248dm9pZChDb25uZWN0
aW9uKT4gcmVzcG9uZFRvUmVxdWVzdHM7CisgICAgcmVzcG9uZFRvUmVxdWVzdHMgPSBbJl0gKENv
bm5lY3Rpb24gY29ubmVjdGlvbikgeworICAgICAgICBjb25uZWN0aW9uLnJlY2VpdmVIVFRQUmVx
dWVzdChbJiwgY29ubmVjdGlvbl0gKFZlY3RvcjxjaGFyPiYmIHJlcXVlc3QpIHsKKyAgICAgICAg
ICAgIGF1dG8gc2VuZFJlc3BvbnNlID0gWyYsIGNvbm5lY3Rpb25dIChIVFRQUmVzcG9uc2UgcmVz
cG9uc2UsIEhUVFBSZXNwb25zZTo6SW5jbHVkZUNvbnRlbnRMZW5ndGggaW5jbHVkZUNvbnRlbnRM
ZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnNlbmQocmVzcG9uc2Uuc2VyaWFs
aXplKGluY2x1ZGVDb250ZW50TGVuZ3RoKSwgWyYsIGNvbm5lY3Rpb25dIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmVzcG9uZFRvUmVxdWVzdHMoY29ubmVjdGlvbik7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgdG90YWxSZXF1ZXN0cysrOworICAgICAg
ICAgICAgYXV0byBwYXRoID0gSFRUUFNlcnZlcjo6cGFyc2VQYXRoKHJlcXVlc3QpOworICAgICAg
ICAgICAgaWYgKHBhdGggPT0gIi8iKQorICAgICAgICAgICAgICAgIHNlbmRSZXNwb25zZSh7IHZp
ZGVvUGxheVRlc3RIVE1MIH0sIEhUVFBSZXNwb25zZTo6SW5jbHVkZUNvbnRlbnRMZW5ndGg6Olll
cyk7CisgICAgICAgICAgICBlbHNlIGlmIChwYXRoID09ICIvdmlkZW8ubXA0IikKKyAgICAgICAg
ICAgICAgICBzZW5kUmVzcG9uc2UodGVzdFZpZGVvQnl0ZXMoKSwgSFRUUFJlc3BvbnNlOjpJbmNs
dWRlQ29udGVudExlbmd0aDo6Tm8pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IEFTU0VSVChwYXRoLmlzTnVsbCgpKTsKKyAgICAgICAgfSk7CisgICAgfTsKKworICAgIEhUVFBT
ZXJ2ZXIgc2VydmVyKFsmXShDb25uZWN0aW9uIGNvbm5lY3Rpb24pIHsKKyAgICAgICAgcmVzcG9u
ZFRvUmVxdWVzdHMoY29ubmVjdGlvbik7CisgICAgfSk7CisgICAgcnVuVmlkZW9UZXN0KHNlcnZl
ci5yZXF1ZXN0KCksICJlcnJvciIpOworICAgIEVYUEVDVF9FUSh0b3RhbFJlcXVlc3RzLCAydSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKKwogI2VuZGlmIC8vIEVOQUJMRShW
SURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvY29jb2EvSFRUUFNlcnZlci5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2Vy
dmVyLmgKaW5kZXggMzk1ZGFmOTMxZTI4YTcxZTc3YjgwZjEwMTc4ZjU1OTQ4NWYzNTFjMi4uYzI4
MGU1ZGFhOThlZjY2MjMyNmYxYmNmNGZmMjgzZTVmYTM5MDM1MCAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLmgKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9jb2NvYS9IVFRQU2VydmVyLmgKQEAgLTM1LDEwICszNSwxMCBAQAogbmFtZXNwYWNlIFRlc3RX
ZWJLaXRBUEkgewogCiBjbGFzcyBDb25uZWN0aW9uOworc3RydWN0IEhUVFBSZXNwb25zZTsKIAog
Y2xhc3MgSFRUUFNlcnZlciB7CiBwdWJsaWM6Ci0gICAgc3RydWN0IEhUVFBSZXNwb25zZTsKICAg
ICBzdHJ1Y3QgUmVxdWVzdERhdGE7CiAgICAgZW51bSBjbGFzcyBQcm90b2NvbCA6IHVpbnQ4X3Qg
eyBIdHRwLCBIdHRwcywgSHR0cHNXaXRoTGVnYWN5VExTLCBIdHRwMiB9OwogICAgIHVzaW5nIENl
cnRpZmljYXRlVmVyaWZpZXIgPSBGdW5jdGlvbjx2b2lkKHNlY19wcm90b2NvbF9tZXRhZGF0YV90
LCBzZWNfdHJ1c3RfdCwgc2VjX3Byb3RvY29sX3ZlcmlmeV9jb21wbGV0ZV90KT47CkBAIC01Myw2
ICs1Myw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIHJlc3BvbmRXaXRoT0soQ29ubmVj
dGlvbik7CiAgICAgc3RhdGljIHZvaWQgcmVzcG9uZFdpdGhDaGFsbGVuZ2VUaGVuT0soQ29ubmVj
dGlvbik7CisgICAgc3RhdGljIFN0cmluZyBwYXJzZVBhdGgoY29uc3QgVmVjdG9yPGNoYXI+JiBy
ZXF1ZXN0KTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgUmV0YWluUHRyPG53X3BhcmFtZXRlcnNf
dD4gbGlzdGVuZXJQYXJhbWV0ZXJzKFByb3RvY29sLCBDZXJ0aWZpY2F0ZVZlcmlmaWVyJiYsIFJl
dGFpblB0cjxTZWNJZGVudGl0eVJlZj4mJiwgT3B0aW9uYWw8dWludDE2X3Q+IHBvcnQpOwpAQCAt
ODEsMTggKzgyLDIwIEBAIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPG53X2Nvbm5lY3Rpb25fdD4g
bV9jb25uZWN0aW9uOwogfTsKIAotc3RydWN0IEhUVFBTZXJ2ZXI6OkhUVFBSZXNwb25zZSB7Citz
dHJ1Y3QgSFRUUFJlc3BvbnNlIHsKICAgICBlbnVtIGNsYXNzIFRlcm1pbmF0ZUNvbm5lY3Rpb24g
eyBObywgWWVzIH07Ci0gICAgCisKKyAgICBIVFRQUmVzcG9uc2UoVmVjdG9yPHVpbnQ4X3Q+JiYg
Ym9keSkKKyAgICAgICAgOiBib2R5KFdURk1vdmUoYm9keSkpIHsgfQogICAgIEhUVFBSZXNwb25z
ZShjb25zdCBTdHJpbmcmIGJvZHkpCi0gICAgICAgIDogYm9keShib2R5KSB7IH0KLSAgICBIVFRQ
UmVzcG9uc2UoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mJiBoZWFkZXJGaWVsZHMsIFN0cmluZyYm
IGJvZHkpCisgICAgICAgIDogYm9keShib2R5RnJvbVN0cmluZyhib2R5KSkgeyB9CisgICAgSFRU
UFJlc3BvbnNlKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiYgaGVhZGVyRmllbGRzLCBjb25zdCBT
dHJpbmcmIGJvZHkpCiAgICAgICAgIDogaGVhZGVyRmllbGRzKFdURk1vdmUoaGVhZGVyRmllbGRz
KSkKLSAgICAgICAgLCBib2R5KFdURk1vdmUoYm9keSkpIHsgfQotICAgIEhUVFBSZXNwb25zZSh1
bnNpZ25lZCBzdGF0dXNDb2RlLCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYmIGhlYWRlckZpZWxk
cyA9IHsgfSwgU3RyaW5nJiYgYm9keSA9IHsgfSkKKyAgICAgICAgLCBib2R5KGJvZHlGcm9tU3Ry
aW5nKGJvZHkpKSB7IH0KKyAgICBIVFRQUmVzcG9uc2UodW5zaWduZWQgc3RhdHVzQ29kZSwgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4mJiBoZWFkZXJGaWVsZHMgPSB7IH0sIGNvbnN0IFN0cmluZyYg
Ym9keSA9IHsgfSkKICAgICAgICAgOiBzdGF0dXNDb2RlKHN0YXR1c0NvZGUpCiAgICAgICAgICwg
aGVhZGVyRmllbGRzKFdURk1vdmUoaGVhZGVyRmllbGRzKSkKLSAgICAgICAgLCBib2R5KFdURk1v
dmUoYm9keSkpIHsgfQorICAgICAgICAsIGJvZHkoYm9keUZyb21TdHJpbmcoYm9keSkpIHsgfQog
ICAgIEhUVFBSZXNwb25zZShUZXJtaW5hdGVDb25uZWN0aW9uIHRlcm1pbmF0ZUNvbm5lY3Rpb24p
CiAgICAgICAgIDogdGVybWluYXRlQ29ubmVjdGlvbih0ZXJtaW5hdGVDb25uZWN0aW9uKSB7IH0K
IApAQCAtMTAxLDEwICsxMDQsMTQgQEAgc3RydWN0IEhUVFBTZXJ2ZXI6OkhUVFBSZXNwb25zZSB7
CiAgICAgSFRUUFJlc3BvbnNlKCkgPSBkZWZhdWx0OwogICAgIEhUVFBSZXNwb25zZSYgb3BlcmF0
b3I9KGNvbnN0IEhUVFBSZXNwb25zZSYpID0gZGVmYXVsdDsKICAgICBIVFRQUmVzcG9uc2UmIG9w
ZXJhdG9yPShIVFRQUmVzcG9uc2UmJikgPSBkZWZhdWx0OwotICAgIAorCisgICAgZW51bSBjbGFz
cyBJbmNsdWRlQ29udGVudExlbmd0aCA6IGJvb2wgeyBObywgWWVzIH07CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IHNlcmlhbGl6ZShJbmNsdWRlQ29udGVudExlbmd0aCA9IEluY2x1ZGVDb250ZW50TGVu
Z3RoOjpZZXMpOworICAgIHN0YXRpYyBWZWN0b3I8dWludDhfdD4gYm9keUZyb21TdHJpbmcoY29u
c3QgU3RyaW5nJik7CisKICAgICB1bnNpZ25lZCBzdGF0dXNDb2RlIHsgMjAwIH07CiAgICAgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4gaGVhZGVyRmllbGRzOwotICAgIFN0cmluZyBib2R5OworICAg
IFZlY3Rvcjx1aW50OF90PiBib2R5OwogICAgIFRlcm1pbmF0ZUNvbm5lY3Rpb24gdGVybWluYXRl
Q29ubmVjdGlvbiB7IFRlcm1pbmF0ZUNvbm5lY3Rpb246Ok5vIH07CiB9OwogCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0KaW5kZXggMTA3NDRhNWM0NDNmNWIzOWZlZjM2Yzgz
OGU4MDU4NjRmYWZlYjE2Mi4uMDEzNjY1ZWRkOGYxZDVlYTcyZjgzNDdmNDgxNTFjZWZjYTEyMmIz
NSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQpAQCAtMzgsOCArMzgs
OCBAQCBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKIHN0cnVjdCBIVFRQU2VydmVyOjpSZXF1
ZXN0RGF0YSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxSZXF1ZXN0RGF0YSwgV1RGOjpE
ZXN0cnVjdGlvblRocmVhZDo6TWFpblJ1bkxvb3A+IHsKICAgICBSZXF1ZXN0RGF0YShzdGQ6Omlu
aXRpYWxpemVyX2xpc3Q8c3RkOjpwYWlyPFN0cmluZywgSFRUUFJlc3BvbnNlPj4gcmVzcG9uc2Vz
KQotICAgIDogcmVxdWVzdE1hcChbXShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpwYWlyPFN0
cmluZywgSFRUUFNlcnZlcjo6SFRUUFJlc3BvbnNlPj4gbGlzdCkgewotICAgICAgICBIYXNoTWFw
PFN0cmluZywgSFRUUFNlcnZlcjo6SFRUUFJlc3BvbnNlPiBtYXA7CisgICAgOiByZXF1ZXN0TWFw
KFtdKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8U3RyaW5nLCBIVFRQUmVzcG9uc2U+
PiBsaXN0KSB7CisgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBIVFRQUmVzcG9uc2U+IG1hcDsKICAg
ICAgICAgZm9yIChhdXRvJiBwYWlyIDogbGlzdCkKICAgICAgICAgICAgIG1hcC5hZGQocGFpci5m
aXJzdCwgcGFpci5zZWNvbmQpOwogICAgICAgICByZXR1cm4gbWFwOwpAQCAtMjEyLDYgKzIxMiwz
MSBAQCBzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IHZlY3RvckZyb21EYXRhKGRpc3BhdGNoX2RhdGFf
dCBjb250ZW50KQogICAgIHJldHVybiByZXF1ZXN0OwogfQogCitzdGF0aWMgdm9pZCBhcHBlbmRV
VEY4VG9WZWN0b3IoVmVjdG9yPHVpbnQ4X3Q+JiB2ZWN0b3IsIGNvbnN0IFN0cmluZyYgc3RyaW5n
KQoreworICAgIGF1dG8gdXRmOCA9IHN0cmluZy51dGY4KCk7CisgICAgdmVjdG9yLmFwcGVuZChy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih1dGY4LmRhdGEoKSksIHV0ZjgubGVuZ3Ro
KCkpOworfQorCitTdHJpbmcgSFRUUFNlcnZlcjo6cGFyc2VQYXRoKGNvbnN0IFZlY3RvcjxjaGFy
PiYgcmVxdWVzdCkKK3sKKyAgICBpZiAoIXJlcXVlc3Quc2l6ZSgpKQorICAgICAgICByZXR1cm4g
eyB9OworICAgIGNvbnN0IGNoYXIqIGdldFBhdGhQcmVmaXggPSAiR0VUICI7CisgICAgY29uc3Qg
Y2hhciogcG9zdFBhdGhQcmVmaXggPSAiUE9TVCAiOworICAgIGNvbnN0IGNoYXIqIHBhdGhTdWZm
aXggPSAiIEhUVFAvMS4xXHJcbiI7CisgICAgY29uc3QgY2hhciogcGF0aEVuZCA9IHN0cm5zdHIo
cmVxdWVzdC5kYXRhKCksIHBhdGhTdWZmaXgsIHJlcXVlc3Quc2l6ZSgpKTsKKyAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKHBhdGhFbmQsICJIVFRQU2VydmVyIGFzc3VtZXMgcmVxdWVzdCBpcyBIVFRQ
IDEuMSIpOworICAgIHNpemVfdCBwYXRoUHJlZml4TGVuZ3RoID0gMDsKKyAgICBpZiAoIW1lbWNt
cChyZXF1ZXN0LmRhdGEoKSwgZ2V0UGF0aFByZWZpeCwgc3RybGVuKGdldFBhdGhQcmVmaXgpKSkK
KyAgICAgICAgcGF0aFByZWZpeExlbmd0aCA9IHN0cmxlbihnZXRQYXRoUHJlZml4KTsKKyAgICBl
bHNlIGlmICghbWVtY21wKHJlcXVlc3QuZGF0YSgpLCBwb3N0UGF0aFByZWZpeCwgc3RybGVuKHBv
c3RQYXRoUHJlZml4KSkpCisgICAgICAgIHBhdGhQcmVmaXhMZW5ndGggPSBzdHJsZW4ocG9zdFBh
dGhQcmVmaXgpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocGF0aFByZWZpeExlbmd0aCwgIkhU
VFBTZXJ2ZXIgYXNzdW1lcyByZXF1ZXN0IGlzIEdFVCBvciBQT1NUIik7CisgICAgc2l6ZV90IHBh
dGhMZW5ndGggPSBwYXRoRW5kIC0gcmVxdWVzdC5kYXRhKCkgLSBwYXRoUHJlZml4TGVuZ3RoOwor
ICAgIHJldHVybiBTdHJpbmcocmVxdWVzdC5kYXRhKCkgKyBwYXRoUHJlZml4TGVuZ3RoLCBwYXRo
TGVuZ3RoKTsKK30KKwogdm9pZCBIVFRQU2VydmVyOjpyZXNwb25kVG9SZXF1ZXN0cyhDb25uZWN0
aW9uIGNvbm5lY3Rpb24sIFJlZjxSZXF1ZXN0RGF0YT4gcmVxdWVzdERhdGEpCiB7CiAgICAgY29u
bmVjdGlvbi5yZWNlaXZlSFRUUFJlcXVlc3QoW2Nvbm5lY3Rpb24sIHJlcXVlc3REYXRhXSAoVmVj
dG9yPGNoYXI+JiYgcmVxdWVzdCkgbXV0YWJsZSB7CkBAIC0yMTksMzIgKzI0NCwxNCBAQCB2b2lk
IEhUVFBTZXJ2ZXI6OnJlc3BvbmRUb1JlcXVlc3RzKENvbm5lY3Rpb24gY29ubmVjdGlvbiwgUmVm
PFJlcXVlc3REYXRhPiByZXF1ZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICByZXF1ZXN0
RGF0YS0+cmVxdWVzdENvdW50Kys7CiAKLSAgICAgICAgY29uc3QgY2hhciogZ2V0UGF0aFByZWZp
eCA9ICJHRVQgIjsKLSAgICAgICAgY29uc3QgY2hhciogcG9zdFBhdGhQcmVmaXggPSAiUE9TVCAi
OwotICAgICAgICBjb25zdCBjaGFyKiBwYXRoU3VmZml4ID0gIiBIVFRQLzEuMVxyXG4iOwotICAg
ICAgICBjb25zdCBjaGFyKiBwYXRoRW5kID0gc3RybnN0cihyZXF1ZXN0LmRhdGEoKSwgcGF0aFN1
ZmZpeCwgcmVxdWVzdC5zaXplKCkpOwotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHBhdGhF
bmQsICJIVFRQU2VydmVyIGFzc3VtZXMgcmVxdWVzdCBpcyBIVFRQIDEuMSIpOwotICAgICAgICBz
aXplX3QgcGF0aFByZWZpeExlbmd0aCA9IDA7Ci0gICAgICAgIGlmICghbWVtY21wKHJlcXVlc3Qu
ZGF0YSgpLCBnZXRQYXRoUHJlZml4LCBzdHJsZW4oZ2V0UGF0aFByZWZpeCkpKQotICAgICAgICAg
ICAgcGF0aFByZWZpeExlbmd0aCA9IHN0cmxlbihnZXRQYXRoUHJlZml4KTsKLSAgICAgICAgZWxz
ZSBpZiAoIW1lbWNtcChyZXF1ZXN0LmRhdGEoKSwgcG9zdFBhdGhQcmVmaXgsIHN0cmxlbihwb3N0
UGF0aFByZWZpeCkpKQotICAgICAgICAgICAgcGF0aFByZWZpeExlbmd0aCA9IHN0cmxlbihwb3N0
UGF0aFByZWZpeCk7Ci0gICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocGF0aFByZWZpeExlbmd0
aCwgIkhUVFBTZXJ2ZXIgYXNzdW1lcyByZXF1ZXN0IGlzIEdFVCBvciBQT1NUIik7Ci0gICAgICAg
IHNpemVfdCBwYXRoTGVuZ3RoID0gcGF0aEVuZCAtIHJlcXVlc3QuZGF0YSgpIC0gcGF0aFByZWZp
eExlbmd0aDsKLSAgICAgICAgU3RyaW5nIHBhdGgocmVxdWVzdC5kYXRhKCkgKyBwYXRoUHJlZml4
TGVuZ3RoLCBwYXRoTGVuZ3RoKTsKKyAgICAgICAgYXV0byBwYXRoID0gcGFyc2VQYXRoKHJlcXVl
c3QpOwogICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHJlcXVlc3REYXRhLT5yZXF1ZXN0TWFw
LmNvbnRhaW5zKHBhdGgpLCAiVGhpcyBIVFRQU2VydmVyIGRvZXMgbm90IGtub3cgaG93IHRvIHJl
c3BvbmQgdG8gYSByZXF1ZXN0IGZvciAlcyIsIHBhdGgudXRmOCgpLmRhdGEoKSk7CiAKICAgICAg
ICAgYXV0byByZXNwb25zZSA9IHJlcXVlc3REYXRhLT5yZXF1ZXN0TWFwLmdldChwYXRoKTsKICAg
ICAgICAgaWYgKHJlc3BvbnNlLnRlcm1pbmF0ZUNvbm5lY3Rpb24gPT0gSFRUUFJlc3BvbnNlOjpU
ZXJtaW5hdGVDb25uZWN0aW9uOjpZZXMpCiAgICAgICAgICAgICByZXR1cm4gY29ubmVjdGlvbi50
ZXJtaW5hdGUoKTsKLSAgICAgICAgU3RyaW5nQnVpbGRlciByZXNwb25zZUJ1aWxkZXI7Ci0gICAg
ICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQoIkhUVFAvMS4xICIsIHJlc3BvbnNlLnN0YXR1c0Nv
ZGUsICcgJywgc3RhdHVzVGV4dChyZXNwb25zZS5zdGF0dXNDb2RlKSwgIlxyXG4iKTsKLSAgICAg
ICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZCgiQ29udGVudC1MZW5ndGg6ICIsIHJlc3BvbnNlLmJv
ZHkubGVuZ3RoKCksICJcclxuIik7Ci0gICAgICAgIGZvciAoYXV0byYgcGFpciA6IHJlc3BvbnNl
LmhlYWRlckZpZWxkcykKLSAgICAgICAgICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQocGFpci5r
ZXksICI6ICIsIHBhaXIudmFsdWUsICJcclxuIik7Ci0gICAgICAgIHJlc3BvbnNlQnVpbGRlci5h
cHBlbmQoIlxyXG4iKTsKLSAgICAgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZChyZXNwb25zZS5i
b2R5KTsKLSAgICAgICAgY29ubmVjdGlvbi5zZW5kKHJlc3BvbnNlQnVpbGRlci50b1N0cmluZygp
LCBbY29ubmVjdGlvbiwgcmVxdWVzdERhdGFdIHsKKworICAgICAgICBjb25uZWN0aW9uLnNlbmQo
cmVzcG9uc2Uuc2VyaWFsaXplKCksIFtjb25uZWN0aW9uLCByZXF1ZXN0RGF0YV0gewogICAgICAg
ICAgICAgcmVzcG9uZFRvUmVxdWVzdHMoY29ubmVjdGlvbiwgcmVxdWVzdERhdGEpOwogICAgICAg
ICB9KTsKICAgICB9KTsKQEAgLTMzNCw2ICszNDEsMjkgQEAgdm9pZCBDb25uZWN0aW9uOjpjYW5j
ZWwoKQogICAgIG1fY29ubmVjdGlvbiA9IG51bGxwdHI7CiB9CiAKK1ZlY3Rvcjx1aW50OF90PiBI
VFRQUmVzcG9uc2U6OmJvZHlGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAg
IFZlY3Rvcjx1aW50OF90PiB2ZWN0b3I7CisgICAgYXBwZW5kVVRGOFRvVmVjdG9yKHZlY3Rvciwg
c3RyaW5nKTsKKyAgICByZXR1cm4gdmVjdG9yOworfQorCitWZWN0b3I8dWludDhfdD4gSFRUUFJl
c3BvbnNlOjpzZXJpYWxpemUoSW5jbHVkZUNvbnRlbnRMZW5ndGggaW5jbHVkZUNvbnRlbnRMZW5n
dGgpCit7CisgICAgU3RyaW5nQnVpbGRlciByZXNwb25zZUJ1aWxkZXI7CisgICAgcmVzcG9uc2VC
dWlsZGVyLmFwcGVuZCgiSFRUUC8xLjEgIiwgc3RhdHVzQ29kZSwgJyAnLCBzdGF0dXNUZXh0KHN0
YXR1c0NvZGUpLCAiXHJcbiIpOworICAgIGlmIChpbmNsdWRlQ29udGVudExlbmd0aCA9PSBJbmNs
dWRlQ29udGVudExlbmd0aDo6WWVzKQorICAgICAgICByZXNwb25zZUJ1aWxkZXIuYXBwZW5kKCJD
b250ZW50LUxlbmd0aDogIiwgYm9keS5zaXplKCksICJcclxuIik7CisgICAgZm9yIChhdXRvJiBw
YWlyIDogaGVhZGVyRmllbGRzKQorICAgICAgICByZXNwb25zZUJ1aWxkZXIuYXBwZW5kKHBhaXIu
a2V5LCAiOiAiLCBwYWlyLnZhbHVlLCAiXHJcbiIpOworICAgIHJlc3BvbnNlQnVpbGRlci5hcHBl
bmQoIlxyXG4iKTsKKyAgICAKKyAgICBWZWN0b3I8dWludDhfdD4gYnl0ZXNUb1NlbmQ7CisgICAg
YXBwZW5kVVRGOFRvVmVjdG9yKGJ5dGVzVG9TZW5kLCByZXNwb25zZUJ1aWxkZXIudG9TdHJpbmco
KSk7CisgICAgYnl0ZXNUb1NlbmQuYXBwZW5kVmVjdG9yKGJvZHkpOworICAgIHJldHVybiBieXRl
c1RvU2VuZDsKK30KKwogdm9pZCBIMjo6Q29ubmVjdGlvbjo6c2VuZChGcmFtZSYmIGZyYW1lLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7CiAg
ICAgYXV0byBmcmFtZVR5cGUgPSBmcmFtZS50eXBlKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420406</attachid>
            <date>2021-02-15 17:43:48 -0800</date>
            <delta_ts>2021-02-15 20:53:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221072-20210215174347.patch</filename>
            <type>text/plain</type>
            <size>73946</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyODU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTIxY2IyNTJiMTJjMTA4
M2Q1YzEyMjYzZTk5YWU2ZTMwOThkNzljMC4uZWE4MmViMGExMjYyNDhmNDJiYzZhYjZhNGUyMzkx
ZTgyY2ViNzY3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIxLTAyLTE1ICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3ludGhl
c2l6ZSByYW5nZSByZXNwb25zZXMgaWYgbmVlZGVkIGluIFdlYkNvcmVOU1VSTFNlc3Npb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTA3MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmIEdhcmVuLgorCisgICAgICAgIFdoZW4gd2UgbWFrZSBh
IG1lZGlhIHJlcXVlc3Qgd2l0aCBhIFJhbmdlIEhUVFAgaGVhZGVyIGZpZWxkIGFuZCB0aGUgc2Vy
dmVyIGRvZXNuJ3QgcmVzcG9uZCB3aXRoIGEgMjA2IHdpdGggQ29udGVudC1SYW5nZSBoZWFkZXIg
ZmllbGQsCisgICAgICAgIHVudGlsIG5vdyB3ZSB3b3VsZCBqdXN0IGZhaWwgdG8gcGxheSB0aGUg
dmlkZW8uICBJbiBvcmRlciB0byBzdWNjZXNzZnVsbHkgcGxheSB0aGVzZSB2aWRlb3MsIEkgaW50
cm9kdWNlIHRoZSBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yIGNsYXNzLAorICAgICAgICB3aGljaCB3
aWxsIHJlY2VpdmUgdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBmb3Igc3VjaCBhIHZpZGVvIGFuZCBm
ZWVkIHRoZSBkYXRhIGludG8gV2ViQ29yZU5TVVJMU2Vzc2lvbiBhcyB0aGUgcmVxdWVzdGVkIHJh
bmdlcyBhcmUgcmVjZWl2ZWQuCisgICAgICAgIFNlZWtpbmcgaXMgcHJvYmxlbWF0aWMsIGJ1dCBh
dCBsZWFzdCB3ZSB3aWxsIHRyeSBvdXIgYmVzdCB0byBwbGF5IHRoZSB2aWRlby4KKworICAgICAg
ICBJIGFkZGVkIEFQSSB0ZXN0cyB0aGF0IHRyeSB0byBwbGF5IGEgdmlkZW8gdGhhdCBkaWRuJ3Qg
cGxheSBiZWZvcmUgdXNpbmcgYSBzZXJ2ZXIgdGhhdCBkb2Vzbid0IHN1cHBvcnQgcmFuZ2UgcmVx
dWVzdHMuICBNYW51YWwgdmVyaWZpY2F0aW9uIGlzIGFsc28gbmVjZXNzYXJ5LgorCisgICAgICAg
ICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybU1lZGlhUmVzb3VyY2U6OnNldENsaWVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvV2ViQ29yZUFWRlJlc291cmNlTG9hZGVyLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1SZXNvdXJjZU1lZGlhTG9hZGVyOjpjcmVhdGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUGFyc2VkUmVxdWVzdFJhbmdlLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpQYXJzZWRSZXF1ZXN0UmFuZ2U6OnBhcnNlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL1BhcnNlZFJlcXVlc3RSYW5nZS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlBhcnNlZFJlcXVlc3RSYW5nZTo6YmVnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UGFyc2VkUmVxdWVzdFJhbmdlOjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGFy
c2VkUmVxdWVzdFJhbmdlOjpQYXJzZWRSZXF1ZXN0UmFuZ2UpOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvY29jb2EvUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1JhbmdlUmVzcG9uc2VHZW5lcmF0b3IubW06IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6RGF0YTo6RGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpEYXRhOjpUYXNrRGF0
YTo6VGFza0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6c3ludGhlc2l6ZWRSZXNwb25zZUZvclJh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlUmVzcG9uc2VHZW5lcmF0b3I6OnJlbW92ZVRh
c2spOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VSZXNwb25zZUdlbmVyYXRvcjo6Z2l2ZVJlc3Bv
bnNlVG9UYXNrSWZCeXRlc0luUmFuZ2VSZWNlaXZlZCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5n
ZVJlc3BvbnNlR2VuZXJhdG9yOjpleHBlY3RlZENvbnRlbnRMZW5ndGhGcm9tRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpnaXZlUmVzcG9uc2VUb1Rhc2tz
V2l0aEZpbmlzaGVkUmFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlUmVzcG9uc2VHZW5l
cmF0b3I6OndpbGxIYW5kbGVSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlUmVzcG9u
c2VHZW5lcmF0b3I6OndpbGxTeW50aGVzaXplUmFuZ2VSZXNwb25zZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5oOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5tbToKKyAgICAgICAgKC1b
V2ViQ29yZU5TVVJMU2Vzc2lvbiByYW5nZVJlc3BvbnNlR2VuZXJhdG9yXSk6CisgICAgICAgICgt
W1dlYkNvcmVOU1VSTFNlc3Npb24gZGF0YVRhc2tXaXRoVVJMOl0pOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjpkYXRhU2VudCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OnJlc3BvbnNlUmVj
ZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xp
ZW50OjpzaG91bGRDYWNoZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVOU1VS
TFNlc3Npb25EYXRhVGFza0NsaWVudDo6ZGF0YVJlY2VpdmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6cmVkaXJlY3RSZWNlaXZlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmFjY2Vz
c0NvbnRyb2xDaGVja0ZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlTlNVUkxTZXNz
aW9uRGF0YVRhc2tDbGllbnQ6OmxvYWRGYWlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29y
ZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQpOgorICAgICAgICAoLVtX
ZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgX3Jlc3RhcnRdKToKKyAgICAgICAgKC1bV2ViQ29y
ZU5TVVJMU2Vzc2lvbkRhdGFUYXNrIF9maW5pc2hdKToKKyAgICAgICAgKC1bV2ViQ29yZU5TVVJM
U2Vzc2lvbkRhdGFUYXNrIHJlc291cmNlOnNlbnRCeXRlczp0b3RhbEJ5dGVzVG9CZVNlbnQ6XSk6
CisgICAgICAgICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayByZXNvdXJjZTpyZWNlaXZl
ZFJlc3BvbnNlOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxT
ZXNzaW9uRGF0YVRhc2sgcmVzb3VyY2U6c2hvdWxkQ2FjaGVSZXNwb25zZTpdKToKKyAgICAgICAg
KC1bV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrIHJlc291cmNlOnJlY2VpdmVkRGF0YTpsZW5n
dGg6XSk6CisgICAgICAgICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayByZXNvdXJjZTpy
ZWNlaXZlZFJlZGlyZWN0OnJlcXVlc3Q6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgt
W1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayBfcmVzb3VyY2U6bG9hZEZpbmlzaGVkV2l0aEVy
cm9yOm1ldHJpY3M6XSk6CisgICAgICAgICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayBy
ZXNvdXJjZTphY2Nlc3NDb250cm9sQ2hlY2tGYWlsZWRXaXRoRXJyb3I6XSk6CisgICAgICAgICgt
W1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayByZXNvdXJjZTpsb2FkRmFpbGVkV2l0aEVycm9y
Ol0pOgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgcmVzb3VyY2VGaW5p
c2hlZDptZXRyaWNzOl0pOgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sg
aW5pdFdpdGhTZXNzaW9uOmlkZW50aWZpZXI6VVJMOl0pOiBEZWxldGVkLgorCiAyMDIxLTAyLTE1
ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSUZDXSBE
byBub3QgcmUtbWVhc3VyZSB3cmFwcGVkIGNvbnRlbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYTE0ZTIyY2EwNWE5
ZDZlN2YwOGY3YmExNDE1YjIyMWE1NTE4YjgzMi4uOGY1MDYwNmQ2MzllODFiYTNhNDdjZDMxZGEw
MzExNTkyZDM3MDAyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMS0wMi0xNSAgQWxl
eCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFN5bnRo
ZXNpemUgcmFuZ2UgcmVzcG9uc2VzIGlmIG5lZWRlZCBpbiBXZWJDb3JlTlNVUkxTZXNzaW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjEwNzIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6Ok1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZTo6cmVxdWVzdFJlc291cmNlKToKKwogMjAyMS0w
Mi0xNSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgU2hhcmUg
bW9yZSBjb2RlIGJldHdlZW4gUmVtb3RlUmVhbHRpbWVBdWRpb1NvdXJjZSBhbmQgUmVtb3RlUmVh
bHRpbWVWaWRlb1NvdXJjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFr
ZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggZjg4NTkxNWZlOGJlNzllNTEy
NThmZmY4ZDgzMTgyYzk1ZDdkMzJjYi4uNGYzOGZiMDY4NGJjNTllZTZmN2M5ODk4MjllYzg4MmNl
ODA1ODZjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9T
b3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xNDEyLDYgKzE0MTIsNyBAQCBzZXQoV2Vi
Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3
b3JraW5nQ29udGV4dC5oCiAgICAgcGxhdGZvcm0vbmV0d29yay9QYXJzZWRDb250ZW50UmFuZ2Uu
aAogICAgIHBsYXRmb3JtL25ldHdvcmsvUGFyc2VkQ29udGVudFR5cGUuaAorICAgIHBsYXRmb3Jt
L25ldHdvcmsvUGFyc2VkUmVxdWVzdFJhbmdlLmgKICAgICBwbGF0Zm9ybS9uZXR3b3JrL1Byb3Rl
Y3Rpb25TcGFjZS5oCiAgICAgcGxhdGZvcm0vbmV0d29yay9Qcm90ZWN0aW9uU3BhY2VCYXNlLmgK
ICAgICBwbGF0Zm9ybS9uZXR3b3JrL1Byb3RlY3Rpb25TcGFjZUhhc2guaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApp
bmRleCAwNDVjZjI3MDZjMDM2N2U0Y2Y5MGIzMmRkZDc5MTQ2ZDVmYTExZGZmLi44YzAzYjkzMjY0
OTg1ZjBiYjFlZTlmNmQyMDIzZTM0ODMwOTJmNDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjEyMiw2
ICsyMTIyLDcgQEAgcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RhdGVOb3RpZmllci5jcHAKIHBs
YXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmNwcAogcGxhdGZvcm0vbmV0d29y
ay9QYXJzZWRDb250ZW50UmFuZ2UuY3BwCiBwbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZENvbnRlbnRU
eXBlLmNwcAorcGxhdGZvcm0vbmV0d29yay9QYXJzZWRSZXF1ZXN0UmFuZ2UuY3BwCiBwbGF0Zm9y
bS9uZXR3b3JrL1Byb3RlY3Rpb25TcGFjZUJhc2UuY3BwCiBwbGF0Zm9ybS9uZXR3b3JrL1Byb3h5
U2VydmVyLmNwcAogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUVycm9yQmFzZS5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzQ29jb2EudHh0CmluZGV4IDc5N2Y1MzFjODVmNjYyN2U0MzU1YzU0ZGI1YjljYzdmNTgz
YzE5ZWMuLjg5ZDMwZmNmZjcyYWE1NTY2MzIxNWIwYzgxZDc0ZjJmZGMzMWY5ZmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
U291cmNlc0NvY29hLnR4dApAQCAtNTcxLDYgKzU3MSw3IEBAIHBsYXRmb3JtL25ldHdvcmsvY29j
b2EvQ3JlZGVudGlhbENvY29hLm1tCiBwbGF0Zm9ybS9uZXR3b3JrL2NvY29hL05ldHdvcmtMb2Fk
TWV0cmljcy5tbQogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25D
b2NvYS5tbQogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9Qcm90ZWN0aW9uU3BhY2VDb2NvYS5tbQor
cGxhdGZvcm0vbmV0d29yay9jb2NvYS9SYW5nZVJlc3BvbnNlR2VuZXJhdG9yLm1tCiBwbGF0Zm9y
bS9uZXR3b3JrL2NvY29hL1Jlc291cmNlUmVxdWVzdENvY29hLm1tCiBwbGF0Zm9ybS9uZXR3b3Jr
L2NvY29hL1Jlc291cmNlUmVzcG9uc2VDb2NvYS5tbSBAbm8tdW5pZnkgLy8gVW5zYWZlIHRvIHVu
aWZ5IHVudGlsIHJkYXI6Ly9wcm9ibGVtLzQ4ODUzMTM3IGlzIHJlc29sdmVkCiBwbGF0Zm9ybS9u
ZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24ubW0gQG5vLXVuaWZ5CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGMxNWVi
NjQ4MDM3MzA1ODA3YjcwM2QwYmRiYWIzZjNiZmE1NzE1Yi4uMmUzYmEyZDhiYmFhMTc2MjQ0ZGE2
MjNjNjkyOTZlNWZlYmYwNzMwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTk0NCw2ICsxOTQ0LDggQEAKIAkJNUMyQjFBRUMy
MjM5N0VCQzAwQjkxQ0Y3IC8qIFJlc291cmNlUmVzcG9uc2VDb2NvYS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExRjc4RDBCMUMyNTQyMkMwMDI0NTQ0
NiAvKiBSZXNvdXJjZVJlc3BvbnNlQ29jb2EubW0gKi87IH07CiAJCTVDNDMwNEIxMTkxQUM5MDgw
MDBFMkJDMCAvKiBFWFRTaGFkZXJUZXh0dXJlTE9ELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzQzMDRBRTE5MUFDOTA4MDAwRTJCQzAgLyogRVhUU2hh
ZGVyVGV4dHVyZUxPRC5oICovOyB9OwogCQk1QzQzMDRCNjE5MUFFRjQ2MDAwRTJCQzAgLyogSlNF
WFRTaGFkZXJUZXh0dXJlTE9ELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1QzQzMDRCNDE5MUFFRjQ2MDAwRTJCQzAgLyogSlNFWFRTaGFkZXJUZXh0dXJl
TE9ELmggKi87IH07CisJCTVDNEEwRkQ3MjVDMzQzNTAwMEQ5RUU5NyAvKiBSYW5nZVJlc3BvbnNl
R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1QzRBMEZENTI1QzM0MkM4MDBEOUVFOTcgLyogUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTVDNEEwRkRB
MjVDMzQ0OUEwMEQ5RUU5NyAvKiBQYXJzZWRSZXF1ZXN0UmFuZ2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNEEwRkQ4MjVDMzQ0NkMwMEQ5RUU5NyAv
KiBQYXJzZWRSZXF1ZXN0UmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1QzUzRENFMTI0NDY1REZDMDBBOTMxMjQgLyogQXBwbGVQYXlTZXR1
cEZlYXR1cmVXZWJDb3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1QzUzRENDRjI0NDY0NDk5MDBBOTMxMjQgLyogQXBwbGVQYXlTZXR1cEZlYXR1cmVX
ZWJDb3JlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNUM1M0RDRTcyNDQ2OEFEMjAwQTkzMTI0IC8qIFBheW1lbnRJbnN0YWxsbWVudENvbmZpZ3Vy
YXRpb25XZWJDb3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1QzUzRENDRTI0NDY0NDk5MDBBOTMxMjQgLyogUGF5bWVudEluc3RhbGxtZW50Q29uZmln
dXJhdGlvbldlYkNvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk1QzUzRENFQTI0NDY4RkI0MDBBOTMxMjQgLyogQXBwbGVQYXlTZXR1cFdlYkNv
cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNTNE
Q0NCMjQ0NjQ0OTgwMEE5MzEyNCAvKiBBcHBsZVBheVNldHVwV2ViQ29yZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05NDk4LDYgKzk1MDAsMTEg
QEAKIAkJNUM0MzA0QUYxOTFBQzkwODAwMEUyQkMwIC8qIEVYVFNoYWRlclRleHR1cmVMT0QuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVFNoYWRlclRleHR1cmVMT0QuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1QzQzMDRCMzE5MUFFRjQ2MDAwRTJCQzAgLyogSlNFWFRT
aGFkZXJUZXh0dXJlTE9ELmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTVDNDMwNEI0MTkxQUVGNDYwMDBFMkJDMCAvKiBKU0VYVFNoYWRlclRleHR1cmVMT0QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEEwRkQzMjVDMzQyQzcwMEQ5RUU5NyAvKiBS
YW5nZVJlc3BvbnNlR2VuZXJhdG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNUM0QTBGRDUyNUMzNDJDODAwRDlFRTk3IC8qIFJhbmdlUmVzcG9uc2VHZW5lcmF0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmFuZ2VSZXNwb25zZUdlbmVy
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzRBMEZENjI1QzM0MkRCMDBE
OUVFOTcgLyogQ2VydGlmaWNhdGVJbmZvQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBDZXJ0aWZpY2F0ZUluZm9Db2NvYS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNUM0QTBGRDgyNUMzNDQ2QzAwRDlFRTk3IC8qIFBhcnNlZFJlcXVlc3RS
YW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZWRSZXF1ZXN0UmFu
Z2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QTBGRDkyNUMzNDQ2RDAwRDlF
RTk3IC8qIFBhcnNlZFJlcXVlc3RSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQYXJzZWRSZXF1ZXN0UmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1QzUzODFBRjFEODc5M0UwMDBFMkVCRTYgLyogVVJMU2VhcmNoUGFyYW1zLmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBVUkxTZWFyY2hQYXJhbXMuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1QzUzODFCMDFEODdENDU3MDBFMkVCRTYgLyogVVJMU2VhcmNoUGFy
YW1zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTFNlYXJjaFBh
cmFtcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDNTM4MUIxMUQ4N0Q0NTcw
MEUyRUJFNiAvKiBVUkxTZWFyY2hQYXJhbXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVVJMU2VhcmNoUGFyYW1zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
MTg0Nyw2ICsyMTg1NCw4IEBACiAJCQkJQ0RDRDQxRTYxQzNEREIwOTAwOTY1RDk5IC8qIFBhcnNl
ZENvbnRlbnRSYW5nZS5oICovLAogCQkJCTQ0Nzk1ODAyMTY0M0I0N0IwMDFFMEE3RiAvKiBQYXJz
ZWRDb250ZW50VHlwZS5jcHAgKi8sCiAJCQkJNDQ3OTU4MDMxNjQzQjQ3QjAwMUUwQTdGIC8qIFBh
cnNlZENvbnRlbnRUeXBlLmggKi8sCisJCQkJNUM0QTBGRDkyNUMzNDQ2RDAwRDlFRTk3IC8qIFBh
cnNlZFJlcXVlc3RSYW5nZS5jcHAgKi8sCisJCQkJNUM0QTBGRDgyNUMzNDQ2QzAwRDlFRTk3IC8q
IFBhcnNlZFJlcXVlc3RSYW5nZS5oICovLAogCQkJCTM3QkFBRTU3MTk4MEQxREQwMDVERkU3MSAv
KiBQcm90ZWN0aW9uU3BhY2UuaCAqLywKIAkJCQk1MTRDNzY1RjBDRTkyM0ExMDA3RUYzQ0QgLyog
UHJvdGVjdGlvblNwYWNlQmFzZS5jcHAgKi8sCiAJCQkJNTE0Qzc2NjAwQ0U5MjNBMTAwN0VGM0NE
IC8qIFByb3RlY3Rpb25TcGFjZUJhc2UuaCAqLywKQEAgLTIyOTMwLDYgKzIyOTM5LDcgQEAKIAkJ
N0U3REUxRkUxOTVDRUYyRDAwMzUzNjNCIC8qIGNvY29hICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1QzRBMEZENjI1QzM0MkRCMDBEOUVFOTcgLyogQ2Vy
dGlmaWNhdGVJbmZvQ29jb2EubW0gKi8sCiAJCQkJNTFEMTI0OEMxRTczNjQ1NjAwMkIyODIwIC8q
IENvb2tpZUNvY29hLm1tICovLAogCQkJCTUxMjBCQkFEMUYxQ0U3NzAwMEVGRUJGMSAvKiBDb29r
aWVTdG9yYWdlT2JzZXJ2ZXIuaCAqLywKIAkJCQk1MTIwQkJBQzFGMUNFNzcwMDBFRkVCRjEgLyog
Q29va2llU3RvcmFnZU9ic2VydmVyLm1tICovLApAQCAtMjI5NDAsNiArMjI5NTAsOCBAQAogCQkJ
CTUxRDEyNDhBMUU3MzYyNUMwMDJCMjgyMCAvKiBOZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5t
bSAqLywKIAkJCQkzNzJBREEzNzE5N0Y0N0I5MDBGQzUwMUUgLyogUHJvdGVjdGlvblNwYWNlQ29j
b2EuaCAqLywKIAkJCQkzNzJBREEzOTE5N0Y2ODc2MDBGQzUwMUUgLyogUHJvdGVjdGlvblNwYWNl
Q29jb2EubW0gKi8sCisJCQkJNUM0QTBGRDUyNUMzNDJDODAwRDlFRTk3IC8qIFJhbmdlUmVzcG9u
c2VHZW5lcmF0b3IuaCAqLywKKwkJCQk1QzRBMEZEMzI1QzM0MkM3MDBEOUVFOTcgLyogUmFuZ2VS
ZXNwb25zZUdlbmVyYXRvci5tbSAqLywKIAkJCQk3RTdERTFGQzE5NUNFRjI2MDAzNTM2M0IgLyog
UmVzb3VyY2VSZXF1ZXN0Q29jb2EubW0gKi8sCiAJCQkJQTFGNzhEMEIxQzI1NDIyQzAwMjQ1NDQ2
IC8qIFJlc291cmNlUmVzcG9uc2VDb2NvYS5tbSAqLywKIAkJCQlDRDIyNUMwQTFDNDZGQkY0MDAx
NDA3NjEgLyogV2ViQ29yZU5TVVJMU2Vzc2lvbi5oICovLApAQCAtMzQwMTMsNiArMzQwMjUsNyBA
QAogCQkJCUExODg5MEFGMUFBMTNGMjUwMDI2QzMwMSAvKiBQYXJlbnRhbENvbnRyb2xzQ29udGVu
dEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RDRDQxRTgxQzNEREIwQTAwOTY1RDk5IC8q
IFBhcnNlZENvbnRlbnRSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDQ3OTU4MDQxNjQzQjQ5
QTAwMUUwQTdGIC8qIFBhcnNlZENvbnRlbnRUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1QzRB
MEZEQTI1QzM0NDlBMDBEOUVFOTcgLyogUGFyc2VkUmVxdWVzdFJhbmdlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MzZENUEyMzE5M0U4RTBDMDBDRTRDQUIgLyogUGFyc2luZ1V0aWxpdGllcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQ0ExMjUxRjEyRDAwM0VGMjY5IC8qIFBhc3N3b3JkSW5w
dXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0QjI3MDhDNzBBRjE5RUU0MDA2NTEyN0YgLyog
UGFzdGVib2FyZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDIxNiw2ICszNDIyOSw3IEBACiAJCQkJ
OTNGMTk5MTgwODI0NUU1OTAwMUU5QUJDIC8qIFJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
M0Q5RDUzQzBEQTI3RTE4MDA3NzIxNkMgLyogUmFuZ2VCb3VuZGFyeVBvaW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGNTVCM0RDRTEyNTFGMTJEMDAzRUYyNjkgLyogUmFuZ2VJbnB1dFR5cGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTVDNEEwRkQ3MjVDMzQzNTAwMEQ5RUU5NyAvKiBSYW5nZVJlc3Bv
bnNlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTg0RTlFMTE3NjY4QkYxMDA4MTVC
NjggLyogUmFzdGVyU2hhcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NEQ4MjdDMTFEMzMzRUQw
MDk3Mjk5MCAvKiBSYXdEYXRhRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQx
NkU2RkU4MUJCRDEyREYwMDBBNjA0MyAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oCmluZGV4IDU3
YmZlOGFjZDYyODVmZWI5YjJlYjhiMjIyYTJiMTQwOWEyMTAxNjAuLjNlZDRlMDVjNDM5NGRmZjYz
YWU1ZmM2YmExZWYxYTgwNDI1NDNjYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oCkBA
IC00MSw3ICs0MSw3IEBAIGNsYXNzIFJlc291cmNlRXJyb3I7CiBjbGFzcyBSZXNvdXJjZVJlcXVl
c3Q7CiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogCi1jbGFzcyBQbGF0Zm9ybU1lZGlhUmVzb3Vy
Y2VDbGllbnQgeworY2xhc3MgUGxhdGZvcm1NZWRpYVJlc291cmNlQ2xpZW50IDogcHVibGljIFJl
ZkNvdW50ZWQ8UGxhdGZvcm1NZWRpYVJlc291cmNlQ2xpZW50PiB7CiBwdWJsaWM6CiAgICAgdmly
dHVhbCB+UGxhdGZvcm1NZWRpYVJlc291cmNlQ2xpZW50KCkgPSBkZWZhdWx0OwogCkBAIC04MSwx
MSArODEsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgeyB9CiAgICAgdmly
dHVhbCBib29sIGRpZFBhc3NBY2Nlc3NDb250cm9sQ2hlY2soKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogCi0gICAgdm9pZCBzZXRDbGllbnQoc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtTWVkaWFS
ZXNvdXJjZUNsaWVudD4mJiBjbGllbnQpIHsgbV9jbGllbnQgPSBXVEZNb3ZlKGNsaWVudCk7IH0K
KyAgICB2b2lkIHNldENsaWVudChSZWZQdHI8UGxhdGZvcm1NZWRpYVJlc291cmNlQ2xpZW50PiYm
IGNsaWVudCkgeyBtX2NsaWVudCA9IFdURk1vdmUoY2xpZW50KTsgfQogICAgIFBsYXRmb3JtTWVk
aWFSZXNvdXJjZUNsaWVudCogY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQuZ2V0KCk7IH0KIAog
cHJvdGVjdGVkOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybU1lZGlhUmVzb3VyY2VDbGll
bnQ+IG1fY2xpZW50OworICAgIFJlZlB0cjxQbGF0Zm9ybU1lZGlhUmVzb3VyY2VDbGllbnQ+IG1f
Y2xpZW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvV2ViQ29yZUFWRlJl
c291cmNlTG9hZGVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvV2ViQ29yZUFWRlJlc291cmNlTG9hZGVyLm1tCmluZGV4IGM4NTVkZTA4OGI2
ZDk0NGRhNmZjNDU1MjJmZmJiMmY1MDI4YzYyMWMuLjRkNWYzNTgwZWJhZDMwYmYwMGMzNjlkYTAx
NWYwMzhlNjBmZTViYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL1dlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9XZWJDb3Jl
QVZGUmVzb3VyY2VMb2FkZXIubW0KQEAgLTE3MCw3ICsxNzAsNyBAQCBXZWFrUHRyPFBsYXRmb3Jt
UmVzb3VyY2VNZWRpYUxvYWRlcj4gUGxhdGZvcm1SZXNvdXJjZU1lZGlhTG9hZGVyOjpjcmVhdGUo
V2ViQ29yZQogICAgIGlmICghcmVzb3VyY2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IGF1dG8qIHJlc291cmNlUG9pbnRlciA9IHJlc291cmNlLmdldCgpOwotICAgIGF1dG8gY2xpZW50
ID0gc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtUmVzb3VyY2VNZWRpYUxvYWRlcj4obmV3IFBsYXRm
b3JtUmVzb3VyY2VNZWRpYUxvYWRlciB7IHBhcmVudCwgcmVzb3VyY2UucmVsZWFzZU5vbk51bGwo
KSB9KTsKKyAgICBhdXRvIGNsaWVudCA9IGFkb3B0UmVmKCpuZXcgUGxhdGZvcm1SZXNvdXJjZU1l
ZGlhTG9hZGVyIHsgcGFyZW50LCByZXNvdXJjZS5yZWxlYXNlTm9uTnVsbCgpIH0pOwogICAgIGF1
dG8gcmVzdWx0ID0gbWFrZVdlYWtQdHIoY2xpZW50LmdldCgpKTsKIAogICAgIHJlc291cmNlUG9p
bnRlci0+c2V0Q2xpZW50KFdURk1vdmUoY2xpZW50KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRX
ZWJTb3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4IDU4YmE2MmQ3NDE2YzQ2Mzk4NDNkNTVmMjg4ZmI4
MzRlY2MxOWJkOTguLjBjYjdlNzJiNTAwMzUyNmFmZGI5MTE4N2U4Y2QxZDc1MWIyMzVmZGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJL
aXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC02OTksNyAr
Njk5LDcgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjTWFrZVJlcXVlc3QoV2ViS2l0V2ViU3Jj
KiBzcmMsIERhdGFNdXRleDxXZWJLaXRXZWJTcmNQcmkKICAgICAgICAgUGxhdGZvcm1NZWRpYVJl
c291cmNlTG9hZGVyOjpMb2FkT3B0aW9ucyBsb2FkT3B0aW9ucyA9IDA7CiAgICAgICAgIG1lbWJl
cnMtPnJlc291cmNlID0gbWVtYmVycy0+bG9hZGVyLT5yZXF1ZXN0UmVzb3VyY2UoUmVzb3VyY2VS
ZXF1ZXN0KHJlcXVlc3QpLCBsb2FkT3B0aW9ucyk7CiAgICAgICAgIGlmIChtZW1iZXJzLT5yZXNv
dXJjZSkgewotICAgICAgICAgICAgbWVtYmVycy0+cmVzb3VyY2UtPnNldENsaWVudChtYWtlVW5p
cXVlPENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Pihwcm90ZWN0b3IuZ2V0KCksIFJlc291
cmNlUmVxdWVzdChyZXF1ZXN0KSwgcmVxdWVzdE51bWJlcikpOworICAgICAgICAgICAgbWVtYmVy
cy0+cmVzb3VyY2UtPnNldENsaWVudChhZG9wdFJlZigqbmV3IENhY2hlZFJlc291cmNlU3RyZWFt
aW5nQ2xpZW50KHByb3RlY3Rvci5nZXQoKSwgUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpLCByZXF1
ZXN0TnVtYmVyKSkpOwogICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwcm90ZWN0b3IuZ2V0
KCksICJTdGFydGVkIHJlcXVlc3QgUiV1IiwgcmVxdWVzdE51bWJlcik7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHByb3RlY3Rvci5nZXQoKSwgIkZhaWxl
ZCB0byBzZXR1cCBzdHJlYW1pbmcgY2xpZW50IHRvIGhhbmRsZSBSJXUiLCByZXF1ZXN0TnVtYmVy
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGFyc2VkUmVx
dWVzdFJhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGFyc2VkUmVx
dWVzdFJhbmdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NDJmMTU3Y2Q5NDczMjg0NTg2YjhkMDM4NzlkZDll
NjFlMTQyYzMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9QYXJzZWRSZXF1ZXN0UmFuZ2UuY3BwCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBhcnNlZFJlcXVlc3RSYW5nZS5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworT3B0aW9uYWw8UGFyc2VkUmVxdWVz
dFJhbmdlPiBQYXJzZWRSZXF1ZXN0UmFuZ2U6OnBhcnNlKFN0cmluZ1ZpZXcgaW5wdXQpCit7Cisg
ICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzMjc2VjdGlvbi0yLjEgYnV0
IGFzc3VtaW5nIHRoZXJlIHdpbGwgYWx3YXlzIGJlIGEgYmVnaW4gYW5kIGFuIGVuZCBvciBwYXJz
aW5nIHdpbGwgZmFpbAorICAgIGlmICghaW5wdXQuc3RhcnRzV2l0aChTdHJpbmdWaWV3KCJieXRl
cz0iX3MpKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHNpemVfdCBiZWdp
biB7IDAgfTsKKyAgICBzaXplX3QgZW5kIHsgMCB9OworICAgIHNpemVfdCByYW5nZUJlZ2luUG9z
aXRpb24gPSA2OworICAgIHNpemVfdCBkYXNoUG9zaXRpb24gPSBpbnB1dC5maW5kKCctJywgcmFu
Z2VCZWdpblBvc2l0aW9uKTsKKyAgICBpZiAoZGFzaFBvc2l0aW9uID09IG5vdEZvdW5kKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgYXV0byBiZWdpblN0cmluZyA9IGlucHV0
LnN1YnN0cmluZyhyYW5nZUJlZ2luUG9zaXRpb24sIGRhc2hQb3NpdGlvbiAtIHJhbmdlQmVnaW5Q
b3NpdGlvbik7CisgICAgYXV0byBvcHRpb25hbEJlZ2luID0gYmVnaW5TdHJpbmcudG9VSW50NjRT
dHJpY3QoKTsKKyAgICBpZiAoIW9wdGlvbmFsQmVnaW4pCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgYmVnaW4gPSAqb3B0aW9uYWxCZWdpbjsKKworICAgIGF1dG8gZW5kU3RyaW5n
ID0gaW5wdXQuc3Vic3RyaW5nKGRhc2hQb3NpdGlvbiArIDEpOworICAgIGF1dG8gb3B0aW9uYWxF
bmQgPSBlbmRTdHJpbmcudG9VSW50NjRTdHJpY3QoKTsKKyAgICBpZiAoIW9wdGlvbmFsRW5kKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGVuZCA9ICpvcHRpb25hbEVuZDsKKwor
ICAgIGlmIChiZWdpbiA+IGVuZCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IHJldHVybiB7eyBiZWdpbiwgZW5kIH19OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1BhcnNlZFJlcXVlc3RSYW5nZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9QYXJzZWRSZXF1ZXN0UmFuZ2UuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMTVj
ZmMyZWQ4ZDYyMWI1NDhmYWZjMTAwOTM0NmQ1Zjk5YmMwZWZiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QYXJzZWRSZXF1ZXN0UmFuZ2UuaApAQCAt
MCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nVmlldy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBQYXJzZWRS
ZXF1ZXN0UmFuZ2UgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBPcHRpb25h
bDxQYXJzZWRSZXF1ZXN0UmFuZ2U+IHBhcnNlKFN0cmluZ1ZpZXcpOworICAgIHN0YXRpYyBPcHRp
b25hbDxQYXJzZWRSZXF1ZXN0UmFuZ2U+IHBhcnNlKGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7IHJl
dHVybiBwYXJzZShTdHJpbmdWaWV3KHN0cmluZykpOyB9CisKKyAgICBjb25zdCBzaXplX3QgYmVn
aW4geyAwIH07CisgICAgY29uc3Qgc2l6ZV90IGVuZCB7IDAgfTsKKworcHJpdmF0ZToKKyAgICBQ
YXJzZWRSZXF1ZXN0UmFuZ2Uoc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5kKQorICAgICAgICA6IGJl
Z2luKGJlZ2luKQorICAgICAgICAsIGVuZChlbmQpIHsgfQorfTsKKworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9SYW5nZVJlc3BvbnNlR2VuZXJh
dG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1JhbmdlUmVzcG9u
c2VHZW5lcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYmZmYzc5MTAwZTJhZTc3ZjFmN2NmZmZkN2FjOWNj
YzM0NGQxMjg2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jb2NvYS9SYW5nZVJlc3BvbnNlR2VuZXJhdG9yLmgKQEAgLTAsMCArMSw1OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1VSTEhhc2guaD4KKyNpbmNs
dWRlIDx3dGYvV2Vha1B0ci5oPgorCitPQkpDX0NMQVNTIE5TVVJMUmVxdWVzdDsKK09CSkNfQ0xB
U1MgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0cnVjdCBQYXJzZWRSZXF1ZXN0UmFuZ2U7CitjbGFzcyBQbGF0Zm9ybU1lZGlhUmVzb3VyY2U7
CitjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworCitjbGFzcyBSYW5nZVJlc3BvbnNlR2VuZXJhdG9y
IDogcHVibGljIENhbk1ha2VXZWFrUHRyPFJhbmdlUmVzcG9uc2VHZW5lcmF0b3I+IHsKK3B1Ymxp
YzoKKyAgICBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yKCk7CisgICAgflJhbmdlUmVzcG9uc2VHZW5l
cmF0b3IoKTsKKworICAgIGJvb2wgd2lsbFN5bnRoZXNpemVSYW5nZVJlc3BvbnNlcyhXZWJDb3Jl
TlNVUkxTZXNzaW9uRGF0YVRhc2sgKiwgUGxhdGZvcm1NZWRpYVJlc291cmNlJiwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpOworICAgIGJvb2wgd2lsbEhhbmRsZVJlcXVlc3QoV2ViQ29yZU5TVVJM
U2Vzc2lvbkRhdGFUYXNrICosIE5TVVJMUmVxdWVzdCAqKTsKKworcHJpdmF0ZToKKyAgICBzdHJ1
Y3QgRGF0YTsKKyAgICBjbGFzcyBNZWRpYVJlc291cmNlQ2xpZW50OworICAgIHZvaWQgZ2l2ZVJl
c3BvbnNlVG9UYXNrc1dpdGhGaW5pc2hlZFJhbmdlcyhEYXRhJik7CisgICAgdm9pZCBnaXZlUmVz
cG9uc2VUb1Rhc2tJZkJ5dGVzSW5SYW5nZVJlY2VpdmVkKFdlYkNvcmVOU1VSTFNlc3Npb25EYXRh
VGFzayAqLCBjb25zdCBQYXJzZWRSZXF1ZXN0UmFuZ2UmLCBPcHRpb25hbDxzaXplX3Q+IGV4cGVj
dGVkQ29udGVudExlbmd0aCwgY29uc3QgRGF0YSYpOworICAgIHN0YXRpYyBPcHRpb25hbDxzaXpl
X3Q+IGV4cGVjdGVkQ29udGVudExlbmd0aEZyb21EYXRhKGNvbnN0IERhdGEmKTsKKyAgICB2b2lk
IHJlbW92ZVRhc2soV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICopOworCisgICAgSGFzaE1h
cDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxEYXRhPj4gbV9tYXA7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NvY29hL1JhbmdlUmVzcG9uc2VHZW5lcmF0b3IubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NvY29hL1JhbmdlUmVzcG9uc2VHZW5lcmF0b3IubW0KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGRj
MDgwZGVkOWJkMDFkMDdmYWNiOGY0MjY4ODY2MmRlNjk5ODQxZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvUmFuZ2VSZXNwb25zZUdlbmVy
YXRvci5tbQpAQCAtMCwwICsxLDI5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiUmFuZ2VSZXNwb25zZUdlbmVyYXRvci5oIgorCisjaW1wb3J0ICJOZXR3b3Jr
TG9hZE1ldHJpY3MuaCIKKyNpbXBvcnQgIlBhcnNlZFJlcXVlc3RSYW5nZS5oIgorI2ltcG9ydCAi
UGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmgiCisjaW1wb3J0ICJSZXNvdXJjZVJlc3BvbnNl
LmgiCisjaW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKKyNpbXBvcnQgIldlYkNvcmVOU1VSTFNlc3Np
b24uaCIKKyNpbXBvcnQgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+CisjaW1wb3J0IDx3dGYv
RmFzdE1hbGxvYy5oPgorI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjpEYXRhIHsK
KyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgRGF0YShjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSwgUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvdXJjZSkK
KyAgICAgICAgOiBidWZmZXIoU2hhcmVkQnVmZmVyOjpjcmVhdGUoKSkKKyAgICAgICAgLCBvcmln
aW5hbFJlc3BvbnNlKHJlc3BvbnNlKQorICAgICAgICAsIHJlc291cmNlKCZyZXNvdXJjZSkgeyB9
CisKKyAgICBzdHJ1Y3QgVGFza0RhdGEgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8VGFza0RhdGE+
IHsKKyAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBUYXNr
RGF0YShQYXJzZWRSZXF1ZXN0UmFuZ2UmJiByYW5nZSkKKyAgICAgICAgICAgIDogcmFuZ2UoV1RG
TW92ZShyYW5nZSkpCisgICAgICAgICAgICAsIG5leHRCeXRlVG9HaXZlQnVmZmVySW5kZXgocmFu
Z2UuYmVnaW4pIHsgfQorCisgICAgICAgIFBhcnNlZFJlcXVlc3RSYW5nZSByYW5nZTsKKyAgICAg
ICAgc2l6ZV90IG5leHRCeXRlVG9HaXZlQnVmZmVySW5kZXggeyAwIH07CisgICAgICAgIGVudW0g
Y2xhc3MgUmVzcG9uc2VTdGF0ZSA6IHVpbnQ4X3QgeyBOb3RTeW50aGVzaXplZFlldCwgV2FpdGlu
Z0ZvclNlc3Npb24sIFNlc3Npb25DYWxsZWRDb21wbGV0aW9uSGFuZGxlciB9IHJlc3BvbnNlU3Rh
dGUgeyBSZXNwb25zZVN0YXRlOjpOb3RTeW50aGVzaXplZFlldCB9OworICAgIH07CisgICAgCisg
ICAgSGFzaE1hcDxSZXRhaW5QdHI8V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrPiwgc3RkOjp1
bmlxdWVfcHRyPFRhc2tEYXRhPj4gdGFza0RhdGE7CisgICAgUmVmPFNoYXJlZEJ1ZmZlcj4gYnVm
ZmVyOworICAgIFJlc291cmNlUmVzcG9uc2Ugb3JpZ2luYWxSZXNwb25zZTsKKyAgICBlbnVtIGNs
YXNzIFN1Y2Nlc3NmdWxseUZpbmlzaGVkTG9hZGluZyA6IGJvb2wgeyBObywgWWVzIH0gc3VjY2Vz
c2Z1bGx5RmluaXNoZWRMb2FkaW5nIHsgU3VjY2Vzc2Z1bGx5RmluaXNoZWRMb2FkaW5nOjpObyB9
OworICAgIFJlZlB0cjxQbGF0Zm9ybU1lZGlhUmVzb3VyY2U+IHJlc291cmNlOworfTsKKworUmFu
Z2VSZXNwb25zZUdlbmVyYXRvcjo6UmFuZ2VSZXNwb25zZUdlbmVyYXRvcigpID0gZGVmYXVsdDsK
K1JhbmdlUmVzcG9uc2VHZW5lcmF0b3I6On5SYW5nZVJlc3BvbnNlR2VuZXJhdG9yKCkgPSBkZWZh
dWx0OworCitzdGF0aWMgUmVzb3VyY2VSZXNwb25zZSBzeW50aGVzaXplZFJlc3BvbnNlRm9yUmFu
Z2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgb3JpZ2luYWxSZXNwb25zZSwgY29uc3QgUGFyc2Vk
UmVxdWVzdFJhbmdlJiBwYXJzZWRSZXF1ZXN0UmFuZ2UsIE9wdGlvbmFsPHNpemVfdD4gdG90YWxD
b250ZW50TGVuZ3RoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgYXV0byBi
ZWdpbiA9IHBhcnNlZFJlcXVlc3RSYW5nZS5iZWdpbjsKKyAgICBhdXRvIGVuZCA9IHBhcnNlZFJl
cXVlc3RSYW5nZS5lbmQ7CisKKyAgICBhdXRvIG5ld0NvbnRlbnRSYW5nZSA9IG1ha2VTdHJpbmco
ImJ5dGVzICIsIGJlZ2luLCAiLSIsIGVuZCwgIi8iLCAodG90YWxDb250ZW50TGVuZ3RoID8gbWFr
ZVN0cmluZygqdG90YWxDb250ZW50TGVuZ3RoKSA6ICIqIikpOworICAgIGF1dG8gbmV3Q29udGVu
dExlbmd0aCA9IG1ha2VTdHJpbmcoZW5kIC0gYmVnaW4gKyAxKTsKKworICAgIFJlc291cmNlUmVz
cG9uc2UgbmV3UmVzcG9uc2UgPSBvcmlnaW5hbFJlc3BvbnNlOworICAgIG5ld1Jlc3BvbnNlLnNl
dEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFJhbmdlLCBuZXdDb250ZW50
UmFuZ2UpOworICAgIG5ld1Jlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFt
ZTo6Q29udGVudExlbmd0aCwgbmV3Q29udGVudExlbmd0aCk7CisgICAgY29uc3RleHByIGF1dG8g
cGFydGlhbENvbnRlbnQgPSAyMDY7CisgICAgbmV3UmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUo
cGFydGlhbENvbnRlbnQpOworCisgICAgcmV0dXJuIG5ld1Jlc3BvbnNlOworfQorCit2b2lkIFJh
bmdlUmVzcG9uc2VHZW5lcmF0b3I6OnJlbW92ZVRhc2soV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFU
YXNrICp0YXNrKQoreworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Rhc2sgPSByZXRhaW5QdHIodGFz
ayksIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXSB7CisgICAgICAgIGlmICghd2Vha1Ro
aXMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8qIGRhdGEgPSB3ZWFrVGhpcy0+
bV9tYXAuZ2V0KHRhc2suZ2V0KCkub3JpZ2luYWxSZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmluZyk7
CisgICAgICAgIGlmICghZGF0YSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGF0YS0+
dGFza0RhdGEucmVtb3ZlKHRhc2spOworICAgIH0pOworfQorCit2b2lkIFJhbmdlUmVzcG9uc2VH
ZW5lcmF0b3I6OmdpdmVSZXNwb25zZVRvVGFza0lmQnl0ZXNJblJhbmdlUmVjZWl2ZWQoV2ViQ29y
ZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICp0YXNrLCBjb25zdCBQYXJzZWRSZXF1ZXN0UmFuZ2UmIHJh
bmdlLCBPcHRpb25hbDxzaXplX3Q+IGV4cGVjdGVkQ29udGVudExlbmd0aCwgY29uc3QgRGF0YSYg
ZGF0YSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGF1dG8gYnVmZmVyID0g
ZGF0YS5idWZmZXI7CisgICAgYXV0byBidWZmZXJTaXplID0gYnVmZmVyLT5zaXplKCk7CisKKyAg
ICBpZiAoYnVmZmVyU2l6ZSA8IHJhbmdlLmJlZ2luKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgYXV0byogdGFza0RhdGEgPSBkYXRhLnRhc2tEYXRhLmdldCh0YXNrKTsKKyAgICBpZiAoIXRh
c2tEYXRhKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0byBnaXZlQnl0ZXNUb1Rhc2sg
PSBbdGFzayA9IHJldGFpblB0cih0YXNrKSwgYnVmZmVyLCB0YXNrRGF0YSA9IG1ha2VXZWFrUHRy
KCp0YXNrRGF0YSksIGdlbmVyYXRvciA9IG1ha2VXZWFrUHRyKCp0aGlzKV0geworICAgICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBpZiAoW3Rhc2sgc3RhdGVdICE9IE5TVVJM
U2Vzc2lvblRhc2tTdGF0ZVJ1bm5pbmcpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlm
ICghdGFza0RhdGEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8mIHJhbmdlID0g
dGFza0RhdGEtPnJhbmdlOworICAgICAgICBhdXRvJiBieXRlSW5kZXggPSB0YXNrRGF0YS0+bmV4
dEJ5dGVUb0dpdmVCdWZmZXJJbmRleDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAg
ICAgIGlmIChieXRlSW5kZXggPj0gYnVmZmVyLT5zaXplKCkpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBhdXRvIGJ1ZmZlclZpZXcgPSBidWZmZXItPmdldFNvbWVEYXRhKGJ5
dGVJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJ1ZmZlclZpZXcuc2l6ZSgpIHx8IGJ5dGVJbmRl
eCA+IHJhbmdlLmVuZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgc2l6
ZV90IGJ5dGVzRnJvbVRoaXNWaWV3VG9EZWxpdmVyID0gc3RkOjptaW4oYnVmZmVyVmlldy5zaXpl
KCksIHJhbmdlLmVuZCAtIGJ5dGVJbmRleCArIDEpOworICAgICAgICAgICAgYnl0ZUluZGV4ICs9
IGJ5dGVzRnJvbVRoaXNWaWV3VG9EZWxpdmVyOworICAgICAgICAgICAgW3Rhc2sgcmVzb3VyY2U6
bnVsbHB0ciByZWNlaXZlZERhdGE6YnVmZmVyVmlldy5kYXRhKCkgbGVuZ3RoOmJ5dGVzRnJvbVRo
aXNWaWV3VG9EZWxpdmVyXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYnl0ZUluZGV4ID49IHJh
bmdlLmVuZCkgeworICAgICAgICAgICAgW3Rhc2sgcmVzb3VyY2VGaW5pc2hlZDpudWxscHRyIG1l
dHJpY3M6TmV0d29ya0xvYWRNZXRyaWNzIHsgfV07CisgICAgICAgICAgICBpZiAoZ2VuZXJhdG9y
KQorICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+cmVtb3ZlVGFzayh0YXNrLmdldCgpKTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICBzd2l0Y2ggKHRhc2tEYXRhLT5yZXNwb25zZVN0YXRlKSB7
CisgICAgY2FzZSBEYXRhOjpUYXNrRGF0YTo6UmVzcG9uc2VTdGF0ZTo6Tm90U3ludGhlc2l6ZWRZ
ZXQ6IHsKKyAgICAgICAgYXV0byByZXNwb25zZSA9IHN5bnRoZXNpemVkUmVzcG9uc2VGb3JSYW5n
ZShkYXRhLm9yaWdpbmFsUmVzcG9uc2UsIHJhbmdlLCBleHBlY3RlZENvbnRlbnRMZW5ndGgpOwor
ICAgICAgICBbdGFzayByZXNvdXJjZTpudWxscHRyIHJlY2VpdmVkUmVzcG9uc2U6cmVzcG9uc2Ug
Y29tcGxldGlvbkhhbmRsZXI6W2dpdmVCeXRlc1RvVGFzayA9IFdURk1vdmUoZ2l2ZUJ5dGVzVG9U
YXNrKSwgdGFza0RhdGEgPSBtYWtlV2Vha1B0cih0YXNrRGF0YSksIHRhc2sgPSByZXRhaW5QdHIo
dGFzayldIChXZWJDb3JlOjpTaG91bGRDb250aW51ZVBvbGljeUNoZWNrIHNob3VsZENvbnRpbnVl
KSB7CisgICAgICAgICAgICBpZiAodGFza0RhdGEpCisgICAgICAgICAgICAgICAgdGFza0RhdGEt
PnJlc3BvbnNlU3RhdGUgPSBEYXRhOjpUYXNrRGF0YTo6UmVzcG9uc2VTdGF0ZTo6U2Vzc2lvbkNh
bGxlZENvbXBsZXRpb25IYW5kbGVyOworICAgICAgICAgICAgaWYgKHNob3VsZENvbnRpbnVlID09
IFNob3VsZENvbnRpbnVlUG9saWN5Q2hlY2s6OlllcykKKyAgICAgICAgICAgICAgICBnaXZlQnl0
ZXNUb1Rhc2soKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBbdGFzayBjYW5j
ZWxdOworICAgICAgICB9XTsKKyAgICAgICAgdGFza0RhdGEtPnJlc3BvbnNlU3RhdGUgPSBEYXRh
OjpUYXNrRGF0YTo6UmVzcG9uc2VTdGF0ZTo6V2FpdGluZ0ZvclNlc3Npb247CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIERhdGE6OlRhc2tEYXRhOjpSZXNwb25zZVN0YXRlOjpXYWl0
aW5nRm9yU2Vzc2lvbjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEYXRhOjpUYXNrRGF0YTo6
UmVzcG9uc2VTdGF0ZTo6U2Vzc2lvbkNhbGxlZENvbXBsZXRpb25IYW5kbGVyOgorICAgICAgICBn
aXZlQnl0ZXNUb1Rhc2soKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitPcHRpb25hbDxz
aXplX3Q+IFJhbmdlUmVzcG9uc2VHZW5lcmF0b3I6OmV4cGVjdGVkQ29udGVudExlbmd0aEZyb21E
YXRhKGNvbnN0IERhdGEmIGRhdGEpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBpZiAoZGF0YS5zdWNjZXNzZnVsbHlGaW5pc2hlZExvYWRpbmcgPT0gRGF0YTo6U3VjY2Vzc2Z1
bGx5RmluaXNoZWRMb2FkaW5nOjpZZXMpCisgICAgICAgIHJldHVybiBkYXRhLmJ1ZmZlci0+c2l6
ZSgpOworCisgICAgLy8gRklYTUU6IFJlc291cmNlUmVzcG9uc2VCYXNlOjpleHBlY3RlZENvbnRl
bnRMZW5ndGgoKSBzaG91bGQgcmV0dXJuIE9wdGlvbmFsPHNpemVfdD4gaW5zdGVhZCBvZiB1cyBk
b2luZyB0aGlzIGNoZWNrIGhlcmUuCisgICAgYXV0byBleHBlY3RlZENvbnRlbnRMZW5ndGggPSBk
YXRhLm9yaWdpbmFsUmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCk7CisgICAgaWYgKGV4
cGVjdGVkQ29udGVudExlbmd0aCA9PSBOU1VSTFJlc3BvbnNlVW5rbm93bkxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gZXhwZWN0ZWRDb250ZW50TGVuZ3Ro
OworfQorCit2b2lkIFJhbmdlUmVzcG9uc2VHZW5lcmF0b3I6OmdpdmVSZXNwb25zZVRvVGFza3NX
aXRoRmluaXNoZWRSYW5nZXMoRGF0YSYgZGF0YSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIGF1dG8gZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gZXhwZWN0ZWRDb250ZW50TGVu
Z3RoRnJvbURhdGEoZGF0YSk7CisKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBkYXRhLnRhc2tEYXRh
KQorICAgICAgICBnaXZlUmVzcG9uc2VUb1Rhc2tJZkJ5dGVzSW5SYW5nZVJlY2VpdmVkKHBhaXIu
a2V5LmdldCgpLCBwYWlyLnZhbHVlLT5yYW5nZSwgZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCBkYXRh
KTsKK30KKworYm9vbCBSYW5nZVJlc3BvbnNlR2VuZXJhdG9yOjp3aWxsSGFuZGxlUmVxdWVzdChX
ZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgKnRhc2ssIE5TVVJMUmVxdWVzdCAqcmVxdWVzdCkK
K3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGF1dG8qIGRhdGEgPSBtX21hcC5n
ZXQocmVxdWVzdC5VUkwuYWJzb2x1dGVTdHJpbmcpOworICAgIGlmICghZGF0YSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYXV0byByYW5nZSA9IFBhcnNlZFJlcXVlc3RSYW5nZTo6cGFy
c2UoW3JlcXVlc3QgdmFsdWVGb3JIVFRQSGVhZGVyRmllbGQ6QCJSYW5nZSJdKTsKKyAgICBpZiAo
IXJhbmdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGV4cGVjdGVkQ29udGVu
dExlbmd0aCA9IGV4cGVjdGVkQ29udGVudExlbmd0aEZyb21EYXRhKCpkYXRhKTsKKyAgICBkYXRh
LT50YXNrRGF0YS5hZGQodGFzaywgbWFrZVVuaXF1ZTxEYXRhOjpUYXNrRGF0YT4oV1RGTW92ZSgq
cmFuZ2UpKSk7CisgICAgZ2l2ZVJlc3BvbnNlVG9UYXNrSWZCeXRlc0luUmFuZ2VSZWNlaXZlZCh0
YXNrLCAqcmFuZ2UsIGV4cGVjdGVkQ29udGVudExlbmd0aCwgKmRhdGEpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2NsYXNzIFJhbmdlUmVzcG9uc2VHZW5lcmF0b3I6Ok1lZGlhUmVzb3VyY2VD
bGllbnQgOiBwdWJsaWMgUGxhdGZvcm1NZWRpYVJlc291cmNlQ2xpZW50IHsKK3B1YmxpYzoKKyAg
ICBNZWRpYVJlc291cmNlQ2xpZW50KFJhbmdlUmVzcG9uc2VHZW5lcmF0b3ImIGdlbmVyYXRvciwg
VVJMJiYgdXJsKQorICAgICAgICA6IG1fZ2VuZXJhdG9yKG1ha2VXZWFrUHRyKGdlbmVyYXRvcikp
CisgICAgICAgICwgbV91cmxTdHJpbmcoV1RGTW92ZSh1cmwpLnN0cmluZygpKSB7IH0KK3ByaXZh
dGU6CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIGJlZm9y
ZSBjaGFuZ2luZyB0aGUgY2xpZW50IHRvIHRoaXMuCisgICAgdm9pZCByZXNwb25zZVJlY2VpdmVk
KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFNob3VsZENvbnRpbnVlUG9saWN5Q2hlY2spPiYmIGNvbXBsZXRpb25I
YW5kbGVyKSBmaW5hbAorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU2hvdWxkQ29udGludWVQb2xpY3lDaGVjazo6
Tm8pOworICAgIH0KKyAgICB2b2lkIHJlZGlyZWN0UmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJlc291
cmNlJiwgUmVzb3VyY2VSZXF1ZXN0JiYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFJlc291cmNlUmVxdWVzdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikg
ZmluYWwKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CisgICAgfQorICAgIHZvaWQgZGF0YVNlbnQoUGxh
dGZvcm1NZWRpYVJlc291cmNlJiwgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxv
bmcpIGZpbmFsCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKyAgICB2b2lkIGFjY2Vzc0NvbnRyb2xDaGVja0ZhaWxlZChQbGF0Zm9ybU1lZGlhUmVz
b3VyY2UmLCBjb25zdCBSZXNvdXJjZUVycm9yJikgZmluYWwKKyAgICB7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgYm9vbCBzaG91bGRDYWNoZVJl
c3BvbnNlKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSBm
aW5hbAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHZvaWQgZGF0YVJlY2VpdmVkKFBsYXRmb3JtTWVkaWFS
ZXNvdXJjZSYsIGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKSBmaW5hbAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgaWYgKCFtX2dlbmVyYXRvcikK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byogZGF0YSA9IG1fZ2VuZXJhdG9yLT5t
X21hcC5nZXQobV91cmxTdHJpbmcpOworICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGRhdGEtPmJ1ZmZlci0+YXBwZW5kKGJ5dGVzLCBsZW5ndGgpOworICAg
ICAgICBtX2dlbmVyYXRvci0+Z2l2ZVJlc3BvbnNlVG9UYXNrc1dpdGhGaW5pc2hlZFJhbmdlcygq
ZGF0YSk7CisgICAgfQorCisgICAgdm9pZCBsb2FkRmFpbGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJj
ZSYsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKSBmaW5hbAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgaWYgKCFtX2dlbmVyYXRvcikKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgYXV0byBkYXRhID0gbV9nZW5lcmF0b3ItPm1fbWFwLnRha2Uo
bV91cmxTdHJpbmcpOworICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGZvciAoYXV0byYgdGFzayA6IGRhdGEtPnRhc2tEYXRhLmtleXMoKSkKKyAgICAgICAg
ICAgIFt0YXNrIHJlc291cmNlOm51bGxwdHIgbG9hZEZhaWxlZFdpdGhFcnJvcjplcnJvcl07Cisg
ICAgfQorCisgICAgdm9pZCBsb2FkRmluaXNoZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiwgY29u
c3QgTmV0d29ya0xvYWRNZXRyaWNzJikgZmluYWwKKyAgICB7CisgICAgICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgICAgIGlmICghbV9nZW5lcmF0b3IpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGF1dG8qIGRhdGEgPSBtX2dlbmVyYXRvci0+bV9tYXAuZ2V0KG1fdXJsU3Ry
aW5nKTsKKyAgICAgICAgaWYgKCFkYXRhKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBk
YXRhLT5zdWNjZXNzZnVsbHlGaW5pc2hlZExvYWRpbmcgPSBEYXRhOjpTdWNjZXNzZnVsbHlGaW5p
c2hlZExvYWRpbmc6OlllczsKKyAgICAgICAgZGF0YS0+cmVzb3VyY2UgPSBudWxscHRyOworICAg
ICAgICBtX2dlbmVyYXRvci0+Z2l2ZVJlc3BvbnNlVG9UYXNrc1dpdGhGaW5pc2hlZFJhbmdlcygq
ZGF0YSk7CisgICAgfQorICAgIAorICAgIFdlYWtQdHI8UmFuZ2VSZXNwb25zZUdlbmVyYXRvcj4g
bV9nZW5lcmF0b3I7CisgICAgY29uc3QgU3RyaW5nIG1fdXJsU3RyaW5nOworfTsKKworYm9vbCBS
YW5nZVJlc3BvbnNlR2VuZXJhdG9yOjp3aWxsU3ludGhlc2l6ZVJhbmdlUmVzcG9uc2VzKFdlYkNv
cmVOU1VSTFNlc3Npb25EYXRhVGFzayAqdGFzaywgUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNv
dXJjZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBOU1VSTFJlcXVlc3QgKm9yaWdpbmFsUmVxdWVzdCA9IHRhc2su
b3JpZ2luYWxSZXF1ZXN0OworICAgIGlmICghb3JpZ2luYWxSZXF1ZXN0LlVSTCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmIChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpICE9IDIwMCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxk
KEhUVFBIZWFkZXJOYW1lOjpDb250ZW50UmFuZ2UpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgYXV0byBwYXJzZWRSZXF1ZXN0UmFuZ2UgPSBQYXJzZWRSZXF1ZXN0UmFu
Z2U6OnBhcnNlKFtvcmlnaW5hbFJlcXVlc3QgdmFsdWVGb3JIVFRQSGVhZGVyRmllbGQ6QCJSYW5n
ZSJdKTsKKyAgICBpZiAoIXBhcnNlZFJlcXVlc3RSYW5nZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmVzb3VyY2Uuc2V0Q2xpZW50KGFkb3B0UmVmKG5ldyBNZWRpYVJlc291cmNlQ2xp
ZW50KCp0aGlzLCBvcmlnaW5hbFJlcXVlc3QuVVJMKSkpOworCisgICAgbV9tYXAuZW5zdXJlKG9y
aWdpbmFsUmVxdWVzdC5VUkwuYWJzb2x1dGVTdHJpbmcsIFsmXSB7CisgICAgICAgIHJldHVybiBt
YWtlVW5pcXVlPERhdGE+KHJlc3BvbnNlLCByZXNvdXJjZSk7CisgICAgfSkuaXRlcmF0b3ItPnZh
bHVlLT50YXNrRGF0YS5hZGQodGFzaywgbWFrZVVuaXF1ZTxEYXRhOjpUYXNrRGF0YT4oV1RGTW92
ZSgqcGFyc2VkUmVxdWVzdFJhbmdlKSkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9uLmgKaW5kZXggYTgwZTIwODg1Mzk3
YzcxMDJhZTMxZWI3MDQyNzQ1MzY0YmU0ZGIzMi4uNjAxYTVkYzQwOGQwMTc4NTE3NzViN2VmMDc5
ZWFlOTVlZGUyMmVlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9uLmgKQEAgLTIzLDggKzIzLDEwIEBA
CiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCisjaW1wb3J0ICJSYW5nZVJlc3BvbnNlR2VuZXJhdG9y
LmgiCiAjaW1wb3J0ICJTZWN1cml0eU9yaWdpbi5oIgogI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1VS
TFNlc3Npb24uaD4KKyNpbXBvcnQgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2ltcG9ydCA8
d3RmL0hhc2hTZXQuaD4KICNpbXBvcnQgPHd0Zi9Mb2NrLmg+CiAjaW1wb3J0IDx3dGYvT1NPYmpl
Y3RQdHIuaD4KQEAgLTQxLDEyICs0MywxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBDYWNoZWRSZXNvdXJjZVJlcXVlc3Q7CitjbGFzcyBOZXR3b3JrTG9hZE1ldHJpY3M7CiBjbGFz
cyBQbGF0Zm9ybU1lZGlhUmVzb3VyY2U7CiBjbGFzcyBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2Fk
ZXI7CitjbGFzcyBSZXNvdXJjZUVycm9yOworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworY2xhc3Mg
UmVzb3VyY2VSZXNwb25zZTsKIGNsYXNzIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVu
dDsKK2VudW0gY2xhc3MgU2hvdWxkQ29udGludWVQb2xpY3lDaGVjayA6IGJvb2w7CiB9CiAKLWVu
dW0gY2xhc3MgV2ViQ29yZU5TVVJMU2Vzc2lvbkNPUlNBY2Nlc3NDaGVja1Jlc3VsdHMgeworZW51
bSBjbGFzcyBXZWJDb3JlTlNVUkxTZXNzaW9uQ09SU0FjY2Vzc0NoZWNrUmVzdWx0cyA6IHVpbnQ4
X3QgewogICAgIFVua25vd24sCiAgICAgUGFzcywKICAgICBGYWlsLApAQCAtNjcsNiArNzQsNyBA
QCBXRUJDT1JFX0VYUE9SVCBAaW50ZXJmYWNlIFdlYkNvcmVOU1VSTFNlc3Npb24gOiBOU09iamVj
dCB7CiAgICAgTlNVSW50ZWdlciBfbmV4dFRhc2tJZGVudGlmaWVyOwogICAgIE9TT2JqZWN0UHRy
PGRpc3BhdGNoX3F1ZXVlX3Q+IF9pbnRlcm5hbFF1ZXVlOwogICAgIFdlYkNvcmVOU1VSTFNlc3Np
b25DT1JTQWNjZXNzQ2hlY2tSZXN1bHRzIF9jb3JzUmVzdWx0czsKKyAgICBXZWJDb3JlOjpSYW5n
ZVJlc3BvbnNlR2VuZXJhdG9yIF9yYW5nZVJlc3BvbnNlR2VuZXJhdG9yOwogfQogLSAoaWQpaW5p
dFdpdGhSZXNvdXJjZUxvYWRlcjooV2ViQ29yZTo6UGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVy
Jilsb2FkZXIgZGVsZWdhdGU6KGlkPE5TVVJMU2Vzc2lvblRhc2tEZWxlZ2F0ZT4pZGVsZWdhdGUg
ZGVsZWdhdGVRdWV1ZTooTlNPcGVyYXRpb25RdWV1ZSopcXVldWU7CiBAcHJvcGVydHkgKHJlYWRv
bmx5LCByZXRhaW4pIE5TT3BlcmF0aW9uUXVldWUgKmRlbGVnYXRlUXVldWU7CkBAIC0xMTAsNyAr
MTE4LDcgQEAgV0VCQ09SRV9FWFBPUlQgQGludGVyZmFjZSBXZWJDb3JlTlNVUkxTZXNzaW9uIDog
TlNPYmplY3QgewogQGVuZAogCiBAaW50ZXJmYWNlIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFz
ayA6IE5TT2JqZWN0IHsKLSAgICBfX3Vuc2FmZV91bnJldGFpbmVkIFdlYkNvcmVOU1VSTFNlc3Np
b24gKl9zZXNzaW9uOworICAgIFdlYWtPYmpDUHRyPFdlYkNvcmVOU1VSTFNlc3Npb24+IF9zZXNz
aW9uOwogICAgIFJlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2U+IF9yZXNvdXJj
ZTsKICAgICBSZXRhaW5QdHI8TlNVUkxSZXNwb25zZT4gX3Jlc3BvbnNlOwogICAgIE5TVUludGVn
ZXIgX3Rhc2tJZGVudGlmaWVyOwpAQCAtMTQzLDQgKzE1MSwxNSBAQCBXRUJDT1JFX0VYUE9SVCBA
aW50ZXJmYWNlIFdlYkNvcmVOU1VSTFNlc3Npb24gOiBOU09iamVjdCB7CiAtICh2b2lkKXJlc3Vt
ZTsKIEBlbmQKIAorQGludGVyZmFjZSBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgKFdlYktp
dEludGVybmFsKQorLSAodm9pZClyZXNvdXJjZToobnVsbGFibGUgV2ViQ29yZTo6UGxhdGZvcm1N
ZWRpYVJlc291cmNlKilyZXNvdXJjZSBzZW50Qnl0ZXM6KHVuc2lnbmVkIGxvbmcgbG9uZylieXRl
c1NlbnQgdG90YWxCeXRlc1RvQmVTZW50Oih1bnNpZ25lZCBsb25nIGxvbmcpdG90YWxCeXRlc1Rv
QmVTZW50OworLSAodm9pZClyZXNvdXJjZToobnVsbGFibGUgV2ViQ29yZTo6UGxhdGZvcm1NZWRp
YVJlc291cmNlKilyZXNvdXJjZSByZWNlaXZlZFJlc3BvbnNlOihjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJilyZXNwb25zZSBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChXZWJDb3JlOjpTaG91bGRDb250aW51ZVBvbGljeUNoZWNrKT4mJiljb21wbGV0aW9u
SGFuZGxlcjsKKy0gKEJPT0wpcmVzb3VyY2U6KG51bGxhYmxlIFdlYkNvcmU6OlBsYXRmb3JtTWVk
aWFSZXNvdXJjZSopcmVzb3VyY2Ugc2hvdWxkQ2FjaGVSZXNwb25zZTooY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSYpcmVzcG9uc2U7CistICh2b2lkKXJlc291cmNlOihudWxsYWJsZSBX
ZWJDb3JlOjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIHJlY2VpdmVkRGF0YTooY29u
c3QgY2hhciopZGF0YSBsZW5ndGg6KGludClsZW5ndGg7CistICh2b2lkKXJlc291cmNlOihudWxs
YWJsZSBXZWJDb3JlOjpQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIHJlY2VpdmVkUmVk
aXJlY3Q6KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKXJlc3BvbnNlIHJlcXVlc3Q6
KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmKXJlcXVlc3QgY29tcGxldGlvbkhhbmRsZXI6KENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYpPiYmKWNvbXBs
ZXRpb25IYW5kbGVyOworLSAodm9pZClyZXNvdXJjZToobnVsbGFibGUgV2ViQ29yZTo6UGxhdGZv
cm1NZWRpYVJlc291cmNlKilyZXNvdXJjZSBhY2Nlc3NDb250cm9sQ2hlY2tGYWlsZWRXaXRoRXJy
b3I6KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKWVycm9yOworLSAodm9pZClyZXNvdXJj
ZToobnVsbGFibGUgV2ViQ29yZTo6UGxhdGZvcm1NZWRpYVJlc291cmNlKilyZXNvdXJjZSBsb2Fk
RmFpbGVkV2l0aEVycm9yOihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJillcnJvcjsKKy0g
KHZvaWQpcmVzb3VyY2VGaW5pc2hlZDoobnVsbGFibGUgV2ViQ29yZTo6UGxhdGZvcm1NZWRpYVJl
c291cmNlKilyZXNvdXJjZSBtZXRyaWNzOihjb25zdCBXZWJDb3JlOjpOZXR3b3JrTG9hZE1ldHJp
Y3MmKW1ldHJpY3M7CitAZW5kCisKIE5TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9u
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3JlTlNVUkxT
ZXNzaW9uLm1tCmluZGV4IGJlMTE4NzA5M2I1OTIzNjY1M2EyNjczZWY0NjI2YTYxNzVjMzEwNmMu
LmMyMmU4N2Q4NjhkZDMxN2Q5ZGRmOTlkZTRlYTFmMzRmZTdjODgzNzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VS
TFNlc3Npb24ubW0KQEAgLTI3LDEwICsyNywxMiBAQAogI2ltcG9ydCAiV2ViQ29yZU5TVVJMU2Vz
c2lvbi5oIgogCiAjaW1wb3J0ICJDYWNoZWRSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbXBvcnQgIlBh
cnNlZFJlcXVlc3RSYW5nZS5oIgogI2ltcG9ydCAiUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVy
LmgiCiAjaW1wb3J0ICJTdWJyZXNvdXJjZUxvYWRlci5oIgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRy
Lmg+CiAjaW1wb3J0IDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KKyNpbXBvcnQgPHd0Zi9XZWFr
T2JqQ1B0ci5oPgogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwpAQCAtMjAzLDI0ICsyMDUsMTUgQEAgc3RhdGljIE5TRGF0ZSAqIF9f
bnVsbGFibGUgbmV0d29ya0xvYWRNZXRyaWNzRGF0ZShTZWNvbmRzIGZldGNoU3RhcnQsIFNlY29u
ZHMgZGUKIC0gKHZvaWQpYWRkRGVsZWdhdGVPcGVyYXRpb246KEZ1bmN0aW9uPHZvaWQoKT4mJilv
cGVyYXRpb247CiAtICh2b2lkKXRhc2s6KFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAqKXRh
c2sgZGlkUmVjZWl2ZUNPUlNBY2Nlc3NDaGVja1Jlc3VsdDooQk9PTClyZXN1bHQ7CiAtICh2b2lk
KXRhc2s6KFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAqKXRhc2sgZGlkUmVjZWl2ZVJlc3Bv
bnNlRnJvbU9yaWdpbjooUmVmPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiYmKW9yaWdpbjsKKy0g
KFdlYkNvcmU6OlJhbmdlUmVzcG9uc2VHZW5lcmF0b3ImKXJhbmdlUmVzcG9uc2VHZW5lcmF0b3I7
CiBAZW5kCiAKIEBpbnRlcmZhY2UgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICgpCiAtIChp
ZClpbml0V2l0aFNlc3Npb246KFdlYkNvcmVOU1VSTFNlc3Npb24gKilzZXNzaW9uIGlkZW50aWZp
ZXI6KE5TVUludGVnZXIpaWRlbnRpZmllciByZXF1ZXN0OihOU1VSTFJlcXVlc3QgKilyZXF1ZXN0
OwotLSAoaWQpaW5pdFdpdGhTZXNzaW9uOihXZWJDb3JlTlNVUkxTZXNzaW9uICopc2Vzc2lvbiBp
ZGVudGlmaWVyOihOU1VJbnRlZ2VyKWlkZW50aWZpZXIgVVJMOihOU1VSTCAqKXVybDsKIC0gKHZv
aWQpX3Jlc3RhcnQ7CiAtICh2b2lkKV9jYW5jZWw7Ci0tICh2b2lkKV9maW5pc2g7CiBAcHJvcGVy
dHkgKGFzc2lnbikgV2ViQ29yZU5TVVJMU2Vzc2lvbiAqIF9OdWxsYWJsZSBzZXNzaW9uOwogCi0t
ICh2b2lkKXJlc291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmKXJlc291cmNlIHNlbnRCeXRl
czoodW5zaWduZWQgbG9uZyBsb25nKWJ5dGVzU2VudCB0b3RhbEJ5dGVzVG9CZVNlbnQ6KHVuc2ln
bmVkIGxvbmcgbG9uZyl0b3RhbEJ5dGVzVG9CZVNlbnQ7Ci0tICh2b2lkKXJlc291cmNlOihQbGF0
Zm9ybU1lZGlhUmVzb3VyY2UmKXJlc291cmNlIHJlY2VpdmVkUmVzcG9uc2U6KGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmKXJlc3BvbnNlIGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFNob3VsZENvbnRpbnVlUG9saWN5Q2hlY2spPiYmKWNvbXBsZXRpb25IYW5kbGVyOwot
LSAoQk9PTClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlJilyZXNvdXJjZSBzaG91bGRD
YWNoZVJlc3BvbnNlOihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJilyZXNwb25zZTsKLS0gKHZvaWQp
cmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgcmVjZWl2ZWREYXRhOihj
b25zdCBjaGFyKilkYXRhIGxlbmd0aDooaW50KWxlbmd0aDsKLS0gKHZvaWQpcmVzb3VyY2U6KFBs
YXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgcmVjZWl2ZWRSZWRpcmVjdDooY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpcmVzcG9uc2UgcmVxdWVzdDooUmVzb3VyY2VSZXF1ZXN0JiYpcmVxdWVz
dCBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZXNvdXJjZVJlcXVl
c3QmJik+JiYpY29tcGxldGlvbkhhbmRsZXI7Ci0tICh2b2lkKXJlc291cmNlOihQbGF0Zm9ybU1l
ZGlhUmVzb3VyY2UmKXJlc291cmNlIGFjY2Vzc0NvbnRyb2xDaGVja0ZhaWxlZFdpdGhFcnJvcjoo
Y29uc3QgUmVzb3VyY2VFcnJvciYpZXJyb3I7Ci0tICh2b2lkKXJlc291cmNlOihQbGF0Zm9ybU1l
ZGlhUmVzb3VyY2UmKXJlc291cmNlIGxvYWRGYWlsZWRXaXRoRXJyb3I6KGNvbnN0IFJlc291cmNl
RXJyb3ImKWVycm9yOwotLSAodm9pZClyZXNvdXJjZUZpbmlzaGVkOihQbGF0Zm9ybU1lZGlhUmVz
b3VyY2UmKXJlc291cmNlIG1ldHJpY3M6KGNvbnN0IE5ldHdvcmtMb2FkTWV0cmljcyYpbWV0cmlj
czsKIEBlbmQKIAogTlNfQVNTVU1FX05PTk5VTExfRU5ECkBAIC0zMTEsNiArMzA0LDExIEBAIE5T
X0FTU1VNRV9OT05OVUxMX0VORAogICAgIF9vcmlnaW5zLmFkZChXVEZNb3ZlKG9yaWdpbikpOwog
fQogCistIChXZWJDb3JlOjpSYW5nZVJlc3BvbnNlR2VuZXJhdG9yJilyYW5nZVJlc3BvbnNlR2Vu
ZXJhdG9yCit7CisgICAgcmV0dXJuIF9yYW5nZVJlc3BvbnNlR2VuZXJhdG9yOworfQorCiAjcHJh
Z21hIG1hcmsgLSBOU1VSTFNlc3Npb24gQVBJCiBAZHluYW1pYyBkZWxlZ2F0ZTsKIC0gKF9fbnVs
bGFibGUgaWQ8TlNVUkxTZXNzaW9uRGVsZWdhdGU+KWRlbGVnYXRlCkBAIC00NTUsMTUgKzQ1Myw3
IEBAIE5TX0FTU1VNRV9OT05OVUxMX0VORAogCiAtIChOU1VSTFNlc3Npb25EYXRhVGFzayAqKWRh
dGFUYXNrV2l0aFVSTDooTlNVUkwgKil1cmwKIHsKLSAgICBpZiAoX2ludmFsaWRhdGVkKQotICAg
ICAgICByZXR1cm4gbmlsOwotCi0gICAgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICp0YXNr
ID0gW1tXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgYWxsb2NdIGluaXRXaXRoU2Vzc2lvbjpz
ZWxmIGlkZW50aWZpZXI6X25leHRUYXNrSWRlbnRpZmllcisrIFVSTDp1cmxdOwotICAgIHsKLSAg
ICAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihfZGF0YVRhc2tzTG9jayk7Ci0gICAgICAgIF9kYXRh
VGFza3MuYWRkKHRhc2spOwotICAgIH0KLSAgICByZXR1cm4gKE5TVVJMU2Vzc2lvbkRhdGFUYXNr
ICopW3Rhc2sgYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBbc2VsZiBkYXRhVGFza1dpdGhSZXF1
ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dXJsXV07CiB9CiAKIC0gKHZvaWQpc2Vu
ZEgyUGluZzooTlNVUkwgKil1cmwgcG9uZ0hhbmRsZXI6KHZvaWQgKF4pKE5TRXJyb3IgKmVycm9y
LCBOU1RpbWVJbnRlcnZhbCBpbnRlcnZhbCkpcG9uZ0hhbmRsZXIKQEAgLTU3MSw3ICs1NjEsNyBA
QCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgTG9jayBtX3Rhc2tMb2NrOwotICAgIFdlYkNvcmVO
U1VSTFNlc3Npb25EYXRhVGFzayAqbV90YXNrOworICAgIFdlYWtPYmpDUHRyPFdlYkNvcmVOU1VS
TFNlc3Npb25EYXRhVGFzaz4gbV90YXNrOwogfTsKIAogdm9pZCBXZWJDb3JlTlNVUkxTZXNzaW9u
RGF0YVRhc2tDbGllbnQ6OmNsZWFyVGFzaygpCkBAIC01ODYsMTYgKzU3NiwxNyBAQCB2b2lkIFdl
YkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6ZGF0YVNlbnQoUGxhdGZvcm1NZWRpYVJl
c291cmNlJiByZXNvdXJjZQogICAgIGlmICghbV90YXNrKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBbbV90YXNrIHJlc291cmNlOnJlc291cmNlIHNlbnRCeXRlczpieXRlc1NlbnQgdG90YWxCeXRl
c1RvQmVTZW50OnRvdGFsQnl0ZXNUb0JlU2VudF07CisgICAgW21fdGFzayByZXNvdXJjZTomcmVz
b3VyY2Ugc2VudEJ5dGVzOmJ5dGVzU2VudCB0b3RhbEJ5dGVzVG9CZVNlbnQ6dG90YWxCeXRlc1Rv
QmVTZW50XTsKIH0KIAogdm9pZCBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OnJl
c3BvbnNlUmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvdXJjZSwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2hvdWxkQ29u
dGludWVQb2xpY3lDaGVjayk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CisgICAgYXV0byBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV90YXNr
TG9jayk7CiAgICAgaWYgKCFtX3Rhc2spCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxl
cihTaG91bGRDb250aW51ZVBvbGljeUNoZWNrOjpObyk7CiAKLSAgICBbbV90YXNrIHJlc291cmNl
OnJlc291cmNlIHJlY2VpdmVkUmVzcG9uc2U6cmVzcG9uc2UgY29tcGxldGlvbkhhbmRsZXI6V1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildOworICAgIFttX3Rhc2sgcmVzb3VyY2U6JnJlc291cmNl
IHJlY2VpdmVkUmVzcG9uc2U6cmVzcG9uc2UgY29tcGxldGlvbkhhbmRsZXI6V1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildOwogfQogCiBib29sIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0Ns
aWVudDo6c2hvdWxkQ2FjaGVSZXNwb25zZShQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc291cmNl
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKQEAgLTYwNCw3ICs1OTUsNyBAQCBi
b29sIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6c2hvdWxkQ2FjaGVSZXNwb25z
ZShQbGF0Zm9ybU1lZGlhUmVzb3VyYwogICAgIGlmICghbV90YXNrKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICByZXR1cm4gW21fdGFzayByZXNvdXJjZTpyZXNvdXJjZSBzaG91bGRDYWNo
ZVJlc3BvbnNlOnJlc3BvbnNlXTsKKyAgICByZXR1cm4gW21fdGFzayByZXNvdXJjZTomcmVzb3Vy
Y2Ugc2hvdWxkQ2FjaGVSZXNwb25zZTpyZXNwb25zZV07CiB9CiAKIHZvaWQgV2ViQ29yZU5TVVJM
U2Vzc2lvbkRhdGFUYXNrQ2xpZW50OjpkYXRhUmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJlc291cmNl
JiByZXNvdXJjZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKQEAgLTYxMyw3ICs2MDQs
NyBAQCB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6ZGF0YVJlY2VpdmVk
KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzbwogICAgIGlmICghbV90YXNrKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBbbV90YXNrIHJlc291cmNlOnJlc291cmNlIHJlY2VpdmVkRGF0YTpkYXRh
IGxlbmd0aDpsZW5ndGhdOworICAgIFttX3Rhc2sgcmVzb3VyY2U6JnJlc291cmNlIHJlY2VpdmVk
RGF0YTpkYXRhIGxlbmd0aDpsZW5ndGhdOwogfQogCiB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25E
YXRhVGFza0NsaWVudDo6cmVkaXJlY3RSZWNlaXZlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJl
c291cmNlLCBSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZXNvdXJjZVJlcXVlc3QmJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC02MjIsNyArNjEzLDcgQEAgdm9pZCBXZWJDb3JlTlNVUkxT
ZXNzaW9uRGF0YVRhc2tDbGllbnQ6OnJlZGlyZWN0UmVjZWl2ZWQoUGxhdGZvcm1NZWRpYVJlc291
cmNlJgogICAgIGlmICghbV90YXNrKQogICAgICAgICByZXR1cm47CiAKLSAgICBbbV90YXNrIHJl
c291cmNlOnJlc291cmNlIHJlY2VpdmVkUmVkaXJlY3Q6cmVzcG9uc2UgcmVxdWVzdDpXVEZNb3Zl
KHJlcXVlc3QpIGNvbXBsZXRpb25IYW5kbGVyOiBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiByZXF1ZXN0KSBtdXRhYmxlIHsKKyAgICBbbV90
YXNrIHJlc291cmNlOiZyZXNvdXJjZSByZWNlaXZlZFJlZGlyZWN0OnJlc3BvbnNlIHJlcXVlc3Q6
V1RGTW92ZShyZXF1ZXN0KSBjb21wbGV0aW9uSGFuZGxlcjogW2NvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChhdXRvJiYgcmVxdWVzdCkgbXV0YWJsZSB7CiAg
ICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3JlcXVlc3QgPSByZXF1ZXN0Lmlzb2xhdGVkQ29weSgp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRh
YmxlIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVxdWVzdCkpOwog
ICAgICAgICB9KTsKQEAgLTYzNSw3ICs2MjYsNyBAQCB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25E
YXRhVGFza0NsaWVudDo6YWNjZXNzQ29udHJvbENoZWNrRmFpbGVkKFBsYXRmb3JtTWVkaWFSZQog
ICAgIGlmICghbV90YXNrKQogICAgICAgICByZXR1cm47CiAKLSAgICBbbV90YXNrIHJlc291cmNl
OnJlc291cmNlIGFjY2Vzc0NvbnRyb2xDaGVja0ZhaWxlZFdpdGhFcnJvcjplcnJvcl07CisgICAg
W21fdGFzayByZXNvdXJjZTomcmVzb3VyY2UgYWNjZXNzQ29udHJvbENoZWNrRmFpbGVkV2l0aEVy
cm9yOmVycm9yXTsKIH0KIAogdm9pZCBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6
OmxvYWRGYWlsZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvdXJjZSwgY29uc3QgUmVzb3Vy
Y2VFcnJvciYgZXJyb3IpCkBAIC02NDQsNyArNjM1LDcgQEAgdm9pZCBXZWJDb3JlTlNVUkxTZXNz
aW9uRGF0YVRhc2tDbGllbnQ6OmxvYWRGYWlsZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNv
dXIKICAgICBpZiAoIW1fdGFzaykKICAgICAgICAgcmV0dXJuOwogCi0gICAgW21fdGFzayByZXNv
dXJjZTpyZXNvdXJjZSBsb2FkRmFpbGVkV2l0aEVycm9yOmVycm9yXTsKKyAgICBbbV90YXNrIHJl
c291cmNlOiZyZXNvdXJjZSBsb2FkRmFpbGVkV2l0aEVycm9yOmVycm9yXTsKIH0KIAogdm9pZCBX
ZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmxvYWRGaW5pc2hlZChQbGF0Zm9ybU1l
ZGlhUmVzb3VyY2UmIHJlc291cmNlLCBjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmIG1ldHJpY3Mp
CkBAIC02NTMsNyArNjQ0LDcgQEAgdm9pZCBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGll
bnQ6OmxvYWRGaW5pc2hlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc28KICAgICBpZiAoIW1f
dGFzaykKICAgICAgICAgcmV0dXJuOwogCi0gICAgW21fdGFzayByZXNvdXJjZUZpbmlzaGVkOnJl
c291cmNlIG1ldHJpY3M6bWV0cmljc107CisgICAgW21fdGFzayByZXNvdXJjZUZpbmlzaGVkOiZy
ZXNvdXJjZSBtZXRyaWNzOm1ldHJpY3NdOwogfQogCiB9CkBAIC02NjEsMTcgKzY1Miw2IEBAIHZv
aWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50Ojpsb2FkRmluaXNoZWQoUGxhdGZv
cm1NZWRpYVJlc291cmNlJiByZXNvCiAjcHJhZ21hIG1hcmsgLSBXZWJDb3JlTlNVUkxTZXNzaW9u
RGF0YVRhc2sKIAogQGltcGxlbWVudGF0aW9uIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzawot
LSAoaWQpaW5pdFdpdGhTZXNzaW9uOihXZWJDb3JlTlNVUkxTZXNzaW9uICopc2Vzc2lvbiBpZGVu
dGlmaWVyOihOU1VJbnRlZ2VyKWlkZW50aWZpZXIgVVJMOihOU1VSTCAqKXVybAotewotICAgIHNl
bGYudGFza0lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIHNlbGYuc2Vzc2lvbiA9IHNlc3Np
b247Ci0gICAgc2VsZi5zdGF0ZSA9IE5TVVJMU2Vzc2lvblRhc2tTdGF0ZVN1c3BlbmRlZDsKLSAg
ICBzZWxmLnByaW9yaXR5ID0gTlNVUkxTZXNzaW9uVGFza1ByaW9yaXR5RGVmYXVsdDsKLSAgICBz
ZWxmLm9yaWdpbmFsUmVxdWVzdCA9IHNlbGYuY3VycmVudFJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0
IHJlcXVlc3RXaXRoVVJMOnVybF07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQogLSAoaWQpaW5p
dFdpdGhTZXNzaW9uOihXZWJDb3JlTlNVUkxTZXNzaW9uICopc2Vzc2lvbiBpZGVudGlmaWVyOihO
U1VJbnRlZ2VyKWlkZW50aWZpZXIgcmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdAogewog
ICAgIHNlbGYudGFza0lkZW50aWZpZXIgPSBpZGVudGlmaWVyOwpAQCAtNzA4LDkgKzY4OCwxMiBA
QCB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZpbmlzaGVkKFBs
YXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzbwogCiAgICAgW3NlbGYgX2NhbmNlbF07CiAKKyAgICBp
ZiAoW3NlbGYuc2Vzc2lvbiByYW5nZVJlc3BvbnNlR2VuZXJhdG9yXS53aWxsSGFuZGxlUmVxdWVz
dChzZWxmLCBzZWxmLm9yaWdpbmFsUmVxdWVzdCkpCisgICAgICAgIHJldHVybjsKKwogICAgIF9y
ZXNvdXJjZSA9IHNlbGYuc2Vzc2lvbi5sb2FkZXIucmVxdWVzdFJlc291cmNlKHNlbGYub3JpZ2lu
YWxSZXF1ZXN0LCBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXI6OkxvYWRPcHRpb246OkRpc2Fs
bG93Q2FjaGluZyk7CiAgICAgaWYgKF9yZXNvdXJjZSkKLSAgICAgICAgX3Jlc291cmNlLT5zZXRD
bGllbnQobWFrZVVuaXF1ZTxXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ+KHNlbGYp
KTsKKyAgICAgICAgX3Jlc291cmNlLT5zZXRDbGllbnQoYWRvcHRSZWYoKm5ldyBXZWJDb3JlTlNV
UkxTZXNzaW9uRGF0YVRhc2tDbGllbnQoc2VsZikpKTsKIH0KIAogLSAodm9pZClfY2FuY2VsCkBA
IC03MjMsMTUgKzcwNiw3IEBAIHZvaWQgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrQ2xpZW50
Ojpsb2FkRmluaXNoZWQoUGxhdGZvcm1NZWRpYVJlc291cmNlJiByZXNvCiAgICAgfQogfQogCi0t
ICh2b2lkKV9maW5pc2gKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChf
cmVzb3VyY2UpCi0gICAgICAgIFtzZWxmIHJlc291cmNlRmluaXNoZWQ6Kl9yZXNvdXJjZSBtZXRy
aWNzOk5ldHdvcmtMb2FkTWV0cmljcyB7IH1dOwotfQotCiAjcHJhZ21hIG1hcmsgLSBOU1VSTFNl
c3Npb24gQVBJCi1Ac3ludGhlc2l6ZSBzZXNzaW9uID0gX3Nlc3Npb247CiBAc3ludGhlc2l6ZSB0
YXNrSWRlbnRpZmllciA9IF90YXNrSWRlbnRpZmllcjsKIEBzeW50aGVzaXplIG9yaWdpbmFsUmVx
dWVzdCA9IF9vcmlnaW5hbFJlcXVlc3Q7CiBAc3ludGhlc2l6ZSBjdXJyZW50UmVxdWVzdCA9IF9j
dXJyZW50UmVxdWVzdDsKQEAgLTc0NCw2ICs3MTksMTYgQEAgdm9pZCBXZWJDb3JlTlNVUkxTZXNz
aW9uRGF0YVRhc2tDbGllbnQ6OmxvYWRGaW5pc2hlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJl
c28KIEBzeW50aGVzaXplIHRhc2tEZXNjcmlwdGlvbiA9IF90YXNrRGVzY3JpcHRpb247CiBAc3lu
dGhlc2l6ZSBwcmlvcml0eSA9IF9wcmlvcml0eTsKIAorLSAoV2ViQ29yZU5TVVJMU2Vzc2lvbiAq
KXNlc3Npb24KK3sKKyAgICByZXR1cm4gX3Nlc3Npb24uZ2V0KCkuZ2V0KCk7Cit9CisKKy0gKHZv
aWQpc2V0U2Vzc2lvbjooV2ViQ29yZU5TVVJMU2Vzc2lvbiAqKXNlc3Npb24KK3sKKyAgICBfc2Vz
c2lvbiA9IHNlc3Npb247Cit9CisKIC0gKE5TVVJMUmVzcG9uc2UgKilyZXNwb25zZQogewogICAg
IHJldHVybiBfcmVzcG9uc2UuZ2V0KCk7CkBAIC03NTEsMTAgKzczNiwxMiBAQCB2b2lkIFdlYkNv
cmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZpbmlzaGVkKFBsYXRmb3JtTWVkaWFS
ZXNvdXJjZSYgcmVzbwogCiAtICh2b2lkKWNhbmNlbAogeworICAgIGlmIChzZWxmLnN0YXRlID09
IE5TVVJMU2Vzc2lvblRhc2tTdGF0ZUNvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOwogICAgIHNl
bGYuc3RhdGUgPSBOU1VSTFNlc3Npb25UYXNrU3RhdGVDYW5jZWxpbmc7Ci0gICAgY2FsbE9uTWFp
blRocmVhZChbcHJvdGVjdGVkU2VsZiA9IFJldGFpblB0cjxXZWJDb3JlTlNVUkxTZXNzaW9uRGF0
YVRhc2s+KHNlbGYpXSB7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkU2VsZiA9IHJl
dGFpblB0cihzZWxmKV0gewogICAgICAgICBbcHJvdGVjdGVkU2VsZiBfY2FuY2VsXTsKLSAgICAg
ICAgW3Byb3RlY3RlZFNlbGYgX2ZpbmlzaF07CisgICAgICAgIFtwcm90ZWN0ZWRTZWxmIF9yZXNv
dXJjZTpudWxscHRyIGxvYWRGaW5pc2hlZFdpdGhFcnJvcjpbTlNFcnJvciBlcnJvcldpdGhEb21h
aW46TlNVUkxFcnJvckRvbWFpbiBjb2RlOk5TVVJMRXJyb3JDYW5jZWxsZWQgdXNlckluZm86bmls
XSBtZXRyaWNzOk5ldHdvcmtMb2FkTWV0cmljcyB7IH1dOwogICAgIH0pOwogfQogCkBAIC04MDYs
MjMgKzc5MywyOCBAQCB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9h
ZEZpbmlzaGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzbwogCiAjcHJhZ21hIG1hcmsgLSBQ
bGF0Zm9ybU1lZGlhUmVzb3VyY2VDbGllbnQgY2FsbGJhY2tzCiAKLS0gKHZvaWQpcmVzb3VyY2U6
KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2Ugc2VudEJ5dGVzOih1bnNpZ25lZCBsb25n
IGxvbmcpYnl0ZXNTZW50IHRvdGFsQnl0ZXNUb0JlU2VudDoodW5zaWduZWQgbG9uZyBsb25nKXRv
dGFsQnl0ZXNUb0JlU2VudAorLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNl
KilyZXNvdXJjZSBzZW50Qnl0ZXM6KHVuc2lnbmVkIGxvbmcgbG9uZylieXRlc1NlbnQgdG90YWxC
eXRlc1RvQmVTZW50Oih1bnNpZ25lZCBsb25nIGxvbmcpdG90YWxCeXRlc1RvQmVTZW50CiB7Ci0g
ICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgJnJlc291cmNlID09IF9yZXNvdXJjZSk7CisgICAg
QVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgIXJlc291cmNlIHx8IHJlc291cmNlID09IF9yZXNvdXJj
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVzU2VudCk7CiAgICAgVU5VU0VEX1BBUkFNKHRvdGFs
Qnl0ZXNUb0JlU2VudCk7CiAgICAgLy8gTm8tb3AuCiB9CiAKLS0gKHZvaWQpcmVzb3VyY2U6KFBs
YXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgcmVjZWl2ZWRSZXNwb25zZTooY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpcmVzcG9uc2UgY29tcGxldGlvbkhhbmRsZXI6KENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoU2hvdWxkQ29udGludWVQb2xpY3lDaGVjayk+JiYpY29tcGxldGlvbkhhbmRsZXIK
Ky0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3VyY2UgcmVjZWl2
ZWRSZXNwb25zZTooY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpcmVzcG9uc2UgY29tcGxldGlvbkhh
bmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2hvdWxkQ29udGludWVQb2xpY3lDaGVjayk+
JiYpY29tcGxldGlvbkhhbmRsZXIKIHsKICAgICBBU1NFUlQocmVzcG9uc2Uuc291cmNlKCkgPT0g
UmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpOZXR3b3JrIHx8IHJlc3BvbnNlLnNvdXJjZSgpID09
IFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6RGlza0NhY2hlIHx8IHJlc3BvbnNlLnNvdXJjZSgp
ID09IFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6RGlza0NhY2hlQWZ0ZXJWYWxpZGF0aW9uIHx8
IHJlc3BvbnNlLnNvdXJjZSgpID09IFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6U2VydmljZVdv
cmtlcik7Ci0gICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgJnJlc291cmNlID09IF9yZXNvdXJj
ZSk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgIXJlc291cmNlIHx8IHJlc291cmNlID09
IF9yZXNvdXJjZSk7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBbc2VsZi5zZXNz
aW9uIHRhc2s6c2VsZiBkaWRSZWNlaXZlUmVzcG9uc2VGcm9tT3JpZ2luOlNlY3VyaXR5T3JpZ2lu
OjpjcmVhdGUocmVzcG9uc2UudXJsKCkpXTsKLSAgICBbc2VsZi5zZXNzaW9uIHRhc2s6c2VsZiBk
aWRSZWNlaXZlQ09SU0FjY2Vzc0NoZWNrUmVzdWx0OnJlc291cmNlLmRpZFBhc3NBY2Nlc3NDb250
cm9sQ2hlY2soKV07CisgICAgLy8gRklYTUU6IFRoaW5rIGFib3V0IHRoaXMgYW5kIG1ha2Ugc3Vy
ZSBpdCdzIHNhZmUuCisgICAgW3NlbGYuc2Vzc2lvbiB0YXNrOnNlbGYgZGlkUmVjZWl2ZUNPUlNB
Y2Nlc3NDaGVja1Jlc3VsdDpyZXNvdXJjZSA/IHJlc291cmNlLT5kaWRQYXNzQWNjZXNzQ29udHJv
bENoZWNrKCkgOiBZRVNdOwogICAgIHNlbGYuY291bnRPZkJ5dGVzRXhwZWN0ZWRUb1JlY2VpdmUg
PSByZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsKLSAgICBSZXRhaW5QdHI8TlNVUkxS
ZXNwb25zZT4gc3Ryb25nUmVzcG9uc2UgeyByZXNwb25zZS5uc1VSTFJlc3BvbnNlKCkgfTsKKyAg
ICBSZXRhaW5QdHI8TlNVUkxSZXNwb25zZT4gc3Ryb25nUmVzcG9uc2UgPSByZXNwb25zZS5uc1VS
TFJlc3BvbnNlKCk7CisKKyAgICBpZiAocmVzb3VyY2UgJiYgc2VsZi5zZXNzaW9uICYmIFtzZWxm
LnNlc3Npb24gcmFuZ2VSZXNwb25zZUdlbmVyYXRvcl0ud2lsbFN5bnRoZXNpemVSYW5nZVJlc3Bv
bnNlcyhzZWxmLCAqcmVzb3VyY2UsIHJlc3BvbnNlKSkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRp
b25IYW5kbGVyKFNob3VsZENvbnRpbnVlUG9saWN5Q2hlY2s6Olllcyk7CisgICAgCiAgICAgUmV0
YWluUHRyPFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzaz4gc3Ryb25nU2VsZiB7IHNlbGYgfTsK
ICAgICBpZiAoIXNlbGYuc2Vzc2lvbikKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVy
KFNob3VsZENvbnRpbnVlUG9saWN5Q2hlY2s6Ok5vKTsKQEAgLTg1MCw5ICs4NDIsOSBAQCB2b2lk
IFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZpbmlzaGVkKFBsYXRmb3Jt
TWVkaWFSZXNvdXJjZSYgcmVzbwogICAgIH1dOwogfQogCi0tIChCT09MKXJlc291cmNlOihQbGF0
Zm9ybU1lZGlhUmVzb3VyY2UmKXJlc291cmNlIHNob3VsZENhY2hlUmVzcG9uc2U6KGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmKXJlc3BvbnNlCistIChCT09MKXJlc291cmNlOihQbGF0Zm9ybU1lZGlh
UmVzb3VyY2UqKXJlc291cmNlIHNob3VsZENhY2hlUmVzcG9uc2U6KGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmKXJlc3BvbnNlCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgJnJlc291cmNl
ID09IF9yZXNvdXJjZSk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgIXJlc291cmNlIHx8
IHJlc291cmNlID09IF9yZXNvdXJjZSk7CiAKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
CkBAIC04NjAsOSArODUyLDkgQEAgdm9pZCBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGll
bnQ6OmxvYWRGaW5pc2hlZChQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc28KICAgICByZXR1cm4g
cmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50UmFuZ2UpLmlz
RW1wdHkoKTsKIH0KIAotLSAodm9pZClyZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJlc291cmNlJily
ZXNvdXJjZSByZWNlaXZlZERhdGE6KGNvbnN0IGNoYXIqKWRhdGEgbGVuZ3RoOihpbnQpbGVuZ3Ro
CistICh2b2lkKXJlc291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIHJlY2Vp
dmVkRGF0YTooY29uc3QgY2hhciopZGF0YSBsZW5ndGg6KGludClsZW5ndGgKIHsKLSAgICBBU1NF
UlRfVU5VU0VEKHJlc291cmNlLCAmcmVzb3VyY2UgPT0gX3Jlc291cmNlKTsKKyAgICBBU1NFUlRf
VU5VU0VEKHJlc291cmNlLCAhcmVzb3VyY2UgfHwgcmVzb3VyY2UgPT0gX3Jlc291cmNlKTsKICAg
ICBSZXRhaW5QdHI8TlNEYXRhPiBuc0RhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0
V2l0aEJ5dGVzOmRhdGEgbGVuZ3RoOmxlbmd0aF0pOwogICAgIFJldGFpblB0cjxXZWJDb3JlTlNV
UkxTZXNzaW9uRGF0YVRhc2s+IHN0cm9uZ1NlbGYgeyBzZWxmIH07CiAgICAgW3NlbGYuc2Vzc2lv
biBhZGREZWxlZ2F0ZU9wZXJhdGlvbjpbc3Ryb25nU2VsZiwgbGVuZ3RoLCBuc0RhdGFdIHsKQEAg
LTg3Myw5ICs4NjUsOSBAQCB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6
bG9hZEZpbmlzaGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzbwogICAgIH1dOwogfQogCi0t
ICh2b2lkKXJlc291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UmKXJlc291cmNlIHJlY2VpdmVk
UmVkaXJlY3Q6KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKXJlc3BvbnNlIHJlcXVlc3Q6KFJlc291
cmNlUmVxdWVzdCYmKXJlcXVlc3QgY29tcGxldGlvbkhhbmRsZXI6KENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoUmVzb3VyY2VSZXF1ZXN0JiYpPiYmKWNvbXBsZXRpb25IYW5kbGVyCistICh2b2lkKXJl
c291cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIHJlY2VpdmVkUmVkaXJlY3Q6
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKXJlc3BvbnNlIHJlcXVlc3Q6KFJlc291cmNlUmVxdWVz
dCYmKXJlcXVlc3QgY29tcGxldGlvbkhhbmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVz
b3VyY2VSZXF1ZXN0JiYpPiYmKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgQVNTRVJUX1VOVVNF
RChyZXNvdXJjZSwgJnJlc291cmNlID09IF9yZXNvdXJjZSk7CisgICAgQVNTRVJUX1VOVVNFRChy
ZXNvdXJjZSwgIXJlc291cmNlIHx8IHJlc291cmNlID09IF9yZXNvdXJjZSk7CiAgICAgW3NlbGYu
c2Vzc2lvbiBhZGREZWxlZ2F0ZU9wZXJhdGlvbjpbc3Ryb25nU2VsZiA9IHJldGFpblB0cihzZWxm
KSwgcmVzcG9uc2UgPSByZXRhaW5QdHIocmVzcG9uc2UubnNVUkxSZXNwb25zZSgpKSwgcmVxdWVz
dCA9IHJlcXVlc3QuaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewogICAgICAgICBpZiAoIVtyZXNwb25zZSBp
c0tpbmRPZkNsYXNzOltOU0hUVFBVUkxSZXNwb25zZSBjbGFzc11dKSB7CiAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTkwNSw5ICs4OTcsOSBAQCB2b2lkIFdlYkNvcmVOU1VS
TFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZpbmlzaGVkKFBsYXRmb3JtTWVkaWFSZXNvdXJj
ZSYgcmVzbwogICAgIH1dOwogfQogCi0tICh2b2lkKV9yZXNvdXJjZTooUGxhdGZvcm1NZWRpYVJl
c291cmNlJilyZXNvdXJjZSBsb2FkRmluaXNoZWRXaXRoRXJyb3I6KE5TRXJyb3IgKillcnJvciBt
ZXRyaWNzOihjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmKW1ldHJpY3MKKy0gKHZvaWQpX3Jlc291
cmNlOihQbGF0Zm9ybU1lZGlhUmVzb3VyY2UqKXJlc291cmNlIGxvYWRGaW5pc2hlZFdpdGhFcnJv
cjooTlNFcnJvciAqKWVycm9yIG1ldHJpY3M6KGNvbnN0IE5ldHdvcmtMb2FkTWV0cmljcyYpbWV0
cmljcwogewotICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2UsICZyZXNvdXJjZSA9PSBfcmVzb3Vy
Y2UpOworICAgIEFTU0VSVF9VTlVTRUQocmVzb3VyY2UsICFyZXNvdXJjZSB8fCByZXNvdXJjZSA9
PSBfcmVzb3VyY2UpOwogICAgIGlmIChzZWxmLnN0YXRlID09IE5TVVJMU2Vzc2lvblRhc2tTdGF0
ZUNvbXBsZXRlZCkKICAgICAgICAgcmV0dXJuOwogICAgIHNlbGYuc3RhdGUgPSBOU1VSTFNlc3Np
b25UYXNrU3RhdGVDb21wbGV0ZWQ7CkBAIC05MzAsMTcgKzkyMiwxNyBAQCB2b2lkIFdlYkNvcmVO
U1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZpbmlzaGVkKFBsYXRmb3JtTWVkaWFSZXNv
dXJjZSYgcmVzbwogICAgIH1dOwogfQogCi0tICh2b2lkKXJlc291cmNlOihQbGF0Zm9ybU1lZGlh
UmVzb3VyY2UmKXJlc291cmNlIGFjY2Vzc0NvbnRyb2xDaGVja0ZhaWxlZFdpdGhFcnJvcjooY29u
c3QgUmVzb3VyY2VFcnJvciYpZXJyb3IKKy0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFS
ZXNvdXJjZSopcmVzb3VyY2UgYWNjZXNzQ29udHJvbENoZWNrRmFpbGVkV2l0aEVycm9yOihjb25z
dCBSZXNvdXJjZUVycm9yJillcnJvcgogewogICAgIFtzZWxmIF9yZXNvdXJjZTpyZXNvdXJjZSBs
b2FkRmluaXNoZWRXaXRoRXJyb3I6ZXJyb3IubnNFcnJvcigpIG1ldHJpY3M6TmV0d29ya0xvYWRN
ZXRyaWNzIHsgfV07CiB9CiAKLS0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJj
ZSYpcmVzb3VyY2UgbG9hZEZhaWxlZFdpdGhFcnJvcjooY29uc3QgUmVzb3VyY2VFcnJvciYpZXJy
b3IKKy0gKHZvaWQpcmVzb3VyY2U6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3VyY2UgbG9h
ZEZhaWxlZFdpdGhFcnJvcjooY29uc3QgUmVzb3VyY2VFcnJvciYpZXJyb3IKIHsKICAgICBbc2Vs
ZiBfcmVzb3VyY2U6cmVzb3VyY2UgbG9hZEZpbmlzaGVkV2l0aEVycm9yOmVycm9yLm5zRXJyb3Io
KSBtZXRyaWNzOk5ldHdvcmtMb2FkTWV0cmljcyB7IH1dOwogfQogCi0tICh2b2lkKXJlc291cmNl
RmluaXNoZWQ6KFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYpcmVzb3VyY2UgbWV0cmljczooY29uc3Qg
TmV0d29ya0xvYWRNZXRyaWNzJiltZXRyaWNzCistICh2b2lkKXJlc291cmNlRmluaXNoZWQ6KFBs
YXRmb3JtTWVkaWFSZXNvdXJjZSopcmVzb3VyY2UgbWV0cmljczooY29uc3QgTmV0d29ya0xvYWRN
ZXRyaWNzJiltZXRyaWNzCiB7CiAgICAgW3NlbGYgX3Jlc291cmNlOnJlc291cmNlIGxvYWRGaW5p
c2hlZFdpdGhFcnJvcjpuaWwgbWV0cmljczptZXRyaWNzXTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbkludGVy
bmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VS
TFNlc3Npb25JbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3
NWFkOGMyZTQ4YzUzOTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
bWVkaWEvTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvbWVkaWEvTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlLmNwcAppbmRleCA5YWI5MDg2
YjViMzllZTQ2ODMxYzlkOWFhOTUxOTlkYmNmYTcyMjYyLi5hMmYwMTY3ZWY5YzlkNmUzZDNhYWE5
NWQxODQ3ZWU5MzBkNGNlYmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUuY3BwCkBAIC0x
MTgwLDcgKzExODAsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZTo6cmVxdWVzdFJl
c291cmNlKFJlbW90ZU1lZGlhUmVzb3VyY2VJZGVudGlmaWVyIHJlbQogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIC8vIFBsYXRmb3JtTWVkaWFSZXNvdXJjZSBvd25zIHRoZSBQbGF0Zm9ybU1l
ZGlhUmVzb3VyY2VDbGllbnQKLSAgICByZXNvdXJjZS0+c2V0Q2xpZW50KG1ha2VVbmlxdWU8UmVt
b3RlTWVkaWFSZXNvdXJjZVByb3h5Pihjb25uZWN0aW9uKCksICpyZXNvdXJjZSwgcmVtb3RlTWVk
aWFSZXNvdXJjZUlkZW50aWZpZXIpKTsKKyAgICByZXNvdXJjZS0+c2V0Q2xpZW50KGFkb3B0UmVm
KCpuZXcgUmVtb3RlTWVkaWFSZXNvdXJjZVByb3h5KGNvbm5lY3Rpb24oKSwgKnJlc291cmNlLCBy
ZW1vdGVNZWRpYVJlc291cmNlSWRlbnRpZmllcikpKTsKICAgICBtX21lZGlhUmVzb3VyY2VzLmFk
ZChyZW1vdGVNZWRpYVJlc291cmNlSWRlbnRpZmllciwgV1RGTW92ZShyZXNvdXJjZSkpOwogCiAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCBjZTdhMDQyZTdiOTdjOTE3ZjY5YzE5MDQzYzE1ZjE4ZTc5Zjlj
ZTk2Li4zMzZlNmJmNGYxMGMyOTdkM2Y3ODU2YzNmMTdjZWQ4ODc5ZGU2MjhmIDEwMDY0NAotLS0g
YS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAK
KzIwMjEtMDItMTUgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
KworICAgICAgICBTeW50aGVzaXplIHJhbmdlIHJlc3BvbnNlcyBpZiBuZWVkZWQgaW4gV2ViQ29y
ZU5TVVJMU2Vzc2lvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjIxMDcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYgR2FyZW4uCisKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvUGFyc2VkQ29udGVudFJhbmdlLmNwcDoK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvQ2hhbGxlbmdlLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
Y2xpZW50Q2VydFNlcnZlcik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9NZWRpYUxvYWRpbmcubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0VmlkZW9C
eXRlcyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpydW5WaWRlb1Rlc3QpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQ
U2VydmVyLmg6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQUmVzcG9uc2U6OkhUVFBSZXNw
b25zZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjpIVFRQUmVzcG9uc2U6
OkhUVFBSZXNwb25zZSk6IERlbGV0ZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9I
VFRQU2VydmVyLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6UmVxdWVz
dERhdGE6OlJlcXVlc3REYXRhKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmFwcGVuZFRvVmVj
dG9yKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OnBhcnNlUGF0aCk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjpyZXNwb25kVG9SZXF1ZXN0cyk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQUmVzcG9uc2U6OmJvZHlGcm9tU3RyaW5nKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBSZXNwb25zZTo6c2VyaWFsaXplKToKKwogMjAyMS0w
Mi0xNCAgUGVuZyBMaXUgIDxwZW5nLmxpdTZAYXBwbGUuY29tPgogCiAgICAgICAgIFtHUFVQXSBN
b3ZlIFVzZUdQVVByb2Nlc3NGb3JNZWRpYUVuYWJsZWQgZnJvbSBXZWJQcmVmZXJlbmNlc0ludGVy
bmFsIHRvIFdlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvUGFyc2VkQ29udGVudFJhbmdlLmNwcCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9QYXJzZWRDb250ZW50UmFuZ2UuY3BwCmluZGV4IDIw
YTk1N2U1OWM4NTE2MGM4MDgzMTdlMTViMDEwMjhkNWZhOWI0NTguLjI1ZDJkNjc3ZmI4ODg2MjI1
ZmUzMWRiNDk4ZTVkNzVkNmM2MDBmNDAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9QYXJzZWRDb250ZW50UmFuZ2UuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9QYXJzZWRDb250ZW50UmFuZ2UuY3BwCkBAIC0yNiw2ICsyNiw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlIDxXZWJDb3JlL1BhcnNlZENvbnRl
bnRSYW5nZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFyc2VkUmVxdWVzdFJhbmdlLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpA
QCAtOTUsNCArOTYsMzEgQEAgVEVTVChXZWJDb3JlLCBQYXJzZWRDb250ZW50UmFuZ2VUb1N0cmlu
ZykKICAgICBBU1NFUlRfU1RSRVEoIiIsIFBhcnNlZENvbnRlbnRSYW5nZSgpLmhlYWRlclZhbHVl
KCkudXRmOCgpLmRhdGEoKSk7CiB9CiAKK1RFU1QoV2ViQ29yZSwgUGFyc2VkUmVxdWVzdFJhbmdl
KQoreworICAgIFZlY3RvcjxTdHJpbmc+IGZhaWx1cmVDYXNlcyB7CisgICAgICAgIHsgfSwKKyAg
ICAgICAgIiIsCisgICAgICAgICJhYmMiLAorICAgICAgICAiYnl0ZXM9IiwKKyAgICAgICAgImJ5
dGVzPS0iLAorICAgICAgICAiYnl0ZXM9YWJjLSIsCisgICAgICAgICJieXRlcz0xLWFiYyIsCisg
ICAgICAgICJieXRlcz0yLTEiLAorICAgICAgICAiYnl0ZXM9MS0iLAorICAgICAgICAiYnl0ZXM9
LTEiLAorICAgICAgICAiYnl0ZXM9MS05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkiCisgICAgfTsK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIGlucHV0IDogZmFpbHVyZUNhc2VzKQorICAgICAgICBFWFBF
Q1RfRVEoV1RGOjpudWxsb3B0LCBQYXJzZWRSZXF1ZXN0UmFuZ2U6OnBhcnNlKGlucHV0KSk7CisK
KyAgICBhdXRvIGNvbXBhcmUgPSBbXSAoY29uc3QgU3RyaW5nJiBpbnB1dCwgT3B0aW9uYWw8c2l6
ZV90PiBiZWdpbiwgT3B0aW9uYWw8c2l6ZV90PiBlbmQpIHsKKyAgICAgICAgYXV0byByYW5nZSA9
IFBhcnNlZFJlcXVlc3RSYW5nZTo6cGFyc2UoaW5wdXQpOworICAgICAgICBFWFBFQ1RfTkUoV1RG
OjpudWxsb3B0LCByYW5nZSk7CisgICAgICAgIAorICAgIH07CisgICAgY29tcGFyZSgiYnl0ZXM9
MS0xIiwgMSwgMSk7CisgICAgY29tcGFyZSgiYnl0ZXM9MS0yIiwgMSwgMik7Cit9CisKIH0KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvQ2hhbGxlbmdl
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9DaGFsbGVuZ2UubW0K
aW5kZXggOTY0MDc0OGJmNjMwMjhkMmI3NDQ4OThjZDBkNDY1M2NmYThiZDVkMy4uMGI3NWJhNDNj
MDNhZTM4ODgxNmExZjNjYzJjZWU2ZjE3NzFiMTA2MSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9DaGFsbGVuZ2UubW0KKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9DaGFsbGVuZ2UubW0KQEAgLTU4OSw3ICs1ODksNyBA
QCBzdGF0aWMgSFRUUFNlcnZlciBjbGllbnRDZXJ0U2VydmVyKCkKICAgICAgICAgeyAiLzUucG5n
IiwgeyBsb25nU3RyaW5nIH0gfSwKICAgICAgICAgeyAiLzYucG5nIiwgeyBsb25nU3RyaW5nIH0g
fSwKICAgICAgICAgeyAiL3JlZGlyZWN0VG9FcnJvciIsIHsgMzAxLCB7eyAiTG9jYXRpb24iLCAi
L2Vycm9yIiB9fSB9IH0sCi0gICAgICAgIHsgIi9lcnJvciIsIHsgSFRUUFNlcnZlcjo6SFRUUFJl
c3BvbnNlOjpUZXJtaW5hdGVDb25uZWN0aW9uOjpZZXMgfSB9LAorICAgICAgICB7ICIvZXJyb3Ii
LCB7IEhUVFBSZXNwb25zZTo6VGVybWluYXRlQ29ubmVjdGlvbjo6WWVzIH0gfSwKICAgICB9LCBI
VFRQU2VydmVyOjpQcm90b2NvbDo6SHR0cHMsIFtdIChhdXRvLCBhdXRvLCBhdXRvIGNlcnRpZmlj
YXRlQWxsb3dlZCkgewogICAgICAgICBjZXJ0aWZpY2F0ZUFsbG93ZWQodHJ1ZSk7CiAgICAgfSk7
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL01lZGlh
TG9hZGluZy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTWVkaWFM
b2FkaW5nLm1tCmluZGV4IDY0ZGM1YmYwNTZiOTU1YTI0OGY2N2UyMGQwOWY3NDcxMTMxYzE0NjUu
LmRmZTcxNWQ2ODUxNzFkOGRjZTEzMWRmM2MyNTExYmM2ZjJlMTAzY2IgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTWVkaWFMb2FkaW5nLm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTWVkaWFMb2FkaW5nLm1tCkBA
IC0yNyw2ICsyNyw3IEBACiAKICNpbXBvcnQgIkhUVFBTZXJ2ZXIuaCIKICNpbXBvcnQgIlBsYXRm
b3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJUZXN0VUlEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVGVz
dFdLV2ViVmlldy5oIgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJz
Lmg+CiAKQEAgLTExNiw2ICsxMTcsNzQgQEAgVEVTVChNZWRpYUxvYWRpbmcsIFVzZXJBZ2VudFN0
cmluZ0hMUykKICAgICBVdGlsOjpydW4oJnJlY2VpdmVkTWVkaWFSZXF1ZXN0KTsKIH0KIAorY29u
c3QgY2hhciogdmlkZW9QbGF5VGVzdEhUTUwgPSI8c2NyaXB0PiIKKyAgICAiZnVuY3Rpb24gY3Jl
YXRlVmlkZW9FbGVtZW50KCkgeyIKKyAgICAgICAgImxldCB2aWRlbyA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ3ZpZGVvJyk7IgorICAgICAgICAidmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignZXJy
b3InLCAoKT0+e2FsZXJ0KCdlcnJvcicpfSk7IgorICAgICAgICAidmlkZW8uYWRkRXZlbnRMaXN0
ZW5lcigncGxheWluZycsICgpPT57YWxlcnQoJ3BsYXlpbmcnKX0pOyIKKyAgICAgICAgInZpZGVv
LnNyYz0ndmlkZW8ubXA0JzsiCisgICAgICAgICJ2aWRlby5hdXRvcGxheT0xOyIKKyAgICAgICAg
ImRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodmlkZW8pOyIKKyAgICAifSIKKyI8L3NjcmlwdD4i
CisiPGJvZHkgb25sb2FkPSdjcmVhdGVWaWRlb0VsZW1lbnQoKSc+PC9ib2R5PiI7CisKK3N0YXRp
YyBWZWN0b3I8dWludDhfdD4gdGVzdFZpZGVvQnl0ZXMoKQoreworICAgIE5TRGF0YSAqZGF0YSA9
IFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09mVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJM
Rm9yUmVzb3VyY2U6QCJ0ZXN0IiB3aXRoRXh0ZW5zaW9uOkAibXA0IiBzdWJkaXJlY3Rvcnk6QCJU
ZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKKyAgICBWZWN0b3I8dWludDhfdD4gdmVjdG9yOwor
ICAgIHZlY3Rvci5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMp
LCBkYXRhLmxlbmd0aCk7CisgICAgcmV0dXJuIHZlY3RvcjsKK30KKworc3RhdGljIHZvaWQgcnVu
VmlkZW9UZXN0KE5TVVJMUmVxdWVzdCAqcmVxdWVzdCwgY29uc3QgY2hhciogZXhwZWN0ZWRNZXNz
YWdlID0gInBsYXlpbmciKQoreworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tX
S1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJhdGlvbi5n
ZXQoKS5tZWRpYVR5cGVzUmVxdWlyaW5nVXNlckFjdGlvbkZvclBsYXliYWNrID0gV0tBdWRpb3Zp
c3VhbE1lZGlhVHlwZU5vbmU7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCAzMDAsIDMwMCkgY29u
ZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpIGFkZFRvV2luZG93OllFU10pOworICAgIFt3
ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOworICAgIEVYUEVDVF9XS19TVFJFUShbd2ViVmll
dyBfdGVzdF93YWl0Rm9yQWxlcnRdLCBleHBlY3RlZE1lc3NhZ2UpOworfQorCitURVNUKE1lZGlh
TG9hZGluZywgUmFuZ2VSZXF1ZXN0U3ludGhlc2lzV2l0aENvbnRlbnRMZW5ndGgpCit7CisgICAg
SFRUUFNlcnZlciBzZXJ2ZXIoeworICAgICAgICB7Ii8iLCB7IHZpZGVvUGxheVRlc3RIVE1MIH19
LAorICAgICAgICB7Ii92aWRlby5tcDQiLCB7IHRlc3RWaWRlb0J5dGVzKCkgfX0KKyAgICB9KTsK
KyAgICBydW5WaWRlb1Rlc3Qoc2VydmVyLnJlcXVlc3QoKSk7CisgICAgRVhQRUNUX0VRKHNlcnZl
ci50b3RhbFJlcXVlc3RzKCksIDJ1KTsKIH0KIAorVEVTVChNZWRpYUxvYWRpbmcsIFJhbmdlUmVx
dWVzdFN5bnRoZXNpc1dpdGhvdXRDb250ZW50TGVuZ3RoKQoreworICAgIHNpemVfdCB0b3RhbFJl
cXVlc3RzIHsgMCB9OworICAgIEZ1bmN0aW9uPHZvaWQoQ29ubmVjdGlvbik+IHJlc3BvbmRUb1Jl
cXVlc3RzOworICAgIHJlc3BvbmRUb1JlcXVlc3RzID0gWyZdIChDb25uZWN0aW9uIGNvbm5lY3Rp
b24pIHsKKyAgICAgICAgY29ubmVjdGlvbi5yZWNlaXZlSFRUUFJlcXVlc3QoWyYsIGNvbm5lY3Rp
b25dIChWZWN0b3I8Y2hhcj4mJiByZXF1ZXN0KSB7CisgICAgICAgICAgICBhdXRvIHNlbmRSZXNw
b25zZSA9IFsmLCBjb25uZWN0aW9uXSAoSFRUUFJlc3BvbnNlIHJlc3BvbnNlLCBIVFRQUmVzcG9u
c2U6OkluY2x1ZGVDb250ZW50TGVuZ3RoIGluY2x1ZGVDb250ZW50TGVuZ3RoKSB7CisgICAgICAg
ICAgICAgICAgY29ubmVjdGlvbi5zZW5kKHJlc3BvbnNlLnNlcmlhbGl6ZShpbmNsdWRlQ29udGVu
dExlbmd0aCksIFsmLCBjb25uZWN0aW9uXSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3BvbmRU
b1JlcXVlc3RzKGNvbm5lY3Rpb24pOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIHRvdGFsUmVxdWVzdHMrKzsKKyAgICAgICAgICAgIGF1dG8gcGF0aCA9
IEhUVFBTZXJ2ZXI6OnBhcnNlUGF0aChyZXF1ZXN0KTsKKyAgICAgICAgICAgIGlmIChwYXRoID09
ICIvIikKKyAgICAgICAgICAgICAgICBzZW5kUmVzcG9uc2UoeyB2aWRlb1BsYXlUZXN0SFRNTCB9
LCBIVFRQUmVzcG9uc2U6OkluY2x1ZGVDb250ZW50TGVuZ3RoOjpZZXMpOworICAgICAgICAgICAg
ZWxzZSBpZiAocGF0aCA9PSAiL3ZpZGVvLm1wNCIpCisgICAgICAgICAgICAgICAgc2VuZFJlc3Bv
bnNlKHRlc3RWaWRlb0J5dGVzKCksIEhUVFBSZXNwb25zZTo6SW5jbHVkZUNvbnRlbnRMZW5ndGg6
Ok5vKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBBU1NFUlQocGF0aC5pc051
bGwoKSk7CisgICAgICAgIH0pOworICAgIH07CisKKyAgICBIVFRQU2VydmVyIHNlcnZlcihbJl0o
Q29ubmVjdGlvbiBjb25uZWN0aW9uKSB7CisgICAgICAgIHJlc3BvbmRUb1JlcXVlc3RzKGNvbm5l
Y3Rpb24pOworICAgIH0pOworICAgIHJ1blZpZGVvVGVzdChzZXJ2ZXIucmVxdWVzdCgpLCAiZXJy
b3IiKTsKKyAgICBFWFBFQ1RfRVEodG90YWxSZXF1ZXN0cywgMnUpOworfQorCit9IC8vIG5hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJCisKICNlbmRpZiAvLyBFTkFCTEUoVklERU8pICYmIFVTRShBVkZP
VU5EQVRJT04pCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0hUVFBTZXJ2
ZXIuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5oCmluZGV4IDM5NWRh
ZjkzMWUyOGE3MWU3N2I4MGYxMDE3OGY1NTk0ODVmMzUxYzIuLmMyODBlNWRhYTk4ZWY2NjIzMjZm
MWJjZjRmZjI4M2U1ZmEzOTAzNTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29j
b2EvSFRUUFNlcnZlci5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZl
ci5oCkBAIC0zNSwxMCArMzUsMTAgQEAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogY2xh
c3MgQ29ubmVjdGlvbjsKK3N0cnVjdCBIVFRQUmVzcG9uc2U7CiAKIGNsYXNzIEhUVFBTZXJ2ZXIg
ewogcHVibGljOgotICAgIHN0cnVjdCBIVFRQUmVzcG9uc2U7CiAgICAgc3RydWN0IFJlcXVlc3RE
YXRhOwogICAgIGVudW0gY2xhc3MgUHJvdG9jb2wgOiB1aW50OF90IHsgSHR0cCwgSHR0cHMsIEh0
dHBzV2l0aExlZ2FjeVRMUywgSHR0cDIgfTsKICAgICB1c2luZyBDZXJ0aWZpY2F0ZVZlcmlmaWVy
ID0gRnVuY3Rpb248dm9pZChzZWNfcHJvdG9jb2xfbWV0YWRhdGFfdCwgc2VjX3RydXN0X3QsIHNl
Y19wcm90b2NvbF92ZXJpZnlfY29tcGxldGVfdCk+OwpAQCAtNTMsNiArNTMsNyBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgdm9pZCByZXNwb25kV2l0aE9LKENvbm5lY3Rpb24pOwogICAgIHN0YXRp
YyB2b2lkIHJlc3BvbmRXaXRoQ2hhbGxlbmdlVGhlbk9LKENvbm5lY3Rpb24pOworICAgIHN0YXRp
YyBTdHJpbmcgcGFyc2VQYXRoKGNvbnN0IFZlY3RvcjxjaGFyPiYgcmVxdWVzdCk7CiAKIHByaXZh
dGU6CiAgICAgc3RhdGljIFJldGFpblB0cjxud19wYXJhbWV0ZXJzX3Q+IGxpc3RlbmVyUGFyYW1l
dGVycyhQcm90b2NvbCwgQ2VydGlmaWNhdGVWZXJpZmllciYmLCBSZXRhaW5QdHI8U2VjSWRlbnRp
dHlSZWY+JiYsIE9wdGlvbmFsPHVpbnQxNl90PiBwb3J0KTsKQEAgLTgxLDE4ICs4MiwyMCBAQCBw
cml2YXRlOgogICAgIFJldGFpblB0cjxud19jb25uZWN0aW9uX3Q+IG1fY29ubmVjdGlvbjsKIH07
CiAKLXN0cnVjdCBIVFRQU2VydmVyOjpIVFRQUmVzcG9uc2Ugeworc3RydWN0IEhUVFBSZXNwb25z
ZSB7CiAgICAgZW51bSBjbGFzcyBUZXJtaW5hdGVDb25uZWN0aW9uIHsgTm8sIFllcyB9OwotICAg
IAorCisgICAgSFRUUFJlc3BvbnNlKFZlY3Rvcjx1aW50OF90PiYmIGJvZHkpCisgICAgICAgIDog
Ym9keShXVEZNb3ZlKGJvZHkpKSB7IH0KICAgICBIVFRQUmVzcG9uc2UoY29uc3QgU3RyaW5nJiBi
b2R5KQotICAgICAgICA6IGJvZHkoYm9keSkgeyB9Ci0gICAgSFRUUFJlc3BvbnNlKEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+JiYgaGVhZGVyRmllbGRzLCBTdHJpbmcmJiBib2R5KQorICAgICAgICA6
IGJvZHkoYm9keUZyb21TdHJpbmcoYm9keSkpIHsgfQorICAgIEhUVFBSZXNwb25zZShIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiYmIGhlYWRlckZpZWxkcywgY29uc3QgU3RyaW5nJiBib2R5KQogICAg
ICAgICA6IGhlYWRlckZpZWxkcyhXVEZNb3ZlKGhlYWRlckZpZWxkcykpCi0gICAgICAgICwgYm9k
eShXVEZNb3ZlKGJvZHkpKSB7IH0KLSAgICBIVFRQUmVzcG9uc2UodW5zaWduZWQgc3RhdHVzQ29k
ZSwgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mJiBoZWFkZXJGaWVsZHMgPSB7IH0sIFN0cmluZyYm
IGJvZHkgPSB7IH0pCisgICAgICAgICwgYm9keShib2R5RnJvbVN0cmluZyhib2R5KSkgeyB9Cisg
ICAgSFRUUFJlc3BvbnNlKHVuc2lnbmVkIHN0YXR1c0NvZGUsIEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+JiYgaGVhZGVyRmllbGRzID0geyB9LCBjb25zdCBTdHJpbmcmIGJvZHkgPSB7IH0pCiAgICAg
ICAgIDogc3RhdHVzQ29kZShzdGF0dXNDb2RlKQogICAgICAgICAsIGhlYWRlckZpZWxkcyhXVEZN
b3ZlKGhlYWRlckZpZWxkcykpCi0gICAgICAgICwgYm9keShXVEZNb3ZlKGJvZHkpKSB7IH0KKyAg
ICAgICAgLCBib2R5KGJvZHlGcm9tU3RyaW5nKGJvZHkpKSB7IH0KICAgICBIVFRQUmVzcG9uc2Uo
VGVybWluYXRlQ29ubmVjdGlvbiB0ZXJtaW5hdGVDb25uZWN0aW9uKQogICAgICAgICA6IHRlcm1p
bmF0ZUNvbm5lY3Rpb24odGVybWluYXRlQ29ubmVjdGlvbikgeyB9CiAKQEAgLTEwMSwxMCArMTA0
LDE0IEBAIHN0cnVjdCBIVFRQU2VydmVyOjpIVFRQUmVzcG9uc2UgewogICAgIEhUVFBSZXNwb25z
ZSgpID0gZGVmYXVsdDsKICAgICBIVFRQUmVzcG9uc2UmIG9wZXJhdG9yPShjb25zdCBIVFRQUmVz
cG9uc2UmKSA9IGRlZmF1bHQ7CiAgICAgSFRUUFJlc3BvbnNlJiBvcGVyYXRvcj0oSFRUUFJlc3Bv
bnNlJiYpID0gZGVmYXVsdDsKLSAgICAKKworICAgIGVudW0gY2xhc3MgSW5jbHVkZUNvbnRlbnRM
ZW5ndGggOiBib29sIHsgTm8sIFllcyB9OworICAgIFZlY3Rvcjx1aW50OF90PiBzZXJpYWxpemUo
SW5jbHVkZUNvbnRlbnRMZW5ndGggPSBJbmNsdWRlQ29udGVudExlbmd0aDo6WWVzKTsKKyAgICBz
dGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IGJvZHlGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCiAg
ICAgdW5zaWduZWQgc3RhdHVzQ29kZSB7IDIwMCB9OwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IGhlYWRlckZpZWxkczsKLSAgICBTdHJpbmcgYm9keTsKKyAgICBWZWN0b3I8dWludDhfdD4g
Ym9keTsKICAgICBUZXJtaW5hdGVDb25uZWN0aW9uIHRlcm1pbmF0ZUNvbm5lY3Rpb24geyBUZXJt
aW5hdGVDb25uZWN0aW9uOjpObyB9OwogfTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9jb2NvYS9IVFRQU2VydmVyLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9IVFRQ
U2VydmVyLm1tCmluZGV4IDEwNzQ0YTVjNDQzZjViMzlmZWYzNmM4MzhlODA1ODY0ZmFmZWIxNjIu
LjAxMzY2NWVkZDhmMWQ1ZWE3MmY4MzQ3ZjQ4MTUxY2VmY2ExMjJiMzUgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvSFRUUFNlcnZlci5tbQorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL2NvY29hL0hUVFBTZXJ2ZXIubW0KQEAgLTM4LDggKzM4LDggQEAgbmFtZXNwYWNlIFRl
c3RXZWJLaXRBUEkgewogCiBzdHJ1Y3QgSFRUUFNlcnZlcjo6UmVxdWVzdERhdGEgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVxdWVzdERhdGEsIFdURjo6RGVzdHJ1Y3Rpb25UaHJlYWQ6
Ok1haW5SdW5Mb29wPiB7CiAgICAgUmVxdWVzdERhdGEoc3RkOjppbml0aWFsaXplcl9saXN0PHN0
ZDo6cGFpcjxTdHJpbmcsIEhUVFBSZXNwb25zZT4+IHJlc3BvbnNlcykKLSAgICA6IHJlcXVlc3RN
YXAoW10oc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxTdHJpbmcsIEhUVFBTZXJ2ZXI6
OkhUVFBSZXNwb25zZT4+IGxpc3QpIHsKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcsIEhUVFBTZXJ2
ZXI6OkhUVFBSZXNwb25zZT4gbWFwOworICAgIDogcmVxdWVzdE1hcChbXShzdGQ6OmluaXRpYWxp
emVyX2xpc3Q8c3RkOjpwYWlyPFN0cmluZywgSFRUUFJlc3BvbnNlPj4gbGlzdCkgeworICAgICAg
ICBIYXNoTWFwPFN0cmluZywgSFRUUFJlc3BvbnNlPiBtYXA7CiAgICAgICAgIGZvciAoYXV0byYg
cGFpciA6IGxpc3QpCiAgICAgICAgICAgICBtYXAuYWRkKHBhaXIuZmlyc3QsIHBhaXIuc2Vjb25k
KTsKICAgICAgICAgcmV0dXJuIG1hcDsKQEAgLTIxMiw2ICsyMTIsMzEgQEAgc3RhdGljIFZlY3Rv
cjx1aW50OF90PiB2ZWN0b3JGcm9tRGF0YShkaXNwYXRjaF9kYXRhX3QgY29udGVudCkKICAgICBy
ZXR1cm4gcmVxdWVzdDsKIH0KIAorc3RhdGljIHZvaWQgYXBwZW5kVVRGOFRvVmVjdG9yKFZlY3Rv
cjx1aW50OF90PiYgdmVjdG9yLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBhdXRvIHV0
ZjggPSBzdHJpbmcudXRmOCgpOworICAgIHZlY3Rvci5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OF90Kj4odXRmOC5kYXRhKCkpLCB1dGY4Lmxlbmd0aCgpKTsKK30KKworU3RyaW5n
IEhUVFBTZXJ2ZXI6OnBhcnNlUGF0aChjb25zdCBWZWN0b3I8Y2hhcj4mIHJlcXVlc3QpCit7Cisg
ICAgaWYgKCFyZXF1ZXN0LnNpemUoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBjb25zdCBj
aGFyKiBnZXRQYXRoUHJlZml4ID0gIkdFVCAiOworICAgIGNvbnN0IGNoYXIqIHBvc3RQYXRoUHJl
Zml4ID0gIlBPU1QgIjsKKyAgICBjb25zdCBjaGFyKiBwYXRoU3VmZml4ID0gIiBIVFRQLzEuMVxy
XG4iOworICAgIGNvbnN0IGNoYXIqIHBhdGhFbmQgPSBzdHJuc3RyKHJlcXVlc3QuZGF0YSgpLCBw
YXRoU3VmZml4LCByZXF1ZXN0LnNpemUoKSk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShwYXRo
RW5kLCAiSFRUUFNlcnZlciBhc3N1bWVzIHJlcXVlc3QgaXMgSFRUUCAxLjEiKTsKKyAgICBzaXpl
X3QgcGF0aFByZWZpeExlbmd0aCA9IDA7CisgICAgaWYgKCFtZW1jbXAocmVxdWVzdC5kYXRhKCks
IGdldFBhdGhQcmVmaXgsIHN0cmxlbihnZXRQYXRoUHJlZml4KSkpCisgICAgICAgIHBhdGhQcmVm
aXhMZW5ndGggPSBzdHJsZW4oZ2V0UGF0aFByZWZpeCk7CisgICAgZWxzZSBpZiAoIW1lbWNtcChy
ZXF1ZXN0LmRhdGEoKSwgcG9zdFBhdGhQcmVmaXgsIHN0cmxlbihwb3N0UGF0aFByZWZpeCkpKQor
ICAgICAgICBwYXRoUHJlZml4TGVuZ3RoID0gc3RybGVuKHBvc3RQYXRoUHJlZml4KTsKKyAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKHBhdGhQcmVmaXhMZW5ndGgsICJIVFRQU2VydmVyIGFzc3VtZXMg
cmVxdWVzdCBpcyBHRVQgb3IgUE9TVCIpOworICAgIHNpemVfdCBwYXRoTGVuZ3RoID0gcGF0aEVu
ZCAtIHJlcXVlc3QuZGF0YSgpIC0gcGF0aFByZWZpeExlbmd0aDsKKyAgICByZXR1cm4gU3RyaW5n
KHJlcXVlc3QuZGF0YSgpICsgcGF0aFByZWZpeExlbmd0aCwgcGF0aExlbmd0aCk7Cit9CisKIHZv
aWQgSFRUUFNlcnZlcjo6cmVzcG9uZFRvUmVxdWVzdHMoQ29ubmVjdGlvbiBjb25uZWN0aW9uLCBS
ZWY8UmVxdWVzdERhdGE+IHJlcXVlc3REYXRhKQogewogICAgIGNvbm5lY3Rpb24ucmVjZWl2ZUhU
VFBSZXF1ZXN0KFtjb25uZWN0aW9uLCByZXF1ZXN0RGF0YV0gKFZlY3RvcjxjaGFyPiYmIHJlcXVl
c3QpIG11dGFibGUgewpAQCAtMjE5LDMyICsyNDQsMTQgQEAgdm9pZCBIVFRQU2VydmVyOjpyZXNw
b25kVG9SZXF1ZXN0cyhDb25uZWN0aW9uIGNvbm5lY3Rpb24sIFJlZjxSZXF1ZXN0RGF0YT4gcmVx
dWUKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgcmVxdWVzdERhdGEtPnJlcXVlc3RDb3Vu
dCsrOwogCi0gICAgICAgIGNvbnN0IGNoYXIqIGdldFBhdGhQcmVmaXggPSAiR0VUICI7Ci0gICAg
ICAgIGNvbnN0IGNoYXIqIHBvc3RQYXRoUHJlZml4ID0gIlBPU1QgIjsKLSAgICAgICAgY29uc3Qg
Y2hhciogcGF0aFN1ZmZpeCA9ICIgSFRUUC8xLjFcclxuIjsKLSAgICAgICAgY29uc3QgY2hhciog
cGF0aEVuZCA9IHN0cm5zdHIocmVxdWVzdC5kYXRhKCksIHBhdGhTdWZmaXgsIHJlcXVlc3Quc2l6
ZSgpKTsKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShwYXRoRW5kLCAiSFRUUFNlcnZlciBh
c3N1bWVzIHJlcXVlc3QgaXMgSFRUUCAxLjEiKTsKLSAgICAgICAgc2l6ZV90IHBhdGhQcmVmaXhM
ZW5ndGggPSAwOwotICAgICAgICBpZiAoIW1lbWNtcChyZXF1ZXN0LmRhdGEoKSwgZ2V0UGF0aFBy
ZWZpeCwgc3RybGVuKGdldFBhdGhQcmVmaXgpKSkKLSAgICAgICAgICAgIHBhdGhQcmVmaXhMZW5n
dGggPSBzdHJsZW4oZ2V0UGF0aFByZWZpeCk7Ci0gICAgICAgIGVsc2UgaWYgKCFtZW1jbXAocmVx
dWVzdC5kYXRhKCksIHBvc3RQYXRoUHJlZml4LCBzdHJsZW4ocG9zdFBhdGhQcmVmaXgpKSkKLSAg
ICAgICAgICAgIHBhdGhQcmVmaXhMZW5ndGggPSBzdHJsZW4ocG9zdFBhdGhQcmVmaXgpOwotICAg
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHBhdGhQcmVmaXhMZW5ndGgsICJIVFRQU2VydmVyIGFz
c3VtZXMgcmVxdWVzdCBpcyBHRVQgb3IgUE9TVCIpOwotICAgICAgICBzaXplX3QgcGF0aExlbmd0
aCA9IHBhdGhFbmQgLSByZXF1ZXN0LmRhdGEoKSAtIHBhdGhQcmVmaXhMZW5ndGg7Ci0gICAgICAg
IFN0cmluZyBwYXRoKHJlcXVlc3QuZGF0YSgpICsgcGF0aFByZWZpeExlbmd0aCwgcGF0aExlbmd0
aCk7CisgICAgICAgIGF1dG8gcGF0aCA9IHBhcnNlUGF0aChyZXF1ZXN0KTsKICAgICAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShyZXF1ZXN0RGF0YS0+cmVxdWVzdE1hcC5jb250YWlucyhwYXRoKSwg
IlRoaXMgSFRUUFNlcnZlciBkb2VzIG5vdCBrbm93IGhvdyB0byByZXNwb25kIHRvIGEgcmVxdWVz
dCBmb3IgJXMiLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgICAgIGF1dG8gcmVzcG9uc2Ug
PSByZXF1ZXN0RGF0YS0+cmVxdWVzdE1hcC5nZXQocGF0aCk7CiAgICAgICAgIGlmIChyZXNwb25z
ZS50ZXJtaW5hdGVDb25uZWN0aW9uID09IEhUVFBSZXNwb25zZTo6VGVybWluYXRlQ29ubmVjdGlv
bjo6WWVzKQogICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb24udGVybWluYXRlKCk7Ci0gICAg
ICAgIFN0cmluZ0J1aWxkZXIgcmVzcG9uc2VCdWlsZGVyOwotICAgICAgICByZXNwb25zZUJ1aWxk
ZXIuYXBwZW5kKCJIVFRQLzEuMSAiLCByZXNwb25zZS5zdGF0dXNDb2RlLCAnICcsIHN0YXR1c1Rl
eHQocmVzcG9uc2Uuc3RhdHVzQ29kZSksICJcclxuIik7Ci0gICAgICAgIHJlc3BvbnNlQnVpbGRl
ci5hcHBlbmQoIkNvbnRlbnQtTGVuZ3RoOiAiLCByZXNwb25zZS5ib2R5Lmxlbmd0aCgpLCAiXHJc
biIpOwotICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiByZXNwb25zZS5oZWFkZXJGaWVsZHMpCi0g
ICAgICAgICAgICByZXNwb25zZUJ1aWxkZXIuYXBwZW5kKHBhaXIua2V5LCAiOiAiLCBwYWlyLnZh
bHVlLCAiXHJcbiIpOwotICAgICAgICByZXNwb25zZUJ1aWxkZXIuYXBwZW5kKCJcclxuIik7Ci0g
ICAgICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQocmVzcG9uc2UuYm9keSk7Ci0gICAgICAgIGNv
bm5lY3Rpb24uc2VuZChyZXNwb25zZUJ1aWxkZXIudG9TdHJpbmcoKSwgW2Nvbm5lY3Rpb24sIHJl
cXVlc3REYXRhXSB7CisKKyAgICAgICAgY29ubmVjdGlvbi5zZW5kKHJlc3BvbnNlLnNlcmlhbGl6
ZSgpLCBbY29ubmVjdGlvbiwgcmVxdWVzdERhdGFdIHsKICAgICAgICAgICAgIHJlc3BvbmRUb1Jl
cXVlc3RzKGNvbm5lY3Rpb24sIHJlcXVlc3REYXRhKTsKICAgICAgICAgfSk7CiAgICAgfSk7CkBA
IC0zMzQsNiArMzQxLDI5IEBAIHZvaWQgQ29ubmVjdGlvbjo6Y2FuY2VsKCkKICAgICBtX2Nvbm5l
Y3Rpb24gPSBudWxscHRyOwogfQogCitWZWN0b3I8dWludDhfdD4gSFRUUFJlc3BvbnNlOjpib2R5
RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBWZWN0b3I8dWludDhfdD4g
dmVjdG9yOworICAgIGFwcGVuZFVURjhUb1ZlY3Rvcih2ZWN0b3IsIHN0cmluZyk7CisgICAgcmV0
dXJuIHZlY3RvcjsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEhUVFBSZXNwb25zZTo6c2VyaWFsaXpl
KEluY2x1ZGVDb250ZW50TGVuZ3RoIGluY2x1ZGVDb250ZW50TGVuZ3RoKQoreworICAgIFN0cmlu
Z0J1aWxkZXIgcmVzcG9uc2VCdWlsZGVyOworICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQoIkhU
VFAvMS4xICIsIHN0YXR1c0NvZGUsICcgJywgc3RhdHVzVGV4dChzdGF0dXNDb2RlKSwgIlxyXG4i
KTsKKyAgICBpZiAoaW5jbHVkZUNvbnRlbnRMZW5ndGggPT0gSW5jbHVkZUNvbnRlbnRMZW5ndGg6
OlllcykKKyAgICAgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZCgiQ29udGVudC1MZW5ndGg6ICIs
IGJvZHkuc2l6ZSgpLCAiXHJcbiIpOworICAgIGZvciAoYXV0byYgcGFpciA6IGhlYWRlckZpZWxk
cykKKyAgICAgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZChwYWlyLmtleSwgIjogIiwgcGFpci52
YWx1ZSwgIlxyXG4iKTsKKyAgICByZXNwb25zZUJ1aWxkZXIuYXBwZW5kKCJcclxuIik7CisgICAg
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ5dGVzVG9TZW5kOworICAgIGFwcGVuZFVURjhUb1ZlY3Rv
cihieXRlc1RvU2VuZCwgcmVzcG9uc2VCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIGJ5dGVzVG9T
ZW5kLmFwcGVuZFZlY3Rvcihib2R5KTsKKyAgICByZXR1cm4gYnl0ZXNUb1NlbmQ7Cit9CisKIHZv
aWQgSDI6OkNvbm5lY3Rpb246OnNlbmQoRnJhbWUmJiBmcmFtZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewogICAgIGF1dG8gZnJhbWVUeXBl
ID0gZnJhbWUudHlwZSgpOwo=
</data>
<flag name="commit-queue"
          id="438942"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>