<?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>191191</bug_id>
          
          <creation_ts>2018-11-02 06:37:28 -0700</creation_ts>
          <short_desc>[GStreamer] Decoding media-capabilities configuration initial support</short_desc>
          <delta_ts>2019-04-01 14:00:57 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>191189</dependson>
          <blocked>186391</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Philippe Normand">pnormand</reporter>
          <assigned_to name="Philippe Normand">pnormand</assigned_to>
          <cc>aboya</cc>
    
    <cc>calvaris</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1474461</commentid>
    <comment_count>0</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-11-02 06:37:28 -0700</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1474467</commentid>
    <comment_count>1</comment_count>
      <attachid>353693</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-11-02 06:56:15 -0700</bug_when>
    <thetext>Created attachment 353693
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1474470</commentid>
    <comment_count>2</comment_count>
      <attachid>353693</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-11-02 07:02:49 -0700</bug_when>
    <thetext>Comment on attachment 353693
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:575
&gt; +    auto&amp; gstRegistryScanner = GstRegistryScanner::singleton();

oops should use MSE scanner here. Will fix up</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1474471</commentid>
    <comment_count>3</comment_count>
      <attachid>353695</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-11-02 07:04:03 -0700</bug_when>
    <thetext>Created attachment 353695
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1474483</commentid>
    <comment_count>4</comment_count>
      <attachid>353700</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-11-02 07:50:29 -0700</bug_when>
    <thetext>Created attachment 353700
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1474498</commentid>
    <comment_count>5</comment_count>
      <attachid>353700</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2018-11-02 08:38:53 -0700</bug_when>
    <thetext>Comment on attachment 353700
Patch

As spoken with Phil in private, it looks like this patch has issues so it needs more work. Removing flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1474529</commentid>
    <comment_count>6</comment_count>
      <attachid>353707</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-11-02 10:03:33 -0700</bug_when>
    <thetext>Created attachment 353707
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1474532</commentid>
    <comment_count>7</comment_count>
      <attachid>353707</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-11-02 10:04:42 -0700</bug_when>
    <thetext>Comment on attachment 353707
Patch

webkit-patch screwed up</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1474559</commentid>
    <comment_count>8</comment_count>
      <attachid>353714</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-11-02 10:46:23 -0700</bug_when>
    <thetext>Created attachment 353714
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475002</commentid>
    <comment_count>9</comment_count>
      <attachid>353838</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-11-05 02:01:52 -0800</bug_when>
    <thetext>Created attachment 353838
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475003</commentid>
    <comment_count>10</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2018-11-05 02:02:57 -0800</bug_when>
    <thetext>EWS should process the patch now. Please review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475029</commentid>
    <comment_count>11</comment_count>
      <attachid>353838</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2018-11-05 04:24:22 -0800</bug_when>
    <thetext>Comment on attachment 353838
Patch

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

There are still some things, mainly style I&apos;d like to discuss, but it&apos;s overall a very nice rework! Thx!

&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:23
&gt; +#include &quot;GstRegistryScanner.h&quot;

This include should be just below config.h

&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:53
&gt; +    GST_DEBUG(&quot;%s registry scanner initialized&quot;, m_isMediaSource ? &quot;MSE&quot;:&quot;non-MSE&quot;);

&quot;MSE&quot;  : &quot;Regular playback&quot;, mind the space around the semicolon

&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:57
&gt; +        GST_DEBUG(&quot;%s codec pattern registered: %s&quot;, item.value ? &quot;Hardware&quot;:&quot;Software&quot;, item.key.string().utf8().data());

mind the space around the semicolon

&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:70
&gt; +GstRegistryScanner::RegistryLookupResult GstRegistryScanner::gstRegistryHasElementForMediaType(GList* elementFactories, const char* capsString, bool checkHardwareClassifier)

shouldCheckHardwareClassifier

&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:75
&gt; +    bool supported = candidates;
&gt; +    bool usingHardware = false;

isSupported
isUsingHardware

&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:274
&gt; +bool GstRegistryScanner::supportsCodec(String codec, bool usingHardware) const

isUsingHardware or from what I understand, shouldCheckForHardwareUse

&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:285
&gt; +            return usingHardware ? item.value : true;

An alternative way could be: return !usingHardware || item.value;

&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:288
&gt; +    GST_LOG(&quot;Unsupported&quot;);

You&apos;re logging only if a codec is not supported and I think it would expect all checks to be logged. Maybe something like :

...

bool supported { false };
for (...) {
   if (!fnmatch(...)) { // Note you don&apos;t need the variable
        supported = !usingHardware || item.value;
        break;
    }
}

GST_DEBUG(&quot;Checked %s codec \&quot;%s\&quot; supported %s&quot;, usingHardware ? &quot;hardware&quot; : &quot;software&quot;, codec.utf8().data(), boolForPrinting(supported));

return supported;

&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:292
&gt; +bool GstRegistryScanner::supportsAllCodecs(const Vector&lt;String&gt;&amp; codecs, bool usingHardware) const

ditto

&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:302
&gt; +bool GstRegistryScanner::isDecodingSupported(MediaConfiguration&amp; configuration, bool* usingHardware) const

From what I see in this patch, we always check for hardware when calling this, so a better signature would be:

RegistryLookupResult GstRegisterScanner::isDecodingSupported(MediaConfiguracion&amp; configuration) const

Either that our use std::pair&lt;bool, bool&gt;.

Of course, please get rid of all checks for nullptr.

&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.h:47
&gt; +    bool supportsCodec(String codec, bool usingHardware = false) const;
&gt; +    bool supportsAllCodecs(const Vector&lt;String&gt;&amp; codecs, bool usingHardware = false) const;

isCodecSupported
areAllCodecsSupported

&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.h:70
&gt; +        bool usingHardware;

Considering that there are some methods returning this that can answer without checking for hardware support (if requested in the function signature) I would type this as std::optional&lt;bool&gt; so that you can leave it as nullopt if you are not checking for it.

Actually I don&apos;t kind of like the assumption of considering a bunch of codecs just as software because we don&apos;t check them, I think we should consider them as hardware support unknown. This is not a strong request, just a suggestion.

If you still prefer to consider unknown hardware support as false, I would recommend to turn this into an enum like NotSupported, SoftwareSupported, HardwareSupported.

&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.h:74
&gt; +    RegistryLookupResult gstRegistryHasElementForMediaType(GList* elementFactories, const char* capsString, bool checkHardwareClassifier = false);

I think doesHaveElementForMediaType is a better name. I don&apos;t understand why you prefixed the class name here.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaEngineConfigurationFactoryGStreamer.cpp:57
&gt; +    bool usingHardware = false;

isUsingHardware

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:2244
&gt; +        if (codecs.isEmpty())
&gt; +            result = MediaPlayer::MayBeSupported;
&gt; +        else
&gt; +            result = gstRegistryScanner.supportsAllCodecs(codecs) ? MediaPlayer::IsSupported : MediaPlayer::IsNotSupported;

We can write it as result = codecs.isEmpty() ? ... : ...

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:167
&gt; +    if (type.endsWith(&quot;mp4&quot;) || type.endsWith(&quot;aac&quot;))

This seems to be new, out of refactor scope, right? why?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1506132</commentid>
    <comment_count>12</comment_count>
      <attachid>353838</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-02-14 06:45:06 -0800</bug_when>
    <thetext>Comment on attachment 353838
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:285
&gt;&gt; +            return usingHardware ? item.value : true;
&gt; 
&gt; An alternative way could be: return !usingHardware || item.value;

How is it better? I think I prefer mine because it&apos;s more explicit :)

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.h:70
&gt;&gt; +        bool usingHardware;
&gt; 
&gt; Considering that there are some methods returning this that can answer without checking for hardware support (if requested in the function signature) I would type this as std::optional&lt;bool&gt; so that you can leave it as nullopt if you are not checking for it.
&gt; 
&gt; Actually I don&apos;t kind of like the assumption of considering a bunch of codecs just as software because we don&apos;t check them, I think we should consider them as hardware support unknown. This is not a strong request, just a suggestion.
&gt; 
&gt; If you still prefer to consider unknown hardware support as false, I would recommend to turn this into an enum like NotSupported, SoftwareSupported, HardwareSupported.

I&apos;m sorry, I don&apos;t see what&apos;s wrong with this code :)

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.h:74
&gt;&gt; +    RegistryLookupResult gstRegistryHasElementForMediaType(GList* elementFactories, const char* capsString, bool checkHardwareClassifier = false);
&gt; 
&gt; I think doesHaveElementForMediaType is a better name. I don&apos;t understand why you prefixed the class name here.

As many things in this patch, this is the result of a refactoring. gstRegistryHasElementForMediaType was the name used for the previous implementation in GStreamerCommon.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:167
&gt;&gt; +    if (type.endsWith(&quot;mp4&quot;) || type.endsWith(&quot;aac&quot;))
&gt; 
&gt; This seems to be new, out of refactor scope, right? why?

As documented in the ChangeLog:
* platform/graphics/gstreamer/mse/AppendPipeline.cpp: Ditto. Also
        plug qtdemux for AAC containers, this is an explicit consequence
        of finer-grained codecs probing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1506133</commentid>
    <comment_count>13</comment_count>
      <attachid>362011</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-02-14 06:46:53 -0800</bug_when>
    <thetext>Created attachment 362011
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1506524</commentid>
    <comment_count>14</comment_count>
      <attachid>362011</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2019-02-15 01:50:11 -0800</bug_when>
    <thetext>Comment on attachment 362011
Patch

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

I will answer your comments in another entry.

&gt; Source/WebCore/platform/GStreamer.cmake:31
&gt; +        platform/graphics/gstreamer/mse/GstRegistryScannerMSE.cpp

I think we should call this GStreamerRegistryScanner.

&gt; Source/WebCore/platform/graphics/MediaPlayer.cpp:1621
&gt; +String convertEnumerationToString(MediaPlayerEnums::SupportsType enumerationValue)

You could most probably make this a const String&amp;, but we could leave this for a follow up patch for this and the rest of overloads.

&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:25
&gt; +#include &quot;GRefPtrGStreamer.h&quot;

I&apos;d recommend GStreamerCommon.h instead.

&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:73
&gt; +    bool isSupported = candidates;

If I am not wrong you can move this below.

&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:77
&gt; +        for (GList* factories = candidates; factories != nullptr; factories = g_list_next(factories)) {

!factories

&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:145
&gt; +        m_codecMap.add(AtomicString(&quot;mpeg&quot;), false);
&gt; +        m_codecMap.add(AtomicString(&quot;mp4a*&quot;), false);

Why are we always assuming that this does not have hardware support? Isn&apos;t it better to check it the result for hardware support? Same for opus and vorbis, speex, etc

&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:278
&gt; +        codec = codec.substring(slashIndex+1);

spaces around +

&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:310
&gt; +        GST_DEBUG(&quot;Checking support for video configuration: \&quot;%s\&quot; size: %ux%u bitrate: %&quot; G_GUINT64_FORMAT &quot; framerate: %f&quot;, videoConfiguration.contentType.utf8().data(), videoConfiguration.width, videoConfiguration.height, videoConfiguration.bitrate, videoConfiguration.framerate);

This line is too long

&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:321
&gt; +        GST_DEBUG(&quot;Checking support for audio configuration: \&quot;%s\&quot; %s channels, bitrate: %&quot; G_GUINT64_FORMAT &quot; samplerate: %u&quot;, audioConfiguration.contentType.utf8().data(), audioConfiguration.channels.utf8().data(), audioConfiguration.bitrate, audioConfiguration.samplerate);

ditto

&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.h:43
&gt; +    bool supportsContainerType(String containerType) const { return m_mimeTypeSet.contains(containerType); }

isContainerTypeSupported

&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.h:47
&gt; +        bool supported;
&gt; +        bool usingHardware;

isSupported and isUsingHardware.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1506527</commentid>
    <comment_count>15</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2019-02-15 02:03:25 -0800</bug_when>
    <thetext>(In reply to Philippe Normand from comment #12)
&gt; &gt;&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:285
&gt; &gt;&gt; +            return usingHardware ? item.value : true;
&gt; &gt; 
&gt; &gt; An alternative way could be: return !usingHardware || item.value;
&gt; 
&gt; How is it better? I think I prefer mine because it&apos;s more explicit :)

Just a preference, your call.

&gt; &gt;&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.h:70
&gt; &gt;&gt; +        bool usingHardware;
&gt; &gt; 
&gt; &gt; Considering that there are some methods returning this that can answer without checking for hardware support (if requested in the function signature) I would type this as std::optional&lt;bool&gt; so that you can leave it as nullopt if you are not checking for it.
&gt; &gt; 
&gt; &gt; Actually I don&apos;t kind of like the assumption of considering a bunch of codecs just as software because we don&apos;t check them, I think we should consider them as hardware support unknown. This is not a strong request, just a suggestion.
&gt; &gt; 
&gt; &gt; If you still prefer to consider unknown hardware support as false, I would recommend to turn this into an enum like NotSupported, SoftwareSupported, HardwareSupported.
&gt; 
&gt; I&apos;m sorry, I don&apos;t see what&apos;s wrong with this code :)

What I see wrong here is two things. The first I already commented about inline in the new patch, for some codec you&apos;re not checking if they have hardware support, just assuming false.

The second is that IMHO, I think you shouldn&apos;t assume false. IMHO you should have three values, Unknown, No and Yes. Another way of having three values is using WTF::Optional and considering nullopt as non-checked.

If you still think having three values is not useful, my initial recommendation was to use an enum NotSupported, SoftwareSupported and HardwareSupported but now that I had a closed look to the result struct, I find it nicer than before so I won&apos;t tell you anything about this.

Summing up, I don&apos;t understand why you don&apos;t always initialize hardware support and assume false in some cases or consider having three values if you don&apos;t always check for hardware. This is my opinion about the code, I won&apos;t object if you land it as it is now either.

&gt; &gt;&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.h:74
&gt; &gt;&gt; +    RegistryLookupResult gstRegistryHasElementForMediaType(GList* elementFactories, const char* capsString, bool checkHardwareClassifier = false);
&gt; &gt; 
&gt; &gt; I think doesHaveElementForMediaType is a better name. I don&apos;t understand why you prefixed the class name here.
&gt; 
&gt; As many things in this patch, this is the result of a refactoring.
&gt; gstRegistryHasElementForMediaType was the name used for the previous
&gt; implementation in GStreamerCommon.

Yes, I know it is a refactoring and a nice one. But this being a refactoring is not a reason to unprefix a function when you move it inside a class with other unprefixed methods. Please change this.

&gt; &gt;&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:167
&gt; &gt;&gt; +    if (type.endsWith(&quot;mp4&quot;) || type.endsWith(&quot;aac&quot;))
&gt; &gt; 
&gt; &gt; This seems to be new, out of refactor scope, right? why?
&gt; 
&gt; As documented in the ChangeLog:
&gt; * platform/graphics/gstreamer/mse/AppendPipeline.cpp: Ditto. Also
&gt;         plug qtdemux for AAC containers, this is an explicit consequence
&gt;         of finer-grained codecs probing.

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1506532</commentid>
    <comment_count>16</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-02-15 02:25:00 -0800</bug_when>
    <thetext>I&apos;m checking for hardware support only for video decoders because the gst element klass Hardware classifier is currently used only for video decoders and moreover, audio decoding usually doesn&apos;t rely on specific hardware anyway (please correct me if this is wrong)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1506540</commentid>
    <comment_count>17</comment_count>
      <attachid>362011</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-02-15 03:27:35 -0800</bug_when>
    <thetext>Comment on attachment 362011
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:73
&gt;&gt; +    bool isSupported = candidates;
&gt; 
&gt; If I am not wrong you can move this below.

Just before the gst_plugin_feature_list_free() then? It doesn&apos;t make much difference, I also prefer to have both vars initialized at the same place. It&apos;s a nit anyway :)

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:77
&gt;&gt; +        for (GList* factories = candidates; factories != nullptr; factories = g_list_next(factories)) {
&gt; 
&gt; !factories

s/!// :)

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:145
&gt;&gt; +        m_codecMap.add(AtomicString(&quot;mp4a*&quot;), false);
&gt; 
&gt; Why are we always assuming that this does not have hardware support? Isn&apos;t it better to check it the result for hardware support? Same for opus and vorbis, speex, etc

Because audio decoders don&apos;t require special hardware</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1506545</commentid>
    <comment_count>18</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2019-02-15 04:22:41 -0800</bug_when>
    <thetext>(In reply to Philippe Normand from comment #16)
&gt; I&apos;m checking for hardware support only for video decoders because the gst
&gt; element klass Hardware classifier is currently used only for video decoders
&gt; and moreover, audio decoding usually doesn&apos;t rely on specific hardware
&gt; anyway (please correct me if this is wrong)

Never checked that but it you think so, feel free to keep it.

(In reply to Philippe Normand from comment #17)
&gt; &gt;&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:73
&gt; &gt;&gt; +    bool isSupported = candidates;
&gt; &gt; 
&gt; &gt; If I am not wrong you can move this below.
&gt; 
&gt; Just before the gst_plugin_feature_list_free() then? It doesn&apos;t make much
&gt; difference, I also prefer to have both vars initialized at the same place.
&gt; It&apos;s a nit anyway :)

WebKit coding style, right?

&gt; &gt;&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:77
&gt; &gt;&gt; +        for (GList* factories = candidates; factories != nullptr; factories = g_list_next(factories)) {
&gt; &gt; 
&gt; &gt; !factories
&gt; 
&gt; s/!// :)

True!

&gt; &gt;&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:145
&gt; &gt;&gt; +        m_codecMap.add(AtomicString(&quot;mp4a*&quot;), false);
&gt; &gt; 
&gt; &gt; Why are we always assuming that this does not have hardware support? Isn&apos;t it better to check it the result for hardware support? Same for opus and vorbis, speex, etc
&gt; 
&gt; Because audio decoders don&apos;t require special hardware</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1506547</commentid>
    <comment_count>19</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-02-15 04:51:56 -0800</bug_when>
    <thetext>(In reply to Xabier Rodríguez Calvar from comment #18)
&gt; 
&gt; (In reply to Philippe Normand from comment #17)
&gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/gstreamer/GstRegistryScanner.cpp:73
&gt; &gt; &gt;&gt; +    bool isSupported = candidates;
&gt; &gt; &gt; 
&gt; &gt; &gt; If I am not wrong you can move this below.
&gt; &gt; 
&gt; &gt; Just before the gst_plugin_feature_list_free() then? It doesn&apos;t make much
&gt; &gt; difference, I also prefer to have both vars initialized at the same place.
&gt; &gt; It&apos;s a nit anyway :)
&gt; 
&gt; WebKit coding style, right?
&gt; 

https://webkit.org/code-style-guidelines/ doesn&apos;t mention this.

The style bot is green as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1506560</commentid>
    <comment_count>20</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-02-15 06:24:41 -0800</bug_when>
    <thetext>Committed r241585: &lt;https://trac.webkit.org/changeset/241585&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1506561</commentid>
    <comment_count>21</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-02-15 06:30:32 -0800</bug_when>
    <thetext>&lt;rdar://problem/48109225&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522997</commentid>
    <comment_count>22</comment_count>
      <attachid>362011</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2019-04-01 12:22:24 -0700</bug_when>
    <thetext>Comment on attachment 362011
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:146
&gt; +    if (type.endsWith(&quot;mp4&quot;) || type.endsWith(&quot;aac&quot;))

audio/x-aac? Where have you found that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1523050</commentid>
    <comment_count>23</comment_count>
      <attachid>362011</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-04-01 14:00:57 -0700</bug_when>
    <thetext>Comment on attachment 362011
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:146
&gt;&gt; +    if (type.endsWith(&quot;mp4&quot;) || type.endsWith(&quot;aac&quot;))
&gt; 
&gt; audio/x-aac? Where have you found that?

why are you talking about x-aac? IIRC I changed this because some MSE layout tests were failing after my changes.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>353693</attachid>
            <date>2018-11-02 06:56:15 -0700</date>
            <delta_ts>2018-11-02 07:03:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191191-20181102135613.patch</filename>
            <type>text/plain</type>
            <size>58071</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3NzI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2M5NjYzNzM1Y2Q4YjJk
MDJlZmVlMmQzNzc5OWQ0MzFiY2NlNjcwYS4uOWVkYjM0OGVmZjU1YTY4YzJiYmY0MWIyZTJlOTJh
ZmM2NWUzYzkxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDE4LTExLTAyICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBEZWNvZGluZyBtZWRpYS1jYXBhYmlsaXRpZXMgY29uZmlndXJhdGlvbiBpbml0aWFsIHN1cHBv
cnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTE5
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggZW5hYmxlcyBiYXNpYyBwbGF0Zm9ybSBwcm9iaW5nIGZvciBHU3RyZWFtZXIgZGVjb2Rl
cnMsCisgICAgICAgIG9wdGlvbmFsbHkgdXNpbmcgSGFyZHdhcmUgZGVjb2RpbmcgY2FwYWJpbGl0
aWVzLiBUaGUgcHJldmlvdXMgY29kZQorICAgICAgICBmb3IgZGVjb2RlcnMvZGVtdXhlcnMgcHJv
YmluZyBwYXJ0aWFsbHkgZHVwbGljYXRlZCBiZXR3ZWVuIHRoZSBNU0UKKyAgICAgICAgcGxheWVy
IGFuZCBpdHMgcGFyZW50IGNsYXNzIHdhcyBtb3ZlZCB0byBhIG5ldyBtb2R1bGUgY2FsbGVkCisg
ICAgICAgIEdzdFJlZ2lzdHJ5U2Nhbm5lci4gVGhlcmUgaXMgb25lIGluc3RhbmNlIG9mIGl0IGZv
ciB0aGUgTVNFIHBsYXllcgorICAgICAgICBhbmQgb25lIGZvciB0aGUgcGFyZW50IGNsYXNzLgor
CisgICAgICAgIFRoZSBzY2FubmVyIGNhbiBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBH
c3RFbGVtZW50IEhhcmR3YXJlCisgICAgICAgIG1ldGFkYXRhIGNsYXNzaWZpZXIgaW4gZGVjb2Rl
cnMgYW5kIHRodXMgYWR2aXNlIHRoZQorICAgICAgICBNZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25G
YWN0b3J5R1N0cmVhbWVyIHRoYXQgaGFyZHdhcmUgZGVjb2RpbmcgaXMKKyAgICAgICAgc3VwcG9y
dGVkIG9yIG5vdC4gVGhpcyBpcyBvbmx5IGEgZmlyc3Qgc3RlcCB0aG91Z2guIFRoZSBzY2FubmVy
CisgICAgICAgIHNob3VsZCBhbHNvIHByb2JhYmx5IGF0dGVtcHQgYSBOVUxMLT5SRUFEWSB0cmFu
c2l0aW9uIG9uIGRlY29kZXJzCisgICAgICAgIHRvIHZhbGlkYXRlIHNwZWNpZmljIGlucHV0IGNh
cHMgYXJlIHN1cHBvcnRlZC4gQXMgdGhpcyBtaWdodAorICAgICAgICByZXF1aXJlIGNoYW5nZXMg
aW4gR1N0cmVhbWVyLCB0aGlzIHBhcnQgb2YgdGhlIHBhdGNoIHdhc24ndAorICAgICAgICBpbmNs
dWRlZC4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIGNvdmVyZWQgYnkgdGhlIGV4aXN0aW5nIG1l
ZGlhIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlOiBOZXcgZmls
ZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOiBBZGQgc3Vw
cG9ydCBmb3IgY29udmVydGluZworICAgICAgICBTdXBwb3J0c1R5cGUgZW51bSB0byBzdHJpbmcu
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaDogRGl0dG8uCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJFbnVtcy5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcDogTW92ZQorICAgICAg
ICBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUgdG8gR3N0UmVnaXN0cnlTY2FubmVy
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24u
aDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dzdFJlZ2lz
dHJ5U2Nhbm5lci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2Fu
bmVyOjpzaW5nbGV0b24pOgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjpH
c3RSZWdpc3RyeVNjYW5uZXIpOiBJbml0aWFsaXplCisgICAgICAgIHN1cHBvcnRlZCBtaW1lLXR5
cGVzIGFuZCBjb2RlY3MgZnJvbSB0aGUgR1N0cmVhbWVyIHJlZ2lzdHJ5LgorICAgICAgICAoV2Vi
Q29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjp+R3N0UmVnaXN0cnlTY2FubmVyKTogRnJlZSB0aGUg
ZWxlbWVudCBmYWN0b3JpZXMuCisgICAgICAgIChXZWJDb3JlOjpHc3RSZWdpc3RyeVNjYW5uZXI6
OmdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZSk6CisgICAgICAgIENoZWNrIHRoZSBp
bnB1dCBjYXBzIGFyZSBzdXBwb3J0ZWQsIG9wdGlvbmFsbHkgdXNpbmcgaGFyZHdhcmUKKyAgICAg
ICAgZGV2aWNlLgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjpmaWxsTWlt
ZVR5cGVTZXRGcm9tQ2Fwc01hcHBpbmcpOgorICAgICAgICBNb3ZlZCBmcm9tIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcnssTVNFfS4KKyAgICAgICAgKFdlYkNvcmU6OkdzdFJlZ2lzdHJ5U2Nh
bm5lcjo6aW5pdGlhbGl6ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlT
Y2FubmVyOjpzdXBwb3J0c0NvZGVjIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpH
c3RSZWdpc3RyeVNjYW5uZXI6OnN1cHBvcnRzQWxsQ29kZWNzIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpHc3RSZWdpc3RyeVNjYW5uZXI6OmlzRGVjb2RpbmdTdXBwb3J0ZWQgY29u
c3QpOiBDaGVjaworICAgICAgICB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBpcyBzdXBwb3J0ZWQu
IEZvciBub3cgaGFyZHdhcmUgc3VwcG9ydCBpcworICAgICAgICBjaGVja2VkIGZvciB2aWRlbyBj
b25maWd1cmF0aW9ucyBvbmx5IGFzIGl0IGlzIHF1aXRlIHVuY29tbW9uCisgICAgICAgIGFueXdh
eSB0byBoYXZlIGhhcmR3YXJlLWVuYWJsZWQgYXVkaW8gZGVjb2RlcnMuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dzdFJlZ2lzdHJ5U2Nhbm5lci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdzdFJlZ2lzdHJ5U2Nhbm5lcjo6bWltZVR5cGVTZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjpzdXBwb3J0c0NvbnRhaW5lclR5cGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjpSZWdpc3RyeUxvb2t1
cFJlc3VsdDo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlHU3RyZWFtZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU1lZGlhUGxheWVyRGVjb2RpbmdDb25m
aWd1cmF0aW9uR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeUdTdHJlYW1lci5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmNwcDoKKyAgICAgICAgUmVseSBvbiBuZXcgR3N0UmVnaXN0cnlTY2FubmVyIGFuZCBh
ZGQgc29tZSBkZWJ1Z2dpbmcgbWFjcm9zLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpnZXRTdXBwb3J0ZWRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzVHlwZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHA6IERpdHRvLiBB
bHNvCisgICAgICAgIHBsdWcgcXRkZW11eCBmb3IgQUFDIGNvbnRhaW5lcnMsIHRoaXMgaXMgYW4g
ZXhwbGljaXQgY29uc2VxdWVuY2UKKyAgICAgICAgb2YgZmluZXItZ3JhaW5lZCBjb2RlY3MgcHJv
YmluZy4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpBcHBlbmRQaXBlbGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6cGFyc2VEZW11eGVyU3JjUGFkQ2Fw
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Hc3RSZWdpc3Ry
eVNjYW5uZXJNU0UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdzdFJlZ2lzdHJ5U2Nh
bm5lck1TRTo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdzdFJlZ2lzdHJ5U2Nhbm5l
ck1TRTo6R3N0UmVnaXN0cnlTY2FubmVyTVNFKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvbXNlL0dzdFJlZ2lzdHJ5U2Nhbm5lck1TRS5oOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRS5jcHA6CisgICAgICAgIFJlbHkgb24gbmV3IEdzdFJlZ2lzdHJ5U2Nhbm5lciBhbmQg
YWRkIHNvbWUgZGVidWdnaW5nIG1hY3Jvcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzdXBwb3J0c1R5cGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFLmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFF
bmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmYWN0b3Jp
ZXMpOiBHU3RyZWFtZXIgc3VwcG9ydC4KKwogMjAxOC0xMS0wMiAgUGhpbGlwcGUgTm9ybWFuZCAg
PHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl0gTW92ZSBlbGVtZW50
cyByZWdpc3RyYXRpb24gdG8gR1N0cmVhbWVyQ29tbW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9H
U3RyZWFtZXIuY21ha2UKaW5kZXggZDlhMWZkYjMwYzQyMGYwOTgxYmZlZWY0ZGNkZjRjOTZhZmRk
YTI1ZC4uYmEyNTdhZGU2OGY4ZGZkYmEwNTQ1ZDFiMTJhOTZmMmQyZTg1NWY1OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQpAQCAtMTAsNyArMTAsOSBAQCBpZiAoRU5B
QkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8pCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR3N0QWxsb2NhdG9yRmFzdE1hbGxvYy5jcHAKKyAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dzdFJlZ2lzdHJ5U2Nhbm5lci5jcHAKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuY3Bw
CisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYUVuZ2luZUNvbmZpZ3Vy
YXRpb25GYWN0b3J5R1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmNw
cApAQCAtMjYsNiArMjgsNyBAQCBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8p
CiAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGlu
ZS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9HU3RyZWFtZXJN
ZWRpYURlc2NyaXB0aW9uLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
bXNlL0dzdFJlZ2lzdHJ5U2Nhbm5lck1TRS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFt
ZXJNU0UuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFT
b3VyY2VHU3RyZWFtZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9NZWRpYVBsYXllci5jcHAKaW5kZXggZTdlOTA1MmI4MGQxMzdjNmI3ZGViMDRjNWNkZTBhYTYx
ZTMxOTU2Zi4uMTgwZmVjODc2MGFhYmY1ZDUyODJlMTNmMTAxYmY0Mjg4ZmQzZjU4ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcApAQCAt
MTYwMyw2ICsxNjAzLDIwIEBAIFN0cmluZyBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhNZWRp
YVBsYXllckVudW1zOjpQcmVsb2FkIGVudW1lcmF0aW9uVmFsdWUpCiAgICAgcmV0dXJuIHZhbHVl
c1tzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXTsKIH0KIAorU3RyaW5nIGNv
bnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBl
bnVtZXJhdGlvblZhbHVlKQoreworICAgIHN0YXRpYyBjb25zdCBOZXZlckRlc3Ryb3llZDxTdHJp
bmc+IHZhbHVlc1tdID0geworICAgICAgICBNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiSXNOb3RT
dXBwb3J0ZWQiKSwKKyAgICAgICAgTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIklzU3VwcG9ydGVk
IiksCisgICAgICAgIE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJNYXlCZVN1cHBvcnRlZCIpLAor
ICAgIH07CisgICAgc3RhdGljX2Fzc2VydCghc3RhdGljX2Nhc3Q8c2l6ZV90PihNZWRpYVBsYXll
ckVudW1zOjpJc05vdFN1cHBvcnRlZCksICJNZWRpYVBsYXllckVudW1zOjpJc05vdFN1cHBvcnRl
ZCBpcyBub3QgMCBhcyBleHBlY3RlZCIpOworICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8
c2l6ZV90PihNZWRpYVBsYXllckVudW1zOjpJc1N1cHBvcnRlZCkgPT0gMSwgIk1lZGlhUGxheWVy
RW51bXM6OklzU3VwcG9ydGVkIGlzIG5vdCAxIGFzIGV4cGVjdGVkIik7CisgICAgc3RhdGljX2Fz
c2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KE1lZGlhUGxheWVyRW51bXM6Ok1heUJlU3VwcG9ydGVk
KSA9PSAyLCAiTWVkaWFQbGF5ZXJFbnVtczo6TWF5QmVTdXBwb3J0ZWQgaXMgbm90IDIgYXMgZXhw
ZWN0ZWQiKTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVl
KSA8IFdURl9BUlJBWV9MRU5HVEgodmFsdWVzKSk7CisgICAgcmV0dXJuIHZhbHVlc1tzdGF0aWNf
Y2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXTsKK30KKwogfQogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCmluZGV4IDAxZGQ5
NjVlOWE2ZDZjNWZmZDI2NzlhMzFmNWUxYzUwODUyNjgzYTMuLmRhMjEzMGYwMTA0YTNlZmFiNmNj
MzU5OWNmNzVjNTg5NTc2M2FmZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuaApAQCAtMjUyLDggKzI1Miw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IGludmFsaWRhdGUoKTsKIAogICAgIC8vIE1lZGlhIGVuZ2luZSBzdXBwb3J0LgotICAgIGVudW0g
U3VwcG9ydHNUeXBlIHsgSXNOb3RTdXBwb3J0ZWQsIElzU3VwcG9ydGVkLCBNYXlCZVN1cHBvcnRl
ZCB9OwotICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShj
b25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJik7CisgICAgdXNpbmcgTWVkaWFQbGF5
ZXJFbnVtczo6U3VwcG9ydHNUeXBlOworICAgIHN0YXRpYyBTdXBwb3J0c1R5cGUgc3VwcG9ydHNU
eXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmKTsKICAgICBzdGF0aWMgdm9p
ZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVI
YXNoPiYpOwogICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CiAgICAgc3RhdGljIEhhc2hT
ZXQ8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4gb3JpZ2luc0luTWVkaWFDYWNoZShjb25zdCBTdHJp
bmcmIHBhdGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5ZXJFbnVtcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXJFbnVtcy5oCmluZGV4IDA2ZjBjY2QyOGQ2YWI5ZjQzZjYxYmVmMjdlYjFmMzBiZGU2
MmRkNDYuLjk1MGUwZWQyODdlYjMyMWE0OWE1NDIzZTYzMTMxYWEwOTI3MGNiNjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyRW51bXMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllckVudW1zLmgK
QEAgLTM2LDYgKzM2LDcgQEAgcHVibGljOgogICAgIGVudW0gTW92aWVMb2FkVHlwZSB7IFVua25v
d24sIERvd25sb2FkLCBTdG9yZWRTdHJlYW0sIExpdmVTdHJlYW0gfTsKICAgICBlbnVtIFByZWxv
YWQgeyBOb25lLCBNZXRhRGF0YSwgQXV0byB9OwogICAgIGVudW0gVmlkZW9HcmF2aXR5IHsgVmlk
ZW9HcmF2aXR5UmVzaXplLCBWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QsIFZpZGVvR3Jhdml0eVJl
c2l6ZUFzcGVjdEZpbGwgfTsKKyAgICBlbnVtIFN1cHBvcnRzVHlwZSB7IElzTm90U3VwcG9ydGVk
LCBJc1N1cHBvcnRlZCwgTWF5QmVTdXBwb3J0ZWQgfTsKICAgICBlbnVtIHsKICAgICAgICAgVmlk
ZW9GdWxsc2NyZWVuTW9kZU5vbmUgPSAwLAogICAgICAgICBWaWRlb0Z1bGxzY3JlZW5Nb2RlU3Rh
bmRhcmQgPSAxIDw8IDAsCkBAIC00Nyw2ICs0OCw3IEBAIHB1YmxpYzoKIFdURjo6U3RyaW5nIGNv
bnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKE1lZGlhUGxheWVyRW51bXM6OlJlYWR5U3RhdGUpOwog
V1RGOjpTdHJpbmcgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoTWVkaWFQbGF5ZXJFbnVtczo6
TmV0d29ya1N0YXRlKTsKIFdURjo6U3RyaW5nIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKE1l
ZGlhUGxheWVyRW51bXM6OlByZWxvYWQpOworV1RGOjpTdHJpbmcgY29udmVydEVudW1lcmF0aW9u
VG9TdHJpbmcoTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCmluZGV4IDUyNjQ5YmJhN2Fi
OGM0ZDlhYjc1MzlhZTMyOTk2NDgzODM4MWZjOTkuLmM2OGFhOTZhMjIzYzkyNTg3MzYyYTc4YzEw
ZGQ3NGM0OTE4M2QxZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCkBAIC0zMDEsMTYg
KzMwMSw2IEBAIHVpbnQ2NF90IHRvR3N0VW5zaWduZWQ2NFRpbWUoY29uc3QgTWVkaWFUaW1lJiBt
ZWRpYVRpbWUpCiAgICAgcmV0dXJuIHRpbWUudGltZVZhbHVlKCk7CiB9CiAKLWJvb2wgZ3N0UmVn
aXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKEdMaXN0KiBlbGVtZW50RmFjdG9yaWVzLCBjb25z
dCBjaGFyKiBjYXBzU3RyaW5nKQotewotICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0
R1JlZihnc3RfY2Fwc19mcm9tX3N0cmluZyhjYXBzU3RyaW5nKSk7Ci0gICAgR0xpc3QqIGNhbmRp
ZGF0ZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZmlsdGVyKGVsZW1lbnRGYWN0b3JpZXMs
IGNhcHMuZ2V0KCksIEdTVF9QQURfU0lOSywgZmFsc2UpOwotICAgIGJvb2wgcmVzdWx0ID0gY2Fu
ZGlkYXRlczsKLQotICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUoY2FuZGlkYXRlcyk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogc3RhdGljIHZvaWQgc2ltcGxlQnVzTWVzc2FnZUNh
bGxiYWNrKEdzdEJ1cyosIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIEdzdEJpbiogcGlwZWxpbmUpCiB7
CiAgICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVy
Q29tbW9uLmgKaW5kZXggMTEwYjZlZTNiOTNjM2M1ZGE4ZjU5NmNkMDlhMGQ4NDVkMWQyZTA0YS4u
NzE2MDViZjMwMjlkNzdjNTdiNGJhOGE3OGNjZmQxM2QzNDczZTQ4MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFt
ZXJDb21tb24uaApAQCAtMTE3LDcgKzExNyw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzVmFs
aWQgeyBmYWxzZSB9OwogfTsKIAotYm9vbCBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5
cGUoR0xpc3QqIGVsZW1lbnRGYWN0b3JpZXMsIGNvbnN0IGNoYXIqIGNhcHNTdHJpbmcpOwogdm9p
ZCBjb25uZWN0U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKEdzdEVsZW1lbnQgKnBpcGVsaW5lKTsK
IHZvaWQgZGlzY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhHc3RFbGVtZW50ICpwaXBl
bGluZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9Hc3RSZWdpc3RyeVNjYW5uZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dzdFJlZ2lzdHJ5U2Nhbm5lci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjRm
ZjVhMWM4OTA4ODQxZjZlZjIyNWEzZjUwYmVlNzZiNTY3MTI4ZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9Hc3RSZWdpc3RyeVNj
YW5uZXIuY3BwCkBAIC0wLDAgKzEsMzA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEln
YWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFp
bnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSKQorI2luY2x1
ZGUgIkdzdFJlZ2lzdHJ5U2Nhbm5lci5oIgorCisjaW5jbHVkZSAiQ29udGVudFR5cGUuaCIKKyNp
bmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8Zm5tYXRjaC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0X21lZGlh
X2dzdF9yZWdpc3RyeV9zY2FubmVyX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdl
YmtpdF9tZWRpYV9nc3RfcmVnaXN0cnlfc2Nhbm5lcl9kZWJ1ZworCitHc3RSZWdpc3RyeVNjYW5u
ZXImIEdzdFJlZ2lzdHJ5U2Nhbm5lcjo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8R3N0UmVnaXN0cnlTY2FubmVyPiBzaGFyZWRJbnN0YW5jZTsKKyAgICByZXR1cm4g
c2hhcmVkSW5zdGFuY2U7Cit9CisKK0dzdFJlZ2lzdHJ5U2Nhbm5lcjo6R3N0UmVnaXN0cnlTY2Fu
bmVyKGJvb2wgaXNNZWRpYVNvdXJjZSkKKyAgICA6IG1faXNNZWRpYVNvdXJjZShpc01lZGlhU291
cmNlKQoreworICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9tZWRpYV9nc3RfcmVn
aXN0cnlfc2Nhbm5lcl9kZWJ1ZywgIndlYmtpdHJlZ2lzdHJ5c2Nhbm5lciIsIDAsICJXZWJLaXQg
R1N0cmVhbWVyIHJlZ2lzdHJ5IHNjYW5uZXIiKTsKKyAgICBtX2F1ZGlvRGVjb2RlckZhY3Rvcmll
cyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFD
VE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQVVESU8s
IEdTVF9SQU5LX01BUkdJTkFMKTsKKyAgICBtX3ZpZGVvRGVjb2RlckZhY3RvcmllcyA9IGdzdF9l
bGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBF
X0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfVklERU8sIEdTVF9SQU5L
X01BUkdJTkFMKTsKKyAgICBtX2RlbXV4ZXJGYWN0b3JpZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5
X2xpc3RfZ2V0X2VsZW1lbnRzKEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERU1VWEVSLCBHU1Rf
UkFOS19NQVJHSU5BTCk7CisKKyAgICBpbml0aWFsaXplKCk7CisjaWZuZGVmIEdTVF9ESVNBQkxF
X0dTVF9ERUJVRworICAgIGZvciAoYXV0byYgbWltZVR5cGUgOiBtX21pbWVUeXBlU2V0KQorICAg
ICAgICBHU1RfREVCVUcoIk1pbWUtdHlwZSByZWdpc3RlcmVkOiAlcyIsIG1pbWVUeXBlLnV0Zjgo
KS5kYXRhKCkpOworICAgIGZvciAoYXV0byYgaXRlbSA6IG1fY29kZWNNYXApCisgICAgICAgIEdT
VF9ERUJVRygiJXMgY29kZWMgcGF0dGVybiByZWdpc3RlcmVkOiAlcyIsIGl0ZW0udmFsdWUgPyAi
SGFyZHdhcmUiOiJTb2Z0d2FyZSIsIGl0ZW0ua2V5LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwor
I2VuZGlmCit9CisKK0dzdFJlZ2lzdHJ5U2Nhbm5lcjo6fkdzdFJlZ2lzdHJ5U2Nhbm5lcigpCit7
CisgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZShtX2F1ZGlvRGVjb2RlckZhY3Rvcmll
cyk7CisgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZShtX3ZpZGVvRGVjb2RlckZhY3Rv
cmllcyk7CisgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZShtX2RlbXV4ZXJGYWN0b3Jp
ZXMpOworfQorCitHc3RSZWdpc3RyeVNjYW5uZXI6OlJlZ2lzdHJ5TG9va3VwUmVzdWx0IEdzdFJl
Z2lzdHJ5U2Nhbm5lcjo6Z3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKEdMaXN0KiBl
bGVtZW50RmFjdG9yaWVzLCBjb25zdCBjaGFyKiBjYXBzU3RyaW5nLCBib29sIGNoZWNrSGFyZHdh
cmVDbGFzc2lmaWVyKQoreworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihn
c3RfY2Fwc19mcm9tX3N0cmluZyhjYXBzU3RyaW5nKSk7CisgICAgR0xpc3QqIGNhbmRpZGF0ZXMg
PSBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZmlsdGVyKGVsZW1lbnRGYWN0b3JpZXMsIGNhcHMu
Z2V0KCksIEdTVF9QQURfU0lOSywgZmFsc2UpOworICAgIGJvb2wgc3VwcG9ydGVkID0gY2FuZGlk
YXRlczsKKyAgICBib29sIHVzaW5nSGFyZHdhcmUgPSBmYWxzZTsKKworICAgIGlmIChjaGVja0hh
cmR3YXJlQ2xhc3NpZmllcikgeworICAgICAgICBmb3IgKEdMaXN0KiBmYWN0b3JpZXMgPSBjYW5k
aWRhdGVzOyBmYWN0b3JpZXMgIT0gbnVsbHB0cjsgZmFjdG9yaWVzID0gZ19saXN0X25leHQoZmFj
dG9yaWVzKSkgeworICAgICAgICAgICAgYXV0byogZmFjdG9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
R3N0RWxlbWVudEZhY3RvcnkqPihmYWN0b3JpZXMtPmRhdGEpOworICAgICAgICAgICAgU3RyaW5n
IG1ldGFkYXRhID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGEoZmFjdG9yeSwgR1NU
X0VMRU1FTlRfTUVUQURBVEFfS0xBU1MpOworICAgICAgICAgICAgYXV0byBjb21wb25lbnRzID0g
bWV0YWRhdGEuc3BsaXQoJy8nKTsKKyAgICAgICAgICAgIGlmIChjb21wb25lbnRzLmNvbnRhaW5z
KCJIYXJkd2FyZSIpKSB7CisgICAgICAgICAgICAgICAgdXNpbmdIYXJkd2FyZSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKGNhbmRpZGF0ZXMpOworICAgIHJldHVy
biBHc3RSZWdpc3RyeVNjYW5uZXI6OlJlZ2lzdHJ5TG9va3VwUmVzdWx0IHsgc3VwcG9ydGVkLCB1
c2luZ0hhcmR3YXJlIH07Cit9CisKK3ZvaWQgR3N0UmVnaXN0cnlTY2FubmVyOjpmaWxsTWltZVR5
cGVTZXRGcm9tQ2Fwc01hcHBpbmcoVmVjdG9yPEdzdENhcHNXZWJLaXRNYXBwaW5nPiYgbWFwcGlu
ZykKK3sKKyAgICBmb3IgKGF1dG8mIGN1cnJlbnQgOiBtYXBwaW5nKSB7CisgICAgICAgIEdMaXN0
KiBmYWN0b3JpZXM7CisgICAgICAgIHN3aXRjaCAoY3VycmVudC5lbGVtZW50VHlwZSkgeworICAg
ICAgICBjYXNlIERlbXV4ZXI6CisgICAgICAgICAgICBmYWN0b3JpZXMgPSBtX2RlbXV4ZXJGYWN0
b3JpZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBdWRpb0RlY29kZXI6Cisg
ICAgICAgICAgICBmYWN0b3JpZXMgPSBtX2F1ZGlvRGVjb2RlckZhY3RvcmllczsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFZpZGVvRGVjb2RlcjoKKyAgICAgICAgICAgIGZhY3Rv
cmllcyA9IG1fdmlkZW9EZWNvZGVyRmFjdG9yaWVzOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGZh
Y3RvcmllcywgY3VycmVudC5jYXBzU3RyaW5nKSkgeworICAgICAgICAgICAgaWYgKCFjdXJyZW50
LndlYmtpdENvZGVjUGF0dGVybnMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgZm9yIChj
b25zdCBhdXRvJiBwYXR0ZXJuIDogY3VycmVudC53ZWJraXRDb2RlY1BhdHRlcm5zKQorICAgICAg
ICAgICAgICAgICAgICBtX2NvZGVjTWFwLmFkZChwYXR0ZXJuLCBmYWxzZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoIWN1cnJlbnQud2Via2l0TWltZVR5cGVzLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgbWltZVR5cGUgOiBjdXJyZW50Lndl
YmtpdE1pbWVUeXBlcykKKyAgICAgICAgICAgICAgICAgICAgbV9taW1lVHlwZVNldC5hZGQobWlt
ZVR5cGUpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbV9taW1lVHlwZVNl
dC5hZGQoQXRvbWljU3RyaW5nKGN1cnJlbnQuY2Fwc1N0cmluZykpOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIEdzdFJlZ2lzdHJ5U2Nhbm5lcjo6aW5pdGlhbGl6ZSgpCit7CisgICAgaWYg
KGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShtX2F1ZGlvRGVjb2RlckZhY3Rvcmll
cywgImF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpNCIpKSB7CisgICAgICAgIG1fbWltZVR5
cGVTZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vYWFjIikpOworICAgICAgICBtX21pbWVUeXBl
U2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL21wNCIpKTsKKyAgICAgICAgbV9taW1lVHlwZVNl
dC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby94LW00YSIpKTsKKyAgICAgICAgbV9jb2RlY01hcC5h
ZGQoQXRvbWljU3RyaW5nKCJtcDRhKiIpLCBmYWxzZSk7CisgICAgfQorCisgICAgYm9vbCBvcHVz
U3VwcG9ydGVkID0gZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKG1fYXVkaW9EZWNv
ZGVyRmFjdG9yaWVzLCAiYXVkaW8veC1vcHVzIik7CisgICAgaWYgKG9wdXNTdXBwb3J0ZWQpIHsK
KyAgICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9vcHVzIikpOwor
ICAgICAgICBtX2NvZGVjTWFwLmFkZChBdG9taWNTdHJpbmcoIm9wdXMiKSwgZmFsc2UpOworICAg
ICAgICBtX2NvZGVjTWFwLmFkZChBdG9taWNTdHJpbmcoIngtb3B1cyIpLCBmYWxzZSk7CisgICAg
fQorCisgICAgYm9vbCB2b3JiaXNTdXBwb3J0ZWQgPSBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JN
ZWRpYVR5cGUobV9hdWRpb0RlY29kZXJGYWN0b3JpZXMsICJhdWRpby94LXZvcmJpcyIpOworICAg
IGlmICh2b3JiaXNTdXBwb3J0ZWQpIHsKKyAgICAgICAgbV9jb2RlY01hcC5hZGQoQXRvbWljU3Ry
aW5nKCJ2b3JiaXMiKSwgZmFsc2UpOworICAgICAgICBtX2NvZGVjTWFwLmFkZChBdG9taWNTdHJp
bmcoIngtdm9yYmlzIiksIGZhbHNlKTsKKyAgICB9CisKKyAgICBpZiAoZ3N0UmVnaXN0cnlIYXNF
bGVtZW50Rm9yTWVkaWFUeXBlKG1fZGVtdXhlckZhY3RvcmllcywgInZpZGVvL3gtbWF0cm9za2Ei
KSkgeworICAgICAgICBhdXRvIHZwOERlY29kZXJBdmFpbGFibGUgPSBnc3RSZWdpc3RyeUhhc0Vs
ZW1lbnRGb3JNZWRpYVR5cGUobV92aWRlb0RlY29kZXJGYWN0b3JpZXMsICJ2aWRlby94LXZwOCIs
IHRydWUpOworICAgICAgICBhdXRvIHZwOURlY29kZXJBdmFpbGFibGUgPSBnc3RSZWdpc3RyeUhh
c0VsZW1lbnRGb3JNZWRpYVR5cGUobV92aWRlb0RlY29kZXJGYWN0b3JpZXMsICJ2aWRlby94LXZw
OSIsIHRydWUpOworCisgICAgICAgIGlmICh2cDhEZWNvZGVyQXZhaWxhYmxlIHx8IHZwOURlY29k
ZXJBdmFpbGFibGUpCisgICAgICAgICAgICBtX21pbWVUeXBlU2V0LmFkZChBdG9taWNTdHJpbmco
InZpZGVvL3dlYm0iKSk7CisKKyAgICAgICAgaWYgKHZwOERlY29kZXJBdmFpbGFibGUpIHsKKyAg
ICAgICAgICAgIG1fY29kZWNNYXAuYWRkKEF0b21pY1N0cmluZygidnA4IiksIHZwOERlY29kZXJB
dmFpbGFibGUudXNpbmdIYXJkd2FyZSk7CisgICAgICAgICAgICBtX2NvZGVjTWFwLmFkZChBdG9t
aWNTdHJpbmcoIngtdnA4IiksIHZwOERlY29kZXJBdmFpbGFibGUudXNpbmdIYXJkd2FyZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHZwOURlY29kZXJBdmFpbGFibGUpIHsKKyAgICAgICAgICAg
IG1fY29kZWNNYXAuYWRkKEF0b21pY1N0cmluZygidnA5IiksIHZwOURlY29kZXJBdmFpbGFibGUu
dXNpbmdIYXJkd2FyZSk7CisgICAgICAgICAgICBtX2NvZGVjTWFwLmFkZChBdG9taWNTdHJpbmco
IngtdnA5IiksIHZwOURlY29kZXJBdmFpbGFibGUudXNpbmdIYXJkd2FyZSk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKG9wdXNTdXBwb3J0ZWQpCisgICAgICAgICAgICBtX21pbWVUeXBlU2V0LmFk
ZChBdG9taWNTdHJpbmcoImF1ZGlvL3dlYm0iKSk7CisgICAgfQorCisgICAgYXV0byBoMjY0RGVj
b2RlckF2YWlsYWJsZSA9IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShtX3ZpZGVv
RGVjb2RlckZhY3RvcmllcywgInZpZGVvL3gtaDI2NCwgcHJvZmlsZT0oc3RyaW5nKXsgY29uc3Ry
YWluZWQtYmFzZWxpbmUsIGJhc2VsaW5lLCBoaWdoIH0iLCB0cnVlKTsKKyAgICBpZiAoaDI2NERl
Y29kZXJBdmFpbGFibGUpIHsKKyAgICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5n
KCJ2aWRlby9tcDQiKSk7CisgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygi
dmlkZW8veC1tNHYiKSk7CisgICAgICAgIG1fY29kZWNNYXAuYWRkKEF0b21pY1N0cmluZygieC1o
MjY0IiksIGgyNjREZWNvZGVyQXZhaWxhYmxlLnVzaW5nSGFyZHdhcmUpOworICAgICAgICBtX2Nv
ZGVjTWFwLmFkZChBdG9taWNTdHJpbmcoImF2YyoiKSwgaDI2NERlY29kZXJBdmFpbGFibGUudXNp
bmdIYXJkd2FyZSk7CisgICAgICAgIG1fY29kZWNNYXAuYWRkKEF0b21pY1N0cmluZygibXA0dioi
KSwgaDI2NERlY29kZXJBdmFpbGFibGUudXNpbmdIYXJkd2FyZSk7CisgICAgfQorCisgICAgaWYg
KG1faXNNZWRpYVNvdXJjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIG1pbWUtdHlw
ZXMgaW5pdGlhbGl6ZWQgYmVsb3cgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIE1TRSBiYWNrZW5k
LgorCisgICAgVmVjdG9yPEdzdENhcHNXZWJLaXRNYXBwaW5nPiBtYXBwaW5nID0geworICAgICAg
ICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8vbWlkaSIsIHsiYXVkaW8vbWlkaSIsICJhdWRpby9yaWZm
LW1pZGkifSwgeyB9fSwKKyAgICAgICAge0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtYWMzIiwgeyB9
LCB7IH19LAorICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8veC1kdHMiLCB7IH0sIHsgfX0s
CisgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LWVhYzMiLCB7ImF1ZGlvL3gtYWMzIn0s
IHsgfX0sCisgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LWZsYWMiLCB7ImF1ZGlvL3gt
ZmxhYyIsICJhdWRpby9mbGFjIn0sIHsgfX0sCisgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRp
by94LXNiYyIsIHsgfSwgeyB9fSwKKyAgICAgICAge0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtc2lk
IiwgeyB9LCB7IH19LAorICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8veC1zcGVleCIsIHsi
YXVkaW8vc3BlZXgiLCAiYXVkaW8veC1zcGVleCJ9LCB7IH19LAorICAgICAgICB7QXVkaW9EZWNv
ZGVyLCAiYXVkaW8veC13YXZwYWNrIiwgeyJhdWRpby94LXdhdnBhY2sifSwgeyB9fSwKKyAgICAg
ICAge1ZpZGVvRGVjb2RlciwgInZpZGVvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpezEsMn0sIHN5
c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZSIsIHsidmlkZW8vbXBlZyJ9LCB7Im1wZWcifX0sCisg
ICAgICAgIHtWaWRlb0RlY29kZXIsICJ2aWRlby9tcGVndHMiLCB7IH0sIHsgfX0sCisgICAgICAg
IHtWaWRlb0RlY29kZXIsICJ2aWRlby94LWRpcmFjIiwgeyB9LCB7IH19LAorICAgICAgICB7Vmlk
ZW9EZWNvZGVyLCAidmlkZW8veC1mbGFzaC12aWRlbyIsIHsidmlkZW8vZmx2IiwgInZpZGVvL3gt
Zmx2In0sIHsgfX0sCisgICAgICAgIHtWaWRlb0RlY29kZXIsICJ2aWRlby94LWgyNjMiLCB7IH0s
IHsgfX0sCisgICAgICAgIHtWaWRlb0RlY29kZXIsICJ2aWRlby94LW1zdmlkZW9jb2RlYyIsIHsi
dmlkZW8veC1tc3ZpZGVvIn0sIHsgfX0sCisgICAgICAgIHtEZW11eGVyLCAiYXBwbGljYXRpb24v
dm5kLnJuLXJlYWxtZWRpYSIsIHsgfSwgeyB9fSwKKyAgICAgICAge0RlbXV4ZXIsICJhcHBsaWNh
dGlvbi94LTNncCIsIHsgfSwgeyB9fSwKKyAgICAgICAge0RlbXV4ZXIsICJhcHBsaWNhdGlvbi94
LWhscyIsIHsiYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1cmwiLCAiYXBwbGljYXRpb24veC1t
cGVndXJsIn0sIHsgfX0sCisgICAgICAgIHtEZW11eGVyLCAiYXBwbGljYXRpb24veC1wbi1yZWFs
YXVkaW8iLCB7IH0sIHsgfX0sCisgICAgICAgIHtEZW11eGVyLCAiYXVkaW8veC1haWZmIiwgeyB9
LCB7IH19LAorICAgICAgICB7RGVtdXhlciwgImF1ZGlvL3gtd2F2IiwgeyJhdWRpby94LXdhdiIs
ICJhdWRpby93YXYiLCAiYXVkaW8vdm5kLndhdmUifSwgeyIxIn19LAorICAgICAgICB7RGVtdXhl
ciwgInZpZGVvL3F1aWNrdGltZSIsIHsgfSwgeyB9fSwKKyAgICAgICAge0RlbXV4ZXIsICJ2aWRl
by9xdWlja3RpbWUsIHZhcmlhbnQ9KHN0cmluZykzZ3BwIiwgeyJ2aWRlby8zZ3BwIn0sIHsgfX0s
CisgICAgICAgIHtEZW11eGVyLCAidmlkZW8veC1tcy1hc2YiLCB7IH0sIHsgfX0sCisgICAgfTsK
KyAgICBmaWxsTWltZVR5cGVTZXRGcm9tQ2Fwc01hcHBpbmcobWFwcGluZyk7CisKKyAgICBpZiAo
Z3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKG1fZGVtdXhlckZhY3RvcmllcywgImFw
cGxpY2F0aW9uL29nZyIpKSB7CisgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmlu
ZygiYXBwbGljYXRpb24vb2dnIikpOworCisgICAgICAgIGlmICh2b3JiaXNTdXBwb3J0ZWQpIHsK
KyAgICAgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vb2dnIikp
OworICAgICAgICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby94LXZv
cmJpcytvZ2ciKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVt
ZW50Rm9yTWVkaWFUeXBlKG1fYXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAiYXVkaW8veC1zcGVleCIp
KSB7CisgICAgICAgICAgICBtX21pbWVUeXBlU2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL29n
ZyIpKTsKKyAgICAgICAgICAgIG1fY29kZWNNYXAuYWRkKEF0b21pY1N0cmluZygic3BlZXgiKSwg
ZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZv
ck1lZGlhVHlwZShtX3ZpZGVvRGVjb2RlckZhY3RvcmllcywgInZpZGVvL3gtdGhlb3JhIikpIHsK
KyAgICAgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygidmlkZW8vb2dnIikp
OworICAgICAgICAgICAgbV9jb2RlY01hcC5hZGQoQXRvbWljU3RyaW5nKCJ0aGVvcmEiKSwgZmFs
c2UpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBhdWRpb01wZWdTdXBwb3J0ZWQgPSBm
YWxzZTsKKyAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKG1fYXVkaW9E
ZWNvZGVyRmFjdG9yaWVzLCAiYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxLCBsYXllcj0o
aW50KVsxLCAzXSIpKSB7CisgICAgICAgIGF1ZGlvTXBlZ1N1cHBvcnRlZCA9IHRydWU7CisgICAg
ICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vbXAxIikpOworICAgICAg
ICBtX21pbWVUeXBlU2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL21wMyIpKTsKKyAgICAgICAg
bV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby94LW1wMyIpKTsKKyAgICAgICAg
bV9jb2RlY01hcC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9tcDMiKSwgZmFsc2UpOworICAgIH0K
KworICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUobV9hdWRpb0RlY29k
ZXJGYWN0b3JpZXMsICJhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTIiKSkgeworICAgICAg
ICBhdWRpb01wZWdTdXBwb3J0ZWQgPSB0cnVlOworICAgICAgICBtX21pbWVUeXBlU2V0LmFkZChB
dG9taWNTdHJpbmcoImF1ZGlvL21wMiIpKTsKKyAgICB9CisKKyAgICBhdWRpb01wZWdTdXBwb3J0
ZWQgfD0gc3VwcG9ydHNDb250YWluZXJUeXBlKCJhdWRpby9tcDQiKTsKKyAgICBpZiAoYXVkaW9N
cGVnU3VwcG9ydGVkKSB7CisgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygi
YXVkaW8vbXBlZyIpKTsKKyAgICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5nKCJh
dWRpby94LW1wZWciKSk7CisgICAgfQorCisgICAgYm9vbCBtYXRyb3NrYVN1cHBvcnRlZCA9IGdz
dFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShtX2RlbXV4ZXJGYWN0b3JpZXMsICJ2aWRl
by94LW1hdHJvc2thIik7CisgICAgaWYgKG1hdHJvc2thU3VwcG9ydGVkKSB7CisgICAgICAgIG1f
bWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygidmlkZW8veC1tYXRyb3NrYSIpKTsKKworICAg
ICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKG1fdmlkZW9EZWNvZGVy
RmFjdG9yaWVzLCAidmlkZW8veC12cDEwIikpCisgICAgICAgICAgICBtX21pbWVUeXBlU2V0LmFk
ZChBdG9taWNTdHJpbmcoInZpZGVvL3dlYm0iKSk7CisgICAgfQorCisgICAgaWYgKChtYXRyb3Nr
YVN1cHBvcnRlZCB8fCBzdXBwb3J0c0NvbnRhaW5lclR5cGUoInZpZGVvL21wNCIpKSAmJiBnc3RS
ZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUobV92aWRlb0RlY29kZXJGYWN0b3JpZXMsICJ2
aWRlby94LWF2MSIpKQorICAgICAgICBtX2NvZGVjTWFwLmFkZChBdG9taWNTdHJpbmcoImF2MDEq
IiksIGZhbHNlKTsKK30KKworYm9vbCBHc3RSZWdpc3RyeVNjYW5uZXI6OnN1cHBvcnRzQ29kZWMo
U3RyaW5nIGNvZGVjLCBib29sIHVzaW5nSGFyZHdhcmUpIGNvbnN0Cit7CisgICAgLy8gSWYgdGhl
IGNvZGVjIGlzIG5hbWVkIGxpa2UgYSBtaW1ldHlwZSAoZWc6IHZpZGVvL2F2YykgcmVtb3ZlIHRo
ZSAidmlkZW8vIiBwYXJ0LgorICAgIHNpemVfdCBzbGFzaEluZGV4ID0gY29kZWMuZmluZCgnLycp
OworICAgIGlmIChzbGFzaEluZGV4ICE9IFdURjo6bm90Rm91bmQpCisgICAgICAgIGNvZGVjID0g
Y29kZWMuc3Vic3RyaW5nKHNsYXNoSW5kZXgrMSk7CisKKyAgICBHU1RfTE9HKCJDaGVja2luZyBj
b2RlYyBcIiVzXCIiLCBjb2RlYy51dGY4KCkuZGF0YSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGl0ZW0gOiBtX2NvZGVjTWFwKSB7CisgICAgICAgIGJvb2wgY29kZWNNYXRjaGVzUGF0dGVybiA9
ICFmbm1hdGNoKGl0ZW0ua2V5LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGNvZGVjLnV0ZjgoKS5k
YXRhKCksIDApOworICAgICAgICBpZiAoY29kZWNNYXRjaGVzUGF0dGVybikKKyAgICAgICAgICAg
IHJldHVybiB1c2luZ0hhcmR3YXJlID8gaXRlbS52YWx1ZSA6IHRydWU7CisgICAgfQorCisgICAg
R1NUX0xPRygiVW5zdXBwb3J0ZWQiKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgR3N0
UmVnaXN0cnlTY2FubmVyOjpzdXBwb3J0c0FsbENvZGVjcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYg
Y29kZWNzLCBib29sIHVzaW5nSGFyZHdhcmUpIGNvbnN0Cit7CisgICAgZm9yIChTdHJpbmcgY29k
ZWMgOiBjb2RlY3MpIHsKKyAgICAgICAgaWYgKCFzdXBwb3J0c0NvZGVjKGNvZGVjLCB1c2luZ0hh
cmR3YXJlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBHc3RSZWdpc3RyeVNjYW5uZXI6OmlzRGVjb2RpbmdTdXBwb3J0ZWQo
TWVkaWFDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uLCBib29sKiB1c2luZ0hhcmR3YXJlKSBj
b25zdAoreworICAgIGJvb2wgZGVjb2RlckZvdW5kID0gZmFsc2U7CisgICAgaWYgKHVzaW5nSGFy
ZHdhcmUpCisgICAgICAgICp1c2luZ0hhcmR3YXJlID0gZmFsc2U7CisKKyAgICBpZiAoY29uZmln
dXJhdGlvbi52aWRlbykgeworICAgICAgICBhdXRvJiB2aWRlb0NvbmZpZ3VyYXRpb24gPSBjb25m
aWd1cmF0aW9uLnZpZGVvLnZhbHVlKCk7CisgICAgICAgIEdTVF9ERUJVRygiQ2hlY2tpbmcgc3Vw
cG9ydCBmb3IgdmlkZW8gY29uZmlndXJhdGlvbjogXCIlc1wiIHNpemU6ICV1eCV1IGJpdHJhdGU6
ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBmcmFtZXJhdGU6ICVmIiwgdmlkZW9Db25maWd1cmF0aW9u
LmNvbnRlbnRUeXBlLnV0ZjgoKS5kYXRhKCksIHZpZGVvQ29uZmlndXJhdGlvbi53aWR0aCwgdmlk
ZW9Db25maWd1cmF0aW9uLmhlaWdodCwgdmlkZW9Db25maWd1cmF0aW9uLmJpdHJhdGUsIHZpZGVv
Q29uZmlndXJhdGlvbi5mcmFtZXJhdGUpOworCisgICAgICAgIGF1dG8gY29udGVudFR5cGUgPSBD
b250ZW50VHlwZSh2aWRlb0NvbmZpZ3VyYXRpb24uY29udGVudFR5cGUpOworICAgICAgICBkZWNv
ZGVyRm91bmQgPSBzdXBwb3J0c0NvbnRhaW5lclR5cGUoY29udGVudFR5cGUuY29udGFpbmVyVHlw
ZSgpKTsKKyAgICAgICAgYXV0byBjb2RlY3MgPSBjb250ZW50VHlwZS5jb2RlY3MoKTsKKyAgICAg
ICAgaWYgKHVzaW5nSGFyZHdhcmUgJiYgIWNvZGVjcy5pc0VtcHR5KCkpCisgICAgICAgICAgICAq
dXNpbmdIYXJkd2FyZSA9IHN1cHBvcnRzQWxsQ29kZWNzKGNvZGVjcywgdHJ1ZSk7CisgICAgfQor
CisgICAgaWYgKGNvbmZpZ3VyYXRpb24uYXVkaW8pIHsKKyAgICAgICAgYXV0byYgYXVkaW9Db25m
aWd1cmF0aW9uID0gY29uZmlndXJhdGlvbi5hdWRpby52YWx1ZSgpOworICAgICAgICBHU1RfREVC
VUcoIkNoZWNraW5nIHN1cHBvcnQgZm9yIGF1ZGlvIGNvbmZpZ3VyYXRpb246IFwiJXNcIiAlcyBj
aGFubmVscywgYml0cmF0ZTogJSIgR19HVUlOVDY0X0ZPUk1BVCAiIHNhbXBsZXJhdGU6ICV1Iiwg
YXVkaW9Db25maWd1cmF0aW9uLmNvbnRlbnRUeXBlLnV0ZjgoKS5kYXRhKCksIGF1ZGlvQ29uZmln
dXJhdGlvbi5jaGFubmVscy51dGY4KCkuZGF0YSgpLCBhdWRpb0NvbmZpZ3VyYXRpb24uYml0cmF0
ZSwgYXVkaW9Db25maWd1cmF0aW9uLnNhbXBsZXJhdGUpOworICAgICAgICBhdXRvIGNvbnRlbnRU
eXBlID0gQ29udGVudFR5cGUoYXVkaW9Db25maWd1cmF0aW9uLmNvbnRlbnRUeXBlKTsKKyAgICAg
ICAgZGVjb2RlckZvdW5kID0gc3VwcG9ydHNDb250YWluZXJUeXBlKGNvbnRlbnRUeXBlLmNvbnRh
aW5lclR5cGUoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGRlY29kZXJGb3VuZDsKK30KKworfQor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvR3N0UmVnaXN0cnlTY2FubmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR3N0UmVnaXN0cnlTY2FubmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTU3MjM0M2My
NDM3MWJjMGJkZjM0OWE5M2YwZjQ2YzE4YWRjYzAwZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9Hc3RSZWdpc3RyeVNjYW5uZXIu
aApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwK
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJNZWRpYUNvbmZp
Z3VyYXRpb24uaCIKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIENvbnRlbnRUeXBlOworCitjbGFzcyBHc3RSZWdpc3RyeVNjYW5uZXIgeworICAgIGZyaWVu
ZCBOZXZlckRlc3Ryb3llZDxHc3RSZWdpc3RyeVNjYW5uZXI+OworcHVibGljOgorICAgIHN0YXRp
YyBHc3RSZWdpc3RyeVNjYW5uZXImIHNpbmdsZXRvbigpOworCisgICAgSGFzaFNldDxTdHJpbmcs
IEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIG1pbWVUeXBlU2V0KCkgeyByZXR1cm4gbV9taW1l
VHlwZVNldDsgfQorCisgICAgYm9vbCBzdXBwb3J0c0NvbnRhaW5lclR5cGUoU3RyaW5nIGNvbnRh
aW5lclR5cGUpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVR5cGVTZXQuY29udGFpbnMoY29udGFpbmVy
VHlwZSk7IH0KKworICAgIGJvb2wgaXNEZWNvZGluZ1N1cHBvcnRlZChNZWRpYUNvbmZpZ3VyYXRp
b24mLCBib29sKiB1c2luZ0hhcmR3YXJlID0gbnVsbHB0cikgY29uc3Q7CisgICAgYm9vbCBzdXBw
b3J0c0NvZGVjKFN0cmluZyBjb2RlYywgYm9vbCB1c2luZ0hhcmR3YXJlID0gZmFsc2UpIGNvbnN0
OworICAgIGJvb2wgc3VwcG9ydHNBbGxDb2RlY3MoY29uc3QgVmVjdG9yPFN0cmluZz4mIGNvZGVj
cywgYm9vbCB1c2luZ0hhcmR3YXJlID0gZmFsc2UpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAg
R3N0UmVnaXN0cnlTY2FubmVyKGJvb2wgaXNNZWRpYVNvdXJjZSA9IGZhbHNlKTsKKyAgICB+R3N0
UmVnaXN0cnlTY2FubmVyKCk7CisKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKKworICAgIGVudW0g
RWxlbWVudFR5cGUgeworICAgICAgICBBdWRpb0RlY29kZXIgPSAwLAorICAgICAgICBWaWRlb0Rl
Y29kZXIsCisgICAgICAgIERlbXV4ZXIKKyAgICB9OworICAgIHN0cnVjdCBHc3RDYXBzV2ViS2l0
TWFwcGluZyB7CisgICAgICAgIEVsZW1lbnRUeXBlIGVsZW1lbnRUeXBlOworICAgICAgICBjb25z
dCBjaGFyKiBjYXBzU3RyaW5nOworICAgICAgICBWZWN0b3I8QXRvbWljU3RyaW5nPiB3ZWJraXRN
aW1lVHlwZXM7CisgICAgICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHdlYmtpdENvZGVjUGF0dGVy
bnM7CisgICAgfTsKKyAgICB2b2lkIGZpbGxNaW1lVHlwZVNldEZyb21DYXBzTWFwcGluZyhWZWN0
b3I8R3N0Q2Fwc1dlYktpdE1hcHBpbmc+Jik7CisKKyAgICBzdHJ1Y3QgUmVnaXN0cnlMb29rdXBS
ZXN1bHQgeworICAgICAgICBib29sIHN1cHBvcnRlZDsKKyAgICAgICAgYm9vbCB1c2luZ0hhcmR3
YXJlOworCisgICAgICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBzdXBwb3J0ZWQ7
IH0KKyAgICB9OworICAgIFJlZ2lzdHJ5TG9va3VwUmVzdWx0IGdzdFJlZ2lzdHJ5SGFzRWxlbWVu
dEZvck1lZGlhVHlwZShHTGlzdCogZWxlbWVudEZhY3RvcmllcywgY29uc3QgY2hhciogY2Fwc1N0
cmluZywgYm9vbCBjaGVja0hhcmR3YXJlQ2xhc3NpZmllciA9IGZhbHNlKTsKKworcHJpdmF0ZToK
KyAgICBib29sIG1faXNNZWRpYVNvdXJjZTsKKyAgICBHTGlzdCogbV9hdWRpb0RlY29kZXJGYWN0
b3JpZXM7CisgICAgR0xpc3QqIG1fdmlkZW9EZWNvZGVyRmFjdG9yaWVzOworICAgIEdMaXN0KiBt
X2RlbXV4ZXJGYWN0b3JpZXM7CisgICAgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0
aXZlSGFzaD4gbV9taW1lVHlwZVNldDsKKyAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgYm9vbD4g
bV9jb2RlY01hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeUdTdHJlYW1lci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFFbmdpbmVD
b25maWd1cmF0aW9uRmFjdG9yeUdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTM4NWUyN2UzMTRi
NjA0ODM3NTY5YzUwMTg2MDg4YWUyMWZiMGJhYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYUVuZ2luZUNvbmZpZ3VyYXRp
b25GYWN0b3J5R1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisg
KiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9M
REVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFj
dG9yeUdTdHJlYW1lci5oIgorCisjaWYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIkdzdFJl
Z2lzdHJ5U2Nhbm5lci5oIgorI2luY2x1ZGUgIk1lZGlhQ2FwYWJpbGl0aWVzSW5mby5oIgorI2lu
Y2x1ZGUgIk1lZGlhRGVjb2RpbmdDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKworI2lmIEVOQUJMRShNRURJQV9TT1VS
Q0UpCisjaW5jbHVkZSAiR3N0UmVnaXN0cnlTY2FubmVyTVNFLmgiCisjZW5kaWYKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit2b2lkIGNyZWF0ZU1lZGlhUGxheWVyRGVjb2RpbmdDb25maWd1cmF0
aW9uR1N0cmVhbWVyKE1lZGlhRGVjb2RpbmdDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoTWVkaWFDYXBhYmlsaXRpZXNJbmZvJiYpPiYmIGNhbGxiYWNrKQor
eworICAgIGJvb2wgaXNNZWRpYVNvdXJjZSA9IGNvbmZpZ3VyYXRpb24udHlwZSA9PSBNZWRpYURl
Y29kaW5nVHlwZTo6TWVkaWFTb3VyY2U7CisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKyAgICBh
dXRvJiBzY2FubmVyID0gaXNNZWRpYVNvdXJjZSA/IEdzdFJlZ2lzdHJ5U2Nhbm5lck1TRTo6c2lu
Z2xldG9uKCkgOiBHc3RSZWdpc3RyeVNjYW5uZXI6OnNpbmdsZXRvbigpOworI2Vsc2UKKyAgICBp
ZiAoaXNNZWRpYVNvdXJjZSkgeworICAgICAgICBjYWxsYmFjayh7IH0pOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGF1dG8mIHNjYW5uZXIgPSBHc3RSZWdpc3RyeVNjYW5uZXI6OnNpbmds
ZXRvbigpOworI2VuZGlmCisgICAgYm9vbCB1c2luZ0hhcmR3YXJlID0gZmFsc2U7CisgICAgTWVk
aWFDYXBhYmlsaXRpZXNJbmZvIGluZm87CisgICAgaW5mby5zdXBwb3J0ZWQgPSBzY2FubmVyLmlz
RGVjb2RpbmdTdXBwb3J0ZWQoY29uZmlndXJhdGlvbiwgJnVzaW5nSGFyZHdhcmUpOworICAgIGlu
Zm8ucG93ZXJFZmZpY2llbnQgPSB1c2luZ0hhcmR3YXJlOworCisgICAgY2FsbGJhY2soV1RGTW92
ZShpbmZvKSk7Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlH
U3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5R1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWU5
ZWMyMTc4YTU4NzkyNDY3ODU2YmI1YThmMDdhYTUzY2YzMjQ1MQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYUVuZ2luZUNv
bmZpZ3VyYXRpb25GYWN0b3J5R1N0cmVhbWVyLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAg
ICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgTWVkaWFDYXBhYmls
aXRpZXNJbmZvOworc3RydWN0IE1lZGlhRGVjb2RpbmdDb25maWd1cmF0aW9uOworCitleHRlcm4g
dm9pZCBjcmVhdGVNZWRpYVBsYXllckRlY29kaW5nQ29uZmlndXJhdGlvbkdTdHJlYW1lcihNZWRp
YURlY29kaW5nQ29uZmlndXJhdGlvbiYsIFdURjo6RnVuY3Rpb248dm9pZChNZWRpYUNhcGFiaWxp
dGllc0luZm8mJik+JiYpOworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCBmY2E5MmVkOWZlNzhjMGI0OTExOGJlY2U3
MjhiMWZkYjAwMzcyZDM5Li5mY2M0MzJmY2JhOTEzNjRhOThkN2EwYjYxM2Y2ZGQ0MWVmNzRiMTg3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApA
QCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkdT
dHJlYW1lckNvbW1vbi5oIgorI2luY2x1ZGUgIkdzdFJlZ2lzdHJ5U2Nhbm5lci5oIgogI2luY2x1
ZGUgIkhUVFBIZWFkZXJOYW1lcy5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNp
bmNsdWRlICJNZWRpYVBsYXllci5oIgpAQCAtMjIwOCwxMzcgKzIyMDksMTAgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdv
cmtTdGF0ZSBlcnJvcikKICAgICBtX3JlYWR5VGltZXJIYW5kbGVyLnN0b3AoKTsKIH0KIAotc3Rh
dGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBtaW1lVHlwZVNl
dCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNh
c2VJbnNlbnNpdGl2ZUhhc2g+PiBtaW1lVHlwZXMgPSBbXSgpCi0gICAgewotICAgICAgICBpbml0
aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRFbGVtZW50cygpOwotICAgICAgICBIYXNo
U2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBzZXQ7Ci0KLSAgICAgICAgR0xp
c3QqIGF1ZGlvRGVjb2RlckZhY3RvcmllcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRf
ZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9G
QUNUT1JZX1RZUEVfTUVESUFfQVVESU8sIEdTVF9SQU5LX01BUkdJTkFMKTsKLSAgICAgICAgR0xp
c3QqIHZpZGVvRGVjb2RlckZhY3RvcmllcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRf
ZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9G
QUNUT1JZX1RZUEVfTUVESUFfVklERU8sIEdTVF9SQU5LX01BUkdJTkFMKTsKLSAgICAgICAgR0xp
c3QqIGRlbXV4ZXJGYWN0b3JpZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZ2V0X2VsZW1l
bnRzKEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERU1VWEVSLCBHU1RfUkFOS19NQVJHSU5BTCk7
Ci0KLSAgICAgICAgZW51bSBFbGVtZW50VHlwZSB7Ci0gICAgICAgICAgICBBdWRpb0RlY29kZXIg
PSAwLAotICAgICAgICAgICAgVmlkZW9EZWNvZGVyLAotICAgICAgICAgICAgRGVtdXhlcgotICAg
ICAgICB9OwotICAgICAgICBzdHJ1Y3QgR3N0Q2Fwc1dlYktpdE1hcHBpbmcgewotICAgICAgICAg
ICAgRWxlbWVudFR5cGUgZWxlbWVudFR5cGU7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBjYXBz
U3RyaW5nOwotICAgICAgICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gd2Via2l0TWltZVR5cGVz
OwotICAgICAgICB9OwotCi0gICAgICAgIFZlY3RvcjxHc3RDYXBzV2ViS2l0TWFwcGluZz4gbWFw
cGluZyA9IHsKLSAgICAgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby9taWRpIiwgeyJhdWRp
by9taWRpIiwgImF1ZGlvL3JpZmYtbWlkaSJ9fSwKLSAgICAgICAgICAgIHtBdWRpb0RlY29kZXIs
ICJhdWRpby94LXNiYyIsIHsgfX0sCi0gICAgICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8v
eC1zaWQiLCB7IH19LAotICAgICAgICAgICAge0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtZmxhYyIs
IHsiYXVkaW8veC1mbGFjIiwgImF1ZGlvL2ZsYWMifX0sCi0gICAgICAgICAgICB7QXVkaW9EZWNv
ZGVyLCAiYXVkaW8veC13YXYiLCB7ImF1ZGlvL3gtd2F2IiwgImF1ZGlvL3dhdiIsICJhdWRpby92
bmQud2F2ZSJ9fSwKLSAgICAgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LXdhdnBhY2si
LCB7ImF1ZGlvL3gtd2F2cGFjayJ9fSwKLSAgICAgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRp
by94LXNwZWV4IiwgeyJhdWRpby9zcGVleCIsICJhdWRpby94LXNwZWV4In19LAotICAgICAgICAg
ICAge0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtYWMzIiwgeyB9fSwKLSAgICAgICAgICAgIHtBdWRp
b0RlY29kZXIsICJhdWRpby94LWVhYzMiLCB7ImF1ZGlvL3gtYWMzIn19LAotICAgICAgICAgICAg
e0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtZHRzIiwgeyB9fSwKLSAgICAgICAgICAgIHtWaWRlb0Rl
Y29kZXIsICJ2aWRlby94LWgyNjQsIHByb2ZpbGU9KHN0cmluZyloaWdoIiwgeyJ2aWRlby9tcDQi
LCAidmlkZW8veC1tNHYifX0sCi0gICAgICAgICAgICB7VmlkZW9EZWNvZGVyLCAidmlkZW8veC1t
c3ZpZGVvY29kZWMiLCB7InZpZGVvL3gtbXN2aWRlbyJ9fSwKLSAgICAgICAgICAgIHtWaWRlb0Rl
Y29kZXIsICJ2aWRlby94LWgyNjMiLCB7IH19LAotICAgICAgICAgICAge1ZpZGVvRGVjb2Rlciwg
InZpZGVvL21wZWd0cyIsIHsgfX0sCi0gICAgICAgICAgICB7VmlkZW9EZWNvZGVyLCAidmlkZW8v
bXBlZywgbXBlZ3ZlcnNpb249KGludCl7MSwyfSwgc3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNl
IiwgeyJ2aWRlby9tcGVnIn19LAotICAgICAgICAgICAge1ZpZGVvRGVjb2RlciwgInZpZGVvL3gt
ZGlyYWMiLCB7IH19LAotICAgICAgICAgICAge1ZpZGVvRGVjb2RlciwgInZpZGVvL3gtZmxhc2gt
dmlkZW8iLCB7InZpZGVvL2ZsdiIsICJ2aWRlby94LWZsdiJ9fSwKLSAgICAgICAgICAgIHtEZW11
eGVyLCAidmlkZW8vcXVpY2t0aW1lIiwgeyB9fSwKLSAgICAgICAgICAgIHtEZW11eGVyLCAidmlk
ZW8vcXVpY2t0aW1lLCB2YXJpYW50PShzdHJpbmcpM2dwcCIsIHsidmlkZW8vM2dwcCJ9fSwKLSAg
ICAgICAgICAgIHtEZW11eGVyLCAiYXBwbGljYXRpb24veC0zZ3AiLCB7IH19LAotICAgICAgICAg
ICAge0RlbXV4ZXIsICJ2aWRlby94LW1zLWFzZiIsIHsgfX0sCi0gICAgICAgICAgICB7RGVtdXhl
ciwgImF1ZGlvL3gtYWlmZiIsIHsgfX0sCi0gICAgICAgICAgICB7RGVtdXhlciwgImFwcGxpY2F0
aW9uL3gtcG4tcmVhbGF1ZGlvIiwgeyB9fSwKLSAgICAgICAgICAgIHtEZW11eGVyLCAiYXBwbGlj
YXRpb24vdm5kLnJuLXJlYWxtZWRpYSIsIHsgfX0sCi0gICAgICAgICAgICB7RGVtdXhlciwgImF1
ZGlvL3gtd2F2IiwgeyJhdWRpby94LXdhdiIsICJhdWRpby93YXYiLCAiYXVkaW8vdm5kLndhdmUi
fX0sCi0gICAgICAgICAgICB7RGVtdXhlciwgImFwcGxpY2F0aW9uL3gtaGxzIiwgeyJhcHBsaWNh
dGlvbi92bmQuYXBwbGUubXBlZ3VybCIsICJhcHBsaWNhdGlvbi94LW1wZWd1cmwifX0KLSAgICAg
ICAgfTsKLQotICAgICAgICBmb3IgKGF1dG8mIGN1cnJlbnQgOiBtYXBwaW5nKSB7Ci0gICAgICAg
ICAgICBHTGlzdCogZmFjdG9yaWVzID0gZGVtdXhlckZhY3RvcmllczsKLSAgICAgICAgICAgIGlm
IChjdXJyZW50LmVsZW1lbnRUeXBlID09IEF1ZGlvRGVjb2RlcikKLSAgICAgICAgICAgICAgICBm
YWN0b3JpZXMgPSBhdWRpb0RlY29kZXJGYWN0b3JpZXM7Ci0gICAgICAgICAgICBlbHNlIGlmIChj
dXJyZW50LmVsZW1lbnRUeXBlID09IFZpZGVvRGVjb2RlcikKLSAgICAgICAgICAgICAgICBmYWN0
b3JpZXMgPSB2aWRlb0RlY29kZXJGYWN0b3JpZXM7Ci0KLSAgICAgICAgICAgIGlmIChnc3RSZWdp
c3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoZmFjdG9yaWVzLCBjdXJyZW50LmNhcHNTdHJpbmcp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50LndlYmtpdE1pbWVUeXBlcy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBtaW1lVHlwZSA6IGN1
cnJlbnQud2Via2l0TWltZVR5cGVzKQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0LmFkZCht
aW1lVHlwZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHNl
dC5hZGQoQXRvbWljU3RyaW5nKGN1cnJlbnQuY2Fwc1N0cmluZykpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBvcHVzU3VwcG9ydGVkID0gZmFsc2U7Ci0gICAgICAg
IGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoYXVkaW9EZWNvZGVyRmFjdG9y
aWVzLCAiYXVkaW8veC1vcHVzIikpIHsKLSAgICAgICAgICAgIG9wdXNTdXBwb3J0ZWQgPSB0cnVl
OwotICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL29wdXMiKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBib29sIHZvcmJpc1N1cHBvcnRlZCA9IGZhbHNlOwotICAgICAgICBp
ZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGRlbXV4ZXJGYWN0b3JpZXMsICJh
cHBsaWNhdGlvbi9vZ2ciKSkgewotICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImFw
cGxpY2F0aW9uL29nZyIpKTsKLQotICAgICAgICAgICAgdm9yYmlzU3VwcG9ydGVkID0gZ3N0UmVn
aXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGF1ZGlvRGVjb2RlckZhY3RvcmllcywgImF1ZGlv
L3gtdm9yYmlzIik7Ci0gICAgICAgICAgICBpZiAodm9yYmlzU3VwcG9ydGVkKSB7Ci0gICAgICAg
ICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL29nZyIpKTsKLSAgICAgICAgICAg
ICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8veC12b3JiaXMrb2dnIikpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFU
eXBlKHZpZGVvRGVjb2RlckZhY3RvcmllcywgInZpZGVvL3gtdGhlb3JhIikpCi0gICAgICAgICAg
ICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoInZpZGVvL29nZyIpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGJvb2wgYXVkaW9NcGVnU3VwcG9ydGVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChnc3RS
ZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoYXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAiYXVk
aW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxLCBsYXllcj0oaW50KVsxLCAzXSIpKSB7Ci0gICAg
ICAgICAgICBhdWRpb01wZWdTdXBwb3J0ZWQgPSB0cnVlOwotICAgICAgICAgICAgc2V0LmFkZChB
dG9taWNTdHJpbmcoImF1ZGlvL21wMSIpKTsKLSAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3Ry
aW5nKCJhdWRpby9tcDMiKSk7Ci0gICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVk
aW8veC1tcDMiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVt
ZW50Rm9yTWVkaWFUeXBlKGF1ZGlvRGVjb2RlckZhY3RvcmllcywgImF1ZGlvL21wZWcsIG1wZWd2
ZXJzaW9uPShpbnQpezIsIDR9IikpIHsKLSAgICAgICAgICAgIGF1ZGlvTXBlZ1N1cHBvcnRlZCA9
IHRydWU7Ci0gICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vYWFjIikpOwot
ICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL21wMiIpKTsKLSAgICAgICAg
ICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9tcDQiKSk7Ci0gICAgICAgICAgICBzZXQu
YWRkKEF0b21pY1N0cmluZygiYXVkaW8veC1tNGEiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoYXVkaW9NcGVnU3VwcG9ydGVkKSB7Ci0gICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmlu
ZygiYXVkaW8vbXBlZyIpKTsKLSAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRp
by94LW1wZWciKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVt
ZW50Rm9yTWVkaWFUeXBlKGRlbXV4ZXJGYWN0b3JpZXMsICJ2aWRlby94LW1hdHJvc2thIikpIHsK
LSAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJ2aWRlby94LW1hdHJvc2thIikpOwot
Ci0gICAgICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKHZpZGVv
RGVjb2RlckZhY3RvcmllcywgInZpZGVvL3gtdnA4IikKLSAgICAgICAgICAgICAgICB8fCBnc3RS
ZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUodmlkZW9EZWNvZGVyRmFjdG9yaWVzLCAidmlk
ZW8veC12cDkiKQotICAgICAgICAgICAgICAgIHx8IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1l
ZGlhVHlwZSh2aWRlb0RlY29kZXJGYWN0b3JpZXMsICJ2aWRlby94LXZwMTAiKSkKLSAgICAgICAg
ICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygidmlkZW8vd2VibSIpKTsKLQotICAgICAgICAg
ICAgaWYgKHZvcmJpc1N1cHBvcnRlZCB8fCBvcHVzU3VwcG9ydGVkKQotICAgICAgICAgICAgICAg
IHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby93ZWJtIikpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZShhdWRpb0RlY29kZXJGYWN0b3JpZXMpOwot
ICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKHZpZGVvRGVjb2RlckZhY3Rvcmll
cyk7Ci0gICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUoZGVtdXhlckZhY3Rvcmll
cyk7Ci0gICAgICAgIHJldHVybiBzZXQ7Ci0gICAgfSgpOwotICAgIHJldHVybiBtaW1lVHlwZXM7
Ci19Ci0KIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpnZXRTdXBwb3J0ZWRUeXBl
cyhIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgdHlwZXMpCiB7Ci0g
ICAgdHlwZXMgPSBtaW1lVHlwZVNldCgpOworICAgIGF1dG8mIGdzdFJlZ2lzdHJ5U2Nhbm5lciA9
IEdzdFJlZ2lzdHJ5U2Nhbm5lcjo6c2luZ2xldG9uKCk7CisgICAgdHlwZXMgPSBnc3RSZWdpc3Ry
eVNjYW5uZXIubWltZVR5cGVTZXQoKTsKIH0KIAogTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2lu
ZVN1cHBvcnRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQpAQCAtMjM1OCwzMCArMjIzMiwyMSBAQCBN
ZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3Vw
cG9ydHNUeXBlKGNvbnN0IE1lZGlhRQogICAgIGlmIChwYXJhbWV0ZXJzLnR5cGUuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgLy8gU3BlYyBzYXlzIHdlIHNob3VsZCBu
b3QgcmV0dXJuICJwcm9iYWJseSIgaWYgdGhlIGNvZGVjcyBzdHJpbmcgaXMgZW1wdHkuCi0gICAg
aWYgKG1pbWVUeXBlU2V0KCkuY29udGFpbnMocGFyYW1ldGVycy50eXBlLmNvbnRhaW5lclR5cGUo
KSkpCi0gICAgICAgIHJlc3VsdCA9IHBhcmFtZXRlcnMudHlwZS5jb2RlY3MoKS5pc0VtcHR5KCkg
PyBNZWRpYVBsYXllcjo6TWF5QmVTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQ7
Ci0KKyAgICBHU1RfREVCVUcoIkNoZWNraW5nIG1pbWUtdHlwZSBcIiVzXCIiLCBwYXJhbWV0ZXJz
LnR5cGUucmF3KCkudXRmOCgpLmRhdGEoKSk7CiAgICAgYXV0byBjb250YWluZXJUeXBlID0gcGFy
YW1ldGVycy50eXBlLmNvbnRhaW5lclR5cGUoKTsKLSAgICBpZiAoY29udGFpbmVyVHlwZSA9PSAi
dmlkZW8vbXA0Il9zIHx8IGNvbnRhaW5lclR5cGUgPT0gInZpZGVvL3dlYm0iX3MpIHsKLSAgICAg
ICAgaWYgKG1pbWVUeXBlU2V0KCkuY29udGFpbnMoY29udGFpbmVyVHlwZSkpIHsKLSAgICAgICAg
ICAgIEdMaXN0KiB2aWRlb0RlY29kZXJGYWN0b3JpZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2xp
c3RfZ2V0X2VsZW1lbnRzKEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREVSIHwgR1NUX0VM
RU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX1ZJREVPLCBHU1RfUkFOS19NQVJHSU5BTCk7Ci0gICAg
ICAgICAgICBib29sIGF2MURlY29kZXJGb3VuZCA9IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1l
ZGlhVHlwZSh2aWRlb0RlY29kZXJGYWN0b3JpZXMsICJ2aWRlby94LWF2MSJfcyk7Ci0gICAgICAg
ICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKHZpZGVvRGVjb2RlckZhY3Rvcmllcyk7
Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNvZGVjIDogcGFyYW1ldGVycy50eXBlLmNvZGVjcygp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvZGVjLnN0YXJ0c1dpdGgoImF2MDEiX3MpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGF2MURlY29kZXJGb3VuZCA/IE1lZGlhUGxheWVy
OjpJc1N1cHBvcnRlZCA6IE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChj
b2RlYy5zdGFydHNXaXRoKCJhdjEiX3MpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgYXV0byYg
Z3N0UmVnaXN0cnlTY2FubmVyID0gR3N0UmVnaXN0cnlTY2FubmVyOjpzaW5nbGV0b24oKTsKKyAg
ICBpZiAoZ3N0UmVnaXN0cnlTY2FubmVyLnN1cHBvcnRzQ29udGFpbmVyVHlwZShjb250YWluZXJU
eXBlKSkgeworICAgICAgICAvLyBTcGVjIHNheXMgd2Ugc2hvdWxkIG5vdCByZXR1cm4gInByb2Jh
Ymx5IiBpZiB0aGUgY29kZWNzIHN0cmluZyBpcyBlbXB0eS4KKyAgICAgICAgVmVjdG9yPFN0cmlu
Zz4gY29kZWNzID0gcGFyYW1ldGVycy50eXBlLmNvZGVjcygpOworICAgICAgICBpZiAoY29kZWNz
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBv
cnRlZDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gZ3N0UmVnaXN0cnlTY2Fu
bmVyLnN1cHBvcnRzQWxsQ29kZWNzKGNvZGVjcykgPyBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQg
OiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CiAgICAgfQogCi0gICAgcmV0dXJuIGV4dGVu
ZGVkU3VwcG9ydHNUeXBlKHBhcmFtZXRlcnMsIHJlc3VsdCk7CisgICAgYXV0byBmaW5hbFJlc3Vs
dCA9IGV4dGVuZGVkU3VwcG9ydHNUeXBlKHBhcmFtZXRlcnMsIHJlc3VsdCk7CisgICAgR1NUX0RF
QlVHKCJTdXBwb3J0ZWQ6ICVzIiwgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoZmluYWxSZXN1
bHQpLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBmaW5hbFJlc3VsdDsKIH0KIAogdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldERvd25sb2FkQnVmZmVyaW5nKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBw
ZW5kUGlwZWxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHAKaW5kZXggODM5ZGE2MmQ3NzExMGRlN2EzNGVjMjkz
NmIyZThjZjU1MDgxMTUzYi4uNTk4MjY3M2Q4ZTFkM2EwZDQyNmRhMWQ0OTg1MDYwZTYyZThlZjUy
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L21zZS9BcHBlbmRQaXBlbGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHAKQEAgLTI3LDYgKzI3LDcgQEAK
ICNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKICNpbmNsdWRlICJHU3RyZWFtZXJFTUVVdGls
aXRpZXMuaCIKICNpbmNsdWRlICJHU3RyZWFtZXJNZWRpYURlc2NyaXB0aW9uLmgiCisjaW5jbHVk
ZSAiR3N0UmVnaXN0cnlTY2FubmVyLmgiCiAjaW5jbHVkZSAiTWVkaWFTYW1wbGVHU3RyZWFtZXIu
aCIKICNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCiAjaW5jbHVk
ZSAiTWVkaWFEZXNjcmlwdGlvbi5oIgpAQCAtMTYyLDcgKzE2Myw4IEBAIEFwcGVuZFBpcGVsaW5l
OjpBcHBlbmRQaXBlbGluZShSZWY8TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U+IG1lZGlh
U291cmNlQ2xpCiAgICAgfSwgdGhpcywgbnVsbHB0cik7CiAKICAgICBjb25zdCBTdHJpbmcmIHR5
cGUgPSBtX3NvdXJjZUJ1ZmZlclByaXZhdGUtPnR5cGUoKS5jb250YWluZXJUeXBlKCk7Ci0gICAg
aWYgKHR5cGUuZW5kc1dpdGgoIm1wNCIpKQorICAgIEdTVF9ERUJVRygiU291cmNlQnVmZmVyIGNv
bnRhaW5lclR5cGU6ICVzIiwgdHlwZS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAodHlwZS5lbmRz
V2l0aCgibXA0IikgfHwgdHlwZS5lbmRzV2l0aCgiYWFjIikpCiAgICAgICAgIG1fZGVtdXggPSBn
c3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInF0ZGVtdXgiLCBudWxscHRyKTsKICAgICBlbHNlIGlm
ICh0eXBlLmVuZHNXaXRoKCJ3ZWJtIikpCiAgICAgICAgIG1fZGVtdXggPSBnc3RfZWxlbWVudF9m
YWN0b3J5X21ha2UoIm1hdHJvc2thZGVtdXgiLCBudWxscHRyKTsKQEAgLTU3MCw3ICs1NzIsOCBA
QCB2b2lkIEFwcGVuZFBpcGVsaW5lOjpwYXJzZURlbXV4ZXJTcmNQYWRDYXBzKEdzdENhcHMqIGRl
bXV4ZXJTcmNQYWRDYXBzKQogICAgIG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291cmNl
U3RyZWFtVHlwZUdTdHJlYW1lcjo6VW5rbm93bjsKIAogICAgIGNvbnN0IGNoYXIqIG9yaWdpbmFs
TWVkaWFUeXBlID0gY2Fwc01lZGlhVHlwZShtX2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpKTsKLSAg
ICBpZiAoIU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c3VwcG9ydHNDb2RlYyhvcmln
aW5hbE1lZGlhVHlwZSkpIHsKKyAgICBhdXRvJiBnc3RSZWdpc3RyeVNjYW5uZXIgPSBHc3RSZWdp
c3RyeVNjYW5uZXI6OnNpbmdsZXRvbigpOworICAgIGlmICghZ3N0UmVnaXN0cnlTY2FubmVyLnN1
cHBvcnRzQ29kZWMob3JpZ2luYWxNZWRpYVR5cGUpKSB7CiAgICAgICAgICAgICBtX3ByZXNlbnRh
dGlvblNpemUgPSBXZWJDb3JlOjpGbG9hdFNpemUoKTsKICAgICAgICAgICAgIG1fc3RyZWFtVHlw
ZSA9IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6SW52YWxpZDsKICAg
ICB9IGVsc2UgaWYgKGRvQ2Fwc0hhdmVUeXBlKG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCksIEdT
VF9WSURFT19DQVBTX1RZUEVfUFJFRklYKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Hc3RSZWdpc3RyeVNjYW5uZXJNU0UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Hc3RSZWdp
c3RyeVNjYW5uZXJNU0UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4ZTQ5MDk1MjgyNDg3NGUxZmZmZDgwZGJj
ZjA0NTNlZWVjOTY5YTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0dzdFJlZ2lzdHJ5U2Nhbm5lck1TRS5jcHAKQEAgLTAs
MCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgVVNFKEdTVFJFQU1FUikgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkK
KyNpbmNsdWRlICJHc3RSZWdpc3RyeVNjYW5uZXJNU0UuaCIKKworI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dzdFJlZ2lzdHJ5U2Nhbm5l
ck1TRSYgR3N0UmVnaXN0cnlTY2FubmVyTVNFOjpzaW5nbGV0b24oKQoreworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxHc3RSZWdpc3RyeVNjYW5uZXJNU0U+IHNoYXJlZEluc3RhbmNlOworICAg
IHJldHVybiBzaGFyZWRJbnN0YW5jZTsKK30KKworR3N0UmVnaXN0cnlTY2FubmVyTVNFOjpHc3RS
ZWdpc3RyeVNjYW5uZXJNU0UoKQorICAgIDogR3N0UmVnaXN0cnlTY2FubmVyOjpHc3RSZWdpc3Ry
eVNjYW5uZXIodHJ1ZSkKK3sKK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0dzdFJlZ2lzdHJ5U2Nhbm5lck1T
RS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Hc3RS
ZWdpc3RyeVNjYW5uZXJNU0UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMGZjOTk3ZDYwOWE4OTNiNGFhYmNkZjM1
NmRiMGJhMjkzYzkzMDA0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Hc3RSZWdpc3RyeVNjYW5uZXJNU0UuaApAQCAtMCww
ICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwKKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIFVTRShHU1RSRUFNRVIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisKKyNpbmNs
dWRlICJHc3RSZWdpc3RyeVNjYW5uZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3N0UmVnaXN0cnlTY2FubmVyTVNFIDogcHVi
bGljIEdzdFJlZ2lzdHJ5U2Nhbm5lciB7CisgICAgZnJpZW5kIE5ldmVyRGVzdHJveWVkPEdzdFJl
Z2lzdHJ5U2Nhbm5lck1TRT47CitwdWJsaWM6CisgICAgc3RhdGljIEdzdFJlZ2lzdHJ5U2Nhbm5l
ck1TRSYgc2luZ2xldG9uKCk7Citwcm90ZWN0ZWQ6CisgICAgR3N0UmVnaXN0cnlTY2FubmVyTVNF
KCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVB
TUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0UuY3BwCmluZGV4IDJjYzNkMWE3ZTA5MDY2OWRjMzczY2M1MjQ4MzhjMzRmYjU1ODZm
NzAuLjVhYzE3NWIzYmIyMzY5OWU2Y2UxMGU2ZmE5MDc1ZDc5NTBjOGQzZjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBcHBlbmRQaXBlbGluZS5oIgogI2luY2x1ZGUg
IkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9u
LmgiCisjaW5jbHVkZSAiR3N0UmVnaXN0cnlTY2FubmVyTVNFLmgiCiAjaW5jbHVkZSAiSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKICNpbmNsdWRlICJNZWRpYURlc2NyaXB0aW9uLmgiCkBAIC00Miw3ICs0Myw2IEBACiAjaW5j
bHVkZSAiVVJMLmgiCiAjaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKIAot
I2luY2x1ZGUgPGZubWF0Y2guaD4KICNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNpbmsuaD4KICNp
bmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNyYy5oPgogI2luY2x1ZGUgPGdzdC9nc3QuaD4KQEAgLTY4
MiwzMCArNjgyLDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmR1cmF0
aW9uQ2hhbmdlZCgpCiAgICAgfQogfQogCi1zdGF0aWMgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2Fz
ZUluc2Vuc2l0aXZlSGFzaD4mIG1pbWVUeXBlQ2FjaGUoKQotewotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPj4gY2FjaGUg
PSBbXSgpCi0gICAgewotICAgICAgICBpbml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJL
aXRFbGVtZW50cygpOwotICAgICAgICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRp
dmVIYXNoPiBzZXQ7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG1pbWVUeXBlc1tdID0gewotICAgICAg
ICAgICAgInZpZGVvL21wNCIsCi0gICAgICAgICAgICAiYXVkaW8vbXA0IiwKLSAgICAgICAgICAg
ICJ2aWRlby93ZWJtIiwKLSAgICAgICAgICAgICJhdWRpby93ZWJtIgotICAgICAgICB9OwotICAg
ICAgICBmb3IgKGF1dG8mIHR5cGUgOiBtaW1lVHlwZXMpCi0gICAgICAgICAgICBzZXQuYWRkKHR5
cGUpOwotICAgICAgICByZXR1cm4gc2V0OwotICAgIH0oKTsKLSAgICByZXR1cm4gY2FjaGU7Ci19
Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpnZXRTdXBwb3J0ZWRUeXBl
cyhIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgdHlwZXMpCi17Ci0g
ICAgdHlwZXMgPSBtaW1lVHlwZUNhY2hlKCk7Ci19Ci0KIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFOjp0cmFja0RldGVjdGVkKFJlZlB0cjxBcHBlbmRQaXBlbGluZT4gYXBwZW5k
UGlwZWxpbmUsIFJlZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiBuZXdUcmFjaywgYm9v
bCBmaXJzdFRyYWNrRGV0ZWN0ZWQpCiB7CiAgICAgQVNTRVJUKGFwcGVuZFBpcGVsaW5lLT50cmFj
aygpID09IG5ld1RyYWNrKTsKQEAgLTcyNiwxMDkgKzcwMiwxMCBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6dHJhY2tEZXRlY3RlZChSZWZQdHI8QXBwZW5kUGlwZWxpbmU+
IGFwcGVuZAogICAgICAgICBtX3BsYXliYWNrUGlwZWxpbmUtPnJlYXR0YWNoVHJhY2soYXBwZW5k
UGlwZWxpbmUtPnNvdXJjZUJ1ZmZlclByaXZhdGUoKSwgbmV3VHJhY2ssIGNhcHMpOwogfQogCi1j
b25zdCBzdGF0aWMgSGFzaFNldDxBdG9taWNTdHJpbmc+JiBjb2RlY1NldCgpCi17Ci0gICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbWljU3RyaW5nPj4gY29kZWNUeXBlcyA9IFtd
KCkKLSAgICB7Ci0gICAgICAgIGluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVs
ZW1lbnRzKCk7Ci0gICAgICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiBzZXQ7Ci0KLSAgICAgICAg
R0xpc3QqIGF1ZGlvRGVjb2RlckZhY3RvcmllcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9n
ZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVO
VF9GQUNUT1JZX1RZUEVfTUVESUFfQVVESU8sIEdTVF9SQU5LX01BUkdJTkFMKTsKLSAgICAgICAg
R0xpc3QqIHZpZGVvRGVjb2RlckZhY3RvcmllcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9n
ZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVO
VF9GQUNUT1JZX1RZUEVfTUVESUFfVklERU8sIEdTVF9SQU5LX01BUkdJTkFMKTsKLQotICAgICAg
ICBlbnVtIEVsZW1lbnRUeXBlIHsKLSAgICAgICAgICAgIEF1ZGlvRGVjb2RlciA9IDAsCi0gICAg
ICAgICAgICBWaWRlb0RlY29kZXIKLSAgICAgICAgfTsKLSAgICAgICAgc3RydWN0IEdzdENhcHNX
ZWJLaXRNYXBwaW5nIHsKLSAgICAgICAgICAgIEVsZW1lbnRUeXBlIGVsZW1lbnRUeXBlOwotICAg
ICAgICAgICAgY29uc3QgY2hhciogY2Fwc1N0cmluZzsKLSAgICAgICAgICAgIFZlY3RvcjxBdG9t
aWNTdHJpbmc+IHdlYmtpdENvZGVjczsKLSAgICAgICAgfTsKLQotICAgICAgICBHc3RDYXBzV2Vi
S2l0TWFwcGluZyBtYXBwaW5nW10gPSB7Ci0gICAgICAgICAgICB7IFZpZGVvRGVjb2RlciwgInZp
ZGVvL3gtaDI2NCwgIHByb2ZpbGU9KHN0cmluZyl7IGNvbnN0cmFpbmVkLWJhc2VsaW5lLCBiYXNl
bGluZSB9IiwgeyAieC1oMjY0IiwgImF2YyoiIH0gfSwKLSAgICAgICAgICAgIHsgVmlkZW9EZWNv
ZGVyLCAidmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCl7MSwyfSwgc3lzdGVtc3RyZWFtPShi
b29sZWFuKWZhbHNlIiwgeyAibXBlZyIgfSB9LAotICAgICAgICAgICAgeyBWaWRlb0RlY29kZXIs
ICJ2aWRlby94LXZwOCIsIHsgInZwOCIsICJ4LXZwOCIgfSB9LAotICAgICAgICAgICAgeyBWaWRl
b0RlY29kZXIsICJ2aWRlby94LXZwOSIsIHsgInZwOSIsICJ4LXZwOSIgfSB9LAotICAgICAgICAg
ICAgeyBBdWRpb0RlY29kZXIsICJhdWRpby94LXZvcmJpcyIsIHsgInZvcmJpcyIsICJ4LXZvcmJp
cyIgfSB9LAotICAgICAgICAgICAgeyBBdWRpb0RlY29kZXIsICJhdWRpby94LW9wdXMiLCB7ICJv
cHVzIiwgIngtb3B1cyIgfSB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZm9yIChhdXRvJiBjdXJy
ZW50IDogbWFwcGluZykgewotICAgICAgICAgICAgR0xpc3QqIGZhY3RvcmllcyA9IG51bGxwdHI7
Ci0gICAgICAgICAgICBzd2l0Y2ggKGN1cnJlbnQuZWxlbWVudFR5cGUpIHsKLSAgICAgICAgICAg
IGNhc2UgQXVkaW9EZWNvZGVyOgotICAgICAgICAgICAgICAgIGZhY3RvcmllcyA9IGF1ZGlvRGVj
b2RlckZhY3RvcmllczsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
VmlkZW9EZWNvZGVyOgotICAgICAgICAgICAgICAgIGZhY3RvcmllcyA9IHZpZGVvRGVjb2RlckZh
Y3RvcmllczsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ19hc3NlcnRfbm9ubnVsbChmYWN0
b3JpZXMpOwotCi0gICAgICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFU
eXBlKGZhY3RvcmllcywgY3VycmVudC5jYXBzU3RyaW5nKSAmJiBmYWN0b3JpZXMgIT0gbnVsbHB0
cikgewotICAgICAgICAgICAgICAgIGlmICghY3VycmVudC53ZWJraXRDb2RlY3MuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgbWltZVR5cGUgOiBjdXJy
ZW50LndlYmtpdENvZGVjcykKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldC5hZGQobWltZVR5
cGUpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBzZXQuYWRk
KEF0b21pY1N0cmluZyhjdXJyZW50LmNhcHNTdHJpbmcpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIGJvb2wgYXVkaW9NcGVnU3VwcG9ydGVkID0gZmFsc2U7Ci0gICAgICAg
IGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoYXVkaW9EZWNvZGVyRmFjdG9y
aWVzLCAiYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxLCBsYXllcj0oaW50KVsxLCAzXSIp
KSB7Ci0gICAgICAgICAgICBhdWRpb01wZWdTdXBwb3J0ZWQgPSB0cnVlOwotICAgICAgICAgICAg
c2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL21wMyIpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoYXVkaW9EZWNvZGVyRmFjdG9y
aWVzLCAiYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCl7MiwgNH0iKSkgewotICAgICAgICAg
ICAgYXVkaW9NcGVnU3VwcG9ydGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHNldC5hZGQoQXRvbWlj
U3RyaW5nKCJtcDRhKiIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhdWRpb01wZWdTdXBw
b3J0ZWQpIHsKLSAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9tcGVnIikp
OwotICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL3gtbXBlZyIpKTsKLSAg
ICAgICAgfQotCi0KLSAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZShhdWRpb0Rl
Y29kZXJGYWN0b3JpZXMpOwotICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKHZp
ZGVvRGVjb2RlckZhY3Rvcmllcyk7Ci0KLSAgICAgICAgcmV0dXJuIHNldDsKLSAgICB9KCk7Ci0g
ICAgcmV0dXJuIGNvZGVjVHlwZXM7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyTVNFOjpzdXBwb3J0c0NvZGVjKFN0cmluZyBjb2RlYykKLXsKLSAgICAvLyBJZiB0aGUgY29k
ZWMgaXMgbmFtZWQgbGlrZSBhIG1pbWV0eXBlIChlZzogdmlkZW8vYXZjKSByZW1vdmUgdGhlICJ2
aWRlby8iIHBhcnQuCi0gICAgc2l6ZV90IHNsYXNoSW5kZXggPSBjb2RlYy5maW5kKCcvJyk7Ci0g
ICAgaWYgKHNsYXNoSW5kZXggIT0gV1RGOjpub3RGb3VuZCkKLSAgICAgICAgY29kZWMgPSBjb2Rl
Yy5zdWJzdHJpbmcoc2xhc2hJbmRleCsxKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgcGF0dGVy
biA6IGNvZGVjU2V0KCkpIHsKLSAgICAgICAgYm9vbCBjb2RlY01hdGNoZXNQYXR0ZXJuID0gIWZu
bWF0Y2gocGF0dGVybi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBjb2RlYy51dGY4KCkuZGF0YSgp
LCAwKTsKLSAgICAgICAgaWYgKGNvZGVjTWF0Y2hlc1BhdHRlcm4pCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzdXBwb3J0c0FsbENvZGVjcyhjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgY29kZWNzKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmdldFN1
cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiB0
eXBlcykKIHsKLSAgICBmb3IgKFN0cmluZyBjb2RlYyA6IGNvZGVjcykgewotICAgICAgICBpZiAo
IXN1cHBvcnRzQ29kZWMoY29kZWMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOworICAgIGF1dG8mIGdzdFJlZ2lzdHJ5U2Nhbm5lciA9IEdzdFJl
Z2lzdHJ5U2Nhbm5lck1TRTo6c2luZ2xldG9uKCk7CisgICAgdHlwZXMgPSBnc3RSZWdpc3RyeVNj
YW5uZXIubWltZVR5cGVTZXQoKTsKIH0KIAogTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2lu
ZVN1cHBvcnRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQpAQCAtODQyLDE5ICs3MTksMjQgQEAgTWVk
aWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnN1
cHBvcnRzVHlwZShjb25zdCBNZWQKICAgICAvLyBZb3VUdWJlIFRWIHByb3ZpZGVzIGVtcHR5IHR5
cGVzIGZvciBzb21lIHZpZGVvcyBhbmQgd2Ugd2FudCB0byBiZSBzZWxlY3RlZCBhcyBiZXN0IG1l
ZGlhIGVuZ2luZSBmb3IgdGhlbS4KICAgICBpZiAoY29udGFpbmVyVHlwZS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgcmVzdWx0ID0gTWVkaWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVkOworICAgICAgICBH
U1RfREVCVUcoIm1pbWUtdHlwZSBcIiVzXCIgc3VwcG9ydGVkOiAlcyIsIHBhcmFtZXRlcnMudHlw
ZS5yYXcoKS51dGY4KCkuZGF0YSgpLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhyZXN1bHQp
LnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIEdT
VF9ERUJVRygiQ2hlY2tpbmcgbWltZS10eXBlIFwiJXNcIiIsIHBhcmFtZXRlcnMudHlwZS5yYXco
KS51dGY4KCkuZGF0YSgpKTsKKyAgICBhdXRvJiBnc3RSZWdpc3RyeVNjYW5uZXIgPSBHc3RSZWdp
c3RyeVNjYW5uZXJNU0U6OnNpbmdsZXRvbigpOwogICAgIC8vIFNwZWMgc2F5cyB3ZSBzaG91bGQg
bm90IHJldHVybiAicHJvYmFibHkiIGlmIHRoZSBjb2RlY3Mgc3RyaW5nIGlzIGVtcHR5LgotICAg
IGlmIChtaW1lVHlwZUNhY2hlKCkuY29udGFpbnMoY29udGFpbmVyVHlwZSkpIHsKKyAgICBpZiAo
Z3N0UmVnaXN0cnlTY2FubmVyLnN1cHBvcnRzQ29udGFpbmVyVHlwZShjb250YWluZXJUeXBlKSkg
ewogICAgICAgICBWZWN0b3I8U3RyaW5nPiBjb2RlY3MgPSBwYXJhbWV0ZXJzLnR5cGUuY29kZWNz
KCk7CiAgICAgICAgIGlmIChjb2RlY3MuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmVzdWx0ID0g
TWVkaWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVkOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBy
ZXN1bHQgPSBzdXBwb3J0c0FsbENvZGVjcyhjb2RlY3MpID8gTWVkaWFQbGF5ZXI6OklzU3VwcG9y
dGVkIDogTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOworICAgICAgICAgICAgcmVzdWx0ID0g
Z3N0UmVnaXN0cnlTY2FubmVyLnN1cHBvcnRzQWxsQ29kZWNzKGNvZGVjcykgPyBNZWRpYVBsYXll
cjo6SXNTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CiAgICAgfQogCi0g
ICAgcmV0dXJuIGV4dGVuZGVkU3VwcG9ydHNUeXBlKHBhcmFtZXRlcnMsIHJlc3VsdCk7CisgICAg
YXV0byBmaW5hbFJlc3VsdCA9IGV4dGVuZGVkU3VwcG9ydHNUeXBlKHBhcmFtZXRlcnMsIHJlc3Vs
dCk7CisgICAgR1NUX0RFQlVHKCJTdXBwb3J0ZWQ6ICVzIiwgY29udmVydEVudW1lcmF0aW9uVG9T
dHJpbmcoZmluYWxSZXN1bHQpLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBmaW5hbFJlc3Vs
dDsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om1hcmtFbmRPZlN0
cmVhbShNZWRpYVNvdXJjZVByaXZhdGU6OkVuZE9mU3RyZWFtU3RhdHVzIHN0YXR1cykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5oCmlu
ZGV4IDIyNTdlOWU2ODMwYWNiMThjNmYwOGY3MTg2YmY3NzU4YjcyNzM1ZDcuLjAyYWExZDE1Yzdl
MTFiYjdmNjNhOGZkNjkyNDFmNjczNTA3YTJlZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyTVNFLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaApAQCAtODIsOSArODIsNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCB0cmFja0RldGVjdGVkKFJlZlB0cjxBcHBlbmRQaXBlbGluZT4sIFJl
ZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiwgYm9vbCBmaXJzdFRyYWNrRGV0ZWN0ZWQp
OwogICAgIHZvaWQgbm90aWZ5U2Vla05lZWRzRGF0YUZvclRpbWUoY29uc3QgTWVkaWFUaW1lJik7
CiAKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0NvZGVjKFN0cmluZyBjb2RlYyk7Ci0gICAgc3Rh
dGljIGJvb2wgc3VwcG9ydHNBbGxDb2RlY3MoY29uc3QgVmVjdG9yPFN0cmluZz4mIGNvZGVjcyk7
Ci0KICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogICAgIHZvaWQgYXR0ZW1wdFRvRGVjcnlw
dFdpdGhJbnN0YW5jZShDRE1JbnN0YW5jZSYpIGZpbmFsOwogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYWNhcGFiaWxpdGllcy9NZWRpYUVuZ2luZUNvbmZp
Z3VyYXRpb25GYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhY2FwYWJp
bGl0aWVzL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnkuY3BwCmluZGV4IDMyOWUyOTRj
YTJmNjAxOWFjYTQ5ZjM5YTYxMTc4ZGQ1MjY2OTE2NjEuLmM5NDgzMGRmZDFlZDVmYTQzMTk0YTlm
ZTk5NTQzZWQzMGQ3MTEwMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhY2FwYWJpbGl0aWVzL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhRW5naW5lQ29u
ZmlndXJhdGlvbkZhY3RvcnkuY3BwCkBAIC0zOSw2ICszOSwxMCBAQAogI2luY2x1ZGUgIk1lZGlh
RW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlDb2NvYS5oIgogI2VuZGlmCiAKKyNpZiBVU0UoR1NU
UkVBTUVSKQorI2luY2x1ZGUgIk1lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlHU3RyZWFt
ZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBib29sJiBtb2Nr
RW5hYmxlZCgpCkBAIC01OCw2ICs2Miw5IEBAIHN0YXRpYyBjb25zdCBGYWN0b3J5VmVjdG9yJiBm
YWN0b3JpZXMoKQogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGYWN0b3J5VmVjdG9yPiBmYWN0
b3JpZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoRmFjdG9yeVZlY3Rvcih7CiAjaWYgUExBVEZPUk0o
Q09DT0EpCiAgICAgICAgIHsgJmNyZWF0ZU1lZGlhUGxheWVyRGVjb2RpbmdDb25maWd1cmF0aW9u
Q29jb2EsIG51bGxwdHIgfSwKKyNlbmRpZgorI2lmIFVTRShHU1RSRUFNRVIpCisgICAgICAgIHsg
JmNyZWF0ZU1lZGlhUGxheWVyRGVjb2RpbmdDb25maWd1cmF0aW9uR1N0cmVhbWVyLCBudWxscHRy
IH0sCiAjZW5kaWYKICAgICB9KSk7CiAgICAgcmV0dXJuIGZhY3RvcmllczsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>353695</attachid>
            <date>2018-11-02 07:04:03 -0700</date>
            <delta_ts>2018-11-02 07:50:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191191-20181102140401.patch</filename>
            <type>text/plain</type>
            <size>58077</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3NzI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2M5NjYzNzM1Y2Q4YjJk
MDJlZmVlMmQzNzc5OWQ0MzFiY2NlNjcwYS4uOWVkYjM0OGVmZjU1YTY4YzJiYmY0MWIyZTJlOTJh
ZmM2NWUzYzkxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDE4LTExLTAyICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBEZWNvZGluZyBtZWRpYS1jYXBhYmlsaXRpZXMgY29uZmlndXJhdGlvbiBpbml0aWFsIHN1cHBv
cnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTE5
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggZW5hYmxlcyBiYXNpYyBwbGF0Zm9ybSBwcm9iaW5nIGZvciBHU3RyZWFtZXIgZGVjb2Rl
cnMsCisgICAgICAgIG9wdGlvbmFsbHkgdXNpbmcgSGFyZHdhcmUgZGVjb2RpbmcgY2FwYWJpbGl0
aWVzLiBUaGUgcHJldmlvdXMgY29kZQorICAgICAgICBmb3IgZGVjb2RlcnMvZGVtdXhlcnMgcHJv
YmluZyBwYXJ0aWFsbHkgZHVwbGljYXRlZCBiZXR3ZWVuIHRoZSBNU0UKKyAgICAgICAgcGxheWVy
IGFuZCBpdHMgcGFyZW50IGNsYXNzIHdhcyBtb3ZlZCB0byBhIG5ldyBtb2R1bGUgY2FsbGVkCisg
ICAgICAgIEdzdFJlZ2lzdHJ5U2Nhbm5lci4gVGhlcmUgaXMgb25lIGluc3RhbmNlIG9mIGl0IGZv
ciB0aGUgTVNFIHBsYXllcgorICAgICAgICBhbmQgb25lIGZvciB0aGUgcGFyZW50IGNsYXNzLgor
CisgICAgICAgIFRoZSBzY2FubmVyIGNhbiBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBH
c3RFbGVtZW50IEhhcmR3YXJlCisgICAgICAgIG1ldGFkYXRhIGNsYXNzaWZpZXIgaW4gZGVjb2Rl
cnMgYW5kIHRodXMgYWR2aXNlIHRoZQorICAgICAgICBNZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25G
YWN0b3J5R1N0cmVhbWVyIHRoYXQgaGFyZHdhcmUgZGVjb2RpbmcgaXMKKyAgICAgICAgc3VwcG9y
dGVkIG9yIG5vdC4gVGhpcyBpcyBvbmx5IGEgZmlyc3Qgc3RlcCB0aG91Z2guIFRoZSBzY2FubmVy
CisgICAgICAgIHNob3VsZCBhbHNvIHByb2JhYmx5IGF0dGVtcHQgYSBOVUxMLT5SRUFEWSB0cmFu
c2l0aW9uIG9uIGRlY29kZXJzCisgICAgICAgIHRvIHZhbGlkYXRlIHNwZWNpZmljIGlucHV0IGNh
cHMgYXJlIHN1cHBvcnRlZC4gQXMgdGhpcyBtaWdodAorICAgICAgICByZXF1aXJlIGNoYW5nZXMg
aW4gR1N0cmVhbWVyLCB0aGlzIHBhcnQgb2YgdGhlIHBhdGNoIHdhc24ndAorICAgICAgICBpbmNs
dWRlZC4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIGNvdmVyZWQgYnkgdGhlIGV4aXN0aW5nIG1l
ZGlhIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlOiBOZXcgZmls
ZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOiBBZGQgc3Vw
cG9ydCBmb3IgY29udmVydGluZworICAgICAgICBTdXBwb3J0c1R5cGUgZW51bSB0byBzdHJpbmcu
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaDogRGl0dG8uCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJFbnVtcy5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcDogTW92ZQorICAgICAg
ICBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUgdG8gR3N0UmVnaXN0cnlTY2FubmVy
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24u
aDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dzdFJlZ2lz
dHJ5U2Nhbm5lci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2Fu
bmVyOjpzaW5nbGV0b24pOgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjpH
c3RSZWdpc3RyeVNjYW5uZXIpOiBJbml0aWFsaXplCisgICAgICAgIHN1cHBvcnRlZCBtaW1lLXR5
cGVzIGFuZCBjb2RlY3MgZnJvbSB0aGUgR1N0cmVhbWVyIHJlZ2lzdHJ5LgorICAgICAgICAoV2Vi
Q29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjp+R3N0UmVnaXN0cnlTY2FubmVyKTogRnJlZSB0aGUg
ZWxlbWVudCBmYWN0b3JpZXMuCisgICAgICAgIChXZWJDb3JlOjpHc3RSZWdpc3RyeVNjYW5uZXI6
OmdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZSk6CisgICAgICAgIENoZWNrIHRoZSBp
bnB1dCBjYXBzIGFyZSBzdXBwb3J0ZWQsIG9wdGlvbmFsbHkgdXNpbmcgaGFyZHdhcmUKKyAgICAg
ICAgZGV2aWNlLgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjpmaWxsTWlt
ZVR5cGVTZXRGcm9tQ2Fwc01hcHBpbmcpOgorICAgICAgICBNb3ZlZCBmcm9tIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcnssTVNFfS4KKyAgICAgICAgKFdlYkNvcmU6OkdzdFJlZ2lzdHJ5U2Nh
bm5lcjo6aW5pdGlhbGl6ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlT
Y2FubmVyOjpzdXBwb3J0c0NvZGVjIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpH
c3RSZWdpc3RyeVNjYW5uZXI6OnN1cHBvcnRzQWxsQ29kZWNzIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpHc3RSZWdpc3RyeVNjYW5uZXI6OmlzRGVjb2RpbmdTdXBwb3J0ZWQgY29u
c3QpOiBDaGVjaworICAgICAgICB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBpcyBzdXBwb3J0ZWQu
IEZvciBub3cgaGFyZHdhcmUgc3VwcG9ydCBpcworICAgICAgICBjaGVja2VkIGZvciB2aWRlbyBj
b25maWd1cmF0aW9ucyBvbmx5IGFzIGl0IGlzIHF1aXRlIHVuY29tbW9uCisgICAgICAgIGFueXdh
eSB0byBoYXZlIGhhcmR3YXJlLWVuYWJsZWQgYXVkaW8gZGVjb2RlcnMuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dzdFJlZ2lzdHJ5U2Nhbm5lci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdzdFJlZ2lzdHJ5U2Nhbm5lcjo6bWltZVR5cGVTZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjpzdXBwb3J0c0NvbnRhaW5lclR5cGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjpSZWdpc3RyeUxvb2t1
cFJlc3VsdDo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlHU3RyZWFtZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU1lZGlhUGxheWVyRGVjb2RpbmdDb25m
aWd1cmF0aW9uR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeUdTdHJlYW1lci5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmNwcDoKKyAgICAgICAgUmVseSBvbiBuZXcgR3N0UmVnaXN0cnlTY2FubmVyIGFuZCBh
ZGQgc29tZSBkZWJ1Z2dpbmcgbWFjcm9zLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpnZXRTdXBwb3J0ZWRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzVHlwZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHA6IERpdHRvLiBB
bHNvCisgICAgICAgIHBsdWcgcXRkZW11eCBmb3IgQUFDIGNvbnRhaW5lcnMsIHRoaXMgaXMgYW4g
ZXhwbGljaXQgY29uc2VxdWVuY2UKKyAgICAgICAgb2YgZmluZXItZ3JhaW5lZCBjb2RlY3MgcHJv
YmluZy4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpBcHBlbmRQaXBlbGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6cGFyc2VEZW11eGVyU3JjUGFkQ2Fw
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Hc3RSZWdpc3Ry
eVNjYW5uZXJNU0UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdzdFJlZ2lzdHJ5U2Nh
bm5lck1TRTo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdzdFJlZ2lzdHJ5U2Nhbm5l
ck1TRTo6R3N0UmVnaXN0cnlTY2FubmVyTVNFKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvbXNlL0dzdFJlZ2lzdHJ5U2Nhbm5lck1TRS5oOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRS5jcHA6CisgICAgICAgIFJlbHkgb24gbmV3IEdzdFJlZ2lzdHJ5U2Nhbm5lciBhbmQg
YWRkIHNvbWUgZGVidWdnaW5nIG1hY3Jvcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzdXBwb3J0c1R5cGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFLmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFF
bmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmYWN0b3Jp
ZXMpOiBHU3RyZWFtZXIgc3VwcG9ydC4KKwogMjAxOC0xMS0wMiAgUGhpbGlwcGUgTm9ybWFuZCAg
PHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl0gTW92ZSBlbGVtZW50
cyByZWdpc3RyYXRpb24gdG8gR1N0cmVhbWVyQ29tbW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9H
U3RyZWFtZXIuY21ha2UKaW5kZXggZDlhMWZkYjMwYzQyMGYwOTgxYmZlZWY0ZGNkZjRjOTZhZmRk
YTI1ZC4uYmEyNTdhZGU2OGY4ZGZkYmEwNTQ1ZDFiMTJhOTZmMmQyZTg1NWY1OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQpAQCAtMTAsNyArMTAsOSBAQCBpZiAoRU5B
QkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8pCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR3N0QWxsb2NhdG9yRmFzdE1hbGxvYy5jcHAKKyAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dzdFJlZ2lzdHJ5U2Nhbm5lci5jcHAKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuY3Bw
CisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYUVuZ2luZUNvbmZpZ3Vy
YXRpb25GYWN0b3J5R1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmNw
cApAQCAtMjYsNiArMjgsNyBAQCBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8p
CiAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGlu
ZS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9HU3RyZWFtZXJN
ZWRpYURlc2NyaXB0aW9uLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
bXNlL0dzdFJlZ2lzdHJ5U2Nhbm5lck1TRS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFt
ZXJNU0UuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFT
b3VyY2VHU3RyZWFtZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9NZWRpYVBsYXllci5jcHAKaW5kZXggZTdlOTA1MmI4MGQxMzdjNmI3ZGViMDRjNWNkZTBhYTYx
ZTMxOTU2Zi4uMTgwZmVjODc2MGFhYmY1ZDUyODJlMTNmMTAxYmY0Mjg4ZmQzZjU4ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcApAQCAt
MTYwMyw2ICsxNjAzLDIwIEBAIFN0cmluZyBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhNZWRp
YVBsYXllckVudW1zOjpQcmVsb2FkIGVudW1lcmF0aW9uVmFsdWUpCiAgICAgcmV0dXJuIHZhbHVl
c1tzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXTsKIH0KIAorU3RyaW5nIGNv
bnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBl
bnVtZXJhdGlvblZhbHVlKQoreworICAgIHN0YXRpYyBjb25zdCBOZXZlckRlc3Ryb3llZDxTdHJp
bmc+IHZhbHVlc1tdID0geworICAgICAgICBNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiSXNOb3RT
dXBwb3J0ZWQiKSwKKyAgICAgICAgTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIklzU3VwcG9ydGVk
IiksCisgICAgICAgIE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJNYXlCZVN1cHBvcnRlZCIpLAor
ICAgIH07CisgICAgc3RhdGljX2Fzc2VydCghc3RhdGljX2Nhc3Q8c2l6ZV90PihNZWRpYVBsYXll
ckVudW1zOjpJc05vdFN1cHBvcnRlZCksICJNZWRpYVBsYXllckVudW1zOjpJc05vdFN1cHBvcnRl
ZCBpcyBub3QgMCBhcyBleHBlY3RlZCIpOworICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8
c2l6ZV90PihNZWRpYVBsYXllckVudW1zOjpJc1N1cHBvcnRlZCkgPT0gMSwgIk1lZGlhUGxheWVy
RW51bXM6OklzU3VwcG9ydGVkIGlzIG5vdCAxIGFzIGV4cGVjdGVkIik7CisgICAgc3RhdGljX2Fz
c2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KE1lZGlhUGxheWVyRW51bXM6Ok1heUJlU3VwcG9ydGVk
KSA9PSAyLCAiTWVkaWFQbGF5ZXJFbnVtczo6TWF5QmVTdXBwb3J0ZWQgaXMgbm90IDIgYXMgZXhw
ZWN0ZWQiKTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVl
KSA8IFdURl9BUlJBWV9MRU5HVEgodmFsdWVzKSk7CisgICAgcmV0dXJuIHZhbHVlc1tzdGF0aWNf
Y2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXTsKK30KKwogfQogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCmluZGV4IDAxZGQ5
NjVlOWE2ZDZjNWZmZDI2NzlhMzFmNWUxYzUwODUyNjgzYTMuLmRhMjEzMGYwMTA0YTNlZmFiNmNj
MzU5OWNmNzVjNTg5NTc2M2FmZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuaApAQCAtMjUyLDggKzI1Miw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IGludmFsaWRhdGUoKTsKIAogICAgIC8vIE1lZGlhIGVuZ2luZSBzdXBwb3J0LgotICAgIGVudW0g
U3VwcG9ydHNUeXBlIHsgSXNOb3RTdXBwb3J0ZWQsIElzU3VwcG9ydGVkLCBNYXlCZVN1cHBvcnRl
ZCB9OwotICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShj
b25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJik7CisgICAgdXNpbmcgTWVkaWFQbGF5
ZXJFbnVtczo6U3VwcG9ydHNUeXBlOworICAgIHN0YXRpYyBTdXBwb3J0c1R5cGUgc3VwcG9ydHNU
eXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmKTsKICAgICBzdGF0aWMgdm9p
ZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVI
YXNoPiYpOwogICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CiAgICAgc3RhdGljIEhhc2hT
ZXQ8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4gb3JpZ2luc0luTWVkaWFDYWNoZShjb25zdCBTdHJp
bmcmIHBhdGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5ZXJFbnVtcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXJFbnVtcy5oCmluZGV4IDA2ZjBjY2QyOGQ2YWI5ZjQzZjYxYmVmMjdlYjFmMzBiZGU2
MmRkNDYuLjk1MGUwZWQyODdlYjMyMWE0OWE1NDIzZTYzMTMxYWEwOTI3MGNiNjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyRW51bXMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllckVudW1zLmgK
QEAgLTM2LDYgKzM2LDcgQEAgcHVibGljOgogICAgIGVudW0gTW92aWVMb2FkVHlwZSB7IFVua25v
d24sIERvd25sb2FkLCBTdG9yZWRTdHJlYW0sIExpdmVTdHJlYW0gfTsKICAgICBlbnVtIFByZWxv
YWQgeyBOb25lLCBNZXRhRGF0YSwgQXV0byB9OwogICAgIGVudW0gVmlkZW9HcmF2aXR5IHsgVmlk
ZW9HcmF2aXR5UmVzaXplLCBWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QsIFZpZGVvR3Jhdml0eVJl
c2l6ZUFzcGVjdEZpbGwgfTsKKyAgICBlbnVtIFN1cHBvcnRzVHlwZSB7IElzTm90U3VwcG9ydGVk
LCBJc1N1cHBvcnRlZCwgTWF5QmVTdXBwb3J0ZWQgfTsKICAgICBlbnVtIHsKICAgICAgICAgVmlk
ZW9GdWxsc2NyZWVuTW9kZU5vbmUgPSAwLAogICAgICAgICBWaWRlb0Z1bGxzY3JlZW5Nb2RlU3Rh
bmRhcmQgPSAxIDw8IDAsCkBAIC00Nyw2ICs0OCw3IEBAIHB1YmxpYzoKIFdURjo6U3RyaW5nIGNv
bnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKE1lZGlhUGxheWVyRW51bXM6OlJlYWR5U3RhdGUpOwog
V1RGOjpTdHJpbmcgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoTWVkaWFQbGF5ZXJFbnVtczo6
TmV0d29ya1N0YXRlKTsKIFdURjo6U3RyaW5nIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKE1l
ZGlhUGxheWVyRW51bXM6OlByZWxvYWQpOworV1RGOjpTdHJpbmcgY29udmVydEVudW1lcmF0aW9u
VG9TdHJpbmcoTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCmluZGV4IDUyNjQ5YmJhN2Fi
OGM0ZDlhYjc1MzlhZTMyOTk2NDgzODM4MWZjOTkuLmM2OGFhOTZhMjIzYzkyNTg3MzYyYTc4YzEw
ZGQ3NGM0OTE4M2QxZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCkBAIC0zMDEsMTYg
KzMwMSw2IEBAIHVpbnQ2NF90IHRvR3N0VW5zaWduZWQ2NFRpbWUoY29uc3QgTWVkaWFUaW1lJiBt
ZWRpYVRpbWUpCiAgICAgcmV0dXJuIHRpbWUudGltZVZhbHVlKCk7CiB9CiAKLWJvb2wgZ3N0UmVn
aXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKEdMaXN0KiBlbGVtZW50RmFjdG9yaWVzLCBjb25z
dCBjaGFyKiBjYXBzU3RyaW5nKQotewotICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0
R1JlZihnc3RfY2Fwc19mcm9tX3N0cmluZyhjYXBzU3RyaW5nKSk7Ci0gICAgR0xpc3QqIGNhbmRp
ZGF0ZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZmlsdGVyKGVsZW1lbnRGYWN0b3JpZXMs
IGNhcHMuZ2V0KCksIEdTVF9QQURfU0lOSywgZmFsc2UpOwotICAgIGJvb2wgcmVzdWx0ID0gY2Fu
ZGlkYXRlczsKLQotICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUoY2FuZGlkYXRlcyk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogc3RhdGljIHZvaWQgc2ltcGxlQnVzTWVzc2FnZUNh
bGxiYWNrKEdzdEJ1cyosIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIEdzdEJpbiogcGlwZWxpbmUpCiB7
CiAgICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVy
Q29tbW9uLmgKaW5kZXggMTEwYjZlZTNiOTNjM2M1ZGE4ZjU5NmNkMDlhMGQ4NDVkMWQyZTA0YS4u
NzE2MDViZjMwMjlkNzdjNTdiNGJhOGE3OGNjZmQxM2QzNDczZTQ4MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFt
ZXJDb21tb24uaApAQCAtMTE3LDcgKzExNyw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzVmFs
aWQgeyBmYWxzZSB9OwogfTsKIAotYm9vbCBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5
cGUoR0xpc3QqIGVsZW1lbnRGYWN0b3JpZXMsIGNvbnN0IGNoYXIqIGNhcHNTdHJpbmcpOwogdm9p
ZCBjb25uZWN0U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKEdzdEVsZW1lbnQgKnBpcGVsaW5lKTsK
IHZvaWQgZGlzY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhHc3RFbGVtZW50ICpwaXBl
bGluZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9Hc3RSZWdpc3RyeVNjYW5uZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dzdFJlZ2lzdHJ5U2Nhbm5lci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjRm
ZjVhMWM4OTA4ODQxZjZlZjIyNWEzZjUwYmVlNzZiNTY3MTI4ZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9Hc3RSZWdpc3RyeVNj
YW5uZXIuY3BwCkBAIC0wLDAgKzEsMzA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEln
YWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFp
bnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSKQorI2luY2x1
ZGUgIkdzdFJlZ2lzdHJ5U2Nhbm5lci5oIgorCisjaW5jbHVkZSAiQ29udGVudFR5cGUuaCIKKyNp
bmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8Zm5tYXRjaC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0X21lZGlh
X2dzdF9yZWdpc3RyeV9zY2FubmVyX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdl
YmtpdF9tZWRpYV9nc3RfcmVnaXN0cnlfc2Nhbm5lcl9kZWJ1ZworCitHc3RSZWdpc3RyeVNjYW5u
ZXImIEdzdFJlZ2lzdHJ5U2Nhbm5lcjo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8R3N0UmVnaXN0cnlTY2FubmVyPiBzaGFyZWRJbnN0YW5jZTsKKyAgICByZXR1cm4g
c2hhcmVkSW5zdGFuY2U7Cit9CisKK0dzdFJlZ2lzdHJ5U2Nhbm5lcjo6R3N0UmVnaXN0cnlTY2Fu
bmVyKGJvb2wgaXNNZWRpYVNvdXJjZSkKKyAgICA6IG1faXNNZWRpYVNvdXJjZShpc01lZGlhU291
cmNlKQoreworICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9tZWRpYV9nc3RfcmVn
aXN0cnlfc2Nhbm5lcl9kZWJ1ZywgIndlYmtpdHJlZ2lzdHJ5c2Nhbm5lciIsIDAsICJXZWJLaXQg
R1N0cmVhbWVyIHJlZ2lzdHJ5IHNjYW5uZXIiKTsKKyAgICBtX2F1ZGlvRGVjb2RlckZhY3Rvcmll
cyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFD
VE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQVVESU8s
IEdTVF9SQU5LX01BUkdJTkFMKTsKKyAgICBtX3ZpZGVvRGVjb2RlckZhY3RvcmllcyA9IGdzdF9l
bGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBF
X0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfVklERU8sIEdTVF9SQU5L
X01BUkdJTkFMKTsKKyAgICBtX2RlbXV4ZXJGYWN0b3JpZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5
X2xpc3RfZ2V0X2VsZW1lbnRzKEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERU1VWEVSLCBHU1Rf
UkFOS19NQVJHSU5BTCk7CisKKyAgICBpbml0aWFsaXplKCk7CisjaWZuZGVmIEdTVF9ESVNBQkxF
X0dTVF9ERUJVRworICAgIGZvciAoYXV0byYgbWltZVR5cGUgOiBtX21pbWVUeXBlU2V0KQorICAg
ICAgICBHU1RfREVCVUcoIk1pbWUtdHlwZSByZWdpc3RlcmVkOiAlcyIsIG1pbWVUeXBlLnV0Zjgo
KS5kYXRhKCkpOworICAgIGZvciAoYXV0byYgaXRlbSA6IG1fY29kZWNNYXApCisgICAgICAgIEdT
VF9ERUJVRygiJXMgY29kZWMgcGF0dGVybiByZWdpc3RlcmVkOiAlcyIsIGl0ZW0udmFsdWUgPyAi
SGFyZHdhcmUiOiJTb2Z0d2FyZSIsIGl0ZW0ua2V5LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwor
I2VuZGlmCit9CisKK0dzdFJlZ2lzdHJ5U2Nhbm5lcjo6fkdzdFJlZ2lzdHJ5U2Nhbm5lcigpCit7
CisgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZShtX2F1ZGlvRGVjb2RlckZhY3Rvcmll
cyk7CisgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZShtX3ZpZGVvRGVjb2RlckZhY3Rv
cmllcyk7CisgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZShtX2RlbXV4ZXJGYWN0b3Jp
ZXMpOworfQorCitHc3RSZWdpc3RyeVNjYW5uZXI6OlJlZ2lzdHJ5TG9va3VwUmVzdWx0IEdzdFJl
Z2lzdHJ5U2Nhbm5lcjo6Z3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKEdMaXN0KiBl
bGVtZW50RmFjdG9yaWVzLCBjb25zdCBjaGFyKiBjYXBzU3RyaW5nLCBib29sIGNoZWNrSGFyZHdh
cmVDbGFzc2lmaWVyKQoreworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihn
c3RfY2Fwc19mcm9tX3N0cmluZyhjYXBzU3RyaW5nKSk7CisgICAgR0xpc3QqIGNhbmRpZGF0ZXMg
PSBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZmlsdGVyKGVsZW1lbnRGYWN0b3JpZXMsIGNhcHMu
Z2V0KCksIEdTVF9QQURfU0lOSywgZmFsc2UpOworICAgIGJvb2wgc3VwcG9ydGVkID0gY2FuZGlk
YXRlczsKKyAgICBib29sIHVzaW5nSGFyZHdhcmUgPSBmYWxzZTsKKworICAgIGlmIChjaGVja0hh
cmR3YXJlQ2xhc3NpZmllcikgeworICAgICAgICBmb3IgKEdMaXN0KiBmYWN0b3JpZXMgPSBjYW5k
aWRhdGVzOyBmYWN0b3JpZXMgIT0gbnVsbHB0cjsgZmFjdG9yaWVzID0gZ19saXN0X25leHQoZmFj
dG9yaWVzKSkgeworICAgICAgICAgICAgYXV0byogZmFjdG9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
R3N0RWxlbWVudEZhY3RvcnkqPihmYWN0b3JpZXMtPmRhdGEpOworICAgICAgICAgICAgU3RyaW5n
IG1ldGFkYXRhID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGEoZmFjdG9yeSwgR1NU
X0VMRU1FTlRfTUVUQURBVEFfS0xBU1MpOworICAgICAgICAgICAgYXV0byBjb21wb25lbnRzID0g
bWV0YWRhdGEuc3BsaXQoJy8nKTsKKyAgICAgICAgICAgIGlmIChjb21wb25lbnRzLmNvbnRhaW5z
KCJIYXJkd2FyZSIpKSB7CisgICAgICAgICAgICAgICAgdXNpbmdIYXJkd2FyZSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKGNhbmRpZGF0ZXMpOworICAgIHJldHVy
biBHc3RSZWdpc3RyeVNjYW5uZXI6OlJlZ2lzdHJ5TG9va3VwUmVzdWx0IHsgc3VwcG9ydGVkLCB1
c2luZ0hhcmR3YXJlIH07Cit9CisKK3ZvaWQgR3N0UmVnaXN0cnlTY2FubmVyOjpmaWxsTWltZVR5
cGVTZXRGcm9tQ2Fwc01hcHBpbmcoVmVjdG9yPEdzdENhcHNXZWJLaXRNYXBwaW5nPiYgbWFwcGlu
ZykKK3sKKyAgICBmb3IgKGF1dG8mIGN1cnJlbnQgOiBtYXBwaW5nKSB7CisgICAgICAgIEdMaXN0
KiBmYWN0b3JpZXM7CisgICAgICAgIHN3aXRjaCAoY3VycmVudC5lbGVtZW50VHlwZSkgeworICAg
ICAgICBjYXNlIERlbXV4ZXI6CisgICAgICAgICAgICBmYWN0b3JpZXMgPSBtX2RlbXV4ZXJGYWN0
b3JpZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBdWRpb0RlY29kZXI6Cisg
ICAgICAgICAgICBmYWN0b3JpZXMgPSBtX2F1ZGlvRGVjb2RlckZhY3RvcmllczsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFZpZGVvRGVjb2RlcjoKKyAgICAgICAgICAgIGZhY3Rv
cmllcyA9IG1fdmlkZW9EZWNvZGVyRmFjdG9yaWVzOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGZh
Y3RvcmllcywgY3VycmVudC5jYXBzU3RyaW5nKSkgeworICAgICAgICAgICAgaWYgKCFjdXJyZW50
LndlYmtpdENvZGVjUGF0dGVybnMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgZm9yIChj
b25zdCBhdXRvJiBwYXR0ZXJuIDogY3VycmVudC53ZWJraXRDb2RlY1BhdHRlcm5zKQorICAgICAg
ICAgICAgICAgICAgICBtX2NvZGVjTWFwLmFkZChwYXR0ZXJuLCBmYWxzZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoIWN1cnJlbnQud2Via2l0TWltZVR5cGVzLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgbWltZVR5cGUgOiBjdXJyZW50Lndl
YmtpdE1pbWVUeXBlcykKKyAgICAgICAgICAgICAgICAgICAgbV9taW1lVHlwZVNldC5hZGQobWlt
ZVR5cGUpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbV9taW1lVHlwZVNl
dC5hZGQoQXRvbWljU3RyaW5nKGN1cnJlbnQuY2Fwc1N0cmluZykpOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIEdzdFJlZ2lzdHJ5U2Nhbm5lcjo6aW5pdGlhbGl6ZSgpCit7CisgICAgaWYg
KGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShtX2F1ZGlvRGVjb2RlckZhY3Rvcmll
cywgImF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpNCIpKSB7CisgICAgICAgIG1fbWltZVR5
cGVTZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vYWFjIikpOworICAgICAgICBtX21pbWVUeXBl
U2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL21wNCIpKTsKKyAgICAgICAgbV9taW1lVHlwZVNl
dC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby94LW00YSIpKTsKKyAgICAgICAgbV9jb2RlY01hcC5h
ZGQoQXRvbWljU3RyaW5nKCJtcDRhKiIpLCBmYWxzZSk7CisgICAgfQorCisgICAgYm9vbCBvcHVz
U3VwcG9ydGVkID0gZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKG1fYXVkaW9EZWNv
ZGVyRmFjdG9yaWVzLCAiYXVkaW8veC1vcHVzIik7CisgICAgaWYgKG9wdXNTdXBwb3J0ZWQpIHsK
KyAgICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9vcHVzIikpOwor
ICAgICAgICBtX2NvZGVjTWFwLmFkZChBdG9taWNTdHJpbmcoIm9wdXMiKSwgZmFsc2UpOworICAg
ICAgICBtX2NvZGVjTWFwLmFkZChBdG9taWNTdHJpbmcoIngtb3B1cyIpLCBmYWxzZSk7CisgICAg
fQorCisgICAgYm9vbCB2b3JiaXNTdXBwb3J0ZWQgPSBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JN
ZWRpYVR5cGUobV9hdWRpb0RlY29kZXJGYWN0b3JpZXMsICJhdWRpby94LXZvcmJpcyIpOworICAg
IGlmICh2b3JiaXNTdXBwb3J0ZWQpIHsKKyAgICAgICAgbV9jb2RlY01hcC5hZGQoQXRvbWljU3Ry
aW5nKCJ2b3JiaXMiKSwgZmFsc2UpOworICAgICAgICBtX2NvZGVjTWFwLmFkZChBdG9taWNTdHJp
bmcoIngtdm9yYmlzIiksIGZhbHNlKTsKKyAgICB9CisKKyAgICBpZiAoZ3N0UmVnaXN0cnlIYXNF
bGVtZW50Rm9yTWVkaWFUeXBlKG1fZGVtdXhlckZhY3RvcmllcywgInZpZGVvL3gtbWF0cm9za2Ei
KSkgeworICAgICAgICBhdXRvIHZwOERlY29kZXJBdmFpbGFibGUgPSBnc3RSZWdpc3RyeUhhc0Vs
ZW1lbnRGb3JNZWRpYVR5cGUobV92aWRlb0RlY29kZXJGYWN0b3JpZXMsICJ2aWRlby94LXZwOCIs
IHRydWUpOworICAgICAgICBhdXRvIHZwOURlY29kZXJBdmFpbGFibGUgPSBnc3RSZWdpc3RyeUhh
c0VsZW1lbnRGb3JNZWRpYVR5cGUobV92aWRlb0RlY29kZXJGYWN0b3JpZXMsICJ2aWRlby94LXZw
OSIsIHRydWUpOworCisgICAgICAgIGlmICh2cDhEZWNvZGVyQXZhaWxhYmxlIHx8IHZwOURlY29k
ZXJBdmFpbGFibGUpCisgICAgICAgICAgICBtX21pbWVUeXBlU2V0LmFkZChBdG9taWNTdHJpbmco
InZpZGVvL3dlYm0iKSk7CisKKyAgICAgICAgaWYgKHZwOERlY29kZXJBdmFpbGFibGUpIHsKKyAg
ICAgICAgICAgIG1fY29kZWNNYXAuYWRkKEF0b21pY1N0cmluZygidnA4IiksIHZwOERlY29kZXJB
dmFpbGFibGUudXNpbmdIYXJkd2FyZSk7CisgICAgICAgICAgICBtX2NvZGVjTWFwLmFkZChBdG9t
aWNTdHJpbmcoIngtdnA4IiksIHZwOERlY29kZXJBdmFpbGFibGUudXNpbmdIYXJkd2FyZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHZwOURlY29kZXJBdmFpbGFibGUpIHsKKyAgICAgICAgICAg
IG1fY29kZWNNYXAuYWRkKEF0b21pY1N0cmluZygidnA5IiksIHZwOURlY29kZXJBdmFpbGFibGUu
dXNpbmdIYXJkd2FyZSk7CisgICAgICAgICAgICBtX2NvZGVjTWFwLmFkZChBdG9taWNTdHJpbmco
IngtdnA5IiksIHZwOURlY29kZXJBdmFpbGFibGUudXNpbmdIYXJkd2FyZSk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKG9wdXNTdXBwb3J0ZWQpCisgICAgICAgICAgICBtX21pbWVUeXBlU2V0LmFk
ZChBdG9taWNTdHJpbmcoImF1ZGlvL3dlYm0iKSk7CisgICAgfQorCisgICAgYXV0byBoMjY0RGVj
b2RlckF2YWlsYWJsZSA9IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShtX3ZpZGVv
RGVjb2RlckZhY3RvcmllcywgInZpZGVvL3gtaDI2NCwgcHJvZmlsZT0oc3RyaW5nKXsgY29uc3Ry
YWluZWQtYmFzZWxpbmUsIGJhc2VsaW5lLCBoaWdoIH0iLCB0cnVlKTsKKyAgICBpZiAoaDI2NERl
Y29kZXJBdmFpbGFibGUpIHsKKyAgICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5n
KCJ2aWRlby9tcDQiKSk7CisgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygi
dmlkZW8veC1tNHYiKSk7CisgICAgICAgIG1fY29kZWNNYXAuYWRkKEF0b21pY1N0cmluZygieC1o
MjY0IiksIGgyNjREZWNvZGVyQXZhaWxhYmxlLnVzaW5nSGFyZHdhcmUpOworICAgICAgICBtX2Nv
ZGVjTWFwLmFkZChBdG9taWNTdHJpbmcoImF2YyoiKSwgaDI2NERlY29kZXJBdmFpbGFibGUudXNp
bmdIYXJkd2FyZSk7CisgICAgICAgIG1fY29kZWNNYXAuYWRkKEF0b21pY1N0cmluZygibXA0dioi
KSwgaDI2NERlY29kZXJBdmFpbGFibGUudXNpbmdIYXJkd2FyZSk7CisgICAgfQorCisgICAgaWYg
KG1faXNNZWRpYVNvdXJjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIG1pbWUtdHlw
ZXMgaW5pdGlhbGl6ZWQgYmVsb3cgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIE1TRSBiYWNrZW5k
LgorCisgICAgVmVjdG9yPEdzdENhcHNXZWJLaXRNYXBwaW5nPiBtYXBwaW5nID0geworICAgICAg
ICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8vbWlkaSIsIHsiYXVkaW8vbWlkaSIsICJhdWRpby9yaWZm
LW1pZGkifSwgeyB9fSwKKyAgICAgICAge0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtYWMzIiwgeyB9
LCB7IH19LAorICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8veC1kdHMiLCB7IH0sIHsgfX0s
CisgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LWVhYzMiLCB7ImF1ZGlvL3gtYWMzIn0s
IHsgfX0sCisgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LWZsYWMiLCB7ImF1ZGlvL3gt
ZmxhYyIsICJhdWRpby9mbGFjIn0sIHsgfX0sCisgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRp
by94LXNiYyIsIHsgfSwgeyB9fSwKKyAgICAgICAge0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtc2lk
IiwgeyB9LCB7IH19LAorICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8veC1zcGVleCIsIHsi
YXVkaW8vc3BlZXgiLCAiYXVkaW8veC1zcGVleCJ9LCB7IH19LAorICAgICAgICB7QXVkaW9EZWNv
ZGVyLCAiYXVkaW8veC13YXZwYWNrIiwgeyJhdWRpby94LXdhdnBhY2sifSwgeyB9fSwKKyAgICAg
ICAge1ZpZGVvRGVjb2RlciwgInZpZGVvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpezEsMn0sIHN5
c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZSIsIHsidmlkZW8vbXBlZyJ9LCB7Im1wZWcifX0sCisg
ICAgICAgIHtWaWRlb0RlY29kZXIsICJ2aWRlby9tcGVndHMiLCB7IH0sIHsgfX0sCisgICAgICAg
IHtWaWRlb0RlY29kZXIsICJ2aWRlby94LWRpcmFjIiwgeyB9LCB7IH19LAorICAgICAgICB7Vmlk
ZW9EZWNvZGVyLCAidmlkZW8veC1mbGFzaC12aWRlbyIsIHsidmlkZW8vZmx2IiwgInZpZGVvL3gt
Zmx2In0sIHsgfX0sCisgICAgICAgIHtWaWRlb0RlY29kZXIsICJ2aWRlby94LWgyNjMiLCB7IH0s
IHsgfX0sCisgICAgICAgIHtWaWRlb0RlY29kZXIsICJ2aWRlby94LW1zdmlkZW9jb2RlYyIsIHsi
dmlkZW8veC1tc3ZpZGVvIn0sIHsgfX0sCisgICAgICAgIHtEZW11eGVyLCAiYXBwbGljYXRpb24v
dm5kLnJuLXJlYWxtZWRpYSIsIHsgfSwgeyB9fSwKKyAgICAgICAge0RlbXV4ZXIsICJhcHBsaWNh
dGlvbi94LTNncCIsIHsgfSwgeyB9fSwKKyAgICAgICAge0RlbXV4ZXIsICJhcHBsaWNhdGlvbi94
LWhscyIsIHsiYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1cmwiLCAiYXBwbGljYXRpb24veC1t
cGVndXJsIn0sIHsgfX0sCisgICAgICAgIHtEZW11eGVyLCAiYXBwbGljYXRpb24veC1wbi1yZWFs
YXVkaW8iLCB7IH0sIHsgfX0sCisgICAgICAgIHtEZW11eGVyLCAiYXVkaW8veC1haWZmIiwgeyB9
LCB7IH19LAorICAgICAgICB7RGVtdXhlciwgImF1ZGlvL3gtd2F2IiwgeyJhdWRpby94LXdhdiIs
ICJhdWRpby93YXYiLCAiYXVkaW8vdm5kLndhdmUifSwgeyIxIn19LAorICAgICAgICB7RGVtdXhl
ciwgInZpZGVvL3F1aWNrdGltZSIsIHsgfSwgeyB9fSwKKyAgICAgICAge0RlbXV4ZXIsICJ2aWRl
by9xdWlja3RpbWUsIHZhcmlhbnQ9KHN0cmluZykzZ3BwIiwgeyJ2aWRlby8zZ3BwIn0sIHsgfX0s
CisgICAgICAgIHtEZW11eGVyLCAidmlkZW8veC1tcy1hc2YiLCB7IH0sIHsgfX0sCisgICAgfTsK
KyAgICBmaWxsTWltZVR5cGVTZXRGcm9tQ2Fwc01hcHBpbmcobWFwcGluZyk7CisKKyAgICBpZiAo
Z3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKG1fZGVtdXhlckZhY3RvcmllcywgImFw
cGxpY2F0aW9uL29nZyIpKSB7CisgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmlu
ZygiYXBwbGljYXRpb24vb2dnIikpOworCisgICAgICAgIGlmICh2b3JiaXNTdXBwb3J0ZWQpIHsK
KyAgICAgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vb2dnIikp
OworICAgICAgICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby94LXZv
cmJpcytvZ2ciKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVt
ZW50Rm9yTWVkaWFUeXBlKG1fYXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAiYXVkaW8veC1zcGVleCIp
KSB7CisgICAgICAgICAgICBtX21pbWVUeXBlU2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL29n
ZyIpKTsKKyAgICAgICAgICAgIG1fY29kZWNNYXAuYWRkKEF0b21pY1N0cmluZygic3BlZXgiKSwg
ZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZv
ck1lZGlhVHlwZShtX3ZpZGVvRGVjb2RlckZhY3RvcmllcywgInZpZGVvL3gtdGhlb3JhIikpIHsK
KyAgICAgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygidmlkZW8vb2dnIikp
OworICAgICAgICAgICAgbV9jb2RlY01hcC5hZGQoQXRvbWljU3RyaW5nKCJ0aGVvcmEiKSwgZmFs
c2UpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBhdWRpb01wZWdTdXBwb3J0ZWQgPSBm
YWxzZTsKKyAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKG1fYXVkaW9E
ZWNvZGVyRmFjdG9yaWVzLCAiYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxLCBsYXllcj0o
aW50KVsxLCAzXSIpKSB7CisgICAgICAgIGF1ZGlvTXBlZ1N1cHBvcnRlZCA9IHRydWU7CisgICAg
ICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vbXAxIikpOworICAgICAg
ICBtX21pbWVUeXBlU2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL21wMyIpKTsKKyAgICAgICAg
bV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby94LW1wMyIpKTsKKyAgICAgICAg
bV9jb2RlY01hcC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9tcDMiKSwgZmFsc2UpOworICAgIH0K
KworICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUobV9hdWRpb0RlY29k
ZXJGYWN0b3JpZXMsICJhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTIiKSkgeworICAgICAg
ICBhdWRpb01wZWdTdXBwb3J0ZWQgPSB0cnVlOworICAgICAgICBtX21pbWVUeXBlU2V0LmFkZChB
dG9taWNTdHJpbmcoImF1ZGlvL21wMiIpKTsKKyAgICB9CisKKyAgICBhdWRpb01wZWdTdXBwb3J0
ZWQgfD0gc3VwcG9ydHNDb250YWluZXJUeXBlKCJhdWRpby9tcDQiKTsKKyAgICBpZiAoYXVkaW9N
cGVnU3VwcG9ydGVkKSB7CisgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygi
YXVkaW8vbXBlZyIpKTsKKyAgICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5nKCJh
dWRpby94LW1wZWciKSk7CisgICAgfQorCisgICAgYm9vbCBtYXRyb3NrYVN1cHBvcnRlZCA9IGdz
dFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShtX2RlbXV4ZXJGYWN0b3JpZXMsICJ2aWRl
by94LW1hdHJvc2thIik7CisgICAgaWYgKG1hdHJvc2thU3VwcG9ydGVkKSB7CisgICAgICAgIG1f
bWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygidmlkZW8veC1tYXRyb3NrYSIpKTsKKworICAg
ICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKG1fdmlkZW9EZWNvZGVy
RmFjdG9yaWVzLCAidmlkZW8veC12cDEwIikpCisgICAgICAgICAgICBtX21pbWVUeXBlU2V0LmFk
ZChBdG9taWNTdHJpbmcoInZpZGVvL3dlYm0iKSk7CisgICAgfQorCisgICAgaWYgKChtYXRyb3Nr
YVN1cHBvcnRlZCB8fCBzdXBwb3J0c0NvbnRhaW5lclR5cGUoInZpZGVvL21wNCIpKSAmJiBnc3RS
ZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUobV92aWRlb0RlY29kZXJGYWN0b3JpZXMsICJ2
aWRlby94LWF2MSIpKQorICAgICAgICBtX2NvZGVjTWFwLmFkZChBdG9taWNTdHJpbmcoImF2MDEq
IiksIGZhbHNlKTsKK30KKworYm9vbCBHc3RSZWdpc3RyeVNjYW5uZXI6OnN1cHBvcnRzQ29kZWMo
U3RyaW5nIGNvZGVjLCBib29sIHVzaW5nSGFyZHdhcmUpIGNvbnN0Cit7CisgICAgLy8gSWYgdGhl
IGNvZGVjIGlzIG5hbWVkIGxpa2UgYSBtaW1ldHlwZSAoZWc6IHZpZGVvL2F2YykgcmVtb3ZlIHRo
ZSAidmlkZW8vIiBwYXJ0LgorICAgIHNpemVfdCBzbGFzaEluZGV4ID0gY29kZWMuZmluZCgnLycp
OworICAgIGlmIChzbGFzaEluZGV4ICE9IFdURjo6bm90Rm91bmQpCisgICAgICAgIGNvZGVjID0g
Y29kZWMuc3Vic3RyaW5nKHNsYXNoSW5kZXgrMSk7CisKKyAgICBHU1RfTE9HKCJDaGVja2luZyBj
b2RlYyBcIiVzXCIiLCBjb2RlYy51dGY4KCkuZGF0YSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGl0ZW0gOiBtX2NvZGVjTWFwKSB7CisgICAgICAgIGJvb2wgY29kZWNNYXRjaGVzUGF0dGVybiA9
ICFmbm1hdGNoKGl0ZW0ua2V5LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGNvZGVjLnV0ZjgoKS5k
YXRhKCksIDApOworICAgICAgICBpZiAoY29kZWNNYXRjaGVzUGF0dGVybikKKyAgICAgICAgICAg
IHJldHVybiB1c2luZ0hhcmR3YXJlID8gaXRlbS52YWx1ZSA6IHRydWU7CisgICAgfQorCisgICAg
R1NUX0xPRygiVW5zdXBwb3J0ZWQiKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgR3N0
UmVnaXN0cnlTY2FubmVyOjpzdXBwb3J0c0FsbENvZGVjcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYg
Y29kZWNzLCBib29sIHVzaW5nSGFyZHdhcmUpIGNvbnN0Cit7CisgICAgZm9yIChTdHJpbmcgY29k
ZWMgOiBjb2RlY3MpIHsKKyAgICAgICAgaWYgKCFzdXBwb3J0c0NvZGVjKGNvZGVjLCB1c2luZ0hh
cmR3YXJlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBHc3RSZWdpc3RyeVNjYW5uZXI6OmlzRGVjb2RpbmdTdXBwb3J0ZWQo
TWVkaWFDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uLCBib29sKiB1c2luZ0hhcmR3YXJlKSBj
b25zdAoreworICAgIGJvb2wgZGVjb2RlckZvdW5kID0gZmFsc2U7CisgICAgaWYgKHVzaW5nSGFy
ZHdhcmUpCisgICAgICAgICp1c2luZ0hhcmR3YXJlID0gZmFsc2U7CisKKyAgICBpZiAoY29uZmln
dXJhdGlvbi52aWRlbykgeworICAgICAgICBhdXRvJiB2aWRlb0NvbmZpZ3VyYXRpb24gPSBjb25m
aWd1cmF0aW9uLnZpZGVvLnZhbHVlKCk7CisgICAgICAgIEdTVF9ERUJVRygiQ2hlY2tpbmcgc3Vw
cG9ydCBmb3IgdmlkZW8gY29uZmlndXJhdGlvbjogXCIlc1wiIHNpemU6ICV1eCV1IGJpdHJhdGU6
ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBmcmFtZXJhdGU6ICVmIiwgdmlkZW9Db25maWd1cmF0aW9u
LmNvbnRlbnRUeXBlLnV0ZjgoKS5kYXRhKCksIHZpZGVvQ29uZmlndXJhdGlvbi53aWR0aCwgdmlk
ZW9Db25maWd1cmF0aW9uLmhlaWdodCwgdmlkZW9Db25maWd1cmF0aW9uLmJpdHJhdGUsIHZpZGVv
Q29uZmlndXJhdGlvbi5mcmFtZXJhdGUpOworCisgICAgICAgIGF1dG8gY29udGVudFR5cGUgPSBD
b250ZW50VHlwZSh2aWRlb0NvbmZpZ3VyYXRpb24uY29udGVudFR5cGUpOworICAgICAgICBkZWNv
ZGVyRm91bmQgPSBzdXBwb3J0c0NvbnRhaW5lclR5cGUoY29udGVudFR5cGUuY29udGFpbmVyVHlw
ZSgpKTsKKyAgICAgICAgYXV0byBjb2RlY3MgPSBjb250ZW50VHlwZS5jb2RlY3MoKTsKKyAgICAg
ICAgaWYgKHVzaW5nSGFyZHdhcmUgJiYgIWNvZGVjcy5pc0VtcHR5KCkpCisgICAgICAgICAgICAq
dXNpbmdIYXJkd2FyZSA9IHN1cHBvcnRzQWxsQ29kZWNzKGNvZGVjcywgdHJ1ZSk7CisgICAgfQor
CisgICAgaWYgKGNvbmZpZ3VyYXRpb24uYXVkaW8pIHsKKyAgICAgICAgYXV0byYgYXVkaW9Db25m
aWd1cmF0aW9uID0gY29uZmlndXJhdGlvbi5hdWRpby52YWx1ZSgpOworICAgICAgICBHU1RfREVC
VUcoIkNoZWNraW5nIHN1cHBvcnQgZm9yIGF1ZGlvIGNvbmZpZ3VyYXRpb246IFwiJXNcIiAlcyBj
aGFubmVscywgYml0cmF0ZTogJSIgR19HVUlOVDY0X0ZPUk1BVCAiIHNhbXBsZXJhdGU6ICV1Iiwg
YXVkaW9Db25maWd1cmF0aW9uLmNvbnRlbnRUeXBlLnV0ZjgoKS5kYXRhKCksIGF1ZGlvQ29uZmln
dXJhdGlvbi5jaGFubmVscy51dGY4KCkuZGF0YSgpLCBhdWRpb0NvbmZpZ3VyYXRpb24uYml0cmF0
ZSwgYXVkaW9Db25maWd1cmF0aW9uLnNhbXBsZXJhdGUpOworICAgICAgICBhdXRvIGNvbnRlbnRU
eXBlID0gQ29udGVudFR5cGUoYXVkaW9Db25maWd1cmF0aW9uLmNvbnRlbnRUeXBlKTsKKyAgICAg
ICAgZGVjb2RlckZvdW5kID0gc3VwcG9ydHNDb250YWluZXJUeXBlKGNvbnRlbnRUeXBlLmNvbnRh
aW5lclR5cGUoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGRlY29kZXJGb3VuZDsKK30KKworfQor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvR3N0UmVnaXN0cnlTY2FubmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR3N0UmVnaXN0cnlTY2FubmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTU3MjM0M2My
NDM3MWJjMGJkZjM0OWE5M2YwZjQ2YzE4YWRjYzAwZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9Hc3RSZWdpc3RyeVNjYW5uZXIu
aApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwK
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJNZWRpYUNvbmZp
Z3VyYXRpb24uaCIKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIENvbnRlbnRUeXBlOworCitjbGFzcyBHc3RSZWdpc3RyeVNjYW5uZXIgeworICAgIGZyaWVu
ZCBOZXZlckRlc3Ryb3llZDxHc3RSZWdpc3RyeVNjYW5uZXI+OworcHVibGljOgorICAgIHN0YXRp
YyBHc3RSZWdpc3RyeVNjYW5uZXImIHNpbmdsZXRvbigpOworCisgICAgSGFzaFNldDxTdHJpbmcs
IEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIG1pbWVUeXBlU2V0KCkgeyByZXR1cm4gbV9taW1l
VHlwZVNldDsgfQorCisgICAgYm9vbCBzdXBwb3J0c0NvbnRhaW5lclR5cGUoU3RyaW5nIGNvbnRh
aW5lclR5cGUpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVR5cGVTZXQuY29udGFpbnMoY29udGFpbmVy
VHlwZSk7IH0KKworICAgIGJvb2wgaXNEZWNvZGluZ1N1cHBvcnRlZChNZWRpYUNvbmZpZ3VyYXRp
b24mLCBib29sKiB1c2luZ0hhcmR3YXJlID0gbnVsbHB0cikgY29uc3Q7CisgICAgYm9vbCBzdXBw
b3J0c0NvZGVjKFN0cmluZyBjb2RlYywgYm9vbCB1c2luZ0hhcmR3YXJlID0gZmFsc2UpIGNvbnN0
OworICAgIGJvb2wgc3VwcG9ydHNBbGxDb2RlY3MoY29uc3QgVmVjdG9yPFN0cmluZz4mIGNvZGVj
cywgYm9vbCB1c2luZ0hhcmR3YXJlID0gZmFsc2UpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAg
R3N0UmVnaXN0cnlTY2FubmVyKGJvb2wgaXNNZWRpYVNvdXJjZSA9IGZhbHNlKTsKKyAgICB+R3N0
UmVnaXN0cnlTY2FubmVyKCk7CisKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKKworICAgIGVudW0g
RWxlbWVudFR5cGUgeworICAgICAgICBBdWRpb0RlY29kZXIgPSAwLAorICAgICAgICBWaWRlb0Rl
Y29kZXIsCisgICAgICAgIERlbXV4ZXIKKyAgICB9OworICAgIHN0cnVjdCBHc3RDYXBzV2ViS2l0
TWFwcGluZyB7CisgICAgICAgIEVsZW1lbnRUeXBlIGVsZW1lbnRUeXBlOworICAgICAgICBjb25z
dCBjaGFyKiBjYXBzU3RyaW5nOworICAgICAgICBWZWN0b3I8QXRvbWljU3RyaW5nPiB3ZWJraXRN
aW1lVHlwZXM7CisgICAgICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHdlYmtpdENvZGVjUGF0dGVy
bnM7CisgICAgfTsKKyAgICB2b2lkIGZpbGxNaW1lVHlwZVNldEZyb21DYXBzTWFwcGluZyhWZWN0
b3I8R3N0Q2Fwc1dlYktpdE1hcHBpbmc+Jik7CisKKyAgICBzdHJ1Y3QgUmVnaXN0cnlMb29rdXBS
ZXN1bHQgeworICAgICAgICBib29sIHN1cHBvcnRlZDsKKyAgICAgICAgYm9vbCB1c2luZ0hhcmR3
YXJlOworCisgICAgICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBzdXBwb3J0ZWQ7
IH0KKyAgICB9OworICAgIFJlZ2lzdHJ5TG9va3VwUmVzdWx0IGdzdFJlZ2lzdHJ5SGFzRWxlbWVu
dEZvck1lZGlhVHlwZShHTGlzdCogZWxlbWVudEZhY3RvcmllcywgY29uc3QgY2hhciogY2Fwc1N0
cmluZywgYm9vbCBjaGVja0hhcmR3YXJlQ2xhc3NpZmllciA9IGZhbHNlKTsKKworcHJpdmF0ZToK
KyAgICBib29sIG1faXNNZWRpYVNvdXJjZTsKKyAgICBHTGlzdCogbV9hdWRpb0RlY29kZXJGYWN0
b3JpZXM7CisgICAgR0xpc3QqIG1fdmlkZW9EZWNvZGVyRmFjdG9yaWVzOworICAgIEdMaXN0KiBt
X2RlbXV4ZXJGYWN0b3JpZXM7CisgICAgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0
aXZlSGFzaD4gbV9taW1lVHlwZVNldDsKKyAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgYm9vbD4g
bV9jb2RlY01hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeUdTdHJlYW1lci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFFbmdpbmVD
b25maWd1cmF0aW9uRmFjdG9yeUdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTM4NWUyN2UzMTRi
NjA0ODM3NTY5YzUwMTg2MDg4YWUyMWZiMGJhYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYUVuZ2luZUNvbmZpZ3VyYXRp
b25GYWN0b3J5R1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisg
KiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9M
REVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFj
dG9yeUdTdHJlYW1lci5oIgorCisjaWYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIkdzdFJl
Z2lzdHJ5U2Nhbm5lci5oIgorI2luY2x1ZGUgIk1lZGlhQ2FwYWJpbGl0aWVzSW5mby5oIgorI2lu
Y2x1ZGUgIk1lZGlhRGVjb2RpbmdDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKworI2lmIEVOQUJMRShNRURJQV9TT1VS
Q0UpCisjaW5jbHVkZSAiR3N0UmVnaXN0cnlTY2FubmVyTVNFLmgiCisjZW5kaWYKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit2b2lkIGNyZWF0ZU1lZGlhUGxheWVyRGVjb2RpbmdDb25maWd1cmF0
aW9uR1N0cmVhbWVyKE1lZGlhRGVjb2RpbmdDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoTWVkaWFDYXBhYmlsaXRpZXNJbmZvJiYpPiYmIGNhbGxiYWNrKQor
eworICAgIGJvb2wgaXNNZWRpYVNvdXJjZSA9IGNvbmZpZ3VyYXRpb24udHlwZSA9PSBNZWRpYURl
Y29kaW5nVHlwZTo6TWVkaWFTb3VyY2U7CisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKyAgICBh
dXRvJiBzY2FubmVyID0gaXNNZWRpYVNvdXJjZSA/IEdzdFJlZ2lzdHJ5U2Nhbm5lck1TRTo6c2lu
Z2xldG9uKCkgOiBHc3RSZWdpc3RyeVNjYW5uZXI6OnNpbmdsZXRvbigpOworI2Vsc2UKKyAgICBp
ZiAoaXNNZWRpYVNvdXJjZSkgeworICAgICAgICBjYWxsYmFjayh7IH0pOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGF1dG8mIHNjYW5uZXIgPSBHc3RSZWdpc3RyeVNjYW5uZXI6OnNpbmds
ZXRvbigpOworI2VuZGlmCisgICAgYm9vbCB1c2luZ0hhcmR3YXJlID0gZmFsc2U7CisgICAgTWVk
aWFDYXBhYmlsaXRpZXNJbmZvIGluZm87CisgICAgaW5mby5zdXBwb3J0ZWQgPSBzY2FubmVyLmlz
RGVjb2RpbmdTdXBwb3J0ZWQoY29uZmlndXJhdGlvbiwgJnVzaW5nSGFyZHdhcmUpOworICAgIGlu
Zm8ucG93ZXJFZmZpY2llbnQgPSB1c2luZ0hhcmR3YXJlOworCisgICAgY2FsbGJhY2soV1RGTW92
ZShpbmZvKSk7Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlH
U3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5R1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWU5
ZWMyMTc4YTU4NzkyNDY3ODU2YmI1YThmMDdhYTUzY2YzMjQ1MQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYUVuZ2luZUNv
bmZpZ3VyYXRpb25GYWN0b3J5R1N0cmVhbWVyLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAg
ICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgTWVkaWFDYXBhYmls
aXRpZXNJbmZvOworc3RydWN0IE1lZGlhRGVjb2RpbmdDb25maWd1cmF0aW9uOworCitleHRlcm4g
dm9pZCBjcmVhdGVNZWRpYVBsYXllckRlY29kaW5nQ29uZmlndXJhdGlvbkdTdHJlYW1lcihNZWRp
YURlY29kaW5nQ29uZmlndXJhdGlvbiYsIFdURjo6RnVuY3Rpb248dm9pZChNZWRpYUNhcGFiaWxp
dGllc0luZm8mJik+JiYpOworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCBmY2E5MmVkOWZlNzhjMGI0OTExOGJlY2U3
MjhiMWZkYjAwMzcyZDM5Li5mY2M0MzJmY2JhOTEzNjRhOThkN2EwYjYxM2Y2ZGQ0MWVmNzRiMTg3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApA
QCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkdT
dHJlYW1lckNvbW1vbi5oIgorI2luY2x1ZGUgIkdzdFJlZ2lzdHJ5U2Nhbm5lci5oIgogI2luY2x1
ZGUgIkhUVFBIZWFkZXJOYW1lcy5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNp
bmNsdWRlICJNZWRpYVBsYXllci5oIgpAQCAtMjIwOCwxMzcgKzIyMDksMTAgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdv
cmtTdGF0ZSBlcnJvcikKICAgICBtX3JlYWR5VGltZXJIYW5kbGVyLnN0b3AoKTsKIH0KIAotc3Rh
dGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBtaW1lVHlwZVNl
dCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNh
c2VJbnNlbnNpdGl2ZUhhc2g+PiBtaW1lVHlwZXMgPSBbXSgpCi0gICAgewotICAgICAgICBpbml0
aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRFbGVtZW50cygpOwotICAgICAgICBIYXNo
U2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBzZXQ7Ci0KLSAgICAgICAgR0xp
c3QqIGF1ZGlvRGVjb2RlckZhY3RvcmllcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRf
ZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9G
QUNUT1JZX1RZUEVfTUVESUFfQVVESU8sIEdTVF9SQU5LX01BUkdJTkFMKTsKLSAgICAgICAgR0xp
c3QqIHZpZGVvRGVjb2RlckZhY3RvcmllcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRf
ZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9G
QUNUT1JZX1RZUEVfTUVESUFfVklERU8sIEdTVF9SQU5LX01BUkdJTkFMKTsKLSAgICAgICAgR0xp
c3QqIGRlbXV4ZXJGYWN0b3JpZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZ2V0X2VsZW1l
bnRzKEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERU1VWEVSLCBHU1RfUkFOS19NQVJHSU5BTCk7
Ci0KLSAgICAgICAgZW51bSBFbGVtZW50VHlwZSB7Ci0gICAgICAgICAgICBBdWRpb0RlY29kZXIg
PSAwLAotICAgICAgICAgICAgVmlkZW9EZWNvZGVyLAotICAgICAgICAgICAgRGVtdXhlcgotICAg
ICAgICB9OwotICAgICAgICBzdHJ1Y3QgR3N0Q2Fwc1dlYktpdE1hcHBpbmcgewotICAgICAgICAg
ICAgRWxlbWVudFR5cGUgZWxlbWVudFR5cGU7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBjYXBz
U3RyaW5nOwotICAgICAgICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gd2Via2l0TWltZVR5cGVz
OwotICAgICAgICB9OwotCi0gICAgICAgIFZlY3RvcjxHc3RDYXBzV2ViS2l0TWFwcGluZz4gbWFw
cGluZyA9IHsKLSAgICAgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby9taWRpIiwgeyJhdWRp
by9taWRpIiwgImF1ZGlvL3JpZmYtbWlkaSJ9fSwKLSAgICAgICAgICAgIHtBdWRpb0RlY29kZXIs
ICJhdWRpby94LXNiYyIsIHsgfX0sCi0gICAgICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8v
eC1zaWQiLCB7IH19LAotICAgICAgICAgICAge0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtZmxhYyIs
IHsiYXVkaW8veC1mbGFjIiwgImF1ZGlvL2ZsYWMifX0sCi0gICAgICAgICAgICB7QXVkaW9EZWNv
ZGVyLCAiYXVkaW8veC13YXYiLCB7ImF1ZGlvL3gtd2F2IiwgImF1ZGlvL3dhdiIsICJhdWRpby92
bmQud2F2ZSJ9fSwKLSAgICAgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LXdhdnBhY2si
LCB7ImF1ZGlvL3gtd2F2cGFjayJ9fSwKLSAgICAgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRp
by94LXNwZWV4IiwgeyJhdWRpby9zcGVleCIsICJhdWRpby94LXNwZWV4In19LAotICAgICAgICAg
ICAge0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtYWMzIiwgeyB9fSwKLSAgICAgICAgICAgIHtBdWRp
b0RlY29kZXIsICJhdWRpby94LWVhYzMiLCB7ImF1ZGlvL3gtYWMzIn19LAotICAgICAgICAgICAg
e0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtZHRzIiwgeyB9fSwKLSAgICAgICAgICAgIHtWaWRlb0Rl
Y29kZXIsICJ2aWRlby94LWgyNjQsIHByb2ZpbGU9KHN0cmluZyloaWdoIiwgeyJ2aWRlby9tcDQi
LCAidmlkZW8veC1tNHYifX0sCi0gICAgICAgICAgICB7VmlkZW9EZWNvZGVyLCAidmlkZW8veC1t
c3ZpZGVvY29kZWMiLCB7InZpZGVvL3gtbXN2aWRlbyJ9fSwKLSAgICAgICAgICAgIHtWaWRlb0Rl
Y29kZXIsICJ2aWRlby94LWgyNjMiLCB7IH19LAotICAgICAgICAgICAge1ZpZGVvRGVjb2Rlciwg
InZpZGVvL21wZWd0cyIsIHsgfX0sCi0gICAgICAgICAgICB7VmlkZW9EZWNvZGVyLCAidmlkZW8v
bXBlZywgbXBlZ3ZlcnNpb249KGludCl7MSwyfSwgc3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNl
IiwgeyJ2aWRlby9tcGVnIn19LAotICAgICAgICAgICAge1ZpZGVvRGVjb2RlciwgInZpZGVvL3gt
ZGlyYWMiLCB7IH19LAotICAgICAgICAgICAge1ZpZGVvRGVjb2RlciwgInZpZGVvL3gtZmxhc2gt
dmlkZW8iLCB7InZpZGVvL2ZsdiIsICJ2aWRlby94LWZsdiJ9fSwKLSAgICAgICAgICAgIHtEZW11
eGVyLCAidmlkZW8vcXVpY2t0aW1lIiwgeyB9fSwKLSAgICAgICAgICAgIHtEZW11eGVyLCAidmlk
ZW8vcXVpY2t0aW1lLCB2YXJpYW50PShzdHJpbmcpM2dwcCIsIHsidmlkZW8vM2dwcCJ9fSwKLSAg
ICAgICAgICAgIHtEZW11eGVyLCAiYXBwbGljYXRpb24veC0zZ3AiLCB7IH19LAotICAgICAgICAg
ICAge0RlbXV4ZXIsICJ2aWRlby94LW1zLWFzZiIsIHsgfX0sCi0gICAgICAgICAgICB7RGVtdXhl
ciwgImF1ZGlvL3gtYWlmZiIsIHsgfX0sCi0gICAgICAgICAgICB7RGVtdXhlciwgImFwcGxpY2F0
aW9uL3gtcG4tcmVhbGF1ZGlvIiwgeyB9fSwKLSAgICAgICAgICAgIHtEZW11eGVyLCAiYXBwbGlj
YXRpb24vdm5kLnJuLXJlYWxtZWRpYSIsIHsgfX0sCi0gICAgICAgICAgICB7RGVtdXhlciwgImF1
ZGlvL3gtd2F2IiwgeyJhdWRpby94LXdhdiIsICJhdWRpby93YXYiLCAiYXVkaW8vdm5kLndhdmUi
fX0sCi0gICAgICAgICAgICB7RGVtdXhlciwgImFwcGxpY2F0aW9uL3gtaGxzIiwgeyJhcHBsaWNh
dGlvbi92bmQuYXBwbGUubXBlZ3VybCIsICJhcHBsaWNhdGlvbi94LW1wZWd1cmwifX0KLSAgICAg
ICAgfTsKLQotICAgICAgICBmb3IgKGF1dG8mIGN1cnJlbnQgOiBtYXBwaW5nKSB7Ci0gICAgICAg
ICAgICBHTGlzdCogZmFjdG9yaWVzID0gZGVtdXhlckZhY3RvcmllczsKLSAgICAgICAgICAgIGlm
IChjdXJyZW50LmVsZW1lbnRUeXBlID09IEF1ZGlvRGVjb2RlcikKLSAgICAgICAgICAgICAgICBm
YWN0b3JpZXMgPSBhdWRpb0RlY29kZXJGYWN0b3JpZXM7Ci0gICAgICAgICAgICBlbHNlIGlmIChj
dXJyZW50LmVsZW1lbnRUeXBlID09IFZpZGVvRGVjb2RlcikKLSAgICAgICAgICAgICAgICBmYWN0
b3JpZXMgPSB2aWRlb0RlY29kZXJGYWN0b3JpZXM7Ci0KLSAgICAgICAgICAgIGlmIChnc3RSZWdp
c3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoZmFjdG9yaWVzLCBjdXJyZW50LmNhcHNTdHJpbmcp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50LndlYmtpdE1pbWVUeXBlcy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBtaW1lVHlwZSA6IGN1
cnJlbnQud2Via2l0TWltZVR5cGVzKQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0LmFkZCht
aW1lVHlwZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHNl
dC5hZGQoQXRvbWljU3RyaW5nKGN1cnJlbnQuY2Fwc1N0cmluZykpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBvcHVzU3VwcG9ydGVkID0gZmFsc2U7Ci0gICAgICAg
IGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoYXVkaW9EZWNvZGVyRmFjdG9y
aWVzLCAiYXVkaW8veC1vcHVzIikpIHsKLSAgICAgICAgICAgIG9wdXNTdXBwb3J0ZWQgPSB0cnVl
OwotICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL29wdXMiKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBib29sIHZvcmJpc1N1cHBvcnRlZCA9IGZhbHNlOwotICAgICAgICBp
ZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGRlbXV4ZXJGYWN0b3JpZXMsICJh
cHBsaWNhdGlvbi9vZ2ciKSkgewotICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImFw
cGxpY2F0aW9uL29nZyIpKTsKLQotICAgICAgICAgICAgdm9yYmlzU3VwcG9ydGVkID0gZ3N0UmVn
aXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGF1ZGlvRGVjb2RlckZhY3RvcmllcywgImF1ZGlv
L3gtdm9yYmlzIik7Ci0gICAgICAgICAgICBpZiAodm9yYmlzU3VwcG9ydGVkKSB7Ci0gICAgICAg
ICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL29nZyIpKTsKLSAgICAgICAgICAg
ICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8veC12b3JiaXMrb2dnIikpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFU
eXBlKHZpZGVvRGVjb2RlckZhY3RvcmllcywgInZpZGVvL3gtdGhlb3JhIikpCi0gICAgICAgICAg
ICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoInZpZGVvL29nZyIpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGJvb2wgYXVkaW9NcGVnU3VwcG9ydGVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChnc3RS
ZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoYXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAiYXVk
aW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxLCBsYXllcj0oaW50KVsxLCAzXSIpKSB7Ci0gICAg
ICAgICAgICBhdWRpb01wZWdTdXBwb3J0ZWQgPSB0cnVlOwotICAgICAgICAgICAgc2V0LmFkZChB
dG9taWNTdHJpbmcoImF1ZGlvL21wMSIpKTsKLSAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3Ry
aW5nKCJhdWRpby9tcDMiKSk7Ci0gICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVk
aW8veC1tcDMiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVt
ZW50Rm9yTWVkaWFUeXBlKGF1ZGlvRGVjb2RlckZhY3RvcmllcywgImF1ZGlvL21wZWcsIG1wZWd2
ZXJzaW9uPShpbnQpezIsIDR9IikpIHsKLSAgICAgICAgICAgIGF1ZGlvTXBlZ1N1cHBvcnRlZCA9
IHRydWU7Ci0gICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vYWFjIikpOwot
ICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL21wMiIpKTsKLSAgICAgICAg
ICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9tcDQiKSk7Ci0gICAgICAgICAgICBzZXQu
YWRkKEF0b21pY1N0cmluZygiYXVkaW8veC1tNGEiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoYXVkaW9NcGVnU3VwcG9ydGVkKSB7Ci0gICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmlu
ZygiYXVkaW8vbXBlZyIpKTsKLSAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRp
by94LW1wZWciKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVt
ZW50Rm9yTWVkaWFUeXBlKGRlbXV4ZXJGYWN0b3JpZXMsICJ2aWRlby94LW1hdHJvc2thIikpIHsK
LSAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJ2aWRlby94LW1hdHJvc2thIikpOwot
Ci0gICAgICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKHZpZGVv
RGVjb2RlckZhY3RvcmllcywgInZpZGVvL3gtdnA4IikKLSAgICAgICAgICAgICAgICB8fCBnc3RS
ZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUodmlkZW9EZWNvZGVyRmFjdG9yaWVzLCAidmlk
ZW8veC12cDkiKQotICAgICAgICAgICAgICAgIHx8IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1l
ZGlhVHlwZSh2aWRlb0RlY29kZXJGYWN0b3JpZXMsICJ2aWRlby94LXZwMTAiKSkKLSAgICAgICAg
ICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygidmlkZW8vd2VibSIpKTsKLQotICAgICAgICAg
ICAgaWYgKHZvcmJpc1N1cHBvcnRlZCB8fCBvcHVzU3VwcG9ydGVkKQotICAgICAgICAgICAgICAg
IHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby93ZWJtIikpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZShhdWRpb0RlY29kZXJGYWN0b3JpZXMpOwot
ICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKHZpZGVvRGVjb2RlckZhY3Rvcmll
cyk7Ci0gICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUoZGVtdXhlckZhY3Rvcmll
cyk7Ci0gICAgICAgIHJldHVybiBzZXQ7Ci0gICAgfSgpOwotICAgIHJldHVybiBtaW1lVHlwZXM7
Ci19Ci0KIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpnZXRTdXBwb3J0ZWRUeXBl
cyhIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgdHlwZXMpCiB7Ci0g
ICAgdHlwZXMgPSBtaW1lVHlwZVNldCgpOworICAgIGF1dG8mIGdzdFJlZ2lzdHJ5U2Nhbm5lciA9
IEdzdFJlZ2lzdHJ5U2Nhbm5lcjo6c2luZ2xldG9uKCk7CisgICAgdHlwZXMgPSBnc3RSZWdpc3Ry
eVNjYW5uZXIubWltZVR5cGVTZXQoKTsKIH0KIAogTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2lu
ZVN1cHBvcnRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQpAQCAtMjM1OCwzMCArMjIzMiwyMSBAQCBN
ZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3Vw
cG9ydHNUeXBlKGNvbnN0IE1lZGlhRQogICAgIGlmIChwYXJhbWV0ZXJzLnR5cGUuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgLy8gU3BlYyBzYXlzIHdlIHNob3VsZCBu
b3QgcmV0dXJuICJwcm9iYWJseSIgaWYgdGhlIGNvZGVjcyBzdHJpbmcgaXMgZW1wdHkuCi0gICAg
aWYgKG1pbWVUeXBlU2V0KCkuY29udGFpbnMocGFyYW1ldGVycy50eXBlLmNvbnRhaW5lclR5cGUo
KSkpCi0gICAgICAgIHJlc3VsdCA9IHBhcmFtZXRlcnMudHlwZS5jb2RlY3MoKS5pc0VtcHR5KCkg
PyBNZWRpYVBsYXllcjo6TWF5QmVTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQ7
Ci0KKyAgICBHU1RfREVCVUcoIkNoZWNraW5nIG1pbWUtdHlwZSBcIiVzXCIiLCBwYXJhbWV0ZXJz
LnR5cGUucmF3KCkudXRmOCgpLmRhdGEoKSk7CiAgICAgYXV0byBjb250YWluZXJUeXBlID0gcGFy
YW1ldGVycy50eXBlLmNvbnRhaW5lclR5cGUoKTsKLSAgICBpZiAoY29udGFpbmVyVHlwZSA9PSAi
dmlkZW8vbXA0Il9zIHx8IGNvbnRhaW5lclR5cGUgPT0gInZpZGVvL3dlYm0iX3MpIHsKLSAgICAg
ICAgaWYgKG1pbWVUeXBlU2V0KCkuY29udGFpbnMoY29udGFpbmVyVHlwZSkpIHsKLSAgICAgICAg
ICAgIEdMaXN0KiB2aWRlb0RlY29kZXJGYWN0b3JpZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2xp
c3RfZ2V0X2VsZW1lbnRzKEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREVSIHwgR1NUX0VM
RU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX1ZJREVPLCBHU1RfUkFOS19NQVJHSU5BTCk7Ci0gICAg
ICAgICAgICBib29sIGF2MURlY29kZXJGb3VuZCA9IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1l
ZGlhVHlwZSh2aWRlb0RlY29kZXJGYWN0b3JpZXMsICJ2aWRlby94LWF2MSJfcyk7Ci0gICAgICAg
ICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKHZpZGVvRGVjb2RlckZhY3Rvcmllcyk7
Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNvZGVjIDogcGFyYW1ldGVycy50eXBlLmNvZGVjcygp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvZGVjLnN0YXJ0c1dpdGgoImF2MDEiX3MpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGF2MURlY29kZXJGb3VuZCA/IE1lZGlhUGxheWVy
OjpJc1N1cHBvcnRlZCA6IE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChj
b2RlYy5zdGFydHNXaXRoKCJhdjEiX3MpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgYXV0byYg
Z3N0UmVnaXN0cnlTY2FubmVyID0gR3N0UmVnaXN0cnlTY2FubmVyOjpzaW5nbGV0b24oKTsKKyAg
ICBpZiAoZ3N0UmVnaXN0cnlTY2FubmVyLnN1cHBvcnRzQ29udGFpbmVyVHlwZShjb250YWluZXJU
eXBlKSkgeworICAgICAgICAvLyBTcGVjIHNheXMgd2Ugc2hvdWxkIG5vdCByZXR1cm4gInByb2Jh
Ymx5IiBpZiB0aGUgY29kZWNzIHN0cmluZyBpcyBlbXB0eS4KKyAgICAgICAgVmVjdG9yPFN0cmlu
Zz4gY29kZWNzID0gcGFyYW1ldGVycy50eXBlLmNvZGVjcygpOworICAgICAgICBpZiAoY29kZWNz
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBv
cnRlZDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gZ3N0UmVnaXN0cnlTY2Fu
bmVyLnN1cHBvcnRzQWxsQ29kZWNzKGNvZGVjcykgPyBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQg
OiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CiAgICAgfQogCi0gICAgcmV0dXJuIGV4dGVu
ZGVkU3VwcG9ydHNUeXBlKHBhcmFtZXRlcnMsIHJlc3VsdCk7CisgICAgYXV0byBmaW5hbFJlc3Vs
dCA9IGV4dGVuZGVkU3VwcG9ydHNUeXBlKHBhcmFtZXRlcnMsIHJlc3VsdCk7CisgICAgR1NUX0RF
QlVHKCJTdXBwb3J0ZWQ6ICVzIiwgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoZmluYWxSZXN1
bHQpLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBmaW5hbFJlc3VsdDsKIH0KIAogdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldERvd25sb2FkQnVmZmVyaW5nKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBw
ZW5kUGlwZWxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHAKaW5kZXggODM5ZGE2MmQ3NzExMGRlN2EzNGVjMjkz
NmIyZThjZjU1MDgxMTUzYi4uZTVmOGViODRiNTM1ZGZjODc5ZGM1NTNjZjQwMDc0YWJhYjhhNDk0
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L21zZS9BcHBlbmRQaXBlbGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHAKQEAgLTI3LDYgKzI3LDcgQEAK
ICNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKICNpbmNsdWRlICJHU3RyZWFtZXJFTUVVdGls
aXRpZXMuaCIKICNpbmNsdWRlICJHU3RyZWFtZXJNZWRpYURlc2NyaXB0aW9uLmgiCisjaW5jbHVk
ZSAiR3N0UmVnaXN0cnlTY2FubmVyTVNFLmgiCiAjaW5jbHVkZSAiTWVkaWFTYW1wbGVHU3RyZWFt
ZXIuaCIKICNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCiAjaW5j
bHVkZSAiTWVkaWFEZXNjcmlwdGlvbi5oIgpAQCAtMTYyLDcgKzE2Myw4IEBAIEFwcGVuZFBpcGVs
aW5lOjpBcHBlbmRQaXBlbGluZShSZWY8TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U+IG1l
ZGlhU291cmNlQ2xpCiAgICAgfSwgdGhpcywgbnVsbHB0cik7CiAKICAgICBjb25zdCBTdHJpbmcm
IHR5cGUgPSBtX3NvdXJjZUJ1ZmZlclByaXZhdGUtPnR5cGUoKS5jb250YWluZXJUeXBlKCk7Ci0g
ICAgaWYgKHR5cGUuZW5kc1dpdGgoIm1wNCIpKQorICAgIEdTVF9ERUJVRygiU291cmNlQnVmZmVy
IGNvbnRhaW5lclR5cGU6ICVzIiwgdHlwZS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAodHlwZS5l
bmRzV2l0aCgibXA0IikgfHwgdHlwZS5lbmRzV2l0aCgiYWFjIikpCiAgICAgICAgIG1fZGVtdXgg
PSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInF0ZGVtdXgiLCBudWxscHRyKTsKICAgICBlbHNl
IGlmICh0eXBlLmVuZHNXaXRoKCJ3ZWJtIikpCiAgICAgICAgIG1fZGVtdXggPSBnc3RfZWxlbWVu
dF9mYWN0b3J5X21ha2UoIm1hdHJvc2thZGVtdXgiLCBudWxscHRyKTsKQEAgLTU3MCw3ICs1NzIs
OCBAQCB2b2lkIEFwcGVuZFBpcGVsaW5lOjpwYXJzZURlbXV4ZXJTcmNQYWRDYXBzKEdzdENhcHMq
IGRlbXV4ZXJTcmNQYWRDYXBzKQogICAgIG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291
cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VW5rbm93bjsKIAogICAgIGNvbnN0IGNoYXIqIG9yaWdp
bmFsTWVkaWFUeXBlID0gY2Fwc01lZGlhVHlwZShtX2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpKTsK
LSAgICBpZiAoIU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c3VwcG9ydHNDb2RlYyhv
cmlnaW5hbE1lZGlhVHlwZSkpIHsKKyAgICBhdXRvJiBnc3RSZWdpc3RyeVNjYW5uZXIgPSBHc3RS
ZWdpc3RyeVNjYW5uZXJNU0U6OnNpbmdsZXRvbigpOworICAgIGlmICghZ3N0UmVnaXN0cnlTY2Fu
bmVyLnN1cHBvcnRzQ29kZWMob3JpZ2luYWxNZWRpYVR5cGUpKSB7CiAgICAgICAgICAgICBtX3By
ZXNlbnRhdGlvblNpemUgPSBXZWJDb3JlOjpGbG9hdFNpemUoKTsKICAgICAgICAgICAgIG1fc3Ry
ZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6SW52YWxp
ZDsKICAgICB9IGVsc2UgaWYgKGRvQ2Fwc0hhdmVUeXBlKG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0
KCksIEdTVF9WSURFT19DQVBTX1RZUEVfUFJFRklYKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Hc3RSZWdpc3RyeVNjYW5uZXJN
U0UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9H
c3RSZWdpc3RyeVNjYW5uZXJNU0UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4ZTQ5MDk1MjgyNDg3NGUxZmZm
ZDgwZGJjZjA0NTNlZWVjOTY5YTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0dzdFJlZ2lzdHJ5U2Nhbm5lck1TRS5jcHAK
QEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEdTVFJFQU1FUikgJiYgRU5BQkxFKE1FRElBX1NP
VVJDRSkKKyNpbmNsdWRlICJHc3RSZWdpc3RyeVNjYW5uZXJNU0UuaCIKKworI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dzdFJlZ2lzdHJ5
U2Nhbm5lck1TRSYgR3N0UmVnaXN0cnlTY2FubmVyTVNFOjpzaW5nbGV0b24oKQoreworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxHc3RSZWdpc3RyeVNjYW5uZXJNU0U+IHNoYXJlZEluc3RhbmNl
OworICAgIHJldHVybiBzaGFyZWRJbnN0YW5jZTsKK30KKworR3N0UmVnaXN0cnlTY2FubmVyTVNF
OjpHc3RSZWdpc3RyeVNjYW5uZXJNU0UoKQorICAgIDogR3N0UmVnaXN0cnlTY2FubmVyOjpHc3RS
ZWdpc3RyeVNjYW5uZXIodHJ1ZSkKK3sKK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0dzdFJlZ2lzdHJ5U2Nh
bm5lck1TRS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21z
ZS9Hc3RSZWdpc3RyeVNjYW5uZXJNU0UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMGZjOTk3ZDYwOWE4OTNiNGFh
YmNkZjM1NmRiMGJhMjkzYzkzMDA0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Hc3RSZWdpc3RyeVNjYW5uZXJNU0UuaApA
QCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwKKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisK
KyNpbmNsdWRlICJHc3RSZWdpc3RyeVNjYW5uZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3N0UmVnaXN0cnlTY2FubmVyTVNF
IDogcHVibGljIEdzdFJlZ2lzdHJ5U2Nhbm5lciB7CisgICAgZnJpZW5kIE5ldmVyRGVzdHJveWVk
PEdzdFJlZ2lzdHJ5U2Nhbm5lck1TRT47CitwdWJsaWM6CisgICAgc3RhdGljIEdzdFJlZ2lzdHJ5
U2Nhbm5lck1TRSYgc2luZ2xldG9uKCk7Citwcm90ZWN0ZWQ6CisgICAgR3N0UmVnaXN0cnlTY2Fu
bmVyTVNFKCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0Uo
R1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0UuY3BwCmluZGV4IDJjYzNkMWE3ZTA5MDY2OWRjMzczY2M1MjQ4MzhjMzRm
YjU1ODZmNzAuLjVhYzE3NWIzYmIyMzY5OWU2Y2UxMGU2ZmE5MDc1ZDc5NTBjOGQzZjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBcHBlbmRQaXBlbGluZS5oIgogI2lu
Y2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiR1N0cmVhbWVy
Q29tbW9uLmgiCisjaW5jbHVkZSAiR3N0UmVnaXN0cnlTY2FubmVyTVNFLmgiCiAjaW5jbHVkZSAi
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVn
aXN0cnkuaCIKICNpbmNsdWRlICJNZWRpYURlc2NyaXB0aW9uLmgiCkBAIC00Miw3ICs0Myw2IEBA
CiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIu
aCIKIAotI2luY2x1ZGUgPGZubWF0Y2guaD4KICNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNpbmsu
aD4KICNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNyYy5oPgogI2luY2x1ZGUgPGdzdC9nc3QuaD4K
QEAgLTY4MiwzMCArNjgyLDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6
OmR1cmF0aW9uQ2hhbmdlZCgpCiAgICAgfQogfQogCi1zdGF0aWMgSGFzaFNldDxTdHJpbmcsIEFT
Q0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIG1pbWVUeXBlQ2FjaGUoKQotewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPj4g
Y2FjaGUgPSBbXSgpCi0gICAgewotICAgICAgICBpbml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0
ZXJXZWJLaXRFbGVtZW50cygpOwotICAgICAgICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5z
ZW5zaXRpdmVIYXNoPiBzZXQ7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG1pbWVUeXBlc1tdID0gewot
ICAgICAgICAgICAgInZpZGVvL21wNCIsCi0gICAgICAgICAgICAiYXVkaW8vbXA0IiwKLSAgICAg
ICAgICAgICJ2aWRlby93ZWJtIiwKLSAgICAgICAgICAgICJhdWRpby93ZWJtIgotICAgICAgICB9
OwotICAgICAgICBmb3IgKGF1dG8mIHR5cGUgOiBtaW1lVHlwZXMpCi0gICAgICAgICAgICBzZXQu
YWRkKHR5cGUpOwotICAgICAgICByZXR1cm4gc2V0OwotICAgIH0oKTsKLSAgICByZXR1cm4gY2Fj
aGU7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpnZXRTdXBwb3J0
ZWRUeXBlcyhIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgdHlwZXMp
Ci17Ci0gICAgdHlwZXMgPSBtaW1lVHlwZUNhY2hlKCk7Ci19Ci0KIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjp0cmFja0RldGVjdGVkKFJlZlB0cjxBcHBlbmRQaXBlbGluZT4g
YXBwZW5kUGlwZWxpbmUsIFJlZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiBuZXdUcmFj
aywgYm9vbCBmaXJzdFRyYWNrRGV0ZWN0ZWQpCiB7CiAgICAgQVNTRVJUKGFwcGVuZFBpcGVsaW5l
LT50cmFjaygpID09IG5ld1RyYWNrKTsKQEAgLTcyNiwxMDkgKzcwMiwxMCBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dHJhY2tEZXRlY3RlZChSZWZQdHI8QXBwZW5kUGlw
ZWxpbmU+IGFwcGVuZAogICAgICAgICBtX3BsYXliYWNrUGlwZWxpbmUtPnJlYXR0YWNoVHJhY2so
YXBwZW5kUGlwZWxpbmUtPnNvdXJjZUJ1ZmZlclByaXZhdGUoKSwgbmV3VHJhY2ssIGNhcHMpOwog
fQogCi1jb25zdCBzdGF0aWMgSGFzaFNldDxBdG9taWNTdHJpbmc+JiBjb2RlY1NldCgpCi17Ci0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbWljU3RyaW5nPj4gY29kZWNUeXBl
cyA9IFtdKCkKLSAgICB7Ci0gICAgICAgIGluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3Rlcldl
YktpdEVsZW1lbnRzKCk7Ci0gICAgICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiBzZXQ7Ci0KLSAg
ICAgICAgR0xpc3QqIGF1ZGlvRGVjb2RlckZhY3RvcmllcyA9IGdzdF9lbGVtZW50X2ZhY3Rvcnlf
bGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1Rf
RUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQVVESU8sIEdTVF9SQU5LX01BUkdJTkFMKTsKLSAg
ICAgICAgR0xpc3QqIHZpZGVvRGVjb2RlckZhY3RvcmllcyA9IGdzdF9lbGVtZW50X2ZhY3Rvcnlf
bGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1Rf
RUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfVklERU8sIEdTVF9SQU5LX01BUkdJTkFMKTsKLQot
ICAgICAgICBlbnVtIEVsZW1lbnRUeXBlIHsKLSAgICAgICAgICAgIEF1ZGlvRGVjb2RlciA9IDAs
Ci0gICAgICAgICAgICBWaWRlb0RlY29kZXIKLSAgICAgICAgfTsKLSAgICAgICAgc3RydWN0IEdz
dENhcHNXZWJLaXRNYXBwaW5nIHsKLSAgICAgICAgICAgIEVsZW1lbnRUeXBlIGVsZW1lbnRUeXBl
OwotICAgICAgICAgICAgY29uc3QgY2hhciogY2Fwc1N0cmluZzsKLSAgICAgICAgICAgIFZlY3Rv
cjxBdG9taWNTdHJpbmc+IHdlYmtpdENvZGVjczsKLSAgICAgICAgfTsKLQotICAgICAgICBHc3RD
YXBzV2ViS2l0TWFwcGluZyBtYXBwaW5nW10gPSB7Ci0gICAgICAgICAgICB7IFZpZGVvRGVjb2Rl
ciwgInZpZGVvL3gtaDI2NCwgIHByb2ZpbGU9KHN0cmluZyl7IGNvbnN0cmFpbmVkLWJhc2VsaW5l
LCBiYXNlbGluZSB9IiwgeyAieC1oMjY0IiwgImF2YyoiIH0gfSwKLSAgICAgICAgICAgIHsgVmlk
ZW9EZWNvZGVyLCAidmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCl7MSwyfSwgc3lzdGVtc3Ry
ZWFtPShib29sZWFuKWZhbHNlIiwgeyAibXBlZyIgfSB9LAotICAgICAgICAgICAgeyBWaWRlb0Rl
Y29kZXIsICJ2aWRlby94LXZwOCIsIHsgInZwOCIsICJ4LXZwOCIgfSB9LAotICAgICAgICAgICAg
eyBWaWRlb0RlY29kZXIsICJ2aWRlby94LXZwOSIsIHsgInZwOSIsICJ4LXZwOSIgfSB9LAotICAg
ICAgICAgICAgeyBBdWRpb0RlY29kZXIsICJhdWRpby94LXZvcmJpcyIsIHsgInZvcmJpcyIsICJ4
LXZvcmJpcyIgfSB9LAotICAgICAgICAgICAgeyBBdWRpb0RlY29kZXIsICJhdWRpby94LW9wdXMi
LCB7ICJvcHVzIiwgIngtb3B1cyIgfSB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZm9yIChhdXRv
JiBjdXJyZW50IDogbWFwcGluZykgewotICAgICAgICAgICAgR0xpc3QqIGZhY3RvcmllcyA9IG51
bGxwdHI7Ci0gICAgICAgICAgICBzd2l0Y2ggKGN1cnJlbnQuZWxlbWVudFR5cGUpIHsKLSAgICAg
ICAgICAgIGNhc2UgQXVkaW9EZWNvZGVyOgotICAgICAgICAgICAgICAgIGZhY3RvcmllcyA9IGF1
ZGlvRGVjb2RlckZhY3RvcmllczsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgVmlkZW9EZWNvZGVyOgotICAgICAgICAgICAgICAgIGZhY3RvcmllcyA9IHZpZGVvRGVj
b2RlckZhY3RvcmllczsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ19hc3NlcnRfbm9ubnVs
bChmYWN0b3JpZXMpOwotCi0gICAgICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9y
TWVkaWFUeXBlKGZhY3RvcmllcywgY3VycmVudC5jYXBzU3RyaW5nKSAmJiBmYWN0b3JpZXMgIT0g
bnVsbHB0cikgewotICAgICAgICAgICAgICAgIGlmICghY3VycmVudC53ZWJraXRDb2RlY3MuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgbWltZVR5cGUg
OiBjdXJyZW50LndlYmtpdENvZGVjcykKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldC5hZGQo
bWltZVR5cGUpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBz
ZXQuYWRkKEF0b21pY1N0cmluZyhjdXJyZW50LmNhcHNTdHJpbmcpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgYXVkaW9NcGVnU3VwcG9ydGVkID0gZmFsc2U7Ci0g
ICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoYXVkaW9EZWNvZGVy
RmFjdG9yaWVzLCAiYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxLCBsYXllcj0oaW50KVsx
LCAzXSIpKSB7Ci0gICAgICAgICAgICBhdWRpb01wZWdTdXBwb3J0ZWQgPSB0cnVlOwotICAgICAg
ICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL21wMyIpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoYXVkaW9EZWNvZGVy
RmFjdG9yaWVzLCAiYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCl7MiwgNH0iKSkgewotICAg
ICAgICAgICAgYXVkaW9NcGVnU3VwcG9ydGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHNldC5hZGQo
QXRvbWljU3RyaW5nKCJtcDRhKiIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhdWRpb01w
ZWdTdXBwb3J0ZWQpIHsKLSAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9t
cGVnIikpOwotICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL3gtbXBlZyIp
KTsKLSAgICAgICAgfQotCi0KLSAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZShh
dWRpb0RlY29kZXJGYWN0b3JpZXMpOwotICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9m
cmVlKHZpZGVvRGVjb2RlckZhY3Rvcmllcyk7Ci0KLSAgICAgICAgcmV0dXJuIHNldDsKLSAgICB9
KCk7Ci0gICAgcmV0dXJuIGNvZGVjVHlwZXM7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFOjpzdXBwb3J0c0NvZGVjKFN0cmluZyBjb2RlYykKLXsKLSAgICAvLyBJZiB0
aGUgY29kZWMgaXMgbmFtZWQgbGlrZSBhIG1pbWV0eXBlIChlZzogdmlkZW8vYXZjKSByZW1vdmUg
dGhlICJ2aWRlby8iIHBhcnQuCi0gICAgc2l6ZV90IHNsYXNoSW5kZXggPSBjb2RlYy5maW5kKCcv
Jyk7Ci0gICAgaWYgKHNsYXNoSW5kZXggIT0gV1RGOjpub3RGb3VuZCkKLSAgICAgICAgY29kZWMg
PSBjb2RlYy5zdWJzdHJpbmcoc2xhc2hJbmRleCsxKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYg
cGF0dGVybiA6IGNvZGVjU2V0KCkpIHsKLSAgICAgICAgYm9vbCBjb2RlY01hdGNoZXNQYXR0ZXJu
ID0gIWZubWF0Y2gocGF0dGVybi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBjb2RlYy51dGY4KCku
ZGF0YSgpLCAwKTsKLSAgICAgICAgaWYgKGNvZGVjTWF0Y2hlc1BhdHRlcm4pCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzdXBwb3J0c0FsbENvZGVjcyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgY29kZWNzKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6
OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhh
c2g+JiB0eXBlcykKIHsKLSAgICBmb3IgKFN0cmluZyBjb2RlYyA6IGNvZGVjcykgewotICAgICAg
ICBpZiAoIXN1cHBvcnRzQ29kZWMoY29kZWMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOworICAgIGF1dG8mIGdzdFJlZ2lzdHJ5U2Nhbm5lciA9
IEdzdFJlZ2lzdHJ5U2Nhbm5lck1TRTo6c2luZ2xldG9uKCk7CisgICAgdHlwZXMgPSBnc3RSZWdp
c3RyeVNjYW5uZXIubWltZVR5cGVTZXQoKTsKIH0KIAogTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlw
ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRp
YUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQpAQCAtODQyLDE5ICs3MTksMjQg
QEAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJN
U0U6OnN1cHBvcnRzVHlwZShjb25zdCBNZWQKICAgICAvLyBZb3VUdWJlIFRWIHByb3ZpZGVzIGVt
cHR5IHR5cGVzIGZvciBzb21lIHZpZGVvcyBhbmQgd2Ugd2FudCB0byBiZSBzZWxlY3RlZCBhcyBi
ZXN0IG1lZGlhIGVuZ2luZSBmb3IgdGhlbS4KICAgICBpZiAoY29udGFpbmVyVHlwZS5pc0VtcHR5
KCkpIHsKICAgICAgICAgcmVzdWx0ID0gTWVkaWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVkOworICAg
ICAgICBHU1RfREVCVUcoIm1pbWUtdHlwZSBcIiVzXCIgc3VwcG9ydGVkOiAlcyIsIHBhcmFtZXRl
cnMudHlwZS5yYXcoKS51dGY4KCkuZGF0YSgpLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhy
ZXN1bHQpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAor
ICAgIEdTVF9ERUJVRygiQ2hlY2tpbmcgbWltZS10eXBlIFwiJXNcIiIsIHBhcmFtZXRlcnMudHlw
ZS5yYXcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBhdXRvJiBnc3RSZWdpc3RyeVNjYW5uZXIgPSBH
c3RSZWdpc3RyeVNjYW5uZXJNU0U6OnNpbmdsZXRvbigpOwogICAgIC8vIFNwZWMgc2F5cyB3ZSBz
aG91bGQgbm90IHJldHVybiAicHJvYmFibHkiIGlmIHRoZSBjb2RlY3Mgc3RyaW5nIGlzIGVtcHR5
LgotICAgIGlmIChtaW1lVHlwZUNhY2hlKCkuY29udGFpbnMoY29udGFpbmVyVHlwZSkpIHsKKyAg
ICBpZiAoZ3N0UmVnaXN0cnlTY2FubmVyLnN1cHBvcnRzQ29udGFpbmVyVHlwZShjb250YWluZXJU
eXBlKSkgewogICAgICAgICBWZWN0b3I8U3RyaW5nPiBjb2RlY3MgPSBwYXJhbWV0ZXJzLnR5cGUu
Y29kZWNzKCk7CiAgICAgICAgIGlmIChjb2RlY3MuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmVz
dWx0ID0gTWVkaWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVkOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICByZXN1bHQgPSBzdXBwb3J0c0FsbENvZGVjcyhjb2RlY3MpID8gTWVkaWFQbGF5ZXI6Oklz
U3VwcG9ydGVkIDogTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOworICAgICAgICAgICAgcmVz
dWx0ID0gZ3N0UmVnaXN0cnlTY2FubmVyLnN1cHBvcnRzQWxsQ29kZWNzKGNvZGVjcykgPyBNZWRp
YVBsYXllcjo6SXNTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CiAgICAg
fQogCi0gICAgcmV0dXJuIGV4dGVuZGVkU3VwcG9ydHNUeXBlKHBhcmFtZXRlcnMsIHJlc3VsdCk7
CisgICAgYXV0byBmaW5hbFJlc3VsdCA9IGV4dGVuZGVkU3VwcG9ydHNUeXBlKHBhcmFtZXRlcnMs
IHJlc3VsdCk7CisgICAgR1NUX0RFQlVHKCJTdXBwb3J0ZWQ6ICVzIiwgY29udmVydEVudW1lcmF0
aW9uVG9TdHJpbmcoZmluYWxSZXN1bHQpLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBmaW5h
bFJlc3VsdDsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om1hcmtF
bmRPZlN0cmVhbShNZWRpYVNvdXJjZVByaXZhdGU6OkVuZE9mU3RyZWFtU3RhdHVzIHN0YXR1cykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RS5oCmluZGV4IDIyNTdlOWU2ODMwYWNiMThjNmYwOGY3MTg2YmY3NzU4YjcyNzM1ZDcuLjAyYWEx
ZDE1YzdlMTFiYjdmNjNhOGZkNjkyNDFmNjczNTA3YTJlZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaApAQCAtODIsOSArODIs
NiBAQCBwdWJsaWM6CiAgICAgdm9pZCB0cmFja0RldGVjdGVkKFJlZlB0cjxBcHBlbmRQaXBlbGlu
ZT4sIFJlZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiwgYm9vbCBmaXJzdFRyYWNrRGV0
ZWN0ZWQpOwogICAgIHZvaWQgbm90aWZ5U2Vla05lZWRzRGF0YUZvclRpbWUoY29uc3QgTWVkaWFU
aW1lJik7CiAKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0NvZGVjKFN0cmluZyBjb2RlYyk7Ci0g
ICAgc3RhdGljIGJvb2wgc3VwcG9ydHNBbGxDb2RlY3MoY29uc3QgVmVjdG9yPFN0cmluZz4mIGNv
ZGVjcyk7Ci0KICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogICAgIHZvaWQgYXR0ZW1wdFRv
RGVjcnlwdFdpdGhJbnN0YW5jZShDRE1JbnN0YW5jZSYpIGZpbmFsOwogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYWNhcGFiaWxpdGllcy9NZWRpYUVuZ2lu
ZUNvbmZpZ3VyYXRpb25GYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
Y2FwYWJpbGl0aWVzL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnkuY3BwCmluZGV4IDMy
OWUyOTRjYTJmNjAxOWFjYTQ5ZjM5YTYxMTc4ZGQ1MjY2OTE2NjEuLmM5NDgzMGRmZDFlZDVmYTQz
MTk0YTlmZTk5NTQzZWQzMGQ3MTEwMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhRW5n
aW5lQ29uZmlndXJhdGlvbkZhY3RvcnkuY3BwCkBAIC0zOSw2ICszOSwxMCBAQAogI2luY2x1ZGUg
Ik1lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlDb2NvYS5oIgogI2VuZGlmCiAKKyNpZiBV
U0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIk1lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlH
U3RyZWFtZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBib29s
JiBtb2NrRW5hYmxlZCgpCkBAIC01OCw2ICs2Miw5IEBAIHN0YXRpYyBjb25zdCBGYWN0b3J5VmVj
dG9yJiBmYWN0b3JpZXMoKQogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGYWN0b3J5VmVjdG9y
PiBmYWN0b3JpZXMgPSBtYWtlTmV2ZXJEZXN0cm95ZWQoRmFjdG9yeVZlY3Rvcih7CiAjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgICAgIHsgJmNyZWF0ZU1lZGlhUGxheWVyRGVjb2RpbmdDb25maWd1
cmF0aW9uQ29jb2EsIG51bGxwdHIgfSwKKyNlbmRpZgorI2lmIFVTRShHU1RSRUFNRVIpCisgICAg
ICAgIHsgJmNyZWF0ZU1lZGlhUGxheWVyRGVjb2RpbmdDb25maWd1cmF0aW9uR1N0cmVhbWVyLCBu
dWxscHRyIH0sCiAjZW5kaWYKICAgICB9KSk7CiAgICAgcmV0dXJuIGZhY3RvcmllczsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>353700</attachid>
            <date>2018-11-02 07:50:29 -0700</date>
            <delta_ts>2018-11-02 10:03:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191191-20181102145027.patch</filename>
            <type>text/plain</type>
            <size>58208</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3NzI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2M5NjYzNzM1Y2Q4YjJk
MDJlZmVlMmQzNzc5OWQ0MzFiY2NlNjcwYS4uOWVkYjM0OGVmZjU1YTY4YzJiYmY0MWIyZTJlOTJh
ZmM2NWUzYzkxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDE4LTExLTAyICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBEZWNvZGluZyBtZWRpYS1jYXBhYmlsaXRpZXMgY29uZmlndXJhdGlvbiBpbml0aWFsIHN1cHBv
cnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTE5
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggZW5hYmxlcyBiYXNpYyBwbGF0Zm9ybSBwcm9iaW5nIGZvciBHU3RyZWFtZXIgZGVjb2Rl
cnMsCisgICAgICAgIG9wdGlvbmFsbHkgdXNpbmcgSGFyZHdhcmUgZGVjb2RpbmcgY2FwYWJpbGl0
aWVzLiBUaGUgcHJldmlvdXMgY29kZQorICAgICAgICBmb3IgZGVjb2RlcnMvZGVtdXhlcnMgcHJv
YmluZyBwYXJ0aWFsbHkgZHVwbGljYXRlZCBiZXR3ZWVuIHRoZSBNU0UKKyAgICAgICAgcGxheWVy
IGFuZCBpdHMgcGFyZW50IGNsYXNzIHdhcyBtb3ZlZCB0byBhIG5ldyBtb2R1bGUgY2FsbGVkCisg
ICAgICAgIEdzdFJlZ2lzdHJ5U2Nhbm5lci4gVGhlcmUgaXMgb25lIGluc3RhbmNlIG9mIGl0IGZv
ciB0aGUgTVNFIHBsYXllcgorICAgICAgICBhbmQgb25lIGZvciB0aGUgcGFyZW50IGNsYXNzLgor
CisgICAgICAgIFRoZSBzY2FubmVyIGNhbiBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBH
c3RFbGVtZW50IEhhcmR3YXJlCisgICAgICAgIG1ldGFkYXRhIGNsYXNzaWZpZXIgaW4gZGVjb2Rl
cnMgYW5kIHRodXMgYWR2aXNlIHRoZQorICAgICAgICBNZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25G
YWN0b3J5R1N0cmVhbWVyIHRoYXQgaGFyZHdhcmUgZGVjb2RpbmcgaXMKKyAgICAgICAgc3VwcG9y
dGVkIG9yIG5vdC4gVGhpcyBpcyBvbmx5IGEgZmlyc3Qgc3RlcCB0aG91Z2guIFRoZSBzY2FubmVy
CisgICAgICAgIHNob3VsZCBhbHNvIHByb2JhYmx5IGF0dGVtcHQgYSBOVUxMLT5SRUFEWSB0cmFu
c2l0aW9uIG9uIGRlY29kZXJzCisgICAgICAgIHRvIHZhbGlkYXRlIHNwZWNpZmljIGlucHV0IGNh
cHMgYXJlIHN1cHBvcnRlZC4gQXMgdGhpcyBtaWdodAorICAgICAgICByZXF1aXJlIGNoYW5nZXMg
aW4gR1N0cmVhbWVyLCB0aGlzIHBhcnQgb2YgdGhlIHBhdGNoIHdhc24ndAorICAgICAgICBpbmNs
dWRlZC4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIGNvdmVyZWQgYnkgdGhlIGV4aXN0aW5nIG1l
ZGlhIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlOiBOZXcgZmls
ZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOiBBZGQgc3Vw
cG9ydCBmb3IgY29udmVydGluZworICAgICAgICBTdXBwb3J0c1R5cGUgZW51bSB0byBzdHJpbmcu
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaDogRGl0dG8uCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJFbnVtcy5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcDogTW92ZQorICAgICAg
ICBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUgdG8gR3N0UmVnaXN0cnlTY2FubmVy
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24u
aDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dzdFJlZ2lz
dHJ5U2Nhbm5lci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2Fu
bmVyOjpzaW5nbGV0b24pOgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjpH
c3RSZWdpc3RyeVNjYW5uZXIpOiBJbml0aWFsaXplCisgICAgICAgIHN1cHBvcnRlZCBtaW1lLXR5
cGVzIGFuZCBjb2RlY3MgZnJvbSB0aGUgR1N0cmVhbWVyIHJlZ2lzdHJ5LgorICAgICAgICAoV2Vi
Q29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjp+R3N0UmVnaXN0cnlTY2FubmVyKTogRnJlZSB0aGUg
ZWxlbWVudCBmYWN0b3JpZXMuCisgICAgICAgIChXZWJDb3JlOjpHc3RSZWdpc3RyeVNjYW5uZXI6
OmdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZSk6CisgICAgICAgIENoZWNrIHRoZSBp
bnB1dCBjYXBzIGFyZSBzdXBwb3J0ZWQsIG9wdGlvbmFsbHkgdXNpbmcgaGFyZHdhcmUKKyAgICAg
ICAgZGV2aWNlLgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjpmaWxsTWlt
ZVR5cGVTZXRGcm9tQ2Fwc01hcHBpbmcpOgorICAgICAgICBNb3ZlZCBmcm9tIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcnssTVNFfS4KKyAgICAgICAgKFdlYkNvcmU6OkdzdFJlZ2lzdHJ5U2Nh
bm5lcjo6aW5pdGlhbGl6ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlT
Y2FubmVyOjpzdXBwb3J0c0NvZGVjIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpH
c3RSZWdpc3RyeVNjYW5uZXI6OnN1cHBvcnRzQWxsQ29kZWNzIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpHc3RSZWdpc3RyeVNjYW5uZXI6OmlzRGVjb2RpbmdTdXBwb3J0ZWQgY29u
c3QpOiBDaGVjaworICAgICAgICB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBpcyBzdXBwb3J0ZWQu
IEZvciBub3cgaGFyZHdhcmUgc3VwcG9ydCBpcworICAgICAgICBjaGVja2VkIGZvciB2aWRlbyBj
b25maWd1cmF0aW9ucyBvbmx5IGFzIGl0IGlzIHF1aXRlIHVuY29tbW9uCisgICAgICAgIGFueXdh
eSB0byBoYXZlIGhhcmR3YXJlLWVuYWJsZWQgYXVkaW8gZGVjb2RlcnMuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dzdFJlZ2lzdHJ5U2Nhbm5lci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdzdFJlZ2lzdHJ5U2Nhbm5lcjo6bWltZVR5cGVTZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjpzdXBwb3J0c0NvbnRhaW5lclR5cGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjpSZWdpc3RyeUxvb2t1
cFJlc3VsdDo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlHU3RyZWFtZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU1lZGlhUGxheWVyRGVjb2RpbmdDb25m
aWd1cmF0aW9uR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeUdTdHJlYW1lci5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmNwcDoKKyAgICAgICAgUmVseSBvbiBuZXcgR3N0UmVnaXN0cnlTY2FubmVyIGFuZCBh
ZGQgc29tZSBkZWJ1Z2dpbmcgbWFjcm9zLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpnZXRTdXBwb3J0ZWRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzVHlwZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHA6IERpdHRvLiBB
bHNvCisgICAgICAgIHBsdWcgcXRkZW11eCBmb3IgQUFDIGNvbnRhaW5lcnMsIHRoaXMgaXMgYW4g
ZXhwbGljaXQgY29uc2VxdWVuY2UKKyAgICAgICAgb2YgZmluZXItZ3JhaW5lZCBjb2RlY3MgcHJv
YmluZy4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpBcHBlbmRQaXBlbGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6cGFyc2VEZW11eGVyU3JjUGFkQ2Fw
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Hc3RSZWdpc3Ry
eVNjYW5uZXJNU0UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdzdFJlZ2lzdHJ5U2Nh
bm5lck1TRTo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdzdFJlZ2lzdHJ5U2Nhbm5l
ck1TRTo6R3N0UmVnaXN0cnlTY2FubmVyTVNFKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvbXNlL0dzdFJlZ2lzdHJ5U2Nhbm5lck1TRS5oOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRS5jcHA6CisgICAgICAgIFJlbHkgb24gbmV3IEdzdFJlZ2lzdHJ5U2Nhbm5lciBhbmQg
YWRkIHNvbWUgZGVidWdnaW5nIG1hY3Jvcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzdXBwb3J0c1R5cGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFLmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFF
bmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmYWN0b3Jp
ZXMpOiBHU3RyZWFtZXIgc3VwcG9ydC4KKwogMjAxOC0xMS0wMiAgUGhpbGlwcGUgTm9ybWFuZCAg
PHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl0gTW92ZSBlbGVtZW50
cyByZWdpc3RyYXRpb24gdG8gR1N0cmVhbWVyQ29tbW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9H
U3RyZWFtZXIuY21ha2UKaW5kZXggZDlhMWZkYjMwYzQyMGYwOTgxYmZlZWY0ZGNkZjRjOTZhZmRk
YTI1ZC4uYmEyNTdhZGU2OGY4ZGZkYmEwNTQ1ZDFiMTJhOTZmMmQyZTg1NWY1OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQpAQCAtMTAsNyArMTAsOSBAQCBpZiAoRU5B
QkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8pCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR3N0QWxsb2NhdG9yRmFzdE1hbGxvYy5jcHAKKyAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dzdFJlZ2lzdHJ5U2Nhbm5lci5jcHAKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuY3Bw
CisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYUVuZ2luZUNvbmZpZ3Vy
YXRpb25GYWN0b3J5R1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmNw
cApAQCAtMjYsNiArMjgsNyBAQCBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8p
CiAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGlu
ZS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9HU3RyZWFtZXJN
ZWRpYURlc2NyaXB0aW9uLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
bXNlL0dzdFJlZ2lzdHJ5U2Nhbm5lck1TRS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFt
ZXJNU0UuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFT
b3VyY2VHU3RyZWFtZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9NZWRpYVBsYXllci5jcHAKaW5kZXggZTdlOTA1MmI4MGQxMzdjNmI3ZGViMDRjNWNkZTBhYTYx
ZTMxOTU2Zi4uMTgwZmVjODc2MGFhYmY1ZDUyODJlMTNmMTAxYmY0Mjg4ZmQzZjU4ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcApAQCAt
MTYwMyw2ICsxNjAzLDIwIEBAIFN0cmluZyBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhNZWRp
YVBsYXllckVudW1zOjpQcmVsb2FkIGVudW1lcmF0aW9uVmFsdWUpCiAgICAgcmV0dXJuIHZhbHVl
c1tzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXTsKIH0KIAorU3RyaW5nIGNv
bnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBl
bnVtZXJhdGlvblZhbHVlKQoreworICAgIHN0YXRpYyBjb25zdCBOZXZlckRlc3Ryb3llZDxTdHJp
bmc+IHZhbHVlc1tdID0geworICAgICAgICBNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiSXNOb3RT
dXBwb3J0ZWQiKSwKKyAgICAgICAgTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIklzU3VwcG9ydGVk
IiksCisgICAgICAgIE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJNYXlCZVN1cHBvcnRlZCIpLAor
ICAgIH07CisgICAgc3RhdGljX2Fzc2VydCghc3RhdGljX2Nhc3Q8c2l6ZV90PihNZWRpYVBsYXll
ckVudW1zOjpJc05vdFN1cHBvcnRlZCksICJNZWRpYVBsYXllckVudW1zOjpJc05vdFN1cHBvcnRl
ZCBpcyBub3QgMCBhcyBleHBlY3RlZCIpOworICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8
c2l6ZV90PihNZWRpYVBsYXllckVudW1zOjpJc1N1cHBvcnRlZCkgPT0gMSwgIk1lZGlhUGxheWVy
RW51bXM6OklzU3VwcG9ydGVkIGlzIG5vdCAxIGFzIGV4cGVjdGVkIik7CisgICAgc3RhdGljX2Fz
c2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KE1lZGlhUGxheWVyRW51bXM6Ok1heUJlU3VwcG9ydGVk
KSA9PSAyLCAiTWVkaWFQbGF5ZXJFbnVtczo6TWF5QmVTdXBwb3J0ZWQgaXMgbm90IDIgYXMgZXhw
ZWN0ZWQiKTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVl
KSA8IFdURl9BUlJBWV9MRU5HVEgodmFsdWVzKSk7CisgICAgcmV0dXJuIHZhbHVlc1tzdGF0aWNf
Y2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXTsKK30KKwogfQogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCmluZGV4IDAxZGQ5
NjVlOWE2ZDZjNWZmZDI2NzlhMzFmNWUxYzUwODUyNjgzYTMuLmRhMjEzMGYwMTA0YTNlZmFiNmNj
MzU5OWNmNzVjNTg5NTc2M2FmZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuaApAQCAtMjUyLDggKzI1Miw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IGludmFsaWRhdGUoKTsKIAogICAgIC8vIE1lZGlhIGVuZ2luZSBzdXBwb3J0LgotICAgIGVudW0g
U3VwcG9ydHNUeXBlIHsgSXNOb3RTdXBwb3J0ZWQsIElzU3VwcG9ydGVkLCBNYXlCZVN1cHBvcnRl
ZCB9OwotICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShj
b25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJik7CisgICAgdXNpbmcgTWVkaWFQbGF5
ZXJFbnVtczo6U3VwcG9ydHNUeXBlOworICAgIHN0YXRpYyBTdXBwb3J0c1R5cGUgc3VwcG9ydHNU
eXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmKTsKICAgICBzdGF0aWMgdm9p
ZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVI
YXNoPiYpOwogICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CiAgICAgc3RhdGljIEhhc2hT
ZXQ8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4gb3JpZ2luc0luTWVkaWFDYWNoZShjb25zdCBTdHJp
bmcmIHBhdGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5ZXJFbnVtcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXJFbnVtcy5oCmluZGV4IDA2ZjBjY2QyOGQ2YWI5ZjQzZjYxYmVmMjdlYjFmMzBiZGU2
MmRkNDYuLjk1MGUwZWQyODdlYjMyMWE0OWE1NDIzZTYzMTMxYWEwOTI3MGNiNjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyRW51bXMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllckVudW1zLmgK
QEAgLTM2LDYgKzM2LDcgQEAgcHVibGljOgogICAgIGVudW0gTW92aWVMb2FkVHlwZSB7IFVua25v
d24sIERvd25sb2FkLCBTdG9yZWRTdHJlYW0sIExpdmVTdHJlYW0gfTsKICAgICBlbnVtIFByZWxv
YWQgeyBOb25lLCBNZXRhRGF0YSwgQXV0byB9OwogICAgIGVudW0gVmlkZW9HcmF2aXR5IHsgVmlk
ZW9HcmF2aXR5UmVzaXplLCBWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QsIFZpZGVvR3Jhdml0eVJl
c2l6ZUFzcGVjdEZpbGwgfTsKKyAgICBlbnVtIFN1cHBvcnRzVHlwZSB7IElzTm90U3VwcG9ydGVk
LCBJc1N1cHBvcnRlZCwgTWF5QmVTdXBwb3J0ZWQgfTsKICAgICBlbnVtIHsKICAgICAgICAgVmlk
ZW9GdWxsc2NyZWVuTW9kZU5vbmUgPSAwLAogICAgICAgICBWaWRlb0Z1bGxzY3JlZW5Nb2RlU3Rh
bmRhcmQgPSAxIDw8IDAsCkBAIC00Nyw2ICs0OCw3IEBAIHB1YmxpYzoKIFdURjo6U3RyaW5nIGNv
bnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKE1lZGlhUGxheWVyRW51bXM6OlJlYWR5U3RhdGUpOwog
V1RGOjpTdHJpbmcgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoTWVkaWFQbGF5ZXJFbnVtczo6
TmV0d29ya1N0YXRlKTsKIFdURjo6U3RyaW5nIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKE1l
ZGlhUGxheWVyRW51bXM6OlByZWxvYWQpOworV1RGOjpTdHJpbmcgY29udmVydEVudW1lcmF0aW9u
VG9TdHJpbmcoTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCmluZGV4IDUyNjQ5YmJhN2Fi
OGM0ZDlhYjc1MzlhZTMyOTk2NDgzODM4MWZjOTkuLmM2OGFhOTZhMjIzYzkyNTg3MzYyYTc4YzEw
ZGQ3NGM0OTE4M2QxZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCkBAIC0zMDEsMTYg
KzMwMSw2IEBAIHVpbnQ2NF90IHRvR3N0VW5zaWduZWQ2NFRpbWUoY29uc3QgTWVkaWFUaW1lJiBt
ZWRpYVRpbWUpCiAgICAgcmV0dXJuIHRpbWUudGltZVZhbHVlKCk7CiB9CiAKLWJvb2wgZ3N0UmVn
aXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKEdMaXN0KiBlbGVtZW50RmFjdG9yaWVzLCBjb25z
dCBjaGFyKiBjYXBzU3RyaW5nKQotewotICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0
R1JlZihnc3RfY2Fwc19mcm9tX3N0cmluZyhjYXBzU3RyaW5nKSk7Ci0gICAgR0xpc3QqIGNhbmRp
ZGF0ZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZmlsdGVyKGVsZW1lbnRGYWN0b3JpZXMs
IGNhcHMuZ2V0KCksIEdTVF9QQURfU0lOSywgZmFsc2UpOwotICAgIGJvb2wgcmVzdWx0ID0gY2Fu
ZGlkYXRlczsKLQotICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUoY2FuZGlkYXRlcyk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogc3RhdGljIHZvaWQgc2ltcGxlQnVzTWVzc2FnZUNh
bGxiYWNrKEdzdEJ1cyosIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIEdzdEJpbiogcGlwZWxpbmUpCiB7
CiAgICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVy
Q29tbW9uLmgKaW5kZXggMTEwYjZlZTNiOTNjM2M1ZGE4ZjU5NmNkMDlhMGQ4NDVkMWQyZTA0YS4u
NzE2MDViZjMwMjlkNzdjNTdiNGJhOGE3OGNjZmQxM2QzNDczZTQ4MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFt
ZXJDb21tb24uaApAQCAtMTE3LDcgKzExNyw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzVmFs
aWQgeyBmYWxzZSB9OwogfTsKIAotYm9vbCBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5
cGUoR0xpc3QqIGVsZW1lbnRGYWN0b3JpZXMsIGNvbnN0IGNoYXIqIGNhcHNTdHJpbmcpOwogdm9p
ZCBjb25uZWN0U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKEdzdEVsZW1lbnQgKnBpcGVsaW5lKTsK
IHZvaWQgZGlzY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhHc3RFbGVtZW50ICpwaXBl
bGluZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9Hc3RSZWdpc3RyeVNjYW5uZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dzdFJlZ2lzdHJ5U2Nhbm5lci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjY5
MmYzNTQzZTZlMDFjMjZmMjRmOTM4YzQ1OWJiNTc4MWU0YjY0NQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9Hc3RSZWdpc3RyeVNj
YW5uZXIuY3BwCkBAIC0wLDAgKzEsMzA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEln
YWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFp
bnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSKQorI2luY2x1
ZGUgIkdzdFJlZ2lzdHJ5U2Nhbm5lci5oIgorCisjaW5jbHVkZSAiQ29udGVudFR5cGUuaCIKKyNp
bmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8Zm5tYXRjaC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0X21lZGlh
X2dzdF9yZWdpc3RyeV9zY2FubmVyX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdl
YmtpdF9tZWRpYV9nc3RfcmVnaXN0cnlfc2Nhbm5lcl9kZWJ1ZworCitHc3RSZWdpc3RyeVNjYW5u
ZXImIEdzdFJlZ2lzdHJ5U2Nhbm5lcjo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8R3N0UmVnaXN0cnlTY2FubmVyPiBzaGFyZWRJbnN0YW5jZTsKKyAgICByZXR1cm4g
c2hhcmVkSW5zdGFuY2U7Cit9CisKK0dzdFJlZ2lzdHJ5U2Nhbm5lcjo6R3N0UmVnaXN0cnlTY2Fu
bmVyKGJvb2wgaXNNZWRpYVNvdXJjZSkKKyAgICA6IG1faXNNZWRpYVNvdXJjZShpc01lZGlhU291
cmNlKQoreworICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9tZWRpYV9nc3RfcmVn
aXN0cnlfc2Nhbm5lcl9kZWJ1ZywgIndlYmtpdHJlZ2lzdHJ5c2Nhbm5lciIsIDAsICJXZWJLaXQg
R1N0cmVhbWVyIHJlZ2lzdHJ5IHNjYW5uZXIiKTsKKyAgICBtX2F1ZGlvRGVjb2RlckZhY3Rvcmll
cyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFD
VE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQVVESU8s
IEdTVF9SQU5LX01BUkdJTkFMKTsKKyAgICBtX3ZpZGVvRGVjb2RlckZhY3RvcmllcyA9IGdzdF9l
bGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBF
X0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfVklERU8sIEdTVF9SQU5L
X01BUkdJTkFMKTsKKyAgICBtX2RlbXV4ZXJGYWN0b3JpZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5
X2xpc3RfZ2V0X2VsZW1lbnRzKEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERU1VWEVSLCBHU1Rf
UkFOS19NQVJHSU5BTCk7CisKKyAgICBpbml0aWFsaXplKCk7CisjaWZuZGVmIEdTVF9ESVNBQkxF
X0dTVF9ERUJVRworICAgIEdTVF9ERUJVRygiJXMgcmVnaXN0cnkgc2Nhbm5lciBpbml0aWFsaXpl
ZCIsIG1faXNNZWRpYVNvdXJjZSA/ICJNU0UiOiJub24tTVNFIik7CisgICAgZm9yIChhdXRvJiBt
aW1lVHlwZSA6IG1fbWltZVR5cGVTZXQpCisgICAgICAgIEdTVF9ERUJVRygiTWltZS10eXBlIHJl
Z2lzdGVyZWQ6ICVzIiwgbWltZVR5cGUudXRmOCgpLmRhdGEoKSk7CisgICAgZm9yIChhdXRvJiBp
dGVtIDogbV9jb2RlY01hcCkKKyAgICAgICAgR1NUX0RFQlVHKCIlcyBjb2RlYyBwYXR0ZXJuIHJl
Z2lzdGVyZWQ6ICVzIiwgaXRlbS52YWx1ZSA/ICJIYXJkd2FyZSI6IlNvZnR3YXJlIiwgaXRlbS5r
ZXkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKK30KKworR3N0UmVnaXN0cnlTY2Fu
bmVyOjp+R3N0UmVnaXN0cnlTY2FubmVyKCkKK3sKKyAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlz
dF9mcmVlKG1fYXVkaW9EZWNvZGVyRmFjdG9yaWVzKTsKKyAgICBnc3RfcGx1Z2luX2ZlYXR1cmVf
bGlzdF9mcmVlKG1fdmlkZW9EZWNvZGVyRmFjdG9yaWVzKTsKKyAgICBnc3RfcGx1Z2luX2ZlYXR1
cmVfbGlzdF9mcmVlKG1fZGVtdXhlckZhY3Rvcmllcyk7Cit9CisKK0dzdFJlZ2lzdHJ5U2Nhbm5l
cjo6UmVnaXN0cnlMb29rdXBSZXN1bHQgR3N0UmVnaXN0cnlTY2FubmVyOjpnc3RSZWdpc3RyeUhh
c0VsZW1lbnRGb3JNZWRpYVR5cGUoR0xpc3QqIGVsZW1lbnRGYWN0b3JpZXMsIGNvbnN0IGNoYXIq
IGNhcHNTdHJpbmcsIGJvb2wgY2hlY2tIYXJkd2FyZUNsYXNzaWZpZXIpCit7CisgICAgR1JlZlB0
cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX2Zyb21fc3RyaW5nKGNhcHNTdHJp
bmcpKTsKKyAgICBHTGlzdCogY2FuZGlkYXRlcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9m
aWx0ZXIoZWxlbWVudEZhY3RvcmllcywgY2Fwcy5nZXQoKSwgR1NUX1BBRF9TSU5LLCBmYWxzZSk7
CisgICAgYm9vbCBzdXBwb3J0ZWQgPSBjYW5kaWRhdGVzOworICAgIGJvb2wgdXNpbmdIYXJkd2Fy
ZSA9IGZhbHNlOworCisgICAgaWYgKGNoZWNrSGFyZHdhcmVDbGFzc2lmaWVyKSB7CisgICAgICAg
IGZvciAoR0xpc3QqIGZhY3RvcmllcyA9IGNhbmRpZGF0ZXM7IGZhY3RvcmllcyAhPSBudWxscHRy
OyBmYWN0b3JpZXMgPSBnX2xpc3RfbmV4dChmYWN0b3JpZXMpKSB7CisgICAgICAgICAgICBhdXRv
KiBmYWN0b3J5ID0gcmVpbnRlcnByZXRfY2FzdDxHc3RFbGVtZW50RmFjdG9yeSo+KGZhY3Rvcmll
cy0+ZGF0YSk7CisgICAgICAgICAgICBTdHJpbmcgbWV0YWRhdGEgPSBnc3RfZWxlbWVudF9mYWN0
b3J5X2dldF9tZXRhZGF0YShmYWN0b3J5LCBHU1RfRUxFTUVOVF9NRVRBREFUQV9LTEFTUyk7Cisg
ICAgICAgICAgICBhdXRvIGNvbXBvbmVudHMgPSBtZXRhZGF0YS5zcGxpdCgnLycpOworICAgICAg
ICAgICAgaWYgKGNvbXBvbmVudHMuY29udGFpbnMoIkhhcmR3YXJlIikpIHsKKyAgICAgICAgICAg
ICAgICB1c2luZ0hhcmR3YXJlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0
X2ZyZWUoY2FuZGlkYXRlcyk7CisgICAgcmV0dXJuIEdzdFJlZ2lzdHJ5U2Nhbm5lcjo6UmVnaXN0
cnlMb29rdXBSZXN1bHQgeyBzdXBwb3J0ZWQsIHVzaW5nSGFyZHdhcmUgfTsKK30KKwordm9pZCBH
c3RSZWdpc3RyeVNjYW5uZXI6OmZpbGxNaW1lVHlwZVNldEZyb21DYXBzTWFwcGluZyhWZWN0b3I8
R3N0Q2Fwc1dlYktpdE1hcHBpbmc+JiBtYXBwaW5nKQoreworICAgIGZvciAoYXV0byYgY3VycmVu
dCA6IG1hcHBpbmcpIHsKKyAgICAgICAgR0xpc3QqIGZhY3RvcmllczsKKyAgICAgICAgc3dpdGNo
IChjdXJyZW50LmVsZW1lbnRUeXBlKSB7CisgICAgICAgIGNhc2UgRGVtdXhlcjoKKyAgICAgICAg
ICAgIGZhY3RvcmllcyA9IG1fZGVtdXhlckZhY3RvcmllczsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEF1ZGlvRGVjb2RlcjoKKyAgICAgICAgICAgIGZhY3RvcmllcyA9IG1fYXVk
aW9EZWNvZGVyRmFjdG9yaWVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmlk
ZW9EZWNvZGVyOgorICAgICAgICAgICAgZmFjdG9yaWVzID0gbV92aWRlb0RlY29kZXJGYWN0b3Jp
ZXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChnc3RSZWdp
c3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoZmFjdG9yaWVzLCBjdXJyZW50LmNhcHNTdHJpbmcp
KSB7CisgICAgICAgICAgICBpZiAoIWN1cnJlbnQud2Via2l0Q29kZWNQYXR0ZXJucy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhdHRlcm4gOiBjdXJyZW50
LndlYmtpdENvZGVjUGF0dGVybnMpCisgICAgICAgICAgICAgICAgICAgIG1fY29kZWNNYXAuYWRk
KHBhdHRlcm4sIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghY3VycmVu
dC53ZWJraXRNaW1lVHlwZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgZm9yIChjb25z
dCBhdXRvJiBtaW1lVHlwZSA6IGN1cnJlbnQud2Via2l0TWltZVR5cGVzKQorICAgICAgICAgICAg
ICAgICAgICBtX21pbWVUeXBlU2V0LmFkZChtaW1lVHlwZSk7CisgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICBtX21pbWVUeXBlU2V0LmFkZChBdG9taWNTdHJpbmcoY3VycmVudC5j
YXBzU3RyaW5nKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgR3N0UmVnaXN0cnlTY2Fu
bmVyOjppbml0aWFsaXplKCkKK3sKKyAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVk
aWFUeXBlKG1fYXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAiYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249
KGludCk0IikpIHsKKyAgICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRp
by9tcGVnIikpOworICAgICAgICBtX21pbWVUeXBlU2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlv
L2FhYyIpKTsKKyAgICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9t
cDQiKSk7CisgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8veC1t
NGEiKSk7CisgICAgICAgIG1fY29kZWNNYXAuYWRkKEF0b21pY1N0cmluZygibXBlZyIpLCBmYWxz
ZSk7CisgICAgICAgIG1fY29kZWNNYXAuYWRkKEF0b21pY1N0cmluZygibXA0YSoiKSwgZmFsc2Up
OworICAgIH0KKworICAgIGJvb2wgb3B1c1N1cHBvcnRlZCA9IGdzdFJlZ2lzdHJ5SGFzRWxlbWVu
dEZvck1lZGlhVHlwZShtX2F1ZGlvRGVjb2RlckZhY3RvcmllcywgImF1ZGlvL3gtb3B1cyIpOwor
ICAgIGlmIChvcHVzU3VwcG9ydGVkKSB7CisgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21p
Y1N0cmluZygiYXVkaW8vb3B1cyIpKTsKKyAgICAgICAgbV9jb2RlY01hcC5hZGQoQXRvbWljU3Ry
aW5nKCJvcHVzIiksIGZhbHNlKTsKKyAgICAgICAgbV9jb2RlY01hcC5hZGQoQXRvbWljU3RyaW5n
KCJ4LW9wdXMiKSwgZmFsc2UpOworICAgIH0KKworICAgIGJvb2wgdm9yYmlzU3VwcG9ydGVkID0g
Z3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKG1fYXVkaW9EZWNvZGVyRmFjdG9yaWVz
LCAiYXVkaW8veC12b3JiaXMiKTsKKyAgICBpZiAodm9yYmlzU3VwcG9ydGVkKSB7CisgICAgICAg
IG1fY29kZWNNYXAuYWRkKEF0b21pY1N0cmluZygidm9yYmlzIiksIGZhbHNlKTsKKyAgICAgICAg
bV9jb2RlY01hcC5hZGQoQXRvbWljU3RyaW5nKCJ4LXZvcmJpcyIpLCBmYWxzZSk7CisgICAgfQor
CisgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShtX2RlbXV4ZXJGYWN0
b3JpZXMsICJ2aWRlby94LW1hdHJvc2thIikpIHsKKyAgICAgICAgYXV0byB2cDhEZWNvZGVyQXZh
aWxhYmxlID0gZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKG1fdmlkZW9EZWNvZGVy
RmFjdG9yaWVzLCAidmlkZW8veC12cDgiLCB0cnVlKTsKKyAgICAgICAgYXV0byB2cDlEZWNvZGVy
QXZhaWxhYmxlID0gZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKG1fdmlkZW9EZWNv
ZGVyRmFjdG9yaWVzLCAidmlkZW8veC12cDkiLCB0cnVlKTsKKworICAgICAgICBpZiAodnA4RGVj
b2RlckF2YWlsYWJsZSB8fCB2cDlEZWNvZGVyQXZhaWxhYmxlKQorICAgICAgICAgICAgbV9taW1l
VHlwZVNldC5hZGQoQXRvbWljU3RyaW5nKCJ2aWRlby93ZWJtIikpOworCisgICAgICAgIGlmICh2
cDhEZWNvZGVyQXZhaWxhYmxlKSB7CisgICAgICAgICAgICBtX2NvZGVjTWFwLmFkZChBdG9taWNT
dHJpbmcoInZwOCIpLCB2cDhEZWNvZGVyQXZhaWxhYmxlLnVzaW5nSGFyZHdhcmUpOworICAgICAg
ICAgICAgbV9jb2RlY01hcC5hZGQoQXRvbWljU3RyaW5nKCJ4LXZwOCIpLCB2cDhEZWNvZGVyQXZh
aWxhYmxlLnVzaW5nSGFyZHdhcmUpOworICAgICAgICB9CisgICAgICAgIGlmICh2cDlEZWNvZGVy
QXZhaWxhYmxlKSB7CisgICAgICAgICAgICBtX2NvZGVjTWFwLmFkZChBdG9taWNTdHJpbmcoInZw
OSIpLCB2cDlEZWNvZGVyQXZhaWxhYmxlLnVzaW5nSGFyZHdhcmUpOworICAgICAgICAgICAgbV9j
b2RlY01hcC5hZGQoQXRvbWljU3RyaW5nKCJ4LXZwOSIpLCB2cDlEZWNvZGVyQXZhaWxhYmxlLnVz
aW5nSGFyZHdhcmUpOworICAgICAgICB9CisgICAgICAgIGlmIChvcHVzU3VwcG9ydGVkKQorICAg
ICAgICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby93ZWJtIikpOwor
ICAgIH0KKworICAgIGF1dG8gaDI2NERlY29kZXJBdmFpbGFibGUgPSBnc3RSZWdpc3RyeUhhc0Vs
ZW1lbnRGb3JNZWRpYVR5cGUobV92aWRlb0RlY29kZXJGYWN0b3JpZXMsICJ2aWRlby94LWgyNjQs
IHByb2ZpbGU9KHN0cmluZyl7IGNvbnN0cmFpbmVkLWJhc2VsaW5lLCBiYXNlbGluZSwgaGlnaCB9
IiwgdHJ1ZSk7CisgICAgaWYgKGgyNjREZWNvZGVyQXZhaWxhYmxlKSB7CisgICAgICAgIG1fbWlt
ZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygidmlkZW8vbXA0IikpOworICAgICAgICBtX21pbWVU
eXBlU2V0LmFkZChBdG9taWNTdHJpbmcoInZpZGVvL3gtbTR2IikpOworICAgICAgICBtX2NvZGVj
TWFwLmFkZChBdG9taWNTdHJpbmcoIngtaDI2NCIpLCBoMjY0RGVjb2RlckF2YWlsYWJsZS51c2lu
Z0hhcmR3YXJlKTsKKyAgICAgICAgbV9jb2RlY01hcC5hZGQoQXRvbWljU3RyaW5nKCJhdmMqIiks
IGgyNjREZWNvZGVyQXZhaWxhYmxlLnVzaW5nSGFyZHdhcmUpOworICAgICAgICBtX2NvZGVjTWFw
LmFkZChBdG9taWNTdHJpbmcoIm1wNHYqIiksIGgyNjREZWNvZGVyQXZhaWxhYmxlLnVzaW5nSGFy
ZHdhcmUpOworICAgIH0KKworICAgIGlmIChtX2lzTWVkaWFTb3VyY2UpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIFRoZSBtaW1lLXR5cGVzIGluaXRpYWxpemVkIGJlbG93IGFyZSBub3Qgc3Vw
cG9ydGVkIGJ5IHRoZSBNU0UgYmFja2VuZC4KKworICAgIFZlY3RvcjxHc3RDYXBzV2ViS2l0TWFw
cGluZz4gbWFwcGluZyA9IHsKKyAgICAgICAge0F1ZGlvRGVjb2RlciwgImF1ZGlvL21pZGkiLCB7
ImF1ZGlvL21pZGkiLCAiYXVkaW8vcmlmZi1taWRpIn0sIHsgfX0sCisgICAgICAgIHtBdWRpb0Rl
Y29kZXIsICJhdWRpby94LWFjMyIsIHsgfSwgeyB9fSwKKyAgICAgICAge0F1ZGlvRGVjb2Rlciwg
ImF1ZGlvL3gtZHRzIiwgeyB9LCB7IH19LAorICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8v
eC1lYWMzIiwgeyJhdWRpby94LWFjMyJ9LCB7IH19LAorICAgICAgICB7QXVkaW9EZWNvZGVyLCAi
YXVkaW8veC1mbGFjIiwgeyJhdWRpby94LWZsYWMiLCAiYXVkaW8vZmxhYyJ9LCB7IH19LAorICAg
ICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8veC1zYmMiLCB7IH0sIHsgfX0sCisgICAgICAgIHtB
dWRpb0RlY29kZXIsICJhdWRpby94LXNpZCIsIHsgfSwgeyB9fSwKKyAgICAgICAge0F1ZGlvRGVj
b2RlciwgImF1ZGlvL3gtc3BlZXgiLCB7ImF1ZGlvL3NwZWV4IiwgImF1ZGlvL3gtc3BlZXgifSwg
eyB9fSwKKyAgICAgICAge0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtd2F2cGFjayIsIHsiYXVkaW8v
eC13YXZwYWNrIn0sIHsgfX0sCisgICAgICAgIHtWaWRlb0RlY29kZXIsICJ2aWRlby9tcGVnLCBt
cGVndmVyc2lvbj0oaW50KXsxLDJ9LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2UiLCB7InZp
ZGVvL21wZWcifSwgeyJtcGVnIn19LAorICAgICAgICB7VmlkZW9EZWNvZGVyLCAidmlkZW8vbXBl
Z3RzIiwgeyB9LCB7IH19LAorICAgICAgICB7VmlkZW9EZWNvZGVyLCAidmlkZW8veC1kaXJhYyIs
IHsgfSwgeyB9fSwKKyAgICAgICAge1ZpZGVvRGVjb2RlciwgInZpZGVvL3gtZmxhc2gtdmlkZW8i
LCB7InZpZGVvL2ZsdiIsICJ2aWRlby94LWZsdiJ9LCB7IH19LAorICAgICAgICB7VmlkZW9EZWNv
ZGVyLCAidmlkZW8veC1oMjYzIiwgeyB9LCB7IH19LAorICAgICAgICB7VmlkZW9EZWNvZGVyLCAi
dmlkZW8veC1tc3ZpZGVvY29kZWMiLCB7InZpZGVvL3gtbXN2aWRlbyJ9LCB7IH19LAorICAgICAg
ICB7RGVtdXhlciwgImFwcGxpY2F0aW9uL3ZuZC5ybi1yZWFsbWVkaWEiLCB7IH0sIHsgfX0sCisg
ICAgICAgIHtEZW11eGVyLCAiYXBwbGljYXRpb24veC0zZ3AiLCB7IH0sIHsgfX0sCisgICAgICAg
IHtEZW11eGVyLCAiYXBwbGljYXRpb24veC1obHMiLCB7ImFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5t
cGVndXJsIiwgImFwcGxpY2F0aW9uL3gtbXBlZ3VybCJ9LCB7IH19LAorICAgICAgICB7RGVtdXhl
ciwgImFwcGxpY2F0aW9uL3gtcG4tcmVhbGF1ZGlvIiwgeyB9LCB7IH19LAorICAgICAgICB7RGVt
dXhlciwgImF1ZGlvL3gtYWlmZiIsIHsgfSwgeyB9fSwKKyAgICAgICAge0RlbXV4ZXIsICJhdWRp
by94LXdhdiIsIHsiYXVkaW8veC13YXYiLCAiYXVkaW8vd2F2IiwgImF1ZGlvL3ZuZC53YXZlIn0s
IHsiMSJ9fSwKKyAgICAgICAge0RlbXV4ZXIsICJ2aWRlby9xdWlja3RpbWUiLCB7IH0sIHsgfX0s
CisgICAgICAgIHtEZW11eGVyLCAidmlkZW8vcXVpY2t0aW1lLCB2YXJpYW50PShzdHJpbmcpM2dw
cCIsIHsidmlkZW8vM2dwcCJ9LCB7IH19LAorICAgICAgICB7RGVtdXhlciwgInZpZGVvL3gtbXMt
YXNmIiwgeyB9LCB7IH19LAorICAgIH07CisgICAgZmlsbE1pbWVUeXBlU2V0RnJvbUNhcHNNYXBw
aW5nKG1hcHBpbmcpOworCisgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlw
ZShtX2RlbXV4ZXJGYWN0b3JpZXMsICJhcHBsaWNhdGlvbi9vZ2ciKSkgeworICAgICAgICBtX21p
bWVUeXBlU2V0LmFkZChBdG9taWNTdHJpbmcoImFwcGxpY2F0aW9uL29nZyIpKTsKKworICAgICAg
ICBpZiAodm9yYmlzU3VwcG9ydGVkKSB7CisgICAgICAgICAgICBtX21pbWVUeXBlU2V0LmFkZChB
dG9taWNTdHJpbmcoImF1ZGlvL29nZyIpKTsKKyAgICAgICAgICAgIG1fbWltZVR5cGVTZXQuYWRk
KEF0b21pY1N0cmluZygiYXVkaW8veC12b3JiaXMrb2dnIikpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShtX2F1ZGlvRGVjb2RlckZh
Y3RvcmllcywgImF1ZGlvL3gtc3BlZXgiKSkgeworICAgICAgICAgICAgbV9taW1lVHlwZVNldC5h
ZGQoQXRvbWljU3RyaW5nKCJhdWRpby9vZ2ciKSk7CisgICAgICAgICAgICBtX2NvZGVjTWFwLmFk
ZChBdG9taWNTdHJpbmcoInNwZWV4IiksIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUobV92aWRlb0RlY29kZXJGYWN0b3Jp
ZXMsICJ2aWRlby94LXRoZW9yYSIpKSB7CisgICAgICAgICAgICBtX21pbWVUeXBlU2V0LmFkZChB
dG9taWNTdHJpbmcoInZpZGVvL29nZyIpKTsKKyAgICAgICAgICAgIG1fY29kZWNNYXAuYWRkKEF0
b21pY1N0cmluZygidGhlb3JhIiksIGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJv
b2wgYXVkaW9NcGVnU3VwcG9ydGVkID0gZmFsc2U7CisgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxl
bWVudEZvck1lZGlhVHlwZShtX2F1ZGlvRGVjb2RlckZhY3RvcmllcywgImF1ZGlvL21wZWcsIG1w
ZWd2ZXJzaW9uPShpbnQpMSwgbGF5ZXI9KGludClbMSwgM10iKSkgeworICAgICAgICBhdWRpb01w
ZWdTdXBwb3J0ZWQgPSB0cnVlOworICAgICAgICBtX21pbWVUeXBlU2V0LmFkZChBdG9taWNTdHJp
bmcoImF1ZGlvL21wMSIpKTsKKyAgICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5n
KCJhdWRpby9tcDMiKSk7CisgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygi
YXVkaW8veC1tcDMiKSk7CisgICAgICAgIG1fY29kZWNNYXAuYWRkKEF0b21pY1N0cmluZygiYXVk
aW8vbXAzIiksIGZhbHNlKTsKKyAgICB9CisKKyAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50
Rm9yTWVkaWFUeXBlKG1fYXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAiYXVkaW8vbXBlZywgbXBlZ3Zl
cnNpb249KGludCkyIikpIHsKKyAgICAgICAgYXVkaW9NcGVnU3VwcG9ydGVkID0gdHJ1ZTsKKyAg
ICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9tcDIiKSk7CisgICAg
fQorCisgICAgYXVkaW9NcGVnU3VwcG9ydGVkIHw9IHN1cHBvcnRzQ29udGFpbmVyVHlwZSgiYXVk
aW8vbXA0Iik7CisgICAgaWYgKGF1ZGlvTXBlZ1N1cHBvcnRlZCkKKyAgICAgICAgbV9taW1lVHlw
ZVNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby94LW1wZWciKSk7CisKKyAgICBib29sIG1hdHJv
c2thU3VwcG9ydGVkID0gZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKG1fZGVtdXhl
ckZhY3RvcmllcywgInZpZGVvL3gtbWF0cm9za2EiKTsKKyAgICBpZiAobWF0cm9za2FTdXBwb3J0
ZWQpIHsKKyAgICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5nKCJ2aWRlby94LW1h
dHJvc2thIikpOworCisgICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5
cGUobV92aWRlb0RlY29kZXJGYWN0b3JpZXMsICJ2aWRlby94LXZwMTAiKSkKKyAgICAgICAgICAg
IG1fbWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygidmlkZW8vd2VibSIpKTsKKyAgICB9CisK
KyAgICBpZiAoKG1hdHJvc2thU3VwcG9ydGVkIHx8IHN1cHBvcnRzQ29udGFpbmVyVHlwZSgidmlk
ZW8vbXA0IikpICYmIGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShtX3ZpZGVvRGVj
b2RlckZhY3RvcmllcywgInZpZGVvL3gtYXYxIikpCisgICAgICAgIG1fY29kZWNNYXAuYWRkKEF0
b21pY1N0cmluZygiYXYwMSoiKSwgZmFsc2UpOworfQorCitib29sIEdzdFJlZ2lzdHJ5U2Nhbm5l
cjo6c3VwcG9ydHNDb2RlYyhTdHJpbmcgY29kZWMsIGJvb2wgdXNpbmdIYXJkd2FyZSkgY29uc3QK
K3sKKyAgICAvLyBJZiB0aGUgY29kZWMgaXMgbmFtZWQgbGlrZSBhIG1pbWV0eXBlIChlZzogdmlk
ZW8vYXZjKSByZW1vdmUgdGhlICJ2aWRlby8iIHBhcnQuCisgICAgc2l6ZV90IHNsYXNoSW5kZXgg
PSBjb2RlYy5maW5kKCcvJyk7CisgICAgaWYgKHNsYXNoSW5kZXggIT0gV1RGOjpub3RGb3VuZCkK
KyAgICAgICAgY29kZWMgPSBjb2RlYy5zdWJzdHJpbmcoc2xhc2hJbmRleCsxKTsKKworICAgIEdT
VF9MT0coIkNoZWNraW5nIGNvZGVjIFwiJXNcIiIsIGNvZGVjLnV0ZjgoKS5kYXRhKCkpOworICAg
IGZvciAoY29uc3QgYXV0byYgaXRlbSA6IG1fY29kZWNNYXApIHsKKyAgICAgICAgYm9vbCBjb2Rl
Y01hdGNoZXNQYXR0ZXJuID0gIWZubWF0Y2goaXRlbS5rZXkuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSwgY29kZWMudXRmOCgpLmRhdGEoKSwgMCk7CisgICAgICAgIGlmIChjb2RlY01hdGNoZXNQYXR0
ZXJuKQorICAgICAgICAgICAgcmV0dXJuIHVzaW5nSGFyZHdhcmUgPyBpdGVtLnZhbHVlIDogdHJ1
ZTsKKyAgICB9CisKKyAgICBHU1RfTE9HKCJVbnN1cHBvcnRlZCIpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBHc3RSZWdpc3RyeVNjYW5uZXI6OnN1cHBvcnRzQWxsQ29kZWNzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBjb2RlY3MsIGJvb2wgdXNpbmdIYXJkd2FyZSkgY29uc3QKK3sKKyAg
ICBmb3IgKFN0cmluZyBjb2RlYyA6IGNvZGVjcykgeworICAgICAgICBpZiAoIXN1cHBvcnRzQ29k
ZWMoY29kZWMsIHVzaW5nSGFyZHdhcmUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdzdFJlZ2lzdHJ5U2Nhbm5lcjo6aXNE
ZWNvZGluZ1N1cHBvcnRlZChNZWRpYUNvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24sIGJvb2wq
IHVzaW5nSGFyZHdhcmUpIGNvbnN0Cit7CisgICAgYm9vbCBkZWNvZGVyRm91bmQgPSBmYWxzZTsK
KyAgICBpZiAodXNpbmdIYXJkd2FyZSkKKyAgICAgICAgKnVzaW5nSGFyZHdhcmUgPSBmYWxzZTsK
KworICAgIGlmIChjb25maWd1cmF0aW9uLnZpZGVvKSB7CisgICAgICAgIGF1dG8mIHZpZGVvQ29u
ZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb24udmlkZW8udmFsdWUoKTsKKyAgICAgICAgR1NUX0RF
QlVHKCJDaGVja2luZyBzdXBwb3J0IGZvciB2aWRlbyBjb25maWd1cmF0aW9uOiBcIiVzXCIgc2l6
ZTogJXV4JXUgYml0cmF0ZTogJSIgR19HVUlOVDY0X0ZPUk1BVCAiIGZyYW1lcmF0ZTogJWYiLCB2
aWRlb0NvbmZpZ3VyYXRpb24uY29udGVudFR5cGUudXRmOCgpLmRhdGEoKSwgdmlkZW9Db25maWd1
cmF0aW9uLndpZHRoLCB2aWRlb0NvbmZpZ3VyYXRpb24uaGVpZ2h0LCB2aWRlb0NvbmZpZ3VyYXRp
b24uYml0cmF0ZSwgdmlkZW9Db25maWd1cmF0aW9uLmZyYW1lcmF0ZSk7CisKKyAgICAgICAgYXV0
byBjb250ZW50VHlwZSA9IENvbnRlbnRUeXBlKHZpZGVvQ29uZmlndXJhdGlvbi5jb250ZW50VHlw
ZSk7CisgICAgICAgIGRlY29kZXJGb3VuZCA9IHN1cHBvcnRzQ29udGFpbmVyVHlwZShjb250ZW50
VHlwZS5jb250YWluZXJUeXBlKCkpOworICAgICAgICBhdXRvIGNvZGVjcyA9IGNvbnRlbnRUeXBl
LmNvZGVjcygpOworICAgICAgICBpZiAodXNpbmdIYXJkd2FyZSAmJiAhY29kZWNzLmlzRW1wdHko
KSkKKyAgICAgICAgICAgICp1c2luZ0hhcmR3YXJlID0gc3VwcG9ydHNBbGxDb2RlY3MoY29kZWNz
LCB0cnVlKTsKKyAgICB9CisKKyAgICBpZiAoY29uZmlndXJhdGlvbi5hdWRpbykgeworICAgICAg
ICBhdXRvJiBhdWRpb0NvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uLmF1ZGlvLnZhbHVlKCk7
CisgICAgICAgIEdTVF9ERUJVRygiQ2hlY2tpbmcgc3VwcG9ydCBmb3IgYXVkaW8gY29uZmlndXJh
dGlvbjogXCIlc1wiICVzIGNoYW5uZWxzLCBiaXRyYXRlOiAlIiBHX0dVSU5UNjRfRk9STUFUICIg
c2FtcGxlcmF0ZTogJXUiLCBhdWRpb0NvbmZpZ3VyYXRpb24uY29udGVudFR5cGUudXRmOCgpLmRh
dGEoKSwgYXVkaW9Db25maWd1cmF0aW9uLmNoYW5uZWxzLnV0ZjgoKS5kYXRhKCksIGF1ZGlvQ29u
ZmlndXJhdGlvbi5iaXRyYXRlLCBhdWRpb0NvbmZpZ3VyYXRpb24uc2FtcGxlcmF0ZSk7CisgICAg
ICAgIGF1dG8gY29udGVudFR5cGUgPSBDb250ZW50VHlwZShhdWRpb0NvbmZpZ3VyYXRpb24uY29u
dGVudFR5cGUpOworICAgICAgICBkZWNvZGVyRm91bmQgPSBzdXBwb3J0c0NvbnRhaW5lclR5cGUo
Y29udGVudFR5cGUuY29udGFpbmVyVHlwZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGVjb2Rl
ckZvdW5kOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9Hc3RSZWdpc3RyeVNjYW5uZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9Hc3RSZWdpc3RyeVNjYW5uZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lNTcyMzQzYzI0MzcxYmMwYmRmMzQ5YTkzZjBmNDZjMThhZGNjMDBmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dz
dFJlZ2lzdHJ5U2Nhbm5lci5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggSWdhbGlhIFMuTAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdTVFJFQU1FUikKKworI2lu
Y2x1ZGUgIk1lZGlhQ29uZmlndXJhdGlvbi5oIgorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWlj
U3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworY2xhc3MgQ29udGVudFR5cGU7CisKK2NsYXNzIEdzdFJlZ2lzdHJ5U2Nh
bm5lciB7CisgICAgZnJpZW5kIE5ldmVyRGVzdHJveWVkPEdzdFJlZ2lzdHJ5U2Nhbm5lcj47Citw
dWJsaWM6CisgICAgc3RhdGljIEdzdFJlZ2lzdHJ5U2Nhbm5lciYgc2luZ2xldG9uKCk7CisKKyAg
ICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgbWltZVR5cGVTZXQo
KSB7IHJldHVybiBtX21pbWVUeXBlU2V0OyB9CisKKyAgICBib29sIHN1cHBvcnRzQ29udGFpbmVy
VHlwZShTdHJpbmcgY29udGFpbmVyVHlwZSkgY29uc3QgeyByZXR1cm4gbV9taW1lVHlwZVNldC5j
b250YWlucyhjb250YWluZXJUeXBlKTsgfQorCisgICAgYm9vbCBpc0RlY29kaW5nU3VwcG9ydGVk
KE1lZGlhQ29uZmlndXJhdGlvbiYsIGJvb2wqIHVzaW5nSGFyZHdhcmUgPSBudWxscHRyKSBjb25z
dDsKKyAgICBib29sIHN1cHBvcnRzQ29kZWMoU3RyaW5nIGNvZGVjLCBib29sIHVzaW5nSGFyZHdh
cmUgPSBmYWxzZSkgY29uc3Q7CisgICAgYm9vbCBzdXBwb3J0c0FsbENvZGVjcyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgY29kZWNzLCBib29sIHVzaW5nSGFyZHdhcmUgPSBmYWxzZSkgY29uc3Q7CisK
K3Byb3RlY3RlZDoKKyAgICBHc3RSZWdpc3RyeVNjYW5uZXIoYm9vbCBpc01lZGlhU291cmNlID0g
ZmFsc2UpOworICAgIH5Hc3RSZWdpc3RyeVNjYW5uZXIoKTsKKworICAgIHZvaWQgaW5pdGlhbGl6
ZSgpOworCisgICAgZW51bSBFbGVtZW50VHlwZSB7CisgICAgICAgIEF1ZGlvRGVjb2RlciA9IDAs
CisgICAgICAgIFZpZGVvRGVjb2RlciwKKyAgICAgICAgRGVtdXhlcgorICAgIH07CisgICAgc3Ry
dWN0IEdzdENhcHNXZWJLaXRNYXBwaW5nIHsKKyAgICAgICAgRWxlbWVudFR5cGUgZWxlbWVudFR5
cGU7CisgICAgICAgIGNvbnN0IGNoYXIqIGNhcHNTdHJpbmc7CisgICAgICAgIFZlY3RvcjxBdG9t
aWNTdHJpbmc+IHdlYmtpdE1pbWVUeXBlczsKKyAgICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4g
d2Via2l0Q29kZWNQYXR0ZXJuczsKKyAgICB9OworICAgIHZvaWQgZmlsbE1pbWVUeXBlU2V0RnJv
bUNhcHNNYXBwaW5nKFZlY3RvcjxHc3RDYXBzV2ViS2l0TWFwcGluZz4mKTsKKworICAgIHN0cnVj
dCBSZWdpc3RyeUxvb2t1cFJlc3VsdCB7CisgICAgICAgIGJvb2wgc3VwcG9ydGVkOworICAgICAg
ICBib29sIHVzaW5nSGFyZHdhcmU7CisKKyAgICAgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsg
cmV0dXJuIHN1cHBvcnRlZDsgfQorICAgIH07CisgICAgUmVnaXN0cnlMb29rdXBSZXN1bHQgZ3N0
UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKEdMaXN0KiBlbGVtZW50RmFjdG9yaWVzLCBj
b25zdCBjaGFyKiBjYXBzU3RyaW5nLCBib29sIGNoZWNrSGFyZHdhcmVDbGFzc2lmaWVyID0gZmFs
c2UpOworCitwcml2YXRlOgorICAgIGJvb2wgbV9pc01lZGlhU291cmNlOworICAgIEdMaXN0KiBt
X2F1ZGlvRGVjb2RlckZhY3RvcmllczsKKyAgICBHTGlzdCogbV92aWRlb0RlY29kZXJGYWN0b3Jp
ZXM7CisgICAgR0xpc3QqIG1fZGVtdXhlckZhY3RvcmllczsKKyAgICBIYXNoU2V0PFN0cmluZywg
QVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBtX21pbWVUeXBlU2V0OworICAgIEhhc2hNYXA8QXRv
bWljU3RyaW5nLCBib29sPiBtX2NvZGVjTWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0
b3J5R1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5R1N0cmVhbWVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hMzg1ZTI3ZTMxNGI2MDQ4Mzc1NjljNTAxODYwODhhZTIxZmIwYmFjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
RW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsNjYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNZWRpYUVuZ2lu
ZUNvbmZpZ3VyYXRpb25GYWN0b3J5R1N0cmVhbWVyLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSKQor
CisjaW5jbHVkZSAiR3N0UmVnaXN0cnlTY2FubmVyLmgiCisjaW5jbHVkZSAiTWVkaWFDYXBhYmls
aXRpZXNJbmZvLmgiCisjaW5jbHVkZSAiTWVkaWFEZWNvZGluZ0NvbmZpZ3VyYXRpb24uaCIKKyNp
bmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorCisjaWYg
RU5BQkxFKE1FRElBX1NPVVJDRSkKKyNpbmNsdWRlICJHc3RSZWdpc3RyeVNjYW5uZXJNU0UuaCIK
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgY3JlYXRlTWVkaWFQbGF5ZXJE
ZWNvZGluZ0NvbmZpZ3VyYXRpb25HU3RyZWFtZXIoTWVkaWFEZWNvZGluZ0NvbmZpZ3VyYXRpb24m
IGNvbmZpZ3VyYXRpb24sIFdURjo6RnVuY3Rpb248dm9pZChNZWRpYUNhcGFiaWxpdGllc0luZm8m
Jik+JiYgY2FsbGJhY2spCit7CisgICAgYm9vbCBpc01lZGlhU291cmNlID0gY29uZmlndXJhdGlv
bi50eXBlID09IE1lZGlhRGVjb2RpbmdUeXBlOjpNZWRpYVNvdXJjZTsKKyNpZiBFTkFCTEUoTUVE
SUFfU09VUkNFKQorICAgIGF1dG8mIHNjYW5uZXIgPSBpc01lZGlhU291cmNlID8gR3N0UmVnaXN0
cnlTY2FubmVyTVNFOjpzaW5nbGV0b24oKSA6IEdzdFJlZ2lzdHJ5U2Nhbm5lcjo6c2luZ2xldG9u
KCk7CisjZWxzZQorICAgIGlmIChpc01lZGlhU291cmNlKSB7CisgICAgICAgIGNhbGxiYWNrKHsg
fSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYXV0byYgc2Nhbm5lciA9IEdzdFJlZ2lz
dHJ5U2Nhbm5lcjo6c2luZ2xldG9uKCk7CisjZW5kaWYKKyAgICBib29sIHVzaW5nSGFyZHdhcmUg
PSBmYWxzZTsKKyAgICBNZWRpYUNhcGFiaWxpdGllc0luZm8gaW5mbzsKKyAgICBpbmZvLnN1cHBv
cnRlZCA9IHNjYW5uZXIuaXNEZWNvZGluZ1N1cHBvcnRlZChjb25maWd1cmF0aW9uLCAmdXNpbmdI
YXJkd2FyZSk7CisgICAgaW5mby5wb3dlckVmZmljaWVudCA9IHVzaW5nSGFyZHdhcmU7CisKKyAg
ICBjYWxsYmFjayhXVEZNb3ZlKGluZm8pKTsKK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFFbmdpbmVDb25m
aWd1cmF0aW9uRmFjdG9yeUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlHU3RyZWFtZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45ZTllYzIxNzhhNTg3OTI0Njc4NTZiYjVhOGYwN2FhNTNjZjMyNDUxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlHU3RyZWFtZXIuaApAQCAtMCwwICsx
LDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVIp
CisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
cnVjdCBNZWRpYUNhcGFiaWxpdGllc0luZm87CitzdHJ1Y3QgTWVkaWFEZWNvZGluZ0NvbmZpZ3Vy
YXRpb247CisKK2V4dGVybiB2b2lkIGNyZWF0ZU1lZGlhUGxheWVyRGVjb2RpbmdDb25maWd1cmF0
aW9uR1N0cmVhbWVyKE1lZGlhRGVjb2RpbmdDb25maWd1cmF0aW9uJiwgV1RGOjpGdW5jdGlvbjx2
b2lkKE1lZGlhQ2FwYWJpbGl0aWVzSW5mbyYmKT4mJik7CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IGZjYTkyZWQ5
ZmU3OGMwYjQ5MTE4YmVjZTcyOGIxZmRiMDAzNzJkMzkuLmZjYzQzMmZjYmE5MTM2NGE5OGQ3YTBi
NjEzZjZkZDQxZWY3NGIxODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJGaWxlU3lzdGVt
LmgiCiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjaW5jbHVkZSAiR3N0UmVnaXN0cnlT
Y2FubmVyLmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRlck5hbWVzLmgiCiAjaW5jbHVkZSAiTUlNRVR5
cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCkBAIC0yMjA4LDEzNyArMjIw
OSwxMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZGluZ0ZhaWxlZChN
ZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIGVycm9yKQogICAgIG1fcmVhZHlUaW1lckhhbmRsZXIu
c3RvcCgpOwogfQogCi1zdGF0aWMgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZl
SGFzaD4mIG1pbWVUeXBlU2V0KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNl
dDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4+IG1pbWVUeXBlcyA9IFtdKCkKLSAg
ICB7Ci0gICAgICAgIGluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRz
KCk7Ci0gICAgICAgIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+IHNl
dDsKLQotICAgICAgICBHTGlzdCogYXVkaW9EZWNvZGVyRmFjdG9yaWVzID0gZ3N0X2VsZW1lbnRf
ZmFjdG9yeV9saXN0X2dldF9lbGVtZW50cyhHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVDT0RF
UiB8IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9BVURJTywgR1NUX1JBTktfTUFSR0lO
QUwpOwotICAgICAgICBHTGlzdCogdmlkZW9EZWNvZGVyRmFjdG9yaWVzID0gZ3N0X2VsZW1lbnRf
ZmFjdG9yeV9saXN0X2dldF9lbGVtZW50cyhHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVDT0RF
UiB8IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9WSURFTywgR1NUX1JBTktfTUFSR0lO
QUwpOwotICAgICAgICBHTGlzdCogZGVtdXhlckZhY3RvcmllcyA9IGdzdF9lbGVtZW50X2ZhY3Rv
cnlfbGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFTVVYRVIsIEdT
VF9SQU5LX01BUkdJTkFMKTsKLQotICAgICAgICBlbnVtIEVsZW1lbnRUeXBlIHsKLSAgICAgICAg
ICAgIEF1ZGlvRGVjb2RlciA9IDAsCi0gICAgICAgICAgICBWaWRlb0RlY29kZXIsCi0gICAgICAg
ICAgICBEZW11eGVyCi0gICAgICAgIH07Ci0gICAgICAgIHN0cnVjdCBHc3RDYXBzV2ViS2l0TWFw
cGluZyB7Ci0gICAgICAgICAgICBFbGVtZW50VHlwZSBlbGVtZW50VHlwZTsKLSAgICAgICAgICAg
IGNvbnN0IGNoYXIqIGNhcHNTdHJpbmc7Ci0gICAgICAgICAgICBWZWN0b3I8QXRvbWljU3RyaW5n
PiB3ZWJraXRNaW1lVHlwZXM7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgVmVjdG9yPEdzdENhcHNX
ZWJLaXRNYXBwaW5nPiBtYXBwaW5nID0gewotICAgICAgICAgICAge0F1ZGlvRGVjb2RlciwgImF1
ZGlvL21pZGkiLCB7ImF1ZGlvL21pZGkiLCAiYXVkaW8vcmlmZi1taWRpIn19LAotICAgICAgICAg
ICAge0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtc2JjIiwgeyB9fSwKLSAgICAgICAgICAgIHtBdWRp
b0RlY29kZXIsICJhdWRpby94LXNpZCIsIHsgfX0sCi0gICAgICAgICAgICB7QXVkaW9EZWNvZGVy
LCAiYXVkaW8veC1mbGFjIiwgeyJhdWRpby94LWZsYWMiLCAiYXVkaW8vZmxhYyJ9fSwKLSAgICAg
ICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LXdhdiIsIHsiYXVkaW8veC13YXYiLCAiYXVk
aW8vd2F2IiwgImF1ZGlvL3ZuZC53YXZlIn19LAotICAgICAgICAgICAge0F1ZGlvRGVjb2Rlciwg
ImF1ZGlvL3gtd2F2cGFjayIsIHsiYXVkaW8veC13YXZwYWNrIn19LAotICAgICAgICAgICAge0F1
ZGlvRGVjb2RlciwgImF1ZGlvL3gtc3BlZXgiLCB7ImF1ZGlvL3NwZWV4IiwgImF1ZGlvL3gtc3Bl
ZXgifX0sCi0gICAgICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8veC1hYzMiLCB7IH19LAot
ICAgICAgICAgICAge0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtZWFjMyIsIHsiYXVkaW8veC1hYzMi
fX0sCi0gICAgICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8veC1kdHMiLCB7IH19LAotICAg
ICAgICAgICAge1ZpZGVvRGVjb2RlciwgInZpZGVvL3gtaDI2NCwgcHJvZmlsZT0oc3RyaW5nKWhp
Z2giLCB7InZpZGVvL21wNCIsICJ2aWRlby94LW00diJ9fSwKLSAgICAgICAgICAgIHtWaWRlb0Rl
Y29kZXIsICJ2aWRlby94LW1zdmlkZW9jb2RlYyIsIHsidmlkZW8veC1tc3ZpZGVvIn19LAotICAg
ICAgICAgICAge1ZpZGVvRGVjb2RlciwgInZpZGVvL3gtaDI2MyIsIHsgfX0sCi0gICAgICAgICAg
ICB7VmlkZW9EZWNvZGVyLCAidmlkZW8vbXBlZ3RzIiwgeyB9fSwKLSAgICAgICAgICAgIHtWaWRl
b0RlY29kZXIsICJ2aWRlby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KXsxLDJ9LCBzeXN0ZW1zdHJl
YW09KGJvb2xlYW4pZmFsc2UiLCB7InZpZGVvL21wZWcifX0sCi0gICAgICAgICAgICB7VmlkZW9E
ZWNvZGVyLCAidmlkZW8veC1kaXJhYyIsIHsgfX0sCi0gICAgICAgICAgICB7VmlkZW9EZWNvZGVy
LCAidmlkZW8veC1mbGFzaC12aWRlbyIsIHsidmlkZW8vZmx2IiwgInZpZGVvL3gtZmx2In19LAot
ICAgICAgICAgICAge0RlbXV4ZXIsICJ2aWRlby9xdWlja3RpbWUiLCB7IH19LAotICAgICAgICAg
ICAge0RlbXV4ZXIsICJ2aWRlby9xdWlja3RpbWUsIHZhcmlhbnQ9KHN0cmluZykzZ3BwIiwgeyJ2
aWRlby8zZ3BwIn19LAotICAgICAgICAgICAge0RlbXV4ZXIsICJhcHBsaWNhdGlvbi94LTNncCIs
IHsgfX0sCi0gICAgICAgICAgICB7RGVtdXhlciwgInZpZGVvL3gtbXMtYXNmIiwgeyB9fSwKLSAg
ICAgICAgICAgIHtEZW11eGVyLCAiYXVkaW8veC1haWZmIiwgeyB9fSwKLSAgICAgICAgICAgIHtE
ZW11eGVyLCAiYXBwbGljYXRpb24veC1wbi1yZWFsYXVkaW8iLCB7IH19LAotICAgICAgICAgICAg
e0RlbXV4ZXIsICJhcHBsaWNhdGlvbi92bmQucm4tcmVhbG1lZGlhIiwgeyB9fSwKLSAgICAgICAg
ICAgIHtEZW11eGVyLCAiYXVkaW8veC13YXYiLCB7ImF1ZGlvL3gtd2F2IiwgImF1ZGlvL3dhdiIs
ICJhdWRpby92bmQud2F2ZSJ9fSwKLSAgICAgICAgICAgIHtEZW11eGVyLCAiYXBwbGljYXRpb24v
eC1obHMiLCB7ImFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJsIiwgImFwcGxpY2F0aW9uL3gt
bXBlZ3VybCJ9fQotICAgICAgICB9OwotCi0gICAgICAgIGZvciAoYXV0byYgY3VycmVudCA6IG1h
cHBpbmcpIHsKLSAgICAgICAgICAgIEdMaXN0KiBmYWN0b3JpZXMgPSBkZW11eGVyRmFjdG9yaWVz
OwotICAgICAgICAgICAgaWYgKGN1cnJlbnQuZWxlbWVudFR5cGUgPT0gQXVkaW9EZWNvZGVyKQot
ICAgICAgICAgICAgICAgIGZhY3RvcmllcyA9IGF1ZGlvRGVjb2RlckZhY3RvcmllczsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKGN1cnJlbnQuZWxlbWVudFR5cGUgPT0gVmlkZW9EZWNvZGVyKQotICAg
ICAgICAgICAgICAgIGZhY3RvcmllcyA9IHZpZGVvRGVjb2RlckZhY3RvcmllczsKLQotICAgICAg
ICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShmYWN0b3JpZXMsIGN1
cnJlbnQuY2Fwc1N0cmluZykpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnQud2Via2l0
TWltZVR5cGVzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1
dG8mIG1pbWVUeXBlIDogY3VycmVudC53ZWJraXRNaW1lVHlwZXMpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzZXQuYWRkKG1pbWVUeXBlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoY3VycmVudC5jYXBzU3RyaW5nKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIG9wdXNTdXBwb3J0ZWQg
PSBmYWxzZTsKLSAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShh
dWRpb0RlY29kZXJGYWN0b3JpZXMsICJhdWRpby94LW9wdXMiKSkgewotICAgICAgICAgICAgb3B1
c1N1cHBvcnRlZCA9IHRydWU7Ci0gICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVk
aW8vb3B1cyIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgdm9yYmlzU3VwcG9ydGVkID0g
ZmFsc2U7Ci0gICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoZGVt
dXhlckZhY3RvcmllcywgImFwcGxpY2F0aW9uL29nZyIpKSB7Ci0gICAgICAgICAgICBzZXQuYWRk
KEF0b21pY1N0cmluZygiYXBwbGljYXRpb24vb2dnIikpOwotCi0gICAgICAgICAgICB2b3JiaXNT
dXBwb3J0ZWQgPSBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoYXVkaW9EZWNvZGVy
RmFjdG9yaWVzLCAiYXVkaW8veC12b3JiaXMiKTsKLSAgICAgICAgICAgIGlmICh2b3JiaXNTdXBw
b3J0ZWQpIHsKLSAgICAgICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vb2dn
IikpOwotICAgICAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby94LXZvcmJp
cytvZ2ciKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChnc3RSZWdpc3RyeUhh
c0VsZW1lbnRGb3JNZWRpYVR5cGUodmlkZW9EZWNvZGVyRmFjdG9yaWVzLCAidmlkZW8veC10aGVv
cmEiKSkKLSAgICAgICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygidmlkZW8vb2dnIikp
OwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBhdWRpb01wZWdTdXBwb3J0ZWQgPSBmYWxzZTsK
LSAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShhdWRpb0RlY29k
ZXJGYWN0b3JpZXMsICJhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTEsIGxheWVyPShpbnQp
WzEsIDNdIikpIHsKLSAgICAgICAgICAgIGF1ZGlvTXBlZ1N1cHBvcnRlZCA9IHRydWU7Ci0gICAg
ICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vbXAxIikpOwotICAgICAgICAgICAg
c2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL21wMyIpKTsKLSAgICAgICAgICAgIHNldC5hZGQo
QXRvbWljU3RyaW5nKCJhdWRpby94LW1wMyIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChn
c3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoYXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAi
YXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCl7MiwgNH0iKSkgewotICAgICAgICAgICAgYXVk
aW9NcGVnU3VwcG9ydGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5n
KCJhdWRpby9hYWMiKSk7Ci0gICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8v
bXAyIikpOwotICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL21wNCIpKTsK
LSAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby94LW00YSIpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChhdWRpb01wZWdTdXBwb3J0ZWQpIHsKLSAgICAgICAgICAgIHNl
dC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9tcGVnIikpOwotICAgICAgICAgICAgc2V0LmFkZChB
dG9taWNTdHJpbmcoImF1ZGlvL3gtbXBlZyIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChn
c3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoZGVtdXhlckZhY3RvcmllcywgInZpZGVv
L3gtbWF0cm9za2EiKSkgewotICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoInZpZGVv
L3gtbWF0cm9za2EiKSk7Ci0KLSAgICAgICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRG
b3JNZWRpYVR5cGUodmlkZW9EZWNvZGVyRmFjdG9yaWVzLCAidmlkZW8veC12cDgiKQotICAgICAg
ICAgICAgICAgIHx8IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZSh2aWRlb0RlY29k
ZXJGYWN0b3JpZXMsICJ2aWRlby94LXZwOSIpCi0gICAgICAgICAgICAgICAgfHwgZ3N0UmVnaXN0
cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKHZpZGVvRGVjb2RlckZhY3RvcmllcywgInZpZGVvL3gt
dnAxMCIpKQotICAgICAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJ2aWRlby93ZWJt
IikpOwotCi0gICAgICAgICAgICBpZiAodm9yYmlzU3VwcG9ydGVkIHx8IG9wdXNTdXBwb3J0ZWQp
Ci0gICAgICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL3dlYm0iKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKGF1ZGlvRGVj
b2RlckZhY3Rvcmllcyk7Ci0gICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUodmlk
ZW9EZWNvZGVyRmFjdG9yaWVzKTsKLSAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJl
ZShkZW11eGVyRmFjdG9yaWVzKTsKLSAgICAgICAgcmV0dXJuIHNldDsKLSAgICB9KCk7Ci0gICAg
cmV0dXJuIG1pbWVUeXBlczsKLX0KLQogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhh
c2g+JiB0eXBlcykKIHsKLSAgICB0eXBlcyA9IG1pbWVUeXBlU2V0KCk7CisgICAgYXV0byYgZ3N0
UmVnaXN0cnlTY2FubmVyID0gR3N0UmVnaXN0cnlTY2FubmVyOjpzaW5nbGV0b24oKTsKKyAgICB0
eXBlcyA9IGdzdFJlZ2lzdHJ5U2Nhbm5lci5taW1lVHlwZVNldCgpOwogfQogCiBNZWRpYVBsYXll
cjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBl
KGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCkBAIC0yMzU4
LDMwICsyMjMyLDIxIEBAIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFCiAgICAgaWYgKHBhcmFtZXRl
cnMudHlwZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICAvLyBTcGVj
IHNheXMgd2Ugc2hvdWxkIG5vdCByZXR1cm4gInByb2JhYmx5IiBpZiB0aGUgY29kZWNzIHN0cmlu
ZyBpcyBlbXB0eS4KLSAgICBpZiAobWltZVR5cGVTZXQoKS5jb250YWlucyhwYXJhbWV0ZXJzLnR5
cGUuY29udGFpbmVyVHlwZSgpKSkKLSAgICAgICAgcmVzdWx0ID0gcGFyYW1ldGVycy50eXBlLmNv
ZGVjcygpLmlzRW1wdHkoKSA/IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZCA6IE1lZGlhUGxh
eWVyOjpJc1N1cHBvcnRlZDsKLQorICAgIEdTVF9ERUJVRygiQ2hlY2tpbmcgbWltZS10eXBlIFwi
JXNcIiIsIHBhcmFtZXRlcnMudHlwZS5yYXcoKS51dGY4KCkuZGF0YSgpKTsKICAgICBhdXRvIGNv
bnRhaW5lclR5cGUgPSBwYXJhbWV0ZXJzLnR5cGUuY29udGFpbmVyVHlwZSgpOwotICAgIGlmIChj
b250YWluZXJUeXBlID09ICJ2aWRlby9tcDQiX3MgfHwgY29udGFpbmVyVHlwZSA9PSAidmlkZW8v
d2VibSJfcykgewotICAgICAgICBpZiAobWltZVR5cGVTZXQoKS5jb250YWlucyhjb250YWluZXJU
eXBlKSkgewotICAgICAgICAgICAgR0xpc3QqIHZpZGVvRGVjb2RlckZhY3RvcmllcyA9IGdzdF9l
bGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBF
X0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfVklERU8sIEdTVF9SQU5L
X01BUkdJTkFMKTsKLSAgICAgICAgICAgIGJvb2wgYXYxRGVjb2RlckZvdW5kID0gZ3N0UmVnaXN0
cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKHZpZGVvRGVjb2RlckZhY3RvcmllcywgInZpZGVvL3gt
YXYxIl9zKTsKLSAgICAgICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUodmlkZW9E
ZWNvZGVyRmFjdG9yaWVzKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY29kZWMgOiBwYXJhbWV0
ZXJzLnR5cGUuY29kZWNzKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29kZWMuc3RhcnRzV2l0
aCgiYXYwMSJfcykpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYXYxRGVjb2RlckZv
dW5kID8gTWVkaWFQbGF5ZXI6OklzU3VwcG9ydGVkIDogTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9y
dGVkOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgaWYgKGNvZGVjLnN0YXJ0c1dpdGgoImF2MSJfcykpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KKyAgICBhdXRvJiBnc3RSZWdpc3RyeVNjYW5uZXIgPSBHc3RSZWdpc3RyeVNjYW5uZXI6
OnNpbmdsZXRvbigpOworICAgIGlmIChnc3RSZWdpc3RyeVNjYW5uZXIuc3VwcG9ydHNDb250YWlu
ZXJUeXBlKGNvbnRhaW5lclR5cGUpKSB7CisgICAgICAgIC8vIFNwZWMgc2F5cyB3ZSBzaG91bGQg
bm90IHJldHVybiAicHJvYmFibHkiIGlmIHRoZSBjb2RlY3Mgc3RyaW5nIGlzIGVtcHR5LgorICAg
ICAgICBWZWN0b3I8U3RyaW5nPiBjb2RlY3MgPSBwYXJhbWV0ZXJzLnR5cGUuY29kZWNzKCk7Cisg
ICAgICAgIGlmIChjb2RlY3MuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmVzdWx0ID0gTWVkaWFQ
bGF5ZXI6Ok1heUJlU3VwcG9ydGVkOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQg
PSBnc3RSZWdpc3RyeVNjYW5uZXIuc3VwcG9ydHNBbGxDb2RlY3MoY29kZWNzKSA/IE1lZGlhUGxh
eWVyOjpJc1N1cHBvcnRlZCA6IE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKICAgICB9CiAK
LSAgICByZXR1cm4gZXh0ZW5kZWRTdXBwb3J0c1R5cGUocGFyYW1ldGVycywgcmVzdWx0KTsKKyAg
ICBhdXRvIGZpbmFsUmVzdWx0ID0gZXh0ZW5kZWRTdXBwb3J0c1R5cGUocGFyYW1ldGVycywgcmVz
dWx0KTsKKyAgICBHU1RfREVCVUcoIlN1cHBvcnRlZDogJXMiLCBjb252ZXJ0RW51bWVyYXRpb25U
b1N0cmluZyhmaW5hbFJlc3VsdCkudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIGZpbmFsUmVz
dWx0OwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0RG93bmxvYWRC
dWZmZXJpbmcoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmNwcAppbmRleCA4MzlkYTYy
ZDc3MTEwZGU3YTM0ZWMyOTM2YjJlOGNmNTUwODExNTNiLi5lNWY4ZWI4NGI1MzVkZmM4NzlkYzU1
M2NmNDAwNzRhYmFiOGE0OTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmNwcApA
QCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgogI2luY2x1ZGUg
IkdTdHJlYW1lckVNRVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdTdHJlYW1lck1lZGlhRGVzY3Jp
cHRpb24uaCIKKyNpbmNsdWRlICJHc3RSZWdpc3RyeVNjYW5uZXJNU0UuaCIKICNpbmNsdWRlICJN
ZWRpYVNhbXBsZUdTdHJlYW1lci5oIgogI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGVH
U3RyZWFtZXIuaCIKICNpbmNsdWRlICJNZWRpYURlc2NyaXB0aW9uLmgiCkBAIC0xNjIsNyArMTYz
LDggQEAgQXBwZW5kUGlwZWxpbmU6OkFwcGVuZFBpcGVsaW5lKFJlZjxNZWRpYVNvdXJjZUNsaWVu
dEdTdHJlYW1lck1TRT4gbWVkaWFTb3VyY2VDbGkKICAgICB9LCB0aGlzLCBudWxscHRyKTsKIAog
ICAgIGNvbnN0IFN0cmluZyYgdHlwZSA9IG1fc291cmNlQnVmZmVyUHJpdmF0ZS0+dHlwZSgpLmNv
bnRhaW5lclR5cGUoKTsKLSAgICBpZiAodHlwZS5lbmRzV2l0aCgibXA0IikpCisgICAgR1NUX0RF
QlVHKCJTb3VyY2VCdWZmZXIgY29udGFpbmVyVHlwZTogJXMiLCB0eXBlLnV0ZjgoKS5kYXRhKCkp
OworICAgIGlmICh0eXBlLmVuZHNXaXRoKCJtcDQiKSB8fCB0eXBlLmVuZHNXaXRoKCJhYWMiKSkK
ICAgICAgICAgbV9kZW11eCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicXRkZW11eCIsIG51
bGxwdHIpOwogICAgIGVsc2UgaWYgKHR5cGUuZW5kc1dpdGgoIndlYm0iKSkKICAgICAgICAgbV9k
ZW11eCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgibWF0cm9za2FkZW11eCIsIG51bGxwdHIp
OwpAQCAtNTcwLDcgKzU3Miw4IEBAIHZvaWQgQXBwZW5kUGlwZWxpbmU6OnBhcnNlRGVtdXhlclNy
Y1BhZENhcHMoR3N0Q2FwcyogZGVtdXhlclNyY1BhZENhcHMpCiAgICAgbV9zdHJlYW1UeXBlID0g
V2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpVbmtub3duOwogCiAgICAg
Y29uc3QgY2hhciogb3JpZ2luYWxNZWRpYVR5cGUgPSBjYXBzTWVkaWFUeXBlKG1fZGVtdXhlclNy
Y1BhZENhcHMuZ2V0KCkpOwotICAgIGlmICghTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
OjpzdXBwb3J0c0NvZGVjKG9yaWdpbmFsTWVkaWFUeXBlKSkgeworICAgIGF1dG8mIGdzdFJlZ2lz
dHJ5U2Nhbm5lciA9IEdzdFJlZ2lzdHJ5U2Nhbm5lck1TRTo6c2luZ2xldG9uKCk7CisgICAgaWYg
KCFnc3RSZWdpc3RyeVNjYW5uZXIuc3VwcG9ydHNDb2RlYyhvcmlnaW5hbE1lZGlhVHlwZSkpIHsK
ICAgICAgICAgICAgIG1fcHJlc2VudGF0aW9uU2l6ZSA9IFdlYkNvcmU6OkZsb2F0U2l6ZSgpOwog
ICAgICAgICAgICAgbV9zdHJlYW1UeXBlID0gV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBl
R1N0cmVhbWVyOjpJbnZhbGlkOwogICAgIH0gZWxzZSBpZiAoZG9DYXBzSGF2ZVR5cGUobV9kZW11
eGVyU3JjUGFkQ2Fwcy5nZXQoKSwgR1NUX1ZJREVPX0NBUFNfVFlQRV9QUkVGSVgpKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0dz
dFJlZ2lzdHJ5U2Nhbm5lck1TRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvbXNlL0dzdFJlZ2lzdHJ5U2Nhbm5lck1TRS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMThl
NDkwOTUyODI0ODc0ZTFmZmZkODBkYmNmMDQ1M2VlZWM5NjlhMAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvR3N0UmVnaXN0
cnlTY2FubmVyTVNFLmNwcApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSKSAm
JiBFTkFCTEUoTUVESUFfU09VUkNFKQorI2luY2x1ZGUgIkdzdFJlZ2lzdHJ5U2Nhbm5lck1TRS5o
IgorCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworR3N0UmVnaXN0cnlTY2FubmVyTVNFJiBHc3RSZWdpc3RyeVNjYW5uZXJNU0U6OnNpbmds
ZXRvbigpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEdzdFJlZ2lzdHJ5U2Nhbm5lck1T
RT4gc2hhcmVkSW5zdGFuY2U7CisgICAgcmV0dXJuIHNoYXJlZEluc3RhbmNlOworfQorCitHc3RS
ZWdpc3RyeVNjYW5uZXJNU0U6OkdzdFJlZ2lzdHJ5U2Nhbm5lck1TRSgpCisgICAgOiBHc3RSZWdp
c3RyeVNjYW5uZXI6OkdzdFJlZ2lzdHJ5U2Nhbm5lcih0cnVlKQoreworfQorCit9CisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvR3N0UmVnaXN0cnlTY2FubmVyTVNFLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvbXNlL0dzdFJlZ2lzdHJ5U2Nhbm5lck1TRS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQw
ZmM5OTdkNjA5YTg5M2I0YWFiY2RmMzU2ZGIwYmEyOTNjOTMwMDQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0dzdFJlZ2lz
dHJ5U2Nhbm5lck1TRS5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggSWdhbGlhIFMuTAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdTVFJFQU1FUikgJiYgRU5BQkxF
KE1FRElBX1NPVVJDRSkKKworI2luY2x1ZGUgIkdzdFJlZ2lzdHJ5U2Nhbm5lci5oIgorCisjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHc3RS
ZWdpc3RyeVNjYW5uZXJNU0UgOiBwdWJsaWMgR3N0UmVnaXN0cnlTY2FubmVyIHsKKyAgICBmcmll
bmQgTmV2ZXJEZXN0cm95ZWQ8R3N0UmVnaXN0cnlTY2FubmVyTVNFPjsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgR3N0UmVnaXN0cnlTY2FubmVyTVNFJiBzaW5nbGV0b24oKTsKK3Byb3RlY3RlZDoKKyAg
ICBHc3RSZWdpc3RyeVNjYW5uZXJNU0UoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNl
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAKaW5kZXggMmNjM2QxYTdlMDkwNjY5
ZGMzNzNjYzUyNDgzOGMzNGZiNTU4NmY3MC4uNWFjMTc1YjNiYjIzNjk5ZTZjZTEwZTZmYTkwNzVk
Nzk1MGM4ZDNmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkFwcGVu
ZFBpcGVsaW5lLmgiCiAjaW5jbHVkZSAiQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKICNp
bmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKKyNpbmNsdWRlICJHc3RSZWdpc3RyeVNjYW5uZXJN
U0UuaCIKICNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCiAjaW5j
bHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk1lZGlhRGVzY3JpcHRpb24uaCIK
QEAgLTQyLDcgKzQzLDYgQEAKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlICJWaWRlb1RyYWNr
UHJpdmF0ZUdTdHJlYW1lci5oIgogCi0jaW5jbHVkZSA8Zm5tYXRjaC5oPgogI2luY2x1ZGUgPGdz
dC9hcHAvZ3N0YXBwc2luay5oPgogI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc3JjLmg+CiAjaW5j
bHVkZSA8Z3N0L2dzdC5oPgpAQCAtNjgyLDMwICs2ODIsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck1TRTo6ZHVyYXRpb25DaGFuZ2VkKCkKICAgICB9CiB9CiAKLXN0YXRpYyBI
YXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgbWltZVR5cGVDYWNoZSgp
Ci17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJ
bnNlbnNpdGl2ZUhhc2g+PiBjYWNoZSA9IFtdKCkKLSAgICB7Ci0gICAgICAgIGluaXRpYWxpemVH
U3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKCk7Ci0gICAgICAgIEhhc2hTZXQ8U3Ry
aW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+IHNldDsKLSAgICAgICAgY29uc3QgY2hhciog
bWltZVR5cGVzW10gPSB7Ci0gICAgICAgICAgICAidmlkZW8vbXA0IiwKLSAgICAgICAgICAgICJh
dWRpby9tcDQiLAotICAgICAgICAgICAgInZpZGVvL3dlYm0iLAotICAgICAgICAgICAgImF1ZGlv
L3dlYm0iCi0gICAgICAgIH07Ci0gICAgICAgIGZvciAoYXV0byYgdHlwZSA6IG1pbWVUeXBlcykK
LSAgICAgICAgICAgIHNldC5hZGQodHlwZSk7Ci0gICAgICAgIHJldHVybiBzZXQ7Ci0gICAgfSgp
OwotICAgIHJldHVybiBjYWNoZTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJNU0U6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNp
dGl2ZUhhc2g+JiB0eXBlcykKLXsKLSAgICB0eXBlcyA9IG1pbWVUeXBlQ2FjaGUoKTsKLX0KLQog
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnRyYWNrRGV0ZWN0ZWQoUmVmUHRy
PEFwcGVuZFBpcGVsaW5lPiBhcHBlbmRQaXBlbGluZSwgUmVmUHRyPFdlYkNvcmU6OlRyYWNrUHJp
dmF0ZUJhc2U+IG5ld1RyYWNrLCBib29sIGZpcnN0VHJhY2tEZXRlY3RlZCkKIHsKICAgICBBU1NF
UlQoYXBwZW5kUGlwZWxpbmUtPnRyYWNrKCkgPT0gbmV3VHJhY2spOwpAQCAtNzI2LDEwOSArNzAy
LDEwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp0cmFja0RldGVjdGVk
KFJlZlB0cjxBcHBlbmRQaXBlbGluZT4gYXBwZW5kCiAgICAgICAgIG1fcGxheWJhY2tQaXBlbGlu
ZS0+cmVhdHRhY2hUcmFjayhhcHBlbmRQaXBlbGluZS0+c291cmNlQnVmZmVyUHJpdmF0ZSgpLCBu
ZXdUcmFjaywgY2Fwcyk7CiB9CiAKLWNvbnN0IHN0YXRpYyBIYXNoU2V0PEF0b21pY1N0cmluZz4m
IGNvZGVjU2V0KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxBdG9taWNT
dHJpbmc+PiBjb2RlY1R5cGVzID0gW10oKQotICAgIHsKLSAgICAgICAgaW5pdGlhbGl6ZUdTdHJl
YW1lckFuZFJlZ2lzdGVyV2ViS2l0RWxlbWVudHMoKTsKLSAgICAgICAgSGFzaFNldDxBdG9taWNT
dHJpbmc+IHNldDsKLQotICAgICAgICBHTGlzdCogYXVkaW9EZWNvZGVyRmFjdG9yaWVzID0gZ3N0
X2VsZW1lbnRfZmFjdG9yeV9saXN0X2dldF9lbGVtZW50cyhHU1RfRUxFTUVOVF9GQUNUT1JZX1RZ
UEVfREVDT0RFUiB8IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9BVURJTywgR1NUX1JB
TktfTUFSR0lOQUwpOwotICAgICAgICBHTGlzdCogdmlkZW9EZWNvZGVyRmFjdG9yaWVzID0gZ3N0
X2VsZW1lbnRfZmFjdG9yeV9saXN0X2dldF9lbGVtZW50cyhHU1RfRUxFTUVOVF9GQUNUT1JZX1RZ
UEVfREVDT0RFUiB8IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9WSURFTywgR1NUX1JB
TktfTUFSR0lOQUwpOwotCi0gICAgICAgIGVudW0gRWxlbWVudFR5cGUgewotICAgICAgICAgICAg
QXVkaW9EZWNvZGVyID0gMCwKLSAgICAgICAgICAgIFZpZGVvRGVjb2RlcgotICAgICAgICB9Owot
ICAgICAgICBzdHJ1Y3QgR3N0Q2Fwc1dlYktpdE1hcHBpbmcgewotICAgICAgICAgICAgRWxlbWVu
dFR5cGUgZWxlbWVudFR5cGU7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBjYXBzU3RyaW5nOwot
ICAgICAgICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gd2Via2l0Q29kZWNzOwotICAgICAgICB9
OwotCi0gICAgICAgIEdzdENhcHNXZWJLaXRNYXBwaW5nIG1hcHBpbmdbXSA9IHsKLSAgICAgICAg
ICAgIHsgVmlkZW9EZWNvZGVyLCAidmlkZW8veC1oMjY0LCAgcHJvZmlsZT0oc3RyaW5nKXsgY29u
c3RyYWluZWQtYmFzZWxpbmUsIGJhc2VsaW5lIH0iLCB7ICJ4LWgyNjQiLCAiYXZjKiIgfSB9LAot
ICAgICAgICAgICAgeyBWaWRlb0RlY29kZXIsICJ2aWRlby9tcGVnLCBtcGVndmVyc2lvbj0oaW50
KXsxLDJ9LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2UiLCB7ICJtcGVnIiB9IH0sCi0gICAg
ICAgICAgICB7IFZpZGVvRGVjb2RlciwgInZpZGVvL3gtdnA4IiwgeyAidnA4IiwgIngtdnA4IiB9
IH0sCi0gICAgICAgICAgICB7IFZpZGVvRGVjb2RlciwgInZpZGVvL3gtdnA5IiwgeyAidnA5Iiwg
IngtdnA5IiB9IH0sCi0gICAgICAgICAgICB7IEF1ZGlvRGVjb2RlciwgImF1ZGlvL3gtdm9yYmlz
IiwgeyAidm9yYmlzIiwgIngtdm9yYmlzIiB9IH0sCi0gICAgICAgICAgICB7IEF1ZGlvRGVjb2Rl
ciwgImF1ZGlvL3gtb3B1cyIsIHsgIm9wdXMiLCAieC1vcHVzIiB9IH0KLSAgICAgICAgfTsKLQot
ICAgICAgICBmb3IgKGF1dG8mIGN1cnJlbnQgOiBtYXBwaW5nKSB7Ci0gICAgICAgICAgICBHTGlz
dCogZmFjdG9yaWVzID0gbnVsbHB0cjsKLSAgICAgICAgICAgIHN3aXRjaCAoY3VycmVudC5lbGVt
ZW50VHlwZSkgewotICAgICAgICAgICAgY2FzZSBBdWRpb0RlY29kZXI6Ci0gICAgICAgICAgICAg
ICAgZmFjdG9yaWVzID0gYXVkaW9EZWNvZGVyRmFjdG9yaWVzOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBWaWRlb0RlY29kZXI6Ci0gICAgICAgICAgICAgICAgZmFj
dG9yaWVzID0gdmlkZW9EZWNvZGVyRmFjdG9yaWVzOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hl
ZCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBnX2Fzc2VydF9ub25udWxsKGZhY3Rvcmllcyk7Ci0KLSAgICAgICAgICAgIGlmIChnc3RSZWdp
c3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoZmFjdG9yaWVzLCBjdXJyZW50LmNhcHNTdHJpbmcp
ICYmIGZhY3RvcmllcyAhPSBudWxscHRyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50
LndlYmtpdENvZGVjcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChjb25z
dCBhdXRvJiBtaW1lVHlwZSA6IGN1cnJlbnQud2Via2l0Q29kZWNzKQotICAgICAgICAgICAgICAg
ICAgICAgICAgc2V0LmFkZChtaW1lVHlwZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKGN1cnJlbnQuY2Fwc1N0cmluZykp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBhdWRpb01wZWdTdXBw
b3J0ZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlh
VHlwZShhdWRpb0RlY29kZXJGYWN0b3JpZXMsICJhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50
KTEsIGxheWVyPShpbnQpWzEsIDNdIikpIHsKLSAgICAgICAgICAgIGF1ZGlvTXBlZ1N1cHBvcnRl
ZCA9IHRydWU7Ci0gICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vbXAzIikp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlh
VHlwZShhdWRpb0RlY29kZXJGYWN0b3JpZXMsICJhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50
KXsyLCA0fSIpKSB7Ci0gICAgICAgICAgICBhdWRpb01wZWdTdXBwb3J0ZWQgPSB0cnVlOwotICAg
ICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoIm1wNGEqIikpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGF1ZGlvTXBlZ1N1cHBvcnRlZCkgewotICAgICAgICAgICAgc2V0LmFkZChBdG9t
aWNTdHJpbmcoImF1ZGlvL21wZWciKSk7Ci0gICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmlu
ZygiYXVkaW8veC1tcGVnIikpOwotICAgICAgICB9Ci0KLQotICAgICAgICBnc3RfcGx1Z2luX2Zl
YXR1cmVfbGlzdF9mcmVlKGF1ZGlvRGVjb2RlckZhY3Rvcmllcyk7Ci0gICAgICAgIGdzdF9wbHVn
aW5fZmVhdHVyZV9saXN0X2ZyZWUodmlkZW9EZWNvZGVyRmFjdG9yaWVzKTsKLQotICAgICAgICBy
ZXR1cm4gc2V0OwotICAgIH0oKTsKLSAgICByZXR1cm4gY29kZWNUeXBlczsKLX0KLQotYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnN1cHBvcnRzQ29kZWMoU3RyaW5nIGNvZGVj
KQotewotICAgIC8vIElmIHRoZSBjb2RlYyBpcyBuYW1lZCBsaWtlIGEgbWltZXR5cGUgKGVnOiB2
aWRlby9hdmMpIHJlbW92ZSB0aGUgInZpZGVvLyIgcGFydC4KLSAgICBzaXplX3Qgc2xhc2hJbmRl
eCA9IGNvZGVjLmZpbmQoJy8nKTsKLSAgICBpZiAoc2xhc2hJbmRleCAhPSBXVEY6Om5vdEZvdW5k
KQotICAgICAgICBjb2RlYyA9IGNvZGVjLnN1YnN0cmluZyhzbGFzaEluZGV4KzEpOwotCi0gICAg
Zm9yIChjb25zdCBhdXRvJiBwYXR0ZXJuIDogY29kZWNTZXQoKSkgewotICAgICAgICBib29sIGNv
ZGVjTWF0Y2hlc1BhdHRlcm4gPSAhZm5tYXRjaChwYXR0ZXJuLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCksIGNvZGVjLnV0ZjgoKS5kYXRhKCksIDApOwotICAgICAgICBpZiAoY29kZWNNYXRjaGVzUGF0
dGVybikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnN1cHBvcnRzQWxs
Q29kZWNzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBjb2RlY3MpCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck1TRTo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmcsIEFTQ0lJ
Q2FzZUluc2Vuc2l0aXZlSGFzaD4mIHR5cGVzKQogewotICAgIGZvciAoU3RyaW5nIGNvZGVjIDog
Y29kZWNzKSB7Ci0gICAgICAgIGlmICghc3VwcG9ydHNDb2RlYyhjb2RlYykpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7CisgICAgYXV0byYgZ3N0
UmVnaXN0cnlTY2FubmVyID0gR3N0UmVnaXN0cnlTY2FubmVyTVNFOjpzaW5nbGV0b24oKTsKKyAg
ICB0eXBlcyA9IGdzdFJlZ2lzdHJ5U2Nhbm5lci5taW1lVHlwZVNldCgpOwogfQogCiBNZWRpYVBs
YXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c3VwcG9y
dHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCkBA
IC04NDIsMTkgKzcxOSwyNCBAQCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZAogICAgIC8vIFlvdVR1
YmUgVFYgcHJvdmlkZXMgZW1wdHkgdHlwZXMgZm9yIHNvbWUgdmlkZW9zIGFuZCB3ZSB3YW50IHRv
IGJlIHNlbGVjdGVkIGFzIGJlc3QgbWVkaWEgZW5naW5lIGZvciB0aGVtLgogICAgIGlmIChjb250
YWluZXJUeXBlLmlzRW1wdHkoKSkgewogICAgICAgICByZXN1bHQgPSBNZWRpYVBsYXllcjo6TWF5
QmVTdXBwb3J0ZWQ7CisgICAgICAgIEdTVF9ERUJVRygibWltZS10eXBlIFwiJXNcIiBzdXBwb3J0
ZWQ6ICVzIiwgcGFyYW1ldGVycy50eXBlLnJhdygpLnV0ZjgoKS5kYXRhKCksIGNvbnZlcnRFbnVt
ZXJhdGlvblRvU3RyaW5nKHJlc3VsdCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQogCisgICAgR1NUX0RFQlVHKCJDaGVja2luZyBtaW1lLXR5cGUgXCIlc1wi
IiwgcGFyYW1ldGVycy50eXBlLnJhdygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGF1dG8mIGdzdFJl
Z2lzdHJ5U2Nhbm5lciA9IEdzdFJlZ2lzdHJ5U2Nhbm5lck1TRTo6c2luZ2xldG9uKCk7CiAgICAg
Ly8gU3BlYyBzYXlzIHdlIHNob3VsZCBub3QgcmV0dXJuICJwcm9iYWJseSIgaWYgdGhlIGNvZGVj
cyBzdHJpbmcgaXMgZW1wdHkuCi0gICAgaWYgKG1pbWVUeXBlQ2FjaGUoKS5jb250YWlucyhjb250
YWluZXJUeXBlKSkgeworICAgIGlmIChnc3RSZWdpc3RyeVNjYW5uZXIuc3VwcG9ydHNDb250YWlu
ZXJUeXBlKGNvbnRhaW5lclR5cGUpKSB7CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGNvZGVjcyA9
IHBhcmFtZXRlcnMudHlwZS5jb2RlY3MoKTsKICAgICAgICAgaWYgKGNvZGVjcy5pc0VtcHR5KCkp
CiAgICAgICAgICAgICByZXN1bHQgPSBNZWRpYVBsYXllcjo6TWF5QmVTdXBwb3J0ZWQ7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IHN1cHBvcnRzQWxsQ29kZWNzKGNvZGVjcykg
PyBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7
CisgICAgICAgICAgICByZXN1bHQgPSBnc3RSZWdpc3RyeVNjYW5uZXIuc3VwcG9ydHNBbGxDb2Rl
Y3MoY29kZWNzKSA/IE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZCA6IE1lZGlhUGxheWVyOjpJc05v
dFN1cHBvcnRlZDsKICAgICB9CiAKLSAgICByZXR1cm4gZXh0ZW5kZWRTdXBwb3J0c1R5cGUocGFy
YW1ldGVycywgcmVzdWx0KTsKKyAgICBhdXRvIGZpbmFsUmVzdWx0ID0gZXh0ZW5kZWRTdXBwb3J0
c1R5cGUocGFyYW1ldGVycywgcmVzdWx0KTsKKyAgICBHU1RfREVCVUcoIlN1cHBvcnRlZDogJXMi
LCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhmaW5hbFJlc3VsdCkudXRmOCgpLmRhdGEoKSk7
CisgICAgcmV0dXJuIGZpbmFsUmVzdWx0OwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRTo6bWFya0VuZE9mU3RyZWFtKE1lZGlhU291cmNlUHJpdmF0ZTo6RW5kT2ZTdHJl
YW1TdGF0dXMgc3RhdHVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFLmgKaW5kZXggMjI1N2U5ZTY4MzBhY2IxOGM2ZjA4ZjcxODZiZjc3
NThiNzI3MzVkNy4uMDJhYTFkMTVjN2UxMWJiN2Y2M2E4ZmQ2OTI0MWY2NzM1MDdhMmVlNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RS5oCkBAIC04Miw5ICs4Miw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHRyYWNrRGV0ZWN0ZWQoUmVm
UHRyPEFwcGVuZFBpcGVsaW5lPiwgUmVmUHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2U+LCBi
b29sIGZpcnN0VHJhY2tEZXRlY3RlZCk7CiAgICAgdm9pZCBub3RpZnlTZWVrTmVlZHNEYXRhRm9y
VGltZShjb25zdCBNZWRpYVRpbWUmKTsKIAotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQ29kZWMo
U3RyaW5nIGNvZGVjKTsKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0FsbENvZGVjcyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgY29kZWNzKTsKLQogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAg
ICAgdm9pZCBhdHRlbXB0VG9EZWNyeXB0V2l0aEluc3RhbmNlKENETUluc3RhbmNlJikgZmluYWw7
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhY2FwYWJp
bGl0aWVzL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnkuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFj
dG9yeS5jcHAKaW5kZXggMzI5ZTI5NGNhMmY2MDE5YWNhNDlmMzlhNjExNzhkZDUyNjY5MTY2MS4u
Yzk0ODMwZGZkMWVkNWZhNDMxOTRhOWZlOTk1NDNlZDMwZDcxMTAyZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFFbmdpbmVDb25maWd1
cmF0aW9uRmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFjYXBh
YmlsaXRpZXMvTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeS5jcHAKQEAgLTM5LDYgKzM5
LDEwIEBACiAjaW5jbHVkZSAiTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeUNvY29hLmgi
CiAjZW5kaWYKIAorI2lmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVkZSAiTWVkaWFFbmdpbmVDb25m
aWd1cmF0aW9uRmFjdG9yeUdTdHJlYW1lci5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogc3RhdGljIGJvb2wmIG1vY2tFbmFibGVkKCkKQEAgLTU4LDYgKzYyLDkgQEAgc3RhdGlj
IGNvbnN0IEZhY3RvcnlWZWN0b3ImIGZhY3RvcmllcygpCiAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEZhY3RvcnlWZWN0b3I+IGZhY3RvcmllcyA9IG1ha2VOZXZlckRlc3Ryb3llZChGYWN0b3J5
VmVjdG9yKHsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgeyAmY3JlYXRlTWVkaWFQbGF5
ZXJEZWNvZGluZ0NvbmZpZ3VyYXRpb25Db2NvYSwgbnVsbHB0ciB9LAorI2VuZGlmCisjaWYgVVNF
KEdTVFJFQU1FUikKKyAgICAgICAgeyAmY3JlYXRlTWVkaWFQbGF5ZXJEZWNvZGluZ0NvbmZpZ3Vy
YXRpb25HU3RyZWFtZXIsIG51bGxwdHIgfSwKICNlbmRpZgogICAgIH0pKTsKICAgICByZXR1cm4g
ZmFjdG9yaWVzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>353707</attachid>
            <date>2018-11-02 10:03:33 -0700</date>
            <delta_ts>2018-11-02 10:04:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191191-20181102170331.patch</filename>
            <type>text/plain</type>
            <size>12555</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3NzM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTIzY2MyZDM1NWI2Y2E2
NzNkNTk5OWFkYjkyZWRmOTAyMDExNzNmZC4uYzAyNWRlYjkxZWNlNGI1YjZlMWFlOWFhMjM5YTgy
Y2ZiN2QzZDNhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE4LTExLTAyICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBNb3ZlIGVsZW1lbnRzIHJlZ2lzdHJhdGlvbiB0byBHU3RyZWFtZXJDb21tb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTE4OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEl0IHdhcyBhIGJpdCBvZGQg
dG8gaGF2ZSB0aGlzIGluIHRoZSBiYXNlIHBsYXllciBjbGFzcyBhbmQgdG8gaGF2ZQorICAgICAg
ICBzdWItY2xhc3NlcyBjYWxsaW5nIGEgc3RhdGljIGZ1bmN0aW9uIG9mIHRoZSBzdXBlci1jbGFz
cy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjppbml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRFbGVtZW50cyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjppc0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmxvYWRGdWxsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6cmVnaXN0ZXJNZWRpYUVuZ2luZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmxvYWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp0cmFja0RldGVjdGVk
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c3Vw
cG9ydHNUeXBlKToKKwogMjAxOC0xMS0wMiAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgog
CiAgICAgICAgIFJlbW92ZSBFTkFCTEVfT1BFTkNMIGZ1bGx5CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21t
b24uY3BwCmluZGV4IDc3MjNkMjljZTRhNTZhN2VhNjJmZTIzOWE2NDVkY2U0YWU3M2Q4NmIuLjUy
NjQ5YmJhN2FiOGM0ZDlhYjc1MzlhZTMyOTk2NDgzODM4MWZjOTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFt
ZXJDb21tb24uY3BwCkBAIC0zOCw2ICszOCwyMiBAQAogI3VuZGVmIEdTVF9VU0VfVU5TVEFCTEVf
QVBJCiAjZW5kaWYKIAorI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisjaW5jbHVkZSAiV2ViS2l0
TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkgJiYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTAsIDApCisjaW5jbHVkZSAiR1N0cmVhbWVyTWVk
aWFTdHJlYW1Tb3VyY2UuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkK
KyNpbmNsdWRlICJXZWJLaXRDbGVhcktleURlY3J5cHRvckdTdHJlYW1lci5oIgorI2VuZGlmCisK
KyNpZiBFTkFCTEUoVklERU8pCisjaW5jbHVkZSAiV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmgi
CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBHc3RQYWQqIHdlYmtpdEdzdEdob3N0
UGFkRnJvbVN0YXRpY1RlbXBsYXRlKEdzdFN0YXRpY1BhZFRlbXBsYXRlKiBzdGF0aWNQYWRUZW1w
bGF0ZSwgY29uc3QgZ2NoYXIqIG5hbWUsIEdzdFBhZCogdGFyZ2V0KQpAQCAtMjM0LDYgKzI1MCwz
NCBAQCBib29sIGluaXRpYWxpemVHU3RyZWFtZXIoc3RkOjpvcHRpb25hbDxWZWN0b3I8U3RyaW5n
Pj4mJiBvcHRpb25zKQogICAgIHJldHVybiBpc0dTdHJlYW1lckluaXRpYWxpemVkOwogfQogCiti
b29sIGluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKCkKK3sKKyAg
ICBpZiAoIWluaXRpYWxpemVHU3RyZWFtZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9u
Y2VGbGFnLCBbXSB7CisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyAgICAgICAgaWYgKHdl
YmtpdEdzdENoZWNrVmVyc2lvbigxLCA2LCAxKSkKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3Jl
Z2lzdGVyKG51bGxwdHIsICJ3ZWJraXRjbGVhcmtleSIsIEdTVF9SQU5LX1BSSU1BUlkgKyAxMDAs
IFdFQktJVF9UWVBFX01FRElBX0NLX0RFQ1JZUFQpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKSAmJiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMCwgMCkKKyAgICAgICAgaWYgKHdl
YmtpdEdzdENoZWNrVmVyc2lvbigxLCAxMCwgMCkpCisgICAgICAgICAgICBnc3RfZWxlbWVudF9y
ZWdpc3RlcihudWxscHRyLCAibWVkaWFzdHJlYW1zcmMiLCBHU1RfUkFOS19QUklNQVJZLCBXRUJL
SVRfVFlQRV9NRURJQV9TVFJFQU1fU1JDKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKE1FRElBX1NP
VVJDRSkKKyAgICAgICAgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIobnVsbHB0ciwgIndlYmtpdG1lZGlh
c3JjIiwgR1NUX1JBTktfUFJJTUFSWSArIDEwMCwgV0VCS0lUX1RZUEVfTUVESUFfU1JDKTsKKyNl
bmRpZgorCisjaWYgRU5BQkxFKFZJREVPKQorICAgICAgICBnc3RfZWxlbWVudF9yZWdpc3Rlcigw
LCAid2Via2l0d2Vic3JjIiwgR1NUX1JBTktfUFJJTUFSWSArIDEwMCwgV0VCS0lUX1RZUEVfV0VC
X1NSQyk7CisjZW5kaWYKKyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogdW5zaWduZWQg
Z2V0R3N0UGxheUZsYWcoY29uc3QgY2hhciogbmljaykKIHsKICAgICBzdGF0aWMgR0ZsYWdzQ2xh
c3MqIGZsYWdzQ2xhc3MgPSBzdGF0aWNfY2FzdDxHRmxhZ3NDbGFzcyo+KGdfdHlwZV9jbGFzc19y
ZWYoZ190eXBlX2Zyb21fbmFtZSgiR3N0UGxheUZsYWdzIikpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21t
b24uaAppbmRleCBmNWM5OTY1NDUyMmM3ODNmZDM4NTViY2QxM2Q4N2VjMzFmMzg0YzA0Li4xMTBi
NmVlM2I5M2MzYzVkYThmNTk2Y2QwOWEwZDg0NWQxZDJlMDRhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNv
bW1vbi5oCkBAIC02OCw2ICs2OCw3IEBAIGJvb2wgZG9DYXBzSGF2ZVR5cGUoY29uc3QgR3N0Q2Fw
cyosIGNvbnN0IGNoYXIqKTsKIGJvb2wgYXJlRW5jcnlwdGVkQ2Fwcyhjb25zdCBHc3RDYXBzKik7
CiBWZWN0b3I8U3RyaW5nPiBleHRyYWN0R1N0cmVhbWVyT3B0aW9uc0Zyb21Db21tYW5kTGluZSgp
OwogYm9vbCBpbml0aWFsaXplR1N0cmVhbWVyKHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+
JiYgPSBzdGQ6Om51bGxvcHQpOworYm9vbCBpbml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJX
ZWJLaXRFbGVtZW50cygpOwogdW5zaWduZWQgZ2V0R3N0UGxheUZsYWcoY29uc3QgY2hhciogbmlj
ayk7CiB1aW50NjRfdCB0b0dzdFVuc2lnbmVkNjRUaW1lKGNvbnN0IE1lZGlhVGltZSYpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IDEx
NTcwZGRjMGQ5ODc0NzJkZDZhOGQ3M2E3ZTFkZGFhMDkyZjYyMmYuLjA3NDA5NmQwMTg5OWY4ZjA5
MWFmMjFkNGEzYjc3YjU4ZjI5MDM1NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0xMTMsNiArMTEzLDcgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnNldEF1ZGlvU3RyZWFtUHJvcGVydGllcyhHT2JqZWN0KiBvYmpl
Y3QpCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWdpc3Rlck1lZGlhRW5n
aW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKIHsKKyAgICBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlOjppbml0aWFsaXplRGVidWdDYXRlZ29yeSgpOwogICAgIGlmIChp
c0F2YWlsYWJsZSgpKSB7CiAgICAgICAgIHJlZ2lzdHJhcihbXShNZWRpYVBsYXllciogcGxheWVy
KSB7IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcj4o
cGxheWVyKTsgfSwKICAgICAgICAgICAgIGdldFN1cHBvcnRlZFR5cGVzLCBzdXBwb3J0c1R5cGUs
IG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIHN1cHBvcnRzS2V5U3lzdGVtKTsKQEAgLTEyMSw3
ICsxMjIsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVnaXN0ZXJNZWRp
YUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhciByZWdpcwogCiBib29sIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6aXNBdmFpbGFibGUoKQogewotICAgIGlmICghTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZTo6aW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0RWxl
bWVudHMoKSkKKyAgICBpZiAoIWluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVs
ZW1lbnRzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEdSZWZQdHI8R3N0RWxlbWVu
dEZhY3Rvcnk+IGZhY3RvcnkgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZmFjdG9yeV9maW5kKCJw
bGF5YmluIikpOwpAQCAtMjU4LDkgKzI1OSw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpsb2FkRnVsbChjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgZ2NoYXIqCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2U6OmluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKCkp
Ci0gICAgICAgIHJldHVybjsKLQogICAgIFVSTCB1cmwoVVJMKCksIHVybFN0cmluZyk7CiAgICAg
aWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjIxNCw3ICsy
MjEyLDcgQEAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+
JiBtaW1lVHlwZVNldCgpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3Ry
aW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBtaW1lVHlwZXMgPSBbXSgpCiAgICAgewot
ICAgICAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjppbml0aWFsaXplR1N0cmVh
bWVyQW5kUmVnaXN0ZXJXZWJLaXRFbGVtZW50cygpOworICAgICAgICBpbml0aWFsaXplR1N0cmVh
bWVyQW5kUmVnaXN0ZXJXZWJLaXRFbGVtZW50cygpOwogICAgICAgICBIYXNoU2V0PFN0cmluZywg
QVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBzZXQ7CiAKICAgICAgICAgR0xpc3QqIGF1ZGlvRGVj
b2RlckZhY3RvcmllcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NU
X0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVf
TUVESUFfQVVESU8sIEdTVF9SQU5LX01BUkdJTkFMKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcAppbmRleCAxYjllNGEyYzFiNmVkNDEy
NWRmZWI5NzY1YzA1NGM2ZDUwYThkNjRkLi4wN2QyOTc3N2ZiMjQ2NzQ5NGUwMTc4ZWIzZjRkMmYy
YTg4ZjgzMTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2UuY3BwCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIu
aCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlZpZGVvU2lua0dTdHJl
YW1lci5oIgotI2luY2x1ZGUgIldlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5oIgogI2luY2x1ZGUg
PHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC01MSwxNSArNTAsNiBAQAogI2lu
Y2x1ZGUgIkNETUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViS2l0Q2xlYXJLZXlEZWNy
eXB0b3JHU3RyZWFtZXIuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLSNp
bmNsdWRlICJXZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgotI2VuZGlmCi0KLSNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKSAmJiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMCwgMCkKLSNpbmNsdWRl
ICJHU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5oIgogI2VuZGlmCiAKICNpZiBVU0UoR1NUUkVB
TUVSX0dMKQpAQCAtMTQyLDMzICsxMzIsNiBAQCBHU1RfREVCVUdfQ0FURUdPUlkod2Via2l0X21l
ZGlhX3BsYXllcl9kZWJ1Zyk7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2Ug
c3RkOwogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmluaXRpYWxpemVH
U3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKCkKLXsKLSAgICBpZiAoIWluaXRpYWxp
emVHU3RyZWFtZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3RhdGljIHN0ZDo6
b25jZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7Ci0g
ICAgICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9tZWRpYV9wbGF5ZXJfZGVidWcs
ICJ3ZWJraXRtZWRpYXBsYXllciIsIDAsICJXZWJLaXQgbWVkaWEgcGxheWVyIik7Ci0jaWYgRU5B
QkxFKEVOQ1JZUFRFRF9NRURJQSkKLSAgICAgICAgaWYgKHdlYmtpdEdzdENoZWNrVmVyc2lvbigx
LCA2LCAxKSkKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X3JlZ2lzdGVyKG51bGxwdHIsICJ3ZWJr
aXRjbGVhcmtleSIsIEdTVF9SQU5LX1BSSU1BUlkgKyAxMDAsIFdFQktJVF9UWVBFX01FRElBX0NL
X0RFQ1JZUFQpOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBHU1RfQ0hF
Q0tfVkVSU0lPTigxLCAxMCwgMCkKLSAgICAgICAgaWYgKHdlYmtpdEdzdENoZWNrVmVyc2lvbigx
LCAxMCwgMCkpCi0gICAgICAgICAgICBnc3RfZWxlbWVudF9yZWdpc3RlcihudWxscHRyLCAibWVk
aWFzdHJlYW1zcmMiLCBHU1RfUkFOS19QUklNQVJZLCBXRUJLSVRfVFlQRV9NRURJQV9TVFJFQU1f
U1JDKTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLSAgICAgICAgZ3N0X2Vs
ZW1lbnRfcmVnaXN0ZXIobnVsbHB0ciwgIndlYmtpdG1lZGlhc3JjIiwgR1NUX1JBTktfUFJJTUFS
WSArIDEwMCwgV0VCS0lUX1RZUEVfTUVESUFfU1JDKTsKLSNlbmRpZgotCi0gICAgICAgIGdzdF9l
bGVtZW50X3JlZ2lzdGVyKDAsICJ3ZWJraXR3ZWJzcmMiLCBHU1RfUkFOS19QUklNQVJZICsgMTAw
LCBXRUJLSVRfVFlQRV9XRUJfU1JDKTsKLSAgICB9KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQog
c3RhdGljIGludCBncmVhdGVzdENvbW1vbkRpdmlzb3IoaW50IGEsIGludCBiKQogewogICAgIHdo
aWxlIChiKSB7CkBAIC0yNzcsNiArMjQwLDExIEBAIHByaXZhdGU6CiB9OwogI2VuZGlmCiAKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6aW5pdGlhbGl6ZURlYnVnQ2F0ZWdv
cnkoKQoreworICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9tZWRpYV9wbGF5ZXJf
ZGVidWcsICJ3ZWJraXRtZWRpYXBsYXllciIsIDAsICJXZWJLaXQgbWVkaWEgcGxheWVyIik7Cit9
CisKIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2UoTWVkaWFQbGF5ZXIqIHBsYXllcikKICAgICA6IG1fbm90aWZpZXIoTWFpblRo
cmVhZE5vdGlmaWVyPE1haW5UaHJlYWROb3RpZmljYXRpb24+OjpjcmVhdGUoKSkKICAgICAsIG1f
cGxheWVyKHBsYXllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZS5oCmluZGV4IDRmYTE1NWE4MzM3Yzc5ZTIyN2I1OGVkZWFmZmZmM2Y4YzJiNDEz
NTMuLjcyNjdhZjE4Y2U2NDQ3MTgzZDk3MmRlNTgzMDQ3OTQxOWY3ODRjMjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaApAQCAtNzYsNiAr
NzYsOCBAQCBjbGFzcyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlIDogcHVibGljIE1l
ZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSwgcHVibAogewogCiBwdWJsaWM6CisgICAgc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZURlYnVnQ2F0ZWdvcnkoKTsKKwogICAgIHZpcnR1YWwgfk1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UoKTsKIAogICAgIEZsb2F0U2l6ZSBuYXR1cmFsU2l6ZSgp
IGNvbnN0IG92ZXJyaWRlOwpAQCAtODcsNyArODksNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBlbnN1
cmVHc3RHTENvbnRleHQoKTsKICAgICBHc3RDb250ZXh0KiByZXF1ZXN0R0xDb250ZXh0KGNvbnN0
IGNoYXIqIGNvbnRleHRUeXBlKTsKICNlbmRpZgotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVH
U3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKCk7CiAgICAgYm9vbCBzdXBwb3J0c011
dGluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICAgICB2b2lkIHNldE11dGVk
KGJvb2wpIG92ZXJyaWRlOwogICAgIGJvb2wgbXV0ZWQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNwcAppbmRleCA0
ZjFmOGFiMDM4Yjc4MzNiZWFlMjg5MGEyY2FlNDU1OThkZmIyYTc2Li4yY2MzZDFhN2UwOTA2Njlk
YzM3M2NjNTI0ODM4YzM0ZmI1NTg2ZjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21z
ZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwCkBAIC03OSw2ICs3OSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6
OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQogewor
ICAgIGluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKCk7CiAgICAg
R1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X21zZV9kZWJ1ZywgIndlYmtpdG1zZSIsIDAs
ICJXZWJLaXQgTVNFIG1lZGlhIHBsYXllciIpOwogICAgIGlmIChpc0F2YWlsYWJsZSgpKSB7CiAg
ICAgICAgIHJlZ2lzdHJhcihbXShNZWRpYVBsYXllciogcGxheWVyKSB7IHJldHVybiBzdGQ6Om1h
a2VfdW5pcXVlPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRT4ocGxheWVyKTsgfSwKQEAg
LTExNywxMCArMTE4LDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Omxv
YWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLQot
ICAgIGlmIChVTkxJS0VMWSghTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6aW5pdGlh
bGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0RWxlbWVudHMoKSkpCi0gICAgICAgIHJldHVy
bjsKLQogICAgIGlmICghbV9wbGF5YmFja1BpcGVsaW5lKQogICAgICAgICBtX3BsYXliYWNrUGlw
ZWxpbmUgPSBQbGF5YmFja1BpcGVsaW5lOjpjcmVhdGUoKTsKIApAQCAtNjg5LDcgKzY4Niw3IEBA
IHN0YXRpYyBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgbWltZVR5
cGVDYWNoZSgpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nLCBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBjYWNoZSA9IFtdKCkKICAgICB7Ci0gICAgICAgIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdp
c3RlcldlYktpdEVsZW1lbnRzKCk7CisgICAgICAgIGluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdp
c3RlcldlYktpdEVsZW1lbnRzKCk7CiAgICAgICAgIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJ
bnNlbnNpdGl2ZUhhc2g+IHNldDsKICAgICAgICAgY29uc3QgY2hhciogbWltZVR5cGVzW10gPSB7
CiAgICAgICAgICAgICAidmlkZW8vbXA0IiwKQEAgLTczMyw3ICs3MzAsNyBAQCBjb25zdCBzdGF0
aWMgSGFzaFNldDxBdG9taWNTdHJpbmc+JiBjb2RlY1NldCgpCiB7CiAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEhhc2hTZXQ8QXRvbWljU3RyaW5nPj4gY29kZWNUeXBlcyA9IFtdKCkKICAgICB7
Ci0gICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmluaXRpYWxpemVHU3Ry
ZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKCk7CisgICAgICAgIGluaXRpYWxpemVHU3Ry
ZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKCk7CiAgICAgICAgIEhhc2hTZXQ8QXRvbWlj
U3RyaW5nPiBzZXQ7CiAKICAgICAgICAgR0xpc3QqIGF1ZGlvRGVjb2RlckZhY3RvcmllcyA9IGdz
dF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFDVE9SWV9U
WVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQVVESU8sIEdTVF9S
QU5LX01BUkdJTkFMKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>353714</attachid>
            <date>2018-11-02 10:46:23 -0700</date>
            <delta_ts>2018-11-05 02:01:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191191-20181102174622.patch</filename>
            <type>text/plain</type>
            <size>59823</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3NzQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmRkZTE2NjJjZjEwYzk5
Mzc1MDljZmQwNzhjNTJkYzRjODU2YjAxYi4uMWE3OTkyZTIwZDQ5MWVhZDY5ZGVlZDFjYjY4ZjE2
NDE1OGMzMWVhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDE4LTExLTAyICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBEZWNvZGluZyBtZWRpYS1jYXBhYmlsaXRpZXMgY29uZmlndXJhdGlvbiBpbml0aWFsIHN1cHBv
cnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTE5
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggZW5hYmxlcyBiYXNpYyBwbGF0Zm9ybSBwcm9iaW5nIGZvciBHU3RyZWFtZXIgZGVjb2Rl
cnMsCisgICAgICAgIG9wdGlvbmFsbHkgdXNpbmcgSGFyZHdhcmUgZGVjb2RpbmcgY2FwYWJpbGl0
aWVzLiBUaGUgcHJldmlvdXMgY29kZQorICAgICAgICBmb3IgZGVjb2RlcnMvZGVtdXhlcnMgcHJv
YmluZyBwYXJ0aWFsbHkgZHVwbGljYXRlZCBiZXR3ZWVuIHRoZSBNU0UKKyAgICAgICAgcGxheWVy
IGFuZCBpdHMgcGFyZW50IGNsYXNzIHdhcyBtb3ZlZCB0byBhIG5ldyBtb2R1bGUgY2FsbGVkCisg
ICAgICAgIEdzdFJlZ2lzdHJ5U2Nhbm5lci4gVGhlcmUgaXMgb25lIGluc3RhbmNlIG9mIGl0IGZv
ciB0aGUgTVNFIHBsYXllcgorICAgICAgICBhbmQgb25lIGZvciB0aGUgcGFyZW50IGNsYXNzLgor
CisgICAgICAgIFRoZSBzY2FubmVyIGNhbiBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBH
c3RFbGVtZW50IEhhcmR3YXJlCisgICAgICAgIG1ldGFkYXRhIGNsYXNzaWZpZXIgaW4gZGVjb2Rl
cnMgYW5kIHRodXMgYWR2aXNlIHRoZQorICAgICAgICBNZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25G
YWN0b3J5R1N0cmVhbWVyIHRoYXQgaGFyZHdhcmUgZGVjb2RpbmcgaXMKKyAgICAgICAgc3VwcG9y
dGVkIG9yIG5vdC4gVGhpcyBpcyBvbmx5IGEgZmlyc3Qgc3RlcCB0aG91Z2guIFRoZSBzY2FubmVy
CisgICAgICAgIHNob3VsZCBhbHNvIHByb2JhYmx5IGF0dGVtcHQgYSBOVUxMLT5SRUFEWSB0cmFu
c2l0aW9uIG9uIGRlY29kZXJzCisgICAgICAgIHRvIHZhbGlkYXRlIHNwZWNpZmljIGlucHV0IGNh
cHMgYXJlIHN1cHBvcnRlZC4gQXMgdGhpcyBtaWdodAorICAgICAgICByZXF1aXJlIGNoYW5nZXMg
aW4gR1N0cmVhbWVyLCB0aGlzIHBhcnQgb2YgdGhlIHBhdGNoIHdhc24ndAorICAgICAgICBpbmNs
dWRlZC4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIGNvdmVyZWQgYnkgdGhlIGV4aXN0aW5nIG1l
ZGlhIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlOiBOZXcgZmls
ZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOiBBZGQgc3Vw
cG9ydCBmb3IgY29udmVydGluZworICAgICAgICBTdXBwb3J0c1R5cGUgZW51bSB0byBzdHJpbmcu
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaDogRGl0dG8uCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJFbnVtcy5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcDogTW92ZQorICAgICAg
ICBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUgdG8gR3N0UmVnaXN0cnlTY2FubmVy
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24u
aDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dzdFJlZ2lz
dHJ5U2Nhbm5lci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2Fu
bmVyOjpzaW5nbGV0b24pOgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjpH
c3RSZWdpc3RyeVNjYW5uZXIpOiBJbml0aWFsaXplCisgICAgICAgIHN1cHBvcnRlZCBtaW1lLXR5
cGVzIGFuZCBjb2RlY3MgZnJvbSB0aGUgR1N0cmVhbWVyIHJlZ2lzdHJ5LgorICAgICAgICAoV2Vi
Q29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjp+R3N0UmVnaXN0cnlTY2FubmVyKTogRnJlZSB0aGUg
ZWxlbWVudCBmYWN0b3JpZXMuCisgICAgICAgIChXZWJDb3JlOjpHc3RSZWdpc3RyeVNjYW5uZXI6
OmdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZSk6CisgICAgICAgIENoZWNrIHRoZSBp
bnB1dCBjYXBzIGFyZSBzdXBwb3J0ZWQsIG9wdGlvbmFsbHkgdXNpbmcgaGFyZHdhcmUKKyAgICAg
ICAgZGV2aWNlLgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjpmaWxsTWlt
ZVR5cGVTZXRGcm9tQ2Fwc01hcHBpbmcpOgorICAgICAgICBNb3ZlZCBmcm9tIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcnssTVNFfS4KKyAgICAgICAgKFdlYkNvcmU6OkdzdFJlZ2lzdHJ5U2Nh
bm5lcjo6aW5pdGlhbGl6ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlT
Y2FubmVyOjpzdXBwb3J0c0NvZGVjIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpH
c3RSZWdpc3RyeVNjYW5uZXI6OnN1cHBvcnRzQWxsQ29kZWNzIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpHc3RSZWdpc3RyeVNjYW5uZXI6OmlzRGVjb2RpbmdTdXBwb3J0ZWQgY29u
c3QpOiBDaGVjaworICAgICAgICB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBpcyBzdXBwb3J0ZWQu
IEZvciBub3cgaGFyZHdhcmUgc3VwcG9ydCBpcworICAgICAgICBjaGVja2VkIGZvciB2aWRlbyBj
b25maWd1cmF0aW9ucyBvbmx5IGFzIGl0IGlzIHF1aXRlIHVuY29tbW9uCisgICAgICAgIGFueXdh
eSB0byBoYXZlIGhhcmR3YXJlLWVuYWJsZWQgYXVkaW8gZGVjb2RlcnMuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dzdFJlZ2lzdHJ5U2Nhbm5lci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdzdFJlZ2lzdHJ5U2Nhbm5lcjo6bWltZVR5cGVTZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjpzdXBwb3J0c0NvbnRhaW5lclR5cGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjpSZWdpc3RyeUxvb2t1
cFJlc3VsdDo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlHU3RyZWFtZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU1lZGlhUGxheWVyRGVjb2RpbmdDb25m
aWd1cmF0aW9uR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeUdTdHJlYW1lci5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmNwcDoKKyAgICAgICAgUmVseSBvbiBuZXcgR3N0UmVnaXN0cnlTY2FubmVyIGFuZCBh
ZGQgc29tZSBkZWJ1Z2dpbmcgbWFjcm9zLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpnZXRTdXBwb3J0ZWRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzVHlwZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHA6IERpdHRvLiBB
bHNvCisgICAgICAgIHBsdWcgcXRkZW11eCBmb3IgQUFDIGNvbnRhaW5lcnMsIHRoaXMgaXMgYW4g
ZXhwbGljaXQgY29uc2VxdWVuY2UKKyAgICAgICAgb2YgZmluZXItZ3JhaW5lZCBjb2RlY3MgcHJv
YmluZy4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpBcHBlbmRQaXBlbGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6cGFyc2VEZW11eGVyU3JjUGFkQ2Fw
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Hc3RSZWdpc3Ry
eVNjYW5uZXJNU0UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdzdFJlZ2lzdHJ5U2Nh
bm5lck1TRTo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdzdFJlZ2lzdHJ5U2Nhbm5l
ck1TRTo6R3N0UmVnaXN0cnlTY2FubmVyTVNFKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvbXNlL0dzdFJlZ2lzdHJ5U2Nhbm5lck1TRS5oOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRS5jcHA6CisgICAgICAgIFJlbHkgb24gbmV3IEdzdFJlZ2lzdHJ5U2Nhbm5lciBhbmQg
YWRkIHNvbWUgZGVidWdnaW5nIG1hY3Jvcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzdXBwb3J0c1R5cGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFLmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFF
bmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmYWN0b3Jp
ZXMpOiBHU3RyZWFtZXIgc3VwcG9ydC4KKwogMjAxOC0xMS0wMiAgUGhpbGlwcGUgTm9ybWFuZCAg
PHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl0gTW92ZSBlbGVtZW50
cyByZWdpc3RyYXRpb24gdG8gR1N0cmVhbWVyQ29tbW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9H
U3RyZWFtZXIuY21ha2UKaW5kZXggZDlhMWZkYjMwYzQyMGYwOTgxYmZlZWY0ZGNkZjRjOTZhZmRk
YTI1ZC4uYmEyNTdhZGU2OGY4ZGZkYmEwNTQ1ZDFiMTJhOTZmMmQyZTg1NWY1OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQpAQCAtMTAsNyArMTAsOSBAQCBpZiAoRU5B
QkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8pCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR3N0QWxsb2NhdG9yRmFzdE1hbGxvYy5jcHAKKyAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dzdFJlZ2lzdHJ5U2Nhbm5lci5jcHAKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuY3Bw
CisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYUVuZ2luZUNvbmZpZ3Vy
YXRpb25GYWN0b3J5R1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmNw
cApAQCAtMjYsNiArMjgsNyBAQCBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8p
CiAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGlu
ZS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9HU3RyZWFtZXJN
ZWRpYURlc2NyaXB0aW9uLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
bXNlL0dzdFJlZ2lzdHJ5U2Nhbm5lck1TRS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFt
ZXJNU0UuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFT
b3VyY2VHU3RyZWFtZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9NZWRpYVBsYXllci5jcHAKaW5kZXggZTdlOTA1MmI4MGQxMzdjNmI3ZGViMDRjNWNkZTBhYTYx
ZTMxOTU2Zi4uMTgwZmVjODc2MGFhYmY1ZDUyODJlMTNmMTAxYmY0Mjg4ZmQzZjU4ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcApAQCAt
MTYwMyw2ICsxNjAzLDIwIEBAIFN0cmluZyBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhNZWRp
YVBsYXllckVudW1zOjpQcmVsb2FkIGVudW1lcmF0aW9uVmFsdWUpCiAgICAgcmV0dXJuIHZhbHVl
c1tzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXTsKIH0KIAorU3RyaW5nIGNv
bnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBl
bnVtZXJhdGlvblZhbHVlKQoreworICAgIHN0YXRpYyBjb25zdCBOZXZlckRlc3Ryb3llZDxTdHJp
bmc+IHZhbHVlc1tdID0geworICAgICAgICBNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiSXNOb3RT
dXBwb3J0ZWQiKSwKKyAgICAgICAgTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIklzU3VwcG9ydGVk
IiksCisgICAgICAgIE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJNYXlCZVN1cHBvcnRlZCIpLAor
ICAgIH07CisgICAgc3RhdGljX2Fzc2VydCghc3RhdGljX2Nhc3Q8c2l6ZV90PihNZWRpYVBsYXll
ckVudW1zOjpJc05vdFN1cHBvcnRlZCksICJNZWRpYVBsYXllckVudW1zOjpJc05vdFN1cHBvcnRl
ZCBpcyBub3QgMCBhcyBleHBlY3RlZCIpOworICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8
c2l6ZV90PihNZWRpYVBsYXllckVudW1zOjpJc1N1cHBvcnRlZCkgPT0gMSwgIk1lZGlhUGxheWVy
RW51bXM6OklzU3VwcG9ydGVkIGlzIG5vdCAxIGFzIGV4cGVjdGVkIik7CisgICAgc3RhdGljX2Fz
c2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KE1lZGlhUGxheWVyRW51bXM6Ok1heUJlU3VwcG9ydGVk
KSA9PSAyLCAiTWVkaWFQbGF5ZXJFbnVtczo6TWF5QmVTdXBwb3J0ZWQgaXMgbm90IDIgYXMgZXhw
ZWN0ZWQiKTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVl
KSA8IFdURl9BUlJBWV9MRU5HVEgodmFsdWVzKSk7CisgICAgcmV0dXJuIHZhbHVlc1tzdGF0aWNf
Y2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXTsKK30KKwogfQogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCmluZGV4IDAxZGQ5
NjVlOWE2ZDZjNWZmZDI2NzlhMzFmNWUxYzUwODUyNjgzYTMuLmRhMjEzMGYwMTA0YTNlZmFiNmNj
MzU5OWNmNzVjNTg5NTc2M2FmZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuaApAQCAtMjUyLDggKzI1Miw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IGludmFsaWRhdGUoKTsKIAogICAgIC8vIE1lZGlhIGVuZ2luZSBzdXBwb3J0LgotICAgIGVudW0g
U3VwcG9ydHNUeXBlIHsgSXNOb3RTdXBwb3J0ZWQsIElzU3VwcG9ydGVkLCBNYXlCZVN1cHBvcnRl
ZCB9OwotICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShj
b25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJik7CisgICAgdXNpbmcgTWVkaWFQbGF5
ZXJFbnVtczo6U3VwcG9ydHNUeXBlOworICAgIHN0YXRpYyBTdXBwb3J0c1R5cGUgc3VwcG9ydHNU
eXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmKTsKICAgICBzdGF0aWMgdm9p
ZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVI
YXNoPiYpOwogICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CiAgICAgc3RhdGljIEhhc2hT
ZXQ8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4gb3JpZ2luc0luTWVkaWFDYWNoZShjb25zdCBTdHJp
bmcmIHBhdGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5ZXJFbnVtcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXJFbnVtcy5oCmluZGV4IDA2ZjBjY2QyOGQ2YWI5ZjQzZjYxYmVmMjdlYjFmMzBiZGU2
MmRkNDYuLjk1MGUwZWQyODdlYjMyMWE0OWE1NDIzZTYzMTMxYWEwOTI3MGNiNjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyRW51bXMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllckVudW1zLmgK
QEAgLTM2LDYgKzM2LDcgQEAgcHVibGljOgogICAgIGVudW0gTW92aWVMb2FkVHlwZSB7IFVua25v
d24sIERvd25sb2FkLCBTdG9yZWRTdHJlYW0sIExpdmVTdHJlYW0gfTsKICAgICBlbnVtIFByZWxv
YWQgeyBOb25lLCBNZXRhRGF0YSwgQXV0byB9OwogICAgIGVudW0gVmlkZW9HcmF2aXR5IHsgVmlk
ZW9HcmF2aXR5UmVzaXplLCBWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QsIFZpZGVvR3Jhdml0eVJl
c2l6ZUFzcGVjdEZpbGwgfTsKKyAgICBlbnVtIFN1cHBvcnRzVHlwZSB7IElzTm90U3VwcG9ydGVk
LCBJc1N1cHBvcnRlZCwgTWF5QmVTdXBwb3J0ZWQgfTsKICAgICBlbnVtIHsKICAgICAgICAgVmlk
ZW9GdWxsc2NyZWVuTW9kZU5vbmUgPSAwLAogICAgICAgICBWaWRlb0Z1bGxzY3JlZW5Nb2RlU3Rh
bmRhcmQgPSAxIDw8IDAsCkBAIC00Nyw2ICs0OCw3IEBAIHB1YmxpYzoKIFdURjo6U3RyaW5nIGNv
bnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKE1lZGlhUGxheWVyRW51bXM6OlJlYWR5U3RhdGUpOwog
V1RGOjpTdHJpbmcgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoTWVkaWFQbGF5ZXJFbnVtczo6
TmV0d29ya1N0YXRlKTsKIFdURjo6U3RyaW5nIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKE1l
ZGlhUGxheWVyRW51bXM6OlByZWxvYWQpOworV1RGOjpTdHJpbmcgY29udmVydEVudW1lcmF0aW9u
VG9TdHJpbmcoTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCmluZGV4IDUyNjQ5YmJhN2Fi
OGM0ZDlhYjc1MzlhZTMyOTk2NDgzODM4MWZjOTkuLmM2OGFhOTZhMjIzYzkyNTg3MzYyYTc4YzEw
ZGQ3NGM0OTE4M2QxZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCkBAIC0zMDEsMTYg
KzMwMSw2IEBAIHVpbnQ2NF90IHRvR3N0VW5zaWduZWQ2NFRpbWUoY29uc3QgTWVkaWFUaW1lJiBt
ZWRpYVRpbWUpCiAgICAgcmV0dXJuIHRpbWUudGltZVZhbHVlKCk7CiB9CiAKLWJvb2wgZ3N0UmVn
aXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKEdMaXN0KiBlbGVtZW50RmFjdG9yaWVzLCBjb25z
dCBjaGFyKiBjYXBzU3RyaW5nKQotewotICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0
R1JlZihnc3RfY2Fwc19mcm9tX3N0cmluZyhjYXBzU3RyaW5nKSk7Ci0gICAgR0xpc3QqIGNhbmRp
ZGF0ZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZmlsdGVyKGVsZW1lbnRGYWN0b3JpZXMs
IGNhcHMuZ2V0KCksIEdTVF9QQURfU0lOSywgZmFsc2UpOwotICAgIGJvb2wgcmVzdWx0ID0gY2Fu
ZGlkYXRlczsKLQotICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUoY2FuZGlkYXRlcyk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogc3RhdGljIHZvaWQgc2ltcGxlQnVzTWVzc2FnZUNh
bGxiYWNrKEdzdEJ1cyosIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIEdzdEJpbiogcGlwZWxpbmUpCiB7
CiAgICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVy
Q29tbW9uLmgKaW5kZXggMTEwYjZlZTNiOTNjM2M1ZGE4ZjU5NmNkMDlhMGQ4NDVkMWQyZTA0YS4u
NzE2MDViZjMwMjlkNzdjNTdiNGJhOGE3OGNjZmQxM2QzNDczZTQ4MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFt
ZXJDb21tb24uaApAQCAtMTE3LDcgKzExNyw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzVmFs
aWQgeyBmYWxzZSB9OwogfTsKIAotYm9vbCBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5
cGUoR0xpc3QqIGVsZW1lbnRGYWN0b3JpZXMsIGNvbnN0IGNoYXIqIGNhcHNTdHJpbmcpOwogdm9p
ZCBjb25uZWN0U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKEdzdEVsZW1lbnQgKnBpcGVsaW5lKTsK
IHZvaWQgZGlzY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhHc3RFbGVtZW50ICpwaXBl
bGluZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9Hc3RSZWdpc3RyeVNjYW5uZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dzdFJlZ2lzdHJ5U2Nhbm5lci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTE3
YWMyMDVjZjc1NDQxNzFlYjBlNjgyYjc4M2FhMjM1Y2NjOGVkYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9Hc3RSZWdpc3RyeVNj
YW5uZXIuY3BwCkBAIC0wLDAgKzEsMzMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEln
YWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFp
bnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSKQorI2luY2x1
ZGUgIkdzdFJlZ2lzdHJ5U2Nhbm5lci5oIgorCisjaW5jbHVkZSAiQ29udGVudFR5cGUuaCIKKyNp
bmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8Zm5tYXRjaC5oPgorI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dTVF9ERUJV
R19DQVRFR09SWV9TVEFUSUMod2Via2l0X21lZGlhX2dzdF9yZWdpc3RyeV9zY2FubmVyX2RlYnVn
KTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9tZWRpYV9nc3RfcmVnaXN0cnlfc2Nh
bm5lcl9kZWJ1ZworCitHc3RSZWdpc3RyeVNjYW5uZXImIEdzdFJlZ2lzdHJ5U2Nhbm5lcjo6c2lu
Z2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8R3N0UmVnaXN0cnlTY2FubmVy
PiBzaGFyZWRJbnN0YW5jZTsKKyAgICByZXR1cm4gc2hhcmVkSW5zdGFuY2U7Cit9CisKK0dzdFJl
Z2lzdHJ5U2Nhbm5lcjo6R3N0UmVnaXN0cnlTY2FubmVyKGJvb2wgaXNNZWRpYVNvdXJjZSkKKyAg
ICA6IG1faXNNZWRpYVNvdXJjZShpc01lZGlhU291cmNlKQoreworICAgIEdTVF9ERUJVR19DQVRF
R09SWV9JTklUKHdlYmtpdF9tZWRpYV9nc3RfcmVnaXN0cnlfc2Nhbm5lcl9kZWJ1ZywgIndlYmtp
dHJlZ2lzdHJ5c2Nhbm5lciIsIDAsICJXZWJLaXQgR1N0cmVhbWVyIHJlZ2lzdHJ5IHNjYW5uZXIi
KTsKKyAgICBtX2F1ZGlvRGVjb2RlckZhY3RvcmllcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlz
dF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxF
TUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQVVESU8sIEdTVF9SQU5LX01BUkdJTkFMKTsKKyAgICBt
X2F1ZGlvUGFyc2VyRmFjdG9yaWVzID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2dldF9lbGVt
ZW50cyhHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfUEFSU0VSIHwgR1NUX0VMRU1FTlRfRkFDVE9S
WV9UWVBFX01FRElBX0FVRElPLCBHU1RfUkFOS19OT05FKTsKKyAgICBtX3ZpZGVvRGVjb2RlckZh
Y3RvcmllcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1F
TlRfRkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFf
VklERU8sIEdTVF9SQU5LX01BUkdJTkFMKTsKKyAgICBtX3ZpZGVvUGFyc2VyRmFjdG9yaWVzID0g
Z3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2dldF9lbGVtZW50cyhHU1RfRUxFTUVOVF9GQUNUT1JZ
X1RZUEVfUEFSU0VSIHwgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX1ZJREVPLCBHU1Rf
UkFOS19NQVJHSU5BTCk7CisgICAgbV9kZW11eGVyRmFjdG9yaWVzID0gZ3N0X2VsZW1lbnRfZmFj
dG9yeV9saXN0X2dldF9lbGVtZW50cyhHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVNVVhFUiwg
R1NUX1JBTktfTUFSR0lOQUwpOworCisgICAgaW5pdGlhbGl6ZSgpOworI2lmbmRlZiBHU1RfRElT
QUJMRV9HU1RfREVCVUcKKyAgICBHU1RfREVCVUcoIiVzIHJlZ2lzdHJ5IHNjYW5uZXIgaW5pdGlh
bGl6ZWQiLCBtX2lzTWVkaWFTb3VyY2UgPyAiTVNFIjoibm9uLU1TRSIpOworICAgIGZvciAoYXV0
byYgbWltZVR5cGUgOiBtX21pbWVUeXBlU2V0KQorICAgICAgICBHU1RfREVCVUcoIk1pbWUtdHlw
ZSByZWdpc3RlcmVkOiAlcyIsIG1pbWVUeXBlLnV0ZjgoKS5kYXRhKCkpOworICAgIGZvciAoYXV0
byYgaXRlbSA6IG1fY29kZWNNYXApCisgICAgICAgIEdTVF9ERUJVRygiJXMgY29kZWMgcGF0dGVy
biByZWdpc3RlcmVkOiAlcyIsIGl0ZW0udmFsdWUgPyAiSGFyZHdhcmUiOiJTb2Z0d2FyZSIsIGl0
ZW0ua2V5LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCit9CisKK0dzdFJlZ2lzdHJ5
U2Nhbm5lcjo6fkdzdFJlZ2lzdHJ5U2Nhbm5lcigpCit7CisgICAgZ3N0X3BsdWdpbl9mZWF0dXJl
X2xpc3RfZnJlZShtX2F1ZGlvRGVjb2RlckZhY3Rvcmllcyk7CisgICAgZ3N0X3BsdWdpbl9mZWF0
dXJlX2xpc3RfZnJlZShtX2F1ZGlvUGFyc2VyRmFjdG9yaWVzKTsKKyAgICBnc3RfcGx1Z2luX2Zl
YXR1cmVfbGlzdF9mcmVlKG1fdmlkZW9EZWNvZGVyRmFjdG9yaWVzKTsKKyAgICBnc3RfcGx1Z2lu
X2ZlYXR1cmVfbGlzdF9mcmVlKG1fdmlkZW9QYXJzZXJGYWN0b3JpZXMpOworICAgIGdzdF9wbHVn
aW5fZmVhdHVyZV9saXN0X2ZyZWUobV9kZW11eGVyRmFjdG9yaWVzKTsKK30KKworR3N0UmVnaXN0
cnlTY2FubmVyOjpSZWdpc3RyeUxvb2t1cFJlc3VsdCBHc3RSZWdpc3RyeVNjYW5uZXI6OmdzdFJl
Z2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShHTGlzdCogZWxlbWVudEZhY3RvcmllcywgY29u
c3QgY2hhciogY2Fwc1N0cmluZywgYm9vbCBjaGVja0hhcmR3YXJlQ2xhc3NpZmllcikKK3sKKyAg
ICBHUmVmUHRyPEdzdENhcHM+IGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfZnJvbV9zdHJpbmco
Y2Fwc1N0cmluZykpOworICAgIEdMaXN0KiBjYW5kaWRhdGVzID0gZ3N0X2VsZW1lbnRfZmFjdG9y
eV9saXN0X2ZpbHRlcihlbGVtZW50RmFjdG9yaWVzLCBjYXBzLmdldCgpLCBHU1RfUEFEX1NJTkss
IGZhbHNlKTsKKyAgICBib29sIHN1cHBvcnRlZCA9IGNhbmRpZGF0ZXM7CisgICAgYm9vbCB1c2lu
Z0hhcmR3YXJlID0gZmFsc2U7CisKKyAgICBpZiAoY2hlY2tIYXJkd2FyZUNsYXNzaWZpZXIpIHsK
KyAgICAgICAgZm9yIChHTGlzdCogZmFjdG9yaWVzID0gY2FuZGlkYXRlczsgZmFjdG9yaWVzICE9
IG51bGxwdHI7IGZhY3RvcmllcyA9IGdfbGlzdF9uZXh0KGZhY3RvcmllcykpIHsKKyAgICAgICAg
ICAgIGF1dG8qIGZhY3RvcnkgPSByZWludGVycHJldF9jYXN0PEdzdEVsZW1lbnRGYWN0b3J5Kj4o
ZmFjdG9yaWVzLT5kYXRhKTsKKyAgICAgICAgICAgIFN0cmluZyBtZXRhZGF0YSA9IGdzdF9lbGVt
ZW50X2ZhY3RvcnlfZ2V0X21ldGFkYXRhKGZhY3RvcnksIEdTVF9FTEVNRU5UX01FVEFEQVRBX0tM
QVNTKTsKKyAgICAgICAgICAgIGF1dG8gY29tcG9uZW50cyA9IG1ldGFkYXRhLnNwbGl0KCcvJyk7
CisgICAgICAgICAgICBpZiAoY29tcG9uZW50cy5jb250YWlucygiSGFyZHdhcmUiKSkgeworICAg
ICAgICAgICAgICAgIHVzaW5nSGFyZHdhcmUgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZ3N0X3BsdWdpbl9mZWF0
dXJlX2xpc3RfZnJlZShjYW5kaWRhdGVzKTsKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVH
CisgICAgY29uc3QgY2hhciogZWxlbWVudFR5cGUgPSAiIjsKKyAgICBpZiAoZWxlbWVudEZhY3Rv
cmllcyA9PSBtX2F1ZGlvUGFyc2VyRmFjdG9yaWVzKQorICAgICAgICBlbGVtZW50VHlwZSA9ICJB
dWRpbyBwYXJzZXIiOworICAgIGVsc2UgaWYgKGVsZW1lbnRGYWN0b3JpZXMgPT0gbV9hdWRpb0Rl
Y29kZXJGYWN0b3JpZXMpCisgICAgICAgIGVsZW1lbnRUeXBlID0gIkF1ZGlvIGRlY29kZXIiOwor
ICAgIGVsc2UgaWYgKGVsZW1lbnRGYWN0b3JpZXMgPT0gbV92aWRlb1BhcnNlckZhY3RvcmllcykK
KyAgICAgICAgZWxlbWVudFR5cGUgPSAiVmlkZW8gcGFyc2VyIjsKKyAgICBlbHNlIGlmIChlbGVt
ZW50RmFjdG9yaWVzID09IG1fdmlkZW9EZWNvZGVyRmFjdG9yaWVzKQorICAgICAgICBlbGVtZW50
VHlwZSA9ICJWaWRlbyBkZWNvZGVyIjsKKyAgICBlbHNlIGlmIChlbGVtZW50RmFjdG9yaWVzID09
IG1fZGVtdXhlckZhY3RvcmllcykKKyAgICAgICAgZWxlbWVudFR5cGUgPSAiRGVtdXhlciI7Cisg
ICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBHU1RfTE9HKCIlcyBs
b29rdXAgcmVzdWx0IGZvciBjYXBzICUiIEdTVF9QVFJfRk9STUFUICIgOiBzdXBwb3J0ZWQ9JXMs
IHVzaW5nSGFyZHdhcmU9JXMiLCBlbGVtZW50VHlwZSwgY2Fwcy5nZXQoKSwgYm9vbEZvclByaW50
aW5nKHN1cHBvcnRlZCksIGJvb2xGb3JQcmludGluZyh1c2luZ0hhcmR3YXJlKSk7CisjZW5kaWYK
KyAgICByZXR1cm4gR3N0UmVnaXN0cnlTY2FubmVyOjpSZWdpc3RyeUxvb2t1cFJlc3VsdCB7IHN1
cHBvcnRlZCwgdXNpbmdIYXJkd2FyZSB9OworfQorCit2b2lkIEdzdFJlZ2lzdHJ5U2Nhbm5lcjo6
ZmlsbE1pbWVUeXBlU2V0RnJvbUNhcHNNYXBwaW5nKFZlY3RvcjxHc3RDYXBzV2ViS2l0TWFwcGlu
Zz4mIG1hcHBpbmcpCit7CisgICAgZm9yIChhdXRvJiBjdXJyZW50IDogbWFwcGluZykgeworICAg
ICAgICBHTGlzdCogZmFjdG9yaWVzOworICAgICAgICBzd2l0Y2ggKGN1cnJlbnQuZWxlbWVudFR5
cGUpIHsKKyAgICAgICAgY2FzZSBEZW11eGVyOgorICAgICAgICAgICAgZmFjdG9yaWVzID0gbV9k
ZW11eGVyRmFjdG9yaWVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXVkaW9E
ZWNvZGVyOgorICAgICAgICAgICAgZmFjdG9yaWVzID0gbV9hdWRpb0RlY29kZXJGYWN0b3JpZXM7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWaWRlb0RlY29kZXI6CisgICAgICAg
ICAgICBmYWN0b3JpZXMgPSBtX3ZpZGVvRGVjb2RlckZhY3RvcmllczsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1l
ZGlhVHlwZShmYWN0b3JpZXMsIGN1cnJlbnQuY2Fwc1N0cmluZykpIHsKKyAgICAgICAgICAgIGlm
ICghY3VycmVudC53ZWJraXRDb2RlY1BhdHRlcm5zLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgIGZvciAoY29uc3QgYXV0byYgcGF0dGVybiA6IGN1cnJlbnQud2Via2l0Q29kZWNQYXR0ZXJu
cykKKyAgICAgICAgICAgICAgICAgICAgbV9jb2RlY01hcC5hZGQocGF0dGVybiwgZmFsc2UpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFjdXJyZW50LndlYmtpdE1pbWVUeXBlcy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG1pbWVUeXBlIDog
Y3VycmVudC53ZWJraXRNaW1lVHlwZXMpCisgICAgICAgICAgICAgICAgICAgIG1fbWltZVR5cGVT
ZXQuYWRkKG1pbWVUeXBlKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1f
bWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZyhjdXJyZW50LmNhcHNTdHJpbmcpKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBHc3RSZWdpc3RyeVNjYW5uZXI6OmluaXRpYWxpemUoKQor
eworICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUobV9hdWRpb0RlY29k
ZXJGYWN0b3JpZXMsICJhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTQiKSkgeworICAgICAg
ICBtX21pbWVUeXBlU2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL2FhYyIpKTsKKyAgICAgICAg
bV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9tcDQiKSk7CisgICAgICAgIG1f
bWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8veC1tNGEiKSk7CisgICAgICAgIG1f
Y29kZWNNYXAuYWRkKEF0b21pY1N0cmluZygibXBlZyIpLCBmYWxzZSk7CisgICAgICAgIG1fY29k
ZWNNYXAuYWRkKEF0b21pY1N0cmluZygibXA0YSoiKSwgZmFsc2UpOworICAgIH0KKworICAgIGF1
dG8gb3B1c1N1cHBvcnRlZCA9IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShtX2F1
ZGlvRGVjb2RlckZhY3RvcmllcywgImF1ZGlvL3gtb3B1cyIpOworICAgIGlmIChvcHVzU3VwcG9y
dGVkICYmICghbV9pc01lZGlhU291cmNlIHx8IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlh
VHlwZShtX2F1ZGlvUGFyc2VyRmFjdG9yaWVzLCAiYXVkaW8veC1vcHVzIikpKSB7CisgICAgICAg
IG1fbWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vb3B1cyIpKTsKKyAgICAgICAg
bV9jb2RlY01hcC5hZGQoQXRvbWljU3RyaW5nKCJvcHVzIiksIGZhbHNlKTsKKyAgICAgICAgbV9j
b2RlY01hcC5hZGQoQXRvbWljU3RyaW5nKCJ4LW9wdXMiKSwgZmFsc2UpOworICAgIH0KKworICAg
IGF1dG8gdm9yYmlzU3VwcG9ydGVkID0gZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBl
KG1fYXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAiYXVkaW8veC12b3JiaXMiKTsKKyAgICBpZiAodm9y
YmlzU3VwcG9ydGVkICYmICghbV9pc01lZGlhU291cmNlIHx8IGdzdFJlZ2lzdHJ5SGFzRWxlbWVu
dEZvck1lZGlhVHlwZShtX2F1ZGlvUGFyc2VyRmFjdG9yaWVzLCAiYXVkaW8veC12b3JiaXMiKSkp
IHsKKyAgICAgICAgbV9jb2RlY01hcC5hZGQoQXRvbWljU3RyaW5nKCJ2b3JiaXMiKSwgZmFsc2Up
OworICAgICAgICBtX2NvZGVjTWFwLmFkZChBdG9taWNTdHJpbmcoIngtdm9yYmlzIiksIGZhbHNl
KTsKKyAgICB9CisKKyAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKG1f
ZGVtdXhlckZhY3RvcmllcywgInZpZGVvL3gtbWF0cm9za2EiKSkgeworICAgICAgICBhdXRvIHZw
OERlY29kZXJBdmFpbGFibGUgPSBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUobV92
aWRlb0RlY29kZXJGYWN0b3JpZXMsICJ2aWRlby94LXZwOCIsIHRydWUpOworICAgICAgICBhdXRv
IHZwOURlY29kZXJBdmFpbGFibGUgPSBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUo
bV92aWRlb0RlY29kZXJGYWN0b3JpZXMsICJ2aWRlby94LXZwOSIsIHRydWUpOworCisgICAgICAg
IGlmICh2cDhEZWNvZGVyQXZhaWxhYmxlIHx8IHZwOURlY29kZXJBdmFpbGFibGUpCisgICAgICAg
ICAgICBtX21pbWVUeXBlU2V0LmFkZChBdG9taWNTdHJpbmcoInZpZGVvL3dlYm0iKSk7CisKKyAg
ICAgICAgaWYgKHZwOERlY29kZXJBdmFpbGFibGUpIHsKKyAgICAgICAgICAgIG1fY29kZWNNYXAu
YWRkKEF0b21pY1N0cmluZygidnA4IiksIHZwOERlY29kZXJBdmFpbGFibGUudXNpbmdIYXJkd2Fy
ZSk7CisgICAgICAgICAgICBtX2NvZGVjTWFwLmFkZChBdG9taWNTdHJpbmcoIngtdnA4IiksIHZw
OERlY29kZXJBdmFpbGFibGUudXNpbmdIYXJkd2FyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHZwOURlY29kZXJBdmFpbGFibGUpIHsKKyAgICAgICAgICAgIG1fY29kZWNNYXAuYWRkKEF0b21p
Y1N0cmluZygidnA5IiksIHZwOURlY29kZXJBdmFpbGFibGUudXNpbmdIYXJkd2FyZSk7CisgICAg
ICAgICAgICBtX2NvZGVjTWFwLmFkZChBdG9taWNTdHJpbmcoIngtdnA5IiksIHZwOURlY29kZXJB
dmFpbGFibGUudXNpbmdIYXJkd2FyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wdXNTdXBw
b3J0ZWQpCisgICAgICAgICAgICBtX21pbWVUeXBlU2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlv
L3dlYm0iKSk7CisgICAgfQorCisgICAgYXV0byBoMjY0RGVjb2RlckF2YWlsYWJsZSA9IGdzdFJl
Z2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShtX3ZpZGVvRGVjb2RlckZhY3RvcmllcywgInZp
ZGVvL3gtaDI2NCwgcHJvZmlsZT0oc3RyaW5nKXsgY29uc3RyYWluZWQtYmFzZWxpbmUsIGJhc2Vs
aW5lLCBoaWdoIH0iLCB0cnVlKTsKKyAgICBpZiAoaDI2NERlY29kZXJBdmFpbGFibGUgJiYgKCFt
X2lzTWVkaWFTb3VyY2UgfHwgZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKG1fdmlk
ZW9QYXJzZXJGYWN0b3JpZXMsICJ2aWRlby94LWgyNjQiKSkpIHsKKyAgICAgICAgbV9taW1lVHlw
ZVNldC5hZGQoQXRvbWljU3RyaW5nKCJ2aWRlby9tcDQiKSk7CisgICAgICAgIG1fbWltZVR5cGVT
ZXQuYWRkKEF0b21pY1N0cmluZygidmlkZW8veC1tNHYiKSk7CisgICAgICAgIG1fY29kZWNNYXAu
YWRkKEF0b21pY1N0cmluZygieC1oMjY0IiksIGgyNjREZWNvZGVyQXZhaWxhYmxlLnVzaW5nSGFy
ZHdhcmUpOworICAgICAgICBtX2NvZGVjTWFwLmFkZChBdG9taWNTdHJpbmcoImF2YyoiKSwgaDI2
NERlY29kZXJBdmFpbGFibGUudXNpbmdIYXJkd2FyZSk7CisgICAgICAgIG1fY29kZWNNYXAuYWRk
KEF0b21pY1N0cmluZygibXA0dioiKSwgaDI2NERlY29kZXJBdmFpbGFibGUudXNpbmdIYXJkd2Fy
ZSk7CisgICAgfQorCisgICAgaWYgKG1faXNNZWRpYVNvdXJjZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gVGhlIG1pbWUtdHlwZXMgaW5pdGlhbGl6ZWQgYmVsb3cgYXJlIG5vdCBzdXBwb3J0
ZWQgYnkgdGhlIE1TRSBiYWNrZW5kLgorCisgICAgVmVjdG9yPEdzdENhcHNXZWJLaXRNYXBwaW5n
PiBtYXBwaW5nID0geworICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8vbWlkaSIsIHsiYXVk
aW8vbWlkaSIsICJhdWRpby9yaWZmLW1pZGkifSwgeyB9fSwKKyAgICAgICAge0F1ZGlvRGVjb2Rl
ciwgImF1ZGlvL3gtYWMzIiwgeyB9LCB7IH19LAorICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVk
aW8veC1kdHMiLCB7IH0sIHsgfX0sCisgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LWVh
YzMiLCB7ImF1ZGlvL3gtYWMzIn0sIHsgfX0sCisgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRp
by94LWZsYWMiLCB7ImF1ZGlvL3gtZmxhYyIsICJhdWRpby9mbGFjIn0sIHsgfX0sCisgICAgICAg
IHtBdWRpb0RlY29kZXIsICJhdWRpby94LXNiYyIsIHsgfSwgeyB9fSwKKyAgICAgICAge0F1ZGlv
RGVjb2RlciwgImF1ZGlvL3gtc2lkIiwgeyB9LCB7IH19LAorICAgICAgICB7QXVkaW9EZWNvZGVy
LCAiYXVkaW8veC1zcGVleCIsIHsiYXVkaW8vc3BlZXgiLCAiYXVkaW8veC1zcGVleCJ9LCB7IH19
LAorICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8veC13YXZwYWNrIiwgeyJhdWRpby94LXdh
dnBhY2sifSwgeyB9fSwKKyAgICAgICAge1ZpZGVvRGVjb2RlciwgInZpZGVvL21wZWcsIG1wZWd2
ZXJzaW9uPShpbnQpezEsMn0sIHN5c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZSIsIHsidmlkZW8v
bXBlZyJ9LCB7Im1wZWcifX0sCisgICAgICAgIHtWaWRlb0RlY29kZXIsICJ2aWRlby9tcGVndHMi
LCB7IH0sIHsgfX0sCisgICAgICAgIHtWaWRlb0RlY29kZXIsICJ2aWRlby94LWRpcmFjIiwgeyB9
LCB7IH19LAorICAgICAgICB7VmlkZW9EZWNvZGVyLCAidmlkZW8veC1mbGFzaC12aWRlbyIsIHsi
dmlkZW8vZmx2IiwgInZpZGVvL3gtZmx2In0sIHsgfX0sCisgICAgICAgIHtWaWRlb0RlY29kZXIs
ICJ2aWRlby94LWgyNjMiLCB7IH0sIHsgfX0sCisgICAgICAgIHtWaWRlb0RlY29kZXIsICJ2aWRl
by94LW1zdmlkZW9jb2RlYyIsIHsidmlkZW8veC1tc3ZpZGVvIn0sIHsgfX0sCisgICAgICAgIHtE
ZW11eGVyLCAiYXBwbGljYXRpb24vdm5kLnJuLXJlYWxtZWRpYSIsIHsgfSwgeyB9fSwKKyAgICAg
ICAge0RlbXV4ZXIsICJhcHBsaWNhdGlvbi94LTNncCIsIHsgfSwgeyB9fSwKKyAgICAgICAge0Rl
bXV4ZXIsICJhcHBsaWNhdGlvbi94LWhscyIsIHsiYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1
cmwiLCAiYXBwbGljYXRpb24veC1tcGVndXJsIn0sIHsgfX0sCisgICAgICAgIHtEZW11eGVyLCAi
YXBwbGljYXRpb24veC1wbi1yZWFsYXVkaW8iLCB7IH0sIHsgfX0sCisgICAgICAgIHtEZW11eGVy
LCAiYXVkaW8veC1haWZmIiwgeyB9LCB7IH19LAorICAgICAgICB7RGVtdXhlciwgImF1ZGlvL3gt
d2F2IiwgeyJhdWRpby94LXdhdiIsICJhdWRpby93YXYiLCAiYXVkaW8vdm5kLndhdmUifSwgeyIx
In19LAorICAgICAgICB7RGVtdXhlciwgInZpZGVvL3F1aWNrdGltZSIsIHsgfSwgeyB9fSwKKyAg
ICAgICAge0RlbXV4ZXIsICJ2aWRlby9xdWlja3RpbWUsIHZhcmlhbnQ9KHN0cmluZykzZ3BwIiwg
eyJ2aWRlby8zZ3BwIn0sIHsgfX0sCisgICAgICAgIHtEZW11eGVyLCAidmlkZW8veC1tcy1hc2Yi
LCB7IH0sIHsgfX0sCisgICAgfTsKKyAgICBmaWxsTWltZVR5cGVTZXRGcm9tQ2Fwc01hcHBpbmco
bWFwcGluZyk7CisKKyAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKG1f
ZGVtdXhlckZhY3RvcmllcywgImFwcGxpY2F0aW9uL29nZyIpKSB7CisgICAgICAgIG1fbWltZVR5
cGVTZXQuYWRkKEF0b21pY1N0cmluZygiYXBwbGljYXRpb24vb2dnIikpOworCisgICAgICAgIGlm
ICh2b3JiaXNTdXBwb3J0ZWQpIHsKKyAgICAgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21p
Y1N0cmluZygiYXVkaW8vb2dnIikpOworICAgICAgICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRv
bWljU3RyaW5nKCJhdWRpby94LXZvcmJpcytvZ2ciKSk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKG1fYXVkaW9EZWNvZGVyRmFjdG9y
aWVzLCAiYXVkaW8veC1zcGVleCIpKSB7CisgICAgICAgICAgICBtX21pbWVUeXBlU2V0LmFkZChB
dG9taWNTdHJpbmcoImF1ZGlvL29nZyIpKTsKKyAgICAgICAgICAgIG1fY29kZWNNYXAuYWRkKEF0
b21pY1N0cmluZygic3BlZXgiKSwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGdz
dFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShtX3ZpZGVvRGVjb2RlckZhY3Rvcmllcywg
InZpZGVvL3gtdGhlb3JhIikpIHsKKyAgICAgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21p
Y1N0cmluZygidmlkZW8vb2dnIikpOworICAgICAgICAgICAgbV9jb2RlY01hcC5hZGQoQXRvbWlj
U3RyaW5nKCJ0aGVvcmEiKSwgZmFsc2UpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBh
dWRpb01wZWdTdXBwb3J0ZWQgPSBmYWxzZTsKKyAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50
Rm9yTWVkaWFUeXBlKG1fYXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAiYXVkaW8vbXBlZywgbXBlZ3Zl
cnNpb249KGludCkxLCBsYXllcj0oaW50KVsxLCAzXSIpKSB7CisgICAgICAgIGF1ZGlvTXBlZ1N1
cHBvcnRlZCA9IHRydWU7CisgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygi
YXVkaW8vbXAxIikpOworICAgICAgICBtX21pbWVUeXBlU2V0LmFkZChBdG9taWNTdHJpbmcoImF1
ZGlvL21wMyIpKTsKKyAgICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRp
by94LW1wMyIpKTsKKyAgICAgICAgbV9jb2RlY01hcC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9t
cDMiKSwgZmFsc2UpOworICAgIH0KKworICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JN
ZWRpYVR5cGUobV9hdWRpb0RlY29kZXJGYWN0b3JpZXMsICJhdWRpby9tcGVnLCBtcGVndmVyc2lv
bj0oaW50KTIiKSkgeworICAgICAgICBhdWRpb01wZWdTdXBwb3J0ZWQgPSB0cnVlOworICAgICAg
ICBtX21pbWVUeXBlU2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL21wMiIpKTsKKyAgICB9CisK
KyAgICBhdWRpb01wZWdTdXBwb3J0ZWQgfD0gc3VwcG9ydHNDb250YWluZXJUeXBlKCJhdWRpby9t
cDQiKTsKKyAgICBpZiAoYXVkaW9NcGVnU3VwcG9ydGVkKSB7CisgICAgICAgIG1fbWltZVR5cGVT
ZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vbXBlZyIpKTsKKyAgICAgICAgbV9taW1lVHlwZVNl
dC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby94LW1wZWciKSk7CisgICAgfQorCisgICAgYm9vbCBt
YXRyb3NrYVN1cHBvcnRlZCA9IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShtX2Rl
bXV4ZXJGYWN0b3JpZXMsICJ2aWRlby94LW1hdHJvc2thIik7CisgICAgaWYgKG1hdHJvc2thU3Vw
cG9ydGVkKSB7CisgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygidmlkZW8v
eC1tYXRyb3NrYSIpKTsKKworICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVk
aWFUeXBlKG1fdmlkZW9EZWNvZGVyRmFjdG9yaWVzLCAidmlkZW8veC12cDEwIikpCisgICAgICAg
ICAgICBtX21pbWVUeXBlU2V0LmFkZChBdG9taWNTdHJpbmcoInZpZGVvL3dlYm0iKSk7CisgICAg
fQorCisgICAgaWYgKChtYXRyb3NrYVN1cHBvcnRlZCB8fCBzdXBwb3J0c0NvbnRhaW5lclR5cGUo
InZpZGVvL21wNCIpKSAmJiBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUobV92aWRl
b0RlY29kZXJGYWN0b3JpZXMsICJ2aWRlby94LWF2MSIpKQorICAgICAgICBtX2NvZGVjTWFwLmFk
ZChBdG9taWNTdHJpbmcoImF2MDEqIiksIGZhbHNlKTsKK30KKworYm9vbCBHc3RSZWdpc3RyeVNj
YW5uZXI6OnN1cHBvcnRzQ29kZWMoU3RyaW5nIGNvZGVjLCBib29sIHVzaW5nSGFyZHdhcmUpIGNv
bnN0Cit7CisgICAgLy8gSWYgdGhlIGNvZGVjIGlzIG5hbWVkIGxpa2UgYSBtaW1ldHlwZSAoZWc6
IHZpZGVvL2F2YykgcmVtb3ZlIHRoZSAidmlkZW8vIiBwYXJ0LgorICAgIHNpemVfdCBzbGFzaElu
ZGV4ID0gY29kZWMuZmluZCgnLycpOworICAgIGlmIChzbGFzaEluZGV4ICE9IFdURjo6bm90Rm91
bmQpCisgICAgICAgIGNvZGVjID0gY29kZWMuc3Vic3RyaW5nKHNsYXNoSW5kZXgrMSk7CisKKyAg
ICBHU1RfTE9HKCJDaGVja2luZyBjb2RlYyBcIiVzXCIiLCBjb2RlYy51dGY4KCkuZGF0YSgpKTsK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBtX2NvZGVjTWFwKSB7CisgICAgICAgIGJvb2wg
Y29kZWNNYXRjaGVzUGF0dGVybiA9ICFmbm1hdGNoKGl0ZW0ua2V5LnN0cmluZygpLnV0ZjgoKS5k
YXRhKCksIGNvZGVjLnV0ZjgoKS5kYXRhKCksIDApOworICAgICAgICBpZiAoY29kZWNNYXRjaGVz
UGF0dGVybikKKyAgICAgICAgICAgIHJldHVybiB1c2luZ0hhcmR3YXJlID8gaXRlbS52YWx1ZSA6
IHRydWU7CisgICAgfQorCisgICAgR1NUX0xPRygiVW5zdXBwb3J0ZWQiKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgR3N0UmVnaXN0cnlTY2FubmVyOjpzdXBwb3J0c0FsbENvZGVjcyhj
b25zdCBWZWN0b3I8U3RyaW5nPiYgY29kZWNzLCBib29sIHVzaW5nSGFyZHdhcmUpIGNvbnN0Cit7
CisgICAgZm9yIChTdHJpbmcgY29kZWMgOiBjb2RlY3MpIHsKKyAgICAgICAgaWYgKCFzdXBwb3J0
c0NvZGVjKGNvZGVjLCB1c2luZ0hhcmR3YXJlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHc3RSZWdpc3RyeVNjYW5uZXI6
OmlzRGVjb2RpbmdTdXBwb3J0ZWQoTWVkaWFDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uLCBi
b29sKiB1c2luZ0hhcmR3YXJlKSBjb25zdAoreworICAgIGJvb2wgZGVjb2RlckZvdW5kID0gZmFs
c2U7CisgICAgaWYgKHVzaW5nSGFyZHdhcmUpCisgICAgICAgICp1c2luZ0hhcmR3YXJlID0gZmFs
c2U7CisKKyAgICBpZiAoY29uZmlndXJhdGlvbi52aWRlbykgeworICAgICAgICBhdXRvJiB2aWRl
b0NvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uLnZpZGVvLnZhbHVlKCk7CisgICAgICAgIEdT
VF9ERUJVRygiQ2hlY2tpbmcgc3VwcG9ydCBmb3IgdmlkZW8gY29uZmlndXJhdGlvbjogXCIlc1wi
IHNpemU6ICV1eCV1IGJpdHJhdGU6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBmcmFtZXJhdGU6ICVm
IiwgdmlkZW9Db25maWd1cmF0aW9uLmNvbnRlbnRUeXBlLnV0ZjgoKS5kYXRhKCksIHZpZGVvQ29u
ZmlndXJhdGlvbi53aWR0aCwgdmlkZW9Db25maWd1cmF0aW9uLmhlaWdodCwgdmlkZW9Db25maWd1
cmF0aW9uLmJpdHJhdGUsIHZpZGVvQ29uZmlndXJhdGlvbi5mcmFtZXJhdGUpOworCisgICAgICAg
IGF1dG8gY29udGVudFR5cGUgPSBDb250ZW50VHlwZSh2aWRlb0NvbmZpZ3VyYXRpb24uY29udGVu
dFR5cGUpOworICAgICAgICBkZWNvZGVyRm91bmQgPSBzdXBwb3J0c0NvbnRhaW5lclR5cGUoY29u
dGVudFR5cGUuY29udGFpbmVyVHlwZSgpKTsKKyAgICAgICAgYXV0byBjb2RlY3MgPSBjb250ZW50
VHlwZS5jb2RlY3MoKTsKKyAgICAgICAgaWYgKHVzaW5nSGFyZHdhcmUgJiYgIWNvZGVjcy5pc0Vt
cHR5KCkpCisgICAgICAgICAgICAqdXNpbmdIYXJkd2FyZSA9IHN1cHBvcnRzQWxsQ29kZWNzKGNv
ZGVjcywgdHJ1ZSk7CisgICAgfQorCisgICAgaWYgKGNvbmZpZ3VyYXRpb24uYXVkaW8pIHsKKyAg
ICAgICAgYXV0byYgYXVkaW9Db25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbi5hdWRpby52YWx1
ZSgpOworICAgICAgICBHU1RfREVCVUcoIkNoZWNraW5nIHN1cHBvcnQgZm9yIGF1ZGlvIGNvbmZp
Z3VyYXRpb246IFwiJXNcIiAlcyBjaGFubmVscywgYml0cmF0ZTogJSIgR19HVUlOVDY0X0ZPUk1B
VCAiIHNhbXBsZXJhdGU6ICV1IiwgYXVkaW9Db25maWd1cmF0aW9uLmNvbnRlbnRUeXBlLnV0Zjgo
KS5kYXRhKCksIGF1ZGlvQ29uZmlndXJhdGlvbi5jaGFubmVscy51dGY4KCkuZGF0YSgpLCBhdWRp
b0NvbmZpZ3VyYXRpb24uYml0cmF0ZSwgYXVkaW9Db25maWd1cmF0aW9uLnNhbXBsZXJhdGUpOwor
ICAgICAgICBhdXRvIGNvbnRlbnRUeXBlID0gQ29udGVudFR5cGUoYXVkaW9Db25maWd1cmF0aW9u
LmNvbnRlbnRUeXBlKTsKKyAgICAgICAgZGVjb2RlckZvdW5kID0gc3VwcG9ydHNDb250YWluZXJU
eXBlKGNvbnRlbnRUeXBlLmNvbnRhaW5lclR5cGUoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGRl
Y29kZXJGb3VuZDsKK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR3N0UmVnaXN0cnlTY2FubmVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR3N0UmVnaXN0cnlTY2FubmVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNmNmN2QxZmZlOTY4ZDgzODk5OTBlOTlkMzQ2ZjdlNDA2MmE1MWVhYwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9Hc3RSZWdpc3RyeVNjYW5uZXIuaApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVIpCisK
KyNpbmNsdWRlICJNZWRpYUNvbmZpZ3VyYXRpb24uaCIKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21pY1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENvbnRlbnRUeXBlOworCitjbGFzcyBHc3RSZWdpc3Ry
eVNjYW5uZXIgeworICAgIGZyaWVuZCBOZXZlckRlc3Ryb3llZDxHc3RSZWdpc3RyeVNjYW5uZXI+
OworcHVibGljOgorICAgIHN0YXRpYyBHc3RSZWdpc3RyeVNjYW5uZXImIHNpbmdsZXRvbigpOwor
CisgICAgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIG1pbWVUeXBl
U2V0KCkgeyByZXR1cm4gbV9taW1lVHlwZVNldDsgfQorCisgICAgYm9vbCBzdXBwb3J0c0NvbnRh
aW5lclR5cGUoU3RyaW5nIGNvbnRhaW5lclR5cGUpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVR5cGVT
ZXQuY29udGFpbnMoY29udGFpbmVyVHlwZSk7IH0KKworICAgIGJvb2wgaXNEZWNvZGluZ1N1cHBv
cnRlZChNZWRpYUNvbmZpZ3VyYXRpb24mLCBib29sKiB1c2luZ0hhcmR3YXJlID0gbnVsbHB0cikg
Y29uc3Q7CisgICAgYm9vbCBzdXBwb3J0c0NvZGVjKFN0cmluZyBjb2RlYywgYm9vbCB1c2luZ0hh
cmR3YXJlID0gZmFsc2UpIGNvbnN0OworICAgIGJvb2wgc3VwcG9ydHNBbGxDb2RlY3MoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGNvZGVjcywgYm9vbCB1c2luZ0hhcmR3YXJlID0gZmFsc2UpIGNvbnN0
OworCitwcm90ZWN0ZWQ6CisgICAgR3N0UmVnaXN0cnlTY2FubmVyKGJvb2wgaXNNZWRpYVNvdXJj
ZSA9IGZhbHNlKTsKKyAgICB+R3N0UmVnaXN0cnlTY2FubmVyKCk7CisKKyAgICB2b2lkIGluaXRp
YWxpemUoKTsKKworICAgIGVudW0gRWxlbWVudFR5cGUgeworICAgICAgICBBdWRpb0RlY29kZXIg
PSAwLAorICAgICAgICBWaWRlb0RlY29kZXIsCisgICAgICAgIERlbXV4ZXIKKyAgICB9OworICAg
IHN0cnVjdCBHc3RDYXBzV2ViS2l0TWFwcGluZyB7CisgICAgICAgIEVsZW1lbnRUeXBlIGVsZW1l
bnRUeXBlOworICAgICAgICBjb25zdCBjaGFyKiBjYXBzU3RyaW5nOworICAgICAgICBWZWN0b3I8
QXRvbWljU3RyaW5nPiB3ZWJraXRNaW1lVHlwZXM7CisgICAgICAgIFZlY3RvcjxBdG9taWNTdHJp
bmc+IHdlYmtpdENvZGVjUGF0dGVybnM7CisgICAgfTsKKyAgICB2b2lkIGZpbGxNaW1lVHlwZVNl
dEZyb21DYXBzTWFwcGluZyhWZWN0b3I8R3N0Q2Fwc1dlYktpdE1hcHBpbmc+Jik7CisKKyAgICBz
dHJ1Y3QgUmVnaXN0cnlMb29rdXBSZXN1bHQgeworICAgICAgICBib29sIHN1cHBvcnRlZDsKKyAg
ICAgICAgYm9vbCB1c2luZ0hhcmR3YXJlOworCisgICAgICAgIG9wZXJhdG9yIGJvb2woKSBjb25z
dCB7IHJldHVybiBzdXBwb3J0ZWQ7IH0KKyAgICB9OworICAgIFJlZ2lzdHJ5TG9va3VwUmVzdWx0
IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShHTGlzdCogZWxlbWVudEZhY3Rvcmll
cywgY29uc3QgY2hhciogY2Fwc1N0cmluZywgYm9vbCBjaGVja0hhcmR3YXJlQ2xhc3NpZmllciA9
IGZhbHNlKTsKKworcHJpdmF0ZToKKyAgICBib29sIG1faXNNZWRpYVNvdXJjZTsKKyAgICBHTGlz
dCogbV9hdWRpb0RlY29kZXJGYWN0b3JpZXM7CisgICAgR0xpc3QqIG1fYXVkaW9QYXJzZXJGYWN0
b3JpZXM7CisgICAgR0xpc3QqIG1fdmlkZW9EZWNvZGVyRmFjdG9yaWVzOworICAgIEdMaXN0KiBt
X3ZpZGVvUGFyc2VyRmFjdG9yaWVzOworICAgIEdMaXN0KiBtX2RlbXV4ZXJGYWN0b3JpZXM7Cisg
ICAgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gbV9taW1lVHlwZVNl
dDsKKyAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgYm9vbD4gbV9jb2RlY01hcDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFFbmdp
bmVDb25maWd1cmF0aW9uRmFjdG9yeUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeUdT
dHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTM4NWUyN2UzMTRiNjA0ODM3NTY5YzUwMTg2MDg4YWUy
MWZiMGJhYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5R1N0cmVhbWVyLmNw
cApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeUdTdHJlYW1lci5oIgorCisj
aWYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIkdzdFJlZ2lzdHJ5U2Nhbm5lci5oIgorI2lu
Y2x1ZGUgIk1lZGlhQ2FwYWJpbGl0aWVzSW5mby5oIgorI2luY2x1ZGUgIk1lZGlhRGVjb2RpbmdD
b25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKKyNpbmNsdWRlIDx3dGYv
RnVuY3Rpb24uaD4KKworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisjaW5jbHVkZSAiR3N0UmVn
aXN0cnlTY2FubmVyTVNFLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lk
IGNyZWF0ZU1lZGlhUGxheWVyRGVjb2RpbmdDb25maWd1cmF0aW9uR1N0cmVhbWVyKE1lZGlhRGVj
b2RpbmdDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uLCBXVEY6OkZ1bmN0aW9uPHZvaWQoTWVk
aWFDYXBhYmlsaXRpZXNJbmZvJiYpPiYmIGNhbGxiYWNrKQoreworICAgIGJvb2wgaXNNZWRpYVNv
dXJjZSA9IGNvbmZpZ3VyYXRpb24udHlwZSA9PSBNZWRpYURlY29kaW5nVHlwZTo6TWVkaWFTb3Vy
Y2U7CisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKyAgICBhdXRvJiBzY2FubmVyID0gaXNNZWRp
YVNvdXJjZSA/IEdzdFJlZ2lzdHJ5U2Nhbm5lck1TRTo6c2luZ2xldG9uKCkgOiBHc3RSZWdpc3Ry
eVNjYW5uZXI6OnNpbmdsZXRvbigpOworI2Vsc2UKKyAgICBpZiAoaXNNZWRpYVNvdXJjZSkgewor
ICAgICAgICBjYWxsYmFjayh7IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGF1dG8m
IHNjYW5uZXIgPSBHc3RSZWdpc3RyeVNjYW5uZXI6OnNpbmdsZXRvbigpOworI2VuZGlmCisgICAg
Ym9vbCB1c2luZ0hhcmR3YXJlID0gZmFsc2U7CisgICAgTWVkaWFDYXBhYmlsaXRpZXNJbmZvIGlu
Zm87CisgICAgaW5mby5zdXBwb3J0ZWQgPSBzY2FubmVyLmlzRGVjb2RpbmdTdXBwb3J0ZWQoY29u
ZmlndXJhdGlvbiwgJnVzaW5nSGFyZHdhcmUpOworICAgIGluZm8ucG93ZXJFZmZpY2llbnQgPSB1
c2luZ0hhcmR3YXJlOworCisgICAgY2FsbGJhY2soV1RGTW92ZShpbmZvKSk7Cit9CisKK30KKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlHU3RyZWFtZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYUVuZ2luZUNvbmZpZ3VyYXRp
b25GYWN0b3J5R1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWU5ZWMyMTc4YTU4NzkyNDY3ODU2YmI1
YThmMDdhYTUzY2YzMjQ1MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5R1N0
cmVhbWVyLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2Fs
aWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1l
ciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisg
KiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgTWVkaWFDYXBhYmlsaXRpZXNJbmZvOworc3RydWN0IE1l
ZGlhRGVjb2RpbmdDb25maWd1cmF0aW9uOworCitleHRlcm4gdm9pZCBjcmVhdGVNZWRpYVBsYXll
ckRlY29kaW5nQ29uZmlndXJhdGlvbkdTdHJlYW1lcihNZWRpYURlY29kaW5nQ29uZmlndXJhdGlv
biYsIFdURjo6RnVuY3Rpb248dm9pZChNZWRpYUNhcGFiaWxpdGllc0luZm8mJik+JiYpOworCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmNwcAppbmRleCAwNzQwOTZkMDE4OTlmOGYwOTFhZjIxZDRhM2I3N2I1OGYyOTAzNTc0Li4yN2I3
MmVmY2QxYWU4YmMwMWM1OTk5YzE4MWVmZjQ3NDdhMDVmYzg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAj
aW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgorI2lu
Y2x1ZGUgIkdzdFJlZ2lzdHJ5U2Nhbm5lci5oIgogI2luY2x1ZGUgIkhUVFBIZWFkZXJOYW1lcy5o
IgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5o
IgpAQCAtMjIwOCwxMzcgKzIyMDksMTAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcikKICAgICBt
X3JlYWR5VGltZXJIYW5kbGVyLnN0b3AoKTsKIH0KIAotc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBtaW1lVHlwZVNldCgpCi17Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBt
aW1lVHlwZXMgPSBbXSgpCi0gICAgewotICAgICAgICBpbml0aWFsaXplR1N0cmVhbWVyQW5kUmVn
aXN0ZXJXZWJLaXRFbGVtZW50cygpOwotICAgICAgICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNl
SW5zZW5zaXRpdmVIYXNoPiBzZXQ7Ci0KLSAgICAgICAgR0xpc3QqIGF1ZGlvRGVjb2RlckZhY3Rv
cmllcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRf
RkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQVVE
SU8sIEdTVF9SQU5LX01BUkdJTkFMKTsKLSAgICAgICAgR0xpc3QqIHZpZGVvRGVjb2RlckZhY3Rv
cmllcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRf
RkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfVklE
RU8sIEdTVF9SQU5LX01BUkdJTkFMKTsKLSAgICAgICAgR0xpc3QqIGRlbXV4ZXJGYWN0b3JpZXMg
PSBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZ2V0X2VsZW1lbnRzKEdTVF9FTEVNRU5UX0ZBQ1RP
UllfVFlQRV9ERU1VWEVSLCBHU1RfUkFOS19NQVJHSU5BTCk7Ci0KLSAgICAgICAgZW51bSBFbGVt
ZW50VHlwZSB7Ci0gICAgICAgICAgICBBdWRpb0RlY29kZXIgPSAwLAotICAgICAgICAgICAgVmlk
ZW9EZWNvZGVyLAotICAgICAgICAgICAgRGVtdXhlcgotICAgICAgICB9OwotICAgICAgICBzdHJ1
Y3QgR3N0Q2Fwc1dlYktpdE1hcHBpbmcgewotICAgICAgICAgICAgRWxlbWVudFR5cGUgZWxlbWVu
dFR5cGU7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBjYXBzU3RyaW5nOwotICAgICAgICAgICAg
VmVjdG9yPEF0b21pY1N0cmluZz4gd2Via2l0TWltZVR5cGVzOwotICAgICAgICB9OwotCi0gICAg
ICAgIFZlY3RvcjxHc3RDYXBzV2ViS2l0TWFwcGluZz4gbWFwcGluZyA9IHsKLSAgICAgICAgICAg
IHtBdWRpb0RlY29kZXIsICJhdWRpby9taWRpIiwgeyJhdWRpby9taWRpIiwgImF1ZGlvL3JpZmYt
bWlkaSJ9fSwKLSAgICAgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LXNiYyIsIHsgfX0s
Ci0gICAgICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8veC1zaWQiLCB7IH19LAotICAgICAg
ICAgICAge0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtZmxhYyIsIHsiYXVkaW8veC1mbGFjIiwgImF1
ZGlvL2ZsYWMifX0sCi0gICAgICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8veC13YXYiLCB7
ImF1ZGlvL3gtd2F2IiwgImF1ZGlvL3dhdiIsICJhdWRpby92bmQud2F2ZSJ9fSwKLSAgICAgICAg
ICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LXdhdnBhY2siLCB7ImF1ZGlvL3gtd2F2cGFjayJ9
fSwKLSAgICAgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LXNwZWV4IiwgeyJhdWRpby9z
cGVleCIsICJhdWRpby94LXNwZWV4In19LAotICAgICAgICAgICAge0F1ZGlvRGVjb2RlciwgImF1
ZGlvL3gtYWMzIiwgeyB9fSwKLSAgICAgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LWVh
YzMiLCB7ImF1ZGlvL3gtYWMzIn19LAotICAgICAgICAgICAge0F1ZGlvRGVjb2RlciwgImF1ZGlv
L3gtZHRzIiwgeyB9fSwKLSAgICAgICAgICAgIHtWaWRlb0RlY29kZXIsICJ2aWRlby94LWgyNjQs
IHByb2ZpbGU9KHN0cmluZyloaWdoIiwgeyJ2aWRlby9tcDQiLCAidmlkZW8veC1tNHYifX0sCi0g
ICAgICAgICAgICB7VmlkZW9EZWNvZGVyLCAidmlkZW8veC1tc3ZpZGVvY29kZWMiLCB7InZpZGVv
L3gtbXN2aWRlbyJ9fSwKLSAgICAgICAgICAgIHtWaWRlb0RlY29kZXIsICJ2aWRlby94LWgyNjMi
LCB7IH19LAotICAgICAgICAgICAge1ZpZGVvRGVjb2RlciwgInZpZGVvL21wZWd0cyIsIHsgfX0s
Ci0gICAgICAgICAgICB7VmlkZW9EZWNvZGVyLCAidmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGlu
dCl7MSwyfSwgc3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNlIiwgeyJ2aWRlby9tcGVnIn19LAot
ICAgICAgICAgICAge1ZpZGVvRGVjb2RlciwgInZpZGVvL3gtZGlyYWMiLCB7IH19LAotICAgICAg
ICAgICAge1ZpZGVvRGVjb2RlciwgInZpZGVvL3gtZmxhc2gtdmlkZW8iLCB7InZpZGVvL2ZsdiIs
ICJ2aWRlby94LWZsdiJ9fSwKLSAgICAgICAgICAgIHtEZW11eGVyLCAidmlkZW8vcXVpY2t0aW1l
IiwgeyB9fSwKLSAgICAgICAgICAgIHtEZW11eGVyLCAidmlkZW8vcXVpY2t0aW1lLCB2YXJpYW50
PShzdHJpbmcpM2dwcCIsIHsidmlkZW8vM2dwcCJ9fSwKLSAgICAgICAgICAgIHtEZW11eGVyLCAi
YXBwbGljYXRpb24veC0zZ3AiLCB7IH19LAotICAgICAgICAgICAge0RlbXV4ZXIsICJ2aWRlby94
LW1zLWFzZiIsIHsgfX0sCi0gICAgICAgICAgICB7RGVtdXhlciwgImF1ZGlvL3gtYWlmZiIsIHsg
fX0sCi0gICAgICAgICAgICB7RGVtdXhlciwgImFwcGxpY2F0aW9uL3gtcG4tcmVhbGF1ZGlvIiwg
eyB9fSwKLSAgICAgICAgICAgIHtEZW11eGVyLCAiYXBwbGljYXRpb24vdm5kLnJuLXJlYWxtZWRp
YSIsIHsgfX0sCi0gICAgICAgICAgICB7RGVtdXhlciwgImF1ZGlvL3gtd2F2IiwgeyJhdWRpby94
LXdhdiIsICJhdWRpby93YXYiLCAiYXVkaW8vdm5kLndhdmUifX0sCi0gICAgICAgICAgICB7RGVt
dXhlciwgImFwcGxpY2F0aW9uL3gtaGxzIiwgeyJhcHBsaWNhdGlvbi92bmQuYXBwbGUubXBlZ3Vy
bCIsICJhcHBsaWNhdGlvbi94LW1wZWd1cmwifX0KLSAgICAgICAgfTsKLQotICAgICAgICBmb3Ig
KGF1dG8mIGN1cnJlbnQgOiBtYXBwaW5nKSB7Ci0gICAgICAgICAgICBHTGlzdCogZmFjdG9yaWVz
ID0gZGVtdXhlckZhY3RvcmllczsKLSAgICAgICAgICAgIGlmIChjdXJyZW50LmVsZW1lbnRUeXBl
ID09IEF1ZGlvRGVjb2RlcikKLSAgICAgICAgICAgICAgICBmYWN0b3JpZXMgPSBhdWRpb0RlY29k
ZXJGYWN0b3JpZXM7Ci0gICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50LmVsZW1lbnRUeXBlID09
IFZpZGVvRGVjb2RlcikKLSAgICAgICAgICAgICAgICBmYWN0b3JpZXMgPSB2aWRlb0RlY29kZXJG
YWN0b3JpZXM7Ci0KLSAgICAgICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRp
YVR5cGUoZmFjdG9yaWVzLCBjdXJyZW50LmNhcHNTdHJpbmcpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFjdXJyZW50LndlYmtpdE1pbWVUeXBlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZm9yIChjb25zdCBhdXRvJiBtaW1lVHlwZSA6IGN1cnJlbnQud2Via2l0TWltZVR5cGVz
KQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0LmFkZChtaW1lVHlwZSk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKGN1
cnJlbnQuY2Fwc1N0cmluZykpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
Ym9vbCBvcHVzU3VwcG9ydGVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0Vs
ZW1lbnRGb3JNZWRpYVR5cGUoYXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAiYXVkaW8veC1vcHVzIikp
IHsKLSAgICAgICAgICAgIG9wdXNTdXBwb3J0ZWQgPSB0cnVlOwotICAgICAgICAgICAgc2V0LmFk
ZChBdG9taWNTdHJpbmcoImF1ZGlvL29wdXMiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29s
IHZvcmJpc1N1cHBvcnRlZCA9IGZhbHNlOwotICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVt
ZW50Rm9yTWVkaWFUeXBlKGRlbXV4ZXJGYWN0b3JpZXMsICJhcHBsaWNhdGlvbi9vZ2ciKSkgewot
ICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImFwcGxpY2F0aW9uL29nZyIpKTsKLQot
ICAgICAgICAgICAgdm9yYmlzU3VwcG9ydGVkID0gZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVk
aWFUeXBlKGF1ZGlvRGVjb2RlckZhY3RvcmllcywgImF1ZGlvL3gtdm9yYmlzIik7Ci0gICAgICAg
ICAgICBpZiAodm9yYmlzU3VwcG9ydGVkKSB7Ci0gICAgICAgICAgICAgICAgc2V0LmFkZChBdG9t
aWNTdHJpbmcoImF1ZGlvL29nZyIpKTsKLSAgICAgICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0
cmluZygiYXVkaW8veC12b3JiaXMrb2dnIikpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKHZpZGVvRGVjb2RlckZhY3Rv
cmllcywgInZpZGVvL3gtdGhlb3JhIikpCi0gICAgICAgICAgICAgICAgc2V0LmFkZChBdG9taWNT
dHJpbmcoInZpZGVvL29nZyIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgYXVkaW9NcGVn
U3VwcG9ydGVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JN
ZWRpYVR5cGUoYXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAiYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249
KGludCkxLCBsYXllcj0oaW50KVsxLCAzXSIpKSB7Ci0gICAgICAgICAgICBhdWRpb01wZWdTdXBw
b3J0ZWQgPSB0cnVlOwotICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL21w
MSIpKTsKLSAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9tcDMiKSk7Ci0g
ICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8veC1tcDMiKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGF1ZGlv
RGVjb2RlckZhY3RvcmllcywgImF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpezIsIDR9Iikp
IHsKLSAgICAgICAgICAgIGF1ZGlvTXBlZ1N1cHBvcnRlZCA9IHRydWU7Ci0gICAgICAgICAgICBz
ZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vYWFjIikpOwotICAgICAgICAgICAgc2V0LmFkZChB
dG9taWNTdHJpbmcoImF1ZGlvL21wMiIpKTsKLSAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3Ry
aW5nKCJhdWRpby9tcDQiKSk7Ci0gICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVk
aW8veC1tNGEiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXVkaW9NcGVnU3VwcG9ydGVk
KSB7Ci0gICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vbXBlZyIpKTsKLSAg
ICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby94LW1wZWciKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGRlbXV4
ZXJGYWN0b3JpZXMsICJ2aWRlby94LW1hdHJvc2thIikpIHsKLSAgICAgICAgICAgIHNldC5hZGQo
QXRvbWljU3RyaW5nKCJ2aWRlby94LW1hdHJvc2thIikpOwotCi0gICAgICAgICAgICBpZiAoZ3N0
UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKHZpZGVvRGVjb2RlckZhY3RvcmllcywgInZp
ZGVvL3gtdnA4IikKLSAgICAgICAgICAgICAgICB8fCBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JN
ZWRpYVR5cGUodmlkZW9EZWNvZGVyRmFjdG9yaWVzLCAidmlkZW8veC12cDkiKQotICAgICAgICAg
ICAgICAgIHx8IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZSh2aWRlb0RlY29kZXJG
YWN0b3JpZXMsICJ2aWRlby94LXZwMTAiKSkKLSAgICAgICAgICAgICAgICBzZXQuYWRkKEF0b21p
Y1N0cmluZygidmlkZW8vd2VibSIpKTsKLQotICAgICAgICAgICAgaWYgKHZvcmJpc1N1cHBvcnRl
ZCB8fCBvcHVzU3VwcG9ydGVkKQotICAgICAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5n
KCJhdWRpby93ZWJtIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJl
X2xpc3RfZnJlZShhdWRpb0RlY29kZXJGYWN0b3JpZXMpOwotICAgICAgICBnc3RfcGx1Z2luX2Zl
YXR1cmVfbGlzdF9mcmVlKHZpZGVvRGVjb2RlckZhY3Rvcmllcyk7Ci0gICAgICAgIGdzdF9wbHVn
aW5fZmVhdHVyZV9saXN0X2ZyZWUoZGVtdXhlckZhY3Rvcmllcyk7Ci0gICAgICAgIHJldHVybiBz
ZXQ7Ci0gICAgfSgpOwotICAgIHJldHVybiBtaW1lVHlwZXM7Ci19Ci0KIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZywgQVND
SUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgdHlwZXMpCiB7Ci0gICAgdHlwZXMgPSBtaW1lVHlwZVNl
dCgpOworICAgIGF1dG8mIGdzdFJlZ2lzdHJ5U2Nhbm5lciA9IEdzdFJlZ2lzdHJ5U2Nhbm5lcjo6
c2luZ2xldG9uKCk7CisgICAgdHlwZXMgPSBnc3RSZWdpc3RyeVNjYW5uZXIubWltZVR5cGVTZXQo
KTsKIH0KIAogTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJiBw
YXJhbWV0ZXJzKQpAQCAtMjM1OCwzMCArMjIzMiwyMSBAQCBNZWRpYVBsYXllcjo6U3VwcG9ydHNU
eXBlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlh
RQogICAgIGlmIChwYXJhbWV0ZXJzLnR5cGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gcmVz
dWx0OwogCi0gICAgLy8gU3BlYyBzYXlzIHdlIHNob3VsZCBub3QgcmV0dXJuICJwcm9iYWJseSIg
aWYgdGhlIGNvZGVjcyBzdHJpbmcgaXMgZW1wdHkuCi0gICAgaWYgKG1pbWVUeXBlU2V0KCkuY29u
dGFpbnMocGFyYW1ldGVycy50eXBlLmNvbnRhaW5lclR5cGUoKSkpCi0gICAgICAgIHJlc3VsdCA9
IHBhcmFtZXRlcnMudHlwZS5jb2RlY3MoKS5pc0VtcHR5KCkgPyBNZWRpYVBsYXllcjo6TWF5QmVT
dXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQ7Ci0KKyAgICBHU1RfREVCVUcoIkNo
ZWNraW5nIG1pbWUtdHlwZSBcIiVzXCIiLCBwYXJhbWV0ZXJzLnR5cGUucmF3KCkudXRmOCgpLmRh
dGEoKSk7CiAgICAgYXV0byBjb250YWluZXJUeXBlID0gcGFyYW1ldGVycy50eXBlLmNvbnRhaW5l
clR5cGUoKTsKLSAgICBpZiAoY29udGFpbmVyVHlwZSA9PSAidmlkZW8vbXA0Il9zIHx8IGNvbnRh
aW5lclR5cGUgPT0gInZpZGVvL3dlYm0iX3MpIHsKLSAgICAgICAgaWYgKG1pbWVUeXBlU2V0KCku
Y29udGFpbnMoY29udGFpbmVyVHlwZSkpIHsKLSAgICAgICAgICAgIEdMaXN0KiB2aWRlb0RlY29k
ZXJGYWN0b3JpZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZ2V0X2VsZW1lbnRzKEdTVF9F
TEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREVSIHwgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01F
RElBX1ZJREVPLCBHU1RfUkFOS19NQVJHSU5BTCk7Ci0gICAgICAgICAgICBib29sIGF2MURlY29k
ZXJGb3VuZCA9IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZSh2aWRlb0RlY29kZXJG
YWN0b3JpZXMsICJ2aWRlby94LWF2MSJfcyk7Ci0gICAgICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1
cmVfbGlzdF9mcmVlKHZpZGVvRGVjb2RlckZhY3Rvcmllcyk7Ci0gICAgICAgICAgICBmb3IgKGF1
dG8mIGNvZGVjIDogcGFyYW1ldGVycy50eXBlLmNvZGVjcygpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGNvZGVjLnN0YXJ0c1dpdGgoImF2MDEiX3MpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9IGF2MURlY29kZXJGb3VuZCA/IE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZCA6IE1lZGlh
UGxheWVyOjpJc05vdFN1cHBvcnRlZDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjb2RlYy5zdGFydHNXaXRoKCJhdjEi
X3MpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IE1lZGlhUGxheWVyOjpJc05vdFN1
cHBvcnRlZDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgYXV0byYgZ3N0UmVnaXN0cnlTY2FubmVyID0g
R3N0UmVnaXN0cnlTY2FubmVyOjpzaW5nbGV0b24oKTsKKyAgICBpZiAoZ3N0UmVnaXN0cnlTY2Fu
bmVyLnN1cHBvcnRzQ29udGFpbmVyVHlwZShjb250YWluZXJUeXBlKSkgeworICAgICAgICAvLyBT
cGVjIHNheXMgd2Ugc2hvdWxkIG5vdCByZXR1cm4gInByb2JhYmx5IiBpZiB0aGUgY29kZWNzIHN0
cmluZyBpcyBlbXB0eS4KKyAgICAgICAgVmVjdG9yPFN0cmluZz4gY29kZWNzID0gcGFyYW1ldGVy
cy50eXBlLmNvZGVjcygpOworICAgICAgICBpZiAoY29kZWNzLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHJlc3VsdCA9IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZDsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcmVzdWx0ID0gZ3N0UmVnaXN0cnlTY2FubmVyLnN1cHBvcnRzQWxsQ29kZWNz
KGNvZGVjcykgPyBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNOb3RT
dXBwb3J0ZWQ7CiAgICAgfQogCi0gICAgcmV0dXJuIGV4dGVuZGVkU3VwcG9ydHNUeXBlKHBhcmFt
ZXRlcnMsIHJlc3VsdCk7CisgICAgYXV0byBmaW5hbFJlc3VsdCA9IGV4dGVuZGVkU3VwcG9ydHNU
eXBlKHBhcmFtZXRlcnMsIHJlc3VsdCk7CisgICAgR1NUX0RFQlVHKCJTdXBwb3J0ZWQ6ICVzIiwg
Y29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoZmluYWxSZXN1bHQpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIHJldHVybiBmaW5hbFJlc3VsdDsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnNldERvd25sb2FkQnVmZmVyaW5nKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGlu
ZS5jcHAKaW5kZXggODM5ZGE2MmQ3NzExMGRlN2EzNGVjMjkzNmIyZThjZjU1MDgxMTUzYi4uZTVm
OGViODRiNTM1ZGZjODc5ZGM1NTNjZjQwMDc0YWJhYjhhNDk0YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9B
cHBlbmRQaXBlbGluZS5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJHU3RyZWFtZXJD
b21tb24uaCIKICNpbmNsdWRlICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJH
U3RyZWFtZXJNZWRpYURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiR3N0UmVnaXN0cnlTY2FubmVy
TVNFLmgiCiAjaW5jbHVkZSAiTWVkaWFTYW1wbGVHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJJbmJh
bmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiTWVkaWFEZXNjcmlwdGlv
bi5oIgpAQCAtMTYyLDcgKzE2Myw4IEBAIEFwcGVuZFBpcGVsaW5lOjpBcHBlbmRQaXBlbGluZShS
ZWY8TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U+IG1lZGlhU291cmNlQ2xpCiAgICAgfSwg
dGhpcywgbnVsbHB0cik7CiAKICAgICBjb25zdCBTdHJpbmcmIHR5cGUgPSBtX3NvdXJjZUJ1ZmZl
clByaXZhdGUtPnR5cGUoKS5jb250YWluZXJUeXBlKCk7Ci0gICAgaWYgKHR5cGUuZW5kc1dpdGgo
Im1wNCIpKQorICAgIEdTVF9ERUJVRygiU291cmNlQnVmZmVyIGNvbnRhaW5lclR5cGU6ICVzIiwg
dHlwZS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAodHlwZS5lbmRzV2l0aCgibXA0IikgfHwgdHlw
ZS5lbmRzV2l0aCgiYWFjIikpCiAgICAgICAgIG1fZGVtdXggPSBnc3RfZWxlbWVudF9mYWN0b3J5
X21ha2UoInF0ZGVtdXgiLCBudWxscHRyKTsKICAgICBlbHNlIGlmICh0eXBlLmVuZHNXaXRoKCJ3
ZWJtIikpCiAgICAgICAgIG1fZGVtdXggPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoIm1hdHJv
c2thZGVtdXgiLCBudWxscHRyKTsKQEAgLTU3MCw3ICs1NzIsOCBAQCB2b2lkIEFwcGVuZFBpcGVs
aW5lOjpwYXJzZURlbXV4ZXJTcmNQYWRDYXBzKEdzdENhcHMqIGRlbXV4ZXJTcmNQYWRDYXBzKQog
ICAgIG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1l
cjo6VW5rbm93bjsKIAogICAgIGNvbnN0IGNoYXIqIG9yaWdpbmFsTWVkaWFUeXBlID0gY2Fwc01l
ZGlhVHlwZShtX2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpKTsKLSAgICBpZiAoIU1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6c3VwcG9ydHNDb2RlYyhvcmlnaW5hbE1lZGlhVHlwZSkpIHsK
KyAgICBhdXRvJiBnc3RSZWdpc3RyeVNjYW5uZXIgPSBHc3RSZWdpc3RyeVNjYW5uZXJNU0U6OnNp
bmdsZXRvbigpOworICAgIGlmICghZ3N0UmVnaXN0cnlTY2FubmVyLnN1cHBvcnRzQ29kZWMob3Jp
Z2luYWxNZWRpYVR5cGUpKSB7CiAgICAgICAgICAgICBtX3ByZXNlbnRhdGlvblNpemUgPSBXZWJD
b3JlOjpGbG9hdFNpemUoKTsKICAgICAgICAgICAgIG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1l
ZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6SW52YWxpZDsKICAgICB9IGVsc2UgaWYgKGRv
Q2Fwc0hhdmVUeXBlKG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCksIEdTVF9WSURFT19DQVBTX1RZ
UEVfUFJFRklYKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL21zZS9Hc3RSZWdpc3RyeVNjYW5uZXJNU0UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Hc3RSZWdpc3RyeVNjYW5uZXJNU0Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjE4ZTQ5MDk1MjgyNDg3NGUxZmZmZDgwZGJjZjA0NTNlZWVjOTY5YTAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvbXNlL0dzdFJlZ2lzdHJ5U2Nhbm5lck1TRS5jcHAKQEAgLTAsMCArMSw0MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgVVNFKEdTVFJFQU1FUikgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKyNpbmNsdWRlICJHc3RS
ZWdpc3RyeVNjYW5uZXJNU0UuaCIKKworI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dzdFJlZ2lzdHJ5U2Nhbm5lck1TRSYgR3N0UmVnaXN0
cnlTY2FubmVyTVNFOjpzaW5nbGV0b24oKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxH
c3RSZWdpc3RyeVNjYW5uZXJNU0U+IHNoYXJlZEluc3RhbmNlOworICAgIHJldHVybiBzaGFyZWRJ
bnN0YW5jZTsKK30KKworR3N0UmVnaXN0cnlTY2FubmVyTVNFOjpHc3RSZWdpc3RyeVNjYW5uZXJN
U0UoKQorICAgIDogR3N0UmVnaXN0cnlTY2FubmVyOjpHc3RSZWdpc3RyeVNjYW5uZXIodHJ1ZSkK
K3sKK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvbXNlL0dzdFJlZ2lzdHJ5U2Nhbm5lck1TRS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Hc3RSZWdpc3RyeVNjYW5uZXJN
U0UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kMGZjOTk3ZDYwOWE4OTNiNGFhYmNkZjM1NmRiMGJhMjkzYzkzMDA0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL21zZS9Hc3RSZWdpc3RyeVNjYW5uZXJNU0UuaApAQCAtMCwwICsxLDQwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShH
U1RSRUFNRVIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisKKyNpbmNsdWRlICJHc3RSZWdpc3Ry
eVNjYW5uZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgR3N0UmVnaXN0cnlTY2FubmVyTVNFIDogcHVibGljIEdzdFJlZ2lzdHJ5
U2Nhbm5lciB7CisgICAgZnJpZW5kIE5ldmVyRGVzdHJveWVkPEdzdFJlZ2lzdHJ5U2Nhbm5lck1T
RT47CitwdWJsaWM6CisgICAgc3RhdGljIEdzdFJlZ2lzdHJ5U2Nhbm5lck1TRSYgc2luZ2xldG9u
KCk7Citwcm90ZWN0ZWQ6CisgICAgR3N0UmVnaXN0cnlTY2FubmVyTVNFKCk7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwCmlu
ZGV4IDJjYzNkMWE3ZTA5MDY2OWRjMzczY2M1MjQ4MzhjMzRmYjU1ODZmNzAuLjVhYzE3NWIzYmIy
MzY5OWU2Y2UxMGU2ZmE5MDc1ZDc5NTBjOGQzZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyTVNFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlICJBcHBlbmRQaXBlbGluZS5oIgogI2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2
YXRlR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjaW5jbHVkZSAi
R3N0UmVnaXN0cnlTY2FubmVyTVNFLmgiCiAjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUdTdHJlYW1lci5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJN
ZWRpYURlc2NyaXB0aW9uLmgiCkBAIC00Miw3ICs0Myw2IEBACiAjaW5jbHVkZSAiVVJMLmgiCiAj
aW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKIAotI2luY2x1ZGUgPGZubWF0
Y2guaD4KICNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNpbmsuaD4KICNpbmNsdWRlIDxnc3QvYXBw
L2dzdGFwcHNyYy5oPgogI2luY2x1ZGUgPGdzdC9nc3QuaD4KQEAgLTY4MiwzMCArNjgyLDYgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmR1cmF0aW9uQ2hhbmdlZCgpCiAg
ICAgfQogfQogCi1zdGF0aWMgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFz
aD4mIG1pbWVUeXBlQ2FjaGUoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0
PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPj4gY2FjaGUgPSBbXSgpCi0gICAgewot
ICAgICAgICBpbml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRFbGVtZW50cygpOwot
ICAgICAgICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBzZXQ7Ci0g
ICAgICAgIGNvbnN0IGNoYXIqIG1pbWVUeXBlc1tdID0gewotICAgICAgICAgICAgInZpZGVvL21w
NCIsCi0gICAgICAgICAgICAiYXVkaW8vbXA0IiwKLSAgICAgICAgICAgICJ2aWRlby93ZWJtIiwK
LSAgICAgICAgICAgICJhdWRpby93ZWJtIgotICAgICAgICB9OwotICAgICAgICBmb3IgKGF1dG8m
IHR5cGUgOiBtaW1lVHlwZXMpCi0gICAgICAgICAgICBzZXQuYWRkKHR5cGUpOwotICAgICAgICBy
ZXR1cm4gc2V0OwotICAgIH0oKTsKLSAgICByZXR1cm4gY2FjaGU7Ci19Ci0KLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmlu
ZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgdHlwZXMpCi17Ci0gICAgdHlwZXMgPSBtaW1l
VHlwZUNhY2hlKCk7Ci19Ci0KIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp0
cmFja0RldGVjdGVkKFJlZlB0cjxBcHBlbmRQaXBlbGluZT4gYXBwZW5kUGlwZWxpbmUsIFJlZlB0
cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiBuZXdUcmFjaywgYm9vbCBmaXJzdFRyYWNrRGV0
ZWN0ZWQpCiB7CiAgICAgQVNTRVJUKGFwcGVuZFBpcGVsaW5lLT50cmFjaygpID09IG5ld1RyYWNr
KTsKQEAgLTcyNiwxMDkgKzcwMiwxMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6dHJhY2tEZXRlY3RlZChSZWZQdHI8QXBwZW5kUGlwZWxpbmU+IGFwcGVuZAogICAgICAg
ICBtX3BsYXliYWNrUGlwZWxpbmUtPnJlYXR0YWNoVHJhY2soYXBwZW5kUGlwZWxpbmUtPnNvdXJj
ZUJ1ZmZlclByaXZhdGUoKSwgbmV3VHJhY2ssIGNhcHMpOwogfQogCi1jb25zdCBzdGF0aWMgSGFz
aFNldDxBdG9taWNTdHJpbmc+JiBjb2RlY1NldCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEhhc2hTZXQ8QXRvbWljU3RyaW5nPj4gY29kZWNUeXBlcyA9IFtdKCkKLSAgICB7Ci0gICAg
ICAgIGluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKCk7Ci0gICAg
ICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiBzZXQ7Ci0KLSAgICAgICAgR0xpc3QqIGF1ZGlvRGVj
b2RlckZhY3RvcmllcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NU
X0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVf
TUVESUFfQVVESU8sIEdTVF9SQU5LX01BUkdJTkFMKTsKLSAgICAgICAgR0xpc3QqIHZpZGVvRGVj
b2RlckZhY3RvcmllcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NU
X0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVf
TUVESUFfVklERU8sIEdTVF9SQU5LX01BUkdJTkFMKTsKLQotICAgICAgICBlbnVtIEVsZW1lbnRU
eXBlIHsKLSAgICAgICAgICAgIEF1ZGlvRGVjb2RlciA9IDAsCi0gICAgICAgICAgICBWaWRlb0Rl
Y29kZXIKLSAgICAgICAgfTsKLSAgICAgICAgc3RydWN0IEdzdENhcHNXZWJLaXRNYXBwaW5nIHsK
LSAgICAgICAgICAgIEVsZW1lbnRUeXBlIGVsZW1lbnRUeXBlOwotICAgICAgICAgICAgY29uc3Qg
Y2hhciogY2Fwc1N0cmluZzsKLSAgICAgICAgICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHdlYmtp
dENvZGVjczsKLSAgICAgICAgfTsKLQotICAgICAgICBHc3RDYXBzV2ViS2l0TWFwcGluZyBtYXBw
aW5nW10gPSB7Ci0gICAgICAgICAgICB7IFZpZGVvRGVjb2RlciwgInZpZGVvL3gtaDI2NCwgIHBy
b2ZpbGU9KHN0cmluZyl7IGNvbnN0cmFpbmVkLWJhc2VsaW5lLCBiYXNlbGluZSB9IiwgeyAieC1o
MjY0IiwgImF2YyoiIH0gfSwKLSAgICAgICAgICAgIHsgVmlkZW9EZWNvZGVyLCAidmlkZW8vbXBl
ZywgbXBlZ3ZlcnNpb249KGludCl7MSwyfSwgc3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNlIiwg
eyAibXBlZyIgfSB9LAotICAgICAgICAgICAgeyBWaWRlb0RlY29kZXIsICJ2aWRlby94LXZwOCIs
IHsgInZwOCIsICJ4LXZwOCIgfSB9LAotICAgICAgICAgICAgeyBWaWRlb0RlY29kZXIsICJ2aWRl
by94LXZwOSIsIHsgInZwOSIsICJ4LXZwOSIgfSB9LAotICAgICAgICAgICAgeyBBdWRpb0RlY29k
ZXIsICJhdWRpby94LXZvcmJpcyIsIHsgInZvcmJpcyIsICJ4LXZvcmJpcyIgfSB9LAotICAgICAg
ICAgICAgeyBBdWRpb0RlY29kZXIsICJhdWRpby94LW9wdXMiLCB7ICJvcHVzIiwgIngtb3B1cyIg
fSB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZm9yIChhdXRvJiBjdXJyZW50IDogbWFwcGluZykg
ewotICAgICAgICAgICAgR0xpc3QqIGZhY3RvcmllcyA9IG51bGxwdHI7Ci0gICAgICAgICAgICBz
d2l0Y2ggKGN1cnJlbnQuZWxlbWVudFR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgQXVkaW9EZWNv
ZGVyOgotICAgICAgICAgICAgICAgIGZhY3RvcmllcyA9IGF1ZGlvRGVjb2RlckZhY3RvcmllczsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVmlkZW9EZWNvZGVyOgot
ICAgICAgICAgICAgICAgIGZhY3RvcmllcyA9IHZpZGVvRGVjb2RlckZhY3RvcmllczsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
Z19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgZ19hc3NlcnRfbm9ubnVsbChmYWN0b3JpZXMpOwotCi0gICAg
ICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGZhY3Rvcmllcywg
Y3VycmVudC5jYXBzU3RyaW5nKSAmJiBmYWN0b3JpZXMgIT0gbnVsbHB0cikgewotICAgICAgICAg
ICAgICAgIGlmICghY3VycmVudC53ZWJraXRDb2RlY3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgbWltZVR5cGUgOiBjdXJyZW50LndlYmtpdENvZGVj
cykKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldC5hZGQobWltZVR5cGUpOwotICAgICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZyhj
dXJyZW50LmNhcHNTdHJpbmcpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IGJvb2wgYXVkaW9NcGVnU3VwcG9ydGVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChnc3RSZWdpc3Ry
eUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoYXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAiYXVkaW8vbXBl
ZywgbXBlZ3ZlcnNpb249KGludCkxLCBsYXllcj0oaW50KVsxLCAzXSIpKSB7Ci0gICAgICAgICAg
ICBhdWRpb01wZWdTdXBwb3J0ZWQgPSB0cnVlOwotICAgICAgICAgICAgc2V0LmFkZChBdG9taWNT
dHJpbmcoImF1ZGlvL21wMyIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChnc3RSZWdpc3Ry
eUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoYXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAiYXVkaW8vbXBl
ZywgbXBlZ3ZlcnNpb249KGludCl7MiwgNH0iKSkgewotICAgICAgICAgICAgYXVkaW9NcGVnU3Vw
cG9ydGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJtcDRhKiIp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhdWRpb01wZWdTdXBwb3J0ZWQpIHsKLSAgICAg
ICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9tcGVnIikpOwotICAgICAgICAgICAg
c2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL3gtbXBlZyIpKTsKLSAgICAgICAgfQotCi0KLSAg
ICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZShhdWRpb0RlY29kZXJGYWN0b3JpZXMp
OwotICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKHZpZGVvRGVjb2RlckZhY3Rv
cmllcyk7Ci0KLSAgICAgICAgcmV0dXJuIHNldDsKLSAgICB9KCk7Ci0gICAgcmV0dXJuIGNvZGVj
VHlwZXM7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzdXBwb3J0
c0NvZGVjKFN0cmluZyBjb2RlYykKLXsKLSAgICAvLyBJZiB0aGUgY29kZWMgaXMgbmFtZWQgbGlr
ZSBhIG1pbWV0eXBlIChlZzogdmlkZW8vYXZjKSByZW1vdmUgdGhlICJ2aWRlby8iIHBhcnQuCi0g
ICAgc2l6ZV90IHNsYXNoSW5kZXggPSBjb2RlYy5maW5kKCcvJyk7Ci0gICAgaWYgKHNsYXNoSW5k
ZXggIT0gV1RGOjpub3RGb3VuZCkKLSAgICAgICAgY29kZWMgPSBjb2RlYy5zdWJzdHJpbmcoc2xh
c2hJbmRleCsxKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgcGF0dGVybiA6IGNvZGVjU2V0KCkp
IHsKLSAgICAgICAgYm9vbCBjb2RlY01hdGNoZXNQYXR0ZXJuID0gIWZubWF0Y2gocGF0dGVybi5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpLCBjb2RlYy51dGY4KCkuZGF0YSgpLCAwKTsKLSAgICAgICAg
aWYgKGNvZGVjTWF0Y2hlc1BhdHRlcm4pCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyTVNFOjpzdXBwb3J0c0FsbENvZGVjcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgY29kZWNzKQor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmdldFN1cHBvcnRlZFR5cGVzKEhh
c2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiB0eXBlcykKIHsKLSAgICBm
b3IgKFN0cmluZyBjb2RlYyA6IGNvZGVjcykgewotICAgICAgICBpZiAoIXN1cHBvcnRzQ29kZWMo
Y29kZWMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOworICAgIGF1dG8mIGdzdFJlZ2lzdHJ5U2Nhbm5lciA9IEdzdFJlZ2lzdHJ5U2Nhbm5lck1T
RTo6c2luZ2xldG9uKCk7CisgICAgdHlwZXMgPSBnc3RSZWdpc3RyeVNjYW5uZXIubWltZVR5cGVT
ZXQoKTsKIH0KIAogTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJNU0U6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0
ZXJzJiBwYXJhbWV0ZXJzKQpAQCAtODQyLDE5ICs3MTksMjQgQEAgTWVkaWFQbGF5ZXI6OlN1cHBv
cnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnN1cHBvcnRzVHlwZShjb25z
dCBNZWQKICAgICAvLyBZb3VUdWJlIFRWIHByb3ZpZGVzIGVtcHR5IHR5cGVzIGZvciBzb21lIHZp
ZGVvcyBhbmQgd2Ugd2FudCB0byBiZSBzZWxlY3RlZCBhcyBiZXN0IG1lZGlhIGVuZ2luZSBmb3Ig
dGhlbS4KICAgICBpZiAoY29udGFpbmVyVHlwZS5pc0VtcHR5KCkpIHsKICAgICAgICAgcmVzdWx0
ID0gTWVkaWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVkOworICAgICAgICBHU1RfREVCVUcoIm1pbWUt
dHlwZSBcIiVzXCIgc3VwcG9ydGVkOiAlcyIsIHBhcmFtZXRlcnMudHlwZS5yYXcoKS51dGY4KCku
ZGF0YSgpLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhyZXN1bHQpLnV0ZjgoKS5kYXRhKCkp
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIEdTVF9ERUJVRygiQ2hlY2tp
bmcgbWltZS10eXBlIFwiJXNcIiIsIHBhcmFtZXRlcnMudHlwZS5yYXcoKS51dGY4KCkuZGF0YSgp
KTsKKyAgICBhdXRvJiBnc3RSZWdpc3RyeVNjYW5uZXIgPSBHc3RSZWdpc3RyeVNjYW5uZXJNU0U6
OnNpbmdsZXRvbigpOwogICAgIC8vIFNwZWMgc2F5cyB3ZSBzaG91bGQgbm90IHJldHVybiAicHJv
YmFibHkiIGlmIHRoZSBjb2RlY3Mgc3RyaW5nIGlzIGVtcHR5LgotICAgIGlmIChtaW1lVHlwZUNh
Y2hlKCkuY29udGFpbnMoY29udGFpbmVyVHlwZSkpIHsKKyAgICBpZiAoZ3N0UmVnaXN0cnlTY2Fu
bmVyLnN1cHBvcnRzQ29udGFpbmVyVHlwZShjb250YWluZXJUeXBlKSkgewogICAgICAgICBWZWN0
b3I8U3RyaW5nPiBjb2RlY3MgPSBwYXJhbWV0ZXJzLnR5cGUuY29kZWNzKCk7CiAgICAgICAgIGlm
IChjb2RlY3MuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmVzdWx0ID0gTWVkaWFQbGF5ZXI6Ok1h
eUJlU3VwcG9ydGVkOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBzdXBwb3J0
c0FsbENvZGVjcyhjb2RlY3MpID8gTWVkaWFQbGF5ZXI6OklzU3VwcG9ydGVkIDogTWVkaWFQbGF5
ZXI6OklzTm90U3VwcG9ydGVkOworICAgICAgICAgICAgcmVzdWx0ID0gZ3N0UmVnaXN0cnlTY2Fu
bmVyLnN1cHBvcnRzQWxsQ29kZWNzKGNvZGVjcykgPyBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQg
OiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CiAgICAgfQogCi0gICAgcmV0dXJuIGV4dGVu
ZGVkU3VwcG9ydHNUeXBlKHBhcmFtZXRlcnMsIHJlc3VsdCk7CisgICAgYXV0byBmaW5hbFJlc3Vs
dCA9IGV4dGVuZGVkU3VwcG9ydHNUeXBlKHBhcmFtZXRlcnMsIHJlc3VsdCk7CisgICAgR1NUX0RF
QlVHKCJTdXBwb3J0ZWQ6ICVzIiwgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoZmluYWxSZXN1
bHQpLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBmaW5hbFJlc3VsdDsKIH0KIAogdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om1hcmtFbmRPZlN0cmVhbShNZWRpYVNvdXJj
ZVByaXZhdGU6OkVuZE9mU3RyZWFtU3RhdHVzIHN0YXR1cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5oCmluZGV4IDIyNTdlOWU2ODMw
YWNiMThjNmYwOGY3MTg2YmY3NzU4YjcyNzM1ZDcuLjAyYWExZDE1YzdlMTFiYjdmNjNhOGZkNjky
NDFmNjczNTA3YTJlZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0UuaApAQCAtODIsOSArODIsNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCB0cmFja0RldGVjdGVkKFJlZlB0cjxBcHBlbmRQaXBlbGluZT4sIFJlZlB0cjxXZWJDb3JlOjpU
cmFja1ByaXZhdGVCYXNlPiwgYm9vbCBmaXJzdFRyYWNrRGV0ZWN0ZWQpOwogICAgIHZvaWQgbm90
aWZ5U2Vla05lZWRzRGF0YUZvclRpbWUoY29uc3QgTWVkaWFUaW1lJik7CiAKLSAgICBzdGF0aWMg
Ym9vbCBzdXBwb3J0c0NvZGVjKFN0cmluZyBjb2RlYyk7Ci0gICAgc3RhdGljIGJvb2wgc3VwcG9y
dHNBbGxDb2RlY3MoY29uc3QgVmVjdG9yPFN0cmluZz4mIGNvZGVjcyk7Ci0KICNpZiBFTkFCTEUo
RU5DUllQVEVEX01FRElBKQogICAgIHZvaWQgYXR0ZW1wdFRvRGVjcnlwdFdpdGhJbnN0YW5jZShD
RE1JbnN0YW5jZSYpIGZpbmFsOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYWNhcGFiaWxpdGllcy9NZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhRW5n
aW5lQ29uZmlndXJhdGlvbkZhY3RvcnkuY3BwCmluZGV4IDMyOWUyOTRjYTJmNjAxOWFjYTQ5ZjM5
YTYxMTc4ZGQ1MjY2OTE2NjEuLmM5NDgzMGRmZDFlZDVmYTQzMTk0YTlmZTk5NTQzZWQzMGQ3MTEw
MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhY2FwYWJpbGl0aWVz
L01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3Rv
cnkuY3BwCkBAIC0zOSw2ICszOSwxMCBAQAogI2luY2x1ZGUgIk1lZGlhRW5naW5lQ29uZmlndXJh
dGlvbkZhY3RvcnlDb2NvYS5oIgogI2VuZGlmCiAKKyNpZiBVU0UoR1NUUkVBTUVSKQorI2luY2x1
ZGUgIk1lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlHU3RyZWFtZXIuaCIKKyNlbmRpZgor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBib29sJiBtb2NrRW5hYmxlZCgpCkBAIC01
OCw2ICs2Miw5IEBAIHN0YXRpYyBjb25zdCBGYWN0b3J5VmVjdG9yJiBmYWN0b3JpZXMoKQogICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGYWN0b3J5VmVjdG9yPiBmYWN0b3JpZXMgPSBtYWtlTmV2
ZXJEZXN0cm95ZWQoRmFjdG9yeVZlY3Rvcih7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAg
IHsgJmNyZWF0ZU1lZGlhUGxheWVyRGVjb2RpbmdDb25maWd1cmF0aW9uQ29jb2EsIG51bGxwdHIg
fSwKKyNlbmRpZgorI2lmIFVTRShHU1RSRUFNRVIpCisgICAgICAgIHsgJmNyZWF0ZU1lZGlhUGxh
eWVyRGVjb2RpbmdDb25maWd1cmF0aW9uR1N0cmVhbWVyLCBudWxscHRyIH0sCiAjZW5kaWYKICAg
ICB9KSk7CiAgICAgcmV0dXJuIGZhY3RvcmllczsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>353838</attachid>
            <date>2018-11-05 02:01:52 -0800</date>
            <delta_ts>2019-02-14 06:46:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191191-20181105100150.patch</filename>
            <type>text/plain</type>
            <size>59823</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3Nzk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzNlYTA4M2ZhZmU2MzU1
ODlmNzAwNzhhMWNlMzhkN2YzYmNjMDQ1Ny4uY2E5NzQ3MjYwNTFkMTA0OTg1ZWFlZjdiNDFkY2Fl
ZGVhY2M1MGEzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDE4LTExLTAyICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBEZWNvZGluZyBtZWRpYS1jYXBhYmlsaXRpZXMgY29uZmlndXJhdGlvbiBpbml0aWFsIHN1cHBv
cnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTE5
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggZW5hYmxlcyBiYXNpYyBwbGF0Zm9ybSBwcm9iaW5nIGZvciBHU3RyZWFtZXIgZGVjb2Rl
cnMsCisgICAgICAgIG9wdGlvbmFsbHkgdXNpbmcgSGFyZHdhcmUgZGVjb2RpbmcgY2FwYWJpbGl0
aWVzLiBUaGUgcHJldmlvdXMgY29kZQorICAgICAgICBmb3IgZGVjb2RlcnMvZGVtdXhlcnMgcHJv
YmluZyBwYXJ0aWFsbHkgZHVwbGljYXRlZCBiZXR3ZWVuIHRoZSBNU0UKKyAgICAgICAgcGxheWVy
IGFuZCBpdHMgcGFyZW50IGNsYXNzIHdhcyBtb3ZlZCB0byBhIG5ldyBtb2R1bGUgY2FsbGVkCisg
ICAgICAgIEdzdFJlZ2lzdHJ5U2Nhbm5lci4gVGhlcmUgaXMgb25lIGluc3RhbmNlIG9mIGl0IGZv
ciB0aGUgTVNFIHBsYXllcgorICAgICAgICBhbmQgb25lIGZvciB0aGUgcGFyZW50IGNsYXNzLgor
CisgICAgICAgIFRoZSBzY2FubmVyIGNhbiBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBH
c3RFbGVtZW50IEhhcmR3YXJlCisgICAgICAgIG1ldGFkYXRhIGNsYXNzaWZpZXIgaW4gZGVjb2Rl
cnMgYW5kIHRodXMgYWR2aXNlIHRoZQorICAgICAgICBNZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25G
YWN0b3J5R1N0cmVhbWVyIHRoYXQgaGFyZHdhcmUgZGVjb2RpbmcgaXMKKyAgICAgICAgc3VwcG9y
dGVkIG9yIG5vdC4gVGhpcyBpcyBvbmx5IGEgZmlyc3Qgc3RlcCB0aG91Z2guIFRoZSBzY2FubmVy
CisgICAgICAgIHNob3VsZCBhbHNvIHByb2JhYmx5IGF0dGVtcHQgYSBOVUxMLT5SRUFEWSB0cmFu
c2l0aW9uIG9uIGRlY29kZXJzCisgICAgICAgIHRvIHZhbGlkYXRlIHNwZWNpZmljIGlucHV0IGNh
cHMgYXJlIHN1cHBvcnRlZC4gQXMgdGhpcyBtaWdodAorICAgICAgICByZXF1aXJlIGNoYW5nZXMg
aW4gR1N0cmVhbWVyLCB0aGlzIHBhcnQgb2YgdGhlIHBhdGNoIHdhc24ndAorICAgICAgICBpbmNs
dWRlZC4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIGNvdmVyZWQgYnkgdGhlIGV4aXN0aW5nIG1l
ZGlhIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlOiBOZXcgZmls
ZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOiBBZGQgc3Vw
cG9ydCBmb3IgY29udmVydGluZworICAgICAgICBTdXBwb3J0c1R5cGUgZW51bSB0byBzdHJpbmcu
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaDogRGl0dG8uCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJFbnVtcy5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcDogTW92ZQorICAgICAg
ICBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUgdG8gR3N0UmVnaXN0cnlTY2FubmVy
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24u
aDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dzdFJlZ2lz
dHJ5U2Nhbm5lci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2Fu
bmVyOjpzaW5nbGV0b24pOgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjpH
c3RSZWdpc3RyeVNjYW5uZXIpOiBJbml0aWFsaXplCisgICAgICAgIHN1cHBvcnRlZCBtaW1lLXR5
cGVzIGFuZCBjb2RlY3MgZnJvbSB0aGUgR1N0cmVhbWVyIHJlZ2lzdHJ5LgorICAgICAgICAoV2Vi
Q29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjp+R3N0UmVnaXN0cnlTY2FubmVyKTogRnJlZSB0aGUg
ZWxlbWVudCBmYWN0b3JpZXMuCisgICAgICAgIChXZWJDb3JlOjpHc3RSZWdpc3RyeVNjYW5uZXI6
OmdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZSk6CisgICAgICAgIENoZWNrIHRoZSBp
bnB1dCBjYXBzIGFyZSBzdXBwb3J0ZWQsIG9wdGlvbmFsbHkgdXNpbmcgaGFyZHdhcmUKKyAgICAg
ICAgZGV2aWNlLgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjpmaWxsTWlt
ZVR5cGVTZXRGcm9tQ2Fwc01hcHBpbmcpOgorICAgICAgICBNb3ZlZCBmcm9tIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcnssTVNFfS4KKyAgICAgICAgKFdlYkNvcmU6OkdzdFJlZ2lzdHJ5U2Nh
bm5lcjo6aW5pdGlhbGl6ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlT
Y2FubmVyOjpzdXBwb3J0c0NvZGVjIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpH
c3RSZWdpc3RyeVNjYW5uZXI6OnN1cHBvcnRzQWxsQ29kZWNzIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpHc3RSZWdpc3RyeVNjYW5uZXI6OmlzRGVjb2RpbmdTdXBwb3J0ZWQgY29u
c3QpOiBDaGVjaworICAgICAgICB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBpcyBzdXBwb3J0ZWQu
IEZvciBub3cgaGFyZHdhcmUgc3VwcG9ydCBpcworICAgICAgICBjaGVja2VkIGZvciB2aWRlbyBj
b25maWd1cmF0aW9ucyBvbmx5IGFzIGl0IGlzIHF1aXRlIHVuY29tbW9uCisgICAgICAgIGFueXdh
eSB0byBoYXZlIGhhcmR3YXJlLWVuYWJsZWQgYXVkaW8gZGVjb2RlcnMuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dzdFJlZ2lzdHJ5U2Nhbm5lci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdzdFJlZ2lzdHJ5U2Nhbm5lcjo6bWltZVR5cGVTZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjpzdXBwb3J0c0NvbnRhaW5lclR5cGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjpSZWdpc3RyeUxvb2t1
cFJlc3VsdDo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlHU3RyZWFtZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU1lZGlhUGxheWVyRGVjb2RpbmdDb25m
aWd1cmF0aW9uR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeUdTdHJlYW1lci5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmNwcDoKKyAgICAgICAgUmVseSBvbiBuZXcgR3N0UmVnaXN0cnlTY2FubmVyIGFuZCBh
ZGQgc29tZSBkZWJ1Z2dpbmcgbWFjcm9zLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpnZXRTdXBwb3J0ZWRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzVHlwZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHA6IERpdHRvLiBB
bHNvCisgICAgICAgIHBsdWcgcXRkZW11eCBmb3IgQUFDIGNvbnRhaW5lcnMsIHRoaXMgaXMgYW4g
ZXhwbGljaXQgY29uc2VxdWVuY2UKKyAgICAgICAgb2YgZmluZXItZ3JhaW5lZCBjb2RlY3MgcHJv
YmluZy4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpBcHBlbmRQaXBlbGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6cGFyc2VEZW11eGVyU3JjUGFkQ2Fw
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Hc3RSZWdpc3Ry
eVNjYW5uZXJNU0UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdzdFJlZ2lzdHJ5U2Nh
bm5lck1TRTo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdzdFJlZ2lzdHJ5U2Nhbm5l
ck1TRTo6R3N0UmVnaXN0cnlTY2FubmVyTVNFKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvbXNlL0dzdFJlZ2lzdHJ5U2Nhbm5lck1TRS5oOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRS5jcHA6CisgICAgICAgIFJlbHkgb24gbmV3IEdzdFJlZ2lzdHJ5U2Nhbm5lciBhbmQg
YWRkIHNvbWUgZGVidWdnaW5nIG1hY3Jvcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzdXBwb3J0c1R5cGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFLmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFF
bmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmYWN0b3Jp
ZXMpOiBHU3RyZWFtZXIgc3VwcG9ydC4KKwogMjAxOC0xMS0wNSAgUGhpbGlwcGUgTm9ybWFuZCAg
PHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl0gTW92ZSBlbGVtZW50
cyByZWdpc3RyYXRpb24gdG8gR1N0cmVhbWVyQ29tbW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9H
U3RyZWFtZXIuY21ha2UKaW5kZXggZDlhMWZkYjMwYzQyMGYwOTgxYmZlZWY0ZGNkZjRjOTZhZmRk
YTI1ZC4uYmEyNTdhZGU2OGY4ZGZkYmEwNTQ1ZDFiMTJhOTZmMmQyZTg1NWY1OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQpAQCAtMTAsNyArMTAsOSBAQCBpZiAoRU5B
QkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8pCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR3N0QWxsb2NhdG9yRmFzdE1hbGxvYy5jcHAKKyAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dzdFJlZ2lzdHJ5U2Nhbm5lci5jcHAKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuY3Bw
CisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYUVuZ2luZUNvbmZpZ3Vy
YXRpb25GYWN0b3J5R1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmNw
cApAQCAtMjYsNiArMjgsNyBAQCBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8p
CiAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGlu
ZS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9HU3RyZWFtZXJN
ZWRpYURlc2NyaXB0aW9uLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
bXNlL0dzdFJlZ2lzdHJ5U2Nhbm5lck1TRS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFt
ZXJNU0UuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFT
b3VyY2VHU3RyZWFtZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9NZWRpYVBsYXllci5jcHAKaW5kZXggZTdlOTA1MmI4MGQxMzdjNmI3ZGViMDRjNWNkZTBhYTYx
ZTMxOTU2Zi4uMTgwZmVjODc2MGFhYmY1ZDUyODJlMTNmMTAxYmY0Mjg4ZmQzZjU4ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcApAQCAt
MTYwMyw2ICsxNjAzLDIwIEBAIFN0cmluZyBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhNZWRp
YVBsYXllckVudW1zOjpQcmVsb2FkIGVudW1lcmF0aW9uVmFsdWUpCiAgICAgcmV0dXJuIHZhbHVl
c1tzdGF0aWNfY2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXTsKIH0KIAorU3RyaW5nIGNv
bnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBl
bnVtZXJhdGlvblZhbHVlKQoreworICAgIHN0YXRpYyBjb25zdCBOZXZlckRlc3Ryb3llZDxTdHJp
bmc+IHZhbHVlc1tdID0geworICAgICAgICBNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiSXNOb3RT
dXBwb3J0ZWQiKSwKKyAgICAgICAgTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIklzU3VwcG9ydGVk
IiksCisgICAgICAgIE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJNYXlCZVN1cHBvcnRlZCIpLAor
ICAgIH07CisgICAgc3RhdGljX2Fzc2VydCghc3RhdGljX2Nhc3Q8c2l6ZV90PihNZWRpYVBsYXll
ckVudW1zOjpJc05vdFN1cHBvcnRlZCksICJNZWRpYVBsYXllckVudW1zOjpJc05vdFN1cHBvcnRl
ZCBpcyBub3QgMCBhcyBleHBlY3RlZCIpOworICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8
c2l6ZV90PihNZWRpYVBsYXllckVudW1zOjpJc1N1cHBvcnRlZCkgPT0gMSwgIk1lZGlhUGxheWVy
RW51bXM6OklzU3VwcG9ydGVkIGlzIG5vdCAxIGFzIGV4cGVjdGVkIik7CisgICAgc3RhdGljX2Fz
c2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KE1lZGlhUGxheWVyRW51bXM6Ok1heUJlU3VwcG9ydGVk
KSA9PSAyLCAiTWVkaWFQbGF5ZXJFbnVtczo6TWF5QmVTdXBwb3J0ZWQgaXMgbm90IDIgYXMgZXhw
ZWN0ZWQiKTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnVtZXJhdGlvblZhbHVl
KSA8IFdURl9BUlJBWV9MRU5HVEgodmFsdWVzKSk7CisgICAgcmV0dXJuIHZhbHVlc1tzdGF0aWNf
Y2FzdDxzaXplX3Q+KGVudW1lcmF0aW9uVmFsdWUpXTsKK30KKwogfQogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCmluZGV4IDAxZGQ5
NjVlOWE2ZDZjNWZmZDI2NzlhMzFmNWUxYzUwODUyNjgzYTMuLmRhMjEzMGYwMTA0YTNlZmFiNmNj
MzU5OWNmNzVjNTg5NTc2M2FmZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuaApAQCAtMjUyLDggKzI1Miw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IGludmFsaWRhdGUoKTsKIAogICAgIC8vIE1lZGlhIGVuZ2luZSBzdXBwb3J0LgotICAgIGVudW0g
U3VwcG9ydHNUeXBlIHsgSXNOb3RTdXBwb3J0ZWQsIElzU3VwcG9ydGVkLCBNYXlCZVN1cHBvcnRl
ZCB9OwotICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShj
b25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJik7CisgICAgdXNpbmcgTWVkaWFQbGF5
ZXJFbnVtczo6U3VwcG9ydHNUeXBlOworICAgIHN0YXRpYyBTdXBwb3J0c1R5cGUgc3VwcG9ydHNU
eXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmKTsKICAgICBzdGF0aWMgdm9p
ZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVI
YXNoPiYpOwogICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CiAgICAgc3RhdGljIEhhc2hT
ZXQ8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4gb3JpZ2luc0luTWVkaWFDYWNoZShjb25zdCBTdHJp
bmcmIHBhdGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5ZXJFbnVtcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXJFbnVtcy5oCmluZGV4IDA2ZjBjY2QyOGQ2YWI5ZjQzZjYxYmVmMjdlYjFmMzBiZGU2
MmRkNDYuLjk1MGUwZWQyODdlYjMyMWE0OWE1NDIzZTYzMTMxYWEwOTI3MGNiNjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyRW51bXMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllckVudW1zLmgK
QEAgLTM2LDYgKzM2LDcgQEAgcHVibGljOgogICAgIGVudW0gTW92aWVMb2FkVHlwZSB7IFVua25v
d24sIERvd25sb2FkLCBTdG9yZWRTdHJlYW0sIExpdmVTdHJlYW0gfTsKICAgICBlbnVtIFByZWxv
YWQgeyBOb25lLCBNZXRhRGF0YSwgQXV0byB9OwogICAgIGVudW0gVmlkZW9HcmF2aXR5IHsgVmlk
ZW9HcmF2aXR5UmVzaXplLCBWaWRlb0dyYXZpdHlSZXNpemVBc3BlY3QsIFZpZGVvR3Jhdml0eVJl
c2l6ZUFzcGVjdEZpbGwgfTsKKyAgICBlbnVtIFN1cHBvcnRzVHlwZSB7IElzTm90U3VwcG9ydGVk
LCBJc1N1cHBvcnRlZCwgTWF5QmVTdXBwb3J0ZWQgfTsKICAgICBlbnVtIHsKICAgICAgICAgVmlk
ZW9GdWxsc2NyZWVuTW9kZU5vbmUgPSAwLAogICAgICAgICBWaWRlb0Z1bGxzY3JlZW5Nb2RlU3Rh
bmRhcmQgPSAxIDw8IDAsCkBAIC00Nyw2ICs0OCw3IEBAIHB1YmxpYzoKIFdURjo6U3RyaW5nIGNv
bnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKE1lZGlhUGxheWVyRW51bXM6OlJlYWR5U3RhdGUpOwog
V1RGOjpTdHJpbmcgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoTWVkaWFQbGF5ZXJFbnVtczo6
TmV0d29ya1N0YXRlKTsKIFdURjo6U3RyaW5nIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKE1l
ZGlhUGxheWVyRW51bXM6OlByZWxvYWQpOworV1RGOjpTdHJpbmcgY29udmVydEVudW1lcmF0aW9u
VG9TdHJpbmcoTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCmluZGV4IDUyNjQ5YmJhN2Fi
OGM0ZDlhYjc1MzlhZTMyOTk2NDgzODM4MWZjOTkuLmM2OGFhOTZhMjIzYzkyNTg3MzYyYTc4YzEw
ZGQ3NGM0OTE4M2QxZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCkBAIC0zMDEsMTYg
KzMwMSw2IEBAIHVpbnQ2NF90IHRvR3N0VW5zaWduZWQ2NFRpbWUoY29uc3QgTWVkaWFUaW1lJiBt
ZWRpYVRpbWUpCiAgICAgcmV0dXJuIHRpbWUudGltZVZhbHVlKCk7CiB9CiAKLWJvb2wgZ3N0UmVn
aXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKEdMaXN0KiBlbGVtZW50RmFjdG9yaWVzLCBjb25z
dCBjaGFyKiBjYXBzU3RyaW5nKQotewotICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0
R1JlZihnc3RfY2Fwc19mcm9tX3N0cmluZyhjYXBzU3RyaW5nKSk7Ci0gICAgR0xpc3QqIGNhbmRp
ZGF0ZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZmlsdGVyKGVsZW1lbnRGYWN0b3JpZXMs
IGNhcHMuZ2V0KCksIEdTVF9QQURfU0lOSywgZmFsc2UpOwotICAgIGJvb2wgcmVzdWx0ID0gY2Fu
ZGlkYXRlczsKLQotICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUoY2FuZGlkYXRlcyk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogc3RhdGljIHZvaWQgc2ltcGxlQnVzTWVzc2FnZUNh
bGxiYWNrKEdzdEJ1cyosIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIEdzdEJpbiogcGlwZWxpbmUpCiB7
CiAgICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVy
Q29tbW9uLmgKaW5kZXggMTEwYjZlZTNiOTNjM2M1ZGE4ZjU5NmNkMDlhMGQ4NDVkMWQyZTA0YS4u
NzE2MDViZjMwMjlkNzdjNTdiNGJhOGE3OGNjZmQxM2QzNDczZTQ4MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFt
ZXJDb21tb24uaApAQCAtMTE3LDcgKzExNyw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzVmFs
aWQgeyBmYWxzZSB9OwogfTsKIAotYm9vbCBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5
cGUoR0xpc3QqIGVsZW1lbnRGYWN0b3JpZXMsIGNvbnN0IGNoYXIqIGNhcHNTdHJpbmcpOwogdm9p
ZCBjb25uZWN0U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKEdzdEVsZW1lbnQgKnBpcGVsaW5lKTsK
IHZvaWQgZGlzY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhHc3RFbGVtZW50ICpwaXBl
bGluZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9Hc3RSZWdpc3RyeVNjYW5uZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dzdFJlZ2lzdHJ5U2Nhbm5lci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTE3
YWMyMDVjZjc1NDQxNzFlYjBlNjgyYjc4M2FhMjM1Y2NjOGVkYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9Hc3RSZWdpc3RyeVNj
YW5uZXIuY3BwCkBAIC0wLDAgKzEsMzMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEln
YWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFp
bnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSKQorI2luY2x1
ZGUgIkdzdFJlZ2lzdHJ5U2Nhbm5lci5oIgorCisjaW5jbHVkZSAiQ29udGVudFR5cGUuaCIKKyNp
bmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8Zm5tYXRjaC5oPgorI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dTVF9ERUJV
R19DQVRFR09SWV9TVEFUSUMod2Via2l0X21lZGlhX2dzdF9yZWdpc3RyeV9zY2FubmVyX2RlYnVn
KTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9tZWRpYV9nc3RfcmVnaXN0cnlfc2Nh
bm5lcl9kZWJ1ZworCitHc3RSZWdpc3RyeVNjYW5uZXImIEdzdFJlZ2lzdHJ5U2Nhbm5lcjo6c2lu
Z2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8R3N0UmVnaXN0cnlTY2FubmVy
PiBzaGFyZWRJbnN0YW5jZTsKKyAgICByZXR1cm4gc2hhcmVkSW5zdGFuY2U7Cit9CisKK0dzdFJl
Z2lzdHJ5U2Nhbm5lcjo6R3N0UmVnaXN0cnlTY2FubmVyKGJvb2wgaXNNZWRpYVNvdXJjZSkKKyAg
ICA6IG1faXNNZWRpYVNvdXJjZShpc01lZGlhU291cmNlKQoreworICAgIEdTVF9ERUJVR19DQVRF
R09SWV9JTklUKHdlYmtpdF9tZWRpYV9nc3RfcmVnaXN0cnlfc2Nhbm5lcl9kZWJ1ZywgIndlYmtp
dHJlZ2lzdHJ5c2Nhbm5lciIsIDAsICJXZWJLaXQgR1N0cmVhbWVyIHJlZ2lzdHJ5IHNjYW5uZXIi
KTsKKyAgICBtX2F1ZGlvRGVjb2RlckZhY3RvcmllcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlz
dF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxF
TUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQVVESU8sIEdTVF9SQU5LX01BUkdJTkFMKTsKKyAgICBt
X2F1ZGlvUGFyc2VyRmFjdG9yaWVzID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2dldF9lbGVt
ZW50cyhHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfUEFSU0VSIHwgR1NUX0VMRU1FTlRfRkFDVE9S
WV9UWVBFX01FRElBX0FVRElPLCBHU1RfUkFOS19OT05FKTsKKyAgICBtX3ZpZGVvRGVjb2RlckZh
Y3RvcmllcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1F
TlRfRkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFf
VklERU8sIEdTVF9SQU5LX01BUkdJTkFMKTsKKyAgICBtX3ZpZGVvUGFyc2VyRmFjdG9yaWVzID0g
Z3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2dldF9lbGVtZW50cyhHU1RfRUxFTUVOVF9GQUNUT1JZ
X1RZUEVfUEFSU0VSIHwgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX1ZJREVPLCBHU1Rf
UkFOS19NQVJHSU5BTCk7CisgICAgbV9kZW11eGVyRmFjdG9yaWVzID0gZ3N0X2VsZW1lbnRfZmFj
dG9yeV9saXN0X2dldF9lbGVtZW50cyhHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfREVNVVhFUiwg
R1NUX1JBTktfTUFSR0lOQUwpOworCisgICAgaW5pdGlhbGl6ZSgpOworI2lmbmRlZiBHU1RfRElT
QUJMRV9HU1RfREVCVUcKKyAgICBHU1RfREVCVUcoIiVzIHJlZ2lzdHJ5IHNjYW5uZXIgaW5pdGlh
bGl6ZWQiLCBtX2lzTWVkaWFTb3VyY2UgPyAiTVNFIjoibm9uLU1TRSIpOworICAgIGZvciAoYXV0
byYgbWltZVR5cGUgOiBtX21pbWVUeXBlU2V0KQorICAgICAgICBHU1RfREVCVUcoIk1pbWUtdHlw
ZSByZWdpc3RlcmVkOiAlcyIsIG1pbWVUeXBlLnV0ZjgoKS5kYXRhKCkpOworICAgIGZvciAoYXV0
byYgaXRlbSA6IG1fY29kZWNNYXApCisgICAgICAgIEdTVF9ERUJVRygiJXMgY29kZWMgcGF0dGVy
biByZWdpc3RlcmVkOiAlcyIsIGl0ZW0udmFsdWUgPyAiSGFyZHdhcmUiOiJTb2Z0d2FyZSIsIGl0
ZW0ua2V5LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCit9CisKK0dzdFJlZ2lzdHJ5
U2Nhbm5lcjo6fkdzdFJlZ2lzdHJ5U2Nhbm5lcigpCit7CisgICAgZ3N0X3BsdWdpbl9mZWF0dXJl
X2xpc3RfZnJlZShtX2F1ZGlvRGVjb2RlckZhY3Rvcmllcyk7CisgICAgZ3N0X3BsdWdpbl9mZWF0
dXJlX2xpc3RfZnJlZShtX2F1ZGlvUGFyc2VyRmFjdG9yaWVzKTsKKyAgICBnc3RfcGx1Z2luX2Zl
YXR1cmVfbGlzdF9mcmVlKG1fdmlkZW9EZWNvZGVyRmFjdG9yaWVzKTsKKyAgICBnc3RfcGx1Z2lu
X2ZlYXR1cmVfbGlzdF9mcmVlKG1fdmlkZW9QYXJzZXJGYWN0b3JpZXMpOworICAgIGdzdF9wbHVn
aW5fZmVhdHVyZV9saXN0X2ZyZWUobV9kZW11eGVyRmFjdG9yaWVzKTsKK30KKworR3N0UmVnaXN0
cnlTY2FubmVyOjpSZWdpc3RyeUxvb2t1cFJlc3VsdCBHc3RSZWdpc3RyeVNjYW5uZXI6OmdzdFJl
Z2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShHTGlzdCogZWxlbWVudEZhY3RvcmllcywgY29u
c3QgY2hhciogY2Fwc1N0cmluZywgYm9vbCBjaGVja0hhcmR3YXJlQ2xhc3NpZmllcikKK3sKKyAg
ICBHUmVmUHRyPEdzdENhcHM+IGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfZnJvbV9zdHJpbmco
Y2Fwc1N0cmluZykpOworICAgIEdMaXN0KiBjYW5kaWRhdGVzID0gZ3N0X2VsZW1lbnRfZmFjdG9y
eV9saXN0X2ZpbHRlcihlbGVtZW50RmFjdG9yaWVzLCBjYXBzLmdldCgpLCBHU1RfUEFEX1NJTkss
IGZhbHNlKTsKKyAgICBib29sIHN1cHBvcnRlZCA9IGNhbmRpZGF0ZXM7CisgICAgYm9vbCB1c2lu
Z0hhcmR3YXJlID0gZmFsc2U7CisKKyAgICBpZiAoY2hlY2tIYXJkd2FyZUNsYXNzaWZpZXIpIHsK
KyAgICAgICAgZm9yIChHTGlzdCogZmFjdG9yaWVzID0gY2FuZGlkYXRlczsgZmFjdG9yaWVzICE9
IG51bGxwdHI7IGZhY3RvcmllcyA9IGdfbGlzdF9uZXh0KGZhY3RvcmllcykpIHsKKyAgICAgICAg
ICAgIGF1dG8qIGZhY3RvcnkgPSByZWludGVycHJldF9jYXN0PEdzdEVsZW1lbnRGYWN0b3J5Kj4o
ZmFjdG9yaWVzLT5kYXRhKTsKKyAgICAgICAgICAgIFN0cmluZyBtZXRhZGF0YSA9IGdzdF9lbGVt
ZW50X2ZhY3RvcnlfZ2V0X21ldGFkYXRhKGZhY3RvcnksIEdTVF9FTEVNRU5UX01FVEFEQVRBX0tM
QVNTKTsKKyAgICAgICAgICAgIGF1dG8gY29tcG9uZW50cyA9IG1ldGFkYXRhLnNwbGl0KCcvJyk7
CisgICAgICAgICAgICBpZiAoY29tcG9uZW50cy5jb250YWlucygiSGFyZHdhcmUiKSkgeworICAg
ICAgICAgICAgICAgIHVzaW5nSGFyZHdhcmUgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZ3N0X3BsdWdpbl9mZWF0
dXJlX2xpc3RfZnJlZShjYW5kaWRhdGVzKTsKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVH
CisgICAgY29uc3QgY2hhciogZWxlbWVudFR5cGUgPSAiIjsKKyAgICBpZiAoZWxlbWVudEZhY3Rv
cmllcyA9PSBtX2F1ZGlvUGFyc2VyRmFjdG9yaWVzKQorICAgICAgICBlbGVtZW50VHlwZSA9ICJB
dWRpbyBwYXJzZXIiOworICAgIGVsc2UgaWYgKGVsZW1lbnRGYWN0b3JpZXMgPT0gbV9hdWRpb0Rl
Y29kZXJGYWN0b3JpZXMpCisgICAgICAgIGVsZW1lbnRUeXBlID0gIkF1ZGlvIGRlY29kZXIiOwor
ICAgIGVsc2UgaWYgKGVsZW1lbnRGYWN0b3JpZXMgPT0gbV92aWRlb1BhcnNlckZhY3RvcmllcykK
KyAgICAgICAgZWxlbWVudFR5cGUgPSAiVmlkZW8gcGFyc2VyIjsKKyAgICBlbHNlIGlmIChlbGVt
ZW50RmFjdG9yaWVzID09IG1fdmlkZW9EZWNvZGVyRmFjdG9yaWVzKQorICAgICAgICBlbGVtZW50
VHlwZSA9ICJWaWRlbyBkZWNvZGVyIjsKKyAgICBlbHNlIGlmIChlbGVtZW50RmFjdG9yaWVzID09
IG1fZGVtdXhlckZhY3RvcmllcykKKyAgICAgICAgZWxlbWVudFR5cGUgPSAiRGVtdXhlciI7Cisg
ICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBHU1RfTE9HKCIlcyBs
b29rdXAgcmVzdWx0IGZvciBjYXBzICUiIEdTVF9QVFJfRk9STUFUICIgOiBzdXBwb3J0ZWQ9JXMs
IHVzaW5nSGFyZHdhcmU9JXMiLCBlbGVtZW50VHlwZSwgY2Fwcy5nZXQoKSwgYm9vbEZvclByaW50
aW5nKHN1cHBvcnRlZCksIGJvb2xGb3JQcmludGluZyh1c2luZ0hhcmR3YXJlKSk7CisjZW5kaWYK
KyAgICByZXR1cm4gR3N0UmVnaXN0cnlTY2FubmVyOjpSZWdpc3RyeUxvb2t1cFJlc3VsdCB7IHN1
cHBvcnRlZCwgdXNpbmdIYXJkd2FyZSB9OworfQorCit2b2lkIEdzdFJlZ2lzdHJ5U2Nhbm5lcjo6
ZmlsbE1pbWVUeXBlU2V0RnJvbUNhcHNNYXBwaW5nKFZlY3RvcjxHc3RDYXBzV2ViS2l0TWFwcGlu
Zz4mIG1hcHBpbmcpCit7CisgICAgZm9yIChhdXRvJiBjdXJyZW50IDogbWFwcGluZykgeworICAg
ICAgICBHTGlzdCogZmFjdG9yaWVzOworICAgICAgICBzd2l0Y2ggKGN1cnJlbnQuZWxlbWVudFR5
cGUpIHsKKyAgICAgICAgY2FzZSBEZW11eGVyOgorICAgICAgICAgICAgZmFjdG9yaWVzID0gbV9k
ZW11eGVyRmFjdG9yaWVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXVkaW9E
ZWNvZGVyOgorICAgICAgICAgICAgZmFjdG9yaWVzID0gbV9hdWRpb0RlY29kZXJGYWN0b3JpZXM7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWaWRlb0RlY29kZXI6CisgICAgICAg
ICAgICBmYWN0b3JpZXMgPSBtX3ZpZGVvRGVjb2RlckZhY3RvcmllczsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1l
ZGlhVHlwZShmYWN0b3JpZXMsIGN1cnJlbnQuY2Fwc1N0cmluZykpIHsKKyAgICAgICAgICAgIGlm
ICghY3VycmVudC53ZWJraXRDb2RlY1BhdHRlcm5zLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgIGZvciAoY29uc3QgYXV0byYgcGF0dGVybiA6IGN1cnJlbnQud2Via2l0Q29kZWNQYXR0ZXJu
cykKKyAgICAgICAgICAgICAgICAgICAgbV9jb2RlY01hcC5hZGQocGF0dGVybiwgZmFsc2UpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFjdXJyZW50LndlYmtpdE1pbWVUeXBlcy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG1pbWVUeXBlIDog
Y3VycmVudC53ZWJraXRNaW1lVHlwZXMpCisgICAgICAgICAgICAgICAgICAgIG1fbWltZVR5cGVT
ZXQuYWRkKG1pbWVUeXBlKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1f
bWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZyhjdXJyZW50LmNhcHNTdHJpbmcpKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBHc3RSZWdpc3RyeVNjYW5uZXI6OmluaXRpYWxpemUoKQor
eworICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUobV9hdWRpb0RlY29k
ZXJGYWN0b3JpZXMsICJhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTQiKSkgeworICAgICAg
ICBtX21pbWVUeXBlU2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL2FhYyIpKTsKKyAgICAgICAg
bV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9tcDQiKSk7CisgICAgICAgIG1f
bWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8veC1tNGEiKSk7CisgICAgICAgIG1f
Y29kZWNNYXAuYWRkKEF0b21pY1N0cmluZygibXBlZyIpLCBmYWxzZSk7CisgICAgICAgIG1fY29k
ZWNNYXAuYWRkKEF0b21pY1N0cmluZygibXA0YSoiKSwgZmFsc2UpOworICAgIH0KKworICAgIGF1
dG8gb3B1c1N1cHBvcnRlZCA9IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShtX2F1
ZGlvRGVjb2RlckZhY3RvcmllcywgImF1ZGlvL3gtb3B1cyIpOworICAgIGlmIChvcHVzU3VwcG9y
dGVkICYmICghbV9pc01lZGlhU291cmNlIHx8IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlh
VHlwZShtX2F1ZGlvUGFyc2VyRmFjdG9yaWVzLCAiYXVkaW8veC1vcHVzIikpKSB7CisgICAgICAg
IG1fbWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vb3B1cyIpKTsKKyAgICAgICAg
bV9jb2RlY01hcC5hZGQoQXRvbWljU3RyaW5nKCJvcHVzIiksIGZhbHNlKTsKKyAgICAgICAgbV9j
b2RlY01hcC5hZGQoQXRvbWljU3RyaW5nKCJ4LW9wdXMiKSwgZmFsc2UpOworICAgIH0KKworICAg
IGF1dG8gdm9yYmlzU3VwcG9ydGVkID0gZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBl
KG1fYXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAiYXVkaW8veC12b3JiaXMiKTsKKyAgICBpZiAodm9y
YmlzU3VwcG9ydGVkICYmICghbV9pc01lZGlhU291cmNlIHx8IGdzdFJlZ2lzdHJ5SGFzRWxlbWVu
dEZvck1lZGlhVHlwZShtX2F1ZGlvUGFyc2VyRmFjdG9yaWVzLCAiYXVkaW8veC12b3JiaXMiKSkp
IHsKKyAgICAgICAgbV9jb2RlY01hcC5hZGQoQXRvbWljU3RyaW5nKCJ2b3JiaXMiKSwgZmFsc2Up
OworICAgICAgICBtX2NvZGVjTWFwLmFkZChBdG9taWNTdHJpbmcoIngtdm9yYmlzIiksIGZhbHNl
KTsKKyAgICB9CisKKyAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKG1f
ZGVtdXhlckZhY3RvcmllcywgInZpZGVvL3gtbWF0cm9za2EiKSkgeworICAgICAgICBhdXRvIHZw
OERlY29kZXJBdmFpbGFibGUgPSBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUobV92
aWRlb0RlY29kZXJGYWN0b3JpZXMsICJ2aWRlby94LXZwOCIsIHRydWUpOworICAgICAgICBhdXRv
IHZwOURlY29kZXJBdmFpbGFibGUgPSBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUo
bV92aWRlb0RlY29kZXJGYWN0b3JpZXMsICJ2aWRlby94LXZwOSIsIHRydWUpOworCisgICAgICAg
IGlmICh2cDhEZWNvZGVyQXZhaWxhYmxlIHx8IHZwOURlY29kZXJBdmFpbGFibGUpCisgICAgICAg
ICAgICBtX21pbWVUeXBlU2V0LmFkZChBdG9taWNTdHJpbmcoInZpZGVvL3dlYm0iKSk7CisKKyAg
ICAgICAgaWYgKHZwOERlY29kZXJBdmFpbGFibGUpIHsKKyAgICAgICAgICAgIG1fY29kZWNNYXAu
YWRkKEF0b21pY1N0cmluZygidnA4IiksIHZwOERlY29kZXJBdmFpbGFibGUudXNpbmdIYXJkd2Fy
ZSk7CisgICAgICAgICAgICBtX2NvZGVjTWFwLmFkZChBdG9taWNTdHJpbmcoIngtdnA4IiksIHZw
OERlY29kZXJBdmFpbGFibGUudXNpbmdIYXJkd2FyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHZwOURlY29kZXJBdmFpbGFibGUpIHsKKyAgICAgICAgICAgIG1fY29kZWNNYXAuYWRkKEF0b21p
Y1N0cmluZygidnA5IiksIHZwOURlY29kZXJBdmFpbGFibGUudXNpbmdIYXJkd2FyZSk7CisgICAg
ICAgICAgICBtX2NvZGVjTWFwLmFkZChBdG9taWNTdHJpbmcoIngtdnA5IiksIHZwOURlY29kZXJB
dmFpbGFibGUudXNpbmdIYXJkd2FyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wdXNTdXBw
b3J0ZWQpCisgICAgICAgICAgICBtX21pbWVUeXBlU2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlv
L3dlYm0iKSk7CisgICAgfQorCisgICAgYXV0byBoMjY0RGVjb2RlckF2YWlsYWJsZSA9IGdzdFJl
Z2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShtX3ZpZGVvRGVjb2RlckZhY3RvcmllcywgInZp
ZGVvL3gtaDI2NCwgcHJvZmlsZT0oc3RyaW5nKXsgY29uc3RyYWluZWQtYmFzZWxpbmUsIGJhc2Vs
aW5lLCBoaWdoIH0iLCB0cnVlKTsKKyAgICBpZiAoaDI2NERlY29kZXJBdmFpbGFibGUgJiYgKCFt
X2lzTWVkaWFTb3VyY2UgfHwgZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKG1fdmlk
ZW9QYXJzZXJGYWN0b3JpZXMsICJ2aWRlby94LWgyNjQiKSkpIHsKKyAgICAgICAgbV9taW1lVHlw
ZVNldC5hZGQoQXRvbWljU3RyaW5nKCJ2aWRlby9tcDQiKSk7CisgICAgICAgIG1fbWltZVR5cGVT
ZXQuYWRkKEF0b21pY1N0cmluZygidmlkZW8veC1tNHYiKSk7CisgICAgICAgIG1fY29kZWNNYXAu
YWRkKEF0b21pY1N0cmluZygieC1oMjY0IiksIGgyNjREZWNvZGVyQXZhaWxhYmxlLnVzaW5nSGFy
ZHdhcmUpOworICAgICAgICBtX2NvZGVjTWFwLmFkZChBdG9taWNTdHJpbmcoImF2YyoiKSwgaDI2
NERlY29kZXJBdmFpbGFibGUudXNpbmdIYXJkd2FyZSk7CisgICAgICAgIG1fY29kZWNNYXAuYWRk
KEF0b21pY1N0cmluZygibXA0dioiKSwgaDI2NERlY29kZXJBdmFpbGFibGUudXNpbmdIYXJkd2Fy
ZSk7CisgICAgfQorCisgICAgaWYgKG1faXNNZWRpYVNvdXJjZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gVGhlIG1pbWUtdHlwZXMgaW5pdGlhbGl6ZWQgYmVsb3cgYXJlIG5vdCBzdXBwb3J0
ZWQgYnkgdGhlIE1TRSBiYWNrZW5kLgorCisgICAgVmVjdG9yPEdzdENhcHNXZWJLaXRNYXBwaW5n
PiBtYXBwaW5nID0geworICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8vbWlkaSIsIHsiYXVk
aW8vbWlkaSIsICJhdWRpby9yaWZmLW1pZGkifSwgeyB9fSwKKyAgICAgICAge0F1ZGlvRGVjb2Rl
ciwgImF1ZGlvL3gtYWMzIiwgeyB9LCB7IH19LAorICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVk
aW8veC1kdHMiLCB7IH0sIHsgfX0sCisgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LWVh
YzMiLCB7ImF1ZGlvL3gtYWMzIn0sIHsgfX0sCisgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRp
by94LWZsYWMiLCB7ImF1ZGlvL3gtZmxhYyIsICJhdWRpby9mbGFjIn0sIHsgfX0sCisgICAgICAg
IHtBdWRpb0RlY29kZXIsICJhdWRpby94LXNiYyIsIHsgfSwgeyB9fSwKKyAgICAgICAge0F1ZGlv
RGVjb2RlciwgImF1ZGlvL3gtc2lkIiwgeyB9LCB7IH19LAorICAgICAgICB7QXVkaW9EZWNvZGVy
LCAiYXVkaW8veC1zcGVleCIsIHsiYXVkaW8vc3BlZXgiLCAiYXVkaW8veC1zcGVleCJ9LCB7IH19
LAorICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8veC13YXZwYWNrIiwgeyJhdWRpby94LXdh
dnBhY2sifSwgeyB9fSwKKyAgICAgICAge1ZpZGVvRGVjb2RlciwgInZpZGVvL21wZWcsIG1wZWd2
ZXJzaW9uPShpbnQpezEsMn0sIHN5c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZSIsIHsidmlkZW8v
bXBlZyJ9LCB7Im1wZWcifX0sCisgICAgICAgIHtWaWRlb0RlY29kZXIsICJ2aWRlby9tcGVndHMi
LCB7IH0sIHsgfX0sCisgICAgICAgIHtWaWRlb0RlY29kZXIsICJ2aWRlby94LWRpcmFjIiwgeyB9
LCB7IH19LAorICAgICAgICB7VmlkZW9EZWNvZGVyLCAidmlkZW8veC1mbGFzaC12aWRlbyIsIHsi
dmlkZW8vZmx2IiwgInZpZGVvL3gtZmx2In0sIHsgfX0sCisgICAgICAgIHtWaWRlb0RlY29kZXIs
ICJ2aWRlby94LWgyNjMiLCB7IH0sIHsgfX0sCisgICAgICAgIHtWaWRlb0RlY29kZXIsICJ2aWRl
by94LW1zdmlkZW9jb2RlYyIsIHsidmlkZW8veC1tc3ZpZGVvIn0sIHsgfX0sCisgICAgICAgIHtE
ZW11eGVyLCAiYXBwbGljYXRpb24vdm5kLnJuLXJlYWxtZWRpYSIsIHsgfSwgeyB9fSwKKyAgICAg
ICAge0RlbXV4ZXIsICJhcHBsaWNhdGlvbi94LTNncCIsIHsgfSwgeyB9fSwKKyAgICAgICAge0Rl
bXV4ZXIsICJhcHBsaWNhdGlvbi94LWhscyIsIHsiYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1
cmwiLCAiYXBwbGljYXRpb24veC1tcGVndXJsIn0sIHsgfX0sCisgICAgICAgIHtEZW11eGVyLCAi
YXBwbGljYXRpb24veC1wbi1yZWFsYXVkaW8iLCB7IH0sIHsgfX0sCisgICAgICAgIHtEZW11eGVy
LCAiYXVkaW8veC1haWZmIiwgeyB9LCB7IH19LAorICAgICAgICB7RGVtdXhlciwgImF1ZGlvL3gt
d2F2IiwgeyJhdWRpby94LXdhdiIsICJhdWRpby93YXYiLCAiYXVkaW8vdm5kLndhdmUifSwgeyIx
In19LAorICAgICAgICB7RGVtdXhlciwgInZpZGVvL3F1aWNrdGltZSIsIHsgfSwgeyB9fSwKKyAg
ICAgICAge0RlbXV4ZXIsICJ2aWRlby9xdWlja3RpbWUsIHZhcmlhbnQ9KHN0cmluZykzZ3BwIiwg
eyJ2aWRlby8zZ3BwIn0sIHsgfX0sCisgICAgICAgIHtEZW11eGVyLCAidmlkZW8veC1tcy1hc2Yi
LCB7IH0sIHsgfX0sCisgICAgfTsKKyAgICBmaWxsTWltZVR5cGVTZXRGcm9tQ2Fwc01hcHBpbmco
bWFwcGluZyk7CisKKyAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKG1f
ZGVtdXhlckZhY3RvcmllcywgImFwcGxpY2F0aW9uL29nZyIpKSB7CisgICAgICAgIG1fbWltZVR5
cGVTZXQuYWRkKEF0b21pY1N0cmluZygiYXBwbGljYXRpb24vb2dnIikpOworCisgICAgICAgIGlm
ICh2b3JiaXNTdXBwb3J0ZWQpIHsKKyAgICAgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21p
Y1N0cmluZygiYXVkaW8vb2dnIikpOworICAgICAgICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRv
bWljU3RyaW5nKCJhdWRpby94LXZvcmJpcytvZ2ciKSk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKG1fYXVkaW9EZWNvZGVyRmFjdG9y
aWVzLCAiYXVkaW8veC1zcGVleCIpKSB7CisgICAgICAgICAgICBtX21pbWVUeXBlU2V0LmFkZChB
dG9taWNTdHJpbmcoImF1ZGlvL29nZyIpKTsKKyAgICAgICAgICAgIG1fY29kZWNNYXAuYWRkKEF0
b21pY1N0cmluZygic3BlZXgiKSwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGdz
dFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShtX3ZpZGVvRGVjb2RlckZhY3Rvcmllcywg
InZpZGVvL3gtdGhlb3JhIikpIHsKKyAgICAgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21p
Y1N0cmluZygidmlkZW8vb2dnIikpOworICAgICAgICAgICAgbV9jb2RlY01hcC5hZGQoQXRvbWlj
U3RyaW5nKCJ0aGVvcmEiKSwgZmFsc2UpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBh
dWRpb01wZWdTdXBwb3J0ZWQgPSBmYWxzZTsKKyAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50
Rm9yTWVkaWFUeXBlKG1fYXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAiYXVkaW8vbXBlZywgbXBlZ3Zl
cnNpb249KGludCkxLCBsYXllcj0oaW50KVsxLCAzXSIpKSB7CisgICAgICAgIGF1ZGlvTXBlZ1N1
cHBvcnRlZCA9IHRydWU7CisgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygi
YXVkaW8vbXAxIikpOworICAgICAgICBtX21pbWVUeXBlU2V0LmFkZChBdG9taWNTdHJpbmcoImF1
ZGlvL21wMyIpKTsKKyAgICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRp
by94LW1wMyIpKTsKKyAgICAgICAgbV9jb2RlY01hcC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9t
cDMiKSwgZmFsc2UpOworICAgIH0KKworICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JN
ZWRpYVR5cGUobV9hdWRpb0RlY29kZXJGYWN0b3JpZXMsICJhdWRpby9tcGVnLCBtcGVndmVyc2lv
bj0oaW50KTIiKSkgeworICAgICAgICBhdWRpb01wZWdTdXBwb3J0ZWQgPSB0cnVlOworICAgICAg
ICBtX21pbWVUeXBlU2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL21wMiIpKTsKKyAgICB9CisK
KyAgICBhdWRpb01wZWdTdXBwb3J0ZWQgfD0gc3VwcG9ydHNDb250YWluZXJUeXBlKCJhdWRpby9t
cDQiKTsKKyAgICBpZiAoYXVkaW9NcGVnU3VwcG9ydGVkKSB7CisgICAgICAgIG1fbWltZVR5cGVT
ZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vbXBlZyIpKTsKKyAgICAgICAgbV9taW1lVHlwZVNl
dC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby94LW1wZWciKSk7CisgICAgfQorCisgICAgYm9vbCBt
YXRyb3NrYVN1cHBvcnRlZCA9IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShtX2Rl
bXV4ZXJGYWN0b3JpZXMsICJ2aWRlby94LW1hdHJvc2thIik7CisgICAgaWYgKG1hdHJvc2thU3Vw
cG9ydGVkKSB7CisgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygidmlkZW8v
eC1tYXRyb3NrYSIpKTsKKworICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVk
aWFUeXBlKG1fdmlkZW9EZWNvZGVyRmFjdG9yaWVzLCAidmlkZW8veC12cDEwIikpCisgICAgICAg
ICAgICBtX21pbWVUeXBlU2V0LmFkZChBdG9taWNTdHJpbmcoInZpZGVvL3dlYm0iKSk7CisgICAg
fQorCisgICAgaWYgKChtYXRyb3NrYVN1cHBvcnRlZCB8fCBzdXBwb3J0c0NvbnRhaW5lclR5cGUo
InZpZGVvL21wNCIpKSAmJiBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUobV92aWRl
b0RlY29kZXJGYWN0b3JpZXMsICJ2aWRlby94LWF2MSIpKQorICAgICAgICBtX2NvZGVjTWFwLmFk
ZChBdG9taWNTdHJpbmcoImF2MDEqIiksIGZhbHNlKTsKK30KKworYm9vbCBHc3RSZWdpc3RyeVNj
YW5uZXI6OnN1cHBvcnRzQ29kZWMoU3RyaW5nIGNvZGVjLCBib29sIHVzaW5nSGFyZHdhcmUpIGNv
bnN0Cit7CisgICAgLy8gSWYgdGhlIGNvZGVjIGlzIG5hbWVkIGxpa2UgYSBtaW1ldHlwZSAoZWc6
IHZpZGVvL2F2YykgcmVtb3ZlIHRoZSAidmlkZW8vIiBwYXJ0LgorICAgIHNpemVfdCBzbGFzaElu
ZGV4ID0gY29kZWMuZmluZCgnLycpOworICAgIGlmIChzbGFzaEluZGV4ICE9IFdURjo6bm90Rm91
bmQpCisgICAgICAgIGNvZGVjID0gY29kZWMuc3Vic3RyaW5nKHNsYXNoSW5kZXgrMSk7CisKKyAg
ICBHU1RfTE9HKCJDaGVja2luZyBjb2RlYyBcIiVzXCIiLCBjb2RlYy51dGY4KCkuZGF0YSgpKTsK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBtX2NvZGVjTWFwKSB7CisgICAgICAgIGJvb2wg
Y29kZWNNYXRjaGVzUGF0dGVybiA9ICFmbm1hdGNoKGl0ZW0ua2V5LnN0cmluZygpLnV0ZjgoKS5k
YXRhKCksIGNvZGVjLnV0ZjgoKS5kYXRhKCksIDApOworICAgICAgICBpZiAoY29kZWNNYXRjaGVz
UGF0dGVybikKKyAgICAgICAgICAgIHJldHVybiB1c2luZ0hhcmR3YXJlID8gaXRlbS52YWx1ZSA6
IHRydWU7CisgICAgfQorCisgICAgR1NUX0xPRygiVW5zdXBwb3J0ZWQiKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgR3N0UmVnaXN0cnlTY2FubmVyOjpzdXBwb3J0c0FsbENvZGVjcyhj
b25zdCBWZWN0b3I8U3RyaW5nPiYgY29kZWNzLCBib29sIHVzaW5nSGFyZHdhcmUpIGNvbnN0Cit7
CisgICAgZm9yIChTdHJpbmcgY29kZWMgOiBjb2RlY3MpIHsKKyAgICAgICAgaWYgKCFzdXBwb3J0
c0NvZGVjKGNvZGVjLCB1c2luZ0hhcmR3YXJlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHc3RSZWdpc3RyeVNjYW5uZXI6
OmlzRGVjb2RpbmdTdXBwb3J0ZWQoTWVkaWFDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uLCBi
b29sKiB1c2luZ0hhcmR3YXJlKSBjb25zdAoreworICAgIGJvb2wgZGVjb2RlckZvdW5kID0gZmFs
c2U7CisgICAgaWYgKHVzaW5nSGFyZHdhcmUpCisgICAgICAgICp1c2luZ0hhcmR3YXJlID0gZmFs
c2U7CisKKyAgICBpZiAoY29uZmlndXJhdGlvbi52aWRlbykgeworICAgICAgICBhdXRvJiB2aWRl
b0NvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uLnZpZGVvLnZhbHVlKCk7CisgICAgICAgIEdT
VF9ERUJVRygiQ2hlY2tpbmcgc3VwcG9ydCBmb3IgdmlkZW8gY29uZmlndXJhdGlvbjogXCIlc1wi
IHNpemU6ICV1eCV1IGJpdHJhdGU6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBmcmFtZXJhdGU6ICVm
IiwgdmlkZW9Db25maWd1cmF0aW9uLmNvbnRlbnRUeXBlLnV0ZjgoKS5kYXRhKCksIHZpZGVvQ29u
ZmlndXJhdGlvbi53aWR0aCwgdmlkZW9Db25maWd1cmF0aW9uLmhlaWdodCwgdmlkZW9Db25maWd1
cmF0aW9uLmJpdHJhdGUsIHZpZGVvQ29uZmlndXJhdGlvbi5mcmFtZXJhdGUpOworCisgICAgICAg
IGF1dG8gY29udGVudFR5cGUgPSBDb250ZW50VHlwZSh2aWRlb0NvbmZpZ3VyYXRpb24uY29udGVu
dFR5cGUpOworICAgICAgICBkZWNvZGVyRm91bmQgPSBzdXBwb3J0c0NvbnRhaW5lclR5cGUoY29u
dGVudFR5cGUuY29udGFpbmVyVHlwZSgpKTsKKyAgICAgICAgYXV0byBjb2RlY3MgPSBjb250ZW50
VHlwZS5jb2RlY3MoKTsKKyAgICAgICAgaWYgKHVzaW5nSGFyZHdhcmUgJiYgIWNvZGVjcy5pc0Vt
cHR5KCkpCisgICAgICAgICAgICAqdXNpbmdIYXJkd2FyZSA9IHN1cHBvcnRzQWxsQ29kZWNzKGNv
ZGVjcywgdHJ1ZSk7CisgICAgfQorCisgICAgaWYgKGNvbmZpZ3VyYXRpb24uYXVkaW8pIHsKKyAg
ICAgICAgYXV0byYgYXVkaW9Db25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbi5hdWRpby52YWx1
ZSgpOworICAgICAgICBHU1RfREVCVUcoIkNoZWNraW5nIHN1cHBvcnQgZm9yIGF1ZGlvIGNvbmZp
Z3VyYXRpb246IFwiJXNcIiAlcyBjaGFubmVscywgYml0cmF0ZTogJSIgR19HVUlOVDY0X0ZPUk1B
VCAiIHNhbXBsZXJhdGU6ICV1IiwgYXVkaW9Db25maWd1cmF0aW9uLmNvbnRlbnRUeXBlLnV0Zjgo
KS5kYXRhKCksIGF1ZGlvQ29uZmlndXJhdGlvbi5jaGFubmVscy51dGY4KCkuZGF0YSgpLCBhdWRp
b0NvbmZpZ3VyYXRpb24uYml0cmF0ZSwgYXVkaW9Db25maWd1cmF0aW9uLnNhbXBsZXJhdGUpOwor
ICAgICAgICBhdXRvIGNvbnRlbnRUeXBlID0gQ29udGVudFR5cGUoYXVkaW9Db25maWd1cmF0aW9u
LmNvbnRlbnRUeXBlKTsKKyAgICAgICAgZGVjb2RlckZvdW5kID0gc3VwcG9ydHNDb250YWluZXJU
eXBlKGNvbnRlbnRUeXBlLmNvbnRhaW5lclR5cGUoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGRl
Y29kZXJGb3VuZDsKK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR3N0UmVnaXN0cnlTY2FubmVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR3N0UmVnaXN0cnlTY2FubmVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNmNmN2QxZmZlOTY4ZDgzODk5OTBlOTlkMzQ2ZjdlNDA2MmE1MWVhYwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9Hc3RSZWdpc3RyeVNjYW5uZXIuaApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVIpCisK
KyNpbmNsdWRlICJNZWRpYUNvbmZpZ3VyYXRpb24uaCIKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21pY1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENvbnRlbnRUeXBlOworCitjbGFzcyBHc3RSZWdpc3Ry
eVNjYW5uZXIgeworICAgIGZyaWVuZCBOZXZlckRlc3Ryb3llZDxHc3RSZWdpc3RyeVNjYW5uZXI+
OworcHVibGljOgorICAgIHN0YXRpYyBHc3RSZWdpc3RyeVNjYW5uZXImIHNpbmdsZXRvbigpOwor
CisgICAgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIG1pbWVUeXBl
U2V0KCkgeyByZXR1cm4gbV9taW1lVHlwZVNldDsgfQorCisgICAgYm9vbCBzdXBwb3J0c0NvbnRh
aW5lclR5cGUoU3RyaW5nIGNvbnRhaW5lclR5cGUpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVR5cGVT
ZXQuY29udGFpbnMoY29udGFpbmVyVHlwZSk7IH0KKworICAgIGJvb2wgaXNEZWNvZGluZ1N1cHBv
cnRlZChNZWRpYUNvbmZpZ3VyYXRpb24mLCBib29sKiB1c2luZ0hhcmR3YXJlID0gbnVsbHB0cikg
Y29uc3Q7CisgICAgYm9vbCBzdXBwb3J0c0NvZGVjKFN0cmluZyBjb2RlYywgYm9vbCB1c2luZ0hh
cmR3YXJlID0gZmFsc2UpIGNvbnN0OworICAgIGJvb2wgc3VwcG9ydHNBbGxDb2RlY3MoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGNvZGVjcywgYm9vbCB1c2luZ0hhcmR3YXJlID0gZmFsc2UpIGNvbnN0
OworCitwcm90ZWN0ZWQ6CisgICAgR3N0UmVnaXN0cnlTY2FubmVyKGJvb2wgaXNNZWRpYVNvdXJj
ZSA9IGZhbHNlKTsKKyAgICB+R3N0UmVnaXN0cnlTY2FubmVyKCk7CisKKyAgICB2b2lkIGluaXRp
YWxpemUoKTsKKworICAgIGVudW0gRWxlbWVudFR5cGUgeworICAgICAgICBBdWRpb0RlY29kZXIg
PSAwLAorICAgICAgICBWaWRlb0RlY29kZXIsCisgICAgICAgIERlbXV4ZXIKKyAgICB9OworICAg
IHN0cnVjdCBHc3RDYXBzV2ViS2l0TWFwcGluZyB7CisgICAgICAgIEVsZW1lbnRUeXBlIGVsZW1l
bnRUeXBlOworICAgICAgICBjb25zdCBjaGFyKiBjYXBzU3RyaW5nOworICAgICAgICBWZWN0b3I8
QXRvbWljU3RyaW5nPiB3ZWJraXRNaW1lVHlwZXM7CisgICAgICAgIFZlY3RvcjxBdG9taWNTdHJp
bmc+IHdlYmtpdENvZGVjUGF0dGVybnM7CisgICAgfTsKKyAgICB2b2lkIGZpbGxNaW1lVHlwZVNl
dEZyb21DYXBzTWFwcGluZyhWZWN0b3I8R3N0Q2Fwc1dlYktpdE1hcHBpbmc+Jik7CisKKyAgICBz
dHJ1Y3QgUmVnaXN0cnlMb29rdXBSZXN1bHQgeworICAgICAgICBib29sIHN1cHBvcnRlZDsKKyAg
ICAgICAgYm9vbCB1c2luZ0hhcmR3YXJlOworCisgICAgICAgIG9wZXJhdG9yIGJvb2woKSBjb25z
dCB7IHJldHVybiBzdXBwb3J0ZWQ7IH0KKyAgICB9OworICAgIFJlZ2lzdHJ5TG9va3VwUmVzdWx0
IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShHTGlzdCogZWxlbWVudEZhY3Rvcmll
cywgY29uc3QgY2hhciogY2Fwc1N0cmluZywgYm9vbCBjaGVja0hhcmR3YXJlQ2xhc3NpZmllciA9
IGZhbHNlKTsKKworcHJpdmF0ZToKKyAgICBib29sIG1faXNNZWRpYVNvdXJjZTsKKyAgICBHTGlz
dCogbV9hdWRpb0RlY29kZXJGYWN0b3JpZXM7CisgICAgR0xpc3QqIG1fYXVkaW9QYXJzZXJGYWN0
b3JpZXM7CisgICAgR0xpc3QqIG1fdmlkZW9EZWNvZGVyRmFjdG9yaWVzOworICAgIEdMaXN0KiBt
X3ZpZGVvUGFyc2VyRmFjdG9yaWVzOworICAgIEdMaXN0KiBtX2RlbXV4ZXJGYWN0b3JpZXM7Cisg
ICAgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4gbV9taW1lVHlwZVNl
dDsKKyAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgYm9vbD4gbV9jb2RlY01hcDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFFbmdp
bmVDb25maWd1cmF0aW9uRmFjdG9yeUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeUdT
dHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTM4NWUyN2UzMTRiNjA0ODM3NTY5YzUwMTg2MDg4YWUy
MWZiMGJhYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5R1N0cmVhbWVyLmNw
cApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeUdTdHJlYW1lci5oIgorCisj
aWYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIkdzdFJlZ2lzdHJ5U2Nhbm5lci5oIgorI2lu
Y2x1ZGUgIk1lZGlhQ2FwYWJpbGl0aWVzSW5mby5oIgorI2luY2x1ZGUgIk1lZGlhRGVjb2RpbmdD
b25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKKyNpbmNsdWRlIDx3dGYv
RnVuY3Rpb24uaD4KKworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisjaW5jbHVkZSAiR3N0UmVn
aXN0cnlTY2FubmVyTVNFLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lk
IGNyZWF0ZU1lZGlhUGxheWVyRGVjb2RpbmdDb25maWd1cmF0aW9uR1N0cmVhbWVyKE1lZGlhRGVj
b2RpbmdDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uLCBXVEY6OkZ1bmN0aW9uPHZvaWQoTWVk
aWFDYXBhYmlsaXRpZXNJbmZvJiYpPiYmIGNhbGxiYWNrKQoreworICAgIGJvb2wgaXNNZWRpYVNv
dXJjZSA9IGNvbmZpZ3VyYXRpb24udHlwZSA9PSBNZWRpYURlY29kaW5nVHlwZTo6TWVkaWFTb3Vy
Y2U7CisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKyAgICBhdXRvJiBzY2FubmVyID0gaXNNZWRp
YVNvdXJjZSA/IEdzdFJlZ2lzdHJ5U2Nhbm5lck1TRTo6c2luZ2xldG9uKCkgOiBHc3RSZWdpc3Ry
eVNjYW5uZXI6OnNpbmdsZXRvbigpOworI2Vsc2UKKyAgICBpZiAoaXNNZWRpYVNvdXJjZSkgewor
ICAgICAgICBjYWxsYmFjayh7IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGF1dG8m
IHNjYW5uZXIgPSBHc3RSZWdpc3RyeVNjYW5uZXI6OnNpbmdsZXRvbigpOworI2VuZGlmCisgICAg
Ym9vbCB1c2luZ0hhcmR3YXJlID0gZmFsc2U7CisgICAgTWVkaWFDYXBhYmlsaXRpZXNJbmZvIGlu
Zm87CisgICAgaW5mby5zdXBwb3J0ZWQgPSBzY2FubmVyLmlzRGVjb2RpbmdTdXBwb3J0ZWQoY29u
ZmlndXJhdGlvbiwgJnVzaW5nSGFyZHdhcmUpOworICAgIGluZm8ucG93ZXJFZmZpY2llbnQgPSB1
c2luZ0hhcmR3YXJlOworCisgICAgY2FsbGJhY2soV1RGTW92ZShpbmZvKSk7Cit9CisKK30KKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlHU3RyZWFtZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYUVuZ2luZUNvbmZpZ3VyYXRp
b25GYWN0b3J5R1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWU5ZWMyMTc4YTU4NzkyNDY3ODU2YmI1
YThmMDdhYTUzY2YzMjQ1MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5R1N0
cmVhbWVyLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2Fs
aWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1l
ciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisg
KiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgTWVkaWFDYXBhYmlsaXRpZXNJbmZvOworc3RydWN0IE1l
ZGlhRGVjb2RpbmdDb25maWd1cmF0aW9uOworCitleHRlcm4gdm9pZCBjcmVhdGVNZWRpYVBsYXll
ckRlY29kaW5nQ29uZmlndXJhdGlvbkdTdHJlYW1lcihNZWRpYURlY29kaW5nQ29uZmlndXJhdGlv
biYsIFdURjo6RnVuY3Rpb248dm9pZChNZWRpYUNhcGFiaWxpdGllc0luZm8mJik+JiYpOworCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmNwcAppbmRleCAwNzQwOTZkMDE4OTlmOGYwOTFhZjIxZDRhM2I3N2I1OGYyOTAzNTc0Li4yN2I3
MmVmY2QxYWU4YmMwMWM1OTk5YzE4MWVmZjQ3NDdhMDVmYzg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAj
aW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgorI2lu
Y2x1ZGUgIkdzdFJlZ2lzdHJ5U2Nhbm5lci5oIgogI2luY2x1ZGUgIkhUVFBIZWFkZXJOYW1lcy5o
IgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5o
IgpAQCAtMjIwOCwxMzcgKzIyMDksMTAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcikKICAgICBt
X3JlYWR5VGltZXJIYW5kbGVyLnN0b3AoKTsKIH0KIAotc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBtaW1lVHlwZVNldCgpCi17Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBt
aW1lVHlwZXMgPSBbXSgpCi0gICAgewotICAgICAgICBpbml0aWFsaXplR1N0cmVhbWVyQW5kUmVn
aXN0ZXJXZWJLaXRFbGVtZW50cygpOwotICAgICAgICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNl
SW5zZW5zaXRpdmVIYXNoPiBzZXQ7Ci0KLSAgICAgICAgR0xpc3QqIGF1ZGlvRGVjb2RlckZhY3Rv
cmllcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRf
RkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQVVE
SU8sIEdTVF9SQU5LX01BUkdJTkFMKTsKLSAgICAgICAgR0xpc3QqIHZpZGVvRGVjb2RlckZhY3Rv
cmllcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRf
RkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfVklE
RU8sIEdTVF9SQU5LX01BUkdJTkFMKTsKLSAgICAgICAgR0xpc3QqIGRlbXV4ZXJGYWN0b3JpZXMg
PSBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZ2V0X2VsZW1lbnRzKEdTVF9FTEVNRU5UX0ZBQ1RP
UllfVFlQRV9ERU1VWEVSLCBHU1RfUkFOS19NQVJHSU5BTCk7Ci0KLSAgICAgICAgZW51bSBFbGVt
ZW50VHlwZSB7Ci0gICAgICAgICAgICBBdWRpb0RlY29kZXIgPSAwLAotICAgICAgICAgICAgVmlk
ZW9EZWNvZGVyLAotICAgICAgICAgICAgRGVtdXhlcgotICAgICAgICB9OwotICAgICAgICBzdHJ1
Y3QgR3N0Q2Fwc1dlYktpdE1hcHBpbmcgewotICAgICAgICAgICAgRWxlbWVudFR5cGUgZWxlbWVu
dFR5cGU7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBjYXBzU3RyaW5nOwotICAgICAgICAgICAg
VmVjdG9yPEF0b21pY1N0cmluZz4gd2Via2l0TWltZVR5cGVzOwotICAgICAgICB9OwotCi0gICAg
ICAgIFZlY3RvcjxHc3RDYXBzV2ViS2l0TWFwcGluZz4gbWFwcGluZyA9IHsKLSAgICAgICAgICAg
IHtBdWRpb0RlY29kZXIsICJhdWRpby9taWRpIiwgeyJhdWRpby9taWRpIiwgImF1ZGlvL3JpZmYt
bWlkaSJ9fSwKLSAgICAgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LXNiYyIsIHsgfX0s
Ci0gICAgICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8veC1zaWQiLCB7IH19LAotICAgICAg
ICAgICAge0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtZmxhYyIsIHsiYXVkaW8veC1mbGFjIiwgImF1
ZGlvL2ZsYWMifX0sCi0gICAgICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8veC13YXYiLCB7
ImF1ZGlvL3gtd2F2IiwgImF1ZGlvL3dhdiIsICJhdWRpby92bmQud2F2ZSJ9fSwKLSAgICAgICAg
ICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LXdhdnBhY2siLCB7ImF1ZGlvL3gtd2F2cGFjayJ9
fSwKLSAgICAgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LXNwZWV4IiwgeyJhdWRpby9z
cGVleCIsICJhdWRpby94LXNwZWV4In19LAotICAgICAgICAgICAge0F1ZGlvRGVjb2RlciwgImF1
ZGlvL3gtYWMzIiwgeyB9fSwKLSAgICAgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LWVh
YzMiLCB7ImF1ZGlvL3gtYWMzIn19LAotICAgICAgICAgICAge0F1ZGlvRGVjb2RlciwgImF1ZGlv
L3gtZHRzIiwgeyB9fSwKLSAgICAgICAgICAgIHtWaWRlb0RlY29kZXIsICJ2aWRlby94LWgyNjQs
IHByb2ZpbGU9KHN0cmluZyloaWdoIiwgeyJ2aWRlby9tcDQiLCAidmlkZW8veC1tNHYifX0sCi0g
ICAgICAgICAgICB7VmlkZW9EZWNvZGVyLCAidmlkZW8veC1tc3ZpZGVvY29kZWMiLCB7InZpZGVv
L3gtbXN2aWRlbyJ9fSwKLSAgICAgICAgICAgIHtWaWRlb0RlY29kZXIsICJ2aWRlby94LWgyNjMi
LCB7IH19LAotICAgICAgICAgICAge1ZpZGVvRGVjb2RlciwgInZpZGVvL21wZWd0cyIsIHsgfX0s
Ci0gICAgICAgICAgICB7VmlkZW9EZWNvZGVyLCAidmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGlu
dCl7MSwyfSwgc3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNlIiwgeyJ2aWRlby9tcGVnIn19LAot
ICAgICAgICAgICAge1ZpZGVvRGVjb2RlciwgInZpZGVvL3gtZGlyYWMiLCB7IH19LAotICAgICAg
ICAgICAge1ZpZGVvRGVjb2RlciwgInZpZGVvL3gtZmxhc2gtdmlkZW8iLCB7InZpZGVvL2ZsdiIs
ICJ2aWRlby94LWZsdiJ9fSwKLSAgICAgICAgICAgIHtEZW11eGVyLCAidmlkZW8vcXVpY2t0aW1l
IiwgeyB9fSwKLSAgICAgICAgICAgIHtEZW11eGVyLCAidmlkZW8vcXVpY2t0aW1lLCB2YXJpYW50
PShzdHJpbmcpM2dwcCIsIHsidmlkZW8vM2dwcCJ9fSwKLSAgICAgICAgICAgIHtEZW11eGVyLCAi
YXBwbGljYXRpb24veC0zZ3AiLCB7IH19LAotICAgICAgICAgICAge0RlbXV4ZXIsICJ2aWRlby94
LW1zLWFzZiIsIHsgfX0sCi0gICAgICAgICAgICB7RGVtdXhlciwgImF1ZGlvL3gtYWlmZiIsIHsg
fX0sCi0gICAgICAgICAgICB7RGVtdXhlciwgImFwcGxpY2F0aW9uL3gtcG4tcmVhbGF1ZGlvIiwg
eyB9fSwKLSAgICAgICAgICAgIHtEZW11eGVyLCAiYXBwbGljYXRpb24vdm5kLnJuLXJlYWxtZWRp
YSIsIHsgfX0sCi0gICAgICAgICAgICB7RGVtdXhlciwgImF1ZGlvL3gtd2F2IiwgeyJhdWRpby94
LXdhdiIsICJhdWRpby93YXYiLCAiYXVkaW8vdm5kLndhdmUifX0sCi0gICAgICAgICAgICB7RGVt
dXhlciwgImFwcGxpY2F0aW9uL3gtaGxzIiwgeyJhcHBsaWNhdGlvbi92bmQuYXBwbGUubXBlZ3Vy
bCIsICJhcHBsaWNhdGlvbi94LW1wZWd1cmwifX0KLSAgICAgICAgfTsKLQotICAgICAgICBmb3Ig
KGF1dG8mIGN1cnJlbnQgOiBtYXBwaW5nKSB7Ci0gICAgICAgICAgICBHTGlzdCogZmFjdG9yaWVz
ID0gZGVtdXhlckZhY3RvcmllczsKLSAgICAgICAgICAgIGlmIChjdXJyZW50LmVsZW1lbnRUeXBl
ID09IEF1ZGlvRGVjb2RlcikKLSAgICAgICAgICAgICAgICBmYWN0b3JpZXMgPSBhdWRpb0RlY29k
ZXJGYWN0b3JpZXM7Ci0gICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50LmVsZW1lbnRUeXBlID09
IFZpZGVvRGVjb2RlcikKLSAgICAgICAgICAgICAgICBmYWN0b3JpZXMgPSB2aWRlb0RlY29kZXJG
YWN0b3JpZXM7Ci0KLSAgICAgICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRp
YVR5cGUoZmFjdG9yaWVzLCBjdXJyZW50LmNhcHNTdHJpbmcpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFjdXJyZW50LndlYmtpdE1pbWVUeXBlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZm9yIChjb25zdCBhdXRvJiBtaW1lVHlwZSA6IGN1cnJlbnQud2Via2l0TWltZVR5cGVz
KQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0LmFkZChtaW1lVHlwZSk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKGN1
cnJlbnQuY2Fwc1N0cmluZykpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
Ym9vbCBvcHVzU3VwcG9ydGVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0Vs
ZW1lbnRGb3JNZWRpYVR5cGUoYXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAiYXVkaW8veC1vcHVzIikp
IHsKLSAgICAgICAgICAgIG9wdXNTdXBwb3J0ZWQgPSB0cnVlOwotICAgICAgICAgICAgc2V0LmFk
ZChBdG9taWNTdHJpbmcoImF1ZGlvL29wdXMiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29s
IHZvcmJpc1N1cHBvcnRlZCA9IGZhbHNlOwotICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVt
ZW50Rm9yTWVkaWFUeXBlKGRlbXV4ZXJGYWN0b3JpZXMsICJhcHBsaWNhdGlvbi9vZ2ciKSkgewot
ICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImFwcGxpY2F0aW9uL29nZyIpKTsKLQot
ICAgICAgICAgICAgdm9yYmlzU3VwcG9ydGVkID0gZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVk
aWFUeXBlKGF1ZGlvRGVjb2RlckZhY3RvcmllcywgImF1ZGlvL3gtdm9yYmlzIik7Ci0gICAgICAg
ICAgICBpZiAodm9yYmlzU3VwcG9ydGVkKSB7Ci0gICAgICAgICAgICAgICAgc2V0LmFkZChBdG9t
aWNTdHJpbmcoImF1ZGlvL29nZyIpKTsKLSAgICAgICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0
cmluZygiYXVkaW8veC12b3JiaXMrb2dnIikpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKHZpZGVvRGVjb2RlckZhY3Rv
cmllcywgInZpZGVvL3gtdGhlb3JhIikpCi0gICAgICAgICAgICAgICAgc2V0LmFkZChBdG9taWNT
dHJpbmcoInZpZGVvL29nZyIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgYXVkaW9NcGVn
U3VwcG9ydGVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JN
ZWRpYVR5cGUoYXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAiYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249
KGludCkxLCBsYXllcj0oaW50KVsxLCAzXSIpKSB7Ci0gICAgICAgICAgICBhdWRpb01wZWdTdXBw
b3J0ZWQgPSB0cnVlOwotICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL21w
MSIpKTsKLSAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9tcDMiKSk7Ci0g
ICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8veC1tcDMiKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGF1ZGlv
RGVjb2RlckZhY3RvcmllcywgImF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpezIsIDR9Iikp
IHsKLSAgICAgICAgICAgIGF1ZGlvTXBlZ1N1cHBvcnRlZCA9IHRydWU7Ci0gICAgICAgICAgICBz
ZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vYWFjIikpOwotICAgICAgICAgICAgc2V0LmFkZChB
dG9taWNTdHJpbmcoImF1ZGlvL21wMiIpKTsKLSAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3Ry
aW5nKCJhdWRpby9tcDQiKSk7Ci0gICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVk
aW8veC1tNGEiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXVkaW9NcGVnU3VwcG9ydGVk
KSB7Ci0gICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vbXBlZyIpKTsKLSAg
ICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby94LW1wZWciKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGRlbXV4
ZXJGYWN0b3JpZXMsICJ2aWRlby94LW1hdHJvc2thIikpIHsKLSAgICAgICAgICAgIHNldC5hZGQo
QXRvbWljU3RyaW5nKCJ2aWRlby94LW1hdHJvc2thIikpOwotCi0gICAgICAgICAgICBpZiAoZ3N0
UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKHZpZGVvRGVjb2RlckZhY3RvcmllcywgInZp
ZGVvL3gtdnA4IikKLSAgICAgICAgICAgICAgICB8fCBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JN
ZWRpYVR5cGUodmlkZW9EZWNvZGVyRmFjdG9yaWVzLCAidmlkZW8veC12cDkiKQotICAgICAgICAg
ICAgICAgIHx8IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZSh2aWRlb0RlY29kZXJG
YWN0b3JpZXMsICJ2aWRlby94LXZwMTAiKSkKLSAgICAgICAgICAgICAgICBzZXQuYWRkKEF0b21p
Y1N0cmluZygidmlkZW8vd2VibSIpKTsKLQotICAgICAgICAgICAgaWYgKHZvcmJpc1N1cHBvcnRl
ZCB8fCBvcHVzU3VwcG9ydGVkKQotICAgICAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5n
KCJhdWRpby93ZWJtIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJl
X2xpc3RfZnJlZShhdWRpb0RlY29kZXJGYWN0b3JpZXMpOwotICAgICAgICBnc3RfcGx1Z2luX2Zl
YXR1cmVfbGlzdF9mcmVlKHZpZGVvRGVjb2RlckZhY3Rvcmllcyk7Ci0gICAgICAgIGdzdF9wbHVn
aW5fZmVhdHVyZV9saXN0X2ZyZWUoZGVtdXhlckZhY3Rvcmllcyk7Ci0gICAgICAgIHJldHVybiBz
ZXQ7Ci0gICAgfSgpOwotICAgIHJldHVybiBtaW1lVHlwZXM7Ci19Ci0KIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZywgQVND
SUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgdHlwZXMpCiB7Ci0gICAgdHlwZXMgPSBtaW1lVHlwZVNl
dCgpOworICAgIGF1dG8mIGdzdFJlZ2lzdHJ5U2Nhbm5lciA9IEdzdFJlZ2lzdHJ5U2Nhbm5lcjo6
c2luZ2xldG9uKCk7CisgICAgdHlwZXMgPSBnc3RSZWdpc3RyeVNjYW5uZXIubWltZVR5cGVTZXQo
KTsKIH0KIAogTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJiBw
YXJhbWV0ZXJzKQpAQCAtMjM1OCwzMCArMjIzMiwyMSBAQCBNZWRpYVBsYXllcjo6U3VwcG9ydHNU
eXBlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlh
RQogICAgIGlmIChwYXJhbWV0ZXJzLnR5cGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gcmVz
dWx0OwogCi0gICAgLy8gU3BlYyBzYXlzIHdlIHNob3VsZCBub3QgcmV0dXJuICJwcm9iYWJseSIg
aWYgdGhlIGNvZGVjcyBzdHJpbmcgaXMgZW1wdHkuCi0gICAgaWYgKG1pbWVUeXBlU2V0KCkuY29u
dGFpbnMocGFyYW1ldGVycy50eXBlLmNvbnRhaW5lclR5cGUoKSkpCi0gICAgICAgIHJlc3VsdCA9
IHBhcmFtZXRlcnMudHlwZS5jb2RlY3MoKS5pc0VtcHR5KCkgPyBNZWRpYVBsYXllcjo6TWF5QmVT
dXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQ7Ci0KKyAgICBHU1RfREVCVUcoIkNo
ZWNraW5nIG1pbWUtdHlwZSBcIiVzXCIiLCBwYXJhbWV0ZXJzLnR5cGUucmF3KCkudXRmOCgpLmRh
dGEoKSk7CiAgICAgYXV0byBjb250YWluZXJUeXBlID0gcGFyYW1ldGVycy50eXBlLmNvbnRhaW5l
clR5cGUoKTsKLSAgICBpZiAoY29udGFpbmVyVHlwZSA9PSAidmlkZW8vbXA0Il9zIHx8IGNvbnRh
aW5lclR5cGUgPT0gInZpZGVvL3dlYm0iX3MpIHsKLSAgICAgICAgaWYgKG1pbWVUeXBlU2V0KCku
Y29udGFpbnMoY29udGFpbmVyVHlwZSkpIHsKLSAgICAgICAgICAgIEdMaXN0KiB2aWRlb0RlY29k
ZXJGYWN0b3JpZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZ2V0X2VsZW1lbnRzKEdTVF9F
TEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREVSIHwgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01F
RElBX1ZJREVPLCBHU1RfUkFOS19NQVJHSU5BTCk7Ci0gICAgICAgICAgICBib29sIGF2MURlY29k
ZXJGb3VuZCA9IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZSh2aWRlb0RlY29kZXJG
YWN0b3JpZXMsICJ2aWRlby94LWF2MSJfcyk7Ci0gICAgICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1
cmVfbGlzdF9mcmVlKHZpZGVvRGVjb2RlckZhY3Rvcmllcyk7Ci0gICAgICAgICAgICBmb3IgKGF1
dG8mIGNvZGVjIDogcGFyYW1ldGVycy50eXBlLmNvZGVjcygpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGNvZGVjLnN0YXJ0c1dpdGgoImF2MDEiX3MpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9IGF2MURlY29kZXJGb3VuZCA/IE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZCA6IE1lZGlh
UGxheWVyOjpJc05vdFN1cHBvcnRlZDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjb2RlYy5zdGFydHNXaXRoKCJhdjEi
X3MpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IE1lZGlhUGxheWVyOjpJc05vdFN1
cHBvcnRlZDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgYXV0byYgZ3N0UmVnaXN0cnlTY2FubmVyID0g
R3N0UmVnaXN0cnlTY2FubmVyOjpzaW5nbGV0b24oKTsKKyAgICBpZiAoZ3N0UmVnaXN0cnlTY2Fu
bmVyLnN1cHBvcnRzQ29udGFpbmVyVHlwZShjb250YWluZXJUeXBlKSkgeworICAgICAgICAvLyBT
cGVjIHNheXMgd2Ugc2hvdWxkIG5vdCByZXR1cm4gInByb2JhYmx5IiBpZiB0aGUgY29kZWNzIHN0
cmluZyBpcyBlbXB0eS4KKyAgICAgICAgVmVjdG9yPFN0cmluZz4gY29kZWNzID0gcGFyYW1ldGVy
cy50eXBlLmNvZGVjcygpOworICAgICAgICBpZiAoY29kZWNzLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHJlc3VsdCA9IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZDsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcmVzdWx0ID0gZ3N0UmVnaXN0cnlTY2FubmVyLnN1cHBvcnRzQWxsQ29kZWNz
KGNvZGVjcykgPyBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNOb3RT
dXBwb3J0ZWQ7CiAgICAgfQogCi0gICAgcmV0dXJuIGV4dGVuZGVkU3VwcG9ydHNUeXBlKHBhcmFt
ZXRlcnMsIHJlc3VsdCk7CisgICAgYXV0byBmaW5hbFJlc3VsdCA9IGV4dGVuZGVkU3VwcG9ydHNU
eXBlKHBhcmFtZXRlcnMsIHJlc3VsdCk7CisgICAgR1NUX0RFQlVHKCJTdXBwb3J0ZWQ6ICVzIiwg
Y29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoZmluYWxSZXN1bHQpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIHJldHVybiBmaW5hbFJlc3VsdDsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnNldERvd25sb2FkQnVmZmVyaW5nKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGlu
ZS5jcHAKaW5kZXggODM5ZGE2MmQ3NzExMGRlN2EzNGVjMjkzNmIyZThjZjU1MDgxMTUzYi4uZTVm
OGViODRiNTM1ZGZjODc5ZGM1NTNjZjQwMDc0YWJhYjhhNDk0YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9B
cHBlbmRQaXBlbGluZS5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJHU3RyZWFtZXJD
b21tb24uaCIKICNpbmNsdWRlICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJH
U3RyZWFtZXJNZWRpYURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiR3N0UmVnaXN0cnlTY2FubmVy
TVNFLmgiCiAjaW5jbHVkZSAiTWVkaWFTYW1wbGVHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJJbmJh
bmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiTWVkaWFEZXNjcmlwdGlv
bi5oIgpAQCAtMTYyLDcgKzE2Myw4IEBAIEFwcGVuZFBpcGVsaW5lOjpBcHBlbmRQaXBlbGluZShS
ZWY8TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U+IG1lZGlhU291cmNlQ2xpCiAgICAgfSwg
dGhpcywgbnVsbHB0cik7CiAKICAgICBjb25zdCBTdHJpbmcmIHR5cGUgPSBtX3NvdXJjZUJ1ZmZl
clByaXZhdGUtPnR5cGUoKS5jb250YWluZXJUeXBlKCk7Ci0gICAgaWYgKHR5cGUuZW5kc1dpdGgo
Im1wNCIpKQorICAgIEdTVF9ERUJVRygiU291cmNlQnVmZmVyIGNvbnRhaW5lclR5cGU6ICVzIiwg
dHlwZS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAodHlwZS5lbmRzV2l0aCgibXA0IikgfHwgdHlw
ZS5lbmRzV2l0aCgiYWFjIikpCiAgICAgICAgIG1fZGVtdXggPSBnc3RfZWxlbWVudF9mYWN0b3J5
X21ha2UoInF0ZGVtdXgiLCBudWxscHRyKTsKICAgICBlbHNlIGlmICh0eXBlLmVuZHNXaXRoKCJ3
ZWJtIikpCiAgICAgICAgIG1fZGVtdXggPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoIm1hdHJv
c2thZGVtdXgiLCBudWxscHRyKTsKQEAgLTU3MCw3ICs1NzIsOCBAQCB2b2lkIEFwcGVuZFBpcGVs
aW5lOjpwYXJzZURlbXV4ZXJTcmNQYWRDYXBzKEdzdENhcHMqIGRlbXV4ZXJTcmNQYWRDYXBzKQog
ICAgIG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1l
cjo6VW5rbm93bjsKIAogICAgIGNvbnN0IGNoYXIqIG9yaWdpbmFsTWVkaWFUeXBlID0gY2Fwc01l
ZGlhVHlwZShtX2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpKTsKLSAgICBpZiAoIU1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6c3VwcG9ydHNDb2RlYyhvcmlnaW5hbE1lZGlhVHlwZSkpIHsK
KyAgICBhdXRvJiBnc3RSZWdpc3RyeVNjYW5uZXIgPSBHc3RSZWdpc3RyeVNjYW5uZXJNU0U6OnNp
bmdsZXRvbigpOworICAgIGlmICghZ3N0UmVnaXN0cnlTY2FubmVyLnN1cHBvcnRzQ29kZWMob3Jp
Z2luYWxNZWRpYVR5cGUpKSB7CiAgICAgICAgICAgICBtX3ByZXNlbnRhdGlvblNpemUgPSBXZWJD
b3JlOjpGbG9hdFNpemUoKTsKICAgICAgICAgICAgIG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1l
ZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6SW52YWxpZDsKICAgICB9IGVsc2UgaWYgKGRv
Q2Fwc0hhdmVUeXBlKG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCksIEdTVF9WSURFT19DQVBTX1RZ
UEVfUFJFRklYKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL21zZS9Hc3RSZWdpc3RyeVNjYW5uZXJNU0UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Hc3RSZWdpc3RyeVNjYW5uZXJNU0Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjE4ZTQ5MDk1MjgyNDg3NGUxZmZmZDgwZGJjZjA0NTNlZWVjOTY5YTAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvbXNlL0dzdFJlZ2lzdHJ5U2Nhbm5lck1TRS5jcHAKQEAgLTAsMCArMSw0MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgVVNFKEdTVFJFQU1FUikgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKyNpbmNsdWRlICJHc3RS
ZWdpc3RyeVNjYW5uZXJNU0UuaCIKKworI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dzdFJlZ2lzdHJ5U2Nhbm5lck1TRSYgR3N0UmVnaXN0
cnlTY2FubmVyTVNFOjpzaW5nbGV0b24oKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxH
c3RSZWdpc3RyeVNjYW5uZXJNU0U+IHNoYXJlZEluc3RhbmNlOworICAgIHJldHVybiBzaGFyZWRJ
bnN0YW5jZTsKK30KKworR3N0UmVnaXN0cnlTY2FubmVyTVNFOjpHc3RSZWdpc3RyeVNjYW5uZXJN
U0UoKQorICAgIDogR3N0UmVnaXN0cnlTY2FubmVyOjpHc3RSZWdpc3RyeVNjYW5uZXIodHJ1ZSkK
K3sKK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvbXNlL0dzdFJlZ2lzdHJ5U2Nhbm5lck1TRS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Hc3RSZWdpc3RyeVNjYW5uZXJN
U0UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kMGZjOTk3ZDYwOWE4OTNiNGFhYmNkZjM1NmRiMGJhMjkzYzkzMDA0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL21zZS9Hc3RSZWdpc3RyeVNjYW5uZXJNU0UuaApAQCAtMCwwICsxLDQwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShH
U1RSRUFNRVIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisKKyNpbmNsdWRlICJHc3RSZWdpc3Ry
eVNjYW5uZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgR3N0UmVnaXN0cnlTY2FubmVyTVNFIDogcHVibGljIEdzdFJlZ2lzdHJ5
U2Nhbm5lciB7CisgICAgZnJpZW5kIE5ldmVyRGVzdHJveWVkPEdzdFJlZ2lzdHJ5U2Nhbm5lck1T
RT47CitwdWJsaWM6CisgICAgc3RhdGljIEdzdFJlZ2lzdHJ5U2Nhbm5lck1TRSYgc2luZ2xldG9u
KCk7Citwcm90ZWN0ZWQ6CisgICAgR3N0UmVnaXN0cnlTY2FubmVyTVNFKCk7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwCmlu
ZGV4IDJjYzNkMWE3ZTA5MDY2OWRjMzczY2M1MjQ4MzhjMzRmYjU1ODZmNzAuLjVhYzE3NWIzYmIy
MzY5OWU2Y2UxMGU2ZmE5MDc1ZDc5NTBjOGQzZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyTVNFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlICJBcHBlbmRQaXBlbGluZS5oIgogI2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2
YXRlR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjaW5jbHVkZSAi
R3N0UmVnaXN0cnlTY2FubmVyTVNFLmgiCiAjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUdTdHJlYW1lci5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJN
ZWRpYURlc2NyaXB0aW9uLmgiCkBAIC00Miw3ICs0Myw2IEBACiAjaW5jbHVkZSAiVVJMLmgiCiAj
aW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKIAotI2luY2x1ZGUgPGZubWF0
Y2guaD4KICNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNpbmsuaD4KICNpbmNsdWRlIDxnc3QvYXBw
L2dzdGFwcHNyYy5oPgogI2luY2x1ZGUgPGdzdC9nc3QuaD4KQEAgLTY4MiwzMCArNjgyLDYgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmR1cmF0aW9uQ2hhbmdlZCgpCiAg
ICAgfQogfQogCi1zdGF0aWMgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFz
aD4mIG1pbWVUeXBlQ2FjaGUoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0
PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPj4gY2FjaGUgPSBbXSgpCi0gICAgewot
ICAgICAgICBpbml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRFbGVtZW50cygpOwot
ICAgICAgICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiBzZXQ7Ci0g
ICAgICAgIGNvbnN0IGNoYXIqIG1pbWVUeXBlc1tdID0gewotICAgICAgICAgICAgInZpZGVvL21w
NCIsCi0gICAgICAgICAgICAiYXVkaW8vbXA0IiwKLSAgICAgICAgICAgICJ2aWRlby93ZWJtIiwK
LSAgICAgICAgICAgICJhdWRpby93ZWJtIgotICAgICAgICB9OwotICAgICAgICBmb3IgKGF1dG8m
IHR5cGUgOiBtaW1lVHlwZXMpCi0gICAgICAgICAgICBzZXQuYWRkKHR5cGUpOwotICAgICAgICBy
ZXR1cm4gc2V0OwotICAgIH0oKTsKLSAgICByZXR1cm4gY2FjaGU7Ci19Ci0KLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmlu
ZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgdHlwZXMpCi17Ci0gICAgdHlwZXMgPSBtaW1l
VHlwZUNhY2hlKCk7Ci19Ci0KIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp0
cmFja0RldGVjdGVkKFJlZlB0cjxBcHBlbmRQaXBlbGluZT4gYXBwZW5kUGlwZWxpbmUsIFJlZlB0
cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiBuZXdUcmFjaywgYm9vbCBmaXJzdFRyYWNrRGV0
ZWN0ZWQpCiB7CiAgICAgQVNTRVJUKGFwcGVuZFBpcGVsaW5lLT50cmFjaygpID09IG5ld1RyYWNr
KTsKQEAgLTcyNiwxMDkgKzcwMiwxMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6dHJhY2tEZXRlY3RlZChSZWZQdHI8QXBwZW5kUGlwZWxpbmU+IGFwcGVuZAogICAgICAg
ICBtX3BsYXliYWNrUGlwZWxpbmUtPnJlYXR0YWNoVHJhY2soYXBwZW5kUGlwZWxpbmUtPnNvdXJj
ZUJ1ZmZlclByaXZhdGUoKSwgbmV3VHJhY2ssIGNhcHMpOwogfQogCi1jb25zdCBzdGF0aWMgSGFz
aFNldDxBdG9taWNTdHJpbmc+JiBjb2RlY1NldCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEhhc2hTZXQ8QXRvbWljU3RyaW5nPj4gY29kZWNUeXBlcyA9IFtdKCkKLSAgICB7Ci0gICAg
ICAgIGluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKCk7Ci0gICAg
ICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiBzZXQ7Ci0KLSAgICAgICAgR0xpc3QqIGF1ZGlvRGVj
b2RlckZhY3RvcmllcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NU
X0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVf
TUVESUFfQVVESU8sIEdTVF9SQU5LX01BUkdJTkFMKTsKLSAgICAgICAgR0xpc3QqIHZpZGVvRGVj
b2RlckZhY3RvcmllcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NU
X0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVf
TUVESUFfVklERU8sIEdTVF9SQU5LX01BUkdJTkFMKTsKLQotICAgICAgICBlbnVtIEVsZW1lbnRU
eXBlIHsKLSAgICAgICAgICAgIEF1ZGlvRGVjb2RlciA9IDAsCi0gICAgICAgICAgICBWaWRlb0Rl
Y29kZXIKLSAgICAgICAgfTsKLSAgICAgICAgc3RydWN0IEdzdENhcHNXZWJLaXRNYXBwaW5nIHsK
LSAgICAgICAgICAgIEVsZW1lbnRUeXBlIGVsZW1lbnRUeXBlOwotICAgICAgICAgICAgY29uc3Qg
Y2hhciogY2Fwc1N0cmluZzsKLSAgICAgICAgICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHdlYmtp
dENvZGVjczsKLSAgICAgICAgfTsKLQotICAgICAgICBHc3RDYXBzV2ViS2l0TWFwcGluZyBtYXBw
aW5nW10gPSB7Ci0gICAgICAgICAgICB7IFZpZGVvRGVjb2RlciwgInZpZGVvL3gtaDI2NCwgIHBy
b2ZpbGU9KHN0cmluZyl7IGNvbnN0cmFpbmVkLWJhc2VsaW5lLCBiYXNlbGluZSB9IiwgeyAieC1o
MjY0IiwgImF2YyoiIH0gfSwKLSAgICAgICAgICAgIHsgVmlkZW9EZWNvZGVyLCAidmlkZW8vbXBl
ZywgbXBlZ3ZlcnNpb249KGludCl7MSwyfSwgc3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNlIiwg
eyAibXBlZyIgfSB9LAotICAgICAgICAgICAgeyBWaWRlb0RlY29kZXIsICJ2aWRlby94LXZwOCIs
IHsgInZwOCIsICJ4LXZwOCIgfSB9LAotICAgICAgICAgICAgeyBWaWRlb0RlY29kZXIsICJ2aWRl
by94LXZwOSIsIHsgInZwOSIsICJ4LXZwOSIgfSB9LAotICAgICAgICAgICAgeyBBdWRpb0RlY29k
ZXIsICJhdWRpby94LXZvcmJpcyIsIHsgInZvcmJpcyIsICJ4LXZvcmJpcyIgfSB9LAotICAgICAg
ICAgICAgeyBBdWRpb0RlY29kZXIsICJhdWRpby94LW9wdXMiLCB7ICJvcHVzIiwgIngtb3B1cyIg
fSB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZm9yIChhdXRvJiBjdXJyZW50IDogbWFwcGluZykg
ewotICAgICAgICAgICAgR0xpc3QqIGZhY3RvcmllcyA9IG51bGxwdHI7Ci0gICAgICAgICAgICBz
d2l0Y2ggKGN1cnJlbnQuZWxlbWVudFR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgQXVkaW9EZWNv
ZGVyOgotICAgICAgICAgICAgICAgIGZhY3RvcmllcyA9IGF1ZGlvRGVjb2RlckZhY3RvcmllczsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVmlkZW9EZWNvZGVyOgot
ICAgICAgICAgICAgICAgIGZhY3RvcmllcyA9IHZpZGVvRGVjb2RlckZhY3RvcmllczsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
Z19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgZ19hc3NlcnRfbm9ubnVsbChmYWN0b3JpZXMpOwotCi0gICAg
ICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGZhY3Rvcmllcywg
Y3VycmVudC5jYXBzU3RyaW5nKSAmJiBmYWN0b3JpZXMgIT0gbnVsbHB0cikgewotICAgICAgICAg
ICAgICAgIGlmICghY3VycmVudC53ZWJraXRDb2RlY3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgbWltZVR5cGUgOiBjdXJyZW50LndlYmtpdENvZGVj
cykKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldC5hZGQobWltZVR5cGUpOwotICAgICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZyhj
dXJyZW50LmNhcHNTdHJpbmcpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IGJvb2wgYXVkaW9NcGVnU3VwcG9ydGVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChnc3RSZWdpc3Ry
eUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoYXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAiYXVkaW8vbXBl
ZywgbXBlZ3ZlcnNpb249KGludCkxLCBsYXllcj0oaW50KVsxLCAzXSIpKSB7Ci0gICAgICAgICAg
ICBhdWRpb01wZWdTdXBwb3J0ZWQgPSB0cnVlOwotICAgICAgICAgICAgc2V0LmFkZChBdG9taWNT
dHJpbmcoImF1ZGlvL21wMyIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChnc3RSZWdpc3Ry
eUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoYXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAiYXVkaW8vbXBl
ZywgbXBlZ3ZlcnNpb249KGludCl7MiwgNH0iKSkgewotICAgICAgICAgICAgYXVkaW9NcGVnU3Vw
cG9ydGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJtcDRhKiIp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhdWRpb01wZWdTdXBwb3J0ZWQpIHsKLSAgICAg
ICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9tcGVnIikpOwotICAgICAgICAgICAg
c2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL3gtbXBlZyIpKTsKLSAgICAgICAgfQotCi0KLSAg
ICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZShhdWRpb0RlY29kZXJGYWN0b3JpZXMp
OwotICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKHZpZGVvRGVjb2RlckZhY3Rv
cmllcyk7Ci0KLSAgICAgICAgcmV0dXJuIHNldDsKLSAgICB9KCk7Ci0gICAgcmV0dXJuIGNvZGVj
VHlwZXM7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzdXBwb3J0
c0NvZGVjKFN0cmluZyBjb2RlYykKLXsKLSAgICAvLyBJZiB0aGUgY29kZWMgaXMgbmFtZWQgbGlr
ZSBhIG1pbWV0eXBlIChlZzogdmlkZW8vYXZjKSByZW1vdmUgdGhlICJ2aWRlby8iIHBhcnQuCi0g
ICAgc2l6ZV90IHNsYXNoSW5kZXggPSBjb2RlYy5maW5kKCcvJyk7Ci0gICAgaWYgKHNsYXNoSW5k
ZXggIT0gV1RGOjpub3RGb3VuZCkKLSAgICAgICAgY29kZWMgPSBjb2RlYy5zdWJzdHJpbmcoc2xh
c2hJbmRleCsxKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgcGF0dGVybiA6IGNvZGVjU2V0KCkp
IHsKLSAgICAgICAgYm9vbCBjb2RlY01hdGNoZXNQYXR0ZXJuID0gIWZubWF0Y2gocGF0dGVybi5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpLCBjb2RlYy51dGY4KCkuZGF0YSgpLCAwKTsKLSAgICAgICAg
aWYgKGNvZGVjTWF0Y2hlc1BhdHRlcm4pCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyTVNFOjpzdXBwb3J0c0FsbENvZGVjcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgY29kZWNzKQor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmdldFN1cHBvcnRlZFR5cGVzKEhh
c2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiB0eXBlcykKIHsKLSAgICBm
b3IgKFN0cmluZyBjb2RlYyA6IGNvZGVjcykgewotICAgICAgICBpZiAoIXN1cHBvcnRzQ29kZWMo
Y29kZWMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOworICAgIGF1dG8mIGdzdFJlZ2lzdHJ5U2Nhbm5lciA9IEdzdFJlZ2lzdHJ5U2Nhbm5lck1T
RTo6c2luZ2xldG9uKCk7CisgICAgdHlwZXMgPSBnc3RSZWdpc3RyeVNjYW5uZXIubWltZVR5cGVT
ZXQoKTsKIH0KIAogTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJNU0U6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0
ZXJzJiBwYXJhbWV0ZXJzKQpAQCAtODQyLDE5ICs3MTksMjQgQEAgTWVkaWFQbGF5ZXI6OlN1cHBv
cnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnN1cHBvcnRzVHlwZShjb25z
dCBNZWQKICAgICAvLyBZb3VUdWJlIFRWIHByb3ZpZGVzIGVtcHR5IHR5cGVzIGZvciBzb21lIHZp
ZGVvcyBhbmQgd2Ugd2FudCB0byBiZSBzZWxlY3RlZCBhcyBiZXN0IG1lZGlhIGVuZ2luZSBmb3Ig
dGhlbS4KICAgICBpZiAoY29udGFpbmVyVHlwZS5pc0VtcHR5KCkpIHsKICAgICAgICAgcmVzdWx0
ID0gTWVkaWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVkOworICAgICAgICBHU1RfREVCVUcoIm1pbWUt
dHlwZSBcIiVzXCIgc3VwcG9ydGVkOiAlcyIsIHBhcmFtZXRlcnMudHlwZS5yYXcoKS51dGY4KCku
ZGF0YSgpLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhyZXN1bHQpLnV0ZjgoKS5kYXRhKCkp
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIEdTVF9ERUJVRygiQ2hlY2tp
bmcgbWltZS10eXBlIFwiJXNcIiIsIHBhcmFtZXRlcnMudHlwZS5yYXcoKS51dGY4KCkuZGF0YSgp
KTsKKyAgICBhdXRvJiBnc3RSZWdpc3RyeVNjYW5uZXIgPSBHc3RSZWdpc3RyeVNjYW5uZXJNU0U6
OnNpbmdsZXRvbigpOwogICAgIC8vIFNwZWMgc2F5cyB3ZSBzaG91bGQgbm90IHJldHVybiAicHJv
YmFibHkiIGlmIHRoZSBjb2RlY3Mgc3RyaW5nIGlzIGVtcHR5LgotICAgIGlmIChtaW1lVHlwZUNh
Y2hlKCkuY29udGFpbnMoY29udGFpbmVyVHlwZSkpIHsKKyAgICBpZiAoZ3N0UmVnaXN0cnlTY2Fu
bmVyLnN1cHBvcnRzQ29udGFpbmVyVHlwZShjb250YWluZXJUeXBlKSkgewogICAgICAgICBWZWN0
b3I8U3RyaW5nPiBjb2RlY3MgPSBwYXJhbWV0ZXJzLnR5cGUuY29kZWNzKCk7CiAgICAgICAgIGlm
IChjb2RlY3MuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmVzdWx0ID0gTWVkaWFQbGF5ZXI6Ok1h
eUJlU3VwcG9ydGVkOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBzdXBwb3J0
c0FsbENvZGVjcyhjb2RlY3MpID8gTWVkaWFQbGF5ZXI6OklzU3VwcG9ydGVkIDogTWVkaWFQbGF5
ZXI6OklzTm90U3VwcG9ydGVkOworICAgICAgICAgICAgcmVzdWx0ID0gZ3N0UmVnaXN0cnlTY2Fu
bmVyLnN1cHBvcnRzQWxsQ29kZWNzKGNvZGVjcykgPyBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQg
OiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CiAgICAgfQogCi0gICAgcmV0dXJuIGV4dGVu
ZGVkU3VwcG9ydHNUeXBlKHBhcmFtZXRlcnMsIHJlc3VsdCk7CisgICAgYXV0byBmaW5hbFJlc3Vs
dCA9IGV4dGVuZGVkU3VwcG9ydHNUeXBlKHBhcmFtZXRlcnMsIHJlc3VsdCk7CisgICAgR1NUX0RF
QlVHKCJTdXBwb3J0ZWQ6ICVzIiwgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoZmluYWxSZXN1
bHQpLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBmaW5hbFJlc3VsdDsKIH0KIAogdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om1hcmtFbmRPZlN0cmVhbShNZWRpYVNvdXJj
ZVByaXZhdGU6OkVuZE9mU3RyZWFtU3RhdHVzIHN0YXR1cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5oCmluZGV4IDIyNTdlOWU2ODMw
YWNiMThjNmYwOGY3MTg2YmY3NzU4YjcyNzM1ZDcuLjAyYWExZDE1YzdlMTFiYjdmNjNhOGZkNjky
NDFmNjczNTA3YTJlZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0UuaApAQCAtODIsOSArODIsNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCB0cmFja0RldGVjdGVkKFJlZlB0cjxBcHBlbmRQaXBlbGluZT4sIFJlZlB0cjxXZWJDb3JlOjpU
cmFja1ByaXZhdGVCYXNlPiwgYm9vbCBmaXJzdFRyYWNrRGV0ZWN0ZWQpOwogICAgIHZvaWQgbm90
aWZ5U2Vla05lZWRzRGF0YUZvclRpbWUoY29uc3QgTWVkaWFUaW1lJik7CiAKLSAgICBzdGF0aWMg
Ym9vbCBzdXBwb3J0c0NvZGVjKFN0cmluZyBjb2RlYyk7Ci0gICAgc3RhdGljIGJvb2wgc3VwcG9y
dHNBbGxDb2RlY3MoY29uc3QgVmVjdG9yPFN0cmluZz4mIGNvZGVjcyk7Ci0KICNpZiBFTkFCTEUo
RU5DUllQVEVEX01FRElBKQogICAgIHZvaWQgYXR0ZW1wdFRvRGVjcnlwdFdpdGhJbnN0YW5jZShD
RE1JbnN0YW5jZSYpIGZpbmFsOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYWNhcGFiaWxpdGllcy9NZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhRW5n
aW5lQ29uZmlndXJhdGlvbkZhY3RvcnkuY3BwCmluZGV4IDMyOWUyOTRjYTJmNjAxOWFjYTQ5ZjM5
YTYxMTc4ZGQ1MjY2OTE2NjEuLmM5NDgzMGRmZDFlZDVmYTQzMTk0YTlmZTk5NTQzZWQzMGQ3MTEw
MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhY2FwYWJpbGl0aWVz
L01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3Rv
cnkuY3BwCkBAIC0zOSw2ICszOSwxMCBAQAogI2luY2x1ZGUgIk1lZGlhRW5naW5lQ29uZmlndXJh
dGlvbkZhY3RvcnlDb2NvYS5oIgogI2VuZGlmCiAKKyNpZiBVU0UoR1NUUkVBTUVSKQorI2luY2x1
ZGUgIk1lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlHU3RyZWFtZXIuaCIKKyNlbmRpZgor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBib29sJiBtb2NrRW5hYmxlZCgpCkBAIC01
OCw2ICs2Miw5IEBAIHN0YXRpYyBjb25zdCBGYWN0b3J5VmVjdG9yJiBmYWN0b3JpZXMoKQogICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGYWN0b3J5VmVjdG9yPiBmYWN0b3JpZXMgPSBtYWtlTmV2
ZXJEZXN0cm95ZWQoRmFjdG9yeVZlY3Rvcih7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAg
IHsgJmNyZWF0ZU1lZGlhUGxheWVyRGVjb2RpbmdDb25maWd1cmF0aW9uQ29jb2EsIG51bGxwdHIg
fSwKKyNlbmRpZgorI2lmIFVTRShHU1RSRUFNRVIpCisgICAgICAgIHsgJmNyZWF0ZU1lZGlhUGxh
eWVyRGVjb2RpbmdDb25maWd1cmF0aW9uR1N0cmVhbWVyLCBudWxscHRyIH0sCiAjZW5kaWYKICAg
ICB9KSk7CiAgICAgcmV0dXJuIGZhY3RvcmllczsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362011</attachid>
            <date>2019-02-14 06:46:53 -0800</date>
            <delta_ts>2019-02-15 01:50:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191191-20190214144651.patch</filename>
            <type>text/plain</type>
            <size>60140</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQxNTE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDAxMzBjZDQ1MzdmYzRl
MjNkNGJiZjQ4MDNjMTcxNDkyOTA4ZDkxNy4uZjE0MmU3MWZmYTFlMTQyYmIxYzAyYjUzZGI5M2U5
NTZhNzE1ZjU4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDE4LTExLTAyICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSBEZWNvZGluZyBtZWRpYS1jYXBhYmlsaXRpZXMgY29uZmlndXJhdGlvbiBpbml0aWFsIHN1cHBv
cnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTE5
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggZW5hYmxlcyBiYXNpYyBwbGF0Zm9ybSBwcm9iaW5nIGZvciBHU3RyZWFtZXIgZGVjb2Rl
cnMsCisgICAgICAgIG9wdGlvbmFsbHkgdXNpbmcgSGFyZHdhcmUgZGVjb2RpbmcgY2FwYWJpbGl0
aWVzLiBUaGUgcHJldmlvdXMgY29kZQorICAgICAgICBmb3IgZGVjb2RlcnMvZGVtdXhlcnMgcHJv
YmluZyBwYXJ0aWFsbHkgZHVwbGljYXRlZCBiZXR3ZWVuIHRoZSBNU0UKKyAgICAgICAgcGxheWVy
IGFuZCBpdHMgcGFyZW50IGNsYXNzIHdhcyBtb3ZlZCB0byBhIG5ldyBtb2R1bGUgY2FsbGVkCisg
ICAgICAgIEdzdFJlZ2lzdHJ5U2Nhbm5lci4gVGhlcmUgaXMgb25lIGluc3RhbmNlIG9mIGl0IGZv
ciB0aGUgTVNFIHBsYXllcgorICAgICAgICBhbmQgb25lIGZvciB0aGUgcGFyZW50IGNsYXNzLgor
CisgICAgICAgIFRoZSBzY2FubmVyIGNhbiBjaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBH
c3RFbGVtZW50IEhhcmR3YXJlCisgICAgICAgIG1ldGFkYXRhIGNsYXNzaWZpZXIgaW4gZGVjb2Rl
cnMgYW5kIHRodXMgYWR2aXNlIHRoZQorICAgICAgICBNZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25G
YWN0b3J5R1N0cmVhbWVyIHRoYXQgaGFyZHdhcmUgZGVjb2RpbmcgaXMKKyAgICAgICAgc3VwcG9y
dGVkIG9yIG5vdC4gVGhpcyBpcyBvbmx5IGEgZmlyc3Qgc3RlcCB0aG91Z2guIFRoZSBzY2FubmVy
CisgICAgICAgIHNob3VsZCBhbHNvIHByb2JhYmx5IGF0dGVtcHQgYSBOVUxMLT5SRUFEWSB0cmFu
c2l0aW9uIG9uIGRlY29kZXJzCisgICAgICAgIHRvIHZhbGlkYXRlIHNwZWNpZmljIGlucHV0IGNh
cHMgYXJlIHN1cHBvcnRlZC4gQXMgdGhpcyBtaWdodAorICAgICAgICByZXF1aXJlIGNoYW5nZXMg
aW4gR1N0cmVhbWVyLCB0aGlzIHBhcnQgb2YgdGhlIHBhdGNoIHdhc24ndAorICAgICAgICBpbmNs
dWRlZC4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIGNvdmVyZWQgYnkgdGhlIGV4aXN0aW5nIG1l
ZGlhIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlOiBOZXcgZmls
ZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOiBBZGQgc3Vw
cG9ydCBmb3IgY29udmVydGluZworICAgICAgICBTdXBwb3J0c1R5cGUgZW51bSB0byBzdHJpbmcu
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaDogRGl0dG8uCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJFbnVtcy5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcDogTW92ZQorICAgICAg
ICBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUgdG8gR3N0UmVnaXN0cnlTY2FubmVy
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24u
aDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dzdFJlZ2lz
dHJ5U2Nhbm5lci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2Fu
bmVyOjpzaW5nbGV0b24pOgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjpH
c3RSZWdpc3RyeVNjYW5uZXIpOiBJbml0aWFsaXplCisgICAgICAgIHN1cHBvcnRlZCBtaW1lLXR5
cGVzIGFuZCBjb2RlY3MgZnJvbSB0aGUgR1N0cmVhbWVyIHJlZ2lzdHJ5LgorICAgICAgICAoV2Vi
Q29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjp+R3N0UmVnaXN0cnlTY2FubmVyKTogRnJlZSB0aGUg
ZWxlbWVudCBmYWN0b3JpZXMuCisgICAgICAgIChXZWJDb3JlOjpHc3RSZWdpc3RyeVNjYW5uZXI6
OmdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZSk6CisgICAgICAgIENoZWNrIHRoZSBp
bnB1dCBjYXBzIGFyZSBzdXBwb3J0ZWQsIG9wdGlvbmFsbHkgdXNpbmcgaGFyZHdhcmUKKyAgICAg
ICAgZGV2aWNlLgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjpmaWxsTWlt
ZVR5cGVTZXRGcm9tQ2Fwc01hcHBpbmcpOgorICAgICAgICBNb3ZlZCBmcm9tIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcnssTVNFfS4KKyAgICAgICAgKFdlYkNvcmU6OkdzdFJlZ2lzdHJ5U2Nh
bm5lcjo6aW5pdGlhbGl6ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlT
Y2FubmVyOjpzdXBwb3J0c0NvZGVjIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpH
c3RSZWdpc3RyeVNjYW5uZXI6OnN1cHBvcnRzQWxsQ29kZWNzIGNvbnN0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpHc3RSZWdpc3RyeVNjYW5uZXI6OmlzRGVjb2RpbmdTdXBwb3J0ZWQgY29u
c3QpOiBDaGVjaworICAgICAgICB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBpcyBzdXBwb3J0ZWQu
IEZvciBub3cgaGFyZHdhcmUgc3VwcG9ydCBpcworICAgICAgICBjaGVja2VkIGZvciB2aWRlbyBj
b25maWd1cmF0aW9ucyBvbmx5IGFzIGl0IGlzIHF1aXRlIHVuY29tbW9uCisgICAgICAgIGFueXdh
eSB0byBoYXZlIGhhcmR3YXJlLWVuYWJsZWQgYXVkaW8gZGVjb2RlcnMuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dzdFJlZ2lzdHJ5U2Nhbm5lci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdzdFJlZ2lzdHJ5U2Nhbm5lcjo6bWltZVR5cGVTZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjpzdXBwb3J0c0NvbnRhaW5lclR5cGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3N0UmVnaXN0cnlTY2FubmVyOjpSZWdpc3RyeUxvb2t1
cFJlc3VsdDo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlHU3RyZWFtZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU1lZGlhUGxheWVyRGVjb2RpbmdDb25m
aWd1cmF0aW9uR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeUdTdHJlYW1lci5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmNwcDoKKyAgICAgICAgUmVseSBvbiBuZXcgR3N0UmVnaXN0cnlTY2FubmVyIGFuZCBh
ZGQgc29tZSBkZWJ1Z2dpbmcgbWFjcm9zLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpnZXRTdXBwb3J0ZWRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzVHlwZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHA6IERpdHRvLiBB
bHNvCisgICAgICAgIHBsdWcgcXRkZW11eCBmb3IgQUFDIGNvbnRhaW5lcnMsIHRoaXMgaXMgYW4g
ZXhwbGljaXQgY29uc2VxdWVuY2UKKyAgICAgICAgb2YgZmluZXItZ3JhaW5lZCBjb2RlY3MgcHJv
YmluZy4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpBcHBlbmRQaXBlbGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6cGFyc2VEZW11eGVyU3JjUGFkQ2Fw
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Hc3RSZWdpc3Ry
eVNjYW5uZXJNU0UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdzdFJlZ2lzdHJ5U2Nh
bm5lck1TRTo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdzdFJlZ2lzdHJ5U2Nhbm5l
ck1TRTo6R3N0UmVnaXN0cnlTY2FubmVyTVNFKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvbXNlL0dzdFJlZ2lzdHJ5U2Nhbm5lck1TRS5oOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRS5jcHA6CisgICAgICAgIFJlbHkgb24gbmV3IEdzdFJlZ2lzdHJ5U2Nhbm5lciBhbmQg
YWRkIHNvbWUgZGVidWdnaW5nIG1hY3Jvcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6Z2V0U3VwcG9ydGVkVHlwZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzdXBwb3J0c1R5cGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFLmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFF
bmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmYWN0b3Jp
ZXMpOiBHU3RyZWFtZXIgc3VwcG9ydC4KKwogMjAxOS0wMi0xMyAgUnlvc3VrZSBOaXdhICA8cm5p
d2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBDcmFzaCBpbiBET01UaW1lcjo6ZmlyZWQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQppbmRleCA2YTBlMDMzYzJhMzcxODdkZGQ1
YTY3OGFhOTAwNjQ4NzY1MmI1ODA5Li4yNmQyOGVkMGViNjAwYzI5NzFjOTgwMWYyZGVlMDEwMWZi
MDVjMzVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21h
a2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCkBAIC0xMCw3
ICsxMCw5IEBAIGlmIChFTkFCTEVfVklERU8gT1IgRU5BQkxFX1dFQl9BVURJTykKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9Hc3RBbGxvY2F0b3JGYXN0TWFsbG9jLmNwcAor
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR3N0UmVnaXN0cnlTY2FubmVyLmNw
cAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlHU3RyZWFtZXIuY3BwCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFT
YW1wbGVHU3RyZWFtZXIuY3BwCkBAIC0yNiw2ICsyOCw3IEBAIGlmIChFTkFCTEVfVklERU8gT1Ig
RU5BQkxFX1dFQl9BVURJTykKIAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
bXNlL0FwcGVuZFBpcGVsaW5lLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvbXNlL0dTdHJlYW1lck1lZGlhRGVzY3JpcHRpb24uY3BwCisgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9tc2UvR3N0UmVnaXN0cnlTY2FubmVyTVNFLmNwcAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNv
dXJjZUNsaWVudEdTdHJlYW1lck1TRS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL21zZS9NZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAppbmRleCBiNzI5MTU0Yzk3NzdiOTEx
ZjE1YzEyMjdmZTBjYjQ4NWI2YzI5ZjFjLi5iZGEwNzExZjZiNTVjMjZkNDhhZjYzOGNjOGIyZjlh
NTc4ZWI3NzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXIuY3BwCkBAIC0xNjE4LDYgKzE2MTgsMjAgQEAgU3RyaW5nIGNvbnZlcnRFbnVtZXJh
dGlvblRvU3RyaW5nKE1lZGlhUGxheWVyRW51bXM6OlByZWxvYWQgZW51bWVyYXRpb25WYWx1ZSkK
ICAgICByZXR1cm4gdmFsdWVzW3N0YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSld
OwogfQogCitTdHJpbmcgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoTWVkaWFQbGF5ZXJFbnVt
czo6U3VwcG9ydHNUeXBlIGVudW1lcmF0aW9uVmFsdWUpCit7CisgICAgc3RhdGljIGNvbnN0IE5l
dmVyRGVzdHJveWVkPFN0cmluZz4gdmFsdWVzW10gPSB7CisgICAgICAgIE1BS0VfU1RBVElDX1NU
UklOR19JTVBMKCJJc05vdFN1cHBvcnRlZCIpLAorICAgICAgICBNQUtFX1NUQVRJQ19TVFJJTkdf
SU1QTCgiSXNTdXBwb3J0ZWQiKSwKKyAgICAgICAgTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIk1h
eUJlU3VwcG9ydGVkIiksCisgICAgfTsKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGF0aWNfY2FzdDxz
aXplX3Q+KE1lZGlhUGxheWVyRW51bXM6OklzTm90U3VwcG9ydGVkKSwgIk1lZGlhUGxheWVyRW51
bXM6OklzTm90U3VwcG9ydGVkIGlzIG5vdCAwIGFzIGV4cGVjdGVkIik7CisgICAgc3RhdGljX2Fz
c2VydChzdGF0aWNfY2FzdDxzaXplX3Q+KE1lZGlhUGxheWVyRW51bXM6OklzU3VwcG9ydGVkKSA9
PSAxLCAiTWVkaWFQbGF5ZXJFbnVtczo6SXNTdXBwb3J0ZWQgaXMgbm90IDEgYXMgZXhwZWN0ZWQi
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHNpemVfdD4oTWVkaWFQbGF5ZXJFbnVt
czo6TWF5QmVTdXBwb3J0ZWQpID09IDIsICJNZWRpYVBsYXllckVudW1zOjpNYXlCZVN1cHBvcnRl
ZCBpcyBub3QgMiBhcyBleHBlY3RlZCIpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+
KGVudW1lcmF0aW9uVmFsdWUpIDwgV1RGX0FSUkFZX0xFTkdUSCh2YWx1ZXMpKTsKKyAgICByZXR1
cm4gdmFsdWVzW3N0YXRpY19jYXN0PHNpemVfdD4oZW51bWVyYXRpb25WYWx1ZSldOworfQorCiB9
CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyLmgKaW5kZXggNDFiY2RlMjQ4MzdjYmIyY2NjODE0NmFmNzhjMmZkYjZkNjE1MGUxMy4uZWZj
MTViYTFjYjY1ODZlMjYwNmE5M2IwNDEzMzBiOWJkN2ZkZDIyZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCkBAIC0yNTMsOCArMjUzLDggQEAg
cHVibGljOgogICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogCiAgICAgLy8gTWVkaWEgZW5naW5lIHN1
cHBvcnQuCi0gICAgZW51bSBTdXBwb3J0c1R5cGUgeyBJc05vdFN1cHBvcnRlZCwgSXNTdXBwb3J0
ZWQsIE1heUJlU3VwcG9ydGVkIH07Ci0gICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5
cGUgc3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmKTsKKyAg
ICB1c2luZyBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU7CisgICAgc3RhdGljIFN1cHBv
cnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYp
OwogICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nLCBBU0NJ
SUNhc2VJbnNlbnNpdGl2ZUhhc2g+Jik7CiAgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsK
ICAgICBzdGF0aWMgSGFzaFNldDxSZWZQdHI8U2VjdXJpdHlPcmlnaW4+PiBvcmlnaW5zSW5NZWRp
YUNhY2hlKGNvbnN0IFN0cmluZyYgcGF0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllckVudW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllckVudW1zLmgKaW5kZXggMDZmMGNjZDI4ZDZhYjlmNDNm
NjFiZWYyN2ViMWYzMGJkZTYyZGQ0Ni4uOTUwZTBlZDI4N2ViMzIxYTQ5YTU0MjNlNjMxMzFhYTA5
MjcwY2I2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXJFbnVtcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01l
ZGlhUGxheWVyRW51bXMuaApAQCAtMzYsNiArMzYsNyBAQCBwdWJsaWM6CiAgICAgZW51bSBNb3Zp
ZUxvYWRUeXBlIHsgVW5rbm93biwgRG93bmxvYWQsIFN0b3JlZFN0cmVhbSwgTGl2ZVN0cmVhbSB9
OwogICAgIGVudW0gUHJlbG9hZCB7IE5vbmUsIE1ldGFEYXRhLCBBdXRvIH07CiAgICAgZW51bSBW
aWRlb0dyYXZpdHkgeyBWaWRlb0dyYXZpdHlSZXNpemUsIFZpZGVvR3Jhdml0eVJlc2l6ZUFzcGVj
dCwgVmlkZW9HcmF2aXR5UmVzaXplQXNwZWN0RmlsbCB9OworICAgIGVudW0gU3VwcG9ydHNUeXBl
IHsgSXNOb3RTdXBwb3J0ZWQsIElzU3VwcG9ydGVkLCBNYXlCZVN1cHBvcnRlZCB9OwogICAgIGVu
dW0gewogICAgICAgICBWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSA9IDAsCiAgICAgICAgIFZpZGVv
RnVsbHNjcmVlbk1vZGVTdGFuZGFyZCA9IDEgPDwgMCwKQEAgLTQ3LDYgKzQ4LDcgQEAgcHVibGlj
OgogV1RGOjpTdHJpbmcgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoTWVkaWFQbGF5ZXJFbnVt
czo6UmVhZHlTdGF0ZSk7CiBXVEY6OlN0cmluZyBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhN
ZWRpYVBsYXllckVudW1zOjpOZXR3b3JrU3RhdGUpOwogV1RGOjpTdHJpbmcgY29udmVydEVudW1l
cmF0aW9uVG9TdHJpbmcoTWVkaWFQbGF5ZXJFbnVtczo6UHJlbG9hZCk7CitXVEY6OlN0cmluZyBj
b252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGUp
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAK
aW5kZXggYzMyNTM5YjJkZjFmMzFhMGRjOWM4ZjQ1OTJkYjhmNmE3MGExZWJhNS4uMTdjYTJiOWJh
Mjc2MjE3N2NmNzZmMTQ4NDg3ZGI5NTM1ZjU2ODY5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1v
bi5jcHAKQEAgLTMwMiwxNiArMzAyLDYgQEAgdWludDY0X3QgdG9Hc3RVbnNpZ25lZDY0VGltZShj
b25zdCBNZWRpYVRpbWUmIG1lZGlhVGltZSkKICAgICByZXR1cm4gdGltZS50aW1lVmFsdWUoKTsK
IH0KIAotYm9vbCBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoR0xpc3QqIGVsZW1l
bnRGYWN0b3JpZXMsIGNvbnN0IGNoYXIqIGNhcHNTdHJpbmcpCi17Ci0gICAgR1JlZlB0cjxHc3RD
YXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX2Zyb21fc3RyaW5nKGNhcHNTdHJpbmcpKTsK
LSAgICBHTGlzdCogY2FuZGlkYXRlcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9maWx0ZXIo
ZWxlbWVudEZhY3RvcmllcywgY2Fwcy5nZXQoKSwgR1NUX1BBRF9TSU5LLCBmYWxzZSk7Ci0gICAg
Ym9vbCByZXN1bHQgPSBjYW5kaWRhdGVzOwotCi0gICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3Rf
ZnJlZShjYW5kaWRhdGVzKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBzdGF0aWMgdm9pZCBz
aW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2soR3N0QnVzKiwgR3N0TWVzc2FnZSogbWVzc2FnZSwgR3N0
QmluKiBwaXBlbGluZSkKIHsKICAgICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9HU3RyZWFtZXJDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9HU3RyZWFtZXJDb21tb24uaAppbmRleCA1Y2I3MTdkM2JmNDE1NzRiZDk2ZDBmYzBj
ZjE1MDMxN2E5ZTQxOTg5Li40MTkwZDY0ZmJlMWFmNTc1MzJiYzc2ODYyNmU3YzhiYzI2MGYzZDYx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
R1N0cmVhbWVyQ29tbW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5oCkBAIC0yMTYsNyArMjE2LDYgQEAgcHJpdmF0ZToK
IH07CiAKIAotYm9vbCBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoR0xpc3QqIGVs
ZW1lbnRGYWN0b3JpZXMsIGNvbnN0IGNoYXIqIGNhcHNTdHJpbmcpOwogdm9pZCBjb25uZWN0U2lt
cGxlQnVzTWVzc2FnZUNhbGxiYWNrKEdzdEVsZW1lbnQqIHBpcGVsaW5lKTsKIHZvaWQgZGlzY29u
bmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhHc3RFbGVtZW50KiBwaXBlbGluZSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9Hc3RS
ZWdpc3RyeVNjYW5uZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0dzdFJlZ2lzdHJ5U2Nhbm5lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjY1MGNjMGViZTNmYzhm
NTU3MWU0ZDE0YTU1YzIzNmJmYjM3ZDUwMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9Hc3RSZWdpc3RyeVNjYW5uZXIuY3BwCkBA
IC0wLDAgKzEsMzMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwKKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3N0UmVnaXN0cnlTY2FubmVyLmgiCisKKyNpZiBV
U0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgIkNvbnRlbnRUeXBlLmgiCisjaW5jbHVkZSAiR1JlZlB0
ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgPGZubWF0Y2guaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRT
dHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHU1RfREVCVUdfQ0FURUdPUllfU1RB
VElDKHdlYmtpdF9tZWRpYV9nc3RfcmVnaXN0cnlfc2Nhbm5lcl9kZWJ1Zyk7CisjZGVmaW5lIEdT
VF9DQVRfREVGQVVMVCB3ZWJraXRfbWVkaWFfZ3N0X3JlZ2lzdHJ5X3NjYW5uZXJfZGVidWcKKwor
R3N0UmVnaXN0cnlTY2FubmVyJiBHc3RSZWdpc3RyeVNjYW5uZXI6OnNpbmdsZXRvbigpCit7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEdzdFJlZ2lzdHJ5U2Nhbm5lcj4gc2hhcmVkSW5zdGFu
Y2U7CisgICAgcmV0dXJuIHNoYXJlZEluc3RhbmNlOworfQorCitHc3RSZWdpc3RyeVNjYW5uZXI6
OkdzdFJlZ2lzdHJ5U2Nhbm5lcihib29sIGlzTWVkaWFTb3VyY2UpCisgICAgOiBtX2lzTWVkaWFT
b3VyY2UoaXNNZWRpYVNvdXJjZSkKK3sKKyAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJr
aXRfbWVkaWFfZ3N0X3JlZ2lzdHJ5X3NjYW5uZXJfZGVidWcsICJ3ZWJraXRyZWdpc3RyeXNjYW5u
ZXIiLCAwLCAiV2ViS2l0IEdTdHJlYW1lciByZWdpc3RyeSBzY2FubmVyIik7CisgICAgbV9hdWRp
b0RlY29kZXJGYWN0b3JpZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZ2V0X2VsZW1lbnRz
KEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREVSIHwgR1NUX0VMRU1FTlRfRkFDVE9SWV9U
WVBFX01FRElBX0FVRElPLCBHU1RfUkFOS19NQVJHSU5BTCk7CisgICAgbV9hdWRpb1BhcnNlckZh
Y3RvcmllcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1F
TlRfRkFDVE9SWV9UWVBFX1BBUlNFUiB8IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9B
VURJTywgR1NUX1JBTktfTk9ORSk7CisgICAgbV92aWRlb0RlY29kZXJGYWN0b3JpZXMgPSBnc3Rf
ZWxlbWVudF9mYWN0b3J5X2xpc3RfZ2V0X2VsZW1lbnRzKEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQ
RV9ERUNPREVSIHwgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX1ZJREVPLCBHU1RfUkFO
S19NQVJHSU5BTCk7CisgICAgbV92aWRlb1BhcnNlckZhY3RvcmllcyA9IGdzdF9lbGVtZW50X2Zh
Y3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX1BBUlNFUiB8
IEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9NRURJQV9WSURFTywgR1NUX1JBTktfTUFSR0lOQUwp
OworICAgIG1fZGVtdXhlckZhY3RvcmllcyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRf
ZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFTVVYRVIsIEdTVF9SQU5LX01BUkdJ
TkFMKTsKKworICAgIGluaXRpYWxpemUoKTsKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVH
CisgICAgR1NUX0RFQlVHKCIlcyByZWdpc3RyeSBzY2FubmVyIGluaXRpYWxpemVkIiwgbV9pc01l
ZGlhU291cmNlID8gIk1TRSIgOiAiUmVndWxhciBwbGF5YmFjayIpOworICAgIGZvciAoYXV0byYg
bWltZVR5cGUgOiBtX21pbWVUeXBlU2V0KQorICAgICAgICBHU1RfREVCVUcoIk1pbWUtdHlwZSBy
ZWdpc3RlcmVkOiAlcyIsIG1pbWVUeXBlLnV0ZjgoKS5kYXRhKCkpOworICAgIGZvciAoYXV0byYg
aXRlbSA6IG1fY29kZWNNYXApCisgICAgICAgIEdTVF9ERUJVRygiJXMgY29kZWMgcGF0dGVybiBy
ZWdpc3RlcmVkOiAlcyIsIGl0ZW0udmFsdWUgPyAiSGFyZHdhcmUiIDogIlNvZnR3YXJlIiwgaXRl
bS5rZXkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKK30KKworR3N0UmVnaXN0cnlT
Y2FubmVyOjp+R3N0UmVnaXN0cnlTY2FubmVyKCkKK3sKKyAgICBnc3RfcGx1Z2luX2ZlYXR1cmVf
bGlzdF9mcmVlKG1fYXVkaW9EZWNvZGVyRmFjdG9yaWVzKTsKKyAgICBnc3RfcGx1Z2luX2ZlYXR1
cmVfbGlzdF9mcmVlKG1fYXVkaW9QYXJzZXJGYWN0b3JpZXMpOworICAgIGdzdF9wbHVnaW5fZmVh
dHVyZV9saXN0X2ZyZWUobV92aWRlb0RlY29kZXJGYWN0b3JpZXMpOworICAgIGdzdF9wbHVnaW5f
ZmVhdHVyZV9saXN0X2ZyZWUobV92aWRlb1BhcnNlckZhY3Rvcmllcyk7CisgICAgZ3N0X3BsdWdp
bl9mZWF0dXJlX2xpc3RfZnJlZShtX2RlbXV4ZXJGYWN0b3JpZXMpOworfQorCitHc3RSZWdpc3Ry
eVNjYW5uZXI6OlJlZ2lzdHJ5TG9va3VwUmVzdWx0IEdzdFJlZ2lzdHJ5U2Nhbm5lcjo6Z3N0UmVn
aXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKEdMaXN0KiBlbGVtZW50RmFjdG9yaWVzLCBjb25z
dCBjaGFyKiBjYXBzU3RyaW5nLCBib29sIHNob3VsZENoZWNrSGFyZHdhcmVDbGFzc2lmaWVyKQor
eworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19mcm9tX3N0
cmluZyhjYXBzU3RyaW5nKSk7CisgICAgR0xpc3QqIGNhbmRpZGF0ZXMgPSBnc3RfZWxlbWVudF9m
YWN0b3J5X2xpc3RfZmlsdGVyKGVsZW1lbnRGYWN0b3JpZXMsIGNhcHMuZ2V0KCksIEdTVF9QQURf
U0lOSywgZmFsc2UpOworICAgIGJvb2wgaXNTdXBwb3J0ZWQgPSBjYW5kaWRhdGVzOworICAgIGJv
b2wgaXNVc2luZ0hhcmR3YXJlID0gZmFsc2U7CisKKyAgICBpZiAoc2hvdWxkQ2hlY2tIYXJkd2Fy
ZUNsYXNzaWZpZXIpIHsKKyAgICAgICAgZm9yIChHTGlzdCogZmFjdG9yaWVzID0gY2FuZGlkYXRl
czsgZmFjdG9yaWVzICE9IG51bGxwdHI7IGZhY3RvcmllcyA9IGdfbGlzdF9uZXh0KGZhY3Rvcmll
cykpIHsKKyAgICAgICAgICAgIGF1dG8qIGZhY3RvcnkgPSByZWludGVycHJldF9jYXN0PEdzdEVs
ZW1lbnRGYWN0b3J5Kj4oZmFjdG9yaWVzLT5kYXRhKTsKKyAgICAgICAgICAgIFN0cmluZyBtZXRh
ZGF0YSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X21ldGFkYXRhKGZhY3RvcnksIEdTVF9FTEVN
RU5UX01FVEFEQVRBX0tMQVNTKTsKKyAgICAgICAgICAgIGF1dG8gY29tcG9uZW50cyA9IG1ldGFk
YXRhLnNwbGl0KCcvJyk7CisgICAgICAgICAgICBpZiAoY29tcG9uZW50cy5jb250YWlucygiSGFy
ZHdhcmUiKSkgeworICAgICAgICAgICAgICAgIGlzVXNpbmdIYXJkd2FyZSA9IHRydWU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKGNhbmRpZGF0ZXMpOworI2lmbmRlZiBHU1Rf
RElTQUJMRV9HU1RfREVCVUcKKyAgICBjb25zdCBjaGFyKiBlbGVtZW50VHlwZSA9ICIiOworICAg
IGlmIChlbGVtZW50RmFjdG9yaWVzID09IG1fYXVkaW9QYXJzZXJGYWN0b3JpZXMpCisgICAgICAg
IGVsZW1lbnRUeXBlID0gIkF1ZGlvIHBhcnNlciI7CisgICAgZWxzZSBpZiAoZWxlbWVudEZhY3Rv
cmllcyA9PSBtX2F1ZGlvRGVjb2RlckZhY3RvcmllcykKKyAgICAgICAgZWxlbWVudFR5cGUgPSAi
QXVkaW8gZGVjb2RlciI7CisgICAgZWxzZSBpZiAoZWxlbWVudEZhY3RvcmllcyA9PSBtX3ZpZGVv
UGFyc2VyRmFjdG9yaWVzKQorICAgICAgICBlbGVtZW50VHlwZSA9ICJWaWRlbyBwYXJzZXIiOwor
ICAgIGVsc2UgaWYgKGVsZW1lbnRGYWN0b3JpZXMgPT0gbV92aWRlb0RlY29kZXJGYWN0b3JpZXMp
CisgICAgICAgIGVsZW1lbnRUeXBlID0gIlZpZGVvIGRlY29kZXIiOworICAgIGVsc2UgaWYgKGVs
ZW1lbnRGYWN0b3JpZXMgPT0gbV9kZW11eGVyRmFjdG9yaWVzKQorICAgICAgICBlbGVtZW50VHlw
ZSA9ICJEZW11eGVyIjsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIEdTVF9MT0coIiVzIGxvb2t1cCByZXN1bHQgZm9yIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQg
IiA6IGlzU3VwcG9ydGVkPSVzLCBpc1VzaW5nSGFyZHdhcmU9JXMiLCBlbGVtZW50VHlwZSwgY2Fw
cy5nZXQoKSwgYm9vbEZvclByaW50aW5nKGlzU3VwcG9ydGVkKSwgYm9vbEZvclByaW50aW5nKGlz
VXNpbmdIYXJkd2FyZSkpOworI2VuZGlmCisgICAgcmV0dXJuIEdzdFJlZ2lzdHJ5U2Nhbm5lcjo6
UmVnaXN0cnlMb29rdXBSZXN1bHQgeyBpc1N1cHBvcnRlZCwgaXNVc2luZ0hhcmR3YXJlIH07Cit9
CisKK3ZvaWQgR3N0UmVnaXN0cnlTY2FubmVyOjpmaWxsTWltZVR5cGVTZXRGcm9tQ2Fwc01hcHBp
bmcoVmVjdG9yPEdzdENhcHNXZWJLaXRNYXBwaW5nPiYgbWFwcGluZykKK3sKKyAgICBmb3IgKGF1
dG8mIGN1cnJlbnQgOiBtYXBwaW5nKSB7CisgICAgICAgIEdMaXN0KiBmYWN0b3JpZXM7CisgICAg
ICAgIHN3aXRjaCAoY3VycmVudC5lbGVtZW50VHlwZSkgeworICAgICAgICBjYXNlIERlbXV4ZXI6
CisgICAgICAgICAgICBmYWN0b3JpZXMgPSBtX2RlbXV4ZXJGYWN0b3JpZXM7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBBdWRpb0RlY29kZXI6CisgICAgICAgICAgICBmYWN0b3Jp
ZXMgPSBtX2F1ZGlvRGVjb2RlckZhY3RvcmllczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFZpZGVvRGVjb2RlcjoKKyAgICAgICAgICAgIGZhY3RvcmllcyA9IG1fdmlkZW9EZWNv
ZGVyRmFjdG9yaWVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGZhY3RvcmllcywgY3VycmVudC5j
YXBzU3RyaW5nKSkgeworICAgICAgICAgICAgaWYgKCFjdXJyZW50LndlYmtpdENvZGVjUGF0dGVy
bnMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBwYXR0ZXJu
IDogY3VycmVudC53ZWJraXRDb2RlY1BhdHRlcm5zKQorICAgICAgICAgICAgICAgICAgICBtX2Nv
ZGVjTWFwLmFkZChwYXR0ZXJuLCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoIWN1cnJlbnQud2Via2l0TWltZVR5cGVzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAg
IGZvciAoY29uc3QgYXV0byYgbWltZVR5cGUgOiBjdXJyZW50LndlYmtpdE1pbWVUeXBlcykKKyAg
ICAgICAgICAgICAgICAgICAgbV9taW1lVHlwZVNldC5hZGQobWltZVR5cGUpOworICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5n
KGN1cnJlbnQuY2Fwc1N0cmluZykpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEdzdFJl
Z2lzdHJ5U2Nhbm5lcjo6aW5pdGlhbGl6ZSgpCit7CisgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxl
bWVudEZvck1lZGlhVHlwZShtX2F1ZGlvRGVjb2RlckZhY3RvcmllcywgImF1ZGlvL21wZWcsIG1w
ZWd2ZXJzaW9uPShpbnQpNCIpKSB7CisgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21pY1N0
cmluZygiYXVkaW8vYWFjIikpOworICAgICAgICBtX21pbWVUeXBlU2V0LmFkZChBdG9taWNTdHJp
bmcoImF1ZGlvL21wNCIpKTsKKyAgICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5n
KCJhdWRpby94LW00YSIpKTsKKyAgICAgICAgbV9jb2RlY01hcC5hZGQoQXRvbWljU3RyaW5nKCJt
cGVnIiksIGZhbHNlKTsKKyAgICAgICAgbV9jb2RlY01hcC5hZGQoQXRvbWljU3RyaW5nKCJtcDRh
KiIpLCBmYWxzZSk7CisgICAgfQorCisgICAgYXV0byBvcHVzU3VwcG9ydGVkID0gZ3N0UmVnaXN0
cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKG1fYXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAiYXVkaW8v
eC1vcHVzIik7CisgICAgaWYgKG9wdXNTdXBwb3J0ZWQgJiYgKCFtX2lzTWVkaWFTb3VyY2UgfHwg
Z3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKG1fYXVkaW9QYXJzZXJGYWN0b3JpZXMs
ICJhdWRpby94LW9wdXMiKSkpIHsKKyAgICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3Ry
aW5nKCJhdWRpby9vcHVzIikpOworICAgICAgICBtX2NvZGVjTWFwLmFkZChBdG9taWNTdHJpbmco
Im9wdXMiKSwgZmFsc2UpOworICAgICAgICBtX2NvZGVjTWFwLmFkZChBdG9taWNTdHJpbmcoIngt
b3B1cyIpLCBmYWxzZSk7CisgICAgfQorCisgICAgYXV0byB2b3JiaXNTdXBwb3J0ZWQgPSBnc3RS
ZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUobV9hdWRpb0RlY29kZXJGYWN0b3JpZXMsICJh
dWRpby94LXZvcmJpcyIpOworICAgIGlmICh2b3JiaXNTdXBwb3J0ZWQgJiYgKCFtX2lzTWVkaWFT
b3VyY2UgfHwgZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKG1fYXVkaW9QYXJzZXJG
YWN0b3JpZXMsICJhdWRpby94LXZvcmJpcyIpKSkgeworICAgICAgICBtX2NvZGVjTWFwLmFkZChB
dG9taWNTdHJpbmcoInZvcmJpcyIpLCBmYWxzZSk7CisgICAgICAgIG1fY29kZWNNYXAuYWRkKEF0
b21pY1N0cmluZygieC12b3JiaXMiKSwgZmFsc2UpOworICAgIH0KKworICAgIGlmIChnc3RSZWdp
c3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUobV9kZW11eGVyRmFjdG9yaWVzLCAidmlkZW8veC1t
YXRyb3NrYSIpKSB7CisgICAgICAgIGF1dG8gdnA4RGVjb2RlckF2YWlsYWJsZSA9IGdzdFJlZ2lz
dHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShtX3ZpZGVvRGVjb2RlckZhY3RvcmllcywgInZpZGVv
L3gtdnA4IiwgdHJ1ZSk7CisgICAgICAgIGF1dG8gdnA5RGVjb2RlckF2YWlsYWJsZSA9IGdzdFJl
Z2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShtX3ZpZGVvRGVjb2RlckZhY3RvcmllcywgInZp
ZGVvL3gtdnA5IiwgdHJ1ZSk7CisKKyAgICAgICAgaWYgKHZwOERlY29kZXJBdmFpbGFibGUgfHwg
dnA5RGVjb2RlckF2YWlsYWJsZSkKKyAgICAgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21p
Y1N0cmluZygidmlkZW8vd2VibSIpKTsKKworICAgICAgICBpZiAodnA4RGVjb2RlckF2YWlsYWJs
ZSkgeworICAgICAgICAgICAgbV9jb2RlY01hcC5hZGQoQXRvbWljU3RyaW5nKCJ2cDgiKSwgdnA4
RGVjb2RlckF2YWlsYWJsZS51c2luZ0hhcmR3YXJlKTsKKyAgICAgICAgICAgIG1fY29kZWNNYXAu
YWRkKEF0b21pY1N0cmluZygieC12cDgiKSwgdnA4RGVjb2RlckF2YWlsYWJsZS51c2luZ0hhcmR3
YXJlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodnA5RGVjb2RlckF2YWlsYWJsZSkgeworICAg
ICAgICAgICAgbV9jb2RlY01hcC5hZGQoQXRvbWljU3RyaW5nKCJ2cDkiKSwgdnA5RGVjb2RlckF2
YWlsYWJsZS51c2luZ0hhcmR3YXJlKTsKKyAgICAgICAgICAgIG1fY29kZWNNYXAuYWRkKEF0b21p
Y1N0cmluZygieC12cDkiKSwgdnA5RGVjb2RlckF2YWlsYWJsZS51c2luZ0hhcmR3YXJlKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAob3B1c1N1cHBvcnRlZCkKKyAgICAgICAgICAgIG1fbWltZVR5
cGVTZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vd2VibSIpKTsKKyAgICB9CisKKyAgICBhdXRv
IGgyNjREZWNvZGVyQXZhaWxhYmxlID0gZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBl
KG1fdmlkZW9EZWNvZGVyRmFjdG9yaWVzLCAidmlkZW8veC1oMjY0LCBwcm9maWxlPShzdHJpbmcp
eyBjb25zdHJhaW5lZC1iYXNlbGluZSwgYmFzZWxpbmUsIGhpZ2ggfSIsIHRydWUpOworICAgIGlm
IChoMjY0RGVjb2RlckF2YWlsYWJsZSAmJiAoIW1faXNNZWRpYVNvdXJjZSB8fCBnc3RSZWdpc3Ry
eUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUobV92aWRlb1BhcnNlckZhY3RvcmllcywgInZpZGVvL3gt
aDI2NCIpKSkgeworICAgICAgICBtX21pbWVUeXBlU2V0LmFkZChBdG9taWNTdHJpbmcoInZpZGVv
L21wNCIpKTsKKyAgICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5nKCJ2aWRlby94
LW00diIpKTsKKyAgICAgICAgbV9jb2RlY01hcC5hZGQoQXRvbWljU3RyaW5nKCJ4LWgyNjQiKSwg
aDI2NERlY29kZXJBdmFpbGFibGUudXNpbmdIYXJkd2FyZSk7CisgICAgICAgIG1fY29kZWNNYXAu
YWRkKEF0b21pY1N0cmluZygiYXZjKiIpLCBoMjY0RGVjb2RlckF2YWlsYWJsZS51c2luZ0hhcmR3
YXJlKTsKKyAgICAgICAgbV9jb2RlY01hcC5hZGQoQXRvbWljU3RyaW5nKCJtcDR2KiIpLCBoMjY0
RGVjb2RlckF2YWlsYWJsZS51c2luZ0hhcmR3YXJlKTsKKyAgICB9CisKKyAgICBpZiAobV9pc01l
ZGlhU291cmNlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgbWltZS10eXBlcyBpbml0
aWFsaXplZCBiZWxvdyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgTVNFIGJhY2tlbmQuCisKKyAg
ICBWZWN0b3I8R3N0Q2Fwc1dlYktpdE1hcHBpbmc+IG1hcHBpbmcgPSB7CisgICAgICAgIHtBdWRp
b0RlY29kZXIsICJhdWRpby9taWRpIiwgeyJhdWRpby9taWRpIiwgImF1ZGlvL3JpZmYtbWlkaSJ9
LCB7IH19LAorICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8veC1hYzMiLCB7IH0sIHsgfX0s
CisgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LWR0cyIsIHsgfSwgeyB9fSwKKyAgICAg
ICAge0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtZWFjMyIsIHsiYXVkaW8veC1hYzMifSwgeyB9fSwK
KyAgICAgICAge0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtZmxhYyIsIHsiYXVkaW8veC1mbGFjIiwg
ImF1ZGlvL2ZsYWMifSwgeyB9fSwKKyAgICAgICAge0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtc2Jj
IiwgeyB9LCB7IH19LAorICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8veC1zaWQiLCB7IH0s
IHsgfX0sCisgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LXNwZWV4IiwgeyJhdWRpby9z
cGVleCIsICJhdWRpby94LXNwZWV4In0sIHsgfX0sCisgICAgICAgIHtBdWRpb0RlY29kZXIsICJh
dWRpby94LXdhdnBhY2siLCB7ImF1ZGlvL3gtd2F2cGFjayJ9LCB7IH19LAorICAgICAgICB7Vmlk
ZW9EZWNvZGVyLCAidmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCl7MSwyfSwgc3lzdGVtc3Ry
ZWFtPShib29sZWFuKWZhbHNlIiwgeyJ2aWRlby9tcGVnIn0sIHsibXBlZyJ9fSwKKyAgICAgICAg
e1ZpZGVvRGVjb2RlciwgInZpZGVvL21wZWd0cyIsIHsgfSwgeyB9fSwKKyAgICAgICAge1ZpZGVv
RGVjb2RlciwgInZpZGVvL3gtZGlyYWMiLCB7IH0sIHsgfX0sCisgICAgICAgIHtWaWRlb0RlY29k
ZXIsICJ2aWRlby94LWZsYXNoLXZpZGVvIiwgeyJ2aWRlby9mbHYiLCAidmlkZW8veC1mbHYifSwg
eyB9fSwKKyAgICAgICAge1ZpZGVvRGVjb2RlciwgInZpZGVvL3gtaDI2MyIsIHsgfSwgeyB9fSwK
KyAgICAgICAge1ZpZGVvRGVjb2RlciwgInZpZGVvL3gtbXN2aWRlb2NvZGVjIiwgeyJ2aWRlby94
LW1zdmlkZW8ifSwgeyB9fSwKKyAgICAgICAge0RlbXV4ZXIsICJhcHBsaWNhdGlvbi92bmQucm4t
cmVhbG1lZGlhIiwgeyB9LCB7IH19LAorICAgICAgICB7RGVtdXhlciwgImFwcGxpY2F0aW9uL3gt
M2dwIiwgeyB9LCB7IH19LAorICAgICAgICB7RGVtdXhlciwgImFwcGxpY2F0aW9uL3gtaGxzIiwg
eyJhcHBsaWNhdGlvbi92bmQuYXBwbGUubXBlZ3VybCIsICJhcHBsaWNhdGlvbi94LW1wZWd1cmwi
fSwgeyB9fSwKKyAgICAgICAge0RlbXV4ZXIsICJhcHBsaWNhdGlvbi94LXBuLXJlYWxhdWRpbyIs
IHsgfSwgeyB9fSwKKyAgICAgICAge0RlbXV4ZXIsICJhdWRpby94LWFpZmYiLCB7IH0sIHsgfX0s
CisgICAgICAgIHtEZW11eGVyLCAiYXVkaW8veC13YXYiLCB7ImF1ZGlvL3gtd2F2IiwgImF1ZGlv
L3dhdiIsICJhdWRpby92bmQud2F2ZSJ9LCB7IjEifX0sCisgICAgICAgIHtEZW11eGVyLCAidmlk
ZW8vcXVpY2t0aW1lIiwgeyB9LCB7IH19LAorICAgICAgICB7RGVtdXhlciwgInZpZGVvL3F1aWNr
dGltZSwgdmFyaWFudD0oc3RyaW5nKTNncHAiLCB7InZpZGVvLzNncHAifSwgeyB9fSwKKyAgICAg
ICAge0RlbXV4ZXIsICJ2aWRlby94LW1zLWFzZiIsIHsgfSwgeyB9fSwKKyAgICB9OworICAgIGZp
bGxNaW1lVHlwZVNldEZyb21DYXBzTWFwcGluZyhtYXBwaW5nKTsKKworICAgIGlmIChnc3RSZWdp
c3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUobV9kZW11eGVyRmFjdG9yaWVzLCAiYXBwbGljYXRp
b24vb2dnIikpIHsKKyAgICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5nKCJhcHBs
aWNhdGlvbi9vZ2ciKSk7CisKKyAgICAgICAgaWYgKHZvcmJpc1N1cHBvcnRlZCkgeworICAgICAg
ICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9vZ2ciKSk7CisgICAg
ICAgICAgICBtX21pbWVUeXBlU2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL3gtdm9yYmlzK29n
ZyIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JN
ZWRpYVR5cGUobV9hdWRpb0RlY29kZXJGYWN0b3JpZXMsICJhdWRpby94LXNwZWV4IikpIHsKKyAg
ICAgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vb2dnIikpOwor
ICAgICAgICAgICAgbV9jb2RlY01hcC5hZGQoQXRvbWljU3RyaW5nKCJzcGVleCIpLCBmYWxzZSk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFU
eXBlKG1fdmlkZW9EZWNvZGVyRmFjdG9yaWVzLCAidmlkZW8veC10aGVvcmEiKSkgeworICAgICAg
ICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5nKCJ2aWRlby9vZ2ciKSk7CisgICAg
ICAgICAgICBtX2NvZGVjTWFwLmFkZChBdG9taWNTdHJpbmcoInRoZW9yYSIpLCBmYWxzZSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGF1ZGlvTXBlZ1N1cHBvcnRlZCA9IGZhbHNlOwor
ICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUobV9hdWRpb0RlY29kZXJG
YWN0b3JpZXMsICJhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTEsIGxheWVyPShpbnQpWzEs
IDNdIikpIHsKKyAgICAgICAgYXVkaW9NcGVnU3VwcG9ydGVkID0gdHJ1ZTsKKyAgICAgICAgbV9t
aW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9tcDEiKSk7CisgICAgICAgIG1fbWlt
ZVR5cGVTZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vbXAzIikpOworICAgICAgICBtX21pbWVU
eXBlU2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL3gtbXAzIikpOworICAgICAgICBtX2NvZGVj
TWFwLmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL21wMyIpLCBmYWxzZSk7CisgICAgfQorCisgICAg
aWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZShtX2F1ZGlvRGVjb2RlckZhY3Rv
cmllcywgImF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpMiIpKSB7CisgICAgICAgIGF1ZGlv
TXBlZ1N1cHBvcnRlZCA9IHRydWU7CisgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21pY1N0
cmluZygiYXVkaW8vbXAyIikpOworICAgIH0KKworICAgIGF1ZGlvTXBlZ1N1cHBvcnRlZCB8PSBz
dXBwb3J0c0NvbnRhaW5lclR5cGUoImF1ZGlvL21wNCIpOworICAgIGlmIChhdWRpb01wZWdTdXBw
b3J0ZWQpIHsKKyAgICAgICAgbV9taW1lVHlwZVNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9t
cGVnIikpOworICAgICAgICBtX21pbWVUeXBlU2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL3gt
bXBlZyIpKTsKKyAgICB9CisKKyAgICBib29sIG1hdHJvc2thU3VwcG9ydGVkID0gZ3N0UmVnaXN0
cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKG1fZGVtdXhlckZhY3RvcmllcywgInZpZGVvL3gtbWF0
cm9za2EiKTsKKyAgICBpZiAobWF0cm9za2FTdXBwb3J0ZWQpIHsKKyAgICAgICAgbV9taW1lVHlw
ZVNldC5hZGQoQXRvbWljU3RyaW5nKCJ2aWRlby94LW1hdHJvc2thIikpOworCisgICAgICAgIGlm
IChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUobV92aWRlb0RlY29kZXJGYWN0b3Jp
ZXMsICJ2aWRlby94LXZwMTAiKSkKKyAgICAgICAgICAgIG1fbWltZVR5cGVTZXQuYWRkKEF0b21p
Y1N0cmluZygidmlkZW8vd2VibSIpKTsKKyAgICB9CisKKyAgICBpZiAoKG1hdHJvc2thU3VwcG9y
dGVkIHx8IHN1cHBvcnRzQ29udGFpbmVyVHlwZSgidmlkZW8vbXA0IikpICYmIGdzdFJlZ2lzdHJ5
SGFzRWxlbWVudEZvck1lZGlhVHlwZShtX3ZpZGVvRGVjb2RlckZhY3RvcmllcywgInZpZGVvL3gt
YXYxIikpCisgICAgICAgIG1fY29kZWNNYXAuYWRkKEF0b21pY1N0cmluZygiYXYwMSoiKSwgZmFs
c2UpOworfQorCitib29sIEdzdFJlZ2lzdHJ5U2Nhbm5lcjo6aXNDb2RlY1N1cHBvcnRlZChTdHJp
bmcgY29kZWMsIGJvb2wgc2hvdWxkQ2hlY2tGb3JIYXJkd2FyZVVzZSkgY29uc3QKK3sKKyAgICAv
LyBJZiB0aGUgY29kZWMgaXMgbmFtZWQgbGlrZSBhIG1pbWV0eXBlIChlZzogdmlkZW8vYXZjKSBy
ZW1vdmUgdGhlICJ2aWRlby8iIHBhcnQuCisgICAgc2l6ZV90IHNsYXNoSW5kZXggPSBjb2RlYy5m
aW5kKCcvJyk7CisgICAgaWYgKHNsYXNoSW5kZXggIT0gV1RGOjpub3RGb3VuZCkKKyAgICAgICAg
Y29kZWMgPSBjb2RlYy5zdWJzdHJpbmcoc2xhc2hJbmRleCsxKTsKKworICAgIGJvb2wgc3VwcG9y
dGVkID0gZmFsc2U7CisgICAgZm9yIChjb25zdCBhdXRvJiBpdGVtIDogbV9jb2RlY01hcCkgewor
ICAgICAgICBpZiAoIWZubWF0Y2goaXRlbS5rZXkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgY29k
ZWMudXRmOCgpLmRhdGEoKSwgMCkpIHsKKyAgICAgICAgICAgIHN1cHBvcnRlZCA9IHNob3VsZENo
ZWNrRm9ySGFyZHdhcmVVc2UgPyBpdGVtLnZhbHVlIDogdHJ1ZTsKKyAgICAgICAgICAgIGlmIChz
dXBwb3J0ZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBHU1RfTE9HKCJDaGVja2VkICVzIGNvZGVjIFwiJXNcIiBzdXBwb3J0ZWQgJXMiLCBzaG91bGRD
aGVja0ZvckhhcmR3YXJlVXNlID8gImhhcmR3YXJlIiA6ICJzb2Z0d2FyZSIsIGNvZGVjLnV0Zjgo
KS5kYXRhKCksIGJvb2xGb3JQcmludGluZyhzdXBwb3J0ZWQpKTsKKyAgICByZXR1cm4gc3VwcG9y
dGVkOworfQorCitib29sIEdzdFJlZ2lzdHJ5U2Nhbm5lcjo6YXJlQWxsQ29kZWNzU3VwcG9ydGVk
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBjb2RlY3MsIGJvb2wgc2hvdWxkQ2hlY2tGb3JIYXJkd2Fy
ZVVzZSkgY29uc3QKK3sKKyAgICBmb3IgKFN0cmluZyBjb2RlYyA6IGNvZGVjcykgeworICAgICAg
ICBpZiAoIWlzQ29kZWNTdXBwb3J0ZWQoY29kZWMsIHNob3VsZENoZWNrRm9ySGFyZHdhcmVVc2Up
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCitHc3RSZWdpc3RyeVNjYW5uZXI6OlJlZ2lzdHJ5TG9va3VwUmVzdWx0IEdzdFJlZ2lzdHJ5
U2Nhbm5lcjo6aXNEZWNvZGluZ1N1cHBvcnRlZChNZWRpYUNvbmZpZ3VyYXRpb24mIGNvbmZpZ3Vy
YXRpb24pIGNvbnN0Cit7CisgICAgYm9vbCBpc1N1cHBvcnRlZCA9IGZhbHNlOworICAgIGJvb2wg
aXNVc2luZ0hhcmR3YXJlID0gZmFsc2U7CisKKyAgICBpZiAoY29uZmlndXJhdGlvbi52aWRlbykg
eworICAgICAgICBhdXRvJiB2aWRlb0NvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uLnZpZGVv
LnZhbHVlKCk7CisgICAgICAgIEdTVF9ERUJVRygiQ2hlY2tpbmcgc3VwcG9ydCBmb3IgdmlkZW8g
Y29uZmlndXJhdGlvbjogXCIlc1wiIHNpemU6ICV1eCV1IGJpdHJhdGU6ICUiIEdfR1VJTlQ2NF9G
T1JNQVQgIiBmcmFtZXJhdGU6ICVmIiwgdmlkZW9Db25maWd1cmF0aW9uLmNvbnRlbnRUeXBlLnV0
ZjgoKS5kYXRhKCksIHZpZGVvQ29uZmlndXJhdGlvbi53aWR0aCwgdmlkZW9Db25maWd1cmF0aW9u
LmhlaWdodCwgdmlkZW9Db25maWd1cmF0aW9uLmJpdHJhdGUsIHZpZGVvQ29uZmlndXJhdGlvbi5m
cmFtZXJhdGUpOworCisgICAgICAgIGF1dG8gY29udGVudFR5cGUgPSBDb250ZW50VHlwZSh2aWRl
b0NvbmZpZ3VyYXRpb24uY29udGVudFR5cGUpOworICAgICAgICBpc1N1cHBvcnRlZCA9IHN1cHBv
cnRzQ29udGFpbmVyVHlwZShjb250ZW50VHlwZS5jb250YWluZXJUeXBlKCkpOworICAgICAgICBh
dXRvIGNvZGVjcyA9IGNvbnRlbnRUeXBlLmNvZGVjcygpOworICAgICAgICBpZiAoIWNvZGVjcy5p
c0VtcHR5KCkpCisgICAgICAgICAgICBpc1VzaW5nSGFyZHdhcmUgPSBhcmVBbGxDb2RlY3NTdXBw
b3J0ZWQoY29kZWNzLCB0cnVlKTsKKyAgICB9CisKKyAgICBpZiAoY29uZmlndXJhdGlvbi5hdWRp
bykgeworICAgICAgICBhdXRvJiBhdWRpb0NvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uLmF1
ZGlvLnZhbHVlKCk7CisgICAgICAgIEdTVF9ERUJVRygiQ2hlY2tpbmcgc3VwcG9ydCBmb3IgYXVk
aW8gY29uZmlndXJhdGlvbjogXCIlc1wiICVzIGNoYW5uZWxzLCBiaXRyYXRlOiAlIiBHX0dVSU5U
NjRfRk9STUFUICIgc2FtcGxlcmF0ZTogJXUiLCBhdWRpb0NvbmZpZ3VyYXRpb24uY29udGVudFR5
cGUudXRmOCgpLmRhdGEoKSwgYXVkaW9Db25maWd1cmF0aW9uLmNoYW5uZWxzLnV0ZjgoKS5kYXRh
KCksIGF1ZGlvQ29uZmlndXJhdGlvbi5iaXRyYXRlLCBhdWRpb0NvbmZpZ3VyYXRpb24uc2FtcGxl
cmF0ZSk7CisgICAgICAgIGF1dG8gY29udGVudFR5cGUgPSBDb250ZW50VHlwZShhdWRpb0NvbmZp
Z3VyYXRpb24uY29udGVudFR5cGUpOworICAgICAgICBpc1N1cHBvcnRlZCA9IHN1cHBvcnRzQ29u
dGFpbmVyVHlwZShjb250ZW50VHlwZS5jb250YWluZXJUeXBlKCkpOworICAgIH0KKworICAgIHJl
dHVybiBHc3RSZWdpc3RyeVNjYW5uZXI6OlJlZ2lzdHJ5TG9va3VwUmVzdWx0IHsgaXNTdXBwb3J0
ZWQsIGlzVXNpbmdIYXJkd2FyZSB9OworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9Hc3RSZWdpc3RyeVNjYW5uZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9Hc3RSZWdpc3Ry
eVNjYW5uZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZmVhYmYzNGRkYjA5N2NhNjQ5YzE1Y2RhNjBhZTQ1NDMy
NTNiYjJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL0dzdFJlZ2lzdHJ5U2Nhbm5lci5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhIFMuTAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdT
VFJFQU1FUikKKworI2luY2x1ZGUgIk1lZGlhQ29uZmlndXJhdGlvbi5oIgorCisjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQXRvbWljU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hh
c2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ29udGVudFR5cGU7CisKK2NsYXNz
IEdzdFJlZ2lzdHJ5U2Nhbm5lciB7CisgICAgZnJpZW5kIE5ldmVyRGVzdHJveWVkPEdzdFJlZ2lz
dHJ5U2Nhbm5lcj47CitwdWJsaWM6CisgICAgc3RhdGljIEdzdFJlZ2lzdHJ5U2Nhbm5lciYgc2lu
Z2xldG9uKCk7CisKKyAgICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNo
PiYgbWltZVR5cGVTZXQoKSB7IHJldHVybiBtX21pbWVUeXBlU2V0OyB9CisKKyAgICBib29sIHN1
cHBvcnRzQ29udGFpbmVyVHlwZShTdHJpbmcgY29udGFpbmVyVHlwZSkgY29uc3QgeyByZXR1cm4g
bV9taW1lVHlwZVNldC5jb250YWlucyhjb250YWluZXJUeXBlKTsgfQorCisgICAgc3RydWN0IFJl
Z2lzdHJ5TG9va3VwUmVzdWx0IHsKKyAgICAgICAgYm9vbCBzdXBwb3J0ZWQ7CisgICAgICAgIGJv
b2wgdXNpbmdIYXJkd2FyZTsKKworICAgICAgICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gc3VwcG9ydGVkOyB9CisgICAgfTsKKyAgICBSZWdpc3RyeUxvb2t1cFJlc3VsdCBpc0RlY29k
aW5nU3VwcG9ydGVkKE1lZGlhQ29uZmlndXJhdGlvbiYpIGNvbnN0OworCisgICAgYm9vbCBpc0Nv
ZGVjU3VwcG9ydGVkKFN0cmluZyBjb2RlYywgYm9vbCB1c2luZ0hhcmR3YXJlID0gZmFsc2UpIGNv
bnN0OworICAgIGJvb2wgYXJlQWxsQ29kZWNzU3VwcG9ydGVkKGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBjb2RlY3MsIGJvb2wgc2hvdWxkQ2hlY2tGb3JIYXJkd2FyZVVzZSA9IGZhbHNlKSBjb25zdDsK
KworcHJvdGVjdGVkOgorICAgIEdzdFJlZ2lzdHJ5U2Nhbm5lcihib29sIGlzTWVkaWFTb3VyY2Ug
PSBmYWxzZSk7CisgICAgfkdzdFJlZ2lzdHJ5U2Nhbm5lcigpOworCisgICAgdm9pZCBpbml0aWFs
aXplKCk7CisKKyAgICBlbnVtIEVsZW1lbnRUeXBlIHsKKyAgICAgICAgQXVkaW9EZWNvZGVyID0g
MCwKKyAgICAgICAgVmlkZW9EZWNvZGVyLAorICAgICAgICBEZW11eGVyCisgICAgfTsKKyAgICBz
dHJ1Y3QgR3N0Q2Fwc1dlYktpdE1hcHBpbmcgeworICAgICAgICBFbGVtZW50VHlwZSBlbGVtZW50
VHlwZTsKKyAgICAgICAgY29uc3QgY2hhciogY2Fwc1N0cmluZzsKKyAgICAgICAgVmVjdG9yPEF0
b21pY1N0cmluZz4gd2Via2l0TWltZVR5cGVzOworICAgICAgICBWZWN0b3I8QXRvbWljU3RyaW5n
PiB3ZWJraXRDb2RlY1BhdHRlcm5zOworICAgIH07CisgICAgdm9pZCBmaWxsTWltZVR5cGVTZXRG
cm9tQ2Fwc01hcHBpbmcoVmVjdG9yPEdzdENhcHNXZWJLaXRNYXBwaW5nPiYpOworCisgICAgUmVn
aXN0cnlMb29rdXBSZXN1bHQgZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKEdMaXN0
KiBlbGVtZW50RmFjdG9yaWVzLCBjb25zdCBjaGFyKiBjYXBzU3RyaW5nLCBib29sIHNob3VsZENo
ZWNrSGFyZHdhcmVDbGFzc2lmaWVyID0gZmFsc2UpOworCitwcml2YXRlOgorICAgIGJvb2wgbV9p
c01lZGlhU291cmNlOworICAgIEdMaXN0KiBtX2F1ZGlvRGVjb2RlckZhY3RvcmllczsKKyAgICBH
TGlzdCogbV9hdWRpb1BhcnNlckZhY3RvcmllczsKKyAgICBHTGlzdCogbV92aWRlb0RlY29kZXJG
YWN0b3JpZXM7CisgICAgR0xpc3QqIG1fdmlkZW9QYXJzZXJGYWN0b3JpZXM7CisgICAgR0xpc3Qq
IG1fZGVtdXhlckZhY3RvcmllczsKKyAgICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5z
aXRpdmVIYXNoPiBtX21pbWVUeXBlU2V0OworICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBib29s
PiBtX2NvZGVjTWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
VVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5R1N0cmVhbWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYUVuZ2lu
ZUNvbmZpZ3VyYXRpb25GYWN0b3J5R1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNzczNjE3YzIz
MTg0YjI5MGJhNTJlN2M2NDM3MzQwZWI2MDdlZjgyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhRW5naW5lQ29uZmlndXJh
dGlvbkZhY3RvcnlHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
KyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBI
T0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25G
YWN0b3J5R1N0cmVhbWVyLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSAiR3N0
UmVnaXN0cnlTY2FubmVyLmgiCisjaW5jbHVkZSAiTWVkaWFDYXBhYmlsaXRpZXNJbmZvLmgiCisj
aW5jbHVkZSAiTWVkaWFEZWNvZGluZ0NvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJNZWRpYVBs
YXllci5oIgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorCisjaWYgRU5BQkxFKE1FRElBX1NP
VVJDRSkKKyNpbmNsdWRlICJHc3RSZWdpc3RyeVNjYW5uZXJNU0UuaCIKKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgY3JlYXRlTWVkaWFQbGF5ZXJEZWNvZGluZ0NvbmZpZ3Vy
YXRpb25HU3RyZWFtZXIoTWVkaWFEZWNvZGluZ0NvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24s
IFdURjo6RnVuY3Rpb248dm9pZChNZWRpYUNhcGFiaWxpdGllc0luZm8mJik+JiYgY2FsbGJhY2sp
Cit7CisgICAgYm9vbCBpc01lZGlhU291cmNlID0gY29uZmlndXJhdGlvbi50eXBlID09IE1lZGlh
RGVjb2RpbmdUeXBlOjpNZWRpYVNvdXJjZTsKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorICAg
IGF1dG8mIHNjYW5uZXIgPSBpc01lZGlhU291cmNlID8gR3N0UmVnaXN0cnlTY2FubmVyTVNFOjpz
aW5nbGV0b24oKSA6IEdzdFJlZ2lzdHJ5U2Nhbm5lcjo6c2luZ2xldG9uKCk7CisjZWxzZQorICAg
IGlmIChpc01lZGlhU291cmNlKSB7CisgICAgICAgIGNhbGxiYWNrKHsgfSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgYXV0byYgc2Nhbm5lciA9IEdzdFJlZ2lzdHJ5U2Nhbm5lcjo6c2lu
Z2xldG9uKCk7CisjZW5kaWYKKyAgICBhdXRvIGxvb2t1cFJlc3VsdCA9IHNjYW5uZXIuaXNEZWNv
ZGluZ1N1cHBvcnRlZChjb25maWd1cmF0aW9uKTsKKyAgICBNZWRpYUNhcGFiaWxpdGllc0luZm8g
aW5mbzsKKyAgICBpbmZvLnN1cHBvcnRlZCA9IGxvb2t1cFJlc3VsdC5zdXBwb3J0ZWQ7CisgICAg
aW5mby5wb3dlckVmZmljaWVudCA9IGxvb2t1cFJlc3VsdC51c2luZ0hhcmR3YXJlOworCisgICAg
Y2FsbGJhY2soV1RGTW92ZShpbmZvKSk7Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhRW5naW5lQ29uZmln
dXJhdGlvbkZhY3RvcnlHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5R1N0cmVhbWVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOWU5ZWMyMTc4YTU4NzkyNDY3ODU2YmI1YThmMDdhYTUzY2YzMjQ1MQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5R1N0cmVhbWVyLmgKQEAgLTAsMCArMSw0
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSKQor
CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1
Y3QgTWVkaWFDYXBhYmlsaXRpZXNJbmZvOworc3RydWN0IE1lZGlhRGVjb2RpbmdDb25maWd1cmF0
aW9uOworCitleHRlcm4gdm9pZCBjcmVhdGVNZWRpYVBsYXllckRlY29kaW5nQ29uZmlndXJhdGlv
bkdTdHJlYW1lcihNZWRpYURlY29kaW5nQ29uZmlndXJhdGlvbiYsIFdURjo6RnVuY3Rpb248dm9p
ZChNZWRpYUNhcGFiaWxpdGllc0luZm8mJik+JiYpOworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCA0MTQwYzExYjBl
YTQ3OThlNjYwZDY0OTU4MGZlY2FhZDNjMjZkNGM3Li5mNjFmODVkZmYzNzE0YTc3OWUyM2NhOWQ4
M2VkNTVmNzEzMmJmMmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShWSURFTykgJiYgVVNF
KEdTVFJFQU1FUikKIAogI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgorI2luY2x1ZGUgIkdz
dFJlZ2lzdHJ5U2Nhbm5lci5oIgogI2luY2x1ZGUgIkhUVFBIZWFkZXJOYW1lcy5oIgogI2luY2x1
ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgpAQCAtMjIy
OCwxMzcgKzIyMjksMTAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWRp
bmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcikKICAgICBtX3JlYWR5VGlt
ZXJIYW5kbGVyLnN0b3AoKTsKIH0KIAotc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJ
bnNlbnNpdGl2ZUhhc2g+JiBtaW1lVHlwZVNldCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+PiBtaW1lVHlwZXMg
PSBbXSgpCi0gICAgewotICAgICAgICBpbml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJL
aXRFbGVtZW50cygpOwotICAgICAgICBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRp
dmVIYXNoPiBzZXQ7Ci0KLSAgICAgICAgR0xpc3QqIGF1ZGlvRGVjb2RlckZhY3RvcmllcyA9IGdz
dF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFDVE9SWV9U
WVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfQVVESU8sIEdTVF9S
QU5LX01BUkdJTkFMKTsKLSAgICAgICAgR0xpc3QqIHZpZGVvRGVjb2RlckZhY3RvcmllcyA9IGdz
dF9lbGVtZW50X2ZhY3RvcnlfbGlzdF9nZXRfZWxlbWVudHMoR1NUX0VMRU1FTlRfRkFDVE9SWV9U
WVBFX0RFQ09ERVIgfCBHU1RfRUxFTUVOVF9GQUNUT1JZX1RZUEVfTUVESUFfVklERU8sIEdTVF9S
QU5LX01BUkdJTkFMKTsKLSAgICAgICAgR0xpc3QqIGRlbXV4ZXJGYWN0b3JpZXMgPSBnc3RfZWxl
bWVudF9mYWN0b3J5X2xpc3RfZ2V0X2VsZW1lbnRzKEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9E
RU1VWEVSLCBHU1RfUkFOS19NQVJHSU5BTCk7Ci0KLSAgICAgICAgZW51bSBFbGVtZW50VHlwZSB7
Ci0gICAgICAgICAgICBBdWRpb0RlY29kZXIgPSAwLAotICAgICAgICAgICAgVmlkZW9EZWNvZGVy
LAotICAgICAgICAgICAgRGVtdXhlcgotICAgICAgICB9OwotICAgICAgICBzdHJ1Y3QgR3N0Q2Fw
c1dlYktpdE1hcHBpbmcgewotICAgICAgICAgICAgRWxlbWVudFR5cGUgZWxlbWVudFR5cGU7Ci0g
ICAgICAgICAgICBjb25zdCBjaGFyKiBjYXBzU3RyaW5nOwotICAgICAgICAgICAgVmVjdG9yPEF0
b21pY1N0cmluZz4gd2Via2l0TWltZVR5cGVzOwotICAgICAgICB9OwotCi0gICAgICAgIFZlY3Rv
cjxHc3RDYXBzV2ViS2l0TWFwcGluZz4gbWFwcGluZyA9IHsKLSAgICAgICAgICAgIHtBdWRpb0Rl
Y29kZXIsICJhdWRpby9taWRpIiwgeyJhdWRpby9taWRpIiwgImF1ZGlvL3JpZmYtbWlkaSJ9fSwK
LSAgICAgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LXNiYyIsIHsgfX0sCi0gICAgICAg
ICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8veC1zaWQiLCB7IH19LAotICAgICAgICAgICAge0F1
ZGlvRGVjb2RlciwgImF1ZGlvL3gtZmxhYyIsIHsiYXVkaW8veC1mbGFjIiwgImF1ZGlvL2ZsYWMi
fX0sCi0gICAgICAgICAgICB7QXVkaW9EZWNvZGVyLCAiYXVkaW8veC13YXYiLCB7ImF1ZGlvL3gt
d2F2IiwgImF1ZGlvL3dhdiIsICJhdWRpby92bmQud2F2ZSJ9fSwKLSAgICAgICAgICAgIHtBdWRp
b0RlY29kZXIsICJhdWRpby94LXdhdnBhY2siLCB7ImF1ZGlvL3gtd2F2cGFjayJ9fSwKLSAgICAg
ICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LXNwZWV4IiwgeyJhdWRpby9zcGVleCIsICJh
dWRpby94LXNwZWV4In19LAotICAgICAgICAgICAge0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtYWMz
IiwgeyB9fSwKLSAgICAgICAgICAgIHtBdWRpb0RlY29kZXIsICJhdWRpby94LWVhYzMiLCB7ImF1
ZGlvL3gtYWMzIn19LAotICAgICAgICAgICAge0F1ZGlvRGVjb2RlciwgImF1ZGlvL3gtZHRzIiwg
eyB9fSwKLSAgICAgICAgICAgIHtWaWRlb0RlY29kZXIsICJ2aWRlby94LWgyNjQsIHByb2ZpbGU9
KHN0cmluZyloaWdoIiwgeyJ2aWRlby9tcDQiLCAidmlkZW8veC1tNHYifX0sCi0gICAgICAgICAg
ICB7VmlkZW9EZWNvZGVyLCAidmlkZW8veC1tc3ZpZGVvY29kZWMiLCB7InZpZGVvL3gtbXN2aWRl
byJ9fSwKLSAgICAgICAgICAgIHtWaWRlb0RlY29kZXIsICJ2aWRlby94LWgyNjMiLCB7IH19LAot
ICAgICAgICAgICAge1ZpZGVvRGVjb2RlciwgInZpZGVvL21wZWd0cyIsIHsgfX0sCi0gICAgICAg
ICAgICB7VmlkZW9EZWNvZGVyLCAidmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCl7MSwyfSwg
c3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNlIiwgeyJ2aWRlby9tcGVnIn19LAotICAgICAgICAg
ICAge1ZpZGVvRGVjb2RlciwgInZpZGVvL3gtZGlyYWMiLCB7IH19LAotICAgICAgICAgICAge1Zp
ZGVvRGVjb2RlciwgInZpZGVvL3gtZmxhc2gtdmlkZW8iLCB7InZpZGVvL2ZsdiIsICJ2aWRlby94
LWZsdiJ9fSwKLSAgICAgICAgICAgIHtEZW11eGVyLCAidmlkZW8vcXVpY2t0aW1lIiwgeyB9fSwK
LSAgICAgICAgICAgIHtEZW11eGVyLCAidmlkZW8vcXVpY2t0aW1lLCB2YXJpYW50PShzdHJpbmcp
M2dwcCIsIHsidmlkZW8vM2dwcCJ9fSwKLSAgICAgICAgICAgIHtEZW11eGVyLCAiYXBwbGljYXRp
b24veC0zZ3AiLCB7IH19LAotICAgICAgICAgICAge0RlbXV4ZXIsICJ2aWRlby94LW1zLWFzZiIs
IHsgfX0sCi0gICAgICAgICAgICB7RGVtdXhlciwgImF1ZGlvL3gtYWlmZiIsIHsgfX0sCi0gICAg
ICAgICAgICB7RGVtdXhlciwgImFwcGxpY2F0aW9uL3gtcG4tcmVhbGF1ZGlvIiwgeyB9fSwKLSAg
ICAgICAgICAgIHtEZW11eGVyLCAiYXBwbGljYXRpb24vdm5kLnJuLXJlYWxtZWRpYSIsIHsgfX0s
Ci0gICAgICAgICAgICB7RGVtdXhlciwgImF1ZGlvL3gtd2F2IiwgeyJhdWRpby94LXdhdiIsICJh
dWRpby93YXYiLCAiYXVkaW8vdm5kLndhdmUifX0sCi0gICAgICAgICAgICB7RGVtdXhlciwgImFw
cGxpY2F0aW9uL3gtaGxzIiwgeyJhcHBsaWNhdGlvbi92bmQuYXBwbGUubXBlZ3VybCIsICJhcHBs
aWNhdGlvbi94LW1wZWd1cmwifX0KLSAgICAgICAgfTsKLQotICAgICAgICBmb3IgKGF1dG8mIGN1
cnJlbnQgOiBtYXBwaW5nKSB7Ci0gICAgICAgICAgICBHTGlzdCogZmFjdG9yaWVzID0gZGVtdXhl
ckZhY3RvcmllczsKLSAgICAgICAgICAgIGlmIChjdXJyZW50LmVsZW1lbnRUeXBlID09IEF1ZGlv
RGVjb2RlcikKLSAgICAgICAgICAgICAgICBmYWN0b3JpZXMgPSBhdWRpb0RlY29kZXJGYWN0b3Jp
ZXM7Ci0gICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50LmVsZW1lbnRUeXBlID09IFZpZGVvRGVj
b2RlcikKLSAgICAgICAgICAgICAgICBmYWN0b3JpZXMgPSB2aWRlb0RlY29kZXJGYWN0b3JpZXM7
Ci0KLSAgICAgICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUoZmFj
dG9yaWVzLCBjdXJyZW50LmNhcHNTdHJpbmcpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjdXJy
ZW50LndlYmtpdE1pbWVUeXBlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9y
IChjb25zdCBhdXRvJiBtaW1lVHlwZSA6IGN1cnJlbnQud2Via2l0TWltZVR5cGVzKQotICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0LmFkZChtaW1lVHlwZSk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKGN1cnJlbnQuY2Fw
c1N0cmluZykpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBvcHVz
U3VwcG9ydGVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JN
ZWRpYVR5cGUoYXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAiYXVkaW8veC1vcHVzIikpIHsKLSAgICAg
ICAgICAgIG9wdXNTdXBwb3J0ZWQgPSB0cnVlOwotICAgICAgICAgICAgc2V0LmFkZChBdG9taWNT
dHJpbmcoImF1ZGlvL29wdXMiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIHZvcmJpc1N1
cHBvcnRlZCA9IGZhbHNlOwotICAgICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVk
aWFUeXBlKGRlbXV4ZXJGYWN0b3JpZXMsICJhcHBsaWNhdGlvbi9vZ2ciKSkgewotICAgICAgICAg
ICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImFwcGxpY2F0aW9uL29nZyIpKTsKLQotICAgICAgICAg
ICAgdm9yYmlzU3VwcG9ydGVkID0gZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGF1
ZGlvRGVjb2RlckZhY3RvcmllcywgImF1ZGlvL3gtdm9yYmlzIik7Ci0gICAgICAgICAgICBpZiAo
dm9yYmlzU3VwcG9ydGVkKSB7Ci0gICAgICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmco
ImF1ZGlvL29nZyIpKTsKLSAgICAgICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVk
aW8veC12b3JiaXMrb2dnIikpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZ3N0
UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKHZpZGVvRGVjb2RlckZhY3RvcmllcywgInZp
ZGVvL3gtdGhlb3JhIikpCi0gICAgICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoInZp
ZGVvL29nZyIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgYXVkaW9NcGVnU3VwcG9ydGVk
ID0gZmFsc2U7Ci0gICAgICAgIGlmIChnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUo
YXVkaW9EZWNvZGVyRmFjdG9yaWVzLCAiYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxLCBs
YXllcj0oaW50KVsxLCAzXSIpKSB7Ci0gICAgICAgICAgICBhdWRpb01wZWdTdXBwb3J0ZWQgPSB0
cnVlOwotICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJpbmcoImF1ZGlvL21wMSIpKTsKLSAg
ICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9tcDMiKSk7Ci0gICAgICAgICAg
ICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8veC1tcDMiKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGF1ZGlvRGVjb2RlckZh
Y3RvcmllcywgImF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpezIsIDR9IikpIHsKLSAgICAg
ICAgICAgIGF1ZGlvTXBlZ1N1cHBvcnRlZCA9IHRydWU7Ci0gICAgICAgICAgICBzZXQuYWRkKEF0
b21pY1N0cmluZygiYXVkaW8vYWFjIikpOwotICAgICAgICAgICAgc2V0LmFkZChBdG9taWNTdHJp
bmcoImF1ZGlvL21wMiIpKTsKLSAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRp
by9tcDQiKSk7Ci0gICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8veC1tNGEi
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXVkaW9NcGVnU3VwcG9ydGVkKSB7Ci0gICAg
ICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vbXBlZyIpKTsKLSAgICAgICAgICAg
IHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby94LW1wZWciKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGRlbXV4ZXJGYWN0b3Jp
ZXMsICJ2aWRlby94LW1hdHJvc2thIikpIHsKLSAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3Ry
aW5nKCJ2aWRlby94LW1hdHJvc2thIikpOwotCi0gICAgICAgICAgICBpZiAoZ3N0UmVnaXN0cnlI
YXNFbGVtZW50Rm9yTWVkaWFUeXBlKHZpZGVvRGVjb2RlckZhY3RvcmllcywgInZpZGVvL3gtdnA4
IikKLSAgICAgICAgICAgICAgICB8fCBnc3RSZWdpc3RyeUhhc0VsZW1lbnRGb3JNZWRpYVR5cGUo
dmlkZW9EZWNvZGVyRmFjdG9yaWVzLCAidmlkZW8veC12cDkiKQotICAgICAgICAgICAgICAgIHx8
IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZSh2aWRlb0RlY29kZXJGYWN0b3JpZXMs
ICJ2aWRlby94LXZwMTAiKSkKLSAgICAgICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygi
dmlkZW8vd2VibSIpKTsKLQotICAgICAgICAgICAgaWYgKHZvcmJpc1N1cHBvcnRlZCB8fCBvcHVz
U3VwcG9ydGVkKQotICAgICAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby93
ZWJtIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJl
ZShhdWRpb0RlY29kZXJGYWN0b3JpZXMpOwotICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlz
dF9mcmVlKHZpZGVvRGVjb2RlckZhY3Rvcmllcyk7Ci0gICAgICAgIGdzdF9wbHVnaW5fZmVhdHVy
ZV9saXN0X2ZyZWUoZGVtdXhlckZhY3Rvcmllcyk7Ci0gICAgICAgIHJldHVybiBzZXQ7Ci0gICAg
fSgpOwotICAgIHJldHVybiBtaW1lVHlwZXM7Ci19Ci0KIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5z
ZW5zaXRpdmVIYXNoPiYgdHlwZXMpCiB7Ci0gICAgdHlwZXMgPSBtaW1lVHlwZVNldCgpOworICAg
IGF1dG8mIGdzdFJlZ2lzdHJ5U2Nhbm5lciA9IEdzdFJlZ2lzdHJ5U2Nhbm5lcjo6c2luZ2xldG9u
KCk7CisgICAgdHlwZXMgPSBnc3RSZWdpc3RyeVNjYW5uZXIubWltZVR5cGVTZXQoKTsKIH0KIAog
TWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1
cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
KQpAQCAtMjM3OCwzMCArMjI1MiwxOCBAQCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRQogICAgIGlm
IChwYXJhbWV0ZXJzLnR5cGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0g
ICAgLy8gU3BlYyBzYXlzIHdlIHNob3VsZCBub3QgcmV0dXJuICJwcm9iYWJseSIgaWYgdGhlIGNv
ZGVjcyBzdHJpbmcgaXMgZW1wdHkuCi0gICAgaWYgKG1pbWVUeXBlU2V0KCkuY29udGFpbnMocGFy
YW1ldGVycy50eXBlLmNvbnRhaW5lclR5cGUoKSkpCi0gICAgICAgIHJlc3VsdCA9IHBhcmFtZXRl
cnMudHlwZS5jb2RlY3MoKS5pc0VtcHR5KCkgPyBNZWRpYVBsYXllcjo6TWF5QmVTdXBwb3J0ZWQg
OiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQ7Ci0KKyAgICBHU1RfREVCVUcoIkNoZWNraW5nIG1p
bWUtdHlwZSBcIiVzXCIiLCBwYXJhbWV0ZXJzLnR5cGUucmF3KCkudXRmOCgpLmRhdGEoKSk7CiAg
ICAgYXV0byBjb250YWluZXJUeXBlID0gcGFyYW1ldGVycy50eXBlLmNvbnRhaW5lclR5cGUoKTsK
LSAgICBpZiAoY29udGFpbmVyVHlwZSA9PSAidmlkZW8vbXA0Il9zIHx8IGNvbnRhaW5lclR5cGUg
PT0gInZpZGVvL3dlYm0iX3MpIHsKLSAgICAgICAgaWYgKG1pbWVUeXBlU2V0KCkuY29udGFpbnMo
Y29udGFpbmVyVHlwZSkpIHsKLSAgICAgICAgICAgIEdMaXN0KiB2aWRlb0RlY29kZXJGYWN0b3Jp
ZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZ2V0X2VsZW1lbnRzKEdTVF9FTEVNRU5UX0ZB
Q1RPUllfVFlQRV9ERUNPREVSIHwgR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX01FRElBX1ZJREVP
LCBHU1RfUkFOS19NQVJHSU5BTCk7Ci0gICAgICAgICAgICBib29sIGF2MURlY29kZXJGb3VuZCA9
IGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlwZSh2aWRlb0RlY29kZXJGYWN0b3JpZXMs
ICJ2aWRlby94LWF2MSJfcyk7Ci0gICAgICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9m
cmVlKHZpZGVvRGVjb2RlckZhY3Rvcmllcyk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNvZGVj
IDogcGFyYW1ldGVycy50eXBlLmNvZGVjcygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvZGVj
LnN0YXJ0c1dpdGgoImF2MDEiX3MpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGF2
MURlY29kZXJGb3VuZCA/IE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZCA6IE1lZGlhUGxheWVyOjpJ
c05vdFN1cHBvcnRlZDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGlmIChjb2RlYy5zdGFydHNXaXRoKCJhdjEiX3MpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICB9CisgICAgYXV0byYgZ3N0UmVnaXN0cnlTY2FubmVyID0gR3N0UmVnaXN0
cnlTY2FubmVyOjpzaW5nbGV0b24oKTsKKyAgICBpZiAoZ3N0UmVnaXN0cnlTY2FubmVyLnN1cHBv
cnRzQ29udGFpbmVyVHlwZShjb250YWluZXJUeXBlKSkgeworICAgICAgICAvLyBTcGVjIHNheXMg
d2Ugc2hvdWxkIG5vdCByZXR1cm4gInByb2JhYmx5IiBpZiB0aGUgY29kZWNzIHN0cmluZyBpcyBl
bXB0eS4KKyAgICAgICAgVmVjdG9yPFN0cmluZz4gY29kZWNzID0gcGFyYW1ldGVycy50eXBlLmNv
ZGVjcygpOworICAgICAgICByZXN1bHQgPSBjb2RlY3MuaXNFbXB0eSgpID8gTWVkaWFQbGF5ZXI6
Ok1heUJlU3VwcG9ydGVkIDogKGdzdFJlZ2lzdHJ5U2Nhbm5lci5hcmVBbGxDb2RlY3NTdXBwb3J0
ZWQoY29kZWNzKSA/IE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZCA6IE1lZGlhUGxheWVyOjpJc05v
dFN1cHBvcnRlZCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGV4dGVuZGVkU3VwcG9ydHNUeXBlKHBh
cmFtZXRlcnMsIHJlc3VsdCk7CisgICAgYXV0byBmaW5hbFJlc3VsdCA9IGV4dGVuZGVkU3VwcG9y
dHNUeXBlKHBhcmFtZXRlcnMsIHJlc3VsdCk7CisgICAgR1NUX0RFQlVHKCJTdXBwb3J0ZWQ6ICVz
IiwgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoZmluYWxSZXN1bHQpLnV0ZjgoKS5kYXRhKCkp
OworICAgIHJldHVybiBmaW5hbFJlc3VsdDsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnNldERvd25sb2FkQnVmZmVyaW5nKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBl
bGluZS5jcHAKaW5kZXggMmQ5MzIzODExZmYzZWU5NmM0MGJlZmI4ZTg3YmFiMDRlMDE0YTQyYi4u
YmM0MTU2ZmU2YmI0ODRhNTk4OTA3YTE1NDM3NGJjZDM0NDQ0MzYzYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGlu
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21z
ZS9BcHBlbmRQaXBlbGluZS5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJHU3RyZWFt
ZXJDb21tb24uaCIKICNpbmNsdWRlICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIKICNpbmNsdWRl
ICJHU3RyZWFtZXJNZWRpYURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiR3N0UmVnaXN0cnlTY2Fu
bmVyTVNFLmgiCiAjaW5jbHVkZSAiTWVkaWFTYW1wbGVHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJJ
bmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiTWVkaWFEZXNjcmlw
dGlvbi5oIgpAQCAtMTQxLDcgKzE0Miw4IEBAIEFwcGVuZFBpcGVsaW5lOjpBcHBlbmRQaXBlbGlu
ZShSZWY8TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U+IG1lZGlhU291cmNlQ2xpCiAgICAg
fSwgdGhpcywgbnVsbHB0cik7CiAKICAgICBjb25zdCBTdHJpbmcmIHR5cGUgPSBtX3NvdXJjZUJ1
ZmZlclByaXZhdGUtPnR5cGUoKS5jb250YWluZXJUeXBlKCk7Ci0gICAgaWYgKHR5cGUuZW5kc1dp
dGgoIm1wNCIpKQorICAgIEdTVF9ERUJVRygiU291cmNlQnVmZmVyIGNvbnRhaW5lclR5cGU6ICVz
IiwgdHlwZS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAodHlwZS5lbmRzV2l0aCgibXA0IikgfHwg
dHlwZS5lbmRzV2l0aCgiYWFjIikpCiAgICAgICAgIG1fZGVtdXggPSBnc3RfZWxlbWVudF9mYWN0
b3J5X21ha2UoInF0ZGVtdXgiLCBudWxscHRyKTsKICAgICBlbHNlIGlmICh0eXBlLmVuZHNXaXRo
KCJ3ZWJtIikpCiAgICAgICAgIG1fZGVtdXggPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoIm1h
dHJvc2thZGVtdXgiLCBudWxscHRyKTsKQEAgLTM3OSw3ICszODEsOCBAQCB2b2lkIEFwcGVuZFBp
cGVsaW5lOjpwYXJzZURlbXV4ZXJTcmNQYWRDYXBzKEdzdENhcHMqIGRlbXV4ZXJTcmNQYWRDYXBz
KQogICAgIG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJl
YW1lcjo6VW5rbm93bjsKIAogICAgIGNvbnN0IGNoYXIqIG9yaWdpbmFsTWVkaWFUeXBlID0gY2Fw
c01lZGlhVHlwZShtX2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpKTsKLSAgICBpZiAoIU1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c3VwcG9ydHNDb2RlYyhvcmlnaW5hbE1lZGlhVHlwZSkp
IHsKKyAgICBhdXRvJiBnc3RSZWdpc3RyeVNjYW5uZXIgPSBHc3RSZWdpc3RyeVNjYW5uZXJNU0U6
OnNpbmdsZXRvbigpOworICAgIGlmICghZ3N0UmVnaXN0cnlTY2FubmVyLmlzQ29kZWNTdXBwb3J0
ZWQob3JpZ2luYWxNZWRpYVR5cGUpKSB7CiAgICAgICAgICAgICBtX3ByZXNlbnRhdGlvblNpemUg
PSBXZWJDb3JlOjpGbG9hdFNpemUoKTsKICAgICAgICAgICAgIG1fc3RyZWFtVHlwZSA9IFdlYkNv
cmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6SW52YWxpZDsKICAgICB9IGVsc2Ug
aWYgKGRvQ2Fwc0hhdmVUeXBlKG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCksIEdTVF9WSURFT19D
QVBTX1RZUEVfUFJFRklYKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Hc3RSZWdpc3RyeVNjYW5uZXJNU0UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Hc3RSZWdpc3RyeVNjYW5u
ZXJNU0UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4ZTQ5MDk1MjgyNDg3NGUxZmZmZDgwZGJjZjA0NTNlZWVj
OTY5YTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvbXNlL0dzdFJlZ2lzdHJ5U2Nhbm5lck1TRS5jcHAKQEAgLTAsMCArMSw0MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgVVNFKEdTVFJFQU1FUikgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKyNpbmNsdWRl
ICJHc3RSZWdpc3RyeVNjYW5uZXJNU0UuaCIKKworI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dzdFJlZ2lzdHJ5U2Nhbm5lck1TRSYgR3N0
UmVnaXN0cnlTY2FubmVyTVNFOjpzaW5nbGV0b24oKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxHc3RSZWdpc3RyeVNjYW5uZXJNU0U+IHNoYXJlZEluc3RhbmNlOworICAgIHJldHVybiBz
aGFyZWRJbnN0YW5jZTsKK30KKworR3N0UmVnaXN0cnlTY2FubmVyTVNFOjpHc3RSZWdpc3RyeVNj
YW5uZXJNU0UoKQorICAgIDogR3N0UmVnaXN0cnlTY2FubmVyOjpHc3RSZWdpc3RyeVNjYW5uZXIo
dHJ1ZSkKK3sKK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0dzdFJlZ2lzdHJ5U2Nhbm5lck1TRS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Hc3RSZWdpc3RyeVNj
YW5uZXJNU0UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMGZjOTk3ZDYwOWE4OTNiNGFhYmNkZjM1NmRiMGJhMjkz
YzkzMDA0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL21zZS9Hc3RSZWdpc3RyeVNjYW5uZXJNU0UuaApAQCAtMCwwICsxLDQwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IFVTRShHU1RSRUFNRVIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisKKyNpbmNsdWRlICJHc3RS
ZWdpc3RyeVNjYW5uZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgR3N0UmVnaXN0cnlTY2FubmVyTVNFIDogcHVibGljIEdzdFJl
Z2lzdHJ5U2Nhbm5lciB7CisgICAgZnJpZW5kIE5ldmVyRGVzdHJveWVkPEdzdFJlZ2lzdHJ5U2Nh
bm5lck1TRT47CitwdWJsaWM6CisgICAgc3RhdGljIEdzdFJlZ2lzdHJ5U2Nhbm5lck1TRSYgc2lu
Z2xldG9uKCk7Citwcm90ZWN0ZWQ6CisgICAgR3N0UmVnaXN0cnlTY2FubmVyTVNFKCk7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0Uu
Y3BwCmluZGV4IGU1YjQ0M2U2YjJkNzIxNzJmNjcxMjdlMTZhYWIwYzNmN2UyY2I4NDAuLjFkN2Ni
YTY1ZjE3YjRhYzk4MGI0MDE5OTk4NjRlMWEyMGFiOWQxM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAKQEAgLTMxLDYg
KzMxLDcgQEAKICNpbmNsdWRlICJBcHBlbmRQaXBlbGluZS5oIgogI2luY2x1ZGUgIkF1ZGlvVHJh
Y2tQcml2YXRlR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjaW5j
bHVkZSAiR3N0UmVnaXN0cnlTY2FubmVyTVNFLmgiCiAjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUdTdHJlYW1lci5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNs
dWRlICJNZWRpYURlc2NyaXB0aW9uLmgiCkBAIC00MSw3ICs0Miw2IEBACiAjaW5jbHVkZSAiVGlt
ZVJhbmdlcy5oIgogI2luY2x1ZGUgIlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCiAKLSNp
bmNsdWRlIDxmbm1hdGNoLmg+CiAjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+CiAjaW5j
bHVkZSA8Z3N0L2FwcC9nc3RhcHBzcmMuaD4KICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CkBAIC02ODIs
MzAgKzY4Miw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkdXJhdGlv
bkNoYW5nZWQoKQogICAgIH0KIH0KIAotc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJ
bnNlbnNpdGl2ZUhhc2g+JiBtaW1lVHlwZUNhY2hlKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8SGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4+IGNhY2hlID0g
W10oKQotICAgIHsKLSAgICAgICAgaW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0
RWxlbWVudHMoKTsKLSAgICAgICAgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZl
SGFzaD4gc2V0OwotICAgICAgICBjb25zdCBjaGFyKiBtaW1lVHlwZXNbXSA9IHsKLSAgICAgICAg
ICAgICJ2aWRlby9tcDQiLAotICAgICAgICAgICAgImF1ZGlvL21wNCIsCi0gICAgICAgICAgICAi
dmlkZW8vd2VibSIsCi0gICAgICAgICAgICAiYXVkaW8vd2VibSIKLSAgICAgICAgfTsKLSAgICAg
ICAgZm9yIChhdXRvJiB0eXBlIDogbWltZVR5cGVzKQotICAgICAgICAgICAgc2V0LmFkZCh0eXBl
KTsKLSAgICAgICAgcmV0dXJuIHNldDsKLSAgICB9KCk7Ci0gICAgcmV0dXJuIGNhY2hlOwotfQot
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Z2V0U3VwcG9ydGVkVHlwZXMo
SGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIHR5cGVzKQotewotICAg
IHR5cGVzID0gbWltZVR5cGVDYWNoZSgpOwotfQotCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRTo6dHJhY2tEZXRlY3RlZChSZWZQdHI8QXBwZW5kUGlwZWxpbmU+IGFwcGVuZFBp
cGVsaW5lLCBSZWZQdHI8V2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZT4gbmV3VHJhY2ssIGJvb2wg
Zmlyc3RUcmFja0RldGVjdGVkKQogewogICAgIEFTU0VSVChhcHBlbmRQaXBlbGluZS0+dHJhY2so
KSA9PSBuZXdUcmFjayk7CkBAIC03MjYsMTA5ICs3MDIsMTAgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJNU0U6OnRyYWNrRGV0ZWN0ZWQoUmVmUHRyPEFwcGVuZFBpcGVsaW5lPiBh
cHBlbmQKICAgICAgICAgbV9wbGF5YmFja1BpcGVsaW5lLT5yZWF0dGFjaFRyYWNrKGFwcGVuZFBp
cGVsaW5lLT5zb3VyY2VCdWZmZXJQcml2YXRlKCksIG5ld1RyYWNrLCBjYXBzKTsKIH0KIAotY29u
c3Qgc3RhdGljIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgY29kZWNTZXQoKQotewotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PEF0b21pY1N0cmluZz4+IGNvZGVjVHlwZXMgPSBbXSgp
Ci0gICAgewotICAgICAgICBpbml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRFbGVt
ZW50cygpOwotICAgICAgICBIYXNoU2V0PEF0b21pY1N0cmluZz4gc2V0OwotCi0gICAgICAgIEdM
aXN0KiBhdWRpb0RlY29kZXJGYWN0b3JpZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZ2V0
X2VsZW1lbnRzKEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREVSIHwgR1NUX0VMRU1FTlRf
RkFDVE9SWV9UWVBFX01FRElBX0FVRElPLCBHU1RfUkFOS19NQVJHSU5BTCk7Ci0gICAgICAgIEdM
aXN0KiB2aWRlb0RlY29kZXJGYWN0b3JpZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2xpc3RfZ2V0
X2VsZW1lbnRzKEdTVF9FTEVNRU5UX0ZBQ1RPUllfVFlQRV9ERUNPREVSIHwgR1NUX0VMRU1FTlRf
RkFDVE9SWV9UWVBFX01FRElBX1ZJREVPLCBHU1RfUkFOS19NQVJHSU5BTCk7Ci0KLSAgICAgICAg
ZW51bSBFbGVtZW50VHlwZSB7Ci0gICAgICAgICAgICBBdWRpb0RlY29kZXIgPSAwLAotICAgICAg
ICAgICAgVmlkZW9EZWNvZGVyCi0gICAgICAgIH07Ci0gICAgICAgIHN0cnVjdCBHc3RDYXBzV2Vi
S2l0TWFwcGluZyB7Ci0gICAgICAgICAgICBFbGVtZW50VHlwZSBlbGVtZW50VHlwZTsKLSAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGNhcHNTdHJpbmc7Ci0gICAgICAgICAgICBWZWN0b3I8QXRvbWlj
U3RyaW5nPiB3ZWJraXRDb2RlY3M7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgR3N0Q2Fwc1dlYktp
dE1hcHBpbmcgbWFwcGluZ1tdID0gewotICAgICAgICAgICAgeyBWaWRlb0RlY29kZXIsICJ2aWRl
by94LWgyNjQsICBwcm9maWxlPShzdHJpbmcpeyBjb25zdHJhaW5lZC1iYXNlbGluZSwgYmFzZWxp
bmUgfSIsIHsgIngtaDI2NCIsICJhdmMqIiB9IH0sCi0gICAgICAgICAgICB7IFZpZGVvRGVjb2Rl
ciwgInZpZGVvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpezEsMn0sIHN5c3RlbXN0cmVhbT0oYm9v
bGVhbilmYWxzZSIsIHsgIm1wZWciIH0gfSwKLSAgICAgICAgICAgIHsgVmlkZW9EZWNvZGVyLCAi
dmlkZW8veC12cDgiLCB7ICJ2cDgiLCAieC12cDgiIH0gfSwKLSAgICAgICAgICAgIHsgVmlkZW9E
ZWNvZGVyLCAidmlkZW8veC12cDkiLCB7ICJ2cDkiLCAieC12cDkiIH0gfSwKLSAgICAgICAgICAg
IHsgQXVkaW9EZWNvZGVyLCAiYXVkaW8veC12b3JiaXMiLCB7ICJ2b3JiaXMiLCAieC12b3JiaXMi
IH0gfSwKLSAgICAgICAgICAgIHsgQXVkaW9EZWNvZGVyLCAiYXVkaW8veC1vcHVzIiwgeyAib3B1
cyIsICJ4LW9wdXMiIH0gfQotICAgICAgICB9OwotCi0gICAgICAgIGZvciAoYXV0byYgY3VycmVu
dCA6IG1hcHBpbmcpIHsKLSAgICAgICAgICAgIEdMaXN0KiBmYWN0b3JpZXMgPSBudWxscHRyOwot
ICAgICAgICAgICAgc3dpdGNoIChjdXJyZW50LmVsZW1lbnRUeXBlKSB7Ci0gICAgICAgICAgICBj
YXNlIEF1ZGlvRGVjb2RlcjoKLSAgICAgICAgICAgICAgICBmYWN0b3JpZXMgPSBhdWRpb0RlY29k
ZXJGYWN0b3JpZXM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFZp
ZGVvRGVjb2RlcjoKLSAgICAgICAgICAgICAgICBmYWN0b3JpZXMgPSB2aWRlb0RlY29kZXJGYWN0
b3JpZXM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdfYXNzZXJ0X25vbm51bGwoZmFjdG9y
aWVzKTsKLQotICAgICAgICAgICAgaWYgKGdzdFJlZ2lzdHJ5SGFzRWxlbWVudEZvck1lZGlhVHlw
ZShmYWN0b3JpZXMsIGN1cnJlbnQuY2Fwc1N0cmluZykgJiYgZmFjdG9yaWVzICE9IG51bGxwdHIp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnQud2Via2l0Q29kZWNzLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG1pbWVUeXBlIDogY3VycmVu
dC53ZWJraXRDb2RlY3MpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXQuYWRkKG1pbWVUeXBl
KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc2V0LmFkZChB
dG9taWNTdHJpbmcoY3VycmVudC5jYXBzU3RyaW5nKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBib29sIGF1ZGlvTXBlZ1N1cHBvcnRlZCA9IGZhbHNlOwotICAgICAgICBp
ZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGF1ZGlvRGVjb2RlckZhY3Rvcmll
cywgImF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpMSwgbGF5ZXI9KGludClbMSwgM10iKSkg
ewotICAgICAgICAgICAgYXVkaW9NcGVnU3VwcG9ydGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHNl
dC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby9tcDMiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoZ3N0UmVnaXN0cnlIYXNFbGVtZW50Rm9yTWVkaWFUeXBlKGF1ZGlvRGVjb2RlckZhY3Rvcmll
cywgImF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpezIsIDR9IikpIHsKLSAgICAgICAgICAg
IGF1ZGlvTXBlZ1N1cHBvcnRlZCA9IHRydWU7Ci0gICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0
cmluZygibXA0YSoiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXVkaW9NcGVnU3VwcG9y
dGVkKSB7Ci0gICAgICAgICAgICBzZXQuYWRkKEF0b21pY1N0cmluZygiYXVkaW8vbXBlZyIpKTsK
LSAgICAgICAgICAgIHNldC5hZGQoQXRvbWljU3RyaW5nKCJhdWRpby94LW1wZWciKSk7Ci0gICAg
ICAgIH0KLQotCi0gICAgICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUoYXVkaW9EZWNv
ZGVyRmFjdG9yaWVzKTsKLSAgICAgICAgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSh2aWRl
b0RlY29kZXJGYWN0b3JpZXMpOwotCi0gICAgICAgIHJldHVybiBzZXQ7Ci0gICAgfSgpOwotICAg
IHJldHVybiBjb2RlY1R5cGVzOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6c3VwcG9ydHNDb2RlYyhTdHJpbmcgY29kZWMpCi17Ci0gICAgLy8gSWYgdGhlIGNvZGVj
IGlzIG5hbWVkIGxpa2UgYSBtaW1ldHlwZSAoZWc6IHZpZGVvL2F2YykgcmVtb3ZlIHRoZSAidmlk
ZW8vIiBwYXJ0LgotICAgIHNpemVfdCBzbGFzaEluZGV4ID0gY29kZWMuZmluZCgnLycpOwotICAg
IGlmIChzbGFzaEluZGV4ICE9IFdURjo6bm90Rm91bmQpCi0gICAgICAgIGNvZGVjID0gY29kZWMu
c3Vic3RyaW5nKHNsYXNoSW5kZXgrMSk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIHBhdHRlcm4g
OiBjb2RlY1NldCgpKSB7Ci0gICAgICAgIGJvb2wgY29kZWNNYXRjaGVzUGF0dGVybiA9ICFmbm1h
dGNoKHBhdHRlcm4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgY29kZWMudXRmOCgpLmRhdGEoKSwg
MCk7Ci0gICAgICAgIGlmIChjb2RlY01hdGNoZXNQYXR0ZXJuKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6c3VwcG9ydHNBbGxDb2RlY3MoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGNvZGVjcykKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpnZXRTdXBw
b3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgdHlw
ZXMpCiB7Ci0gICAgZm9yIChTdHJpbmcgY29kZWMgOiBjb2RlY3MpIHsKLSAgICAgICAgaWYgKCFz
dXBwb3J0c0NvZGVjKGNvZGVjKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICBhdXRvJiBnc3RSZWdpc3RyeVNjYW5uZXIgPSBHc3RSZWdp
c3RyeVNjYW5uZXJNU0U6OnNpbmdsZXRvbigpOworICAgIHR5cGVzID0gZ3N0UmVnaXN0cnlTY2Fu
bmVyLm1pbWVUeXBlU2V0KCk7CiB9CiAKIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVT
dXBwb3J0UGFyYW1ldGVycyYgcGFyYW1ldGVycykKQEAgLTg0MiwxOSArNzE5LDIxIEBAIE1lZGlh
UGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzdXBw
b3J0c1R5cGUoY29uc3QgTWVkCiAgICAgLy8gWW91VHViZSBUViBwcm92aWRlcyBlbXB0eSB0eXBl
cyBmb3Igc29tZSB2aWRlb3MgYW5kIHdlIHdhbnQgdG8gYmUgc2VsZWN0ZWQgYXMgYmVzdCBtZWRp
YSBlbmdpbmUgZm9yIHRoZW0uCiAgICAgaWYgKGNvbnRhaW5lclR5cGUuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIHJlc3VsdCA9IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZDsKKyAgICAgICAgR1NU
X0RFQlVHKCJtaW1lLXR5cGUgXCIlc1wiIHN1cHBvcnRlZDogJXMiLCBwYXJhbWV0ZXJzLnR5cGUu
cmF3KCkudXRmOCgpLmRhdGEoKSwgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcocmVzdWx0KS51
dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICBHU1Rf
REVCVUcoIkNoZWNraW5nIG1pbWUtdHlwZSBcIiVzXCIiLCBwYXJhbWV0ZXJzLnR5cGUucmF3KCku
dXRmOCgpLmRhdGEoKSk7CisgICAgYXV0byYgZ3N0UmVnaXN0cnlTY2FubmVyID0gR3N0UmVnaXN0
cnlTY2FubmVyTVNFOjpzaW5nbGV0b24oKTsKICAgICAvLyBTcGVjIHNheXMgd2Ugc2hvdWxkIG5v
dCByZXR1cm4gInByb2JhYmx5IiBpZiB0aGUgY29kZWNzIHN0cmluZyBpcyBlbXB0eS4KLSAgICBp
ZiAobWltZVR5cGVDYWNoZSgpLmNvbnRhaW5zKGNvbnRhaW5lclR5cGUpKSB7CisgICAgaWYgKGdz
dFJlZ2lzdHJ5U2Nhbm5lci5zdXBwb3J0c0NvbnRhaW5lclR5cGUoY29udGFpbmVyVHlwZSkpIHsK
ICAgICAgICAgVmVjdG9yPFN0cmluZz4gY29kZWNzID0gcGFyYW1ldGVycy50eXBlLmNvZGVjcygp
OwotICAgICAgICBpZiAoY29kZWNzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdCA9IE1l
ZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVz
dWx0ID0gc3VwcG9ydHNBbGxDb2RlY3MoY29kZWNzKSA/IE1lZGlhUGxheWVyOjpJc1N1cHBvcnRl
ZCA6IE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKKyAgICAgICAgcmVzdWx0ID0gY29kZWNz
LmlzRW1wdHkoKSA/IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZCA6IChnc3RSZWdpc3RyeVNj
YW5uZXIuYXJlQWxsQ29kZWNzU3VwcG9ydGVkKGNvZGVjcykgPyBNZWRpYVBsYXllcjo6SXNTdXBw
b3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQpOwogICAgIH0KIAotICAgIHJldHVy
biBleHRlbmRlZFN1cHBvcnRzVHlwZShwYXJhbWV0ZXJzLCByZXN1bHQpOworICAgIGF1dG8gZmlu
YWxSZXN1bHQgPSBleHRlbmRlZFN1cHBvcnRzVHlwZShwYXJhbWV0ZXJzLCByZXN1bHQpOworICAg
IEdTVF9ERUJVRygiU3VwcG9ydGVkOiAlcyIsIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKGZp
bmFsUmVzdWx0KS51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gZmluYWxSZXN1bHQ7CiB9CiAK
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjptYXJrRW5kT2ZTdHJlYW0oTWVk
aWFTb3VyY2VQcml2YXRlOjpFbmRPZlN0cmVhbVN0YXR1cyBzdGF0dXMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaAppbmRleCAyZGZh
NzMyZmNiZjI2YmE2ODdmMWE5ODE0YWI3NjYzZWVmOTg1NDc0Li44N2FhMmFjMDg4ZjY3NDg0Njcy
OTlmOTk1Y2E1ZWIyYzFlMGQxNDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmgKQEAgLTgyLDkgKzgyLDYgQEAgcHVibGljOgog
ICAgIHZvaWQgdHJhY2tEZXRlY3RlZChSZWZQdHI8QXBwZW5kUGlwZWxpbmU+LCBSZWZQdHI8V2Vi
Q29yZTo6VHJhY2tQcml2YXRlQmFzZT4sIGJvb2wgZmlyc3RUcmFja0RldGVjdGVkKTsKICAgICB2
b2lkIG5vdGlmeVNlZWtOZWVkc0RhdGFGb3JUaW1lKGNvbnN0IE1lZGlhVGltZSYpOwogCi0gICAg
c3RhdGljIGJvb2wgc3VwcG9ydHNDb2RlYyhTdHJpbmcgY29kZWMpOwotICAgIHN0YXRpYyBib29s
IHN1cHBvcnRzQWxsQ29kZWNzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBjb2RlY3MpOwotCiBwcml2
YXRlOgogICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nLCBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+Jik7CiAgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBw
b3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMm
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhY2FwYWJpbGl0aWVz
L01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeS5j
cHAKaW5kZXggMzI5ZTI5NGNhMmY2MDE5YWNhNDlmMzlhNjExNzhkZDUyNjY5MTY2MS4uYzk0ODMw
ZGZkMWVkNWZhNDMxOTRhOWZlOTk1NDNlZDMwZDcxMTAyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFFbmdpbmVDb25maWd1cmF0aW9u
RmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFjYXBhYmlsaXRp
ZXMvTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeS5jcHAKQEAgLTM5LDYgKzM5LDEwIEBA
CiAjaW5jbHVkZSAiTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeUNvY29hLmgiCiAjZW5k
aWYKIAorI2lmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVkZSAiTWVkaWFFbmdpbmVDb25maWd1cmF0
aW9uRmFjdG9yeUdTdHJlYW1lci5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
c3RhdGljIGJvb2wmIG1vY2tFbmFibGVkKCkKQEAgLTU4LDYgKzYyLDkgQEAgc3RhdGljIGNvbnN0
IEZhY3RvcnlWZWN0b3ImIGZhY3RvcmllcygpCiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZh
Y3RvcnlWZWN0b3I+IGZhY3RvcmllcyA9IG1ha2VOZXZlckRlc3Ryb3llZChGYWN0b3J5VmVjdG9y
KHsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgeyAmY3JlYXRlTWVkaWFQbGF5ZXJEZWNv
ZGluZ0NvbmZpZ3VyYXRpb25Db2NvYSwgbnVsbHB0ciB9LAorI2VuZGlmCisjaWYgVVNFKEdTVFJF
QU1FUikKKyAgICAgICAgeyAmY3JlYXRlTWVkaWFQbGF5ZXJEZWNvZGluZ0NvbmZpZ3VyYXRpb25H
U3RyZWFtZXIsIG51bGxwdHIgfSwKICNlbmRpZgogICAgIH0pKTsKICAgICByZXR1cm4gZmFjdG9y
aWVzOwo=
</data>
<flag name="review"
          id="378649"
          type_id="1"
          status="+"
          setter="calvaris"
    />
    <flag name="commit-queue"
          id="378744"
          type_id="3"
          status="-"
          setter="calvaris"
    />
          </attachment>
      

    </bug>

</bugzilla>