<?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>225192</bug_id>
          
          <creation_ts>2021-04-29 08:45:10 -0700</creation_ts>
          <short_desc>[MSE][GStreamer] WebKitMediaSrc rework v2</short_desc>
          <delta_ts>2021-06-18 04:52:43 -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>WebKitGTK</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alicia Boya García">aboya</reporter>
          <assigned_to name="Alicia Boya García">aboya</assigned_to>
          <cc>annulen</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>eocanha</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jbedard</cc>
    
    <cc>jer.noble</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>vjaquez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1755401</commentid>
    <comment_count>0</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2021-04-29 08:45:10 -0700</bug_when>
    <thetext>This patch (re)introduces a new source element for the MSE playback
pipeline. This is an iteration on the previous work on r249205 that
had to be reverted in r251365 because of flaky playbin3 bugs.

This new version avoids these pitfalls by avoiding flushes in
situations where they are avoidable and known to expose bugs.

This re-land shares many of the advantages that motivated the first
patch: seeks massively oversimplified and greater control by no longer
relying on appsrc. It can handle flushes of individual streams
natively.

Work has also gone into decoupling the state of the frame queue from
the state of WebKitMediaSrc so that the backend can survive
transitions from PAUSED to READY and back which
MediaPlayerPrivateGStreamer creates when playback ends. This latter
effort is not complete, and instead this version adds a special case
to inhibit downwards and back upwards transitions, avoiding any
issues.

It is expected that at this point this new backend is at least as
stable as the previous one. No LayoutTest has got worsened
expectations from adding this backend and some have improved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755408</commentid>
    <comment_count>1</comment_count>
      <attachid>427349</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2021-04-29 09:04:28 -0700</bug_when>
    <thetext>Created attachment 427349
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755649</commentid>
    <comment_count>2</comment_count>
      <attachid>427349</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-04-30 04:47:49 -0700</bug_when>
    <thetext>Comment on attachment 427349
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:253
&gt; +        GST_DEBUG_OBJECT(sink, &quot;new-preroll with PTS=%&quot; GST_TIME_FORMAT, GST_TIME_ARGS(GST_BUFFER_PTS(buffer)));

The new-sample log call uses TRACE, I suppose you deliberately use DEBUG here because pre-roll is going to be much less frequent?

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1545
&gt; +    if (isMediaSource() &amp;&amp; message-&gt;src != GST_OBJECT(m_source.get())) {

Nit: use GST_MESSAGE_SRC()

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1823
&gt; +        GST_DEBUG(&quot;Changed state from %s to %s&quot;, gst_element_state_get_name(currentState), gst_element_state_get_name(newState));

GST_DEBUG_OBJECT()

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:432
&gt; +    if (m_appsinkCaps &amp;&amp; strcmp(capsMediaType(caps.get()), capsMediaType(m_appsinkCaps.get()))) {

Maybe use gst_caps_is_equal()?

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:177
&gt; +    // GStreamer doesn&apos;t support zero as a valid playback rate. Instead, that is implemented in WebKit by pausing
&gt; +    // the pipeline.
&gt; +    if (rate &lt;= 0)
&gt; +        rate = 1.0;

Would it make sense to move this to the parent class?

&gt; Source/WebCore/platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp:163
&gt; +    track-&gt;enqueueObject(adoptGRef(GST_MINI_OBJECT(gstSample.leakRef())));

Why the cast here? There&apos;s GRefPtr template specialization for GstSample, I don&apos;t think one is needed for GstMiniObject? :)

&gt; Source/WebCore/platform/graphics/gstreamer/mse/TrackQueue.cpp:49
&gt; +    ASSERT(GST_IS_SAMPLE(object.get()) || GST_IS_EVENT(object.get()));

Ah I understand now the GstMiniObject GRefPtr...

&gt; Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:150
&gt; +G_DEFINE_TYPE_WITH_CODE(WebKitMediaSrc, webkit_media_src, GST_TYPE_ELEMENT,

WEBKIT_DEFINE_TYPE maybe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755684</commentid>
    <comment_count>3</comment_count>
      <attachid>427349</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2021-04-30 08:09:12 -0700</bug_when>
    <thetext>Comment on attachment 427349
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:253
&gt;&gt; +        GST_DEBUG_OBJECT(sink, &quot;new-preroll with PTS=%&quot; GST_TIME_FORMAT, GST_TIME_ARGS(GST_BUFFER_PTS(buffer)));
&gt; 
&gt; The new-sample log call uses TRACE, I suppose you deliberately use DEBUG here because pre-roll is going to be much less frequent?

Yes.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:432
&gt;&gt; +    if (m_appsinkCaps &amp;&amp; strcmp(capsMediaType(caps.get()), capsMediaType(m_appsinkCaps.get()))) {
&gt; 
&gt; Maybe use gst_caps_is_equal()?

Not quite, as some caps are unequal but compatible, e.g. two sets of h264 with different PPS. capsMediaType() also unpacks the inner type when encrypted media is used.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:177
&gt;&gt; +        rate = 1.0;
&gt; 
&gt; Would it make sense to move this to the parent class?

It&apos;s not a clear-cut case. An important difference is that in the general case the pipeline gets the seek event, while in MSE we want the source element to get it, in order to handle seeks before pre-roll. We could add a special case in the general player, but I&apos;m not sure it&apos;s the way to go at this point.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp:163
&gt;&gt; +    track-&gt;enqueueObject(adoptGRef(GST_MINI_OBJECT(gstSample.leakRef())));
&gt; 
&gt; Why the cast here? There&apos;s GRefPtr template specialization for GstSample, I don&apos;t think one is needed for GstMiniObject? :)

It would be very neat if that was the case and I could write `track-&gt;enqueueObject(WTFMove(gstSample));`. Unfortunately that doesn&apos;t work with the current library.

WTF/Headers/wtf/glib/GRefPtr.h:71:68: error: cannot convert ‘_GstSample*’ to ‘_GstMiniObject*’ in initialization
   71 |     template &lt;typename U&gt; GRefPtr(GRefPtr&lt;U&gt;&amp;&amp; o) : m_ptr(o.leakRef()) { }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755689</commentid>
    <comment_count>4</comment_count>
      <attachid>427423</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2021-04-30 08:36:21 -0700</bug_when>
    <thetext>Created attachment 427423
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756131</commentid>
    <comment_count>5</comment_count>
      <attachid>427545</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2021-05-03 02:43:58 -0700</bug_when>
    <thetext>Created attachment 427545
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756132</commentid>
    <comment_count>6</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2021-05-03 02:44:33 -0700</bug_when>
    <thetext>Reuploaded because the last time I ran webkit-patch from Source/ instead of from the repo root.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756199</commentid>
    <comment_count>7</comment_count>
      <attachid>427545</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2021-05-03 09:10:31 -0700</bug_when>
    <thetext>Comment on attachment 427545
Patch

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

Some nits but LGTM. If you decide to implement the WTF suggestions, we&apos;d need another review round.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:2731
&gt; +    // In the MSE case stream collection messages are emitted from the main thread right before the initilization segement

segment

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:432
&gt; +    if (m_appsinkCaps &amp;&amp; strcmp(capsMediaType(caps.get()), capsMediaType(m_appsinkCaps.get()))) {

Please, g_strcmp

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:797
&gt; +    case MediaSourceStreamTypeGStreamer::Audio: {
&gt; +        auto specificTrack = WebCore::AudioTrackPrivateGStreamer::create(makeWeakPtr(*m_playerPrivate), id(), sinkSinkPad.get());
&gt; +        gstreamerTrack = specificTrack.ptr();
&gt; +        m_track = makeRefPtr(static_cast&lt;TrackPrivateBase*&gt;(specificTrack.ptr()));
&gt;          break;
&gt; -    case WebCore::MediaSourceStreamTypeGStreamer::Video:
&gt; -        m_track = WebCore::VideoTrackPrivateGStreamer::create(makeWeakPtr(*m_playerPrivate), id(), sinkSinkPad.get());
&gt; +    }
&gt; +    case MediaSourceStreamTypeGStreamer::Video: {
&gt; +        auto specificTrack = WebCore::VideoTrackPrivateGStreamer::create(makeWeakPtr(*m_playerPrivate), id(), sinkSinkPad.get());
&gt; +        gstreamerTrack = specificTrack.ptr();
&gt; +        m_track = makeRefPtr(static_cast&lt;TrackPrivateBase*&gt;(specificTrack.ptr()));
&gt;          break;
&gt; -    case WebCore::MediaSourceStreamTypeGStreamer::Text:
&gt; -        m_track = WebCore::InbandTextTrackPrivateGStreamer::create(id(), sinkSinkPad.get());
&gt; +    }
&gt; +    case MediaSourceStreamTypeGStreamer::Text: {
&gt; +        auto specificTrack = WebCore::InbandTextTrackPrivateGStreamer::create(id(), sinkSinkPad.get());
&gt; +        gstreamerTrack = specificTrack.ptr();
&gt; +        m_track = makeRefPtr(static_cast&lt;TrackPrivateBase*&gt;(specificTrack.ptr()));

I think for these three cases we could do something like:

case MediaSourceStreamTypeGStreamer::Audio:
    gstreamerTrack = WebCore::AudioTrackPrivateGStreamer::create(makeWeakPtr(*m_playerPrivate), id(), sinkSinkPad.get()).ptr();
    break;

Same for video and text.

And then move the m_track assigment to after the switch.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:6
&gt; + * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2016, 2017, 2018, 2019, 2020 Igalia S.L

What&apos;s up with us and 2021?

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:206
&gt; +    GST_DEBUG(&quot;MediaSource called setReadyState(%p): %s -&gt; %s Current player state: %s Waiting for preroll: %s&quot;, this, dumpReadyState(m_mediaSourceReadyState), dumpReadyState(mediaSourceReadyState), dumpReadyState(m_readyState), boolForPrinting(m_isWaitingForPreroll));

I thought I would never say this but this line seems to be very long.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:280
&gt; +        if (!changePipelineState(GST_STATE_PLAYING))
&gt; +            GST_ERROR_OBJECT(pipeline(), &quot;Setting the pipeline to PLAYING failed&quot;);

Should&apos;t we go harder on this as it looks unrecoverable? Maybe a GST_ELEMENT_ERROR?

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:284
&gt; +        if (!changePipelineState(GST_STATE_PAUSED))
&gt; +            GST_ERROR_OBJECT(pipeline(), &quot;Setting the pipeline to PAUSED failed&quot;);

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:338
&gt; +    GRefPtr&lt;GstCaps&gt; caps = appendPipeline.appsinkCaps();

Can the caps disappear from the appendPipeline while we are running this? Maybe we don&apos;t event need to increse the reference. Not strong opinion anyway.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaSourcePrivateGStreamer.cpp:146
&gt; +    // See MediaPlayerPrivateGStreamerMSE::asyncStateChangeDone()

. at the end :)

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaSourceTrackGStreamer.cpp:64
&gt; +    WTF::DataMutex&lt;TrackQueue&gt;::LockedWrapper queue(m_queueDataMutex);

I think it could be interesting to create a holdLock function for this so that we can just do something like

auto queue = holdLock(m_queueDataMutex);

Ditto for the other cases below.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaSourceTrackGStreamer.h:45
&gt; +    ~MediaSourceTrackGStreamer();

Shouldn&apos;t this be virtual?

&gt; Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:156
&gt; +    Stream(WebKitMediaSrc* source, GRefPtr&lt;GstPad&gt;&amp;&amp; pad, Ref&lt;MediaSourceTrackGStreamer&gt; track, GRefPtr&lt;GstStream&gt;&amp;&amp; streamInfo)

track can be a &amp;&amp;, right?

&gt; Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:294
&gt; +    for (RefPtr&lt;MediaSourceTrackGStreamer&gt; track : tracks) {

Can&apos;t we make this a const auto&amp;

&gt; Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:314
&gt; +        // Workaround: gst_element_add_pad() should already call gst_pad_set_active() if the element is PAUSED or

By style, this kind of comments should begin with a FIXME.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:369
&gt; +            DataMutex&lt;Stream::StreamingMembers&gt;::LockedWrapper streamingMembers(stream-&gt;streamingMembersDataMutex);

If only we had a holdLock...

&gt; Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:379
&gt; +    DataMutex&lt;Stream::StreamingMembers&gt;::LockedWrapper streamingMembers(stream-&gt;streamingMembersDataMutex);

Ditto

&gt; Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:383
&gt; +// Called with STREAM_LOCK.

We could be interesting to ASSERT on this, maybe for a TRYLOCK to fail.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:389
&gt; +    DataMutex&lt;Stream::StreamingMembers&gt;::LockedWrapper streamingMembers(stream-&gt;streamingMembersDataMutex);

Ditto holdLock.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:397
&gt; +    GST_OBJECT_LOCK(pad);

These LOCKS give me the creeps. I had already told Phil in the past, maybe I am luckier with you :) No strong opinion either.

We could create a ScopedExit to ensure we UNLOCK but for this we would need ScopedExit to have a runEarly() method that is not there unless you write it ;)

&gt; Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:430
&gt; +        GUniquePtr&lt;char&gt; streamId(g_strdup_printf(&quot;mse/%s&quot;, stream-&gt;track-&gt;trackId().string().utf8().data()));

Why U no use makeString?

&gt; Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:463
&gt; +                DataMutex&lt;Stream::StreamingMembers&gt;::LockedWrapper streamingMembers(stream-&gt;streamingMembersDataMutex);

I promise I won&apos;t say it again :)

&gt; Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:493
&gt; +        bool ret = gst_pad_push_event(pad, gst_event_new_segment(&amp;streamingMembers-&gt;segment));

ret -&gt; some fuller name

&gt; Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:531
&gt; +            GUniquePtr&lt;char&gt; fileName { g_strdup_printf(&quot;playback-pipeline-pushing-buffer-failed-%s&quot;, stream-&gt;track-&gt;trackId().string().utf8().data()) };

makeString ?

&gt; Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:626
&gt; +        GST_PAD_STREAM_LOCK(stream-&gt;pad.get());

Here you can actually use the ScopedExit without the runEarly!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756234</commentid>
    <comment_count>8</comment_count>
      <attachid>427545</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2021-05-03 10:47:59 -0700</bug_when>
    <thetext>Comment on attachment 427545
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:176
&gt; +    if (rate &lt;= 0)

Just to be sure that this observation has been had into account: Are negative rates (backwards playback) unsupported? I&apos;m not saying that they should be. Maybe that&apos;s out of scope for now and it&apos;s fine that they&apos;re unsupported. That would be fine.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaSourcePrivateGStreamer.cpp:137
&gt;  void MediaSourcePrivateGStreamer::waitForSeekCompleted()

Maybe it makes sense to implement this empty method directly in the header file as waitForSeekCompleted() { }

&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaSourceTrackGStreamer.h:56
&gt; +    void enqueueObject(GRefPtr&lt;GstMiniObject&gt;&amp;&amp;);

If you consider it a good readability improvement, maybe it would be nice to split this method in enqueueSample() and enqueueEvent(). Ideally, the TrackQueue method would also be split in two public methods and have a unified private enqueueObject() implementation.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp:152
&gt; +    GST_TRACE(&quot;enqueing sample trackId=%s PTS=%f presentationSize=%.0fx%.0f at %&quot; GST_TIME_FORMAT &quot; duration: %&quot; GST_TIME_FORMAT,

Maybe this &quot;PTS=%f&quot; and its sample-&gt;presentationTime().toFloat() is code inherited from the time when we were still using floats for times instead of MediaTime. It would be better to use &quot;PTS=%s&quot; and sample-&gt;presentationTime().toString().utf8().data().

&gt; Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:187
&gt; +        GRefPtr&lt;GstCaps&gt; previousCaps; // Caps from enqueued samples are campared to these to push CAPS events as needed.

Typo: &quot;campared&quot; --&gt; &quot;compared&quot;

&gt; Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:311
&gt; +    for (auto&amp; pair : source-&gt;priv-&gt;streams) {

Only values are used in this loop. Maybe you can directly iterate on source-&gt;priv-&gt;streams.values().

&gt; Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:662
&gt; +    for (auto&amp; pair : source-&gt;priv-&gt;streams) {

Only values are used in this loop. Maybe you can directly iterate on source-&gt;priv-&gt;streams.values().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756467</commentid>
    <comment_count>9</comment_count>
      <attachid>427545</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2021-05-04 01:04:03 -0700</bug_when>
    <thetext>Comment on attachment 427545
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaSourceTrackGStreamer.h:56
&gt;&gt; +    void enqueueObject(GRefPtr&lt;GstMiniObject&gt;&amp;&amp;);
&gt; 
&gt; If you consider it a good readability improvement, maybe it would be nice to split this method in enqueueSample() and enqueueEvent(). Ideally, the TrackQueue method would also be split in two public methods and have a unified private enqueueObject() implementation.

Not that I see it, wouldn&apos;t it be even more interesting to use overload the methods and just create two enqueues, one taking GRefPtr&lt;GstSample&gt;&amp;&amp; and other taking GRefPtr&lt;GstEvent&gt;&amp;&amp;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756564</commentid>
    <comment_count>10</comment_count>
      <attachid>427545</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2021-05-04 09:54:33 -0700</bug_when>
    <thetext>Comment on attachment 427545
Patch

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

I will have a look at the yak shaving of enqueueObject() and the lock wrappers tomorrow.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:797
&gt;&gt; +        m_track = makeRefPtr(static_cast&lt;TrackPrivateBase*&gt;(specificTrack.ptr()));
&gt; 
&gt; I think for these three cases we could do something like:
&gt; 
&gt; case MediaSourceStreamTypeGStreamer::Audio:
&gt;     gstreamerTrack = WebCore::AudioTrackPrivateGStreamer::create(makeWeakPtr(*m_playerPrivate), id(), sinkSinkPad.get()).ptr();
&gt;     break;
&gt; 
&gt; Same for video and text.
&gt; 
&gt; And then move the m_track assigment to after the switch.

That would require a reinterpret_cast&lt;&gt; because TrackPrivateBaseGStreamer is not a derived type of TrackPrivateBase.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:176
&gt;&gt; +    if (rate &lt;= 0)
&gt; 
&gt; Just to be sure that this observation has been had into account: Are negative rates (backwards playback) unsupported? I&apos;m not saying that they should be. Maybe that&apos;s out of scope for now and it&apos;s fine that they&apos;re unsupported. That would be fine.

The spec doesn&apos;t pronounce itself on the issue. We don&apos;t support reverse playback on MSE. Neither does Firefox, Chrome or the AVFoundation port of WebKit for that matter. I haven&apos;t seen any demand for that feature in the spec GitHub either.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:206
&gt;&gt; +    GST_DEBUG(&quot;MediaSource called setReadyState(%p): %s -&gt; %s Current player state: %s Waiting for preroll: %s&quot;, this, dumpReadyState(m_mediaSourceReadyState), dumpReadyState(mediaSourceReadyState), dumpReadyState(m_readyState), boolForPrinting(m_isWaitingForPreroll));
&gt; 
&gt; I thought I would never say this but this line seems to be very long.

I never thought you would ever say this indeed. I&apos;ll split it.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:280
&gt;&gt; +            GST_ERROR_OBJECT(pipeline(), &quot;Setting the pipeline to PLAYING failed&quot;);
&gt; 
&gt; Should&apos;t we go harder on this as it looks unrecoverable? Maybe a GST_ELEMENT_ERROR?

If this was WebKitMediaSrc, sure. But this is the player, and sending error messages to the bus of the pipeline from outside when a state transition fails feels a bit uncomfortable...

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:338
&gt;&gt; +    GRefPtr&lt;GstCaps&gt; caps = appendPipeline.appsinkCaps();
&gt; 
&gt; Can the caps disappear from the appendPipeline while we are running this? Maybe we don&apos;t event need to increse the reference. Not strong opinion anyway.

You are right, I will turn it back into a normal pointer.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:314
&gt;&gt; +        // Workaround: gst_element_add_pad() should already call gst_pad_set_active() if the element is PAUSED or
&gt; 
&gt; By style, this kind of comments should begin with a FIXME.

Note this is about something to be fixed in GStreamer, not WebKit. I&apos;m adding a FIXME anyway:

// FIXME: Remove this workaround when the bug gets fixed and versions without the bug are no longer in use.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:383
&gt;&gt; +// Called with STREAM_LOCK.
&gt; 
&gt; We could be interesting to ASSERT on this, maybe for a TRYLOCK to fail.

Unfortunately glib doesn&apos;t provide an API to do that. TRYLOCK is not an appropriate mechanism for checking if mutex are locked because:

a) if the mutex is a GRecMutex (as is the case of STREAM_LOCK) trylock will only fail if it&apos;s held by a different thread, but not if it&apos;s not held at all. Also you need to unlock it afterwards to decrease the lock count.
b) if the mutex is a GMutex, the mutex is not guaranteed to be neither recursive nor not-recursive, and calling trylock from the same thread the mutex is locked is undefined behavior.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:430
&gt;&gt; +        GUniquePtr&lt;char&gt; streamId(g_strdup_printf(&quot;mse/%s&quot;, stream-&gt;track-&gt;trackId().string().utf8().data()));
&gt; 
&gt; Why U no use makeString?

Because it wouldn&apos;t help me a lot. I would need to do:

GUniquePtr&lt;char&gt; streamId { g_strdup(makeString(&quot;mse/&quot;, stream-&gt;track-&gt;trackId()).utf8().data()) };

Which is not much shorter, and involves a string copy. In fact, using makeString() with GStreamer you may even be tempted to think you can get away with this:

GUniquePtr&lt;char&gt; streamId { makeString(&quot;mse/&quot;, stream-&gt;track-&gt;trackId()).utf8().data()) };

Which looks idiomatic on the surface, but it&apos;s a use-after-free immediately after initialization and a cross-allocator double-free when released. The reason is that the CString we&apos;re calling .data() from is a temporary whose lifetime is bound to the expression in which it&apos;s defined, and .data() returns a pointer to the internal memory of that CString -- which is only valid for as long that CString is valid.

This is fine if that .data() is passed as an argument to a function that will read it once and then be done with it, it&apos;s not fine if we keep the pointer past its lifetime (use-after-free).

Also, GUniquePtr&apos;s are freed with g_free(), which we definitely don&apos;t want to call with memory from WebKit&apos;s fast-malloc that was already freed there (cross-allocator double-free).

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:531
&gt;&gt; +            GUniquePtr&lt;char&gt; fileName { g_strdup_printf(&quot;playback-pipeline-pushing-buffer-failed-%s&quot;, stream-&gt;track-&gt;trackId().string().utf8().data()) };
&gt; 
&gt; makeString ?

Same problem as in the previous case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756951</commentid>
    <comment_count>11</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-05-05 08:53:56 -0700</bug_when>
    <thetext>A couple warnings from clang:

In file included from ../../Source/WebCore/platform/graphics/gstreamer/mse/MediaSourceTrackGStreamer.cpp:33:
../../Source/WebCore/platform/graphics/gstreamer/mse/MediaSourceTrackGStreamer.h:75:10: warning: private field &apos;m_isReadyForMoreSamples&apos; is not used [-Wunused-private-field]
    bool m_isReadyForMoreSamples { true };
         ^
1 warning generated.
[64/743] Building CXX object Source/WebCore/CMakeFiles/WebCore.dir/platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp.o
In file included from ../../Source/WebCore/platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp:36:
../../Source/WebCore/platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.h:108:32: warning: private field &apos;m_sourceBufferPrivateClient&apos; is not used [-Wunused-private-field]
    SourceBufferPrivateClient* m_sourceBufferPrivateClient { nullptr };
                               ^</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756987</commentid>
    <comment_count>12</comment_count>
      <attachid>427779</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2021-05-05 10:45:11 -0700</bug_when>
    <thetext>Created attachment 427779
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756989</commentid>
    <comment_count>13</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2021-05-05 10:51:19 -0700</bug_when>
    <thetext>To not risk delaying things further, I am landing the patch now with all the corrections (including last message about clang warnings) minus the syntactic sugar for lock holders which would require new classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757004</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-05 11:34:37 -0700</bug_when>
    <thetext>Committed r277031 (237344@main): &lt;https://commits.webkit.org/237344@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 427779.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770988</commentid>
    <comment_count>15</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-06-18 04:52:43 -0700</bug_when>
    <thetext>*** Bug 210644 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427349</attachid>
            <date>2021-04-29 09:04:28 -0700</date>
            <delta_ts>2021-04-30 08:36:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225192-20210429180425.patch</filename>
            <type>text/plain</type>
            <size>189177</size>
            <attacher name="Alicia Boya García">aboya</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NjM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGMxMzdkZWEzNjE5N2Nj
NTU3Y2Y3NzJkMGY4ZmEyODg1MDI5ODM5Zi4uMTY3OWNhODA4NjMxY2EwNzg4NGM3MDJkYmUyYzEy
ZTFiMDE5MzdlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1OSBAQAorMjAyMS0wNC0yOSAgQWxp
Y2lhIEJveWEgR2FyY8OtYSAgPGFib3lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW01TRV1bR1N0
cmVhbWVyXSBXZWJLaXRNZWRpYVNyYyByZXdvcmsgdjIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTE5MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggKHJlKWludHJvZHVjZXMgYSBuZXcg
c291cmNlIGVsZW1lbnQgZm9yIHRoZSBNU0UgcGxheWJhY2sKKyAgICAgICAgcGlwZWxpbmUuIFRo
aXMgaXMgYW4gaXRlcmF0aW9uIG9uIHRoZSBwcmV2aW91cyB3b3JrIG9uIHIyNDkyMDUgdGhhdAor
ICAgICAgICBoYWQgdG8gYmUgcmV2ZXJ0ZWQgaW4gcjI1MTM2NSBiZWNhdXNlIG9mIGZsYWt5IHBs
YXliaW4zIGJ1Z3MuCisKKyAgICAgICAgVGhpcyBuZXcgdmVyc2lvbiBhdm9pZHMgdGhlc2UgcGl0
ZmFsbHMgYnkgYXZvaWRpbmcgZmx1c2hlcyBpbgorICAgICAgICBzaXR1YXRpb25zIHdoZXJlIHRo
ZXkgYXJlIGF2b2lkYWJsZSBhbmQga25vd24gdG8gZXhwb3NlIGJ1Z3MuCisKKyAgICAgICAgVGhp
cyByZS1sYW5kIHNoYXJlcyBtYW55IG9mIHRoZSBhZHZhbnRhZ2VzIHRoYXQgbW90aXZhdGVkIHRo
ZSBmaXJzdAorICAgICAgICBwYXRjaDogc2Vla3MgbWFzc2l2ZWx5IG92ZXJzaW1wbGlmaWVkIGFu
ZCBncmVhdGVyIGNvbnRyb2wgYnkgbm8gbG9uZ2VyCisgICAgICAgIHJlbHlpbmcgb24gYXBwc3Jj
LiBJdCBjYW4gaGFuZGxlIGZsdXNoZXMgb2YgaW5kaXZpZHVhbCBzdHJlYW1zCisgICAgICAgIG5h
dGl2ZWx5LgorCisgICAgICAgIFdvcmsgaGFzIGFsc28gZ29uZSBpbnRvIGRlY291cGxpbmcgdGhl
IHN0YXRlIG9mIHRoZSBmcmFtZSBxdWV1ZSBmcm9tCisgICAgICAgIHRoZSBzdGF0ZSBvZiBXZWJL
aXRNZWRpYVNyYyBzbyB0aGF0IHRoZSBiYWNrZW5kIGNhbiBzdXJ2aXZlCisgICAgICAgIHRyYW5z
aXRpb25zIGZyb20gUEFVU0VEIHRvIFJFQURZIGFuZCBiYWNrIHdoaWNoCisgICAgICAgIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lciBjcmVhdGVzIHdoZW4gcGxheWJhY2sgZW5kcy4gVGhpcyBs
YXR0ZXIKKyAgICAgICAgZWZmb3J0IGlzIG5vdCBjb21wbGV0ZSwgYW5kIGluc3RlYWQgdGhpcyB2
ZXJzaW9uIGFkZHMgYSBzcGVjaWFsIGNhc2UKKyAgICAgICAgdG8gaW5oaWJpdCBkb3dud2FyZHMg
YW5kIGJhY2sgdXB3YXJkcyB0cmFuc2l0aW9ucywgYXZvaWRpbmcgYW55CisgICAgICAgIGlzc3Vl
cy4KKworICAgICAgICBJdCBpcyBleHBlY3RlZCB0aGF0IGF0IHRoaXMgcG9pbnQgdGhpcyBuZXcg
YmFja2VuZCBpcyBhdCBsZWFzdCBhcworICAgICAgICBzdGFibGUgYXMgdGhlIHByZXZpb3VzIG9u
ZS4gTm8gTGF5b3V0VGVzdCBoYXMgZ290IHdvcnNlbmVkCisgICAgICAgIGV4cGVjdGF0aW9ucyBm
cm9tIGFkZGluZyB0aGlzIGJhY2tlbmQgYW5kIHNvbWUgaGF2ZSBpbXByb3ZlZC4KKworICAgICAg
ICAqIHBsYXRmb3JtL0dTdHJlYW1lci5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwOgorICAgICAgICAod2ViS2l0R0xW
aWRlb1NpbmtGaW5hbGl6ZSk6CisgICAgICAgICh3ZWJLaXRHTFZpZGVvU2lua1NldE1lZGlhUGxh
eWVyUHJpdmF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQ
dHJHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV1RGOjphZG9wdEdSZWYpOgorICAgICAgICAoV1RG
OjpyZWZHUHRyPEdzdE1pbmlPYmplY3Q+KToKKyAgICAgICAgKFdURjo6ZGVyZWZHUHRyPEdzdE1p
bmlPYmplY3Q+KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0
ckdTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpkb1NlZWspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVUcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTdHJlYW1Db2xsZWN0aW9uTWVzc2FnZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1l
c3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpk
aWRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpj
cmVhdGVHU1RQbGF5QmluKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmludmFsaWRhdGVDYWNoZWRQb3NpdGlvbik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OnNldEluaXRp
YWxDYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6Omlu
aXRpYWxDYXBzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0Fw
cGVuZFBpcGVsaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpwYXJz
ZURlbXV4ZXJTcmNQYWRDYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjph
cHBzaW5rQ2Fwc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmNv
bm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rRnJvbVN0cmVhbWluZ1RocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6Y29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmsp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxp
bmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpkZW11eGVyU3JjUGFkQ2Fw
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bG9hZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnBsYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpwYXVzZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNlZWsp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkb1Nl
ZWspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpz
ZXRSZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRTo6cHJvcGFnYXRlUmVhZHlTdGF0ZVRvUGxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6YXN5bmNTdGF0ZUNoYW5nZURvbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzb3VyY2VT
ZXR1cCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6
OnVwZGF0ZVN0YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0U6OnVuYmxvY2tEdXJhdGlvbkNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkdXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp0cmFja0RldGVjdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c3RhcnRT
b3VyY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0U6Omhhc0FsbFRyYWNrcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OndlYktpdE1lZGlhU3JjKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlUHJpdmF0
ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGVHU3Ry
ZWFtZXI6OmFkZFNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVBy
aXZhdGVHU3RyZWFtZXI6Om1hcmtFbmRPZlN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVNvdXJjZVByaXZhdGVHU3RyZWFtZXI6OnVubWFya0VuZE9mU3RyZWFtKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lcjo6d2FpdEZvclNlZWtDb21wbGV0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyOjpzZWVrQ29t
cGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lcjo6
c3RhcnRQbGF5YmFja0lmSGFzQWxsVHJhY2tzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lci5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1l
ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1l
cjo6TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNv
dXJjZVRyYWNrR1N0cmVhbWVyOjp+TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcjo6aXNSZWFkeUZvck1vcmVTYW1wbGVz
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXI6Om5vdGlmeVdo
ZW5SZWFkeUZvck1vcmVTYW1wbGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlVHJh
Y2tHU3RyZWFtZXI6OmVucXVldWVPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3Vy
Y2VUcmFja0dTdHJlYW1lcjo6Y2xlYXJRdWV1ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNv
dXJjZVRyYWNrR1N0cmVhbWVyOjpyZW1vdmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lci5oOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1BsYXliYWNrUGlwZWxpbmUuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1NvdXJj
ZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVm
ZmVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVtb3ZlZEZyb21NZWRpYVNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpmbHVzaCk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjplbnF1ZXVlU2FtcGxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OmlzUmVhZHlGb3JN
b3JlU2FtcGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVh
bWVyOjpub3RpZnlDbGllbnRXaGVuUmVhZHlGb3JNb3JlU2FtcGxlcyk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjphbGxTYW1wbGVzSW5UcmFja0VucXVl
dWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OmRp
ZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9tc2UvU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvVHJhY2tRdWV1ZS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tRdWV1ZTo6VHJhY2tRdWV1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUcmFja1F1ZXVlOjplbnF1ZXVlT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRy
YWNrUXVldWU6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUXVldWU6OmZsdXNoKToK
KyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUXVldWU6Om5vdGlmeVdoZW5Mb3dMZXZlbCk6CisgICAg
ICAgIChXZWJDb3JlOjpUcmFja1F1ZXVlOjpwb3ApOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tR
dWV1ZTo6bm90aWZ5V2hlbk5vdEVtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUXVldWU6
OnJlc2V0Tm90RW1wdHlIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUXVldWU6OmNo
ZWNrTG93TGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tRdWV1ZTo6ZHVyYXRpb25FbnF1
ZXVlZCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9U
cmFja1F1ZXVlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tRdWV1ZTo6aXNGdWxs
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUXVldWU6OmlzRW1wdHkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6VHJhY2tRdWV1ZTo6aGFzTm90RW1wdHlIYW5kbGVyIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291
cmNlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYktpdE1lZGlhU3JjUHJpdmF0ZTo6c3RyZWFt
QnlOYW1lKToKKyAgICAgICAgKFdlYktpdE1lZGlhU3JjUHJpdmF0ZTo6aXNTdGFydGVkKToKKyAg
ICAgICAgKFdURjo6YWRvcHRHUmVmKToKKyAgICAgICAgKFdURjo6cmVmR1B0cjxXZWJLaXRNZWRp
YVNyY1BhZD4pOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHI8V2ViS2l0TWVkaWFTcmNQYWQ+KToK
KyAgICAgICAgKHdlYmtpdF9tZWRpYV9zcmNfcGFkX2NsYXNzX2luaXQpOgorICAgICAgICAoU3Ry
ZWFtOjpTdHJlYW0pOgorICAgICAgICAoU3RyZWFtOjpTdHJlYW1pbmdNZW1iZXJzOjpTdHJlYW1p
bmdNZW1iZXJzKToKKyAgICAgICAgKGZpbmRQaXBlbGluZSk6CisgICAgICAgIChnc3RTdHJlYW1U
eXBlKToKKyAgICAgICAgKHN0cmVhbVR5cGVUb1N0cmluZyk6CisgICAgICAgICh3ZWJraXRfbWVk
aWFfc3JjX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X21lZGlhX3NyY19pbml0KToKKyAg
ICAgICAgKHdlYktpdE1lZGlhU3JjRmluYWxpemUpOgorICAgICAgICAod2ViS2l0TWVkaWFTcmNF
bWl0U3RyZWFtcyk6CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY1RlYXJEb3duU3RyZWFtKToKKyAg
ICAgICAgKHdlYktpdE1lZGlhU3JjQWN0aXZhdGVNb2RlKToKKyAgICAgICAgKHdlYktpdE1lZGlh
U3JjUGFkTGlua2VkKToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjTG9vcCk6CisgICAgICAgICh3
ZWJLaXRNZWRpYVNyY1N0cmVhbUZsdXNoKToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjRmx1c2gp
OgorICAgICAgICAod2ViS2l0TWVkaWFTcmNTZWVrKToKKyAgICAgICAgKGNvdW50U3RyZWFtc09m
VHlwZSk6CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY0dldFByb3BlcnR5KToKKyAgICAgICAgKHdl
YktpdE1lZGlhU3JjQ2hhbmdlU3RhdGUpOgorICAgICAgICAod2ViS2l0TWVkaWFTcmNTZW5kRXZl
bnQpOgorICAgICAgICAod2ViS2l0TWVkaWFTcmNVcmlHZXRUeXBlKToKKyAgICAgICAgKHdlYktp
dE1lZGlhU3JjR2V0UHJvdG9jb2xzKToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjR2V0VXJpKToK
KyAgICAgICAgKHdlYktpdE1lZGlhU3JjU2V0VXJpKToKKyAgICAgICAgKHdlYktpdE1lZGlhU3Jj
VXJpSGFuZGxlckluaXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyUHJpdmF0ZS5oOiBS
ZW1vdmVkLgorCiAyMDIxLTA0LTIxICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtjc3MtZmxleGJveF0gcGVyY2VudCBjaGlsZHJlbiBkb24ndCBy
ZXNvbHZlIGFnYWluc3QgdGhlIGZsZXggYmFzaXMgb24gYSBmdWxseSBpbmZsZXhpYmxlIGl0ZW0g
d2l0aCBmaXhlZCBmbGV4LWJhc2lzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21h
a2UKaW5kZXggYmEwYWIyYjQ3NTc4OGEyMWRiNjNlNDk0N2NlZTE3ZjgyNzBiOThmMS4uNGE3NjQw
NDkxYzUxZjMzYTQ2ZWY4N2RkYzUxYzdiNzBiNTNkOTllMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0dTdHJlYW1lci5jbWFrZQpAQCAtMzcsOCArMzcsOSBAQCBpZiAoRU5BQkxFX1ZJREVPIE9S
IEVOQUJMRV9XRUJfQVVESU8pCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvR1N0cmVhbWVyUmVnaXN0cnlTY2FubmVyTVNFLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNvdXJjZVByaXZhdGVH
U3RyZWFtZXIuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvUGxh
eWJhY2tQaXBlbGluZS5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21z
ZS9NZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvbXNlL1NvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuY3BwCisgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvVHJhY2tRdWV1ZS5jcHAKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1l
ci5jcHAKIAogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVy
VmlkZW9Db21tb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNwcAppbmRl
eCBhN2NkOTczMWZlNzRiYzk3ZDBmNjcxOTNiMzcyYjgyMTEyZjlkNjY4Li5kNTBjNzhhNmYwYTRi
ZWY2MTU4NTI1MjQzOWNmZTNlYzgxYzZmMzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZpZGVvU2lua0dT
dHJlYW1lci5jcHAKQEAgLTEzNSw2ICsxMzUsOCBAQCB2b2lkIHdlYktpdEdMVmlkZW9TaW5rRmlu
YWxpemUoR09iamVjdCogb2JqZWN0KQogICAgIGlmIChwcml2LT5tZWRpYVBsYXllclByaXZhdGUp
CiAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShwcml2LT5hcHBT
aW5rLmdldCgpLCBwcml2LT5tZWRpYVBsYXllclByaXZhdGUpOwogCisgICAgR1NUX0RFQlVHX09C
SkVDVChvYmplY3QsICJXZWJLaXRHTFZpZGVvU2luayBmaW5hbGl6ZWQuIik7CisKICAgICBHU1Rf
Q0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1MsIGZpbmFsaXplLCAob2JqZWN0KSk7CiB9CiAKQEAg
LTI0MCwxMSArMjQyLDE1IEBAIHZvaWQgd2ViS2l0R0xWaWRlb1NpbmtTZXRNZWRpYVBsYXllclBy
aXZhdGUoV2ViS2l0R0xWaWRlb1NpbmsqIHNpbmssIE1lZGlhUGxheWVyCiAgICAgcHJpdi0+bWVk
aWFQbGF5ZXJQcml2YXRlID0gcGxheWVyOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QocHJpdi0+YXBw
U2luay5nZXQoKSwgIm5ldy1zYW1wbGUiLCBHX0NBTExCQUNLKCtbXShHc3RFbGVtZW50KiBzaW5r
LCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikgLT4gR3N0Rmxvd1JldHVybiB7
CiAgICAgICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBzYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9z
aW5rX3B1bGxfc2FtcGxlKEdTVF9BUFBfU0lOSyhzaW5rKSkpOworICAgICAgICBHc3RCdWZmZXIq
IGJ1ZmZlciA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihzYW1wbGUuZ2V0KCkpOworICAgICAgICBH
U1RfVFJBQ0VfT0JKRUNUKHNpbmssICJuZXctc2FtcGxlIHdpdGggUFRTPSUiIEdTVF9USU1FX0ZP
Uk1BVCwgR1NUX1RJTUVfQVJHUyhHU1RfQlVGRkVSX1BUUyhidWZmZXIpKSk7CiAgICAgICAgIHBs
YXllci0+dHJpZ2dlclJlcGFpbnQoc2FtcGxlLmdldCgpKTsKICAgICAgICAgcmV0dXJuIEdTVF9G
TE9XX09LOwogICAgIH0pLCBwbGF5ZXIpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QocHJpdi0+YXBw
U2luay5nZXQoKSwgIm5ldy1wcmVyb2xsIiwgR19DQUxMQkFDSygrW10oR3N0RWxlbWVudCogc2lu
aywgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpIC0+IEdzdEZsb3dSZXR1cm4g
ewogICAgICAgICBHUmVmUHRyPEdzdFNhbXBsZT4gc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBf
c2lua19wdWxsX3ByZXJvbGwoR1NUX0FQUF9TSU5LKHNpbmspKSk7CisgICAgICAgIEdzdEJ1ZmZl
ciogYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKHNhbXBsZS5nZXQoKSk7CisgICAgICAg
IEdTVF9ERUJVR19PQkpFQ1Qoc2luaywgIm5ldy1wcmVyb2xsIHdpdGggUFRTPSUiIEdTVF9USU1F
X0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyhHU1RfQlVGRkVSX1BUUyhidWZmZXIpKSk7CiAgICAgICAg
IHBsYXllci0+dHJpZ2dlclJlcGFpbnQoc2FtcGxlLmdldCgpKTsKICAgICAgICAgcmV0dXJuIEdT
VF9GTE9XX09LOwogICAgIH0pLCBwbGF5ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3Bw
CmluZGV4IDRmZjJhOWRhYWMwNWU0YzcxNGI4N2QzMWM1NmY5MWMwNDBjOGExZDIuLjIzYWMxMjU3
NjYyMTk3ZmE0ZWFjOTdhOTk3Y2I1ZDBmZWVlNzQzOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJl
YW1lci5jcHAKQEAgLTI5LDYgKzI5LDI1IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCit0ZW1wbGF0
ZTw+IEdSZWZQdHI8R3N0TWluaU9iamVjdD4gYWRvcHRHUmVmKEdzdE1pbmlPYmplY3QqIHB0cikK
K3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RNaW5pT2JqZWN0PihwdHIsIEdSZWZQdHJBZG9wdCk7
Cit9CisKK3RlbXBsYXRlPD4gR3N0TWluaU9iamVjdCogcmVmR1B0cjxHc3RNaW5pT2JqZWN0PihH
c3RNaW5pT2JqZWN0KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X21pbmlfb2Jq
ZWN0X3JlZihwdHIpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGU8PiB2b2lkIGRl
cmVmR1B0cjxHc3RNaW5pT2JqZWN0PihHc3RNaW5pT2JqZWN0KiBwdHIpCit7CisgICAgaWYgKHB0
cikKKyAgICAgICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmKHB0cik7Cit9CisKIHRlbXBsYXRlIDw+
IEdSZWZQdHI8R3N0RWxlbWVudD4gYWRvcHRHUmVmKEdzdEVsZW1lbnQqIHB0cikKIHsKICAgICBB
U1NFUlQoIXB0ciB8fCAhZ19vYmplY3RfaXNfZmxvYXRpbmcocHRyKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1l
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJH
U3RyZWFtZXIuaAppbmRleCBhZmIxMzRkNzk1M2FjNzM2MTE4NTc1N2U1ZWEwNzA4Y2Q0NWRjMWI1
Li4wNzhkM2M1NjM5NzRmNmEyYjNhZjFlYjgzOTg2NDk4Nzk0NWZhN2Q4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1l
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVm
UHRyR1N0cmVhbWVyLmgKQEAgLTM5LDYgKzM5LDEwIEBAIHRlbXBsYXRlPD4gR1JlZlB0cjxHc3RQ
bHVnaW4+IGFkb3B0R1JlZihHc3RQbHVnaW4qIHB0cik7CiB0ZW1wbGF0ZTw+IEdzdFBsdWdpbiog
cmVmR1B0cjxHc3RQbHVnaW4+KEdzdFBsdWdpbiogcHRyKTsKIHRlbXBsYXRlPD4gdm9pZCBkZXJl
ZkdQdHI8R3N0UGx1Z2luPihHc3RQbHVnaW4qIHB0cik7CiAKK3RlbXBsYXRlPD4gR1JlZlB0cjxH
c3RNaW5pT2JqZWN0PiBhZG9wdEdSZWYoR3N0TWluaU9iamVjdCogcHRyKTsKK3RlbXBsYXRlPD4g
R3N0TWluaU9iamVjdCogcmVmR1B0cjxHc3RNaW5pT2JqZWN0PihHc3RNaW5pT2JqZWN0KiBwdHIp
OwordGVtcGxhdGU8PiB2b2lkIGRlcmVmR1B0cjxHc3RNaW5pT2JqZWN0PihHc3RNaW5pT2JqZWN0
KiBwdHIpOworCiB0ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0RWxlbWVudD4gYWRvcHRHUmVmKEdzdEVs
ZW1lbnQqIHB0cik7CiB0ZW1wbGF0ZTw+IEdzdEVsZW1lbnQqIHJlZkdQdHI8R3N0RWxlbWVudD4o
R3N0RWxlbWVudCogcHRyKTsKIHRlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8R3N0RWxlbWVudD4o
R3N0RWxlbWVudCogcHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5jcHAKaW5kZXggY2NjNDlhZWRlNDE2NmQ0YzYwNTQyYjA5MzNkYzY0NWEzODc1NTM5
MC4uMTE4NzZiMDdiNmQwM2Y1MjdlZWNmNzI4OThhNmI3Zjg1NWUyYTllYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTQzOCw3ICs0Mzgs
NyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGF1c2VkKCkgY29uc3QKICAg
ICByZXR1cm4gcGF1c2VkOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
ZG9TZWVrKGNvbnN0IE1lZGlhVGltZSYgcG9zaXRpb24sIGZsb2F0IHJhdGUsIEdzdFNlZWtGbGFn
cyBzZWVrVHlwZSkKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkb1NlZWsoY29u
c3QgTWVkaWFUaW1lJiBwb3NpdGlvbiwgZmxvYXQgcmF0ZSwgR3N0U2Vla0ZsYWdzIHNlZWtGbGFn
cykKIHsKICAgICAvLyBEZWZhdWx0IHZhbHVlcyBmb3IgcmF0ZSA+PSAwLgogICAgIE1lZGlhVGlt
ZSBzdGFydFRpbWUgPSBwb3NpdGlvbiwgZW5kVGltZSA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUo
KTsKQEAgLTQ1Myw3ICs0NTMsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
ZG9TZWVrKGNvbnN0IE1lZGlhVGltZSYgcG9zaXRpb24sIGZsb2F0IHJhdGUsCiAgICAgICAgIHJh
dGUgPSAxLjA7CiAKICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbU2Vla10gUGVy
Zm9ybWluZyBhY3R1YWwgc2VlayB0byAlIiBHU1RfVElNRV9GT1JNQVQgIiAoZW5kVGltZTogJSIg
R1NUX1RJTUVfRk9STUFUICIpIGF0IHJhdGUgJWYiLCBHU1RfVElNRV9BUkdTKHRvR3N0Q2xvY2tU
aW1lKHN0YXJ0VGltZSkpLCBHU1RfVElNRV9BUkdTKHRvR3N0Q2xvY2tUaW1lKGVuZFRpbWUpKSwg
cmF0ZSk7Ci0gICAgcmV0dXJuIGdzdF9lbGVtZW50X3NlZWsobV9waXBlbGluZS5nZXQoKSwgcmF0
ZSwgR1NUX0ZPUk1BVF9USU1FLCBzZWVrVHlwZSwKKyAgICByZXR1cm4gZ3N0X2VsZW1lbnRfc2Vl
ayhtX3BpcGVsaW5lLmdldCgpLCByYXRlLCBHU1RfRk9STUFUX1RJTUUsIHNlZWtGbGFncywKICAg
ICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIHRvR3N0Q2xvY2tUaW1lKHN0YXJ0VGltZSksIEdTVF9T
RUVLX1RZUEVfU0VULCB0b0dzdENsb2NrVGltZShlbmRUaW1lKSk7CiB9CiAKQEAgLTE0ODIsMTgg
KzE0ODIsMTYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVRyYWNr
cyhjb25zdCBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24KICAgICB1bnNpZ25lZCB0ZXh0VHJh
Y2tJbmRleCA9IDA7CiAKICNkZWZpbmUgQ1JFQVRFX1RSQUNLKHR5cGUsIFR5cGUpIEdfU1RNVF9T
VEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKCF1c2VNZWRpYVNv
dXJjZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgIFJlZlB0cjxUeXBlIyNUcmFja1ByaXZhdGVHU3RyZWFtZXI+IHRyYWNrID0gVHlwZSMj
VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobWFrZVdlYWtQdHIoKnRoaXMpLCB0eXBlIyNU
cmFja0luZGV4LCBzdHJlYW0pOyBcCi0gICAgICAgICAgICBhdXRvIHRyYWNrSWQgPSB0cmFjay0+
aWQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAo
IXR5cGUjI1RyYWNrSW5kZXgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICAgICAgbV93YW50ZWQjI1R5cGUjI1N0cmVhbUlkID0gdHJhY2tJZDsgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgbV9yZXF1ZXN0ZWQjI1R5cGUjI1N0
cmVhbUlkID0gdHJhY2tJZDsgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgdHJh
Y2stPnNldEFjdGl2ZSh0cnVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0eXBlIyNUcmFja0luZGV4Kys7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBtXyMjdHlwZSMj
VHJhY2tzLmFkZCh0cmFja0lkLCB0cmFjayk7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICAgICBtX3BsYXllci0+YWRkIyNUeXBlIyNUcmFjaygqdHJhY2spOyAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFJlZlB0cjxUeXBlIyNUcmFj
a1ByaXZhdGVHU3RyZWFtZXI+IHRyYWNrID0gVHlwZSMjVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpj
cmVhdGUobWFrZVdlYWtQdHIoKnRoaXMpLCB0eXBlIyNUcmFja0luZGV4LCBzdHJlYW0pOyBcCisg
ICAgICAgIGF1dG8gdHJhY2tJZCA9IHRyYWNrLT5pZCgpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgaWYgKCF0eXBlIyNUcmFja0luZGV4KSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgbV93YW50ZWQjI1R5cGUjI1N0
cmVhbUlkID0gdHJhY2tJZDsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBtX3Jl
cXVlc3RlZCMjVHlwZSMjU3RyZWFtSWQgPSB0cmFja0lkOyAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgIHRyYWNrLT5zZXRBY3RpdmUodHJ1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHR5cGUjI1RyYWNrSW5kZXgrKzsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbV8jI3R5cGUj
I1RyYWNrcy5hZGQodHJhY2tJZCwgdHJhY2spOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBtX3BsYXllci0+YWRkIyNUeXBlIyNUcmFjaygqdHJhY2spOyAgICAgICAgICAgICAgICAg
ICAgICAgICBcCiAgICAgfSBHX1NUTVRfRU5ECiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKQEAgLTE1NDAsNiArMTUzOCwxNSBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3RyZWFtQ29sbGVjdGlvbk1lc3NhZ2UoR3N0TWVzc2Fn
ZSogbWVzcwogICAgIGlmIChtX2lzTGVnYWN5UGxheWJpbikKICAgICAgICAgcmV0dXJuOwogCisg
ICAgLy8gR1N0cmVhbWVyIHdvcmthcm91bmQ6CisgICAgLy8gVW5mb3J0dW5hdGVseSwgd2hlbiB3
ZSBoYXZlIGEgc3RyZWFtLWNvbGxlY3Rpb24gYXdhcmUgc291cmNlIChsaWtlIFdlYktpdE1lZGlh
U3JjKSBwYXJzZWJpbiBhbmQgZGVjb2RlYmluMyBlbWl0CisgICAgLy8gdGhlaXIgb3duIHN0cmVh
bS1jb2xsZWN0aW9uIG1lc3NhZ2VzLCBidXQgbGF0ZSwgYW5kIHNvbWV0aW1lcyB3aXRoIGR1cGxp
Y2F0ZWQgc3RyZWFtcy4gTGV0J3Mgb25seSBsaXN0ZW4gZm9yCisgICAgLy8gc3RyZWFtLWNvbGxl
Y3Rpb24gbWVzc2FnZXMgZnJvbSB0aGUgc291cmNlIGluIHRoZSBNU0UgY2FzZSB0byBhdm9pZCB0
aGVzZSBpc3N1ZXMuCisgICAgaWYgKGlzTWVkaWFTb3VyY2UoKSAmJiBtZXNzYWdlLT5zcmMgIT0g
R1NUX09CSkVDVChtX3NvdXJjZS5nZXQoKSkpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChw
aXBlbGluZSgpLCAiSWdub3JpbmcgcmVkdW5kYW50IFNUUkVBTV9DT0xMRUNUSU9OIGZyb20gJSIg
R1NUX1BUUl9GT1JNQVQsIG1lc3NhZ2UtPnNyYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
ICAgICBBU1NFUlQoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9TVFJF
QU1fQ09MTEVDVElPTik7CiAgICAgR1JlZlB0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPiBjb2xsZWN0
aW9uOwogICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9jb2xsZWN0aW9uKG1lc3NhZ2UsICZj
b2xsZWN0aW9uLm91dFB0cigpKTsKQEAgLTE1NTUsNyArMTU2Miw3IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTdHJlYW1Db2xsZWN0aW9uTWVzc2FnZShHc3RNZXNz
YWdlKiBtZXNzCiAgICAgaWYgKCFjb2xsZWN0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBj
YWxsT25NYWluVGhyZWFkQW5kV2FpdChbcGxheWVyID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjb2xs
ZWN0aW9uID0gV1RGTW92ZShjb2xsZWN0aW9uKV0geworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Bs
YXllciA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgY29sbGVjdGlvbiA9IFdURk1vdmUoY29sbGVjdGlv
bildIHsKICAgICAgICAgaWYgKHBsYXllcikKICAgICAgICAgICAgIHBsYXllci0+dXBkYXRlVHJh
Y2tzKGNvbGxlY3Rpb24pOwogICAgIH0pOwpAQCAtMTgxMyw2ICsxODIwLDggQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2Fn
ZSkKICAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKGN1cnJlbnRTdGF0ZSks
ICdfJywgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobmV3U3RhdGUpKS51dGY4KCk7CiAgICAg
ICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1fcGlwZWxpbmUu
Z2V0KCkpLCBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGRvdEZpbGVOYW1lLmRhdGEoKSk7CiAK
KyAgICAgICAgR1NUX0RFQlVHKCJDaGFuZ2VkIHN0YXRlIGZyb20gJXMgdG8gJXMiLCBnc3RfZWxl
bWVudF9zdGF0ZV9nZXRfbmFtZShjdXJyZW50U3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRf
bmFtZShuZXdTdGF0ZSkpOworCiAgICAgICAgIGlmICghbV9pc0xlZ2FjeVBsYXliaW4gJiYgY3Vy
cmVudFN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQgJiYgbmV3U3RhdGUgPT0gR1NUX1NUQVRFX1BM
QVlJTkcpCiAgICAgICAgICAgICBwbGF5YmluM1NlbmRTZWxlY3RTdHJlYW1zSWZBcHByb3ByaWF0
ZSgpOwogICAgICAgICB1cGRhdGVTdGF0ZXMoKTsKQEAgLTE5NzEsOSArMTk4MCw2IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1l
c3NhZ2UpCiAgICAgICAgIHBsYXliaW4zU2VuZFNlbGVjdFN0cmVhbXNJZkFwcHJvcHJpYXRlKCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEdTVF9NRVNTQUdFX1NUUkVBTV9DT0xM
RUNUSU9OOgotICAgICAgICBoYW5kbGVTdHJlYW1Db2xsZWN0aW9uTWVzc2FnZShtZXNzYWdlKTsK
LSAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChw
aXBlbGluZSgpLCAiVW5oYW5kbGVkIEdTdHJlYW1lciBtZXNzYWdlIHR5cGU6ICVzIiwgR1NUX01F
U1NBR0VfVFlQRV9OQU1FKG1lc3NhZ2UpKTsKICAgICAgICAgYnJlYWs7CkBAIC0yNTUxLDcgKzI1
NTcsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkRW5kKCkKICAgICAv
LyB1bnRpbCB3ZSBnZXQgdGhlIGluaXRpYWwgU1RSRUFNU19TRUxFQ1RFRCBtZXNzYWdlIG9uZSBt
b3JlIHRpbWUuCiAgICAgbV93YWl0aW5nRm9yU3RyZWFtc1NlbGVjdGVkRXZlbnQgPSB0cnVlOwog
Ci0gICAgaWYgKCFtX3BsYXllci0+aXNMb29waW5nKCkpIHsKKyAgICBpZiAoIW1fcGxheWVyLT5p
c0xvb3BpbmcoKSAmJiAhaXNNZWRpYVNvdXJjZSgpKSB7CiAgICAgICAgIG1faXNQYXVzZWQgPSB0
cnVlOwogICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9SRUFEWSk7CiAgICAg
ICAgIG1fZGlkRG93bmxvYWRGaW5pc2ggPSBmYWxzZTsKQEAgLTI2ODEsMTEgKzI2ODcsMTAgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4oY29uc3Qg
VVJMJiB1cmwpCiAgICAgR1NUX0lORk8oIkNyZWF0aW5nIHBpcGVsaW5lIGZvciAlcyBwbGF5ZXIi
LCBtX3BsYXllci0+aXNWaWRlb1BsYXllcigpID8gInZpZGVvIiA6ICJhdWRpbyIpOwogICAgIGNv
bnN0IGNoYXIqIHBsYXliaW5OYW1lID0gInBsYXliaW4iOwogCi0gICAgLy8gTVNFIGRvZXNuJ3Qg
c3VwcG9ydCBwbGF5YmluMy4gTWVkaWFzdHJlYW0gcmVxdWlyZXMgcGxheWJpbjMuIFJlZ3VsYXIK
LSAgICAvLyBwbGF5YmFjayBjYW4gdXNlIHBsYXliaW4zIG9uLWRlbWFuZCB3aXRoIHRoZSBXRUJL
SVRfR1NUX1VTRV9QTEFZQklOMwotICAgIC8vIGVudmlyb25tZW50IHZhcmlhYmxlLgorICAgIC8v
IE1TRSBhbmQgTWVkaWFzdHJlYW0gcmVxdWlyZSBwbGF5YmluMy4gUmVndWxhciBwbGF5YmFjayBj
YW4gdXNlIHBsYXliaW4zIG9uLWRlbWFuZCB3aXRoIHRoZQorICAgIC8vIFdFQktJVF9HU1RfVVNF
X1BMQVlCSU4zIGVudmlyb25tZW50IHZhcmlhYmxlLgogICAgIGNvbnN0IGNoYXIqIHVzZVBsYXli
aW4zID0gZ19nZXRlbnYoIldFQktJVF9HU1RfVVNFX1BMQVlCSU4zIik7Ci0gICAgaWYgKCghaXNN
ZWRpYVNvdXJjZSgpICYmIHVzZVBsYXliaW4zICYmIGVxdWFsKHVzZVBsYXliaW4zLCAiMSIpKSB8
fCB1cmwucHJvdG9jb2xJcygibWVkaWFzdHJlYW0iKSkKKyAgICBpZiAoKGlzTWVkaWFTb3VyY2Uo
KSB8fCB1cmwucHJvdG9jb2xJcygibWVkaWFzdHJlYW0iKSB8fCAodXNlUGxheWJpbjMgJiYgZXF1
YWwodXNlUGxheWJpbjMsICIxIikpKSkKICAgICAgICAgcGxheWJpbk5hbWUgPSAicGxheWJpbjMi
OwogCiAgICAgQVNTRVJUKCFtX3BpcGVsaW5lKTsKQEAgLTI3MjMsNiArMjcyOCwxMiBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlR1NUUGxheUJpbihjb25zdCBVUkwm
IHVybCkKICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQoYnVzLmdldCgpLCAic3luYy1tZXNz
YWdlOjpuZWVkLWNvbnRleHQiLCBHX0NBTExCQUNLKCtbXShNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIqIHBsYXllciwgR3N0TWVzc2FnZSogbWVzc2FnZSkgewogICAgICAgICBwbGF5ZXItPmhh
bmRsZU5lZWRDb250ZXh0TWVzc2FnZShtZXNzYWdlKTsKICAgICB9KSwgdGhpcyk7CisgICAgLy8g
SW4gdGhlIE1TRSBjYXNlIHN0cmVhbSBjb2xsZWN0aW9uIG1lc3NhZ2VzIGFyZSBlbWl0dGVkIGZy
b20gdGhlIG1haW4gdGhyZWFkIHJpZ2h0IGJlZm9yZSB0aGUgaW5pdGlsaXphdGlvbiBzZWdlbWVu
dAorICAgIC8vIGlzIHBhcnNlZCBhbmQgInVwZGF0ZWVuZCIgaXMgZmlyZWQuIFdlIG5lZWQgdGhl
cmVmb3JlIHRvIGhhbmRsZSB0aGVzZSBzeW5jaHJvbm91c2x5IGluIHRoZSBzYW1lIG1haW4gdGhy
ZWFkIHRpY2sKKyAgICAvLyB0byBtYWtlIHRoZSB0cmFja3MgaW5mb3JtYXRpb24gYXZhaWxhYmxl
IHRvIEpTIG5vIGxhdGVyIHRoYW4gInVwZGF0ZWVuZCIuCisgICAgZ19zaWduYWxfY29ubmVjdF9z
d2FwcGVkKGJ1cy5nZXQoKSwgInN5bmMtbWVzc2FnZTo6c3RyZWFtLWNvbGxlY3Rpb24iLCBHX0NB
TExCQUNLKCtbXShNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllciwgR3N0TWVzc2Fn
ZSogbWVzc2FnZSkgeworICAgICAgICBwbGF5ZXItPmhhbmRsZVN0cmVhbUNvbGxlY3Rpb25NZXNz
YWdlKG1lc3NhZ2UpOworICAgIH0pLCB0aGlzKTsKIAogICAgIGdfb2JqZWN0X3NldChtX3BpcGVs
aW5lLmdldCgpLCAibXV0ZSIsIG1fcGxheWVyLT5tdXRlZCgpLCBudWxscHRyKTsKIApAQCAtMjc2
OSw4ICsyNzgwLDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdT
VFBsYXlCaW4oY29uc3QgVVJMJiB1cmwpCiAgICAgaWYgKG1fcGxheWVyLT5pc1ZpZGVvUGxheWVy
KCkpCiAgICAgICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCAidmlkZW8tc2luayIs
IGNyZWF0ZVZpZGVvU2luaygpLCBudWxscHRyKTsKIAotICAgIGNvbmZpZ3VyZVBsYXlTaW5rKCk7
Ci0KICAgICBpZiAobV9zaG91bGRQcmVzZXJ2ZVBpdGNoKSB7CiAgICAgICAgIEdzdEVsZW1lbnQq
IHNjYWxlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJzY2FsZXRlbXBvIiwgbnVsbHB0cik7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAppbmRleCBk
NDIxZWM3NDFhNmRlZGQ4OGFiNzdlNGU3YjdkMWMzYTU2NDUzM2MzLi41NjBiMTFlZDdkM2E4OGJi
YzNlZDYyMjgwZGUyMGM5NTM5ZTczYjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5oCkBAIC0xMzksOCArMTM5LDggQEAgcHVibGljOgogI2VuZGlmCiAg
ICAgdm9pZCBjYW5jZWxMb2FkKCkgZmluYWw7CiAgICAgdm9pZCBwcmVwYXJlVG9QbGF5KCkgZmlu
YWw7Ci0gICAgdm9pZCBwbGF5KCkgZmluYWw7Ci0gICAgdm9pZCBwYXVzZSgpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBwbGF5KCk7CisgICAgdmlydHVhbCB2b2lkIHBhdXNlKCk7CiAgICAg
Ym9vbCBwYXVzZWQoKSBjb25zdCBmaW5hbDsKICAgICBib29sIHNlZWtpbmcoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX2lzU2Vla2luZzsgfQogICAgIHZvaWQgc2Vlayhjb25zdCBNZWRpYVRp
bWUmKSBvdmVycmlkZTsKQEAgLTI1Miw3ICsyNTIsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0
dWFsIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCk7CiAgICAgdmlydHVhbCB2b2lkIHNvdXJjZVNldHVw
KEdzdEVsZW1lbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29uZmlndXJlUGxheVNpbmsoKSB7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgY2hhbmdlUGlwZWxpbmVTdGF0ZShHc3RTdGF0ZSk7CiAgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVBsYXliYWNrUmF0ZSgpOwogCkBAIC0zMDMsNiArMzAyLDkgQEAgcHJv
dGVjdGVkOgogICAgIHZvaWQgZW5zdXJlQXVkaW9Tb3VyY2VQcm92aWRlcigpOwogICAgIHZvaWQg
c2V0QXVkaW9TdHJlYW1Qcm9wZXJ0aWVzKEdPYmplY3QqKTsKIAorICAgIHZpcnR1YWwgYm9vbCBk
b1NlZWsoY29uc3QgTWVkaWFUaW1lJiBwb3NpdGlvbiwgZmxvYXQgcmF0ZSwgR3N0U2Vla0ZsYWdz
KTsKKyAgICB2b2lkIGludmFsaWRhdGVDYWNoZWRQb3NpdGlvbigpIHsgbV9sYXN0UXVlcnlUaW1l
LnJlc2V0KCk7IH0KKwogICAgIHN0YXRpYyB2b2lkIHNldEF1ZGlvU3RyZWFtUHJvcGVydGllc0Nh
bGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciosIEdPYmplY3QqKTsKIAogICAgIHN0
YXRpYyB2b2lkIHNvdXJjZVNldHVwQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
KiwgR3N0RWxlbWVudCopOwpAQCAtNDMxLDggKzQzMyw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBw
dXJnZUludmFsaWRWaWRlb1RyYWNrcyhWZWN0b3I8U3RyaW5nPiB2YWxpZFRyYWNrSWRzKTsKICAg
ICB2b2lkIHB1cmdlSW52YWxpZFRleHRUcmFja3MoVmVjdG9yPFN0cmluZz4gdmFsaWRUcmFja0lk
cyk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgZG9TZWVrKGNvbnN0IE1lZGlhVGltZSYgcG9zaXRpb24s
IGZsb2F0IHJhdGUsIEdzdFNlZWtGbGFncyBzZWVrVHlwZSk7Ci0KICAgICBTdHJpbmcgZW5naW5l
RGVzY3JpcHRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiR1N0cmVhbWVyIjsgfQogICAg
IGJvb2wgZGlkUGFzc0NPUlNBY2Nlc3NDaGVjaygpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wg
Y2FuU2F2ZU1lZGlhRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFt
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UcmFja1By
aXZhdGVCYXNlR1N0cmVhbWVyLmgKaW5kZXggYWY0YmZkODJmZGJjOGFlYWI0MDRjOWUxNWFmNjQ4
NTUzNTUzMGM5Ny4uMDk1NzVhZDkwZjgwYTEwZmJkOGFmMTNmYjQ0NzEyOGUwMjFkNTY5YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNr
UHJpdmF0ZUJhc2VHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5oCkBAIC02Miw2ICs2Miwx
MSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3N0cmVhbS5nZXQoKTsKICAgICB9CiAKKyAg
ICAvLyBVc2VkIGZvciBNU0UsIHdoZXJlIHRoZSBpbml0aWFsIGNhcHMgb2YgdGhlIHBhZCBhcmUg
cmVsZXZhbnQgZm9yIGluaXRpYWxpemluZyB0aGUgbWF0Y2hpbmcgcGFkIGluIHRoZQorICAgIC8v
IHBsYXliYWNrIHBpcGVsaW5lLgorICAgIHZvaWQgc2V0SW5pdGlhbENhcHMoR1JlZlB0cjxHc3RD
YXBzPiYmIGNhcHMpIHsgbV9pbml0aWFsQ2FwcyA9IFdURk1vdmUoY2Fwcyk7IH0KKyAgICBjb25z
dCBHUmVmUHRyPEdzdENhcHM+JiBpbml0aWFsQ2FwcygpIHsgcmV0dXJuIG1faW5pdGlhbENhcHM7
IH0KKwogcHJvdGVjdGVkOgogICAgIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIoVHJhY2tQcml2
YXRlQmFzZSogb3duZXIsIGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0UGFkPik7CiAgICAgVHJhY2tQ
cml2YXRlQmFzZUdTdHJlYW1lcihUcmFja1ByaXZhdGVCYXNlKiBvd25lciwgZ2ludCBpbmRleCwg
R1JlZlB0cjxHc3RTdHJlYW0+KTsKQEAgLTgyLDYgKzg3LDcgQEAgcHJvdGVjdGVkOgogICAgIEdS
ZWZQdHI8R3N0UGFkPiBtX2Jlc3RVcHN0cmVhbVBhZDsKICAgICBHUmVmUHRyPEdzdFN0cmVhbT4g
bV9zdHJlYW07CiAgICAgZ3Vsb25nIG1fZXZlbnRQcm9iZTsKKyAgICBHUmVmUHRyPEdzdENhcHM+
IG1faW5pdGlhbENhcHM7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBnZXRMYW5ndWFnZUNvZGUoR3N0
VGFnTGlzdCogdGFncywgQXRvbVN0cmluZyYgdmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBp
cGVsaW5lLmNwcAppbmRleCA4MDk4MjMwNmRkZmVhZGI5Njk2NDliZDk4ODBmYmI0MGJmNWEyNzFk
Li4zMTdjZWQzZDFjMDE0ZDdjNGNmNjUxZTEyMzc5MDc3MWFiOWY5OGJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVs
aW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
bXNlL0FwcGVuZFBpcGVsaW5lLmNwcApAQCAtMzg5LDEzICszODksMTMgQEAgdm9pZCBBcHBlbmRQ
aXBlbGluZTo6cGFyc2VEZW11eGVyU3JjUGFkQ2FwcyhHc3RDYXBzKiBkZW11eGVyU3JjUGFkQ2Fw
cykKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgbV9kZW11eGVyU3JjUGFkQ2Fw
cyA9IGFkb3B0R1JlZihkZW11eGVyU3JjUGFkQ2Fwcyk7Ci0gICAgbV9zdHJlYW1UeXBlID0gV2Vi
Q29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpVbmtub3duOworICAgIG1fc3Ry
ZWFtVHlwZSA9IE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VW5rbm93bjsKIAogICAg
IGNvbnN0IGNoYXIqIG9yaWdpbmFsTWVkaWFUeXBlID0gY2Fwc01lZGlhVHlwZShtX2RlbXV4ZXJT
cmNQYWRDYXBzLmdldCgpKTsKICAgICBhdXRvJiBnc3RSZWdpc3RyeVNjYW5uZXIgPSBHU3RyZWFt
ZXJSZWdpc3RyeVNjYW5uZXJNU0U6OnNpbmdsZXRvbigpOwogICAgIGlmICghZ3N0UmVnaXN0cnlT
Y2FubmVyLmlzQ29kZWNTdXBwb3J0ZWQoR1N0cmVhbWVyUmVnaXN0cnlTY2FubmVyOjpDb25maWd1
cmF0aW9uOjpEZWNvZGluZywgb3JpZ2luYWxNZWRpYVR5cGUpKSB7CiAgICAgICAgICAgICBtX3By
ZXNlbnRhdGlvblNpemUgPSBXZWJDb3JlOjpGbG9hdFNpemUoKTsKLSAgICAgICAgICAgIG1fc3Ry
ZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6SW52YWxp
ZDsKKyAgICAgICAgICAgIG1fc3RyZWFtVHlwZSA9IE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJl
YW1lcjo6SW52YWxpZDsKICAgICB9IGVsc2UgaWYgKGRvQ2Fwc0hhdmVUeXBlKG1fZGVtdXhlclNy
Y1BhZENhcHMuZ2V0KCksIEdTVF9WSURFT19DQVBTX1RZUEVfUFJFRklYKSkgewogICAgICAgICBP
cHRpb25hbDxGbG9hdFNpemU+IHNpemUgPSBnZXRWaWRlb1Jlc29sdXRpb25Gcm9tQ2FwcyhtX2Rl
bXV4ZXJTcmNQYWRDYXBzLmdldCgpKTsKICAgICAgICAgaWYgKHNpemUuaGFzVmFsdWUoKSkKQEAg
LTQwMywxMyArNDAzLDEzIEBAIHZvaWQgQXBwZW5kUGlwZWxpbmU6OnBhcnNlRGVtdXhlclNyY1Bh
ZENhcHMoR3N0Q2FwcyogZGVtdXhlclNyY1BhZENhcHMpCiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIG1fcHJlc2VudGF0aW9uU2l6ZSA9IFdlYkNvcmU6OkZsb2F0U2l6ZSgpOwogCi0gICAgICAg
IG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6
VmlkZW87CisgICAgICAgIG1fc3RyZWFtVHlwZSA9IE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJl
YW1lcjo6VmlkZW87CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9wcmVzZW50YXRpb25TaXplID0g
V2ViQ29yZTo6RmxvYXRTaXplKCk7CiAgICAgICAgIGlmIChkb0NhcHNIYXZlVHlwZShtX2RlbXV4
ZXJTcmNQYWRDYXBzLmdldCgpLCBHU1RfQVVESU9fQ0FQU19UWVBFX1BSRUZJWCkpCi0gICAgICAg
ICAgICBtX3N0cmVhbVR5cGUgPSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFt
ZXI6OkF1ZGlvOworICAgICAgICAgICAgbV9zdHJlYW1UeXBlID0gTWVkaWFTb3VyY2VTdHJlYW1U
eXBlR1N0cmVhbWVyOjpBdWRpbzsKICAgICAgICAgZWxzZSBpZiAoZG9DYXBzSGF2ZVR5cGUobV9k
ZW11eGVyU3JjUGFkQ2Fwcy5nZXQoKSwgR1NUX1RFWFRfQ0FQU19UWVBFX1BSRUZJWCkpCi0gICAg
ICAgICAgICBtX3N0cmVhbVR5cGUgPSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3Ry
ZWFtZXI6OlRleHQ7CisgICAgICAgICAgICBtX3N0cmVhbVR5cGUgPSBNZWRpYVNvdXJjZVN0cmVh
bVR5cGVHU3RyZWFtZXI6OlRleHQ7CiAgICAgfQogfQogCkBAIC00MjYsMTggKzQyNiwyNCBAQCB2
b2lkIEFwcGVuZFBpcGVsaW5lOjphcHBzaW5rQ2Fwc0NoYW5nZWQoKQogICAgIGlmICghY2FwcykK
ICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gSWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IHRpbWUg
d2UncmUgcGFyc2luZyBhbiBpbml0aWFsaXphdGlvbiBzZWdtZW50LCBmYWlsIGlmIHRoZSB0cmFj
aworICAgIC8vIGhhcyBhIGRpZmZlcmVudCBjb2RlYyBvciB0eXBlIChlLmcuIGlmIHdlIHdlcmUg
cHJldmlvdXNseSBkZW11eGluZyBhbiBhdWRpbyBzdHJlYW0gYW5kCisgICAgLy8gc29tZW9uZSBh
cHBlbmRzIGEgdmlkZW8gc3RyZWFtKS4KKyAgICBpZiAobV9hcHBzaW5rQ2FwcyAmJiBzdHJjbXAo
Y2Fwc01lZGlhVHlwZShjYXBzLmdldCgpKSwgY2Fwc01lZGlhVHlwZShtX2FwcHNpbmtDYXBzLmdl
dCgpKSkpIHsKKyAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJV
c2VyIGFwcGVuZGVkIHRyYWNrIG1ldGFkYXRhIHdpdGggdHlwZSAnJXMnIGZvciBhIFNvdXJjZUJ1
ZmZlciBwcmV2aW91c2x5IGhhbmRsaW5nICclcycuIEVycm9yaW5nIG91dC4iLCBjYXBzTWVkaWFU
eXBlKGNhcHMuZ2V0KCkpLCBjYXBzTWVkaWFUeXBlKG1fYXBwc2lua0NhcHMuZ2V0KCkpKTsKKyAg
ICAgICAgbV9zb3VyY2VCdWZmZXJQcml2YXRlLmFwcGVuZFBhcnNpbmdGYWlsZWQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChkb0NhcHNIYXZlVHlwZShjYXBzLmdldCgpLCBH
U1RfVklERU9fQ0FQU19UWVBFX1BSRUZJWCkpIHsKICAgICAgICAgT3B0aW9uYWw8RmxvYXRTaXpl
PiBzaXplID0gZ2V0VmlkZW9SZXNvbHV0aW9uRnJvbUNhcHMoY2Fwcy5nZXQoKSk7CiAgICAgICAg
IGlmIChzaXplLmhhc1ZhbHVlKCkpCiAgICAgICAgICAgICBtX3ByZXNlbnRhdGlvblNpemUgPSBz
aXplLnZhbHVlKCk7CiAgICAgfQogCi0gICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlJ3JlIHJpZ2h0
IGFmdGVyIGEgbmV3IHRyYWNrIGhhcyBhcHBlYXJlZC4gT3RoZXJ3aXNlLCBpdCdzIGEgY2FwcyBj
aGFuZ2UgaW5zaWRlIHRoZSBzYW1lIHRyYWNrLgotICAgIGJvb2wgcHJldmlvdXNDYXBzV2VyZU51
bGwgPSAhbV9hcHBzaW5rQ2FwczsKLQogICAgIGlmIChtX2FwcHNpbmtDYXBzICE9IGNhcHMpIHsK
ICAgICAgICAgbV9hcHBzaW5rQ2FwcyA9IFdURk1vdmUoY2Fwcyk7Ci0gICAgICAgIG1fcGxheWVy
UHJpdmF0ZS0+dHJhY2tEZXRlY3RlZCgqdGhpcywgbV90cmFjaywgcHJldmlvdXNDYXBzV2VyZU51
bGwpOworICAgICAgICBtX3BsYXllclByaXZhdGUtPnRyYWNrRGV0ZWN0ZWQoKnRoaXMsIG1fdHJh
Y2spOwogICAgIH0KIH0KIApAQCAtNzA5LDkgKzcxNSw5IEBAIHZvaWQgQXBwZW5kUGlwZWxpbmU6
OmNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rRnJvbVN0cmVhbWluZ1RocmVhZChHc3RQYWQq
IGRlCiAgICAgfQogCiAgICAgLy8gTXVzdCBiZSBkb25lIGluIHRoZSB0aHJlYWQgd2Ugd2VyZSBj
YWxsZWQgZnJvbSAodXN1YWxseSBzdHJlYW1pbmcgdGhyZWFkKS4KLSAgICBib29sIGlzRGF0YSA9
IChtX3N0cmVhbVR5cGUgPT0gV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVy
OjpBdWRpbykKLSAgICAgICAgfHwgKG1fc3RyZWFtVHlwZSA9PSBXZWJDb3JlOjpNZWRpYVNvdXJj
ZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlZpZGVvKQotICAgICAgICB8fCAobV9zdHJlYW1UeXBlID09
IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VGV4dCk7CisgICAgYm9v
bCBpc0RhdGEgPSAobV9zdHJlYW1UeXBlID09IE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1l
cjo6QXVkaW8pCisgICAgICAgIHx8IChtX3N0cmVhbVR5cGUgPT0gTWVkaWFTb3VyY2VTdHJlYW1U
eXBlR1N0cmVhbWVyOjpWaWRlbykKKyAgICAgICAgfHwgKG1fc3RyZWFtVHlwZSA9PSBNZWRpYVNv
dXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlRleHQpOwogCiAgICAgaWYgKGlzRGF0YSkgewogICAg
ICAgICBHUmVmUHRyPEdzdE9iamVjdD4gcGFyZW50ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dl
dF9wYXJlbnQobV9hcHBzaW5rLmdldCgpKSk7CkBAIC03NTgsNiArNzY0LDggQEAgdm9pZCBBcHBl
bmRQaXBlbGluZTo6Y29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmsoR3N0UGFkKiBkZW11eGVy
U3JjUGFkKQogICAgIC8vIE9ubHkgb25lIHN0cmVhbSBwZXIgZGVtdXhlciBpcyBzdXBwb3J0ZWQu
CiAgICAgQVNTRVJUKCFnc3RfcGFkX2lzX2xpbmtlZChzaW5rU2lua1BhZC5nZXQoKSkpOwogCisg
ICAgLy8gQXMgaXQgaXMgbm93LCByZXNldFBhcnNlclN0YXRlKCkgd2lsbCBjYXVzZSB0aGUgcGFk
cyB0byBiZSBkaXNjb25uZWN0ZWQsIHNvIHRoZXkgd2lsbCBsYXRlciBiZSByZS1hZGRlZCBvbiB0
aGUgbmV4dCBpbml0aWFsaXphdGlvbiBzZWdtZW50LgorCiAgICAgR1JlZlB0cjxHc3RDYXBzPiBj
YXBzID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyhHU1RfUEFEKGRlbXV4ZXJT
cmNQYWQpKSk7CiAKICNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCkBAIC03NjksMTcgKzc3
NywyNyBAQCB2b2lkIEFwcGVuZFBpcGVsaW5lOjpjb25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2lu
ayhHc3RQYWQqIGRlbXV4ZXJTcmNQYWQpCiAKICAgICBwYXJzZURlbXV4ZXJTcmNQYWRDYXBzKGdz
dF9jYXBzX3JlZihjYXBzLmdldCgpKSk7CiAKKyAgICBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVy
KiBnc3RyZWFtZXJUcmFjazsKICAgICBzd2l0Y2ggKG1fc3RyZWFtVHlwZSkgewotICAgIGNhc2Ug
V2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpBdWRpbzoKLSAgICAgICAg
bV90cmFjayA9IFdlYkNvcmU6OkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobWFr
ZVdlYWtQdHIoKm1fcGxheWVyUHJpdmF0ZSksIGlkKCksIHNpbmtTaW5rUGFkLmdldCgpKTsKKyAg
ICBjYXNlIE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6QXVkaW86IHsKKyAgICAgICAg
YXV0byBzcGVjaWZpY1RyYWNrID0gV2ViQ29yZTo6QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6
OmNyZWF0ZShtYWtlV2Vha1B0cigqbV9wbGF5ZXJQcml2YXRlKSwgaWQoKSwgc2lua1NpbmtQYWQu
Z2V0KCkpOworICAgICAgICBnc3RyZWFtZXJUcmFjayA9IHNwZWNpZmljVHJhY2sucHRyKCk7Cisg
ICAgICAgIG1fdHJhY2sgPSBtYWtlUmVmUHRyKHN0YXRpY19jYXN0PFRyYWNrUHJpdmF0ZUJhc2Uq
PihzcGVjaWZpY1RyYWNrLnB0cigpKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViQ29y
ZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpWaWRlbzoKLSAgICAgICAgbV90cmFj
ayA9IFdlYkNvcmU6OlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobWFrZVdlYWtQ
dHIoKm1fcGxheWVyUHJpdmF0ZSksIGlkKCksIHNpbmtTaW5rUGFkLmdldCgpKTsKKyAgICB9Cisg
ICAgY2FzZSBNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlZpZGVvOiB7CisgICAgICAg
IGF1dG8gc3BlY2lmaWNUcmFjayA9IFdlYkNvcmU6OlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVy
OjpjcmVhdGUobWFrZVdlYWtQdHIoKm1fcGxheWVyUHJpdmF0ZSksIGlkKCksIHNpbmtTaW5rUGFk
LmdldCgpKTsKKyAgICAgICAgZ3N0cmVhbWVyVHJhY2sgPSBzcGVjaWZpY1RyYWNrLnB0cigpOwor
ICAgICAgICBtX3RyYWNrID0gbWFrZVJlZlB0cihzdGF0aWNfY2FzdDxUcmFja1ByaXZhdGVCYXNl
Kj4oc3BlY2lmaWNUcmFjay5wdHIoKSkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYkNv
cmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VGV4dDoKLSAgICAgICAgbV90cmFj
ayA9IFdlYkNvcmU6OkluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShpZCgp
LCBzaW5rU2lua1BhZC5nZXQoKSk7CisgICAgfQorICAgIGNhc2UgTWVkaWFTb3VyY2VTdHJlYW1U
eXBlR1N0cmVhbWVyOjpUZXh0OiB7CisgICAgICAgIGF1dG8gc3BlY2lmaWNUcmFjayA9IFdlYkNv
cmU6OkluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShpZCgpLCBzaW5rU2lu
a1BhZC5nZXQoKSk7CisgICAgICAgIGdzdHJlYW1lclRyYWNrID0gc3BlY2lmaWNUcmFjay5wdHIo
KTsKKyAgICAgICAgbV90cmFjayA9IG1ha2VSZWZQdHIoc3RhdGljX2Nhc3Q8VHJhY2tQcml2YXRl
QmFzZSo+KHNwZWNpZmljVHJhY2sucHRyKCkpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBX
ZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OkludmFsaWQ6CisgICAgfQor
ICAgIGNhc2UgTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpJbnZhbGlkOgogICAgICAg
ICBHU1RfV0FSTklOR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlVuc3VwcG9ydGVkIHRyYWNr
IGNvZGVjOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcy5nZXQoKSk7CiAgICAgICAgIC8vIDMuNS43
IEluaXRpYWxpemF0aW9uIFNlZ21lbnQgUmVjZWl2ZWQKICAgICAgICAgLy8gNS4xLiBJZiB0aGUg
aW5pdGlhbGl6YXRpb24gc2VnbWVudCBjb250YWlucyB0cmFja3Mgd2l0aCBjb2RlY3MgdGhlIHVz
ZXIgYWdlbnQgZG9lcyBub3Qgc3VwcG9ydCwgdGhlbiBydW4gdGhlCkBAIC03OTEsMTEgKzgwOSwx
MiBAQCB2b2lkIEFwcGVuZFBpcGVsaW5lOjpjb25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2luayhH
c3RQYWQqIGRlbXV4ZXJTcmNQYWQpCiAgICAgICAgIHJldHVybjsKICAgICBkZWZhdWx0OgogICAg
ICAgICBHU1RfV0FSTklOR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlBhZCBoYXMgdW5rbm93
biB0cmFjayB0eXBlLCBpZ25vcmluZzogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMuZ2V0KCkpOwot
ICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBnc3RyZWFtZXJUcmFj
ay0+c2V0SW5pdGlhbENhcHMoR1JlZlB0cihjYXBzKSk7CiAKICAgICBtX2FwcHNpbmtDYXBzID0g
V1RGTW92ZShjYXBzKTsKLSAgICBtX3BsYXllclByaXZhdGUtPnRyYWNrRGV0ZWN0ZWQoKnRoaXMs
IG1fdHJhY2ssIHRydWUpOworICAgIG1fcGxheWVyUHJpdmF0ZS0+dHJhY2tEZXRlY3RlZCgqdGhp
cywgbV90cmFjayk7CiB9CiAKIHZvaWQgQXBwZW5kUGlwZWxpbmU6OmRpc2Nvbm5lY3REZW11eGVy
U3JjUGFkRnJvbUFwcHNpbmtGcm9tQW55VGhyZWFkKEdzdFBhZCogZGVtdXhlclNyY1BhZCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2Uv
QXBwZW5kUGlwZWxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuaAppbmRleCAxMTYxODZlM2NkNmEyNzNmMzNlYzI0Y2M5
N2Q4YjJmZTliYmI2NTdmLi42ODczZmI3NTY2MWY0NzQxZjEzYmMxMGIxOTY2MzgzMWUxNDVhZTQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
bXNlL0FwcGVuZFBpcGVsaW5lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5oCkBAIC01Nyw2ICs1Nyw5IEBAIHB1Ymxp
YzoKICAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UqIHBsYXllclByaXZhdGUoKSB7
IHJldHVybiBtX3BsYXllclByaXZhdGU7IH0KIAogcHJpdmF0ZToKKyAgICAvLyBTaW1pbGFyIHRv
IFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZSwgYnV0IHdpdGggYSBuZXcgdmFs
dWUgKEludmFsaWQpIGZvciB3aGVuIHRoZSBjb2RlYyBpcworICAgIC8vIG5vdCBzdXBwb3J0ZWQg
b24gdGhpcyBzeXN0ZW0sIHdoaWNoIHNob3VsZCByZXN1bHQgaW4gUGFyc2luZ0ZhaWxlZCBlcnJv
ciBiZWluZyB0aHJvd24gaW4gU291cmNlQnVmZmVyLgorICAgIGVudW0gTWVkaWFTb3VyY2VTdHJl
YW1UeXBlR1N0cmVhbWVyIHsgQXVkaW8sIFZpZGVvLCBUZXh0LCBVbmtub3duLCBJbnZhbGlkIH07
CiAKICAgICB2b2lkIGhhbmRsZUVycm9yU3luY01lc3NhZ2UoR3N0TWVzc2FnZSopOwogICAgIHZv
aWQgaGFuZGxlTmVlZENvbnRleHRTeW5jTWVzc2FnZShHc3RNZXNzYWdlKik7CkBAIC04MSw3ICs4
NCw2IEBAIHByaXZhdGU6CiAgICAgR3N0RWxlbWVudCogYXBwc3JjKCkgeyByZXR1cm4gbV9hcHBz
cmMuZ2V0KCk7IH0KICAgICBHc3RFbGVtZW50KiBhcHBzaW5rKCkgeyByZXR1cm4gbV9hcHBzaW5r
LmdldCgpOyB9CiAgICAgR3N0Q2FwcyogZGVtdXhlclNyY1BhZENhcHMoKSB7IHJldHVybiBtX2Rl
bXV4ZXJTcmNQYWRDYXBzLmdldCgpOyB9Ci0gICAgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1U
eXBlR1N0cmVhbWVyIHN0cmVhbVR5cGUoKSB7IHJldHVybiBtX3N0cmVhbVR5cGU7IH0KIAogICAg
IHZvaWQgZGlzY29ubmVjdERlbXV4ZXJTcmNQYWRGcm9tQXBwc2lua0Zyb21BbnlUaHJlYWQoR3N0
UGFkKik7CiAgICAgdm9pZCBjb25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2lua0Zyb21TdHJlYW1p
bmdUaHJlYWQoR3N0UGFkKik7CkBAIC0xNDIsNyArMTQ0LDcgQEAgcHJpdmF0ZToKICAgICBzdHJ1
Y3QgUGFkUHJvYmVJbmZvcm1hdGlvbiBtX2FwcHNpbmtQYWRFdmVudFByb2JlSW5mb3JtYXRpb247
CiAjZW5kaWYKIAotICAgIFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lciBt
X3N0cmVhbVR5cGU7CisgICAgTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyIG1fc3RyZWFt
VHlwZTsKICAgICBSZWZQdHI8V2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZT4gbV90cmFjazsKIAog
ICAgIEFib3J0YWJsZVRhc2tRdWV1ZSBtX3Rhc2tRdWV1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNwcAppbmRleCA1NDQ1OTZh
ZmZhMDQ0Y2MwY2VhY2Q4NTQxNWMwYjk1Yjc3ODg2OWI1Li44MmNhNWYxN2EwOGJhZjY0Y2U4MjY3
MzU0MzQxOTcxY2RkNWVjMGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwCkBAIC0zLDkgKzMsOSBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA3IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPgotICogQ29weXJp
Z2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzLCAyMDE2LCAyMDE3IElnYWxpYSBT
LkwKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMywgMjAxNiwg
MjAxNywgMjAxOCwgMjAxOSwgMjAyMCBJZ2FsaWEgUy5MCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
U2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNSwgMjAxNiwgMjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LCAyMDE2LCAyMDE3LCAyMDE4LCAyMDE5LCAyMDIwLCAyMDIxIE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM2LDEwICszNiwxMSBAQAog
I2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJNZWRpYURlc2NyaXB0aW9u
LmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKLSNpbmNsdWRlICJQbGF5YmFja1BpcGVsaW5l
LmgiCisjaW5jbHVkZSAiTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lci5oIgogI2luY2x1ZGUgIlNv
dXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCiAj
aW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJXZWJLaXRN
ZWRpYVNvdXJjZUdTdHJlYW1lci5oIgogCiAjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+
CiAjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzcmMuaD4KQEAgLTExMiwxMyArMTEzLDcgQEAgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
TVNFKCkKIHsKICAgICBHU1RfVFJBQ0UoImRlc3Ryb3lpbmcgdGhlIHBsYXllciAoJXApIiwgdGhp
cyk7CiAKLSAgICBpZiAobV9zb3VyY2UpIHsKLSAgICAgICAgd2ViS2l0TWVkaWFTcmNTZXRNZWRp
YVBsYXllclByaXZhdGUoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSksIG51bGxwdHIp
OwotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEobV9zb3VyY2Uu
Z2V0KCksIHRoaXMpOwotICAgIH0KLQotICAgIGlmIChtX3BsYXliYWNrUGlwZWxpbmUpCi0gICAg
ICAgIG1fcGxheWJhY2tQaXBlbGluZS0+c2V0V2ViS2l0TWVkaWFTcmMobnVsbHB0cik7CisgICAg
bV9zb3VyY2UuY2xlYXIoKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJN
U0U6OmxvYWQoY29uc3QgU3RyaW5nJikKQEAgLTEzNCwxOSArMTI5LDIzIEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpsb2FkKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBDb250
ZW50VHlwZSYsIE1lCiAgICAgR1NUX0RFQlVHKCJMb2FkaW5nICVzIiwgbXNlQmxvYlVSSS5hc2Np
aSgpLmRhdGEoKSk7CiAgICAgbV9tZWRpYVNvdXJjZSA9IG1lZGlhU291cmNlOwogCi0gICAgaWYg
KCFtX3BsYXliYWNrUGlwZWxpbmUpCi0gICAgICAgIG1fcGxheWJhY2tQaXBlbGluZSA9IFBsYXli
YWNrUGlwZWxpbmU6OmNyZWF0ZSgpOwotCiAgICAgbV9tZWRpYVNvdXJjZVByaXZhdGUgPSBNZWRp
YVNvdXJjZVByaXZhdGVHU3RyZWFtZXI6Om9wZW4oKm1fbWVkaWFTb3VyY2UuZ2V0KCksICp0aGlz
KTsKIAogICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZChtc2VCbG9iVVJJKTsK
IH0KIAordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnBsYXkoKQoreworICAg
IEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlBsYXkgcmVxdWVzdGVkIik7CisgICAgbV9p
c1BhdXNlZCA9IGZhbHNlOworICAgIHVwZGF0ZVN0YXRlcygpOworfQorCiB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6cGF1c2UoKQogewotICAgIC8vIEZJWE1FOiBTaG91bGQg
bm90IG5lZWQgZGlyZWN0IGFjY2VzcyB0byB0aGlzIG1lbWJlci4gVGhpcyBvdmVycmlkZSBpcyBw
cm9iYWJseSBub3QgbmVlZGVkLgorICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlBh
dXNlIHJlcXVlc3RlZCIpOwogICAgIG1faXNQYXVzZWQgPSB0cnVlOwotICAgIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6cGF1c2UoKTsKKyAgICB1cGRhdGVTdGF0ZXMoKTsKIH0KIAogTWVk
aWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZHVyYXRpb25NZWRpYVRpbWUo
KSBjb25zdApAQCAtMTU5LDMxMyArMTU4LDEwMiBAQCBNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFOjpkdXJhdGlvbk1lZGlhVGltZSgpIGNvbnN0CiAKIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVrKGNvbnN0IE1lZGlhVGltZSYgdGltZSkKIHsK
LSAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwgbV9kaWRFcnJvck9jY3VyKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJbU2Vla10gc2Vl
ayBhdHRlbXB0IHRvICVzIHNlY3MiLCB0b1N0cmluZyh0aW1lKS51dGY4KCkuZGF0YSgpKTsKLQot
ICAgIC8vIEF2b2lkIHVzZWxlc3Mgc2Vla2luZy4KLSAgICBNZWRpYVRpbWUgY3VycmVudCA9IGN1
cnJlbnRNZWRpYVRpbWUoKTsKLSAgICBpZiAodGltZSA9PSBjdXJyZW50KSB7Ci0gICAgICAgIGlm
ICghbV9pc1NlZWtpbmcpCi0gICAgICAgICAgICB0aW1lQ2hhbmdlZCgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKG1faXNMaXZlU3RyZWFtKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pc1NlZWtpbmcgJiYgbV9pc1NlZWtQZW5kaW5nKSB7Ci0gICAgICAgIG1fc2Vl
a1RpbWUgPSB0aW1lOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgR1NUX0RFQlVHX09C
SkVDVChwaXBlbGluZSgpLCAiU2Vla2luZyBmcm9tICVzIHRvICVzIHNlY29uZHMiLCB0b1N0cmlu
ZyhjdXJyZW50KS51dGY4KCkuZGF0YSgpLCB0b1N0cmluZyh0aW1lKS51dGY4KCkuZGF0YSgpKTsK
LQotICAgIE1lZGlhVGltZSBwcmV2aW91c1NlZWtUaW1lID0gbV9zZWVrVGltZTsKLSAgICBtX3Nl
ZWtUaW1lID0gdGltZTsKLQotICAgIGlmICghZG9TZWVrKG1fc2Vla1RpbWUsIG1fcGxheWJhY2tS
YXRlLCBzdGF0aWNfY2FzdDxHc3RTZWVrRmxhZ3M+KEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1Rf
U0VFS19GTEFHX0FDQ1VSQVRFKSkpIHsKLSAgICAgICAgbV9zZWVrVGltZSA9IHByZXZpb3VzU2Vl
a1RpbWU7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChwaXBlbGluZSgpLCAiU2Vla2luZyB0
byAlcyBmYWlsZWQiLCB0b1N0cmluZyh0aW1lKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1faXNFbmRSZWFjaGVkID0gZmFsc2U7Ci0gICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAibV9pc1NlZWtpbmc9JXMsIG1fc2Vla1RpbWU9JXMiLCBib29s
Rm9yUHJpbnRpbmcobV9pc1NlZWtpbmcpLCB0b1N0cmluZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0
YSgpKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmNvbmZpZ3Vy
ZVBsYXlTaW5rKCkKLXsKLSAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNvbmZpZ3Vy
ZVBsYXlTaW5rKCk7Ci0KLSAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IHBsYXlzaW5rID0gYWRvcHRH
UmVmKGdzdF9iaW5fZ2V0X2J5X25hbWUoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgInBsYXlz
aW5rIikpOwotICAgIGlmIChwbGF5c2luaykgewotICAgICAgICAvLyBUaGUgZGVmYXVsdCB2YWx1
ZSAoMCkgbWVhbnMgInNlbmQgZXZlbnRzIHRvIGFsbCB0aGUgc2lua3MiLCBpbnN0ZWFkCi0gICAg
ICAgIC8vIG9mICJvbmx5IHRvIHRoZSBmaXJzdCB0aGF0IHJldHVybnMgdHJ1ZSIuIFRoaXMgaXMg
bmVlZGVkIGZvciBNU0Ugc2Vlay4KLSAgICAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHBsYXlz
aW5rLmdldCgpKSwgInNlbmQtZXZlbnQtbW9kZSIsIDAsIG51bGxwdHIpOwotICAgIH0KKyAgICBH
U1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJSZXF1ZXN0ZWQgc2VlayB0byAlcyIsIHRpbWUu
dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBkb1NlZWsodGltZSwgbV9wbGF5YmFja1Jh
dGUsIEdTVF9TRUVLX0ZMQUdfRkxVU0gpOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRTo6Y2hhbmdlUGlwZWxpbmVTdGF0ZShHc3RTdGF0ZSBuZXdTdGF0ZSkKK2Jvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkb1NlZWsoY29uc3QgTWVkaWFUaW1lJiBw
b3NpdGlvbiwgZmxvYXQgcmF0ZSwgR3N0U2Vla0ZsYWdzIHNlZWtGbGFncykKIHsKLSAgICBpZiAo
c2Vla2luZygpKSB7Ci0gICAgICAgIEdTVF9ERUJVRygiUmVqZWN0ZWQgc3RhdGUgY2hhbmdlIHRv
ICVzIHdoaWxlIHNlZWtpbmciLAotICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25h
bWUobmV3U3RhdGUpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIC8vIFRoaXMg
bWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvdXRzaWRlIG9mIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRSBieSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFJhdGUoKS4K
IAotICAgIHJldHVybiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNoYW5nZVBpcGVsaW5l
U3RhdGUobmV3U3RhdGUpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RTo6bm90aWZ5U2Vla05lZWRzRGF0YUZvclRpbWUoY29uc3QgTWVkaWFUaW1lJiBzZWVrVGltZSkK
LXsKLSAgICAvLyBSZWVucXVldWUgc2FtcGxlcyBuZWVkZWQgdG8gcmVzdW1lIHBsYXliYWNrIGlu
IHRoZSBuZXcgcG9zaXRpb24uCi0gICAgbV9tZWRpYVNvdXJjZS0+c2Vla1RvVGltZShzZWVrVGlt
ZSk7CisgICAgLy8gTm90ZTogQW4gaW1wb3J0YW50IGRpZmZlcmVuY2UgYmV0d2VlbiBzZWVrIHdp
dGggV2ViS2l0TWVkaWFTcmMgYW5kIHJlZ3VsYXIgcGxheWJhY2sgaXMgdGhhdCBzZWVraW5nIGJl
Zm9yZQorICAgIC8vIHByZS1yb2xsIChlLmcuIHRvIHN0YXJ0IHBsYXliYWNrIGF0IGEgbm9uLXpl
cm8gcG9zaXRpb24pIGlzIHN1cHBvcnRlZCBpbiBXZWJLaXRNZWRpYVNyYyBidXQgbm90IGluIHJl
Z3VsYXIKKyAgICAvLyBwbGF5YmFjay4gVGhpcyBpcyByZWxldmFudCBpbiBNU0UgYmVjYXVzZSBw
cmUtcm9sbCBtYXkgbmV2ZXIgb2NjdXIgaWYgdGhlIEpTIGNvZGUgbmV2ZXIgYXBwZW5kcyBhIHJh
bmdlIHN0YXJ0aW5nCisgICAgLy8gYXQgemVybywgY3JlYXRpbmcgYSBjaGlja2VuIGFuZCBlZ2cg
cHJvYmxlbS4KIAotICAgIEdTVF9ERUJVRygiTVNFIHNlZWsgdG8gJXMgZmluaXNoZWQiLCB0b1N0
cmluZyhzZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7CisgICAgLy8gR1N0cmVhbWVyIGRvZXNuJ3Qg
c3VwcG9ydCB6ZXJvIGFzIGEgdmFsaWQgcGxheWJhY2sgcmF0ZS4gSW5zdGVhZCwgdGhhdCBpcyBp
bXBsZW1lbnRlZCBpbiBXZWJLaXQgYnkgcGF1c2luZworICAgIC8vIHRoZSBwaXBlbGluZS4KKyAg
ICBpZiAocmF0ZSA8PSAwKQorICAgICAgICByYXRlID0gMS4wOwogCi0gICAgaWYgKCFtX2dzdFNl
ZWtDb21wbGV0ZWQpIHsKLSAgICAgICAgbV9nc3RTZWVrQ29tcGxldGVkID0gdHJ1ZTsKLSAgICAg
ICAgbWF5YmVGaW5pc2hTZWVrKCk7Ci0gICAgfQotfQotCi1zdGF0aWMgYm9vbCBjaGVja1Nob3Vs
ZERlbGF5U2VlayhHc3RTdGF0ZUNoYW5nZVJldHVybiBnZXRTdGF0ZVJlc3VsdCwgR3N0U3RhdGUg
Y3VycmVudFN0YXRlLCBHc3RTdGF0ZSBuZXdTdGF0ZSkKLXsKLSAgICBpZiAoZ2V0U3RhdGVSZXN1
bHQgIT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChHU1RfU1RBVEVfVFJBTlNJVElPTihjdXJyZW50U3RhdGUsIG5ld1N0YXRlKSA9PSBHU1Rf
U1RBVEVfQ0hBTkdFX1BMQVlJTkdfVE9fUEFVU0VEKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUkVBRFkgJiYgbmV3U3RhdGUgPj0gR1NU
X1NUQVRFX1BBVVNFRCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZG9TZWVrKGNvbnN0IE1l
ZGlhVGltZSYgcG9zaXRpb24sIGZsb2F0IHJhdGUsIEdzdFNlZWtGbGFncyBzZWVrVHlwZSkKLXsK
LSAgICAvLyBGSVhNRTogTWFrZSBhIGNvcHkgaGVyZSBiZWNhdXNlIGluIHNvbWUgY2FzZXMgYmVs
b3cgaXQgaXMgbW9kaWZpZWQuIFRoaXMKLSAgICAvLyBzb3VuZHMgbGlrZSBhIGJhZCBpZGVhIGFu
ZCBzaG91bGQgYmUgaW52ZXN0aWdhdGVkIGZ1cnRoZXIuCi0gICAgTWVkaWFUaW1lIHNlZWtUaW1l
ID0gcG9zaXRpb247Ci0KLSAgICAvLyBBbHdheXMgbW92ZSB0byBzZWVraW5nIHN0YXRlIHRvIHJl
cG9ydCBjb3JyZWN0ICdjdXJyZW50VGltZScgd2hpbGUgcGVuZGluZyBmb3IgYWN0dWFsIHNlZWsg
dG8gY29tcGxldGUuCisgICAgbV9zZWVrVGltZSA9IHBvc2l0aW9uOwogICAgIG1faXNTZWVraW5n
ID0gdHJ1ZTsKKyAgICBtX2lzV2FpdGluZ0ZvclByZXJvbGwgPSB0cnVlOworICAgIG1faXNFbmRS
ZWFjaGVkID0gZmFsc2U7CiAKLSAgICAvLyBDaGVjayBpZiBwbGF5YmFjayBwaXBlbGluZSBpcyBy
ZWFkeSBmb3Igc2Vlay4KLSAgICBHc3RTdGF0ZSBzdGF0ZSwgbmV3U3RhdGU7Ci0gICAgR3N0U3Rh
dGVDaGFuZ2VSZXR1cm4gZ2V0U3RhdGVSZXN1bHQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9w
aXBlbGluZS5nZXQoKSwgJnN0YXRlLCAmbmV3U3RhdGUsIDApOwotICAgIGlmIChnZXRTdGF0ZVJl
c3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUgfHwgZ2V0U3RhdGVSZXN1bHQgPT0gR1NU
X1NUQVRFX0NIQU5HRV9OT19QUkVST0xMKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlw
ZWxpbmUoKSwgIltTZWVrXSBjYW5ub3Qgc2VlaywgY3VycmVudCBzdGF0ZSBjaGFuZ2UgaXMgJXMi
LCBnc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF9uYW1lKGdldFN0YXRlUmVzdWx0
KSk7Ci0gICAgICAgIHdlYktpdE1lZGlhU3JjU2V0UmVhZHlGb3JTYW1wbGVzKFdFQktJVF9NRURJ
QV9TUkMobV9zb3VyY2UuZ2V0KCkpLCB0cnVlKTsKLSAgICAgICAgbV9pc1NlZWtpbmcgPSBmYWxz
ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgc2hvdWxkRGVsYXlT
ZWVrID0gY2hlY2tTaG91bGREZWxheVNlZWsoZ2V0U3RhdGVSZXN1bHQsIHN0YXRlLCBuZXdTdGF0
ZSk7Ci0gICAgaWYgKHNob3VsZERlbGF5U2VlayB8fCBtX2lzRW5kUmVhY2hlZCB8fCAhbV9nc3RT
ZWVrQ29tcGxldGVkKSB7Ci0gICAgICAgIENTdHJpbmcgcmVhc29uID0gIlVua25vd24gcmVhc29u
IjsKLSAgICAgICAgaWYgKHNob3VsZERlbGF5U2VlaykgewotICAgICAgICAgICAgcmVhc29uID0g
bWFrZVN0cmluZygiSW4gYXN5bmMgY2hhbmdlICIsCi0gICAgICAgICAgICAgICAgZ3N0X2VsZW1l
bnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpLCAiIC0tPiAiLAotICAgICAgICAgICAgICAgIGdzdF9l
bGVtZW50X3N0YXRlX2dldF9uYW1lKG5ld1N0YXRlKSkudXRmOCgpOwotICAgICAgICB9IGVsc2Ug
aWYgKHN0YXRlIDwgR1NUX1NUQVRFX1BBVVNFRCkKLSAgICAgICAgICAgIHJlYXNvbiA9ICJTdGF0
ZSBsZXNzIHRoYW4gUEFVU0VEIjsKLSAgICAgICAgZWxzZSBpZiAobV9pc0VuZFJlYWNoZWQpCi0g
ICAgICAgICAgICByZWFzb24gPSAiRW5kIHJlYWNoZWQiOwotICAgICAgICBlbHNlIGlmICghbV9n
c3RTZWVrQ29tcGxldGVkKQotICAgICAgICAgICAgcmVhc29uID0gIlByZXZpb3VzIHNlZWsgaXMg
bm90IGZpbmlzaGVkIHlldCI7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgp
LCAiW1NlZWtdIERlbGF5aW5nIHRoZSBzZWVrOiAlcyIsIHJlYXNvbi5kYXRhKCkpOwotCi0gICAg
ICAgIG1faXNTZWVrUGVuZGluZyA9IHRydWU7Ci0KLSAgICAgICAgaWYgKG1faXNFbmRSZWFjaGVk
KSB7Ci0gICAgICAgICAgICBHU1RfREVCVUcoIltTZWVrXSByZXNldCBwaXBlbGluZSIpOwotICAg
ICAgICAgICAgbV9zaG91bGRSZXNldFBpcGVsaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgIG1faXNT
ZWVraW5nID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIWNoYW5nZVBpcGVsaW5lU3RhdGUoR1NU
X1NUQVRFX1BBVVNFRCkpCi0gICAgICAgICAgICAgICAgbG9hZGluZ0ZhaWxlZChNZWRpYVBsYXll
cjo6TmV0d29ya1N0YXRlOjpFbXB0eSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgbV9pc1NlZWtpbmcgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1faXNT
ZWVraW5nOwotICAgIH0KLQotICAgIC8vIFN0b3AgYWNjZXB0aW5nIG5ldyBzYW1wbGVzIHVudGls
IGFjdHVhbCBzZWVrIGlzIGZpbmlzaGVkLgotICAgIHdlYktpdE1lZGlhU3JjU2V0UmVhZHlGb3JT
YW1wbGVzKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCBmYWxzZSk7Ci0KLSAgICAv
LyBDb3JyZWN0IHNlZWsgdGltZSBpZiBpdCBoZWxwcyB0byBmaXggYSBzbWFsbCBnYXAuCi0gICAg
aWYgKCFpc1RpbWVCdWZmZXJlZChzZWVrVGltZSkpIHsKLSAgICAgICAgLy8gTG9vayBpZiBhIG5l
YXIgZnV0dXJlIHRpbWUgKDwwLjEgc2VjLikgaXMgYnVmZmVyZWQgYW5kIGNoYW5nZSB0aGUgc2Vl
ayB0YXJnZXQgdGltZS4KLSAgICAgICAgaWYgKG1fbWVkaWFTb3VyY2UpIHsKLSAgICAgICAgICAg
IGNvbnN0IE1lZGlhVGltZSBtaW5pR2FwID0gTWVkaWFUaW1lKDEsIDEwKTsKLSAgICAgICAgICAg
IE1lZGlhVGltZSBuZWFyZXN0ID0gbV9tZWRpYVNvdXJjZS0+YnVmZmVyZWQoKS0+bmVhcmVzdChz
ZWVrVGltZSk7Ci0gICAgICAgICAgICBpZiAobmVhcmVzdC5pc1ZhbGlkKCkgJiYgbmVhcmVzdCA+
IHNlZWtUaW1lICYmIChuZWFyZXN0IC0gc2Vla1RpbWUpIDw9IG1pbmlHYXAgJiYgaXNUaW1lQnVm
ZmVyZWQobmVhcmVzdCArIG1pbmlHYXApKSB7Ci0gICAgICAgICAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChwaXBlbGluZSgpLCAiW1NlZWtdIENoYW5nZWQgdGhlIHNlZWsgdGFyZ2V0IHRpbWUgZnJv
bSAlcyB0byAlcywgYSBuZWFyIHBvaW50IGluIHRoZSBmdXR1cmUiLCB0b1N0cmluZyhzZWVrVGlt
ZSkudXRmOCgpLmRhdGEoKSwgdG9TdHJpbmcobmVhcmVzdCkudXRmOCgpLmRhdGEoKSk7Ci0gICAg
ICAgICAgICAgICAgc2Vla1RpbWUgPSBuZWFyZXN0OwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgaWYgTVNFIGhhcyBzYW1wbGVzIGZvciByZXF1ZXN0ZWQg
dGltZSBhbmQgZGVmZXIgYWN0dWFsIHNlZWsgaWYgbmVlZGVkLgotICAgIGlmICghaXNUaW1lQnVm
ZmVyZWQoc2Vla1RpbWUpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwg
IltTZWVrXSBEZWxheWluZyB0aGUgc2VlazogTVNFIGlzIG5vdCByZWFkeSIpOwotICAgICAgICBH
c3RTdGF0ZUNoYW5nZVJldHVybiBzZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X3NldF9zdGF0
ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgICAgICAgaWYgKHNldFN0
YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkgewotICAgICAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW1NlZWtdIENhbm5vdCBzZWVrLCBmYWlsZWQgdG8g
cGF1c2UgcGxheWJhY2sgcGlwZWxpbmUuIik7Ci0gICAgICAgICAgICB3ZWJLaXRNZWRpYVNyY1Nl
dFJlYWR5Rm9yU2FtcGxlcyhXRUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdldCgpKSwgdHJ1ZSk7
Ci0gICAgICAgICAgICBtX2lzU2Vla2luZyA9IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpSZWFk
eVN0YXRlOjpIYXZlTWV0YWRhdGE7Ci0gICAgICAgIG5vdGlmeVNlZWtOZWVkc0RhdGFGb3JUaW1l
KHNlZWtUaW1lKTsKLSAgICAgICAgQVNTRVJUKCFtX21zZVNlZWtDb21wbGV0ZWQpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBDb21wbGV0ZSBwcmV2aW91cyBNU0Ugc2Vl
ayBpZiBuZWVkZWQuCi0gICAgaWYgKCFtX21zZVNlZWtDb21wbGV0ZWQpIHsKLSAgICAgICAgbV9t
ZWRpYVNvdXJjZS0+bW9uaXRvclNvdXJjZUJ1ZmZlcnMoKTsKLSAgICAgICAgQVNTRVJUKG1fbXNl
U2Vla0NvbXBsZXRlZCk7Ci0gICAgICAgIC8vIE5vdGU6IHNlZWtDb21wbGV0ZWQgd2lsbCByZWN1
cnNpdmVseSBjYWxsIHVzLgotICAgICAgICByZXR1cm4gbV9pc1NlZWtpbmc7Ci0gICAgfQotCi0g
ICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiV2UgY2FuIHNlZWsgbm93Iik7Ci0KLSAg
ICBNZWRpYVRpbWUgc3RhcnRUaW1lID0gc2Vla1RpbWUsIGVuZFRpbWUgPSBNZWRpYVRpbWU6Omlu
dmFsaWRUaW1lKCk7Ci0KLSAgICBpZiAocmF0ZSA8IDApIHsKLSAgICAgICAgc3RhcnRUaW1lID0g
TWVkaWFUaW1lOjp6ZXJvVGltZSgpOwotICAgICAgICBlbmRUaW1lID0gc2Vla1RpbWU7Ci0gICAg
fQorICAgIC8vIEltcG9ydGFudDogSW4gb3JkZXIgdG8gZW5zdXJlIGNvcnJlY3QgcHJvcGFnYXRp
b24gd2hldGhlciBwcmUtcm9sbCBoYXMgaGFwcGVuZWQgb3Igbm90LCB3ZSBzZW5kIHRoZSBzZWVr
IGRpcmVjdGx5CisgICAgLy8gdG8gdGhlIHNvdXJjZSBlbGVtZW50LCByYXRoZXIgdGhhbiBsZXR0
aW5nIHBsYXliaW4gZG8gdGhlIHJvdXRpbmcuCisgICAgZ3N0X2VsZW1lbnRfc2VlayhtX3NvdXJj
ZS5nZXQoKSwgcmF0ZSwgR1NUX0ZPUk1BVF9USU1FLCBzZWVrRmxhZ3MsCisgICAgICAgIEdTVF9T
RUVLX1RZUEVfU0VULCB0b0dzdENsb2NrVGltZShtX3NlZWtUaW1lKSwgR1NUX1NFRUtfVFlQRV9O
T05FLCAwKTsKKyAgICBpbnZhbGlkYXRlQ2FjaGVkUG9zaXRpb24oKTsKIAotICAgIGlmICghcmF0
ZSkKLSAgICAgICAgcmF0ZSA9IDE7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCks
ICJBY3R1YWwgc2VlayB0byAlcywgZW5kIHRpbWU6ICAlcywgcmF0ZTogJWYiLCB0b1N0cmluZyhz
dGFydFRpbWUpLnV0ZjgoKS5kYXRhKCksIHRvU3RyaW5nKGVuZFRpbWUpLnV0ZjgoKS5kYXRhKCks
IHJhdGUpOwotCi0gICAgbV9nc3RTZWVrQ29tcGxldGVkID0gZmFsc2U7Ci0gICAgaWYgKHN0YXRl
IDwgR1NUX1NUQVRFX1BBVVNFRCkgewotICAgICAgICAvLyBTcGVjaWFsIGNhc2Ugb2YgaW5pdGlh
bCBzZWVrLiBXZSBzZXQgdGhlIHJpZ2h0IHNlZ21lbnQgaW5zdGVhZCBvZiBhIHNlZWsuCi0gICAg
ICAgIHdlYktpdE1lZGlhU3JjUHJlcGFyZUluaXRpYWxTZWVrKFdFQktJVF9NRURJQV9TUkMobV9z
b3VyY2UuZ2V0KCkpLCByYXRlLCBzdGFydFRpbWUsIGVuZFRpbWUpOwotICAgICAgICBub3RpZnlT
ZWVrTmVlZHNEYXRhRm9yVGltZShzZWVrVGltZSk7Ci0gICAgICAgIEdTVF9ERUJVRygiSW5pdGlh
bCBzZWVrIHN1Y2NlZWRlZCwgcmV0dXJuaW5nIHRydWUiKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICAvLyBUaGlzIHdpbGwgY2FsbCBub3RpZnlTZWVrTmVlZHNEYXRhKCkgYWZ0ZXIgc29tZSB0aW1l
IHRvIHRlbGwgdGhhdCB0aGUgcGlwZWxpbmUgaXMgcmVhZHkgZm9yIHNhbXBsZSBlbnF1ZXVpbmcu
Ci0gICAgICAgIHdlYktpdE1lZGlhU3JjUHJlcGFyZVNlZWsoV0VCS0lUX01FRElBX1NSQyhtX3Nv
dXJjZS5nZXQoKSksIHNlZWtUaW1lKTsKLQotICAgICAgICBpZiAoIWdzdF9lbGVtZW50X3NlZWso
bV9waXBlbGluZS5nZXQoKSwgcmF0ZSwgR1NUX0ZPUk1BVF9USU1FLCBzZWVrVHlwZSwgR1NUX1NF
RUtfVFlQRV9TRVQsIHRvR3N0Q2xvY2tUaW1lKHN0YXJ0VGltZSksIEdTVF9TRUVLX1RZUEVfU0VU
LCB0b0dzdENsb2NrVGltZShlbmRUaW1lKSkpIHsKLSAgICAgICAgICAgIHdlYktpdE1lZGlhU3Jj
U2V0UmVhZHlGb3JTYW1wbGVzKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCB0cnVl
KTsKLSAgICAgICAgICAgIG1faXNTZWVraW5nID0gZmFsc2U7Ci0gICAgICAgICAgICBtX2dzdFNl
ZWtDb21wbGV0ZWQgPSB0cnVlOwotICAgICAgICAgICAgR1NUX0RFQlVHKCJnc3RfZWxlbWVudF9z
ZWVrKCkgZmFpbGVkLCByZXR1cm5pbmcgZmFsc2UiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICAvLyBUaGUgc2FtcGxlcyB3aWxsIGJlIGVucXVldWVkIGlu
IG5vdGlmeVNlZWtOZWVkc0RhdGEoKS4KLSAgICAgICAgR1NUX0RFQlVHKCJnc3RfZWxlbWVudF9z
ZWVrKCkgc3VjY2VlZGVkLCByZXR1cm5pbmcgdHJ1ZSIpOwotICAgIH0KKyAgICAvLyBOb3RpZnkg
TWVkaWFTb3VyY2UgYW5kIGhhdmUgbmV3IGZyYW1lcyBlbnF1ZXVlZCAod2hlbiB0aGV5J3JlIGF2
YWlsYWJsZSkuCisgICAgbV9tZWRpYVNvdXJjZS0+c2Vla1RvVGltZShtX3NlZWtUaW1lKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6
Om1heWJlRmluaXNoU2VlaygpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6
c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBtZWRpYVNvdXJjZVJlYWR5U3Rh
dGUpCiB7Ci0gICAgaWYgKCFtX2lzU2Vla2luZyB8fCAhbV9tc2VTZWVrQ29tcGxldGVkIHx8ICFt
X2dzdFNlZWtDb21wbGV0ZWQpCisgICAgLy8gU29tZXRoaW5nIGltcG9ydGFudCB0byBiZWFyIGlu
IG1pbmQgaXMgdGhhdCB0aGUgcmVhZHlTdGF0ZSB3ZSBnZXQgaGVyZSBjb21lcyBmcm9tIE1lZGlh
U291cmNlLgorICAgIC8vIEZyb20gTWVkaWFTb3VyY2UgcGVyc3BlY3RpdmUsIGFzIGxvbmcgYXMg
dGhlIHNhbXBsZSBmb3IgY3VycmVudFRpbWUgZXhpc3RzIGluIHRoZSBzYW1wbGUgbWFwLCB3ZSBh
cmUgPj0gSGF2ZUN1cnJlbnREYXRhLgorICAgIC8vIFRoaXMgaXMgTk9UIHRydWUgZnJvbSB0aGUg
cGxheWVyIHBlcnNwZWN0aXZlIHRob3VnaCwgYmVjYXVzZSB0aGVyZSBuZWVkcyB0byBwYXNzIHNv
bWUgdGltZSBzaW5jZSB3ZSBoYXZlIHRoZSBmaXJzdCBmcmFtZQorICAgIC8vICg+PUhhdmVDdXJy
ZW50RGF0YSBmb3IgTWVkaWFTb3VyY2UpIGFuZCB3ZSBoYXZlIGRlY29kZWQgaXQgYW5kIHNlbnQg
aXQgdG8gdGhlIHNpbmsvY29tcG9zaXRvciAoPj1IYXZlQ3VycmVudERhdGEgaW4gSFRNTE1lZGlh
RWxlbWVudCkuCisgICAgLy8gVGhlIHdheSB3ZSBpbXBsZW1lbnQgdGhpcyBpcyBieSBrZWVwaW5n
IHRyYWNrIG9mIHRoZSBNZWRpYVNvdXJjZSByZWFkeVN0YXRlIGludGVybmFsbHkgaW4gbV9tZWRp
YVNvdXJjZVJlYWR5U3RhdGUgYnV0IG5vdAorICAgIC8vIHNwcmVhZGluZyBzdGF0ZXMgPj0gSGF2
ZUN1cnJlbnREYXRhIHRvIHRoZSBwbGF5ZXIgdW50aWwgcHJlcm9sbGVkLgorICAgIGlmIChtZWRp
YVNvdXJjZVJlYWR5U3RhdGUgPT0gbV9tZWRpYVNvdXJjZVJlYWR5U3RhdGUpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEdzdFN0YXRlIHN0YXRlLCBuZXdTdGF0ZTsKLSAgICBHc3RTdGF0ZUNoYW5n
ZVJldHVybiBnZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5l
LmdldCgpLCAmc3RhdGUsICZuZXdTdGF0ZSwgMCk7Ci0KLSAgICBpZiAoZ2V0U3RhdGVSZXN1bHQg
PT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQwotICAgICAgICAmJiAhKHN0YXRlID09IEdTVF9TVEFU
RV9QTEFZSU5HICYmIG5ld1N0YXRlID09IEdTVF9TVEFURV9QQVVTRUQpKSB7Ci0gICAgICAgIEdT
VF9ERUJVRygiW1NlZWtdIERlbGF5aW5nIHNlZWsgZmluaXNoIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgR1NUX0RFQlVHKCJNZWRpYVNvdXJjZSBjYWxsZWQgc2V0UmVhZHlTdGF0ZSgl
cCk6ICVzIC0+ICVzIEN1cnJlbnQgcGxheWVyIHN0YXRlOiAlcyBXYWl0aW5nIGZvciBwcmVyb2xs
OiAlcyIsIHRoaXMsIGR1bXBSZWFkeVN0YXRlKG1fbWVkaWFTb3VyY2VSZWFkeVN0YXRlKSwgZHVt
cFJlYWR5U3RhdGUobWVkaWFTb3VyY2VSZWFkeVN0YXRlKSwgZHVtcFJlYWR5U3RhdGUobV9yZWFk
eVN0YXRlKSwgYm9vbEZvclByaW50aW5nKG1faXNXYWl0aW5nRm9yUHJlcm9sbCkpOworICAgIG1f
bWVkaWFTb3VyY2VSZWFkeVN0YXRlID0gbWVkaWFTb3VyY2VSZWFkeVN0YXRlOwogCi0gICAgaWYg
KG1faXNTZWVrUGVuZGluZykgewotICAgICAgICBHU1RfREVCVUcoIltTZWVrXSBDb21taXR0aW5n
IHBlbmRpbmcgc2VlayB0byAlcyIsIHRvU3RyaW5nKG1fc2Vla1RpbWUpLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICBtX2lzU2Vla1BlbmRpbmcgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFkb1NlZWso
bV9zZWVrVGltZSwgbV9wbGF5YmFja1JhdGUsIHN0YXRpY19jYXN0PEdzdFNlZWtGbGFncz4oR1NU
X1NFRUtfRkxBR19GTFVTSCB8IEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEUpKSkgewotICAgICAgICAg
ICAgR1NUX1dBUk5JTkcoIltTZWVrXSBTZWVraW5nIHRvICVzIGZhaWxlZCIsIHRvU3RyaW5nKG1f
c2Vla1RpbWUpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgbV9jYWNoZWRQb3NpdGlvbiA9
IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgR1NUX0RFQlVHKCJbU2Vla10gU2Vla2VkIHRvICVzIiwgdG9TdHJpbmcobV9z
ZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICB3ZWJLaXRNZWRpYVNyY1NldFJlYWR5Rm9y
U2FtcGxlcyhXRUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdldCgpKSwgdHJ1ZSk7Ci0gICAgbV9p
c1NlZWtpbmcgPSBmYWxzZTsKLSAgICBtX2NhY2hlZFBvc2l0aW9uID0gTWVkaWFUaW1lOjppbnZh
bGlkVGltZSgpOwotICAgIC8vIFRoZSBwaXBlbGluZSBjYW4gc3RpbGwgaGF2ZSBhIHBlbmRpbmcg
c3RhdGUuIEluIHRoaXMgY2FzZSBhIHBvc2l0aW9uIHF1ZXJ5IHdpbGwgZmFpbC4KLSAgICAvLyBS
aWdodCBub3cgd2UgY2FuIHVzZSBtX3NlZWtUaW1lIGFzIGEgZmFsbGJhY2suCi0gICAgbV9jYW5G
YWxsQmFja1RvTGFzdEZpbmlzaGVkU2Vla1Bvc2l0aW9uID0gdHJ1ZTsKLSAgICB0aW1lQ2hhbmdl
ZCgpOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2Vla2luZygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faXNTZWVraW5nOworICAgIGlmIChtZWRpYVNvdXJjZVJl
YWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZTo6SGF2ZUN1cnJlbnREYXRhIHx8ICFt
X2lzV2FpdGluZ0ZvclByZXJvbGwpCisgICAgICAgIHByb3BhZ2F0ZVJlYWR5U3RhdGVUb1BsYXll
cigpOwogfQogCi0vLyBGSVhNRTogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyIG1hbmFnZXMg
dGhlIFJlYWR5U3RhdGUgb24gaXRzIG93bi4gV2Ugc2hvdWxkbid0IGNoYW5nZSBpdCBtYW51YWxs
eS4KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZXRSZWFkeVN0YXRlKE1l
ZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6cHJvcGFnYXRlUmVhZHlTdGF0ZVRvUGxheWVyKCkKIHsKLSAgICBpZiAo
cmVhZHlTdGF0ZSA9PSBtX3JlYWR5U3RhdGUpCisgICAgQVNTRVJUKG1fbWVkaWFTb3VyY2VSZWFk
eVN0YXRlIDwgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGU6OkhhdmVDdXJyZW50RGF0YSB8fCAhbV9p
c1dhaXRpbmdGb3JQcmVyb2xsKTsKKyAgICBpZiAobV9yZWFkeVN0YXRlID09IG1fbWVkaWFTb3Vy
Y2VSZWFkeVN0YXRlKQogICAgICAgICByZXR1cm47CisgICAgR1NUX0RFQlVHKCJQcm9wYWdhdGlu
ZyBNZWRpYVNvdXJjZSByZWFkeVN0YXRlICVzIHRvIHBsYXllciByZWFkeSBzdGF0ZSAoY3VycmVu
dGx5ICVzKSIsIGR1bXBSZWFkeVN0YXRlKG1fbWVkaWFTb3VyY2VSZWFkeVN0YXRlKSwgZHVtcFJl
YWR5U3RhdGUobV9yZWFkeVN0YXRlKSk7CiAKLSAgICBpZiAoc2Vla2luZygpKSB7Ci0gICAgICAg
IEdTVF9ERUJVRygiU2tpcCByZWFkeSBzdGF0ZSBjaGFuZ2UoJXMgLT4gJXMpIGR1ZSB0byBzZWVr
XG4iLCBkdW1wUmVhZHlTdGF0ZShtX3JlYWR5U3RhdGUpLCBkdW1wUmVhZHlTdGF0ZShyZWFkeVN0
YXRlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHU1RfREVCVUcoIlJlYWR5IFN0
YXRlIENoYW5nZWQgbWFudWFsbHkgZnJvbSAldSB0byAldSIsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihtX3JlYWR5U3RhdGUpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVhZHlTdGF0ZSkpOwotICAg
IE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG9sZFJlYWR5U3RhdGUgPSBtX3JlYWR5U3RhdGU7Ci0g
ICAgbV9yZWFkeVN0YXRlID0gcmVhZHlTdGF0ZTsKLSAgICBHU1RfREVCVUcoIm1fcmVhZHlTdGF0
ZTogJXMgLT4gJXMiLCBkdW1wUmVhZHlTdGF0ZShvbGRSZWFkeVN0YXRlKSwgZHVtcFJlYWR5U3Rh
dGUobV9yZWFkeVN0YXRlKSk7Ci0KLSAgICBpZiAob2xkUmVhZHlTdGF0ZSA8IE1lZGlhUGxheWVy
OjpSZWFkeVN0YXRlOjpIYXZlQ3VycmVudERhdGEgJiYgbV9yZWFkeVN0YXRlID49IE1lZGlhUGxh
eWVyOjpSZWFkeVN0YXRlOjpIYXZlQ3VycmVudERhdGEpIHsKLSAgICAgICAgR1NUX0RFQlVHKCJb
U2Vla10gUmVwb3J0aW5nIGxvYWQgc3RhdGUgY2hhbmdlZCB0byB0cmlnZ2VyIHNlZWsgY29udGlu
dWF0aW9uIik7Ci0gICAgICAgIGxvYWRTdGF0ZUNoYW5nZWQoKTsKLSAgICB9CisgICAgbV9yZWFk
eVN0YXRlID0gbV9tZWRpYVNvdXJjZVJlYWR5U3RhdGU7CisgICAgdXBkYXRlU3RhdGVzKCk7IC8v
IFNldCB0aGUgcGlwZWxpbmUgdG8gUExBWUlORyBvciBQQVVTRUQgaWYgbmVjZXNzYXJ5LgogICAg
IG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOwogCi0gICAgR3N0U3RhdGUgcGlwZWxpbmVT
dGF0ZTsKLSAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiBnZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVt
ZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmcGlwZWxpbmVTdGF0ZSwgbnVsbHB0ciwg
MjUwICogR1NUX05TRUNPTkQpOwotICAgIGJvb2wgaXNQbGF5aW5nID0gKGdldFN0YXRlUmVzdWx0
ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyAmJiBwaXBlbGluZVN0YXRlID09IEdTVF9TVEFU
RV9QTEFZSU5HKTsKLQotICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gTWVkaWFQbGF5ZXI6OlJlYWR5
U3RhdGU6OkhhdmVNZXRhZGF0YSAmJiBvbGRSZWFkeVN0YXRlID4gTWVkaWFQbGF5ZXI6OlJlYWR5
U3RhdGU6OkhhdmVNZXRhZGF0YSAmJiBpc1BsYXlpbmcpIHsKLSAgICAgICAgR1NUX1RSQUNFKCJD
aGFuZ2luZyBwaXBlbGluZSB0byBQQVVTRUQuLi4iKTsKLSAgICAgICAgYm9vbCBvayA9IGNoYW5n
ZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BBVVNFRCk7Ci0gICAgICAgIEdTVF9UUkFDRSgiQ2hh
bmdlZCBwaXBlbGluZSB0byBQQVVTRUQ6ICVzIiwgb2sgPyAiU3VjY2VzcyIgOiAiRXJyb3IiKTsK
LSAgICB9CisgICAgLy8gVGhlIHJlYWR5U3RhdGUgY2hhbmdlIG1heSBiZSBhIHJlc3VsdCBvZiBt
b25pdG9yU291cmNlQnVmZmVycygpIGZpbmRpbmcgdGhhdCBjdXJyZW50VGltZSA9PSBkdXJhdGlv
biwgd2hpY2gKKyAgICAvLyBzaG91bGQgY2F1c2UgdGhlIHZpZGVvIHRvIGJlIG1hcmtlZCBhcyBl
bmRlZC4gTGV0J3MgaGF2ZSB0aGUgcGxheWVyIGNoZWNrIHRoYXQuCisgICAgbV9wbGF5ZXItPnRp
bWVDaGFuZ2VkKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp3
YWl0Rm9yU2Vla0NvbXBsZXRlZCgpCi17Ci0gICAgaWYgKCFtX2lzU2Vla2luZykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgR1NUX0RFQlVHKCJXYWl0aW5nIGZvciBNU0Ugc2VlayBjb21wbGV0ZWQi
KTsKLSAgICBtX21zZVNlZWtDb21wbGV0ZWQgPSBmYWxzZTsKLX0KLQotdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0U6OnNlZWtDb21wbGV0ZWQoKQordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJNU0U6OmFzeW5jU3RhdGVDaGFuZ2VEb25lKCkKIHsKLSAgICBpZiAobV9t
c2VTZWVrQ29tcGxldGVkKQorICAgIEFTU0VSVChHU1RfU1RBVEUobV9waXBlbGluZS5nZXQoKSkg
Pj0gR1NUX1NUQVRFX1BBVVNFRCk7CisgICAgLy8gVGhlcmUgYXJlIHRocmVlIGNpcmN1bXN0YW5j
ZXMgaW4gd2hpY2ggYSBwcmVyb2xsIGNhbiBvY2N1cjoKKyAgICAvLyBhKSBBdCB0aGUgYmVnaW5p
bmcgb2YgcGxheWJhY2suIFRoaXMgaXMgdGhlIHBvaW50IHdoZXJlIHdlIHByb3BhZ2F0ZSA+PUhh
dmVDdXJyZW50RGF0YSB0byB0aGUgcGxheWVyLgorICAgIC8vIGIpIEF0IHRoZSBlbmQgb2YgYSBz
ZWVrLiBXZSBlbWl0IHRoZSAic2Vla2VkIiBldmVudCBhcyB3ZWxsLgorICAgIC8vIGMpIEF0IHRo
ZSBlbmQgb2YgYSBmbHVzaCAoZm9yY2VkIHF1YWxpdHkgY2hhbmdlKS4gVGhlc2Ugc2hvdWxkIG5v
dCBwcm9kdWNlIGVpdGhlciBvZiB0aGVzZSBvdXRjb21lcy4KKyAgICAvLyBXZSBpZGVudGlmeSAo
YSkgYW5kIChiKSBieSBzZXR0aW5nIG1faXNXYWl0aW5nRm9yUHJlcm9sbCA9IHRydWUgYXQgdGhl
IGluaXRpYWxpemF0aW9uIG9mIHRoZSBwbGF5ZXIgYW5kCisgICAgLy8gYXQgdGhlIGJlZ2lubmlu
ZyBvZiBhIHNlZWsuCisgICAgR1NUX0RFQlVHKCJQaXBlbGluZSBwcmVyb2xsZWQuIGN1cnJlbnRN
ZWRpYVRpbWUgPSAlcyIsIGN1cnJlbnRNZWRpYVRpbWUoKS50b1N0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOworICAgIGlmICghbV9pc1dhaXRpbmdGb3JQcmVyb2xsKSB7CisgICAgICAgIEdTVF9ERUJV
RygiUHJlcm9sbCB3YXMgY29uc2VxdWVuY2Ugb2YgYSBmbHVzaCwgbm90aGluZyB0byBkbyBhdCB0
aGlzIGxldmVsLiIpOwogICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1faXNXYWl0aW5nRm9y
UHJlcm9sbCA9IGZhbHNlOwogCi0gICAgR1NUX0RFQlVHKCJNU0Ugc2VlayBjb21wbGV0ZWQiKTsK
LSAgICBtX21zZVNlZWtDb21wbGV0ZWQgPSB0cnVlOwotCi0gICAgZG9TZWVrKG1fc2Vla1RpbWUs
IG1fcGxheWJhY2tSYXRlLCBzdGF0aWNfY2FzdDxHc3RTZWVrRmxhZ3M+KEdTVF9TRUVLX0ZMQUdf
RkxVU0ggfCBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFKSk7Ci0KLSAgICBpZiAoIXNlZWtpbmcoKSAm
JiBtX3JlYWR5U3RhdGUgPj0gTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGU6OkhhdmVGdXR1cmVEYXRh
KQotICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICAv
LyBUaGUgb3JkZXIgb2YgdGhlc2Ugc2VjdGlvbnMgaXMgaW1wb3J0YW50LiBJbiB0aGUgY2FzZSBv
ZiBhIHNlZWssIHRoZSAic2Vla2VkIiBldmVudCBtdXN0IGJlIGVtaXR0ZWQKKyAgICAvLyBiZWZv
cmUgdGhlICJwbGF5aW5nIiBldmVudCAod2hpY2ggaXMgZW1pdHRlZCBvbiBIQVZFX0VOT1VHSF9E
QVRBKS4gVGhlcmVmb3JlLCB3ZSB0YWtlIGNhcmUgb2YgdGhlbSBpbgorICAgIC8vIHRoYXQgb3Jk
ZXIuCiAKLSAgICBpZiAoIXNlZWtpbmcoKSkKKyAgICBpZiAobV9pc1NlZWtpbmcpIHsKKyAgICAg
ICAgbV9pc1NlZWtpbmcgPSBmYWxzZTsKKyAgICAgICAgR1NUX0RFQlVHKCJTZWVrIGNvbXBsZXRl
IGJlY2F1c2Ugb2YgcHJlcm9sbC4gY3VycmVudE1lZGlhVGltZSA9ICVzIiwgY3VycmVudE1lZGlh
VGltZSgpLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIC8vIEJ5IGNhbGxpbmcg
dGltZUNoYW5nZWQoKSwgbV9pc1NlZWtpbmcgd2lsbCBiZSBjaGVja2VkIGFuIGEgInNlZWtlZCIg
ZXZlbnQgd2lsbCBiZSBlbWl0dGVkLgogICAgICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsK
KyAgICB9CisKKyAgICBwcm9wYWdhdGVSZWFkeVN0YXRlVG9QbGF5ZXIoKTsKIH0KIAogc3RkOjp1
bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
TVNFOjpidWZmZXJlZCgpIGNvbnN0CkBAIC00NzcsMTk5ICsyNjUsMjYgQEAgdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNvdXJjZVNldHVwKEdzdEVsZW1lbnQqIHNvdXJjZUVs
ZW1lbnQpCiB7CiAgICAgQVNTRVJUKFdFQktJVF9JU19NRURJQV9TUkMoc291cmNlRWxlbWVudCkp
OwogICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlNvdXJjZSAlcCBzZXR1cCAob2xk
IHdhczogJXApIiwgc291cmNlRWxlbWVudCwgbV9zb3VyY2UuZ2V0KCkpOwotCi0gICAgYm9vbCBz
aG91bGRSZXN0b3JlVHJhY2tzID0gbV9zb3VyY2U7Ci0gICAgaWYgKHNob3VsZFJlc3RvcmVUcmFj
a3MpCi0gICAgICAgIHdlYktpdE1lZGlhU3JjUmVzdG9yZVRyYWNrcyhXRUJLSVRfTUVESUFfU1JD
KG1fc291cmNlLmdldCgpKSwgV0VCS0lUX01FRElBX1NSQyhzb3VyY2VFbGVtZW50KSk7CiAgICAg
bV9zb3VyY2UgPSBzb3VyY2VFbGVtZW50OwotICAgIG1fZW9zTWFya2VkID0gZmFsc2U7Ci0KLSAg
ICBtX3BsYXliYWNrUGlwZWxpbmUtPnNldFdlYktpdE1lZGlhU3JjKFdFQktJVF9NRURJQV9TUkMo
bV9zb3VyY2UuZ2V0KCkpKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9zb3VyY2Uu
Z2V0KCksICJ2aWRlby1jaGFuZ2VkIiwgR19DQUxMQkFDSyh2aWRlb0NoYW5nZWRDYWxsYmFjayks
IHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3NvdXJjZS5nZXQoKSwgImF1
ZGlvLWNoYW5nZWQiLCBHX0NBTExCQUNLKGF1ZGlvQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0g
ICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fc291cmNlLmdldCgpLCAidGV4dC1jaGFuZ2Vk
IiwgR19DQUxMQkFDSyh0ZXh0Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgd2ViS2l0TWVk
aWFTcmNTZXRNZWRpYVBsYXllclByaXZhdGUoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQo
KSksIHRoaXMpOwotCi0gICAgaWYgKHNob3VsZFJlc3RvcmVUcmFja3MpIHsKLSAgICAgICAgY2Fs
bE9uTWFpblRocmVhZChbcGxheWVyID0gbWFrZVdlYWtQdHIoKnRoaXMpXSB7Ci0gICAgICAgICAg
ICBpZiAoIXBsYXllcikKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB3ZWJL
aXRNZWRpYVNyY1NpZ25hbFRyYWNrcyhXRUJLSVRfTUVESUFfU1JDKHBsYXllci0+bV9zb3VyY2Uu
Z2V0KCkpKTsKLSAgICAgICAgICAgIHBsYXllci0+bV9tZWRpYVNvdXJjZS0+bW9uaXRvclNvdXJj
ZUJ1ZmZlcnMoKTsKLQotICAgICAgICAgICAgYXV0byBzZWVrVGltZSA9IE1lZGlhVGltZTo6emVy
b1RpbWUoKTsKLSAgICAgICAgICAgIHdlYktpdE1lZGlhU3JjUHJlcGFyZUluaXRpYWxTZWVrKFdF
QktJVF9NRURJQV9TUkMocGxheWVyLT5tX3NvdXJjZS5nZXQoKSksIHBsYXllci0+bV9wbGF5YmFj
a1JhdGUsIHNlZWtUaW1lLCBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkpOwotICAgICAgICAgICAg
cGxheWVyLT5ub3RpZnlTZWVrTmVlZHNEYXRhRm9yVGltZShzZWVrVGltZSk7Ci0gICAgICAgIH0p
OwotICAgIH0KKworICAgIGlmIChtX2hhc0FsbFRyYWNrcykKKyAgICAgICAgd2ViS2l0TWVkaWFT
cmNFbWl0U3RyZWFtcyhXRUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdldCgpKSwgbV90cmFja3Mp
OwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dXBkYXRlU3RhdGVz
KCkKIHsKLSAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwgbV9kaWRFcnJvck9jY3VyKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBvbGROZXR3
b3JrU3RhdGUgPSBtX25ldHdvcmtTdGF0ZTsKLSAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBv
bGRSZWFkeVN0YXRlID0gbV9yZWFkeVN0YXRlOwotICAgIEdzdFN0YXRlIHN0YXRlLCBwZW5kaW5n
OwotICAgIGJvb2wgc3RhdGVSZWFsbHlDaGFuZ2VkID0gZmFsc2U7Ci0KLSAgICBHc3RTdGF0ZUNo
YW5nZVJldHVybiBnZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVs
aW5lLmdldCgpLCAmc3RhdGUsICZwZW5kaW5nLCAyNTAgKiBHU1RfTlNFQ09ORCk7Ci0gICAgaWYg
KHN0YXRlICE9IG1fY3VycmVudFN0YXRlKSB7Ci0gICAgICAgIG1fb2xkU3RhdGUgPSBtX2N1cnJl
bnRTdGF0ZTsKLSAgICAgICAgbV9jdXJyZW50U3RhdGUgPSBzdGF0ZTsKLSAgICAgICAgc3RhdGVS
ZWFsbHlDaGFuZ2VkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBib29sIHNob3VsZFVwZGF0ZVBsYXli
YWNrU3RhdGUgPSBmYWxzZTsKLSAgICBzd2l0Y2ggKGdldFN0YXRlUmVzdWx0KSB7Ci0gICAgY2Fz
ZSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M6IHsKLSAgICAgICAgR1NUX0RFQlVHKCJTdGF0ZTog
JXMsIHBlbmRpbmc6ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpLCBnc3Rf
ZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7Ci0KLSAgICAgICAgLy8gRG8gbm90aGlu
ZyBpZiBvbiBFT1MgYW5kIHN0YXRlIGNoYW5nZWQgdG8gUkVBRFkgdG8gYXZvaWQgcmVjcmVhdGlu
ZyB0aGUgcGxheWVyCi0gICAgICAgIC8vIG9uIEhUTUxNZWRpYUVsZW1lbnQgYW5kIHByb3Blcmx5
IGdlbmVyYXRlIHRoZSB2aWRlbyAnZW5kZWQnIGV2ZW50LgotICAgICAgICBpZiAobV9pc0VuZFJl
YWNoZWQgJiYgc3RhdGUgPT0gR1NUX1NUQVRFX1JFQURZKQotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgbV9zaG91bGRSZXNldFBpcGVsaW5lID0gKHN0YXRlIDw9IEdTVF9TVEFURV9SRUFE
WSk7Ci0gICAgICAgIGlmIChtX3Nob3VsZFJlc2V0UGlwZWxpbmUpCi0gICAgICAgICAgICBtX21l
ZGlhVGltZUR1cmF0aW9uID0gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOwotCi0gICAgICAgIC8vIFVw
ZGF0ZSByZWFkeSBhbmQgbmV0d29yayBzdGF0ZXMuCi0gICAgICAgIHN3aXRjaCAoc3RhdGUpIHsK
LSAgICAgICAgY2FzZSBHU1RfU1RBVEVfTlVMTDoKLSAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9
IE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlOjpIYXZlTm90aGluZzsKLSAgICAgICAgICAgIEdTVF9E
RUJVRygibV9yZWFkeVN0YXRlPSVzIiwgZHVtcFJlYWR5U3RhdGUobV9yZWFkeVN0YXRlKSk7Ci0g
ICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGU6OkVt
cHR5OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX1NUQVRFX1JFQURZOgot
ICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGU6OkhhdmVN
ZXRhZGF0YTsKLSAgICAgICAgICAgIEdTVF9ERUJVRygibV9yZWFkeVN0YXRlPSVzIiwgZHVtcFJl
YWR5U3RhdGUobV9yZWFkeVN0YXRlKSk7Ci0gICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpOZXR3b3JrU3RhdGU6OkVtcHR5OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgR1NUX1NUQVRFX1BBVVNFRDoKLSAgICAgICAgY2FzZSBHU1RfU1RBVEVfUExBWUlO
RzoKLSAgICAgICAgICAgIGlmIChzZWVraW5nKCkpIHsKLSAgICAgICAgICAgICAgICBtX3JlYWR5
U3RhdGUgPSBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZTo6SGF2ZU1ldGFkYXRhOwotICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgbWFuYWdlIE5ldHdvcmtTdGF0ZSB0b28/Ci0gICAg
ICAgICAgICAgICAgR1NUX0RFQlVHKCJtX3JlYWR5U3RhdGU9JXMiLCBkdW1wUmVhZHlTdGF0ZSht
X3JlYWR5U3RhdGUpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYg
KG1fcmVhZHlTdGF0ZSA8IE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlOjpIYXZlRnV0dXJlRGF0YSkK
LSAgICAgICAgICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OlJlYWR5U3Rh
dGU6OkhhdmVGdXR1cmVEYXRhOwotICAgICAgICAgICAgICAgIEdTVF9ERUJVRygibV9yZWFkeVN0
YXRlPSVzIiwgZHVtcFJlYWR5U3RhdGUobV9yZWFkeVN0YXRlKSk7Ci0gICAgICAgICAgICAgICAg
bV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlOjpMb2FkaW5nOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobV9lb3NNYXJrZWQgJiYgc3RhdGUgPT0gR1NU
X1NUQVRFX1BMQVlJTkcpCi0gICAgICAgICAgICAgICAgbV9lb3NQZW5kaW5nID0gdHJ1ZTsKLQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gU3luYyBzdGF0ZXMgd2hlcmUgbmVlZGVkLgotICAgICAgICBpZiAoc3RhdGUgPT0gR1NUX1NU
QVRFX1BBVVNFRCkgewotICAgICAgICAgICAgaWYgKCFtX2FyZVZvbHVtZUFuZE11dGVJbml0aWFs
aXplZCkgewotICAgICAgICAgICAgICAgIG5vdGlmeVBsYXllck9mVm9sdW1lQ2hhbmdlKCk7Ci0g
ICAgICAgICAgICAgICAgbm90aWZ5UGxheWVyT2ZNdXRlKCk7Ci0gICAgICAgICAgICAgICAgbV9h
cmVWb2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAoIXNlZWtpbmcoKSAmJiAhbV9pc1BhdXNlZCAmJiBtX3BsYXliYWNrUmF0ZSkg
ewotICAgICAgICAgICAgICAgIEdTVF9ERUJVRygiW0J1ZmZlcmluZ10gUmVzdGFydGluZyBwbGF5
YmFjay4iKTsKLSAgICAgICAgICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9Q
TEFZSU5HKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBHU1Rf
U1RBVEVfUExBWUlORykgewotICAgICAgICAgICAgbV9pc1BhdXNlZCA9IGZhbHNlOwotCi0gICAg
ICAgICAgICBpZiAoIW1fcGxheWJhY2tSYXRlKSB7Ci0gICAgICAgICAgICAgICAgR1NUX0RFQlVH
KCJbQnVmZmVyaW5nXSBQYXVzaW5nIHN0cmVhbSBmb3IgYnVmZmVyaW5nLiIpOwotICAgICAgICAg
ICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BBVVNFRCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9pc1BhdXNlZCA9IHRydWU7Ci0KLSAg
ICAgICAgaWYgKG1fcmVxdWVzdGVkU3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCAmJiBzdGF0ZSA9
PSBHU1RfU1RBVEVfUEFVU0VEKSB7Ci0gICAgICAgICAgICBzaG91bGRVcGRhdGVQbGF5YmFja1N0
YXRlID0gdHJ1ZTsKLSAgICAgICAgICAgIEdTVF9ERUJVRygiUmVxdWVzdGVkIHN0YXRlIGNoYW5n
ZSB0byAlcyB3YXMgY29tcGxldGVkIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEVtaXQgcGxheSBzdGF0ZSBjaGFuZ2Ugbm90aWZp
Y2F0aW9uIG9ubHkgd2hlbiBnb2luZyB0byBQTEFZSU5HIHNvIHRoYXQKLSAgICAgICAgLy8gdGhl
IG1lZGlhIGVsZW1lbnQgZ2V0cyBhIGNoYW5jZSB0byBlbmFibGUgaXRzIHBhZ2Ugc2xlZXAgZGlz
YWJsZXIuCi0gICAgICAgIC8vIEVtaXR0aW5nIHRoaXMgbm90aWZpY2F0aW9uIGluIG1vcmUgY2Fz
ZXMgdHJpZ2dlcnMgdW53YW50ZWQgY29kZSBwYXRocwotICAgICAgICAvLyBhbmQgdGVzdCB0aW1l
b3V0cy4KLSAgICAgICAgaWYgKHN0YXRlUmVhbGx5Q2hhbmdlZCAmJiAobV9vbGRTdGF0ZSAhPSBt
X2N1cnJlbnRTdGF0ZSkgJiYgKG1fb2xkU3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCAmJiBtX2N1
cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykpIHsKLSAgICAgICAgICAgIEdTVF9JTkZP
X09CSkVDVChwaXBlbGluZSgpLCAiUGxheWJhY2sgc3RhdGUgY2hhbmdlZCBmcm9tICVzIHRvICVz
LiBOb3RpZnlpbmcgdGhlIG1lZGlhIHBsYXllciBjbGllbnQiLCBnc3RfZWxlbWVudF9zdGF0ZV9n
ZXRfbmFtZShtX29sZFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9jdXJyZW50
U3RhdGUpKTsKLSAgICAgICAgICAgIHNob3VsZFVwZGF0ZVBsYXliYWNrU3RhdGUgPSB0cnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1NUQVRFX0NI
QU5HRV9BU1lOQzoKLSAgICAgICAgR1NUX0RFQlVHKCJBc3luYzogU3RhdGU6ICVzLCBwZW5kaW5n
OiAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSwgZ3N0X2VsZW1lbnRfc3Rh
dGVfZ2V0X25hbWUocGVuZGluZykpOwotICAgICAgICAvLyBDaGFuZ2UgaW4gcHJvZ3Jlc3MuCi0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOgotICAgICAg
ICBHU1RfV0FSTklORygiRmFpbHVyZTogU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdzdF9lbGVt
ZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVu
ZGluZykpOwotICAgICAgICAvLyBDaGFuZ2UgZmFpbGVkLgotICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEw6Ci0gICAgICAgIEdTVF9ERUJVRygiTm8g
cHJlcm9sbDogU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9u
YW1lKHN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykpOwotCi0gICAg
ICAgIC8vIExpdmUgcGlwZWxpbmVzIGdvIGluIFBBVVNFRCB3aXRob3V0IHByZXJvbGxpbmcuCi0g
ICAgICAgIG1faXNMaXZlU3RyZWFtID0gdHJ1ZTsKLQotICAgICAgICBpZiAoc3RhdGUgPT0gR1NU
X1NUQVRFX1JFQURZKSB7Ci0gICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6
UmVhZHlTdGF0ZTo6SGF2ZU5vdGhpbmc7Ci0gICAgICAgICAgICBHU1RfREVCVUcoIm1fcmVhZHlT
dGF0ZT0lcyIsIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkpOwotICAgICAgICB9IGVsc2Ug
aWYgKHN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQpIHsKLSAgICAgICAgICAgIG1fcmVhZHlTdGF0
ZSA9IE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlOjpIYXZlRW5vdWdoRGF0YTsKLSAgICAgICAgICAg
IEdTVF9ERUJVRygibV9yZWFkeVN0YXRlPSVzIiwgZHVtcFJlYWR5U3RhdGUobV9yZWFkeVN0YXRl
KSk7Ci0gICAgICAgICAgICBtX2lzUGF1c2VkID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmIChz
dGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykKLSAgICAgICAgICAgIG1faXNQYXVzZWQgPSBmYWxz
ZTsKLQotICAgICAgICBpZiAoIW1faXNQYXVzZWQgJiYgbV9wbGF5YmFja1JhdGUpCi0gICAgICAg
ICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICAgICAgICBt
X25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGU6OkxvYWRpbmc7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdTVF9ERUJVRygiRWxzZSA6ICVkIiwg
Z2V0U3RhdGVSZXN1bHQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBtX3JlcXVlc3Rl
ZFN0YXRlID0gR1NUX1NUQVRFX1ZPSURfUEVORElORzsKLQotICAgIGlmIChzaG91bGRVcGRhdGVQ
bGF5YmFja1N0YXRlKQotICAgICAgICBtX3BsYXllci0+cGxheWJhY2tTdGF0ZUNoYW5nZWQoKTsK
LQotICAgIGlmIChtX25ldHdvcmtTdGF0ZSAhPSBvbGROZXR3b3JrU3RhdGUpIHsKLSAgICAgICAg
R1NUX0RFQlVHKCJOZXR3b3JrIFN0YXRlIENoYW5nZWQgZnJvbSAldSB0byAldSIsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihvbGROZXR3b3JrU3RhdGUpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9u
ZXR3b3JrU3RhdGUpKTsKLSAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsK
LSAgICB9Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBvbGRSZWFkeVN0YXRlKSB7Ci0gICAgICAg
IEdTVF9ERUJVRygiUmVhZHkgU3RhdGUgQ2hhbmdlZCBmcm9tICV1IHRvICV1Iiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG9sZFJlYWR5U3RhdGUpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9yZWFk
eVN0YXRlKSk7Ci0gICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOwotICAgIH0K
LQotICAgIGlmIChnZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MgJiYg
c3RhdGUgPj0gR1NUX1NUQVRFX1BBVVNFRCkgewotICAgICAgICB1cGRhdGVQbGF5YmFja1JhdGUo
KTsKLSAgICAgICAgbWF5YmVGaW5pc2hTZWVrKCk7CisgICAgYm9vbCBzaG91bGRCZVBsYXlpbmcg
PSAhbV9pc1BhdXNlZCAmJiByZWFkeVN0YXRlKCkgPj0gTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGU6
OkhhdmVGdXR1cmVEYXRhOworICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgInNob3Vs
ZEJlUGxheWluZyA9ICVkLCBtX2lzUGlwZWxpbmVQbGF5aW5nID0gJWQiLCBzdGF0aWNfY2FzdDxp
bnQ+KHNob3VsZEJlUGxheWluZyksIHN0YXRpY19jYXN0PGludD4obV9pc1BpcGVsaW5lUGxheWlu
ZykpOworICAgIGlmIChzaG91bGRCZVBsYXlpbmcgJiYgIW1faXNQaXBlbGluZVBsYXlpbmcpIHsK
KyAgICAgICAgaWYgKCFjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QTEFZSU5HKSkKKyAg
ICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QocGlwZWxpbmUoKSwgIlNldHRpbmcgdGhlIHBpcGVs
aW5lIHRvIFBMQVlJTkcgZmFpbGVkIik7CisgICAgICAgIG1faXNQaXBlbGluZVBsYXlpbmcgPSB0
cnVlOworICAgIH0gZWxzZSBpZiAoIXNob3VsZEJlUGxheWluZyAmJiBtX2lzUGlwZWxpbmVQbGF5
aW5nKSB7CisgICAgICAgIGlmICghY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUEFVU0VE
KSkKKyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QocGlwZWxpbmUoKSwgIlNldHRpbmcgdGhl
IHBpcGVsaW5lIHRvIFBBVVNFRCBmYWlsZWQiKTsKKyAgICAgICAgbV9pc1BpcGVsaW5lUGxheWlu
ZyA9IGZhbHNlOwogICAgIH0KIH0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
Ojphc3luY1N0YXRlQ2hhbmdlRG9uZSgpCi17Ci0gICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5l
IHx8IG1fZGlkRXJyb3JPY2N1cikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lzU2Vl
a2luZykKLSAgICAgICAgbWF5YmVGaW5pc2hTZWVrKCk7Ci0gICAgZWxzZQotICAgICAgICB1cGRh
dGVTdGF0ZXMoKTsKLX0KIAogYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Omlz
VGltZUJ1ZmZlcmVkKGNvbnN0IE1lZGlhVGltZSAmdGltZSkgY29uc3QKIHsKQEAgLTY5MCw3ICsz
MDUsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dW5ibG9ja0R1cmF0
aW9uQ2hhbmdlcygpCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBpZiAobV9zaG91
bGRSZXBvcnREdXJhdGlvbldoZW5VbmJsb2NraW5nKSB7CiAgICAgICAgIG1fcGxheWVyLT5kdXJh
dGlvbkNoYW5nZWQoKTsKLSAgICAgICAgbV9wbGF5YmFja1BpcGVsaW5lLT5ub3RpZnlEdXJhdGlv
bkNoYW5nZWQoKTsKICAgICAgICAgbV9zaG91bGRSZXBvcnREdXJhdGlvbldoZW5VbmJsb2NraW5n
ID0gZmFsc2U7CiAgICAgfQogCkBAIC03MDksMzkgKzMyMywzOSBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6ZHVyYXRpb25DaGFuZ2VkKCkKICAgICAvLyBBdm9pZCBlbWl0
aW5nIGR1cmF0aW9uY2hhbmdlZCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgcHJldmlvdXMgZHVyYXRp
b24gd2FzIDAgYmVjYXVzZSB0aGF0IGNhc2UgaXMgYWxyZWFkeSBoYW5kbGVkCiAgICAgLy8gYnkg
dGhlIEhUTUxNZWRpYUVsZW1lbnQuCiAgICAgaWYgKG1fbWVkaWFUaW1lRHVyYXRpb24gIT0gcHJl
dmlvdXNEdXJhdGlvbiAmJiBtX21lZGlhVGltZUR1cmF0aW9uLmlzVmFsaWQoKSAmJiBwcmV2aW91
c0R1cmF0aW9uLmlzVmFsaWQoKSkgewotICAgICAgICBpZiAoIW1fYXJlRHVyYXRpb25DaGFuZ2Vz
QmxvY2tlZCkgeworICAgICAgICBpZiAoIW1fYXJlRHVyYXRpb25DaGFuZ2VzQmxvY2tlZCkKICAg
ICAgICAgICAgIG1fcGxheWVyLT5kdXJhdGlvbkNoYW5nZWQoKTsKLSAgICAgICAgICAgIG1fcGxh
eWJhY2tQaXBlbGluZS0+bm90aWZ5RHVyYXRpb25DaGFuZ2VkKCk7Ci0gICAgICAgIH0gZWxzZQor
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX3Nob3VsZFJlcG9ydER1cmF0aW9uV2hlblVuYmxv
Y2tpbmcgPSB0cnVlOwogICAgIH0KIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJNU0U6OnRyYWNrRGV0ZWN0ZWQoQXBwZW5kUGlwZWxpbmUmIGFwcGVuZFBpcGVsaW5lLCBSZWZQ
dHI8V2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZT4gbmV3VHJhY2ssIGJvb2wgZmlyc3RUcmFja0Rl
dGVjdGVkKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnRyYWNrRGV0ZWN0
ZWQoQXBwZW5kUGlwZWxpbmUmIGFwcGVuZFBpcGVsaW5lLCBSZWZQdHI8V2ViQ29yZTo6VHJhY2tQ
cml2YXRlQmFzZT4gbmV3VHJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAg
ICBBU1NFUlQoYXBwZW5kUGlwZWxpbmUudHJhY2soKSA9PSBuZXdUcmFjayk7CiAKLSAgICBHc3RD
YXBzKiBjYXBzID0gYXBwZW5kUGlwZWxpbmUuYXBwc2lua0NhcHMoKTsKKyAgICBHUmVmUHRyPEdz
dENhcHM+IGNhcHMgPSBhcHBlbmRQaXBlbGluZS5hcHBzaW5rQ2FwcygpOwogICAgIEFTU0VSVChj
YXBzKTsKLSAgICBHU1RfREVCVUcoIkRlbXV4ZXIgcGFyc2VkIG1ldGFkYXRhIHdpdGggdHJhY2sg
SUQ6ICVzLCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgbmV3VHJhY2stPmlkKCkuc3RyaW5nKCku
bGF0aW4xKCkuZGF0YSgpLCBjYXBzKTsKKyAgICBHU1RfREVCVUcoIkRlbXV4ZXIgcGFyc2VkIG1l
dGFkYXRhIHdpdGggdHJhY2sgSUQ6ICVzLCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgbmV3VHJh
Y2stPmlkKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpLCBjYXBzLmdldCgpKTsKIAogICAgIC8v
IFdlIHNldCB0aGUgc2l6ZSBvZiB0aGUgdmlkZW8gb25seSBmb3IgdGhlIGZpcnN0IGluaXRpYWxp
emF0aW9uIHNlZ21lbnQuCiAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbDogTm9ybWFsbHkgdGhl
IHZpZGVvIHNpemUgZGVwZW5kcyBvbiB0aGUgZnJhbWVzIGFycml2aW5nCiAgICAgLy8gYXQgdGhl
IHNpbmsgaW4gdGhlIHBsYXliYWNrIHBpcGVsaW5lLCBub3QgaW4gdGhlIGFwcGVuZCBwaXBlbGlu
ZTsgYnV0IHdlIHN0aWxsCiAgICAgLy8gd2FudCB0byByZXBvcnQgYW4gaW5pdGlhbCBzaXplIGZv
ciBIQVZFX01FVEFEQVRBIChmaXJzdCBpbml0aWFsaXphdGlvbiBzZWdtZW50KS4KLSAgICBpZiAo
bV92aWRlb1NpemUuaXNFbXB0eSgpICYmIGRvQ2Fwc0hhdmVUeXBlKGNhcHMsIEdTVF9WSURFT19D
QVBTX1RZUEVfUFJFRklYKSkgewotICAgICAgICBPcHRpb25hbDxGbG9hdFNpemU+IHNpemUgPSBn
ZXRWaWRlb1Jlc29sdXRpb25Gcm9tQ2FwcyhjYXBzKTsKKyAgICBpZiAobV92aWRlb1NpemUuaXNF
bXB0eSgpICYmIGRvQ2Fwc0hhdmVUeXBlKGNhcHMuZ2V0KCksIEdTVF9WSURFT19DQVBTX1RZUEVf
UFJFRklYKSkgeworICAgICAgICBPcHRpb25hbDxGbG9hdFNpemU+IHNpemUgPSBnZXRWaWRlb1Jl
c29sdXRpb25Gcm9tQ2FwcyhjYXBzLmdldCgpKTsKICAgICAgICAgaWYgKHNpemUuaGFzVmFsdWUo
KSkgewogICAgICAgICAgICAgbV92aWRlb1NpemUgPSBzaXplLnZhbHVlKCk7CiAgICAgICAgICAg
ICBHU1RfREVCVUcoIlNldHRpbmcgaW5pdGlhbCB2aWRlbyBzaXplOiAlZ3glZyIsIG1fdmlkZW9T
aXplLndpZHRoKCksIG1fdmlkZW9TaXplLmhlaWdodCgpKTsKICAgICAgICAgfQogICAgIH0KK30K
IAotICAgIGlmIChmaXJzdFRyYWNrRGV0ZWN0ZWQpCi0gICAgICAgIG1fcGxheWJhY2tQaXBlbGlu
ZS0+YXR0YWNoVHJhY2sobWFrZVJlZihhcHBlbmRQaXBlbGluZS5zb3VyY2VCdWZmZXJQcml2YXRl
KCkpLCBuZXdUcmFjaywgY2Fwcyk7Ci0gICAgZWxzZQotICAgICAgICBtX3BsYXliYWNrUGlwZWxp
bmUtPnJlYXR0YWNoVHJhY2sobWFrZVJlZihhcHBlbmRQaXBlbGluZS5zb3VyY2VCdWZmZXJQcml2
YXRlKCkpLCBuZXdUcmFjaywgY2Fwcyk7Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6c3RhcnRTb3VyY2UoY29uc3QgVmVjdG9yPFJlZlB0cjxNZWRpYVNvdXJjZVRyYWNrR1N0
cmVhbWVyPj4mIHRyYWNrcykKK3sKKyAgICBtX3RyYWNrcyA9IHRyYWNrczsKKyAgICB3ZWJLaXRN
ZWRpYVNyY0VtaXRTdHJlYW1zKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCB0cmFj
a3MpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Z2V0U3VwcG9y
dGVkVHlwZXMoSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIHR5cGVz
KQpAQCAtNzczLDM0ICszODcsNiBAQCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZAogICAgIHJldHVy
biBmaW5hbFJlc3VsdDsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6
Om1hcmtFbmRPZlN0cmVhbShNZWRpYVNvdXJjZVByaXZhdGU6OkVuZE9mU3RyZWFtU3RhdHVzIHN0
YXR1cykKLXsKLSAgICBpZiAoc3RhdHVzICE9IE1lZGlhU291cmNlUHJpdmF0ZTo6RW9zTm9FcnJv
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR1NUX0RFQlVHKCJNYXJraW5nIGVuZCBvZiBzdHJl
YW0iKTsKLSAgICBtX2Vvc01hcmtlZCA9IHRydWU7Ci0gICAgdXBkYXRlU3RhdGVzKCk7Ci19Ci0K
LU1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmN1cnJlbnRNZWRpYVRp
bWUoKSBjb25zdAotewotICAgIE1lZGlhVGltZSBwb3NpdGlvbiA9IE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6Y3VycmVudE1lZGlhVGltZSgpOwotCi0gICAgaWYgKG1fZW9zUGVuZGluZyAm
JiBwb3NpdGlvbiA+PSBkdXJhdGlvbk1lZGlhVGltZSgpKSB7Ci0gICAgICAgIGlmIChtX25ldHdv
cmtTdGF0ZSAhPSBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlOjpMb2FkZWQpIHsKLSAgICAgICAg
ICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZTo6TG9hZGVkOwot
ICAgICAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIG1fZW9zUGVuZGluZyA9IGZhbHNlOwotICAgICAgICBtX2lzRW5kUmVhY2hlZCA9
IHRydWU7Ci0gICAgICAgIG1fY2FjaGVkUG9zaXRpb24gPSBtX21lZGlhVGltZUR1cmF0aW9uOwot
ICAgICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHBvc2l0
aW9uOwotfQotCiBNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjptYXhN
ZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0CiB7CiAgICAgaWYgKFVOTElLRUxZKG1fZGlkRXJyb3JP
Y2N1cikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0UuaAppbmRleCBjNDRhYzZlNDA2YzIzMTllNmQ1ZWJjNmFmZjUyOTViNzYzYWQ5YTFm
Li41ZjIyYTUxZTk1ZmEyZGE0NGUzMjA4YWJiNjZkYzNmZWVkNGQ3ZTYwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmgKQEAgLTMw
LDEyICszMCwxNCBAQAogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIgog
I2luY2x1ZGUgIk1lZGlhU2FtcGxlLmgiCiAjaW5jbHVkZSAiTWVkaWFTb3VyY2VQcml2YXRlR1N0
cmVhbWVyLmgiCi0jaW5jbHVkZSAiV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCIKKworc3Ry
dWN0IFdlYktpdE1lZGlhU3JjOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFwcGVu
ZFBpcGVsaW5lOwotY2xhc3MgUGxheWJhY2tQaXBlbGluZTsKK2NsYXNzIFRyYWNrUXVldWU7Citj
bGFzcyBNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyOwogCiBjbGFzcyBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0UgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UpOyBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTUxLDEzICs1MywxMiBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHVwZGF0ZURvd25sb2FkQnVmZmVyaW5nRmxhZygpIG92ZXJyaWRlIHsgfTsKIAotICAg
IE1lZGlhVGltZSBjdXJyZW50TWVkaWFUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KKyAgICB2b2lk
IHBsYXkoKSBvdmVycmlkZTsKICAgICB2b2lkIHBhdXNlKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBz
ZWVraW5nKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZWVrKGNvbnN0IE1lZGlhVGltZSYp
IG92ZXJyaWRlOwotICAgIHZvaWQgY29uZmlndXJlUGxheVNpbmsoKSBvdmVycmlkZTsKLSAgICBi
b29sIGNoYW5nZVBpcGVsaW5lU3RhdGUoR3N0U3RhdGUpIG92ZXJyaWRlOworICAgIGJvb2wgZG9T
ZWVrKGNvbnN0IE1lZGlhVGltZSYsIGZsb2F0IHJhdGUsIEdzdFNlZWtGbGFncykgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIHVwZGF0ZVBpcGVsaW5lU3RhdGUoR3N0U3RhdGUpOwogCiAgICAgdm9pZCBk
dXJhdGlvbkNoYW5nZWQoKSBvdmVycmlkZTsKICAgICBNZWRpYVRpbWUgZHVyYXRpb25NZWRpYVRp
bWUoKSBjb25zdCBvdmVycmlkZTsKQEAgLTY4LDE5ICs2OSwxOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzb3VyY2VTZXR1cChHc3RFbGVtZW50Kikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNldFJlYWR5
U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUpOwotICAgIHZvaWQgd2FpdEZvclNlZWtDb21w
bGV0ZWQoKTsKLSAgICB2b2lkIHNlZWtDb21wbGV0ZWQoKTsKICAgICBNZWRpYVNvdXJjZVByaXZh
dGVDbGllbnQqIG1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCgpIHsgcmV0dXJuIG1fbWVkaWFTb3Vy
Y2UuZ2V0KCk7IH0KIAotICAgIHZvaWQgbWFya0VuZE9mU3RyZWFtKE1lZGlhU291cmNlUHJpdmF0
ZTo6RW5kT2ZTdHJlYW1TdGF0dXMpOwotCi0gICAgdm9pZCB0cmFja0RldGVjdGVkKEFwcGVuZFBp
cGVsaW5lJiwgUmVmUHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2U+LCBib29sIGZpcnN0VHJh
Y2tEZXRlY3RlZCk7Ci0gICAgdm9pZCBub3RpZnlTZWVrTmVlZHNEYXRhRm9yVGltZShjb25zdCBN
ZWRpYVRpbWUmKTsKKyAgICB2b2lkIHRyYWNrRGV0ZWN0ZWQoQXBwZW5kUGlwZWxpbmUmLCBSZWZQ
dHI8V2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZT4pOwogCiAgICAgdm9pZCBibG9ja0R1cmF0aW9u
Q2hhbmdlcygpOwogICAgIHZvaWQgdW5ibG9ja0R1cmF0aW9uQ2hhbmdlcygpOwogCi0gICAgUGxh
eWJhY2tQaXBlbGluZSogcGxheWJhY2tQaXBlbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWJh
Y2tQaXBlbGluZS5nZXQoKTsgfQorICAgIHZvaWQgYXN5bmNTdGF0ZUNoYW5nZURvbmUoKSBvdmVy
cmlkZTsKKworICAgIGJvb2wgaGFzQWxsVHJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNBbGxU
cmFja3M7IH0KKyAgICB2b2lkIHN0YXJ0U291cmNlKGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVkaWFT
b3VyY2VUcmFja0dTdHJlYW1lcj4+JiB0cmFja3MpOworICAgIFdlYktpdE1lZGlhU3JjKiB3ZWJL
aXRNZWRpYVNyYygpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V2ViS2l0TWVkaWFTcmMqPiht
X3NvdXJjZS5nZXQoKSk7IH0KIAogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgIFdURkxv
Z0NoYW5uZWwmIGxvZ0NoYW5uZWwoKSBjb25zdCBmaW5hbCB7IHJldHVybiBXZWJDb3JlOjpMb2dN
ZWRpYVNvdXJjZTsgfQpAQCAtOTEsMjkgKzkxLDI2IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZv
aWQgZ2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZl
SGFzaD4mKTsKICAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5
cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYpOwogCi0gICAgLy8gRklYTUU6
IFJlZHVjZSBjb2RlIGR1cGxpY2F0aW9uLgogICAgIHZvaWQgdXBkYXRlU3RhdGVzKCkgb3ZlcnJp
ZGU7CiAKLSAgICBib29sIGRvU2Vlayhjb25zdCBNZWRpYVRpbWUmLCBmbG9hdCwgR3N0U2Vla0Zs
YWdzKSBvdmVycmlkZTsKLSAgICB2b2lkIG1heWJlRmluaXNoU2VlaygpOwotCi0gICAgdm9pZCBh
c3luY1N0YXRlQ2hhbmdlRG9uZSgpIG92ZXJyaWRlOwotCiAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB2aWRlb1BsYXliYWNrUXVhbGl0eU1ldHJpY3MuCiAgICAgYm9vbCBpc1RpbWVCdWZmZXJlZChj
b25zdCBNZWRpYVRpbWUmKSBjb25zdDsKIAogICAgIGJvb2wgaXNNZWRpYVNvdXJjZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIGJvb2wgbV9lb3NNYXJrZWQgPSBmYWxz
ZTsKLSAgICBtdXRhYmxlIGJvb2wgbV9lb3NQZW5kaW5nID0gZmFsc2U7Ci0gICAgYm9vbCBtX2dz
dFNlZWtDb21wbGV0ZWQgPSB0cnVlOworICAgIHZvaWQgcHJvcGFnYXRlUmVhZHlTdGF0ZVRvUGxh
eWVyKCk7CisKICAgICBSZWZQdHI8TWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50PiBtX21lZGlhU291
cmNlOwogICAgIFJlZlB0cjxNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXI+IG1fbWVkaWFTb3Vy
Y2VQcml2YXRlOwogICAgIE1lZGlhVGltZSBtX21lZGlhVGltZUR1cmF0aW9uOwotICAgIGJvb2wg
bV9tc2VTZWVrQ29tcGxldGVkID0gdHJ1ZTsKICAgICBib29sIG1fYXJlRHVyYXRpb25DaGFuZ2Vz
QmxvY2tlZCA9IGZhbHNlOwogICAgIGJvb2wgbV9zaG91bGRSZXBvcnREdXJhdGlvbldoZW5VbmJs
b2NraW5nID0gZmFsc2U7Ci0gICAgUmVmUHRyPFBsYXliYWNrUGlwZWxpbmU+IG1fcGxheWJhY2tQ
aXBlbGluZTsKKyAgICBib29sIG1faXNQaXBlbGluZVBsYXlpbmcgPSB0cnVlOworICAgIGJvb2wg
bV9oYXNBbGxUcmFja3MgPSBmYWxzZTsKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU291cmNlVHJh
Y2tHU3RyZWFtZXI+PiBtX3RyYWNrczsKKworICAgIGJvb2wgbV9pc1dhaXRpbmdGb3JQcmVyb2xs
ID0gdHJ1ZTsKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBtX21lZGlhU291cmNlUmVhZHlT
dGF0ZSA9IE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlOjpIYXZlTm90aGluZzsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VQ
cml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCBmODkwYjcxM2EzMGFhODgxYzZhZmQwZWU1M2UwMzFl
NjRmMzQ4YmMxLi4wYzA3ZWZiYzRhOTU3ZDg4ZWUyOGQ0MjM1ZTg1YmNmODQwMmUyYmI5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01l
ZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXIuY3Bw
CkBAIC00MSw4ICs0MSw4IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRS5oIgorI2luY2x1ZGUgIk1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXIuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXliYWNrUGlwZWxpbmUuaCIK
ICNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiVGlt
ZVJhbmdlcy5oIgogI2luY2x1ZGUgIldlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmgiCkBAIC03
OSwxMCArNzksMTUgQEAgTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyOjp+TWVkaWFTb3VyY2VQ
cml2YXRlR1N0cmVhbWVyKCkKIE1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lcjo6QWRkU3RhdHVz
IE1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lcjo6YWRkU291cmNlQnVmZmVyKGNvbnN0IENvbnRl
bnRUeXBlJiBjb250ZW50VHlwZSwgYm9vbCwgUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+JiBz
b3VyY2VCdWZmZXJQcml2YXRlKQogewogICAgIERFQlVHX0xPRyhMT0dJREVOVElGSUVSLCBjb250
ZW50VHlwZSk7CisKKyAgICAvLyBPbmNlIGV2ZXJ5IFNvdXJjZUJ1ZmZlciBoYXMgaGFkIGFuIGlu
aXRpYWxpemF0aW9uIHNlZ21lbnQgYXBwZW5kZWQgcGxheWJhY2sgc3RhcnRzIGFuZCBpdCdzIHRv
byBsYXRlIHRvIGFkZCBuZXcgU291cmNlQnVmZmVycy4KKyAgICBpZiAobV9wbGF5ZXJQcml2YXRl
Lmhhc0FsbFRyYWNrcygpKQorICAgICAgICByZXR1cm4gTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVh
bWVyOjpBZGRTdGF0dXM6OlJlYWNoZWRJZExpbWl0OworCiAgICAgc291cmNlQnVmZmVyUHJpdmF0
ZSA9IFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZSh0aGlzLCBjb250ZW50VHlw
ZSwgbV9wbGF5ZXJQcml2YXRlKTsKICAgICBSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJl
YW1lcj4gc291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lciA9IHN0YXRpY19jYXN0PFNvdXJjZUJ1
ZmZlclByaXZhdGVHU3RyZWFtZXIqPihzb3VyY2VCdWZmZXJQcml2YXRlLmdldCgpKTsKICAgICBt
X3NvdXJjZUJ1ZmZlcnMuYWRkKHNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIpOwotICAgIHJl
dHVybiBtX3BsYXllclByaXZhdGUucGxheWJhY2tQaXBlbGluZSgpLT5hZGRTb3VyY2VCdWZmZXIo
c291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcik7CisgICAgcmV0dXJuIE1lZGlhU291cmNlUHJp
dmF0ZUdTdHJlYW1lcjo6QWRkU3RhdHVzOjpPazsKIH0KIAogdm9pZCBNZWRpYVNvdXJjZVByaXZh
dGVHU3RyZWFtZXI6OnJlbW92ZVNvdXJjZUJ1ZmZlcihTb3VyY2VCdWZmZXJQcml2YXRlKiBzb3Vy
Y2VCdWZmZXJQcml2YXRlKQpAQCAtMTA3LDE2ICsxMTIsMTUgQEAgdm9pZCBNZWRpYVNvdXJjZVBy
aXZhdGVHU3RyZWFtZXI6OmR1cmF0aW9uQ2hhbmdlZChjb25zdCBNZWRpYVRpbWUmKQogICAgIG1f
cGxheWVyUHJpdmF0ZS5kdXJhdGlvbkNoYW5nZWQoKTsKIH0KIAotdm9pZCBNZWRpYVNvdXJjZVBy
aXZhdGVHU3RyZWFtZXI6Om1hcmtFbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1cyBzdGF0dXMp
Cit2b2lkIE1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lcjo6bWFya0VuZE9mU3RyZWFtKEVuZE9m
U3RyZWFtU3RhdHVzKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbV9wbGF5
ZXJQcml2YXRlLm1hcmtFbmRPZlN0cmVhbShzdGF0dXMpOwogICAgIG1faXNFbmRlZCA9IHRydWU7
CiB9CiAKIHZvaWQgTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyOjp1bm1hcmtFbmRPZlN0cmVh
bSgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIG1faXNFbmRlZCA9IGZhbHNlOwogfQogCkBAIC0xMzIsMTIgKzEzNiwxNCBAQCB2b2lk
IE1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6
UmVhZHlTdGF0ZSBzdGF0ZSkKIAogdm9pZCBNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXI6Ondh
aXRGb3JTZWVrQ29tcGxldGVkKCkKIHsKLSAgICBtX3BsYXllclByaXZhdGUud2FpdEZvclNlZWtD
b21wbGV0ZWQoKTsKIH0KIAogdm9pZCBNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXI6OnNlZWtD
b21wbGV0ZWQoKQogewotICAgIG1fcGxheWVyUHJpdmF0ZS5zZWVrQ29tcGxldGVkKCk7CisgICAg
Ly8gVGhpcyBjYWxsIGp1c3QgaW5mb3JtcyB1cyB0aGF0IHRoZSBzZWVrIGhhcyBiZWVuIGNvbXBs
ZXRlZCBhcyBmYXIgYXMgTWVkaWFTb3VyY2UgaXMgY29uY2VybmVkOiB0aGF0IGlzLAorICAgIC8v
IHRoZSBzYW1wbGVzIGZvciBgY3VycmVudFRpbWVgIGhhdmUgYmVlbiBmZWQuIFRoaXMgZG9lc24n
dCBtZWFuIHRoZSBzZWVrIGlzIGNvbXBsZXRlIGZvciB0aGUgcGxheWVyLCBhcworICAgIC8vIHRo
ZXkgc3RpbGwgaGF2ZSB0byBiZSBkZWNvZGVkIGFuZCBwcmVyb2xsIGhhcyB0byBvY2N1ciBiZWZv
cmUgd2UgbGV0IHRoZSAic2Vla2VkIiBldmVudCBoYXBwZW4uCisgICAgLy8gU2VlIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6YXN5bmNTdGF0ZUNoYW5nZURvbmUoKQogfQogCiBNZWRp
YVRpbWUgTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyOjpkdXJhdGlvbigpIGNvbnN0CkBAIC0x
NTgsNiArMTY0LDI5IEBAIHZvaWQgTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyOjpzb3VyY2VC
dWZmZXJQcml2YXRlRGlkQ2hhbmdlQWN0aXZlU3RhdGUoU291cmNlCiAgICAgICAgIG1fYWN0aXZl
U291cmNlQnVmZmVycy5hZGQoc291cmNlQnVmZmVyUHJpdmF0ZSk7CiB9CiAKK3ZvaWQgTWVkaWFT
b3VyY2VQcml2YXRlR1N0cmVhbWVyOjpzdGFydFBsYXliYWNrSWZIYXNBbGxUcmFja3MoKQorewor
ICAgIGlmIChtX2hhc0FsbFRyYWNrcykgeworICAgICAgICAvLyBBbHJlYWR5IHN0YXJ0ZWQsIG5v
dGhpbmcgdG8gZG8uCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIHNv
dXJjZUJ1ZmZlciA6IG1fc291cmNlQnVmZmVycykgeworICAgICAgICBpZiAoIXNvdXJjZUJ1ZmZl
ci0+aGFzUmVjZWl2ZWRJbml0aWFsaXphdGlvblNlZ21lbnQoKSkgeworICAgICAgICAgICAgR1NU
X0RFQlVHKCJNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXIoJXApIC0gVGhlcmUgYXJlIHN0aWxs
IFNvdXJjZUJ1ZmZlcnMgd2l0aG91dCBhbiBpbml0aWFsaXphdGlvbiBzZWdtZW50LCBub3Qgc3Rh
cnRpbmcgc291cmNlIHlldC4iLCB0aGlzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIEdTVF9ERUJVRygiTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyKCVw
KSAtIEFsbCBTb3VyY2VCdWZmZXJzIGhhdmUgYW4gaW5pdGlhbGl6YXRpb24gc2VnbWVudCwgc3Rh
cnRpbmcgc291cmNlLiIsIHRoaXMpOworICAgIG1faGFzQWxsVHJhY2tzID0gdHJ1ZTsKKworICAg
IFZlY3RvcjxSZWZQdHI8TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcj4+IHRyYWNrczsKKyAgICBm
b3IgKGF1dG8mIHNvdXJjZUJ1ZmZlciA6IG1fc291cmNlQnVmZmVycykKKyAgICAgICAgdHJhY2tz
LmFwcGVuZFJhbmdlKHNvdXJjZUJ1ZmZlci0+dHJhY2tzKCkuYmVnaW4oKSwgc291cmNlQnVmZmVy
LT50cmFja3MoKS5lbmQoKSk7CisgICAgbV9wbGF5ZXJQcml2YXRlLnN0YXJ0U291cmNlKHRyYWNr
cyk7Cit9CisKIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IE1lZGlhU291cmNl
UHJpdmF0ZUdTdHJlYW1lcjo6YnVmZmVyZWQoKQogewogICAgIHJldHVybiBtX21lZGlhU291cmNl
LT5idWZmZXJlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VQcml2YXRl
R1N0cmVhbWVyLmgKaW5kZXggNmVjYjFkOTgwMTEyNjFiMGJmNWIzNWMzNjMxMzIzOGNlMWFmNmI1
Ni4uNGQxZmMzYmI0MGY2OGMwZDNiMzJmNGUzN2UwOGNmMTVlNmUwYTczZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNvdXJj
ZVByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC00MSw4ICs0
MSw2IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTG9nZ2VySGVs
cGVyLmg+CiAKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRNZWRpYVNyYyBXZWJLaXRNZWRpYVNyYzsK
LQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVh
bWVyOwpAQCAtNzYsNiArNzQsNyBAQCBwdWJsaWM6CiAgICAgTWVkaWFUaW1lIGN1cnJlbnRNZWRp
YVRpbWUoKSBjb25zdDsKIAogICAgIHZvaWQgc291cmNlQnVmZmVyUHJpdmF0ZURpZENoYW5nZUFj
dGl2ZVN0YXRlKFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIqLCBib29sKTsKKyAgICB2b2lk
IHN0YXJ0UGxheWJhY2tJZkhhc0FsbFRyYWNrcygpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFBs
YXRmb3JtVGltZVJhbmdlcz4gYnVmZmVyZWQoKTsKIApAQCAtOTYsNiArOTUsNyBAQCBwcml2YXRl
OgogICAgIFJlZjxNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQ+IG1fbWVkaWFTb3VyY2U7CiAgICAg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFJiBtX3BsYXllclByaXZhdGU7CiAgICAgYm9v
bCBtX2lzRW5kZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNBbGxUcmFja3MgeyBmYWxzZSB9
OwogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgIFJlZjxjb25zdCBMb2dnZXI+IG1fbG9n
Z2VyOwogICAgIGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllcjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VUcmFj
a0dTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvbXNlL01lZGlhU291cmNlVHJhY2tHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0YzVlNjcy
NjZiZWYyNmExN2I5Y2M1ZWM5YWIyYmEwZTMzODgwZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlVHJh
Y2tHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAsIDIwMjEgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCwg
MjAyMSBJZ2FsaWEsIFMuTAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNZWRpYVNvdXJjZVRy
YWNrR1N0cmVhbWVyLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKSAmJiBVU0UoR1NUUkVB
TUVSKQorCitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtpdF9tc2VfZGVidWcpOworI2Rl
ZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X21zZV9kZWJ1ZworCit1c2luZyBXVEY6OkRhdGFN
dXRleDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVy
OjpNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyKFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRy
YWNrVHlwZSB0eXBlLCBBdG9tU3RyaW5nIHRyYWNrSWQsIEdSZWZQdHI8R3N0Q2Fwcz4mJiBpbml0
aWFsQ2FwcykKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV90cmFja0lkKHRyYWNrSWQpCisg
ICAgLCBtX2luaXRpYWxDYXBzKFdURk1vdmUoaW5pdGlhbENhcHMpKQorICAgICwgbV9xdWV1ZURh
dGFNdXRleCh0cmFja0lkKQoreyB9CisKK01lZGlhU291cmNlVHJhY2tHU3RyZWFtZXI6On5NZWRp
YVNvdXJjZVRyYWNrR1N0cmVhbWVyKCkKK3sKKyAgICBBU1NFUlQobV9pc1JlbW92ZWQpOworfQor
CitSZWY8TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcj4gTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1l
cjo6Y3JlYXRlKFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZSB0eXBlLCBBdG9t
U3RyaW5nIHRyYWNrSWQsIEdSZWZQdHI8R3N0Q2Fwcz4mJiBpbml0aWFsQ2FwcykKK3sKKyAgICBy
ZXR1cm4gbWFrZVJlZigqbmV3IE1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXIodHlwZSwgdHJhY2tJ
ZCwgV1RGTW92ZShpbml0aWFsQ2FwcykpKTsKK30KKworYm9vbCBNZWRpYVNvdXJjZVRyYWNrR1N0
cmVhbWVyOjppc1JlYWR5Rm9yTW9yZVNhbXBsZXMoKQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgV1RGOjpEYXRhTXV0ZXg8VHJhY2tRdWV1ZT46OkxvY2tlZFdyYXBwZXIgcXVl
dWUobV9xdWV1ZURhdGFNdXRleCk7CisgICAgcmV0dXJuICFxdWV1ZS0+aXNGdWxsKCk7Cit9CisK
K3ZvaWQgTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcjo6bm90aWZ5V2hlblJlYWR5Rm9yTW9yZVNh
bXBsZXMoVHJhY2tRdWV1ZTo6TG93TGV2ZWxIYW5kbGVyJiYgaGFuZGxlcikKK3sKKyAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworICAgIFdURjo6RGF0YU11dGV4PFRyYWNrUXVldWU+OjpMb2Nr
ZWRXcmFwcGVyIHF1ZXVlKG1fcXVldWVEYXRhTXV0ZXgpOworICAgIHF1ZXVlLT5ub3RpZnlXaGVu
TG93TGV2ZWwoV1RGTW92ZShoYW5kbGVyKSk7Cit9CisKK3ZvaWQgTWVkaWFTb3VyY2VUcmFja0dT
dHJlYW1lcjo6ZW5xdWV1ZU9iamVjdChHUmVmUHRyPEdzdE1pbmlPYmplY3Q+JiYgb2JqZWN0KQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgV1RGOjpEYXRhTXV0ZXg8VHJhY2tR
dWV1ZT46OkxvY2tlZFdyYXBwZXIgcXVldWUobV9xdWV1ZURhdGFNdXRleCk7CisgICAgcXVldWUt
PmVucXVldWVPYmplY3QoV1RGTW92ZShvYmplY3QpKTsKK30KKwordm9pZCBNZWRpYVNvdXJjZVRy
YWNrR1N0cmVhbWVyOjpjbGVhclF1ZXVlKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIFdURjo6RGF0YU11dGV4PFRyYWNrUXVldWU+OjpMb2NrZWRXcmFwcGVyIHF1ZXVlKG1f
cXVldWVEYXRhTXV0ZXgpOworICAgIHF1ZXVlLT5jbGVhcigpOworfQorCit2b2lkIE1lZGlhU291
cmNlVHJhY2tHU3RyZWFtZXI6OnJlbW92ZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICBtX2lzUmVtb3ZlZCA9IHRydWU7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291
cmNlVHJhY2tHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9tc2UvTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5Y2Fl
NTlmYjhhZDYzODE3OTUxMDZlZWEwM2MyMzJhZDRjZmNiOTUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNl
VHJhY2tHU3RyZWFtZXIuaApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwLCAyMDIxIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAs
IDIwMjEgSWdhbGlhLCBTLkwKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYm
IFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmgi
CisjaW5jbHVkZSAiVHJhY2tRdWV1ZS5oIgorI2luY2x1ZGUgPHd0Zi9EYXRhTXV0ZXguaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyIGZp
bmFsOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1l
cj4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcj4g
Y3JlYXRlKFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZSwgQXRvbVN0cmluZyB0
cmFja0lkLCBHUmVmUHRyPEdzdENhcHM+JiYgaW5pdGlhbENhcHMpOworICAgIH5NZWRpYVNvdXJj
ZVRyYWNrR1N0cmVhbWVyKCk7CisKKyAgICBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFj
a1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIEF0b21TdHJpbmcgdHJh
Y2tJZCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhY2tJZDsgfQorICAgIEdSZWZQdHI8R3N0Q2Fwcz4m
IGluaXRpYWxDYXBzKCkgeyByZXR1cm4gbV9pbml0aWFsQ2FwczsgfQorICAgIFdURjo6RGF0YU11
dGV4PFRyYWNrUXVldWU+JiBxdWV1ZURhdGFNdXRleCgpIHsgcmV0dXJuIG1fcXVldWVEYXRhTXV0
ZXg7IH0KKworICAgIGJvb2wgaXNSZWFkeUZvck1vcmVTYW1wbGVzKCk7CisKKyAgICB2b2lkIG5v
dGlmeVdoZW5SZWFkeUZvck1vcmVTYW1wbGVzKFRyYWNrUXVldWU6Okxvd0xldmVsSGFuZGxlciYm
KTsKKworICAgIHZvaWQgZW5xdWV1ZU9iamVjdChHUmVmUHRyPEdzdE1pbmlPYmplY3Q+JiYpOwor
CisgICAgLy8gVGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgdG8gY2xlYXIgdGhlIFRyYWNrUXVldWUg
aW4gY2FzZXMgd2hlcmUgdGhlIHN0cmVhbSBoYXNuJ3QgYmVlbiBzdGFydGVkIChlLmcuIGJlY2F1
c2UKKyAgICAvLyBhbm90aGVyIFNvdXJjZUJ1ZmZlciBoYXNuJ3QgcmVjZWl2ZWQgdGhlIG5lY2Vz
c2FyeSBpbml0YWxpemF0aW9uIHNlZ21lbnQgZm9yIHBsYXliYWNrKS4KKyAgICAvLyBPdGhlcndp
c2UsIHdlYktpdE1lZGlhU3JjRmx1c2goKSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLCB3aGljaCB3
aWxsIGFsc28gZG8gYSBHU3RyZWFtZXIgcGlwZWxpbmUgZmx1c2ggd2hlcmUKKyAgICAvLyBuZWNl
c3NhcnkuCisgICAgdm9pZCBjbGVhclF1ZXVlKCk7CisKKyAgICB2b2lkIHJlbW92ZSgpOworCitw
cml2YXRlOgorICAgIGV4cGxpY2l0IE1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXIoVHJhY2tQcml2
YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlLCBBdG9tU3RyaW5nIHRyYWNrSWQsIEdSZWZQdHI8
R3N0Q2Fwcz4mJiBpbml0aWFsQ2Fwcyk7CisKKyAgICBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVy
OjpUcmFja1R5cGUgbV90eXBlOworICAgIEF0b21TdHJpbmcgbV90cmFja0lkOworICAgIEdSZWZQ
dHI8R3N0Q2Fwcz4gbV9pbml0aWFsQ2FwczsKKyAgICBXVEY6OkRhdGFNdXRleDxUcmFja1F1ZXVl
PiBtX3F1ZXVlRGF0YU11dGV4OworCisgICAgYm9vbCBtX2lzUmVtb3ZlZCB7IGZhbHNlIH07Cisg
ICAgYm9vbCBtX2lzUmVhZHlGb3JNb3JlU2FtcGxlcyB7IHRydWUgfTsKK307CisKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvbXNlL1BsYXliYWNrUGlwZWxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9tc2UvUGxheWJhY2tQaXBlbGluZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBlMGJjOTE1NjA1YTE3NGJhZDg0ZmIyNGQ1NjhhZWJiMGUyOWFjNjBkLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvUGxheWJhY2tQaXBlbGluZS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRy
b2xvZ2ljYWwgR3JvdXAgQi5WLgotICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwKLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFpbnQgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikgJiYgRU5BQkxF
KE1FRElBX1NPVVJDRSkKLQotLy8gUGxheWJhY2tQaXBlbGluZSBpcyAoc29ydCBvZikgYSBmcmll
bmQgY2xhc3Mgb2YgV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuCi0KLSNpbmNsdWRlICJXZWJL
aXRNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgotI2luY2x1ZGUgIldlYktpdE1lZGlhU291cmNlR1N0
cmVhbWVyUHJpdmF0ZS5oIgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPHd0Zi9D
b25kaXRpb24uaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBX
VEYgewotdGVtcGxhdGU8PiBHUmVmUHRyPFdlYktpdE1lZGlhU3JjPiBhZG9wdEdSZWYoV2ViS2l0
TWVkaWFTcmMqKTsKLXRlbXBsYXRlPD4gV2ViS2l0TWVkaWFTcmMqIHJlZkdQdHI8V2ViS2l0TWVk
aWFTcmM+KFdlYktpdE1lZGlhU3JjKik7Ci10ZW1wbGF0ZTw+IHZvaWQgZGVyZWZHUHRyPFdlYktp
dE1lZGlhU3JjPihXZWJLaXRNZWRpYVNyYyopOwotfTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBDb250ZW50VHlwZTsKLWNsYXNzIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI7
Ci1jbGFzcyBNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXI7Ci0KLWNsYXNzIFBsYXliYWNrUGlw
ZWxpbmU6IHB1YmxpYyBSZWZDb3VudGVkPFBsYXliYWNrUGlwZWxpbmU+IHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPFBsYXliYWNrUGlwZWxpbmU+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBQbGF5YmFja1BpcGVsaW5lKCkpOwotICAgIH0KLQotICAgIHZp
cnR1YWwgflBsYXliYWNrUGlwZWxpbmUoKSA9IGRlZmF1bHQ7Ci0KLSAgICB2b2lkIHNldFdlYktp
dE1lZGlhU3JjKFdlYktpdE1lZGlhU3JjKik7Ci0gICAgV2ViS2l0TWVkaWFTcmMqIHdlYktpdE1l
ZGlhU3JjKCk7Ci0KLSAgICBNZWRpYVNvdXJjZVByaXZhdGU6OkFkZFN0YXR1cyBhZGRTb3VyY2VC
dWZmZXIoUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+KTsKLSAgICB2b2lkIHJl
bW92ZVNvdXJjZUJ1ZmZlcihSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4pOwot
ICAgIHZvaWQgYXR0YWNoVHJhY2soUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+
LCBSZWZQdHI8VHJhY2tQcml2YXRlQmFzZT4sIEdzdENhcHMqKTsKLSAgICB2b2lkIHJlYXR0YWNo
VHJhY2soUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+LCBSZWZQdHI8VHJhY2tQ
cml2YXRlQmFzZT4sIEdzdENhcHMqKTsKLSAgICB2b2lkIG5vdGlmeUR1cmF0aW9uQ2hhbmdlZCgp
OwotCi0gICAgLy8gRnJvbSBNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXIuCi0gICAgdm9pZCBt
YXJrRW5kT2ZTdHJlYW0oTWVkaWFTb3VyY2VQcml2YXRlOjpFbmRPZlN0cmVhbVN0YXR1cyk7Ci0K
LSAgICAvLyBGcm9tIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuCi0gICAgdm9pZCBmbHVz
aChBdG9tU3RyaW5nKTsKLSAgICB2b2lkIGVucXVldWVTYW1wbGUoUmVmPE1lZGlhU2FtcGxlPiYm
KTsKLSAgICB2b2lkIGFsbFNhbXBsZXNJblRyYWNrRW5xdWV1ZWQoY29uc3QgQXRvbVN0cmluZyYp
OwotCi0gICAgR3N0RWxlbWVudCogcGlwZWxpbmUoKTsKLXByaXZhdGU6Ci0gICAgUGxheWJhY2tQ
aXBlbGluZSgpID0gZGVmYXVsdDsKLSAgICBHUmVmUHRyPFdlYktpdE1lZGlhU3JjPiBtX3dlYktp
dE1lZGlhU3JjOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZS4KLQotI2VuZGlmIC8vIFVT
RShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvbXNlL1NvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Tb3VyY2VCdWZmZXJQcml2
YXRlR1N0cmVhbWVyLmNwcAppbmRleCBiMTVmYzQ5MWU0ZDQ0NWUzODAxMmViNTZkZjY5MzZlNjU3
NjIyMmQyLi43MzQyNDMyNmQ3MGY0NmRmNDlmODBmODQxZWQ0MmY0N2MwZDRkNjc5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1NvdXJj
ZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5jcHAK
QEAgLTM4LDE1ICszOCwyMiBAQAogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIFVTRShHU1RS
RUFNRVIpCiAKICNpbmNsdWRlICJBcHBlbmRQaXBlbGluZS5oIgorI2luY2x1ZGUgIkF1ZGlvVHJh
Y2tQcml2YXRlR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiQ29udGVudFR5cGUuaCIKICNpbmNsdWRl
ICJHU3RyZWFtZXJDb21tb24uaCIKKyNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlLmgi
CisjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgogI2luY2x1ZGUg
Ik1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5oIgogI2luY2x1ZGUgIk1lZGlhU2FtcGxl
LmgiCiAjaW5jbHVkZSAiTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAi
TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
Ci0jaW5jbHVkZSAiUGxheWJhY2tQaXBlbGluZS5oIgorI2luY2x1ZGUgIlZpZGVvVHJhY2tQcml2
YXRlR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCIK
IAorR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJraXRfbXNlX2RlYnVnKTsKKyNkZWZpbmUg
R1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9tc2VfZGVidWcKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBSZWY8U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4gU291cmNlQnVmZmVyUHJpdmF0ZUdT
dHJlYW1lcjo6Y3JlYXRlKE1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lciogbWVkaWFTb3VyY2Us
IGNvbnN0IENvbnRlbnRUeXBlJiBjb250ZW50VHlwZSwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyTVNFJiBwbGF5ZXJQcml2YXRlKQpAQCAtMTA1LDEwICsxMTIsMTAgQEAgdm9pZCBTb3VyY2VC
dWZmZXJQcml2YXRlR1N0cmVhbWVyOjpyZW1vdmVkRnJvbU1lZGlhU291cmNlKCkKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGNsZWFyVHJhY2tCdWZmZXJzKCk7CiAgICAgbV9tZWRp
YVNvdXJjZS0+cmVtb3ZlU291cmNlQnVmZmVyKHRoaXMpOwotICAgIG1fcGxheWVyUHJpdmF0ZS5w
bGF5YmFja1BpcGVsaW5lKCktPnJlbW92ZVNvdXJjZUJ1ZmZlcih0aGlzKTsKLSAgICAvLyBBZnRl
ciB0aGlzIG9ubHkgU291cmNlQnVmZmVyIHNob3VsZCBob2xkIGEgcmVmZXJlbmNlIHRvIHVzLCB3
aGljaCB3aWxsIGJlIGRlc3Ryb3llZCBldmVudHVhbGx5ICh3aGVuIEpTCi0gICAgLy8gR0MgcmVs
ZWFzZXMgdGhlIGxhc3QgcmVmZXJlbmNlKS4gVW50aWwgdGhlbiBTb3VyY2VCdWZmZXIgaXMgaW4g
InJlbW92ZWQiIHN0YXRlIGFuZCB3b24ndCB1c2UgU291cmNlQnVmZmVyUHJpdmF0ZS4KLSAgICBB
U1NFUlQocmVmQ291bnQoKSA9PSAxKTsKKworICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX3RyYWNr
cy52YWx1ZXMoKSkKKyAgICAgICAgdHJhY2stPnJlbW92ZSgpOworICAgIG1faGFzQmVlblJlbW92
ZWRGcm9tTWVkaWFTb3VyY2UgPSB0cnVlOwogfQogCiBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBT
b3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpyZWFkeVN0YXRlKCkgY29uc3QKQEAgLTEyNiw0
MSArMTMzLDYzIEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6Zmx1c2goY29u
c3QgQXRvbVN0cmluZyYgdHJhY2tJZCkKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAg
ICAgLy8gVGhpcyBpcyBvbmx5IGZvciBvbi10aGUtZmx5IHJlZW5xdWV1ZXMgYWZ0ZXIgYXBwZW5k
cy4gV2hlbiBzZWVraW5nLCB0aGUgc2VlayB3aWxsIGRvIGl0cyBvd24gZmx1c2guCi0gICAgaWYg
KCFtX3BsYXllclByaXZhdGUuc2Vla2luZygpKQotICAgICAgICBtX3BsYXllclByaXZhdGUucGxh
eWJhY2tQaXBlbGluZSgpLT5mbHVzaCh0cmFja0lkKTsKLX0KIAotdm9pZCBTb3VyY2VCdWZmZXJQ
cml2YXRlR1N0cmVhbWVyOjplbnF1ZXVlU2FtcGxlKFJlZjxNZWRpYVNhbXBsZT4mJiBzYW1wbGUs
IGNvbnN0IEF0b21TdHJpbmcmKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAg
bV9ub3RpZnlXaGVuUmVhZHlGb3JNb3JlU2FtcGxlcyA9IGZhbHNlOworICAgIGlmICghbV9wbGF5
ZXJQcml2YXRlLmhhc0FsbFRyYWNrcygpKSB7CisgICAgICAgIC8vIFNvdXJjZSBlbGVtZW50IGhh
cyBub3QgZW1pdHRlZCB0cmFja3MgeWV0LCBzbyB3ZSBvbmx5IG5lZWQgdG8gY2xlYXIgdGhlIHF1
ZXVlLgorICAgICAgICBNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyKiB0cmFjayA9IG1fdHJhY2tz
LmdldCh0cmFja0lkKTsKKyAgICAgICAgdHJhY2stPmNsZWFyUXVldWUoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KIAotICAgIG1fcGxheWVyUHJpdmF0ZS5wbGF5YmFja1BpcGVsaW5lKCktPmVu
cXVldWVTYW1wbGUoV1RGTW92ZShzYW1wbGUpKTsKKyAgICAvLyBTb3VyY2UgZWxlbWVudCBoYXMg
ZW1pdHRlZCB0cmFja3MsIGxldCBpdCBoYW5kbGUgdGhlIGZsdXNoLCB3aGljaCBtYXkgY2F1c2Ug
YSBwaXBlbGluZSBmbHVzaCBhcyB3ZWxsLgorICAgIHdlYktpdE1lZGlhU3JjRmx1c2gobV9wbGF5
ZXJQcml2YXRlLndlYktpdE1lZGlhU3JjKCksIHRyYWNrSWQpOwogfQogCi12b2lkIFNvdXJjZUJ1
ZmZlclByaXZhdGVHU3RyZWFtZXI6OmFsbFNhbXBsZXNJblRyYWNrRW5xdWV1ZWQoY29uc3QgQXRv
bVN0cmluZyYgdHJhY2tJZCkKK3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5x
dWV1ZVNhbXBsZShSZWY8TWVkaWFTYW1wbGU+JiYgc2FtcGxlLCBjb25zdCBBdG9tU3RyaW5nJiB0
cmFja0lkKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbV9wbGF5ZXJQcml2
YXRlLnBsYXliYWNrUGlwZWxpbmUoKS0+YWxsU2FtcGxlc0luVHJhY2tFbnF1ZXVlZCh0cmFja0lk
KTsKKworICAgIEdTVF9UUkFDRSgiZW5xdWVpbmcgc2FtcGxlIHRyYWNrSWQ9JXMgUFRTPSVmIHBy
ZXNlbnRhdGlvblNpemU9JS4wZnglLjBmIGF0ICUiIEdTVF9USU1FX0ZPUk1BVCAiIGR1cmF0aW9u
OiAlIiBHU1RfVElNRV9GT1JNQVQsCisgICAgICAgIHRyYWNrSWQuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSwgc2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCkudG9GbG9hdCgpLAorICAgICAgICBzYW1w
bGUtPnByZXNlbnRhdGlvblNpemUoKS53aWR0aCgpLCBzYW1wbGUtPnByZXNlbnRhdGlvblNpemUo
KS5oZWlnaHQoKSwKKyAgICAgICAgR1NUX1RJTUVfQVJHUyhXZWJDb3JlOjp0b0dzdENsb2NrVGlt
ZShzYW1wbGUtPnByZXNlbnRhdGlvblRpbWUoKSkpLAorICAgICAgICBHU1RfVElNRV9BUkdTKFdl
YkNvcmU6OnRvR3N0Q2xvY2tUaW1lKHNhbXBsZS0+ZHVyYXRpb24oKSkpKTsKKworICAgIEdSZWZQ
dHI8R3N0U2FtcGxlPiBnc3RTYW1wbGUgPSBzYW1wbGUtPnBsYXRmb3JtU2FtcGxlKCkuc2FtcGxl
LmdzdFNhbXBsZTsKKyAgICBBU1NFUlQoZ3N0U2FtcGxlKTsKKyAgICBBU1NFUlQoZ3N0X3NhbXBs
ZV9nZXRfYnVmZmVyKGdzdFNhbXBsZS5nZXQoKSkpOworCisgICAgTWVkaWFTb3VyY2VUcmFja0dT
dHJlYW1lciogdHJhY2sgPSBtX3RyYWNrcy5nZXQodHJhY2tJZCk7CisgICAgdHJhY2stPmVucXVl
dWVPYmplY3QoYWRvcHRHUmVmKEdTVF9NSU5JX09CSkVDVChnc3RTYW1wbGUubGVha1JlZigpKSkp
OwogfQogCi1ib29sIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OmlzUmVhZHlGb3JNb3Jl
U2FtcGxlcyhjb25zdCBBdG9tU3RyaW5nJikKK2Jvb2wgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJl
YW1lcjo6aXNSZWFkeUZvck1vcmVTYW1wbGVzKGNvbnN0IEF0b21TdHJpbmcmIHRyYWNrSWQpCiB7
Ci0gICAgcmV0dXJuIG1faXNSZWFkeUZvck1vcmVTYW1wbGVzOworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lciogdHJhY2sgPSBtX3RyYWNr
cy5nZXQodHJhY2tJZCk7CisgICAgYm9vbCByZXQgPSB0cmFjay0+aXNSZWFkeUZvck1vcmVTYW1w
bGVzKCk7CisgICAgR1NUX1RSQUNFKCJTb3VyY2VCdWZmZXJQcml2YXRlKCVwKSAtIGlzUmVhZHlG
b3JNb3JlU2FtcGxlczogJXMiLCB0aGlzLCBib29sRm9yUHJpbnRpbmcocmV0KSk7CisgICAgcmV0
dXJuIHJldDsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRSZWFk
eUZvck1vcmVTYW1wbGVzKGJvb2wgaXNSZWFkeSkKK3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdT
dHJlYW1lcjo6bm90aWZ5Q2xpZW50V2hlblJlYWR5Rm9yTW9yZVNhbXBsZXMoY29uc3QgQXRvbVN0
cmluZyYgdHJhY2tJZCkKIHsKLSAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7Ci0gICAg
bV9pc1JlYWR5Rm9yTW9yZVNhbXBsZXMgPSBpc1JlYWR5OworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lciogdHJhY2sgPSBtX3RyYWNrcy5n
ZXQodHJhY2tJZCk7CisgICAgdHJhY2stPm5vdGlmeVdoZW5SZWFkeUZvck1vcmVTYW1wbGVzKFtw
cm90ZWN0b3IgPSBtYWtlUmVmKCp0aGlzKSwgdGhpcywgdHJhY2tJZF0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0b3IgPSBXVEZNb3ZlKHByb3Rl
Y3RvciksIHRoaXMsIHRyYWNrSWRdKCkgeworICAgICAgICAgICAgaWYgKCFtX2hhc0JlZW5SZW1v
dmVkRnJvbU1lZGlhU291cmNlKQorICAgICAgICAgICAgICAgIHByb3ZpZGVNZWRpYURhdGEodHJh
Y2tJZCk7CisgICAgICAgIH0pOworICAgIH0pOwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclByaXZh
dGVHU3RyZWFtZXI6Om5vdGlmeVJlYWR5Rm9yTW9yZVNhbXBsZXMoKQordm9pZCBTb3VyY2VCdWZm
ZXJQcml2YXRlR1N0cmVhbWVyOjphbGxTYW1wbGVzSW5UcmFja0VucXVldWVkKGNvbnN0IEF0b21T
dHJpbmcmIHRyYWNrSWQpCiB7Ci0gICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOwotICAg
IHNldFJlYWR5Rm9yTW9yZVNhbXBsZXModHJ1ZSk7Ci0gICAgaWYgKG1fbm90aWZ5V2hlblJlYWR5
Rm9yTW9yZVNhbXBsZXMpCi0gICAgICAgIHByb3ZpZGVNZWRpYURhdGEobV90cmFja0lkKTsKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEdTVF9ERUJVRygiRW5xdWV1ZWluZyBFT1Mg
Zm9yIHRyYWNrICclcyciLCB0cmFja0lkLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIE1l
ZGlhU291cmNlVHJhY2tHU3RyZWFtZXIqIHRyYWNrID0gbV90cmFja3MuZ2V0KHRyYWNrSWQpOwor
ICAgIHRyYWNrLT5lbnF1ZXVlT2JqZWN0KGFkb3B0R1JlZihHU1RfTUlOSV9PQkpFQ1QoZ3N0X2V2
ZW50X25ld19lb3MoKSkpKTsKIH0KIAogdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVy
OjpzZXRBY3RpdmUoYm9vbCBpc0FjdGl2ZSkKQEAgLTE3NCwxNSArMjAzLDI3IEBAIGJvb2wgU291
cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6aXNBY3RpdmUoKSBjb25zdAogICAgIHJldHVybiBt
X2lzQWN0aXZlOwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6Om5vdGlm
eUNsaWVudFdoZW5SZWFkeUZvck1vcmVTYW1wbGVzKGNvbnN0IEF0b21TdHJpbmcmIHRyYWNrSWQp
Ci17Ci0gICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOwotICAgIG1fbm90aWZ5V2hlblJl
YWR5Rm9yTW9yZVNhbXBsZXMgPSB0cnVlOwotICAgIG1fdHJhY2tJZCA9IHRyYWNrSWQ7Ci19Ci0K
IHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkUmVjZWl2ZUluaXRpYWxpemF0
aW9uU2VnbWVudChTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21l
bnQmJiBpbml0aWFsaXphdGlvblNlZ21lbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKKyAgICBtX2hhc1JlY2VpdmVkSW5pdGlhbGl6YXRpb25TZWdt
ZW50ID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8mIHRyYWNrSW5mbyA6IGluaXRpYWxpemF0aW9uU2Vn
bWVudC52aWRlb1RyYWNrcykgeworICAgICAgICBHUmVmUHRyPEdzdENhcHM+IGluaXRpYWxDYXBz
ID0gc3RhdGljX2Nhc3Q8VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIqPih0cmFja0luZm8udHJh
Y2suZ2V0KCkpLT5pbml0aWFsQ2FwcygpOworICAgICAgICBBU1NFUlQoaW5pdGlhbENhcHMpOwor
ICAgICAgICBtX3RyYWNrcy5hZGQodHJhY2tJbmZvLnRyYWNrLT5pZCgpLCBNZWRpYVNvdXJjZVRy
YWNrR1N0cmVhbWVyOjpjcmVhdGUoVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBl
OjpWaWRlbywgdHJhY2tJbmZvLnRyYWNrLT5pZCgpLCBXVEZNb3ZlKGluaXRpYWxDYXBzKSkpOwor
ICAgIH0KKyAgICBmb3IgKGF1dG8mIHRyYWNrSW5mbyA6IGluaXRpYWxpemF0aW9uU2VnbWVudC5h
dWRpb1RyYWNrcykgeworICAgICAgICBHUmVmUHRyPEdzdENhcHM+IGluaXRpYWxDYXBzID0gc3Rh
dGljX2Nhc3Q8QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIqPih0cmFja0luZm8udHJhY2suZ2V0
KCkpLT5pbml0aWFsQ2FwcygpOworICAgICAgICBBU1NFUlQoaW5pdGlhbENhcHMpOworICAgICAg
ICBtX3RyYWNrcy5hZGQodHJhY2tJbmZvLnRyYWNrLT5pZCgpLCBNZWRpYVNvdXJjZVRyYWNrR1N0
cmVhbWVyOjpjcmVhdGUoVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpBdWRp
bywgdHJhY2tJbmZvLnRyYWNrLT5pZCgpLCBXVEZNb3ZlKGluaXRpYWxDYXBzKSkpOworICAgIH0K
KyAgICBmb3IgKGF1dG8mIHRyYWNrSW5mbyA6IGluaXRpYWxpemF0aW9uU2VnbWVudC50ZXh0VHJh
Y2tzKSB7CisgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gaW5pdGlhbENhcHMgPSBzdGF0aWNfY2Fz
dDxJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyKj4odHJhY2tJbmZvLnRyYWNrLmdldCgp
KS0+aW5pdGlhbENhcHMoKTsKKyAgICAgICAgQVNTRVJUKGluaXRpYWxDYXBzKTsKKyAgICAgICAg
bV90cmFja3MuYWRkKHRyYWNrSW5mby50cmFjay0+aWQoKSwgTWVkaWFTb3VyY2VUcmFja0dTdHJl
YW1lcjo6Y3JlYXRlKFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6VGV4dCwg
dHJhY2tJbmZvLnRyYWNrLT5pZCgpLCBXVEZNb3ZlKGluaXRpYWxDYXBzKSkpOworICAgIH0KKwor
ICAgIG1fbWVkaWFTb3VyY2UtPnN0YXJ0UGxheWJhY2tJZkhhc0FsbFRyYWNrcygpOworCiAgICAg
U291cmNlQnVmZmVyUHJpdmF0ZTo6ZGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudChXVEZN
b3ZlKGluaXRpYWxpemF0aW9uU2VnbWVudCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1NvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFt
ZXIuaAppbmRleCBjYzJhY2MwNTdjYjRhOGQ4OWYwNmY4YjcxMTYzMWMwNmViMGViZDkwLi5mMWIw
ZTk3MTQxYzc0MjllNDZiYTE0YzE1OTU0ZjFhY2VjYTYzMjdlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1NvdXJjZUJ1ZmZlclByaXZh
dGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvbXNlL1NvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuaApAQCAtNDAsMTIgKzQwLDE1
IEBACiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmgiCiAjaW5jbHVk
ZSAiU291cmNlQnVmZmVyUHJpdmF0ZS5oIgogI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGVD
bGllbnQuaCIKKyNpbmNsdWRlICJUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCIKICNpbmNsdWRlIDx3dGYvTG9nZ2VySGVs
cGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQXBwZW5kUGlwZWxpbmU7CiBj
bGFzcyBNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXI7CitjbGFzcyBNZWRpYVNvdXJjZVRyYWNr
R1N0cmVhbWVyOwogCiBjbGFzcyBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyIGZpbmFsIDog
cHVibGljIFNvdXJjZUJ1ZmZlclByaXZhdGUgewogcHVibGljOgpAQCAtNjcsMTAgKzcwLDYgQEAg
cHVibGljOgogICAgIGJvb2wgaXNSZWFkeUZvck1vcmVTYW1wbGVzKGNvbnN0IEF0b21TdHJpbmcm
KSBmaW5hbDsKICAgICB2b2lkIHNldEFjdGl2ZShib29sKSBmaW5hbDsKICAgICBib29sIGlzQWN0
aXZlKCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBub3RpZnlDbGllbnRXaGVuUmVhZHlGb3JNb3Jl
U2FtcGxlcyhjb25zdCBBdG9tU3RyaW5nJikgZmluYWw7Ci0KLSAgICB2b2lkIHNldFJlYWR5Rm9y
TW9yZVNhbXBsZXMoYm9vbCk7Ci0gICAgdm9pZCBub3RpZnlSZWFkeUZvck1vcmVTYW1wbGVzKCk7
CiAKICAgICB2b2lkIGRpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoU291cmNlQnVmZmVy
UHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50JiYsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7CiAgICAgdm9pZCBkaWRSZWNlaXZlU2FtcGxlKFJlZjxNZWRpYVNhbXBsZT4m
Jik7CkBAIC04MSw2ICs4MCw5IEBAIHB1YmxpYzoKICAgICBNZWRpYVRpbWUgY3VycmVudE1lZGlh
VGltZSgpIGNvbnN0IGZpbmFsOwogICAgIE1lZGlhVGltZSBkdXJhdGlvbigpIGNvbnN0IGZpbmFs
OwogCisgICAgYm9vbCBoYXNSZWNlaXZlZEluaXRpYWxpemF0aW9uU2VnbWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1faGFzUmVjZWl2ZWRJbml0aWFsaXphdGlvblNlZ21lbnQ7IH0KKyAgICBIYXNoTWFw
PEF0b21TdHJpbmcsIFJlZlB0cjxNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyPj46OlZhbHVlc0l0
ZXJhdG9yUmFuZ2UgdHJhY2tzKCkgeyByZXR1cm4gbV90cmFja3MudmFsdWVzKCk7IH0KKwogICAg
IENvbnRlbnRUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KIAogI2lmICFSRUxF
QVNFX0xPR19ESVNBQkxFRApAQCAtOTUsMTQgKzk3LDE4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcihNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFt
ZXIqLCBjb25zdCBDb250ZW50VHlwZSYsIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSYp
OwogCisgICAgdm9pZCBub3RpZnlDbGllbnRXaGVuUmVhZHlGb3JNb3JlU2FtcGxlcyhjb25zdCBB
dG9tU3RyaW5nJikgb3ZlcnJpZGU7CisKICAgICBNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXIq
IG1fbWVkaWFTb3VyY2U7CiAgICAgYm9vbCBtX2lzQWN0aXZlIHsgZmFsc2UgfTsKKyAgICBib29s
IG1faGFzQmVlblJlbW92ZWRGcm9tTWVkaWFTb3VyY2UgeyBmYWxzZSB9OwogICAgIENvbnRlbnRU
eXBlIG1fdHlwZTsKICAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UmIG1fcGxheWVy
UHJpdmF0ZTsKICAgICBVbmlxdWVSZWY8QXBwZW5kUGlwZWxpbmU+IG1fYXBwZW5kUGlwZWxpbmU7
Ci0gICAgYm9vbCBtX2lzUmVhZHlGb3JNb3JlU2FtcGxlcyA9IHRydWU7Ci0gICAgYm9vbCBtX25v
dGlmeVdoZW5SZWFkeUZvck1vcmVTYW1wbGVzID0gZmFsc2U7CisgICAgU291cmNlQnVmZmVyUHJp
dmF0ZUNsaWVudCogbV9zb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50IHsgbnVsbHB0ciB9OwogICAg
IEF0b21TdHJpbmcgbV90cmFja0lkOworICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUmVmUHRyPE1l
ZGlhU291cmNlVHJhY2tHU3RyZWFtZXI+PiBtX3RyYWNrczsKKyAgICBib29sIG1faGFzUmVjZWl2
ZWRJbml0aWFsaXphdGlvblNlZ21lbnQgeyBmYWxzZSB9OwogCiAjaWYgIVJFTEVBU0VfTE9HX0RJ
U0FCTEVECiAgICAgUmVmPGNvbnN0IExvZ2dlcj4gbV9sb2dnZXI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1RyYWNrUXVldWUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9UcmFja1F1
ZXVlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yNmFiY2E0NTQ1M2E2NTEyMzM0MWM5MDQ2OTBiYjA3NmU4NDk3
OTJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9UcmFja1F1ZXVlLmNwcApAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCwgMjAyMSBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJp
Z2h0IChDKSAyMDIwLCAyMDIxIElnYWxpYSwgUy5MCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRyYWNrUXVldWUuaCIKKworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIFVTRShHU1RSRUFN
RVIpCisKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X21zZV9kZWJ1Zyk7CisjZGVm
aW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfbXNlX2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworVHJhY2tRdWV1ZTo6VHJhY2tRdWV1ZShBdG9tU3RyaW5nIHRyYWNrSWQpCisgICAgOiBt
X3RyYWNrSWQodHJhY2tJZCkKK3sgfQorCit2b2lkIFRyYWNrUXVldWU6OmVucXVldWVPYmplY3Qo
R1JlZlB0cjxHc3RNaW5pT2JqZWN0PiYmIG9iamVjdCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworICAgIEFTU0VSVChHU1RfSVNfU0FNUExFKG9iamVjdC5nZXQoKSkgfHwgR1NUX0lT
X0VWRU5UKG9iamVjdC5nZXQoKSkpOworCisgICAgR1NUX1RSQUNFKCJUcmFja1F1ZXVlIGZvciAn
JXMnOiBQdXR0aW5nIG9iamVjdCBpbiB0aGUgcXVldWU6ICUiIEdTVF9QVFJfRk9STUFUICIuIG5v
dEVtcHR5Q2FsbGJhY2sgY3VycmVudGx5ICVzLiIsIG1fdHJhY2tJZC5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpLCBvYmplY3QuZ2V0KCksIG1fbm90RW1wdHlDYWxsYmFjayA/ICJzZXQsIHdpbGwgYmUg
Y2FsbGVkIiA6ICJ1bnNldCIpOworICAgIGlmICghbV9ub3RFbXB0eUNhbGxiYWNrKQorICAgICAg
ICBtX3F1ZXVlLmFwcGVuZChXVEZNb3ZlKG9iamVjdCkpOworICAgIGVsc2UgeworICAgICAgICAv
LyBJZiBhIGxvdyBsZXZlbCBjYWxsYmFjayB3YXMgZXZlciBzZXQsIGl0IGhhZCB0byBiZSBkaXNw
YXRjaGVkIHdoZW4gdGhlIHF1ZXVlIHdhcyBlbXB0eSBhdCBsYXRlc3QuCisgICAgICAgIEFTU0VS
VCghbV9sb3dMZXZlbENhbGxiYWNrKTsKKworICAgICAgICBOb3RFbXB0eUhhbmRsZXIgbm90RW1w
dHlDYWxsYmFjazsKKyAgICAgICAgc3RkOjpzd2FwKG5vdEVtcHR5Q2FsbGJhY2ssIG1fbm90RW1w
dHlDYWxsYmFjayk7CisgICAgICAgIG5vdEVtcHR5Q2FsbGJhY2soV1RGTW92ZShvYmplY3QpKTsK
KyAgICB9Cit9CisKK3ZvaWQgVHJhY2tRdWV1ZTo6Y2xlYXIoKQoreworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgbV9xdWV1ZS5jbGVhcigpOworICAgIEdTVF9ERUJVRygiVHJhY2tR
dWV1ZSBmb3IgJyVzJzogRW1wdGllZC4iLCBtX3RyYWNrSWQuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7CisgICAgLy8gTm90aWZ5IG1haW4gdGhyZWFkIG9mIGxvdyBsZXZlbCByZWFjaGVkIGlmIGl0
IHByb2NlZWRzLgorICAgIGNoZWNrTG93TGV2ZWwoKTsKK30KKwordm9pZCBUcmFja1F1ZXVlOjpm
bHVzaCgpCit7CisgICAgY2xlYXIoKTsKKyAgICAvLyBJZiB0aGVyZSB3YXMgYSBjYWxsYmFjayBp
biB0aGUgc3RyZWFtaW5nIHRocmVhZCB3YWl0aW5nIGZvciBhIHNhbXBsZSB0byBiZSBhZGRlZCwg
Y2FuY2VsIGl0LgorICAgIGlmIChtX25vdEVtcHR5Q2FsbGJhY2spIHsKKyAgICAgICAgbV9ub3RF
bXB0eUNhbGxiYWNrID0gbnVsbHB0cjsKKyAgICAgICAgR1NUX0RFQlVHKCJUcmFja1F1ZXVlIGZv
ciAnJXMnOiBub3RFbXB0eUNhbGxiYWNrIHVuc2V0LiIsIG1fdHJhY2tJZC5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgVHJhY2tRdWV1ZTo6bm90aWZ5V2hlbkxvd0xl
dmVsKExvd0xldmVsSGFuZGxlciYmIGxvd0xldmVsQ2FsbGJhY2spCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBHU1RfVFJBQ0UoIlRyYWNrUXVldWUgZm9yICclcyc6IFNldHRp
bmcgbG93TGV2ZWxDYWxsYmFjayVzLiIsIG1fdHJhY2tJZC5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
LAorICAgICAgICBtX2xvd0xldmVsQ2FsbGJhY2sgPyAiIChwcmV2aW91cyBjYWxsYmFjayB3aWxs
IGJlIGRpc2NhcmRlZCkiIDogIiIpOworICAgIG1fbG93TGV2ZWxDYWxsYmFjayA9IFdURk1vdmUo
bG93TGV2ZWxDYWxsYmFjayk7CisgICAgY2hlY2tMb3dMZXZlbCgpOworfQorCitHUmVmUHRyPEdz
dE1pbmlPYmplY3Q+IFRyYWNrUXVldWU6OnBvcCgpCit7CisgICAgQVNTRVJUKCFpc0VtcHR5KCkp
OworICAgIEdSZWZQdHI8R3N0TWluaU9iamVjdD4gb2JqZWN0ID0gbV9xdWV1ZS50YWtlRmlyc3Qo
KTsKKyAgICBjaGVja0xvd0xldmVsKCk7CisgICAgcmV0dXJuIG9iamVjdDsKK30KKwordm9pZCBU
cmFja1F1ZXVlOjpub3RpZnlXaGVuTm90RW1wdHkoTm90RW1wdHlIYW5kbGVyJiYgbm90RW1wdHlD
YWxsYmFjaykKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1f
bm90RW1wdHlDYWxsYmFjayk7CisgICAgbV9ub3RFbXB0eUNhbGxiYWNrID0gV1RGTW92ZShub3RF
bXB0eUNhbGxiYWNrKTsKKyAgICBHU1RfVFJBQ0UoIlRyYWNrUXVldWUgZm9yICclcyc6IG5vdEVt
cHR5Q2FsbGJhY2sgc2V0LiIsIG1fdHJhY2tJZC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKK30K
Kwordm9pZCBUcmFja1F1ZXVlOjpyZXNldE5vdEVtcHR5SGFuZGxlcigpCit7CisgICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX25vdEVtcHR5Q2FsbGJhY2spCisgICAgICAg
IHJldHVybjsKKyAgICBtX25vdEVtcHR5Q2FsbGJhY2sgPSBudWxscHRyOworICAgIEdTVF9UUkFD
RSgiVHJhY2tRdWV1ZSBmb3IgJyVzJzogbm90RW1wdHlDYWxsYmFjayByZXNldC4iLCBtX3RyYWNr
SWQuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgVHJhY2tRdWV1ZTo6Y2hlY2tM
b3dMZXZlbCgpCit7CisgICAgaWYgKCFtX2xvd0xldmVsQ2FsbGJhY2sgfHwgZHVyYXRpb25FbnF1
ZXVlZCgpID4gc19kdXJhdGlvbkVucXVldWVkTG93V2F0ZXJMZXZlbCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgTG93TGV2ZWxIYW5kbGVyIGxvd0xldmVsQ2FsbGJhY2s7CisgICAgc3RkOjpzd2Fw
KGxvd0xldmVsQ2FsbGJhY2ssIG1fbG93TGV2ZWxDYWxsYmFjayk7CisgICAgR1NUX1RSQUNFKCJU
cmFja1F1ZXVlIGZvciAnJXMnOiBsb3dMZXZlbENhbGxiYWNrIGNhbGxlZC4iLCBtX3RyYWNrSWQu
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgbG93TGV2ZWxDYWxsYmFjaygpOworfQorCitH
c3RDbG9ja1RpbWUgVHJhY2tRdWV1ZTo6ZHVyYXRpb25FbnF1ZXVlZCgpIGNvbnN0Cit7CisgICAg
Ly8gRmluZCB0aGUgZmlyc3QgYW5kIGxhc3QgR3N0U2FtcGxlIGluIHRoZSBxdWV1ZSBhbmQgc3Vi
dHJhY3QgdGhlaXIgRFRTLgorCisgICAgYXV0byBmcm9udEl0ZXIgPSBzdGQ6OmZpbmRfaWYobV9x
dWV1ZS5iZWdpbigpLCBtX3F1ZXVlLmVuZCgpLCBbXShjb25zdCBHUmVmUHRyPEdzdE1pbmlPYmpl
Y3Q+JiBvYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIEdTVF9JU19TQU1QTEUob2JqZWN0LmdldCgp
KTsKKyAgICB9KTsKKworICAgIC8vIElmIHRoZXJlIGFyZSBubyBzYW1wbGVzIGluIHRoZSBxdWV1
ZSwgdGhhdCBtYWtlcyB0b3RhbCBkdXJhdGlvbiBvZiBlbnF1ZXVlZCBmcmFtZXMgb2YgemVyby4K
KyAgICBpZiAoZnJvbnRJdGVyID09IG1fcXVldWUuZW5kKCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgYXV0byBiYWNrSXRlciA9IHN0ZDo6ZmluZF9pZihtX3F1ZXVlLnJiZWdpbigpLCBtX3F1
ZXVlLnJlbmQoKSwgW10oY29uc3QgR1JlZlB0cjxHc3RNaW5pT2JqZWN0PiYgb2JqZWN0KSB7Cisg
ICAgICAgIHJldHVybiBHU1RfSVNfU0FNUExFKG9iamVjdC5nZXQoKSk7CisgICAgfSk7CisKKyAg
ICBjb25zdCBHc3RCdWZmZXIqIGZyb250ID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKEdTVF9TQU1Q
TEUoZnJvbnRJdGVyLT5nZXQoKSkpOworICAgIGNvbnN0IEdzdEJ1ZmZlciogYmFjayA9IGdzdF9z
YW1wbGVfZ2V0X2J1ZmZlcihHU1RfU0FNUExFKGJhY2tJdGVyLT5nZXQoKSkpOworICAgIHJldHVy
biBHU1RfQlVGRkVSX0RUU19PUl9QVFMoYmFjaykgLSBHU1RfQlVGRkVSX0RUU19PUl9QVFMoZnJv
bnQpOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvVHJhY2tRdWV1ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9UcmFja1F1ZXVlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDM2
YjY2YTA4MzFkZmEwNTNlMzliMzQ0ZjE5Mzg4M2U2YWVlZTNkOQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvVHJhY2tRdWV1
ZS5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjEgTWV0
cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMSBJZ2FsaWEs
IFMuTAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgVVNFKEdTVFJFQU1F
UikKKworI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+
CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
VHJhY2tRdWV1ZSB7CitwdWJsaWM6CisgICAgVHJhY2tRdWV1ZShBdG9tU3RyaW5nIHRyYWNrSWQp
OworCisgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoR1JlZlB0cjxHc3RNaW5pT2JqZWN0
PiYmKT4gTm90RW1wdHlIYW5kbGVyOworICAgIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkKCk+
IExvd0xldmVsSGFuZGxlcjsKKworICAgIC8vIE5vdGU6IFRoZSBUcmFja1F1ZXVlIG1ldGhvZHMg
YXJlIG5vdCB0aHJlYWQtc2FmZS4gVHJhY2tRdWV1ZSBtdXN0IGFsd2F5cyBiZSB3cmFwcGVkIGlu
IGEgRGF0YU11dGV4PD4uCisKKyAgICAvLyBGb3IgcHJvZHVjZXIgdGhyZWFkIChtYWluLXRocmVh
ZCk6CisgICAgdm9pZCBlbnF1ZXVlT2JqZWN0KEdSZWZQdHI8R3N0TWluaU9iamVjdD4mJik7Cisg
ICAgYm9vbCBpc0Z1bGwoKSBjb25zdCB7IHJldHVybiBkdXJhdGlvbkVucXVldWVkKCkgPj0gc19k
dXJhdGlvbkVucXVldWVkSGlnaFdhdGVyTGV2ZWw7IH0KKyAgICB2b2lkIG5vdGlmeVdoZW5Mb3dM
ZXZlbChMb3dMZXZlbEhhbmRsZXImJik7CisgICAgdm9pZCBjbGVhcigpOworICAgIHZvaWQgZmx1
c2goKTsKKworICAgIC8vIEZvciBjb25zdW1lciB0aHJlYWQ6CisgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gbV9xdWV1ZS5pc0VtcHR5KCk7IH0KKyAgICBHUmVmUHRyPEdzdE1pbmlP
YmplY3Q+IHBvcCgpOworICAgIHZvaWQgbm90aWZ5V2hlbk5vdEVtcHR5KE5vdEVtcHR5SGFuZGxl
ciYmKTsKKyAgICBib29sIGhhc05vdEVtcHR5SGFuZGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fbm90
RW1wdHlDYWxsYmFjayAhPSBudWxscHRyOyB9CisgICAgdm9pZCByZXNldE5vdEVtcHR5SGFuZGxl
cigpOworCitwcml2YXRlOgorICAgIC8vIFRoZSBwb2ludCBvZiBoYXZpbmcgYSBxdWV1ZSBmb3Ig
V2ViS2l0TWVkaWFTb3VyY2UgaXMgdG8gbGltaXQgdGhlIG51bWJlciBvZiBjb250ZXh0IHN3aXRj
aGVzIHBlciBzZWNvbmQuCisgICAgLy8gSWYgd2UgaGFkIG5vIHF1ZXVlLCB0aGUgbWFpbiB0aHJl
YWQgd291bGQgaGF2ZSB0byBiZSBhd2FrZW4gZm9yIGV2ZXJ5IGZyYW1lLiBPbiB0aGUgb3RoZXIg
aGFuZCwgaWYgdGhlCisgICAgLy8gcXVldWUgaGFkIHVubGltaXRlZCBzaXplIFdlYktpdCB3b3Vs
ZCBlbmQgdXAgcmVxdWVzdGluZyBmbHVzaGVzIG1vcmUgb2Z0ZW4gdGhhbiBuZWNlc3Nhcnkgd2hl
biBmcmFtZXMKKyAgICAvLyBpbiB0aGUgZnV0dXJlIGFyZSByZS1hcHBlbmRlZC4gQXMgYSBzd2Vl
dCBzcG90IGJldHdlZW4gdGhlc2UgZXh0cmVtZXMgd2UgY2hvb3NlIHRvIGFsbG93IGVucXVldWVp
bmcgYQorICAgIC8vIGZldyBzZWNvbmRzIHdvcnRoIG9mIHNhbXBsZXMuCisKKyAgICAvLyBgaXNS
ZWFkeUZvck1vcmVTYW1wbGVzYCBmb2xsb3dzIHRoZSBjbGFzc2ljYWwgdHdvIHdhdGVyIGxldmVs
cyBzdHJhdGVneTogaW5pdGlhbGx5IGl0J3MgdHJ1ZSB1bnRpbCB0aGUKKyAgICAvLyBoaWdoIHdh
dGVyIGxldmVsIGlzIHJlYWNoZWQsIHRoZW4gaXQgYmVjb21lcyBmYWxzZSB1bnRpbCB0aGUgcXVl
dWUgZHJhaW5zIGRvd24gdG8gdGhlIGxvdyB3YXRlciBsZXZlbAorICAgIC8vIGFuZCB0aGUgY3lj
bGUgcmVwZWF0cy4gVGhpcyB3YXkgd2UgYXZvaWQgc3RhbGxzIGFuZCBtaW5pbWl6ZSBjb250ZXh0
IHN3aXRjaGVzLgorCisgICAgc3RhdGljIGNvbnN0IEdzdENsb2NrVGltZSBzX2R1cmF0aW9uRW5x
dWV1ZWRIaWdoV2F0ZXJMZXZlbCA9IDUgKiBHU1RfU0VDT05EOworICAgIHN0YXRpYyBjb25zdCBH
c3RDbG9ja1RpbWUgc19kdXJhdGlvbkVucXVldWVkTG93V2F0ZXJMZXZlbCA9IDIgKiBHU1RfU0VD
T05EOworCisgICAgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uRW5xdWV1ZWQoKSBjb25zdDsKKyAgICB2
b2lkIGNoZWNrTG93TGV2ZWwoKTsKKworICAgIEF0b21TdHJpbmcgbV90cmFja0lkOworICAgIERl
cXVlPEdSZWZQdHI8R3N0TWluaU9iamVjdD4+IG1fcXVldWU7CisgICAgTG93TGV2ZWxIYW5kbGVy
IG1fbG93TGV2ZWxDYWxsYmFjazsKKyAgICBOb3RFbXB0eUhhbmRsZXIgbV9ub3RFbXB0eUNhbGxi
YWNrOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9XZWJLaXRN
ZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKaW5kZXggZGI4MzEyNDQyZGY1YjA1NzVlYzFjYzBkOTc2
Y2VkM2MwM2U2ZGY1OS4uZDczN2Q2ZmE2ZGYwOWU4MTQyNzQ4NThlZDRlZjc0ZWM3ZWM1NzJhMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21z
ZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5j
cHAKQEAgLTMsOCArMyw4IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDEzIENvbGxhYm9yYSBMdGQu
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDEzIE9yYW5nZQogICogIENvcHlyaWdodCAoQykgMjAxNCwg
MjAxNSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotICogIENv
cHlyaWdodCAoQykgMjAxNSwgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgotICogIENvcHly
aWdodCAoQykgMjAxNSwgMjAxNiBJZ2FsaWEsIFMuTAorICogIENvcHlyaWdodCAoQykgMjAxNSwg
MjAxNiwgMjAxOCwgMjAxOSwgMjAyMCwgMjAyMSBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICog
IENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiwgMjAxOCwgMjAxOSwgMjAyMCwgMjAyMSBJZ2FsaWEs
IFMuTAogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsMTcyICsyNCwyMTkgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgogCi0j
aW5jbHVkZSAiUGxheWJhY2tQaXBlbGluZS5oIgotCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBFTkFC
TEUoTUVESUFfU09VUkNFKSAmJiBVU0UoR1NUUkVBTUVSKQogCi0jaW5jbHVkZSAiQXVkaW9UcmFj
a1ByaXZhdGVHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKLSNpbmNs
dWRlICJNZWRpYURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFLmgiCi0jaW5jbHVkZSAiTWVkaWFTYW1wbGUuaCIKLSNpbmNsdWRlICJNZWRpYVNv
dXJjZVByaXZhdGVHU3RyZWFtZXIuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2lu
Y2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuaCIKLSNpbmNsdWRlICJUaW1lUmFu
Z2VzLmgiCisjaW5jbHVkZSAiTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lci5oIgogI2luY2x1ZGUg
IlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCi0jaW5jbHVkZSAiV2ViS2l0TWVkaWFTb3Vy
Y2VHU3RyZWFtZXJQcml2YXRlLmgiCiAKLSNpbmNsdWRlIDxnc3QvcGJ1dGlscy9wYnV0aWxzLmg+
Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisjaW5jbHVkZSA8Z3N0L2dzdC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvRGF0YU11dGV4Lmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkRGF0YS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIAordXNpbmcgbmFtZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCiBHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDKHdlYmtpdF9tZWRpYV9zcmNfZGVi
dWcpOwogI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X21lZGlhX3NyY19kZWJ1ZwogCiAj
ZGVmaW5lIHdlYmtpdF9tZWRpYV9zcmNfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwogI2RlZmlu
ZSBXRUJLSVRfTUVESUFfU1JDX0NBVEVHT1JZX0lOSVQgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQo
d2Via2l0X21lZGlhX3NyY19kZWJ1ZywgIndlYmtpdG1lZGlhc3JjIiwgMCwgIndlYnNyYyBlbGVt
ZW50Iik7CiAKLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNUZW1wbGF0ZSA9IEdTVF9T
VEFUSUNfUEFEX1RFTVBMQVRFKCJzcmNfJXUiLCBHU1RfUEFEX1NSQywKK3N0YXRpYyBHc3RTdGF0
aWNQYWRUZW1wbGF0ZSBzcmNUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJzcmNf
JXMiLCBHU1RfUEFEX1NSQywKICAgICBHU1RfUEFEX1NPTUVUSU1FUywgR1NUX1NUQVRJQ19DQVBT
X0FOWSk7CiAKLXN0YXRpYyB2b2lkIGVuYWJsZWRBcHBzcmNOZWVkRGF0YShHc3RBcHBTcmMqLCBn
dWludCwgZ3BvaW50ZXIpOwotc3RhdGljIHZvaWQgZW5hYmxlZEFwcHNyY0Vub3VnaERhdGEoR3N0
QXBwU3JjKiwgZ3BvaW50ZXIpOwotc3RhdGljIGdib29sZWFuIGVuYWJsZWRBcHBzcmNTZWVrRGF0
YShHc3RBcHBTcmMqLCBndWludDY0LCBncG9pbnRlcik7Ci0KLXN0YXRpYyB2b2lkIGRpc2FibGVk
QXBwc3JjTmVlZERhdGEoR3N0QXBwU3JjKiwgZ3VpbnQsIGdwb2ludGVyKSB7IH07Ci1zdGF0aWMg
dm9pZCBkaXNhYmxlZEFwcHNyY0Vub3VnaERhdGEoR3N0QXBwU3JjKiwgZ3BvaW50ZXIpIHsgfTsK
LXN0YXRpYyBnYm9vbGVhbiBkaXNhYmxlZEFwcHNyY1NlZWtEYXRhKEdzdEFwcFNyYyosIGd1aW50
NjQsIGdwb2ludGVyKQotewotICAgIHJldHVybiBGQUxTRTsKLX07Ci0KLUdzdEFwcFNyY0NhbGxi
YWNrcyBlbmFibGVkQXBwc3JjQ2FsbGJhY2tzID0gewotICAgIGVuYWJsZWRBcHBzcmNOZWVkRGF0
YSwKLSAgICBlbmFibGVkQXBwc3JjRW5vdWdoRGF0YSwKLSAgICBlbmFibGVkQXBwc3JjU2Vla0Rh
dGEsCi0gICAgeyAwIH0KLX07Ci0KLUdzdEFwcFNyY0NhbGxiYWNrcyBkaXNhYmxlZEFwcHNyY0Nh
bGxiYWNrcyA9IHsKLSAgICBkaXNhYmxlZEFwcHNyY05lZWREYXRhLAotICAgIGRpc2FibGVkQXBw
c3JjRW5vdWdoRGF0YSwKLSAgICBkaXNhYmxlZEFwcHNyY1NlZWtEYXRhLAotICAgIHsgMCB9Citl
bnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9OX0FVRElPLAorICAgIFBST1BfTl9WSURFTywK
KyAgICBQUk9QX05fVEVYVCwKKyAgICBQUk9QX0xBU1QKIH07CiAKLXN0YXRpYyBTdHJlYW0qIGdl
dFN0cmVhbUJ5QXBwc3JjKFdlYktpdE1lZGlhU3JjKiwgR3N0RWxlbWVudCopOwotc3RhdGljIHZv
aWQgc2Vla05lZWRzRGF0YU1haW5UaHJlYWQoV2ViS2l0TWVkaWFTcmMqKTsKLXN0YXRpYyB2b2lk
IG5vdGlmeVJlYWR5Rm9yTW9yZVNhbXBsZXNNYWluVGhyZWFkKFdlYktpdE1lZGlhU3JjKiwgU3Ry
ZWFtKik7CitzdHJ1Y3QgU3RyZWFtOwogCi1zdGF0aWMgdm9pZCBlbmFibGVkQXBwc3JjTmVlZERh
dGEoR3N0QXBwU3JjKiBhcHBzcmMsIGd1aW50LCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBX
ZWJLaXRNZWRpYVNyYyogd2ViS2l0TWVkaWFTcmMgPSBzdGF0aWNfY2FzdDxXZWJLaXRNZWRpYVNy
Yyo+KHVzZXJEYXRhKTsKLSAgICBBU1NFUlQoV0VCS0lUX0lTX01FRElBX1NSQyh3ZWJLaXRNZWRp
YVNyYykpOwotCi0gICAgR1NUX09CSkVDVF9MT0NLKHdlYktpdE1lZGlhU3JjKTsKLSAgICBPblNl
ZWtEYXRhQWN0aW9uIGFwcHNyY1NlZWtEYXRhTmV4dEFjdGlvbiA9IHdlYktpdE1lZGlhU3JjLT5w
cml2LT5hcHBzcmNTZWVrRGF0YU5leHRBY3Rpb247Ci0gICAgU3RyZWFtKiBhcHBzcmNTdHJlYW0g
PSBnZXRTdHJlYW1CeUFwcHNyYyh3ZWJLaXRNZWRpYVNyYywgR1NUX0VMRU1FTlQoYXBwc3JjKSk7
Ci0gICAgYm9vbCBhbGxBcHBzcmNOZWVkRGF0YUFmdGVyU2VlayA9IGZhbHNlOwotCi0gICAgaWYg
KHdlYktpdE1lZGlhU3JjLT5wcml2LT5hcHBzcmNTZWVrRGF0YUNvdW50ID4gMCkgewotICAgICAg
ICBpZiAoYXBwc3JjU3RyZWFtICYmICFhcHBzcmNTdHJlYW0tPmFwcHNyY05lZWREYXRhRmxhZykg
ewotICAgICAgICAgICAgKyt3ZWJLaXRNZWRpYVNyYy0+cHJpdi0+YXBwc3JjTmVlZERhdGFDb3Vu
dDsKLSAgICAgICAgICAgIGFwcHNyY1N0cmVhbS0+YXBwc3JjTmVlZERhdGFGbGFnID0gdHJ1ZTsK
LSAgICAgICAgfQotICAgICAgICBpbnQgbnVtQXBwc3JjcyA9IHdlYktpdE1lZGlhU3JjLT5wcml2
LT5zdHJlYW1zLnNpemUoKTsKLSAgICAgICAgaWYgKHdlYktpdE1lZGlhU3JjLT5wcml2LT5hcHBz
cmNTZWVrRGF0YUNvdW50ID09IG51bUFwcHNyY3MgJiYgd2ViS2l0TWVkaWFTcmMtPnByaXYtPmFw
cHNyY05lZWREYXRhQ291bnQgPT0gbnVtQXBwc3JjcykgewotICAgICAgICAgICAgR1NUX0RFQlVH
X09CSkVDVCh3ZWJLaXRNZWRpYVNyYywgIkFsbCBuZWVkRGF0YXMgY29tcGxldGVkIik7Ci0gICAg
ICAgICAgICBhbGxBcHBzcmNOZWVkRGF0YUFmdGVyU2VlayA9IHRydWU7Ci0gICAgICAgICAgICB3
ZWJLaXRNZWRpYVNyYy0+cHJpdi0+YXBwc3JjU2Vla0RhdGFDb3VudCA9IDA7Ci0gICAgICAgICAg
ICB3ZWJLaXRNZWRpYVNyYy0+cHJpdi0+YXBwc3JjTmVlZERhdGFDb3VudCA9IDA7Ci0gICAgICAg
ICAgICB3ZWJLaXRNZWRpYVNyYy0+cHJpdi0+YXBwc3JjU2Vla0RhdGFOZXh0QWN0aW9uID0gTm90
aGluZzsKLQotICAgICAgICAgICAgZm9yIChTdHJlYW0qIHN0cmVhbSA6IHdlYktpdE1lZGlhU3Jj
LT5wcml2LT5zdHJlYW1zKQotICAgICAgICAgICAgICAgIHN0cmVhbS0+YXBwc3JjTmVlZERhdGFG
bGFnID0gZmFsc2U7Ci0gICAgICAgIH0KK3N0cnVjdCBXZWJLaXRNZWRpYVNyY1ByaXZhdGUgewor
ICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUmVmUHRyPFN0cmVhbT4+IHN0cmVhbXM7CisgICAgU3Ry
ZWFtKiBzdHJlYW1CeU5hbWUoY29uc3QgQXRvbVN0cmluZyYgbmFtZSkKKyAgICB7CisgICAgICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIFN0cmVhbSogc3RyZWFtID0gc3RyZWFt
cy5nZXQobmFtZSk7CisgICAgICAgIEFTU0VSVChzdHJlYW0pOworICAgICAgICByZXR1cm4gc3Ry
ZWFtOwogICAgIH0KLSAgICBHU1RfT0JKRUNUX1VOTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CiAKLSAg
ICBpZiAoYWxsQXBwc3JjTmVlZERhdGFBZnRlclNlZWspIHsKLSAgICAgICAgR1NUX0RFQlVHX09C
SkVDVCh3ZWJLaXRNZWRpYVNyYywgIkFsbCBleHBlY3RlZCBhcHBzcmNTZWVrRGF0YSgpIGFuZCBh
cHBzcmNOZWVkRGF0YSgpIGNhbGxzIHBlcmZvcm1lZC4gUnVubmluZyBuZXh0IGFjdGlvbiAoJWQp
Iiwgc3RhdGljX2Nhc3Q8aW50PihhcHBzcmNTZWVrRGF0YU5leHRBY3Rpb24pKTsKKyAgICAvLyBV
c2VkIGZvciBzdHJlYW0tc3RhcnQgZXZlbnRzLCBzaGFyZWQgYnkgYWxsIHN0cmVhbXMuCisgICAg
Y29uc3QgdW5zaWduZWQgZ3JvdXBJZCB7IGdzdF91dGlsX2dyb3VwX2lkX25leHQoKSB9OwogCi0g
ICAgICAgIHN3aXRjaCAoYXBwc3JjU2Vla0RhdGFOZXh0QWN0aW9uKSB7Ci0gICAgICAgIGNhc2Ug
TWVkaWFTb3VyY2VTZWVrVG9UaW1lOgotICAgICAgICAgICAgd2ViS2l0TWVkaWFTcmMtPnByaXYt
Pm5vdGlmaWVyLT5ub3RpZnkoV2ViS2l0TWVkaWFTcmNNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpT
ZWVrTmVlZHNEYXRhLCBbd2ViS2l0TWVkaWFTcmNdIHsKLSAgICAgICAgICAgICAgICBzZWVrTmVl
ZHNEYXRhTWFpblRocmVhZCh3ZWJLaXRNZWRpYVNyYyk7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5vdGhpbmc6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoYXBwc3JjU2Vla0RhdGFOZXh0QWN0aW9uID09IE5v
dGhpbmcpIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIod2ViS2l0TWVkaWFTcmMtPnByaXYt
PnN0cmVhbUxvY2spOworICAgIC8vIFNldCBvbmNlIHdoZW4gdGhlIHNvdXJjZSBpcyBzdGFydGVk
LiBOb3QgY2hhbmdlZCBhZnRlci4KKyAgICBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+IGNv
bGxlY3Rpb247CisgICAgYm9vbCBpc1N0YXJ0ZWQoKSB7IHJldHVybiBjb2xsZWN0aW9uOyB9CiAK
LSAgICAgICAgR1NUX09CSkVDVF9MT0NLKHdlYktpdE1lZGlhU3JjKTsKKyAgICAvLyBDaGFuZ2Vk
IG9uIHNlZWtzLgorICAgIEdzdENsb2NrVGltZSBzdGFydFRpbWUgeyAwIH07CisgICAgZG91Ymxl
IHJhdGUgeyAxLjAgfTsKIAotICAgICAgICAvLyBTZWFyY2ggYWdhaW4gZm9yIHRoZSBTdHJlYW0s
IGp1c3QgaW4gY2FzZSBpdCB3YXMgcmVtb3ZlZCBiZXR3ZWVuIHRoZSBwcmV2aW91cyBsb2NrIGFu
ZCB0aGlzIG9uZS4KLSAgICAgICAgYXBwc3JjU3RyZWFtID0gZ2V0U3RyZWFtQnlBcHBzcmMod2Vi
S2l0TWVkaWFTcmMsIEdTVF9FTEVNRU5UKGFwcHNyYykpOworICAgIC8vIE9ubHkgdXNlZCBieSBV
UkkgSGFuZGxlciBBUEkgaW1wbGVtZW50YXRpb24uCisgICAgR1VuaXF1ZVB0cjxjaGFyPiB1cmk7
Cit9OwogCi0gICAgICAgIGlmIChhcHBzcmNTdHJlYW0gJiYgYXBwc3JjU3RyZWFtLT50eXBlICE9
IFdlYkNvcmU6OkludmFsaWQpCi0gICAgICAgICAgICB3ZWJLaXRNZWRpYVNyYy0+cHJpdi0+bm90
aWZpZXItPm5vdGlmeShXZWJLaXRNZWRpYVNyY01haW5UaHJlYWROb3RpZmljYXRpb246OlJlYWR5
Rm9yTW9yZVNhbXBsZXMsIFt3ZWJLaXRNZWRpYVNyYywgYXBwc3JjU3RyZWFtXSB7Ci0gICAgICAg
ICAgICAgICAgbm90aWZ5UmVhZHlGb3JNb3JlU2FtcGxlc01haW5UaHJlYWQod2ViS2l0TWVkaWFT
cmMsIGFwcHNyY1N0cmVhbSk7Ci0gICAgICAgICAgICB9KTsKK3N0YXRpYyB2b2lkIHdlYktpdE1l
ZGlhU3JjVXJpSGFuZGxlckluaXQoZ3BvaW50ZXIsIGdwb2ludGVyKTsKK3N0YXRpYyB2b2lkIHdl
YktpdE1lZGlhU3JjRmluYWxpemUoR09iamVjdCopOworc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0
dXJuIHdlYktpdE1lZGlhU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCosIEdzdFN0YXRlQ2hhbmdl
KTsKK3N0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYVNyY0FjdGl2YXRlTW9kZShHc3RQYWQqLCBH
c3RPYmplY3QqLCBHc3RQYWRNb2RlLCBnYm9vbGVhbiBhY3RpdmF0ZSk7CitzdGF0aWMgdm9pZCB3
ZWJLaXRNZWRpYVNyY0xvb3Aodm9pZCopOworc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNUZWFy
RG93blN0cmVhbShXZWJLaXRNZWRpYVNyYyogc291cmNlLCBjb25zdCBBdG9tU3RyaW5nJiBuYW1l
KTsKK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjR2V0UHJvcGVydHkoR09iamVjdCosIHVuc2ln
bmVkIHByb3BJZCwgR1ZhbHVlKiwgR1BhcmFtU3BlYyopOworc3RhdGljIHZvaWQgd2ViS2l0TWVk
aWFTcmNTdHJlYW1GbHVzaChTdHJlYW0qLCBib29sIGlzU2Vla2luZ0ZsdXNoKTsKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJLaXRNZWRpYVNyY1NlbmRFdmVudChHc3RFbGVtZW50KiwgR3N0RXZlbnQqKTsK
IAotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyh3ZWJLaXRNZWRpYVNyYyk7Ci0gICAgfQotfQor
I2RlZmluZSB3ZWJraXRfbWVkaWFfc3JjX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKIAotc3Rh
dGljIHZvaWQgZW5hYmxlZEFwcHNyY0Vub3VnaERhdGEoR3N0QXBwU3JjICphcHBzcmMsIGdwb2lu
dGVyIHVzZXJEYXRhKQotewotICAgIC8vIE5vIG5lZWQgdG8gbG9jayBvbiB3ZWJLaXRNZWRpYVNy
Yywgd2UncmUgb24gdGhlIG1haW4gdGhyZWFkIGFuZCBub2JvZHkgaXMgZ29pbmcgdG8gcmVtb3Zl
IHRoZSBzdHJlYW0gaW4gdGhlIG1lYW50aW1lLgotICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVh
ZCgpKTsKK3N0cnVjdCBXZWJLaXRNZWRpYVNyY1BhZFByaXZhdGUgeworICAgIFJlZlB0cjxTdHJl
YW0+IHN0cmVhbTsKK307CiAKLSAgICBXZWJLaXRNZWRpYVNyYyogd2ViS2l0TWVkaWFTcmMgPSBz
dGF0aWNfY2FzdDxXZWJLaXRNZWRpYVNyYyo+KHVzZXJEYXRhKTsKLSAgICBBU1NFUlQoV0VCS0lU
X0lTX01FRElBX1NSQyh3ZWJLaXRNZWRpYVNyYykpOwotICAgIFN0cmVhbSogc3RyZWFtID0gZ2V0
U3RyZWFtQnlBcHBzcmMod2ViS2l0TWVkaWFTcmMsIEdTVF9FTEVNRU5UKGFwcHNyYykpOworc3Ry
dWN0IFdlYktpdE1lZGlhU3JjUGFkIHsKKyAgICBHc3RQYWQgcGFyZW50OworICAgIFdlYktpdE1l
ZGlhU3JjUGFkUHJpdmF0ZSogcHJpdjsKK307CiAKLSAgICAvLyBUaGlzIGNhbGxiYWNrIG1pZ2h0
IGhhdmUgYmVlbiBzY2hlZHVsZWQgZnJvbSBhIGNoaWxkIHRocmVhZCBiZWZvcmUgdGhlIHN0cmVh
bSB3YXMgcmVtb3ZlZC4KLSAgICAvLyBUaGVuLCB0aGUgcmVtb3ZhbCBjb2RlIG1pZ2h0IGhhdmUg
cnVuLCBhbmQgbGF0ZXIgdGhpcyBjYWxsYmFjay4KLSAgICAvLyBUaGlzIGNoZWNrIHNvbHZlcyB0
aGUgcmFjZSBjb25kaXRpb24uCi0gICAgaWYgKCFzdHJlYW0gfHwgc3RyZWFtLT50eXBlID09IFdl
YkNvcmU6OkludmFsaWQpCi0gICAgICAgIHJldHVybjsKK3N0cnVjdCBXZWJLaXRNZWRpYVNyY1Bh
ZENsYXNzIHsKKyAgICBHc3RQYWRDbGFzcyBwYXJlbnQ7Cit9OworCituYW1lc3BhY2UgV1RGIHsK
IAotICAgIHN0cmVhbS0+c291cmNlQnVmZmVyLT5zZXRSZWFkeUZvck1vcmVTYW1wbGVzKGZhbHNl
KTsKK3RlbXBsYXRlPD4gR1JlZlB0cjxXZWJLaXRNZWRpYVNyY1BhZD4gYWRvcHRHUmVmKFdlYktp
dE1lZGlhU3JjUGFkKiBwdHIpCit7CisgICAgQVNTRVJUKCFwdHIgfHwgIWdfb2JqZWN0X2lzX2Zs
b2F0aW5nKHB0cikpOworICAgIHJldHVybiBHUmVmUHRyPFdlYktpdE1lZGlhU3JjUGFkPihwdHIs
IEdSZWZQdHJBZG9wdCk7CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiBlbmFibGVkQXBwc3JjU2Vla0Rh
dGEoR3N0QXBwU3JjKiwgZ3VpbnQ2NCwgZ3BvaW50ZXIgdXNlckRhdGEpCit0ZW1wbGF0ZTw+IFdl
YktpdE1lZGlhU3JjUGFkKiByZWZHUHRyPFdlYktpdE1lZGlhU3JjUGFkPihXZWJLaXRNZWRpYVNy
Y1BhZCogcHRyKQogewotICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAo
cHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZl9zaW5rKEdTVF9PQkpFQ1QocHRyKSk7CiAKLSAg
ICBXZWJLaXRNZWRpYVNyYyogd2ViS2l0TWVkaWFTcmMgPSBzdGF0aWNfY2FzdDxXZWJLaXRNZWRp
YVNyYyo+KHVzZXJEYXRhKTsKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZTw+IHZvaWQg
ZGVyZWZHUHRyPFdlYktpdE1lZGlhU3JjUGFkPihXZWJLaXRNZWRpYVNyY1BhZCogcHRyKQorewor
ICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYocHRyKTsKK30KIAotICAgIEFT
U0VSVChXRUJLSVRfSVNfTUVESUFfU1JDKHdlYktpdE1lZGlhU3JjKSk7Cit9IC8vIG5hbWVzcGFj
ZSBXVEYKIAotICAgIEdTVF9PQkpFQ1RfTE9DSyh3ZWJLaXRNZWRpYVNyYyk7Ci0gICAgd2ViS2l0
TWVkaWFTcmMtPnByaXYtPmFwcHNyY1NlZWtEYXRhQ291bnQrKzsKLSAgICBHU1RfT0JKRUNUX1VO
TE9DSyh3ZWJLaXRNZWRpYVNyYyk7CitzdGF0aWMgR1R5cGUgd2Via2l0X21lZGlhX3NyY19wYWRf
Z2V0X3R5cGUoKTsKK1dFQktJVF9ERUZJTkVfVFlQRShXZWJLaXRNZWRpYVNyY1BhZCwgd2Via2l0
X21lZGlhX3NyY19wYWQsIEdTVF9UWVBFX1BBRCk7CisjZGVmaW5lIFdFQktJVF9UWVBFX01FRElB
X1NSQ19QQUQgKHdlYmtpdF9tZWRpYV9zcmNfcGFkX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJ
VF9NRURJQV9TUkNfUEFEKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBX
RUJLSVRfVFlQRV9NRURJQV9TUkNfUEFELCBXZWJLaXRNZWRpYVNyY1BhZCkpCiAKLSAgICByZXR1
cm4gVFJVRTsKK3N0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9zcmNfcGFkX2NsYXNzX2luaXQoV2Vi
S2l0TWVkaWFTcmNQYWRDbGFzcyopCit7CiB9CiAKLXN0YXRpYyBTdHJlYW0qIGdldFN0cmVhbUJ5
QXBwc3JjKFdlYktpdE1lZGlhU3JjKiBzb3VyY2UsIEdzdEVsZW1lbnQqIGFwcHNyYykKK0dfREVG
SU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdE1lZGlhU3JjLCB3ZWJraXRfbWVkaWFfc3JjLCBHU1Rf
VFlQRV9FTEVNRU5ULAorICAgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShHU1RfVFlQRV9VUklfSEFO
RExFUiwgd2ViS2l0TWVkaWFTcmNVcmlIYW5kbGVySW5pdCk7CisgICAgR19BRERfUFJJVkFURShX
ZWJLaXRNZWRpYVNyYyk7CisgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X21lZGlh
X3NyY19kZWJ1ZywgIndlYmtpdG1lZGlhc3JjIiwgMCwgIldlYktpdCBNU0Ugc291cmNlIGVsZW1l
bnQiKSk7CisKK3N0cnVjdCBTdHJlYW0gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U3Ry
ZWFtPiB7CisgICAgU3RyZWFtKFdlYktpdE1lZGlhU3JjKiBzb3VyY2UsIEdSZWZQdHI8R3N0UGFk
PiYmIHBhZCwgUmVmPE1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXI+IHRyYWNrLCBHUmVmUHRyPEdz
dFN0cmVhbT4mJiBzdHJlYW1JbmZvKQorICAgICAgICA6IHNvdXJjZShzb3VyY2UpCisgICAgICAg
ICwgcGFkKFdURk1vdmUocGFkKSkKKyAgICAgICAgLCB0cmFjayh0cmFjaykKKyAgICAgICAgLCBz
dHJlYW1JbmZvKFdURk1vdmUoc3RyZWFtSW5mbykpCisgICAgICAgICwgc3RyZWFtaW5nTWVtYmVy
c0RhdGFNdXRleChHUmVmUHRyKHRyYWNrLT5pbml0aWFsQ2FwcygpKSwgc291cmNlLT5wcml2LT5z
dGFydFRpbWUsIHNvdXJjZS0+cHJpdi0+cmF0ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh0cmFj
ay0+aW5pdGlhbENhcHMoKSk7CisgICAgfQorCisgICAgV2ViS2l0TWVkaWFTcmMqIGNvbnN0IHNv
dXJjZTsKKyAgICBHUmVmUHRyPEdzdFBhZD4gY29uc3QgcGFkOworICAgIFJlZjxNZWRpYVNvdXJj
ZVRyYWNrR1N0cmVhbWVyPiB0cmFjazsKKyAgICBHUmVmUHRyPEdzdFN0cmVhbT4gc3RyZWFtSW5m
bzsKKworICAgIHN0cnVjdCBTdHJlYW1pbmdNZW1iZXJzIHsKKyAgICAgICAgU3RyZWFtaW5nTWVt
YmVycyhHUmVmUHRyPEdzdENhcHM+JiYgaW5pdGlhbENhcHMsIEdzdENsb2NrVGltZSBzdGFydFRp
bWUsIGRvdWJsZSByYXRlKQorICAgICAgICAgICAgOiBwZW5kaW5nSW5pdGlhbENhcHMoV1RGTW92
ZShpbml0aWFsQ2FwcykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdzdF9zZWdtZW50X2luaXQo
JnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7CisgICAgICAgICAgICBzZWdtZW50LnN0YXJ0ID0g
c2VnbWVudC50aW1lID0gc3RhcnRUaW1lOworICAgICAgICAgICAgc2VnbWVudC5yYXRlID0gcmF0
ZTsKKyAgICAgICAgICAgIEFTU0VSVChwZW5kaW5nSW5pdGlhbENhcHMpOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCBoYXNQdXNoZWRTdHJlYW1Db2xsZWN0aW9uRXZlbnQgeyBmYWxzZSB9Owor
ICAgICAgICBib29sIHdhc1N0cmVhbVN0YXJ0U2VudCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wg
ZG9lc05lZWRTZWdtZW50RXZlbnQgeyB0cnVlIH07CisgICAgICAgIGJvb2wgaGFzUHVzaGVkRmly
c3RCdWZmZXIgeyBmYWxzZSB9OyAvLyBVc2VkIHRvIGdldCBhIHBpcGVsaW5lIGR1bXAgb2YgdGhl
IHBpcGVsaW5lIGJlZm9yZSBidWZmZXJzIGFyZSBmbG93aW5nLgorICAgICAgICBHc3RTZWdtZW50
IHNlZ21lbnQ7CisgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gcGVuZGluZ0luaXRpYWxDYXBzOwor
ICAgICAgICBHUmVmUHRyPEdzdENhcHM+IHByZXZpb3VzQ2FwczsgLy8gQ2FwcyBmcm9tIGVucXVl
dWVkIHNhbXBsZXMgYXJlIGNhbXBhcmVkIHRvIHRoZXNlIHRvIHB1c2ggQ0FQUyBldmVudHMgYXMg
bmVlZGVkLgorICAgICAgICBDb25kaXRpb24gcGFkTGlua2VkT3JGbHVzaGVkQ29uZGl0aW9uOwor
ICAgICAgICBDb25kaXRpb24gcXVldWVDaGFuZ2VkT3JGbHVzaGVkQ29uZGl0aW9uOworICAgICAg
ICBib29sIGlzRmx1c2hpbmcgeyBmYWxzZSB9OworCisgICAgICAgIC8vIEZsdXNoZXMgYmVmb3Jl
IGFueSBidWZmZXIgaGFzIGJlZW4gcG9wcGVkIGZyb20gdGhlIHF1ZXVlIGFuZCBzZW50IGRvd25z
dHJlYW0gY2FuIGJlIGF2b2lkZWQganVzdAorICAgICAgICAvLyBieSBjbGVhcmluZyB0aGUgcXVl
dWUuCisgICAgICAgIGJvb2wgaGFzUG9wcGVkRmlyc3RPYmplY3QgeyBmYWxzZSB9OworICAgIH07
CisgICAgRGF0YU11dGV4PFN0cmVhbWluZ01lbWJlcnM+IHN0cmVhbWluZ01lbWJlcnNEYXRhTXV0
ZXg7Cit9OworCitzdGF0aWMgR1JlZlB0cjxHc3RFbGVtZW50PiBmaW5kUGlwZWxpbmUoR1JlZlB0
cjxHc3RFbGVtZW50PiBlbGVtZW50KQogewotICAgIGZvciAoU3RyZWFtKiBzdHJlYW0gOiBzb3Vy
Y2UtPnByaXYtPnN0cmVhbXMpIHsKLSAgICAgICAgaWYgKHN0cmVhbS0+YXBwc3JjID09IGFwcHNy
YykKLSAgICAgICAgICAgIHJldHVybiBzdHJlYW07CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAg
ICAgR1JlZlB0cjxHc3RFbGVtZW50PiBwYXJlbnRFbGVtZW50ID0gYWRvcHRHUmVmKEdTVF9FTEVN
RU5UKGdzdF9lbGVtZW50X2dldF9wYXJlbnQoZWxlbWVudC5nZXQoKSkpKTsKKyAgICAgICAgaWYg
KCFwYXJlbnRFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgIGVs
ZW1lbnQgPSBwYXJlbnRFbGVtZW50OwogICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAot
R19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0TWVkaWFTcmMsIHdlYmtpdF9tZWRpYV9zcmMs
IEdTVF9UWVBFX0JJTiwKLSAgICBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoR1NUX1RZUEVfVVJJX0hB
TkRMRVIsIHdlYktpdE1lZGlhU3JjVXJpSGFuZGxlckluaXQpOwotICAgIFdFQktJVF9NRURJQV9T
UkNfQ0FURUdPUllfSU5JVCk7CitzdGF0aWMgR3N0U3RyZWFtVHlwZSBnc3RTdHJlYW1UeXBlKFRy
YWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAo
dHlwZSkgeworICAgIGNhc2UgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpW
aWRlbzoKKyAgICAgICAgcmV0dXJuIEdTVF9TVFJFQU1fVFlQRV9WSURFTzsKKyAgICBjYXNlIFRy
YWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6QXVkaW86CisgICAgICAgIHJldHVy
biBHU1RfU1RSRUFNX1RZUEVfQVVESU87CisgICAgY2FzZSBUcmFja1ByaXZhdGVCYXNlR1N0cmVh
bWVyOjpUcmFja1R5cGU6OlRleHQ6CisgICAgICAgIHJldHVybiBHU1RfU1RSRUFNX1RZUEVfVEVY
VDsKKyAgICBkZWZhdWx0OgorICAgICAgICBHU1RfRVJST1IoIlJlY2VpdmVkIHVuZXhwZWN0ZWQg
c3RyZWFtIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIEdTVF9TVFJFQU1fVFlQRV9VTktOT1dOOwor
ICAgIH0KK30KIAotZ3VpbnQgd2ViS2l0TWVkaWFTcmNTaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsg
MCB9OworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKK3N0YXRpYyBjb25zdCBjaGFyKiBz
dHJlYW1UeXBlVG9TdHJpbmcoVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlIHR5
cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUcmFja1ByaXZhdGVCYXNlR1N0
cmVhbWVyOjpUcmFja1R5cGU6OkF1ZGlvOgorICAgICAgICByZXR1cm4gIkF1ZGlvIjsKKyAgICBj
YXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6VmlkZW86CisgICAgICAg
IHJldHVybiAiVmlkZW8iOworICAgIGNhc2UgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJh
Y2tUeXBlOjpUZXh0OgorICAgICAgICByZXR1cm4gIlRleHQiOworICAgIGRlZmF1bHQ6CisgICAg
Y2FzZSBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OlVua25vd246CisgICAg
ICAgIHJldHVybiAiVW5rbm93biI7CisgICAgfQorfQorI2VuZGlmIC8vIEdTVF9ESVNBQkxFX0dT
VF9ERUJVRwogCiBzdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfc3JjX2NsYXNzX2luaXQoV2ViS2l0
TWVkaWFTcmNDbGFzcyoga2xhc3MpCiB7CkBAIC0xOTcsMTggKzI0NCwxNCBAQCBzdGF0aWMgdm9p
ZCB3ZWJraXRfbWVkaWFfc3JjX2NsYXNzX2luaXQoV2ViS2l0TWVkaWFTcmNDbGFzcyoga2xhc3Mp
CiAgICAgR3N0RWxlbWVudENsYXNzKiBla2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyhrbGFzcyk7
CiAKICAgICBva2xhc3MtPmZpbmFsaXplID0gd2ViS2l0TWVkaWFTcmNGaW5hbGl6ZTsKLSAgICBv
a2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYktpdE1lZGlhU3JjU2V0UHJvcGVydHk7CiAgICAgb2ts
YXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJLaXRNZWRpYVNyY0dldFByb3BlcnR5OwogCi0gICAgZ3N0
X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZShla2xhc3MsIGdzdF9zdGF0aWNfcGFkX3Rl
bXBsYXRlX2dldCgmc3JjVGVtcGxhdGUpKTsKKyAgICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3Rh
dGljX3BhZF90ZW1wbGF0ZV93aXRoX2d0eXBlKGVrbGFzcywgJnNyY1RlbXBsYXRlLCB3ZWJraXRf
bWVkaWFfc3JjX3BhZF9nZXRfdHlwZSgpKTsKIAotICAgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9z
dGF0aWNfbWV0YWRhdGEoZWtsYXNzLCAiV2ViS2l0IE1lZGlhIHNvdXJjZSBlbGVtZW50IiwgIlNv
dXJjZSIsICJIYW5kbGVzIEJsb2IgdXJpcyIsICJTdGVwaGFuZSBKYWRhdWQgPHNqYWRhdWRAc2lp
LmZyPiwgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4sIEVucmlx
dWUgT2Nhw7FhIEdvbnrDoWxleiA8ZW9jYW5oYUBpZ2FsaWEuY29tPiIpOworICAgIGdzdF9lbGVt
ZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEoZWtsYXNzLCAiV2ViS2l0IE1lZGlhU291cmNl
IHNvdXJjZSBlbGVtZW50IiwgIlNvdXJjZS9OZXR3b3JrIiwgIkZlZWRzIHNhbXBsZXMgY29taW5n
IGZyb20gV2ViS2l0IE1lZGlhU291cmNlIG9iamVjdCIsICJJZ2FsaWEgPGFib3lhQGlnYWxpYS5j
b20+Iik7CiAKLSAgICAvLyBBbGxvd3Mgc2V0dGluZyB0aGUgdXJpIHVzaW5nIHRoZSAnbG9jYXRp
b24nIHByb3BlcnR5LCB3aGljaCBpcyB1c2VkIGZvciBleGFtcGxlIGJ5IGdzdF9lbGVtZW50X21h
a2VfZnJvbV91cmkoKS4KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9rbGFz
cywKLSAgICAgICAgUFJPUF9MT0NBVElPTiwKLSAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygi
bG9jYXRpb24iLCAibG9jYXRpb24iLCAiTG9jYXRpb24gdG8gcmVhZCBmcm9tIiwgbnVsbHB0ciwK
LSAgICAgICAgR1BhcmFtRmxhZ3MoR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19T
VFJJTkdTKSkpOworICAgIGVrbGFzcy0+Y2hhbmdlX3N0YXRlID0gd2ViS2l0TWVkaWFTcmNDaGFu
Z2VTdGF0ZTsKKyAgICBla2xhc3MtPnNlbmRfZXZlbnQgPSB3ZWJLaXRNZWRpYVNyY1NlbmRFdmVu
dDsKICAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9rbGFzcywKICAgICAgICAg
UFJPUF9OX0FVRElPLAogICAgICAgICBnX3BhcmFtX3NwZWNfaW50KCJuLWF1ZGlvIiwgIk51bWJl
ciBBdWRpbyIsICJUb3RhbCBudW1iZXIgb2YgYXVkaW8gc3RyZWFtcyIsCkBAIC0yMjEsNDMyICsy
NjQsNTE3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9zcmNfY2xhc3NfaW5pdChXZWJLaXRN
ZWRpYVNyY0NsYXNzKiBrbGFzcykKICAgICAgICAgUFJPUF9OX1RFWFQsCiAgICAgICAgIGdfcGFy
YW1fc3BlY19pbnQoIm4tdGV4dCIsICJOdW1iZXIgVGV4dCIsICJUb3RhbCBudW1iZXIgb2YgdGV4
dCBzdHJlYW1zIiwKICAgICAgICAgMCwgR19NQVhJTlQsIDAsIEdQYXJhbUZsYWdzKEdfUEFSQU1f
UkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSkpOwotCi0gICAgd2ViS2l0TWVkaWFT
cmNTaWduYWxzW1NJR05BTF9WSURFT19DSEFOR0VEXSA9Ci0gICAgICAgIGdfc2lnbmFsX25ldygi
dmlkZW8tY2hhbmdlZCIsIEdfVFlQRV9GUk9NX0NMQVNTKG9rbGFzcyksCi0gICAgICAgIEdfU0lH
TkFMX1JVTl9MQVNULAotICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0TWVkaWFTcmNDbGFz
cywgdmlkZW9DaGFuZ2VkKSwgbnVsbHB0ciwgbnVsbHB0ciwKLSAgICAgICAgZ19jY2xvc3VyZV9t
YXJzaGFsX2dlbmVyaWMsIEdfVFlQRV9OT05FLCAwLCBHX1RZUEVfTk9ORSk7Ci0gICAgd2ViS2l0
TWVkaWFTcmNTaWduYWxzW1NJR05BTF9BVURJT19DSEFOR0VEXSA9Ci0gICAgICAgIGdfc2lnbmFs
X25ldygiYXVkaW8tY2hhbmdlZCIsIEdfVFlQRV9GUk9NX0NMQVNTKG9rbGFzcyksCi0gICAgICAg
IEdfU0lHTkFMX1JVTl9MQVNULAotICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0TWVkaWFT
cmNDbGFzcywgYXVkaW9DaGFuZ2VkKSwgbnVsbHB0ciwgbnVsbHB0ciwKLSAgICAgICAgZ19jY2xv
c3VyZV9tYXJzaGFsX2dlbmVyaWMsIEdfVFlQRV9OT05FLCAwLCBHX1RZUEVfTk9ORSk7Ci0gICAg
d2ViS2l0TWVkaWFTcmNTaWduYWxzW1NJR05BTF9URVhUX0NIQU5HRURdID0KLSAgICAgICAgZ19z
aWduYWxfbmV3KCJ0ZXh0LWNoYW5nZWQiLCBHX1RZUEVfRlJPTV9DTEFTUyhva2xhc3MpLAotICAg
ICAgICBHX1NJR05BTF9SVU5fTEFTVCwKLSAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdE1l
ZGlhU3JjQ2xhc3MsIHRleHRDaGFuZ2VkKSwgbnVsbHB0ciwgbnVsbHB0ciwKLSAgICAgICAgZ19j
Y2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIEdfVFlQRV9OT05FLCAwLCBHX1RZUEVfTk9ORSk7Ci0K
LSAgICBla2xhc3MtPmNoYW5nZV9zdGF0ZSA9IHdlYktpdE1lZGlhU3JjQ2hhbmdlU3RhdGU7Ci0K
LSAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRNZWRpYVNy
Y1ByaXZhdGUpKTsKIH0KIAotc3RhdGljIEdzdEZsb3dSZXR1cm4gd2Via2l0TWVkaWFTcmNDaGFp
bihHc3RQYWQqIHBhZCwgR3N0T2JqZWN0KiBwYXJlbnQsIEdzdEJ1ZmZlciogYnVmZmVyKQorc3Rh
dGljIHZvaWQgd2Via2l0X21lZGlhX3NyY19pbml0KFdlYktpdE1lZGlhU3JjKiBzb3VyY2UpCiB7
Ci0gICAgR1JlZlB0cjxXZWJLaXRNZWRpYVNyYz4gc2VsZiA9IGFkb3B0R1JlZihXRUJLSVRfTUVE
SUFfU1JDKGdzdF9vYmplY3RfZ2V0X3BhcmVudChwYXJlbnQpKSk7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKIAotICAgIHJldHVybiBnc3RfZmxvd19jb21iaW5lcl91cGRhdGVfcGFkX2Zs
b3coc2VsZi0+cHJpdi0+Zmxvd0NvbWJpbmVyLmdldCgpLCBwYWQsIGdzdF9wcm94eV9wYWRfY2hh
aW5fZGVmYXVsdChwYWQsIEdTVF9PQkpFQ1Qoc2VsZi5nZXQoKSksIGJ1ZmZlcikpOworICAgIEdT
VF9PQkpFQ1RfRkxBR19TRVQoc291cmNlLCBHU1RfRUxFTUVOVF9GTEFHX1NPVVJDRSk7CisgICAg
c291cmNlLT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChzb3VyY2UpLCBXRUJL
SVRfVFlQRV9NRURJQV9TUkMsIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSk7CisgICAgbmV3IChzb3Vy
Y2UtPnByaXYpIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSgpOwogfQogCi1zdGF0aWMgdm9pZCB3ZWJr
aXRfbWVkaWFfc3JjX2luaXQoV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSkKK3N0YXRpYyB2b2lkIHdl
YktpdE1lZGlhU3JjRmluYWxpemUoR09iamVjdCogb2JqZWN0KQogewotICAgIHNvdXJjZS0+cHJp
diA9IFdFQktJVF9NRURJQV9TUkNfR0VUX1BSSVZBVEUoc291cmNlKTsKLSAgICBuZXcgKHNvdXJj
ZS0+cHJpdikgV2ViS2l0TWVkaWFTcmNQcml2YXRlKCk7Ci0gICAgc291cmNlLT5wcml2LT5zZWVr
VGltZSA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKLSAgICBzb3VyY2UtPnByaXYtPmFwcHNy
Y1NlZWtEYXRhQ291bnQgPSAwOwotICAgIHNvdXJjZS0+cHJpdi0+YXBwc3JjTmVlZERhdGFDb3Vu
dCA9IDA7Ci0gICAgc291cmNlLT5wcml2LT5hcHBzcmNTZWVrRGF0YU5leHRBY3Rpb24gPSBOb3Ro
aW5nOwotICAgIHNvdXJjZS0+cHJpdi0+Zmxvd0NvbWJpbmVyID0gR1VuaXF1ZVB0cjxHc3RGbG93
Q29tYmluZXI+KGdzdF9mbG93X2NvbWJpbmVyX25ldygpKTsKLSAgICBzb3VyY2UtPnByaXYtPm5v
dGlmaWVyID0gV2ViQ29yZTo6TWFpblRocmVhZE5vdGlmaWVyPFdlYktpdE1lZGlhU3JjTWFpblRo
cmVhZE5vdGlmaWNhdGlvbj46OmNyZWF0ZSgpOwotCi0gICAgLy8gTm8gbmVlZCB0byByZXNldCBT
dHJlYW0uYXBwc3JjTmVlZERhdGFGbGFnIGJlY2F1c2UgdGhlcmUgYXJlIG5vIFN0cmVhbXMgYXQg
dGhpcyBwb2ludCB5ZXQuCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIFdlYktp
dE1lZGlhU3JjKiBzb3VyY2UgPSBXRUJLSVRfTUVESUFfU1JDKG9iamVjdCk7CisgICAgc291cmNl
LT5wcml2LT5+V2ViS2l0TWVkaWFTcmNQcml2YXRlKCk7CisgICAgR1NUX0NBTExfUEFSRU5UKEdf
T0JKRUNUX0NMQVNTLCBmaW5hbGl6ZSwgKG9iamVjdCkpOwogfQogCi12b2lkIHdlYktpdE1lZGlh
U3JjRmluYWxpemUoR09iamVjdCogb2JqZWN0KQordm9pZCB3ZWJLaXRNZWRpYVNyY0VtaXRTdHJl
YW1zKFdlYktpdE1lZGlhU3JjKiBzb3VyY2UsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVkaWFTb3Vy
Y2VUcmFja0dTdHJlYW1lcj4+JiB0cmFja3MpCiB7Ci0gICAgQVNTRVJUKFdURjo6aXNNYWluVGhy
ZWFkKCkpOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFzb3VyY2Ut
PnByaXYtPmlzU3RhcnRlZCgpKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHNvdXJjZSwgIkVtaXR0
aW5nIFNUUkVBTV9DT0xMRUNUSU9OIik7CiAKLSAgICBXZWJLaXRNZWRpYVNyYyogc291cmNlID0g
V0VCS0lUX01FRElBX1NSQyhvYmplY3QpOwotICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJp
diA9IHNvdXJjZS0+cHJpdjsKKyAgICBzb3VyY2UtPnByaXYtPmNvbGxlY3Rpb24gPSBhZG9wdEdS
ZWYoZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX25ldygiV2ViS2l0TWVkaWFTcmMiKSk7CisgICAgZm9y
IChSZWZQdHI8TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcj4gdHJhY2sgOiB0cmFja3MpIHsKKyAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChzb3VyY2UsICJBZGRpbmcgc3RyZWFtIHdpdGggdHJhY2tJ
ZCAnJXMnIG9mIHR5cGUgJXMgd2l0aCBjYXBzICUiIEdTVF9QVFJfRk9STUFULCB0cmFjay0+dHJh
Y2tJZCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHN0cmVhbVR5cGVUb1N0cmluZyh0cmFjay0+
dHlwZSgpKSwgdHJhY2stPmluaXRpYWxDYXBzKCkuZ2V0KCkpOwogCi0gICAgR1NUX0RFQlVHX09C
SkVDVChzb3VyY2UsICJGaW5hbGl6aW5nICVwIiwgc291cmNlKTsKLSAgICBWZWN0b3I8U3RyZWFt
Kj4gb2xkU3RyZWFtczsKLSAgICBzb3VyY2UtPnByaXYtPnN0cmVhbXMuc3dhcChvbGRTdHJlYW1z
KTsKKyAgICAgICAgR1JlZlB0cjxXZWJLaXRNZWRpYVNyY1BhZD4gcGFkID0gV0VCS0lUX01FRElB
X1NSQ19QQUQoZ19vYmplY3RfbmV3KHdlYmtpdF9tZWRpYV9zcmNfcGFkX2dldF90eXBlKCksICJu
YW1lIiwgbWFrZVN0cmluZygic3JjXyIsIHRyYWNrLT50cmFja0lkKCkpLnV0ZjgoKS5kYXRhKCks
ICJkaXJlY3Rpb24iLCBHU1RfUEFEX1NSQywgTlVMTCkpOworICAgICAgICBnc3RfcGFkX3NldF9h
Y3RpdmF0ZW1vZGVfZnVuY3Rpb24oR1NUX1BBRChwYWQuZ2V0KCkpLCB3ZWJLaXRNZWRpYVNyY0Fj
dGl2YXRlTW9kZSk7CiAKLSAgICBmb3IgKFN0cmVhbSogc3RyZWFtIDogb2xkU3RyZWFtcykKLSAg
ICAgICAgd2ViS2l0TWVkaWFTcmNGcmVlU3RyZWFtKHNvdXJjZSwgc3RyZWFtKTsKKyAgICAgICAg
QVNTRVJUKHRyYWNrLT5pbml0aWFsQ2FwcygpKTsKKyAgICAgICAgUmVmUHRyPFN0cmVhbT4gc3Ry
ZWFtID0gYWRvcHRSZWYobmV3IFN0cmVhbShzb3VyY2UsIEdSZWZQdHI8R3N0UGFkPihHU1RfUEFE
KHBhZC5nZXQoKSkpLCBtYWtlUmVmKCp0cmFjayksCisgICAgICAgICAgICBhZG9wdEdSZWYoZ3N0
X3N0cmVhbV9uZXcodHJhY2stPnRyYWNrSWQoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0cmFj
ay0+aW5pdGlhbENhcHMoKS5nZXQoKSwgZ3N0U3RyZWFtVHlwZSh0cmFjay0+dHlwZSgpKSwgR1NU
X1NUUkVBTV9GTEFHX1NFTEVDVCkpKSk7CisgICAgICAgIHBhZC0+cHJpdi0+c3RyZWFtID0gc3Ry
ZWFtOwogCi0gICAgcHJpdi0+c2Vla1RpbWUgPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7Cisg
ICAgICAgIGdzdF9zdHJlYW1fY29sbGVjdGlvbl9hZGRfc3RyZWFtKHNvdXJjZS0+cHJpdi0+Y29s
bGVjdGlvbi5nZXQoKSwgR1JlZlB0cjxHc3RTdHJlYW0+KHN0cmVhbS0+c3RyZWFtSW5mby5nZXQo
KSkubGVha1JlZigpKTsKKyAgICAgICAgc291cmNlLT5wcml2LT5zdHJlYW1zLnNldCh0cmFjay0+
dHJhY2tJZCgpLCBXVEZNb3ZlKHN0cmVhbSkpOworICAgIH0KIAotICAgIHNvdXJjZS0+cHJpdi0+
bm90aWZpZXItPmludmFsaWRhdGUoKTsKKyAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NU
X0VMRU1FTlQoc291cmNlKSwgZ3N0X21lc3NhZ2VfbmV3X3N0cmVhbV9jb2xsZWN0aW9uKEdTVF9P
QkpFQ1Qoc291cmNlKSwgc291cmNlLT5wcml2LT5jb2xsZWN0aW9uLmdldCgpKSk7CiAKLSAgICBp
ZiAocHJpdi0+bWVkaWFQbGF5ZXJQcml2YXRlKQotICAgICAgICB3ZWJLaXRNZWRpYVNyY1NldE1l
ZGlhUGxheWVyUHJpdmF0ZShzb3VyY2UsIG51bGxwdHIpOworICAgIGZvciAoYXV0byYgcGFpciA6
IHNvdXJjZS0+cHJpdi0+c3RyZWFtcykgeworICAgICAgICBjb25zdCBSZWZQdHI8U3RyZWFtPiYg
c3RyZWFtID0gcGFpci52YWx1ZTsKIAotICAgIC8vIFdlIHVzZWQgYSBwbGFjZW1lbnQgbmV3IGZv
ciBjb25zdHJ1Y3Rpb24sIHRoZSBkZXN0cnVjdG9yIHdvbid0IGJlIGNhbGxlZCBhdXRvbWF0aWNh
bGx5LgotICAgIHByaXYtPn5fV2ViS2l0TWVkaWFTcmNQcml2YXRlKCk7CisgICAgICAgIC8vIFdv
cmthcm91bmQ6IGdzdF9lbGVtZW50X2FkZF9wYWQoKSBzaG91bGQgYWxyZWFkeSBjYWxsIGdzdF9w
YWRfc2V0X2FjdGl2ZSgpIGlmIHRoZSBlbGVtZW50IGlzIFBBVVNFRCBvcgorICAgICAgICAvLyBQ
TEFZSU5HLiBVbmZvcnR1bmF0ZWx5LCBhcyBvZiBHU3RyZWFtZXIgMS4xOC4yIGl0IGRvZXMgc28g
d2l0aCB0aGUgZWxlbWVudCBsb2NrIHRha2VuLCBjYXVzaW5nIGEgZGVhZGxvY2sKKyAgICAgICAg
Ly8gaW4gZ3N0X3BhZF9zdGFydF90YXNrKCksIHdobyB0cmllcyB0byBwb3N0IGEgYHN0cmVhbS1z
dGF0dXNgIG1lc3NhZ2UgaW4gdGhlIGVsZW1lbnQsIHdoaWNoIGFsc28gcmVxdWlyZXMKKyAgICAg
ICAgLy8gdGhlIGVsZW1lbnQgbG9jay4gQWN0aXZhdGluZyB0aGUgcGFkIGJlZm9yZWhhbmQgYXZv
aWRzIHRoYXQgY29kZXBhdGguCisgICAgICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9w
Lm9yZy9nc3RyZWFtZXIvZ3N0cmVhbWVyLy0vbWVyZ2VfcmVxdWVzdHMvMjEwCisgICAgICAgIEdz
dFN0YXRlIHN0YXRlOworICAgICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUoR1NUX0VMRU1FTlQo
c291cmNlKSwgJnN0YXRlLCBudWxscHRyLCAwKTsKKyAgICAgICAgaWYgKHN0YXRlID4gR1NUX1NU
QVRFX1JFQURZKQorICAgICAgICAgICAgZ3N0X3BhZF9zZXRfYWN0aXZlKEdTVF9QQUQoc3RyZWFt
LT5wYWQuZ2V0KCkpLCB0cnVlKTsKIAotICAgIEdTVF9DQUxMX1BBUkVOVChHX09CSkVDVF9DTEFT
UywgZmluYWxpemUsIChvYmplY3QpKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzb3VyY2Us
ICJBZGRpbmcgcGFkICclcycgZm9yIHN0cmVhbSB3aXRoIG5hbWUgJyVzJyIsIEdTVF9PQkpFQ1Rf
TkFNRShzdHJlYW0tPnBhZC5nZXQoKSksIHN0cmVhbS0+dHJhY2stPnRyYWNrSWQoKS5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChHU1RfRUxFTUVO
VChzb3VyY2UpLCBHU1RfUEFEKHN0cmVhbS0+cGFkLmdldCgpKSk7CisgICAgfQorICAgIEdTVF9E
RUJVR19PQkpFQ1Qoc291cmNlLCAiQWxsIHBhZHMgYWRkZWQiKTsKIH0KIAotdm9pZCB3ZWJLaXRN
ZWRpYVNyY1NldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBjb25zdCBH
VmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlh
U3JjVGVhckRvd25TdHJlYW0oV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSwgY29uc3QgQXRvbVN0cmlu
ZyYgbmFtZSkKIHsKLSAgICBXZWJLaXRNZWRpYVNyYyogc291cmNlID0gV0VCS0lUX01FRElBX1NS
QyhvYmplY3QpOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgU3RyZWFtKiBzdHJl
YW0gPSBzb3VyY2UtPnByaXYtPnN0cmVhbUJ5TmFtZShuYW1lKTsKKyAgICBHU1RfREVCVUdfT0JK
RUNUKHNvdXJjZSwgIlRlYXJpbmcgZG93biBzdHJlYW0gJyVzJyIsIG5hbWUuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7CiAKLSAgICBzd2l0Y2ggKHByb3BJZCkgewotICAgIGNhc2UgUFJPUF9MT0NB
VElPTjoKLSAgICAgICAgZ3N0X3VyaV9oYW5kbGVyX3NldF91cmkocmVpbnRlcnByZXRfY2FzdDxH
c3RVUklIYW5kbGVyKj4oc291cmNlKSwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSwgbnVsbHB0
cik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5f
SU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcHNwZWMpOwotICAgICAgICBicmVh
azsKLSAgICB9CisgICAgLy8gRmx1c2ggdGhlIHNvdXJjZSBlbGVtZW50ICoqYW5kKiogZG93bnN0
cmVhbS4gV2Ugd2FudCB0byBzdG9wIHRoZSBzdHJlYW1pbmcgdGhyZWFkIGFuZCBmb3IgdGhhdCB3
ZSBuZWVkIGFsbCBlbGVtZW50cyBkb3duc3RyZWFtIHRvIGJlIGlkbGUuCisgICAgd2ViS2l0TWVk
aWFTcmNTdHJlYW1GbHVzaChzdHJlYW0sIGZhbHNlKTsKKyAgICAvLyBTdG9wIHRoZSB0aHJlYWQg
bm93LgorICAgIGdzdF9wYWRfc2V0X2FjdGl2ZShzdHJlYW0tPnBhZC5nZXQoKSwgZmFsc2UpOwor
CisgICAgaWYgKHNvdXJjZS0+cHJpdi0+aXNTdGFydGVkKCkpCisgICAgICAgIGdzdF9lbGVtZW50
X3JlbW92ZV9wYWQoR1NUX0VMRU1FTlQoc291cmNlKSwgc3RyZWFtLT5wYWQuZ2V0KCkpOworICAg
IHNvdXJjZS0+cHJpdi0+c3RyZWFtcy5yZW1vdmUobmFtZSk7CiB9CiAKLXZvaWQgd2ViS2l0TWVk
aWFTcmNHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCitzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFTcmNB
Y3RpdmF0ZU1vZGUoR3N0UGFkKiBwYWQsIEdzdE9iamVjdCogc291cmNlLCBHc3RQYWRNb2RlIG1v
ZGUsIGdib29sZWFuIGFjdGl2ZSkKIHsKLSAgICBXZWJLaXRNZWRpYVNyYyogc291cmNlID0gV0VC
S0lUX01FRElBX1NSQyhvYmplY3QpOwotICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9
IHNvdXJjZS0+cHJpdjsKKyAgICBpZiAobW9kZSAhPSBHU1RfUEFEX01PREVfUFVTSCkgeworICAg
ICAgICBHU1RfRVJST1JfT0JKRUNUKHNvdXJjZSwgIlVuZXhwZWN0ZWQgcGFkIG1vZGUgaW4gV2Vi
S2l0TWVkaWFTcmMiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAotICAgIEdTVF9P
QkpFQ1RfTE9DSyhzb3VyY2UpOwotICAgIHN3aXRjaCAocHJvcElkKSB7Ci0gICAgY2FzZSBQUk9Q
X0xPQ0FUSU9OOgotICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHByaXYtPmxvY2F0
aW9uLmdldCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05fQVVESU86Ci0gICAg
ICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwgcHJpdi0+bnVtYmVyT2ZBdWRpb1N0cmVhbXMpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTl9WSURFTzoKLSAgICAgICAgZ192YWx1ZV9z
ZXRfaW50KHZhbHVlLCBwcml2LT5udW1iZXJPZlZpZGVvU3RyZWFtcyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgUFJPUF9OX1RFWFQ6Ci0gICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwg
cHJpdi0+bnVtYmVyT2ZUZXh0U3RyZWFtcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJ
ZCwgcHNwZWMpOwotICAgICAgICBicmVhazsKKyAgICBpZiAoYWN0aXZlKQorICAgICAgICBnc3Rf
cGFkX3N0YXJ0X3Rhc2socGFkLCB3ZWJLaXRNZWRpYVNyY0xvb3AsIHBhZCwgbnVsbHB0cik7Cisg
ICAgZWxzZSB7CisgICAgICAgIC8vIFVuYmxvY2sgdGhlIHN0cmVhbWluZyB0aHJlYWQuCisgICAg
ICAgIFJlZlB0cjxTdHJlYW0+JiBzdHJlYW0gPSBXRUJLSVRfTUVESUFfU1JDX1BBRChwYWQpLT5w
cml2LT5zdHJlYW07CisgICAgICAgIHsKKyAgICAgICAgICAgIERhdGFNdXRleDxTdHJlYW06OlN0
cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyIHN0cmVhbWluZ01lbWJlcnMoc3RyZWFtLT5z
dHJlYW1pbmdNZW1iZXJzRGF0YU11dGV4KTsKKyAgICAgICAgICAgIHN0cmVhbWluZ01lbWJlcnMt
PmlzRmx1c2hpbmcgPSB0cnVlOworICAgICAgICAgICAgc3RyZWFtaW5nTWVtYmVycy0+cGFkTGlu
a2VkT3JGbHVzaGVkQ29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgICAgICAgICAgc3RyZWFtaW5n
TWVtYmVycy0+cXVldWVDaGFuZ2VkT3JGbHVzaGVkQ29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAg
ICAgICB9CisgICAgICAgIC8vIEZvbGxvd2luZyBnc3RiYXNlc3JjIGltcGxlbWVudGF0aW9uLCB0
aGlzIGNvZGUgaXMgbm90IGZsdXNoaW5nIGRvd25zdHJlYW0uCisgICAgICAgIC8vIElmIHRoZXJl
IGlzIGFueSBwb3NzaWJpbGl0eSBvZiB0aGUgc3RyZWFtaW5nIHRocmVhZCBiZWluZyBibG9ja2Vk
IGRvd25zdHJlYW0gdGhlIGNhbGxlciBNVVNUIGZsdXNoIGJlZm9yZS4KKyAgICAgICAgLy8gT3Ro
ZXJ3aXNlIGEgZGVhZGxvY2sgd291bGQgb2NjdXIgYXMgdGhlIG5leHQgZnVuY3Rpb24gdHJpZXMg
dG8gam9pbiB0aGUgdGhyZWFkLgorICAgICAgICBnc3RfcGFkX3N0b3BfdGFzayhwYWQpOworICAg
ICAgICB7CisgICAgICAgICAgICBEYXRhTXV0ZXg8U3RyZWFtOjpTdHJlYW1pbmdNZW1iZXJzPjo6
TG9ja2VkV3JhcHBlciBzdHJlYW1pbmdNZW1iZXJzKHN0cmVhbS0+c3RyZWFtaW5nTWVtYmVyc0Rh
dGFNdXRleCk7CisgICAgICAgICAgICBzdHJlYW1pbmdNZW1iZXJzLT5pc0ZsdXNoaW5nID0gZmFs
c2U7CisgICAgICAgIH0KICAgICB9Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0soc291cmNlKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCB3ZWJLaXRNZWRpYVNyY0RvQXN5bmNTdGFydChXZWJL
aXRNZWRpYVNyYyogc291cmNlKQorc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNQYWRMaW5rZWQo
R3N0UGFkKiBwYWQsIEdzdFBhZCosIHZvaWQqKQogewotICAgIHNvdXJjZS0+cHJpdi0+YXN5bmNT
dGFydCA9IHRydWU7Ci0gICAgR1NUX0JJTl9DTEFTUyhwYXJlbnRfY2xhc3MpLT5oYW5kbGVfbWVz
c2FnZShHU1RfQklOKHNvdXJjZSksCi0gICAgICAgIGdzdF9tZXNzYWdlX25ld19hc3luY19zdGFy
dChHU1RfT0JKRUNUKHNvdXJjZSkpKTsKKyAgICBSZWZQdHI8U3RyZWFtPiYgc3RyZWFtID0gV0VC
S0lUX01FRElBX1NSQ19QQUQocGFkKS0+cHJpdi0+c3RyZWFtOworICAgIERhdGFNdXRleDxTdHJl
YW06OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyIHN0cmVhbWluZ01lbWJlcnMoc3Ry
ZWFtLT5zdHJlYW1pbmdNZW1iZXJzRGF0YU11dGV4KTsKKyAgICBzdHJlYW1pbmdNZW1iZXJzLT5w
YWRMaW5rZWRPckZsdXNoZWRDb25kaXRpb24ubm90aWZ5T25lKCk7CiB9CiAKLXZvaWQgd2ViS2l0
TWVkaWFTcmNEb0FzeW5jRG9uZShXZWJLaXRNZWRpYVNyYyogc291cmNlKQorLy8gQ2FsbGVkIHdp
dGggU1RSRUFNX0xPQ0suCitzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY0xvb3Aodm9pZCogdXNl
ckRhdGEpCiB7Ci0gICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc291cmNlLT5wcml2
OwotICAgIGlmIChwcml2LT5hc3luY1N0YXJ0KSB7Ci0gICAgICAgIEdTVF9CSU5fQ0xBU1MocGFy
ZW50X2NsYXNzKS0+aGFuZGxlX21lc3NhZ2UoR1NUX0JJTihzb3VyY2UpLAotICAgICAgICAgICAg
Z3N0X21lc3NhZ2VfbmV3X2FzeW5jX2RvbmUoR1NUX09CSkVDVChzb3VyY2UpLCBHU1RfQ0xPQ0tf
VElNRV9OT05FKSk7Ci0gICAgICAgIHByaXYtPmFzeW5jU3RhcnQgPSBmYWxzZTsKKyAgICBHc3RQ
YWQqIHBhZCA9IEdTVF9QQUQodXNlckRhdGEpOworICAgIFJlZlB0cjxTdHJlYW0+JiBzdHJlYW0g
PSBXRUJLSVRfTUVESUFfU1JDX1BBRChwYWQpLT5wcml2LT5zdHJlYW07CisKKyAgICBEYXRhTXV0
ZXg8U3RyZWFtOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBzdHJlYW1pbmdNZW1i
ZXJzKHN0cmVhbS0+c3RyZWFtaW5nTWVtYmVyc0RhdGFNdXRleCk7CisgICAgaWYgKHN0cmVhbWlu
Z01lbWJlcnMtPmlzRmx1c2hpbmcpIHsKKyAgICAgICAgZ3N0X3BhZF9wYXVzZV90YXNrKHBhZCk7
CisgICAgICAgIHJldHVybjsKICAgICB9Ci19CiAKLUdzdFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktp
dE1lZGlhU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2Ug
dHJhbnNpdGlvbikKLXsKLSAgICBXZWJLaXRNZWRpYVNyYyogc291cmNlID0gV0VCS0lUX01FRElB
X1NSQyhlbGVtZW50KTsKLSAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzb3VyY2Ut
PnByaXY7CisgICAgLy8gU2luY2UgdGhlIHBhZCBjYW4gYW5kIHdpbGwgYmUgYWRkZWQgd2hlbiB0
aGUgZWxlbWVudCBpcyBpbiBQTEFZSU5HIHN0YXRlLCB0aGlzIHRhc2sgY2FuIHN0YXJ0IHJ1bm5p
bmcKKyAgICAvLyBiZWZvcmUgdGhlIHBhZCBpcyBsaW5rZWQuIFdhaXQgZm9yIHRoZSBwYWQgdG8g
YmUgbGlua2VkIHRvIGF2b2lkIGJ1ZmZlcnMgYmVpbmcgbG9zdCB0byBub3QtbGlua2VkIGVycm9y
cy4KKyAgICBHU1RfT0JKRUNUX0xPQ0socGFkKTsKKyAgICBpZiAoIUdTVF9QQURfSVNfTElOS0VE
KHBhZCkpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwYWQsICJXYWl0aW5nIGZvciB0aGUg
cGFkIHRvIGJlIGxpbmtlZC4uLiIpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHBhZCwgImxp
bmtlZCIsIEdfQ0FMTEJBQ0sod2ViS2l0TWVkaWFTcmNQYWRMaW5rZWQpLCBudWxscHRyKTsKKyAg
ICAgICAgR1NUX09CSkVDVF9VTkxPQ0socGFkKTsKIAotICAgIEdTVF9ERUJVR19PQkpFQ1QoZWxl
bWVudCwgIiVzIiwgZ3N0X3N0YXRlX2NoYW5nZV9nZXRfbmFtZSh0cmFuc2l0aW9uKSk7Ci0gICAg
c3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RP
X1BBVVNFRDoKLSAgICAgICAgcHJpdi0+YWxsVHJhY2tzQ29uZmlndXJlZCA9IGZhbHNlOwotICAg
ICAgICB3ZWJLaXRNZWRpYVNyY0RvQXN5bmNTdGFydChzb3VyY2UpOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKyAgICAgICAgc3RyZWFtaW5nTWVtYmVycy0+
cGFkTGlua2VkT3JGbHVzaGVkQ29uZGl0aW9uLndhaXQoc3RyZWFtaW5nTWVtYmVycy5tdXRleCgp
KTsKKworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMocGFkLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPih3ZWJLaXRNZWRpYVNyY1BhZExpbmtlZCksIG51bGxwdHIp
OworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBhZCwgIkZpbmlzaGVkIHdhaXRpbmcgZm9yIHRo
ZSBwYWQgdG8gYmUgbGlua2VkLiIpOworICAgICAgICBpZiAoc3RyZWFtaW5nTWVtYmVycy0+aXNG
bHVzaGluZykgeworICAgICAgICAgICAgZ3N0X3BhZF9wYXVzZV90YXNrKHBhZCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgR1NUX09CSkVDVF9V
TkxPQ0socGFkKTsKKyAgICBBU1NFUlQoZ3N0X3BhZF9pc19saW5rZWQocGFkKSk7CisKKyAgICAv
LyBCeSBrZWVwaW5nIHRoZSBsb2NrIHdlIGFyZSBndWFyYW50ZWVkIHRoYXQgYSBmbHVzaCB3aWxs
IG5vdCBoYXBwZW4gd2hpbGUgd2Ugc2VuZCBlc3NlbnRpYWwgZXZlbnRzLgorICAgIC8vIFRoZXNl
IGV2ZW50cyBzaG91bGQgbmV2ZXIgYmxvY2sgZG93bnN0cmVhbSwgc28gdGhlIGxvY2sgc2hvdWxk
IGJlIHJlbGVhc2VkIGluIGxpdHRsZSB0aW1lIGluIGV2ZXJ5CisgICAgLy8gY2FzZS4KKworICAg
IGlmICghc3RyZWFtaW5nTWVtYmVycy0+aGFzUHVzaGVkU3RyZWFtQ29sbGVjdGlvbkV2ZW50KSB7
CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGFkLCAiUHVzaGluZyBTVFJFQU1fQ09MTEVDVElP
TiBldmVudC4iKTsKKyAgICAgICAgYm9vbCB3YXNTdHJlYW1Db2xsZWN0aW9uU2VudCA9IGdzdF9w
YWRfcHVzaF9ldmVudChzdHJlYW0tPnBhZC5nZXQoKSwgZ3N0X2V2ZW50X25ld19zdHJlYW1fY29s
bGVjdGlvbihzdHJlYW0tPnNvdXJjZS0+cHJpdi0+Y29sbGVjdGlvbi5nZXQoKSkpOworICAgICAg
ICBzdHJlYW1pbmdNZW1iZXJzLT5oYXNQdXNoZWRTdHJlYW1Db2xsZWN0aW9uRXZlbnQgPSB0cnVl
OworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBhZCwgIlNUUkVBTV9DT0xMRUNUSU9OIGV2ZW50
IGhhcyBiZWVuIHB1c2hlZCwgJXMgd2FzIHJldHVybmVkLiIsIGJvb2xGb3JQcmludGluZyh3YXNT
dHJlYW1Db2xsZWN0aW9uU2VudCkpOworICAgICAgICAvLyBJbml0aWFsIGV2ZW50cyBsaWtlIHRo
aXMgbXVzdCBnbyB0aHJvdWdoLCBmbHVzaGVzIChpbmNsdWRpbmcgdGVhcmluZyBkb3duIHRoZSBl
bGVtZW50KSBpcyBub3QgYWxsb3dlZCB1bnRpbAorICAgICAgICAvLyBgaGFzUHVzaGVkRmlyc3RC
dWZmZXJgIGhhcyBiZWVuIHNldCB0byB0cnVlLgorICAgICAgICBBU1NFUlQod2FzU3RyZWFtQ29s
bGVjdGlvblNlbnQpOworICAgIH0KKworICAgIGlmICghc3RyZWFtaW5nTWVtYmVycy0+d2FzU3Ry
ZWFtU3RhcnRTZW50KSB7CisgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gc3RyZWFtSWQoZ19zdHJk
dXBfcHJpbnRmKCJtc2UvJXMiLCBzdHJlYW0tPnRyYWNrLT50cmFja0lkKCkuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSkpOworICAgICAgICBHUmVmUHRyPEdzdEV2ZW50PiBldmVudCA9IGFkb3B0R1Jl
Zihnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydChzdHJlYW1JZC5nZXQoKSkpOworICAgICAgICBn
c3RfZXZlbnRfc2V0X2dyb3VwX2lkKGV2ZW50LmdldCgpLCBzdHJlYW0tPnNvdXJjZS0+cHJpdi0+
Z3JvdXBJZCk7CisgICAgICAgIGdzdF9ldmVudF9zZXRfc3RyZWFtKGV2ZW50LmdldCgpLCBzdHJl
YW0tPnN0cmVhbUluZm8uZ2V0KCkpOworCisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGFkLCAi
UHVzaGluZyBTVFJFQU1fU1RBUlQgZXZlbnQuIik7CisgICAgICAgIGJvb2wgd2FzU3RyZWFtU3Rh
cnRTZW50ID0gZ3N0X3BhZF9wdXNoX2V2ZW50KHBhZCwgZXZlbnQubGVha1JlZigpKTsKKyAgICAg
ICAgc3RyZWFtaW5nTWVtYmVycy0+d2FzU3RyZWFtU3RhcnRTZW50ID0gd2FzU3RyZWFtU3RhcnRT
ZW50OworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBhZCwgIlNUUkVBTV9TVEFSVCBldmVudCBw
dXNoZWQsICVzIHdhcyByZXR1cm5lZC4iLCBib29sRm9yUHJpbnRpbmcod2FzU3RyZWFtU3RhcnRT
ZW50KSk7CisgICAgICAgIEFTU0VSVCh3YXNTdHJlYW1TdGFydFNlbnQpOworICAgIH0KKworICAg
IGlmIChzdHJlYW1pbmdNZW1iZXJzLT5wZW5kaW5nSW5pdGlhbENhcHMpIHsKKyAgICAgICAgR1Jl
ZlB0cjxHc3RFdmVudD4gZXZlbnQgPSBhZG9wdEdSZWYoZ3N0X2V2ZW50X25ld19jYXBzKHN0cmVh
bWluZ01lbWJlcnMtPnBlbmRpbmdJbml0aWFsQ2Fwcy5nZXQoKSkpOworCisgICAgICAgIEdTVF9E
RUJVR19PQkpFQ1QocGFkLCAiUHVzaGluZyBpbml0aWFsIENBUFMgZXZlbnQ6ICUiIEdTVF9QVFJf
Rk9STUFULCBzdHJlYW1pbmdNZW1iZXJzLT5wZW5kaW5nSW5pdGlhbENhcHMuZ2V0KCkpOworICAg
ICAgICBib29sIHdhc0NhcHNFdmVudFNlbnQgPSBnc3RfcGFkX3B1c2hfZXZlbnQocGFkLCBldmVu
dC5sZWFrUmVmKCkpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBhZCwgIlB1c2hlZCBpbml0
aWFsIENBUFMgZXZlbnQsICVzIHdhcyByZXR1cm5lZC4iLCBib29sRm9yUHJpbnRpbmcod2FzQ2Fw
c0V2ZW50U2VudCkpOworCisgICAgICAgIHN0cmVhbWluZ01lbWJlcnMtPnByZXZpb3VzQ2FwcyA9
IFdURk1vdmUoc3RyZWFtaW5nTWVtYmVycy0+cGVuZGluZ0luaXRpYWxDYXBzKTsKKyAgICAgICAg
QVNTRVJUKCFzdHJlYW1pbmdNZW1iZXJzLT5wZW5kaW5nSW5pdGlhbENhcHMpOworICAgIH0KKwor
ICAgIEdSZWZQdHI8R3N0TWluaU9iamVjdD4gb2JqZWN0OworICAgIHsKKyAgICAgICAgRGF0YU11
dGV4PFRyYWNrUXVldWU+OjpMb2NrZWRXcmFwcGVyIHF1ZXVlKHN0cmVhbS0+dHJhY2stPnF1ZXVl
RGF0YU11dGV4KCkpOworICAgICAgICBpZiAoIXF1ZXVlLT5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgIG9iamVjdCA9IHF1ZXVlLT5wb3AoKTsKKyAgICAgICAgICAgIHN0cmVhbWluZ01lbWJlcnMt
Pmhhc1BvcHBlZEZpcnN0T2JqZWN0ID0gdHJ1ZTsKKyAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpF
Q1QocGFkLCAiUXVldWUgbm90IGVtcHR5LCBwb3BwZWQgJSIgR1NUX1BUUl9GT1JNQVQsIG9iamVj
dC5nZXQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBxdWV1ZS0+bm90aWZ5V2hl
bk5vdEVtcHR5KFsmb2JqZWN0LCBzdHJlYW1dKEdSZWZQdHI8R3N0TWluaU9iamVjdD4mJiByZWNl
aXZlZE9iamVjdCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgICAgICAgICAgICAgRGF0YU11dGV4PFN0cmVhbTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tl
ZFdyYXBwZXIgc3RyZWFtaW5nTWVtYmVycyhzdHJlYW0tPnN0cmVhbWluZ01lbWJlcnNEYXRhTXV0
ZXgpOworICAgICAgICAgICAgICAgIEFTU0VSVCghc3RyZWFtaW5nTWVtYmVycy0+aXNGbHVzaGlu
Zyk7CisKKyAgICAgICAgICAgICAgICBvYmplY3QgPSBXVEZNb3ZlKHJlY2VpdmVkT2JqZWN0KTsK
KyAgICAgICAgICAgICAgICBzdHJlYW1pbmdNZW1iZXJzLT5oYXNQb3BwZWRGaXJzdE9iamVjdCA9
IHRydWU7CisgICAgICAgICAgICAgICAgc3RyZWFtaW5nTWVtYmVycy0+cXVldWVDaGFuZ2VkT3JG
bHVzaGVkQ29uZGl0aW9uLm5vdGlmeUFsbCgpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICBHU1RfVFJBQ0VfT0JKRUNUKHBhZCwgIldhaXRpbmcgZm9yIG9iamVjdHMgdG8gYmUgcHVzaGVk
IHRvIHRoZSB0cmFjayBxdWV1ZS4iKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIEdzdFN0YXRl
Q2hhbmdlUmV0dXJuIHJlc3VsdCA9IEdTVF9FTEVNRU5UX0NMQVNTKHBhcmVudF9jbGFzcyktPmNo
YW5nZV9zdGF0ZShlbGVtZW50LCB0cmFuc2l0aW9uKTsKLSAgICBpZiAoR19VTkxJS0VMWShyZXN1
bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSkgewotICAgICAgICBHU1RfV0FSTklOR19P
QkpFQ1Qoc291cmNlLCAiU3RhdGUgY2hhbmdlIGZhaWxlZCIpOwotICAgICAgICB3ZWJLaXRNZWRp
YVNyY0RvQXN5bmNEb25lKHNvdXJjZSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgLy8g
V2FpdCB0byByZWNlaXZlIGFuIG9iamVjdCBmcm9tIHRoZSBxdWV1ZSAoaWYgd2UgZGlkbid0IGdl
dCBvbmUgYWxyZWFkeSkgb3IgZmx1c2guCisgICAgc3RyZWFtaW5nTWVtYmVycy0+cXVldWVDaGFu
Z2VkT3JGbHVzaGVkQ29uZGl0aW9uLndhaXQoc3RyZWFtaW5nTWVtYmVycy5tdXRleCgpLCBbJl0o
KSB7CisgICAgICAgIHJldHVybiBzdHJlYW1pbmdNZW1iZXJzLT5pc0ZsdXNoaW5nIHx8IG9iamVj
dDsKKyAgICB9KTsKKyAgICB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IG5vdGlmeVdoZW5Ob3RF
bXB0eSgpJ3MgY2FsbGJhY2sgKGlmIGFueSkgaXMgY2xlYXJlZCBhZnRlciB0aGlzIHBvaW50Lgor
ICAgICAgICBEYXRhTXV0ZXg8VHJhY2tRdWV1ZT46OkxvY2tlZFdyYXBwZXIgcXVldWUoc3RyZWFt
LT50cmFjay0+cXVldWVEYXRhTXV0ZXgoKSk7CisgICAgICAgIHF1ZXVlLT5yZXNldE5vdEVtcHR5
SGFuZGxlcigpOworICAgIH0KKyAgICBpZiAoc3RyZWFtaW5nTWVtYmVycy0+aXNGbHVzaGluZykg
eworICAgICAgICBnc3RfcGFkX3BhdXNlX3Rhc2socGFkKTsKKyAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5H
RV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICAgIHJlc3VsdCA9IEdTVF9TVEFURV9DSEFOR0VfQVNZ
TkM7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9f
UkVBRFk6Ci0gICAgICAgIHdlYktpdE1lZGlhU3JjRG9Bc3luY0RvbmUoc291cmNlKTsKLSAgICAg
ICAgcHJpdi0+YWxsVHJhY2tzQ29uZmlndXJlZCA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKyAgICAvLyBXZSB3YWl0IHRvIGdldCBhIHNhbXBs
ZSBiZWZvcmUgZW1pdHRpbmcgdGhlIGZpcnN0IHNlZ21lbnQuIFRoaXMgd2F5LCBpZiB3ZSBnZXQg
YSBzZWVrIGJlZm9yZSBhbnkKKyAgICAvLyBlbnF1ZXVlLCB3ZSdyZSBzZW5kaW5nIG9ubHkgb25l
IHNlZ21lbnQuIFRoaXMgYWxzbyBlbnN1cmVzIHRoYXQgd2hlbiBzdWNoIGEgc2VlayBpcyBtYWRl
LCB3aGVyZSB3ZSBhbHNvCisgICAgLy8gb21pdCB0aGUgZmx1c2ggKHNlZSB3ZWJLaXRNZWRpYVNy
Y0ZsdXNoKSB3ZSBhY3R1YWxseSBlbWl0IHRoZSB1cGRhdGVkLCBjb3JyZWN0IHNlZ21lbnQuCisg
ICAgaWYgKHN0cmVhbWluZ01lbWJlcnMtPmRvZXNOZWVkU2VnbWVudEV2ZW50KSB7CisgICAgICAg
IEdTVF9ERUJVR19PQkpFQ1QocGFkLCAiTmVlZCBuZXcgU0VHTUVOVCBldmVudCwgcHVzaGluZyBp
dDogJSIgR1NUX1NFR01FTlRfRk9STUFULCAmc3RyZWFtaW5nTWVtYmVycy0+c2VnbWVudCk7Cisg
ICAgICAgIGJvb2wgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50KHBhZCwgZ3N0X2V2ZW50X25ld19z
ZWdtZW50KCZzdHJlYW1pbmdNZW1iZXJzLT5zZWdtZW50KSk7CisgICAgICAgIEdTVF9ERUJVR19P
QkpFQ1QocGFkLCAiU0VHTUVOVCBldmVudCBwdXNoZWQsIHJldCA9ICVzLiIsIGJvb2xGb3JQcmlu
dGluZyhyZXQpKTsKKyAgICAgICAgQVNTRVJUKHJldCk7CisgICAgICAgIHN0cmVhbWluZ01lbWJl
cnMtPmRvZXNOZWVkU2VnbWVudEV2ZW50ID0gZmFsc2U7CiAgICAgfQogCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KKyAgICBpZiAoR1NUX0lTX1NBTVBMRShvYmplY3QuZ2V0KCkpKSB7CisgICAgICAg
IEdSZWZQdHI8R3N0U2FtcGxlPiBzYW1wbGUgPSBhZG9wdEdSZWYoR1NUX1NBTVBMRShvYmplY3Qu
bGVha1JlZigpKSk7CiAKLWdpbnQ2NCB3ZWJLaXRNZWRpYVNyY0dldFNpemUoV2ViS2l0TWVkaWFT
cmMqIHdlYktpdE1lZGlhU3JjKQotewotICAgIGdpbnQ2NCBkdXJhdGlvbiA9IDA7Ci0gICAgZm9y
IChTdHJlYW0qIHN0cmVhbSA6IHdlYktpdE1lZGlhU3JjLT5wcml2LT5zdHJlYW1zKQotICAgICAg
ICBkdXJhdGlvbiA9IHN0ZDo6bWF4PGdpbnQ2ND4oZHVyYXRpb24sIGdzdF9hcHBfc3JjX2dldF9z
aXplKEdTVF9BUFBfU1JDKHN0cmVhbS0+YXBwc3JjKSkpOwotICAgIHJldHVybiBkdXJhdGlvbjsK
KyAgICAgICAgaWYgKCFnc3RfY2Fwc19pc19lcXVhbChnc3Rfc2FtcGxlX2dldF9jYXBzKHNhbXBs
ZS5nZXQoKSksIHN0cmVhbWluZ01lbWJlcnMtPnByZXZpb3VzQ2Fwcy5nZXQoKSkpIHsKKyAgICAg
ICAgICAgIC8vIFRoaXMgc2FtcGxlIG5lZWRzIG5ldyBjYXBzICh0eXBpY2FsbHkgYmVjYXVzZSBv
ZiBhIHF1YWxpdHkgY2hhbmdlKS4KKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGFkLCAi
UHVzaGluZyBuZXcgQ0FQUyBldmVudDogJSIgR1NUX1BUUl9GT1JNQVQsIGdzdF9zYW1wbGVfZ2V0
X2NhcHMoc2FtcGxlLmdldCgpKSk7CisgICAgICAgICAgICBib29sIHJldCA9IGdzdF9wYWRfcHVz
aF9ldmVudChzdHJlYW0tPnBhZC5nZXQoKSwgZ3N0X2V2ZW50X25ld19jYXBzKGdzdF9zYW1wbGVf
Z2V0X2NhcHMoc2FtcGxlLmdldCgpKSkpOworICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChw
YWQsICJDQVBTIGV2ZW50IHB1c2hlZCwgcmV0ID0gJXMuIiwgYm9vbEZvclByaW50aW5nKHJldCkp
OworICAgICAgICAgICAgQVNTRVJUKHJldCk7CisgICAgICAgICAgICBzdHJlYW1pbmdNZW1iZXJz
LT5wcmV2aW91c0NhcHMgPSBnc3Rfc2FtcGxlX2dldF9jYXBzKHNhbXBsZS5nZXQoKSk7CisgICAg
ICAgIH0KKworICAgICAgICBHUmVmUHRyPEdzdEJ1ZmZlcj4gYnVmZmVyID0gZ3N0X3NhbXBsZV9n
ZXRfYnVmZmVyKHNhbXBsZS5nZXQoKSk7CisgICAgICAgIHNhbXBsZS5jbGVhcigpOworCisgICAg
ICAgIGJvb2wgcHVzaGluZ0ZpcnN0QnVmZmVyID0gIXN0cmVhbWluZ01lbWJlcnMtPmhhc1B1c2hl
ZEZpcnN0QnVmZmVyOworICAgICAgICBpZiAocHVzaGluZ0ZpcnN0QnVmZmVyKSB7CisgICAgICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHBhZCwgIlNlbmRpbmcgZmlyc3QgYnVmZmVyIG9uIHRoaXMg
cGFkLiIpOworICAgICAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBmaWxlTmFtZSB7IGdfc3RyZHVw
X3ByaW50ZigicGxheWJhY2stcGlwZWxpbmUtYmVmb3JlLXBsYXliYWNrLSVzIiwgc3RyZWFtLT50
cmFjay0+dHJhY2tJZCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpIH07CisgICAgICAgICAgICBH
U1RfREVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFMoR1NUX0JJTihmaW5kUGlwZWxpbmUoR1Jl
ZlB0cjxHc3RFbGVtZW50PihHU1RfRUxFTUVOVChzdHJlYW0tPnNvdXJjZSkpKS5nZXQoKSksCisg
ICAgICAgICAgICAgICAgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMLCBmaWxlTmFtZS5nZXQoKSk7
CisgICAgICAgICAgICBzdHJlYW1pbmdNZW1iZXJzLT5oYXNQdXNoZWRGaXJzdEJ1ZmZlciA9IHRy
dWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBQdXNoIHRoZSBidWZmZXIgd2l0aG91dCB0aGUg
c3RyZWFtaW5nTWVtYmVycyBsb2NrIHNvIHRoYXQgZmx1c2hlcyBjYW4gaGFwcGVuIHdoaWxlIGl0
IHRyYXZlbHMgZG93bnN0cmVhbS4KKyAgICAgICAgc3RyZWFtaW5nTWVtYmVycy5sb2NrSG9sZGVy
KCkudW5sb2NrRWFybHkoKTsKKworICAgICAgICBBU1NFUlQoR1NUX0JVRkZFUl9QVFNfSVNfVkFM
SUQoYnVmZmVyLmdldCgpKSk7CisgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1QocGFkLCAiUHVzaGlu
ZyBidWZmZXIgZG93bnN0cmVhbTogJSIgR1NUX1BUUl9GT1JNQVQsIGJ1ZmZlci5nZXQoKSk7Cisg
ICAgICAgIEdzdEZsb3dSZXR1cm4gcmV0ID0gZ3N0X3BhZF9wdXNoKHBhZCwgYnVmZmVyLmxlYWtS
ZWYoKSk7CisgICAgICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0sgJiYgcmV0ICE9IEdTVF9GTE9X
X0ZMVVNISU5HKSB7CisgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHBhZCwgIlB1c2hpbmcg
YnVmZmVyIHJldHVybmVkICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUocmV0KSk7CisgICAgICAgICAg
ICBHVW5pcXVlUHRyPGNoYXI+IGZpbGVOYW1lIHsgZ19zdHJkdXBfcHJpbnRmKCJwbGF5YmFjay1w
aXBlbGluZS1wdXNoaW5nLWJ1ZmZlci1mYWlsZWQtJXMiLCBzdHJlYW0tPnRyYWNrLT50cmFja0lk
KCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSkgfTsKKyAgICAgICAgICAgIEdTVF9ERUJVR19CSU5f
VE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKGZpbmRQaXBlbGluZShHUmVmUHRyPEdzdEVsZW1l
bnQ+KEdTVF9FTEVNRU5UKHN0cmVhbS0+c291cmNlKSkpLmdldCgpKSwKKyAgICAgICAgICAgICAg
ICBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGZpbGVOYW1lLmdldCgpKTsKKyAgICAgICAgICAg
IGdzdF9wYWRfcGF1c2VfdGFzayhwYWQpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChHU1Rf
SVNfRVZFTlQob2JqZWN0LmdldCgpKSkgeworICAgICAgICAvLyBFT1MgZXZlbnRzIGFuZCBvdGhl
ciBlbnF1ZXVlZCBldmVudHMgYXJlIGFsc28gc2VudCB1bmxvY2tlZCBzbyB0aGV5IGNhbiByZWFj
dCB0byBmbHVzaGVzIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgR1JlZlB0cjxHc3RFdmVudD4gZXZl
bnQgPSBHUmVmUHRyPEdzdEV2ZW50PihHU1RfRVZFTlQob2JqZWN0LmxlYWtSZWYoKSkpOworCisg
ICAgICAgIHN0cmVhbWluZ01lbWJlcnMubG9ja0hvbGRlcigpLnVubG9ja0Vhcmx5KCk7CisgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1QocGFkLCAiUHVzaGluZyBldmVudCBkb3duc3RyZWFtOiAlIiBH
U1RfUFRSX0ZPUk1BVCwgZXZlbnQuZ2V0KCkpOworICAgICAgICBib29sIGV2ZW50SGFuZGxlZCA9
IGdzdF9wYWRfcHVzaF9ldmVudChwYWQsIEdSZWZQdHI8R3N0RXZlbnQ+KGV2ZW50KS5sZWFrUmVm
KCkpOworICAgICAgICBpZiAoIWV2ZW50SGFuZGxlZCkKKyAgICAgICAgICAgIEdTVF9ERUJVR19P
QkpFQ1QocGFkLCAiUHVzaGVkIGV2ZW50IHdhcyBub3QgaGFuZGxlZDogJSIgR1NUX1BUUl9GT1JN
QVQsIGV2ZW50LmdldCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKLWdib29sZWFuIHdlYktpdE1lZGlhU3JjUXVlcnlXaXRoUGFyZW50KEdzdFBhZCog
cGFkLCBHc3RPYmplY3QqIHBhcmVudCwgR3N0UXVlcnkqIHF1ZXJ5KQorc3RhdGljIHZvaWQgd2Vi
S2l0TWVkaWFTcmNTdHJlYW1GbHVzaChTdHJlYW0qIHN0cmVhbSwgYm9vbCBpc1NlZWtpbmdGbHVz
aCkKIHsKLSAgICBXZWJLaXRNZWRpYVNyYyogc291cmNlID0gV0VCS0lUX01FRElBX1NSQyhHU1Rf
RUxFTUVOVChwYXJlbnQpKTsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKKyAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworICAgIGJvb2wgc2tpcEZsdXNoID0gZmFsc2U7CiAKLSAgICBz
d2l0Y2ggKEdTVF9RVUVSWV9UWVBFKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX0RVUkFU
SU9OOiB7Ci0gICAgICAgIEdzdEZvcm1hdCBmb3JtYXQ7Ci0gICAgICAgIGdzdF9xdWVyeV9wYXJz
ZV9kdXJhdGlvbihxdWVyeSwgJmZvcm1hdCwgbnVsbHB0cik7Ci0KLSAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChzb3VyY2UsICJkdXJhdGlvbiBxdWVyeSBpbiBmb3JtYXQgJXMiLCBnc3RfZm9ybWF0
X2dldF9uYW1lKGZvcm1hdCkpOwotICAgICAgICBHU1RfT0JKRUNUX0xPQ0soc291cmNlKTsKLSAg
ICAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHU1RfRk9STUFUX1RJTUU6IHsK
LSAgICAgICAgICAgIGlmIChzb3VyY2UtPnByaXYgJiYgc291cmNlLT5wcml2LT5tZWRpYVBsYXll
clByaXZhdGUpIHsKLSAgICAgICAgICAgICAgICBNZWRpYVRpbWUgZHVyYXRpb24gPSBzb3VyY2Ut
PnByaXYtPm1lZGlhUGxheWVyUHJpdmF0ZS0+ZHVyYXRpb25NZWRpYVRpbWUoKTsKLSAgICAgICAg
ICAgICAgICBpZiAoZHVyYXRpb24gPiBNZWRpYVRpbWU6Onplcm9UaW1lKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbihxdWVyeSwgZm9ybWF0LCBXZWJDb3Jl
Ojp0b0dzdENsb2NrVGltZShkdXJhdGlvbikpOwotICAgICAgICAgICAgICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHNvdXJjZSwgIkFuc3dlcmluZzogZHVyYXRpb249JSIgR1NUX1RJTUVfRk9STUFU
LCBHU1RfVElNRV9BUkdTKFdlYkNvcmU6OnRvR3N0Q2xvY2tUaW1lKGR1cmF0aW9uKSkpOwotICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBUUlVFOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR1NU
X0ZPUk1BVF9CWVRFUzogewotICAgICAgICAgICAgaWYgKHNvdXJjZS0+cHJpdikgewotICAgICAg
ICAgICAgICAgIGdpbnQ2NCBkdXJhdGlvbiA9IHdlYktpdE1lZGlhU3JjR2V0U2l6ZShzb3VyY2Up
OwotICAgICAgICAgICAgICAgIGlmIChkdXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICBn
c3RfcXVlcnlfc2V0X2R1cmF0aW9uKHF1ZXJ5LCBmb3JtYXQsIGR1cmF0aW9uKTsKLSAgICAgICAg
ICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzb3VyY2UsICJzaXplOiAlIiBHX0dJTlQ2NF9G
T1JNQVQsIGR1cmF0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gVFJVRTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICB7
CisgICAgICAgIERhdGFNdXRleDxTdHJlYW06OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFw
cGVyIHN0cmVhbWluZ01lbWJlcnMoc3RyZWFtLT5zdHJlYW1pbmdNZW1iZXJzRGF0YU11dGV4KTsK
KworICAgICAgICBpZiAoIXN0cmVhbWluZ01lbWJlcnMtPmhhc1BvcHBlZEZpcnN0T2JqZWN0KSB7
CisgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHN0cmVhbS0+c291cmNlLCAiRmx1c2ggcmVx
dWVzdCBmb3Igc3RyZWFtICclcycgb2NjdXJyZWQgYmVmb3JlIGhhc1BvcHBlZEZpcnN0T2JqZWN0
LCBqdXN0IGNsZWFyaW5nIHRoZSBxdWV1ZSBhbmQgcmVhZGp1c3RpbmcgdGhlIHNlZ21lbnQuIiwg
c3RyZWFtLT50cmFjay0+dHJhY2tJZCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICAgICAgRGF0YU11dGV4PFRyYWNrUXVldWU+OjpMb2NrZWRXcmFwcGVyIHF1ZXVlKHN0cmVhbS0+
dHJhY2stPnF1ZXVlRGF0YU11dGV4KCkpOworICAgICAgICAgICAgLy8gV2UgdXNlIGNsZWFyKCkg
aW5zdGVhZCBvZiBmbHVzaCgpIGJlY2F1c2UgdGhlIFdlYktpdE1lZGlhU3JjIHN0cmVhbWluZyB0
aHJlYWQgY291bGQgYmUgd2FpdGluZworICAgICAgICAgICAgLy8gZm9yIHRoZSBxdWV1ZS4gZmx1
c2goKSB3b3VsZCBjYW5jZWwgdGhlIG5vdEVtcHR5Q2FsbGJhY2sgdGhlcmVmb3JlIGxlYXZpbmcg
dGhlIHN0cmVhbWluZyB0aHJlYWQKKyAgICAgICAgICAgIC8vIHN0dWNrIHdhaXRpbmcgZm9yZXZl
ci4KKyAgICAgICAgICAgIHF1ZXVlLT5jbGVhcigpOworICAgICAgICAgICAgc2tpcEZsdXNoID0g
dHJ1ZTsKICAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgaWYgKCFza2lwRmx1c2gpIHsKKyAgICAgICAgLy8gU2lnbmFsIHRoZSBsb29w
KCkgZnVuY3Rpb24gdG8gc3RvcCB3YWl0aW5nIGZvciBhbnkgY29uZGl0aW9uIHZhcmlhYmxlLCBw
YXVzZSB0aGUgdGFzayBhbmQgcmV0dXJuLAorICAgICAgICAvLyB3aGljaCB3aWxsIGtlZXBpbmcg
dGhlIHN0cmVhbWluZyB0aHJlYWQgaWRsZS4KKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzdHJl
YW0tPnBhZC5nZXQoKSwgIlRha2luZyB0aGUgU3RyZWFtaW5nTWVtYmVycyBtdXRleCBhbmQgc2V0
dGluZyBpc0ZsdXNoaW5nID0gdHJ1ZS4iKTsKKyAgICAgICAgeworICAgICAgICAgICAgRGF0YU11
dGV4PFN0cmVhbTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgc3RyZWFtaW5nTWVt
YmVycyhzdHJlYW0tPnN0cmVhbWluZ01lbWJlcnNEYXRhTXV0ZXgpOworICAgICAgICAgICAgRGF0
YU11dGV4PFRyYWNrUXVldWU+OjpMb2NrZWRXcmFwcGVyIHF1ZXVlKHN0cmVhbS0+dHJhY2stPnF1
ZXVlRGF0YU11dGV4KCkpOworCisgICAgICAgICAgICBzdHJlYW1pbmdNZW1iZXJzLT5pc0ZsdXNo
aW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIHF1ZXVlLT5mbHVzaCgpOyAvLyBDbGVhciB0aGUgcXVl
dWUgYW5kIGNhbmNlbCBhbnkgd2FpdGluZyBjYWxsYmFjay4KKworICAgICAgICAgICAgc3RyZWFt
aW5nTWVtYmVycy0+cXVldWVDaGFuZ2VkT3JGbHVzaGVkQ29uZGl0aW9uLm5vdGlmeUFsbCgpOwor
ICAgICAgICAgICAgc3RyZWFtaW5nTWVtYmVycy0+cGFkTGlua2VkT3JGbHVzaGVkQ29uZGl0aW9u
Lm5vdGlmeUFsbCgpOwogICAgICAgICB9CiAKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc291
cmNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1FVRVJZX1VSSToKLSAg
ICAgICAgaWYgKHNvdXJjZSkgewotICAgICAgICAgICAgR1NUX09CSkVDVF9MT0NLKHNvdXJjZSk7
Ci0gICAgICAgICAgICBpZiAoc291cmNlLT5wcml2KQotICAgICAgICAgICAgICAgIGdzdF9xdWVy
eV9zZXRfdXJpKHF1ZXJ5LCBzb3VyY2UtPnByaXYtPmxvY2F0aW9uLmdldCgpKTsKLSAgICAgICAg
ICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNvdXJjZSk7CisgICAgICAgIC8vIEZsdXNoIGRvd25zdHJl
YW0uIFRoaXMgd2lsbCBzdG9wIHByb2Nlc3NpbmcgaW4gZG93bnN0cmVhbSBlbGVtZW50cyBhbmQg
aWYgdGhlIHN0cmVhbWluZyB0aHJlYWQgd2FzIGluIGEKKyAgICAgICAgLy8gZG93bnN0cmVhbSBj
aGFpbigpIGZ1bmN0aW9uLCBpdCB3aWxsIHF1aWNrbHkgcmV0dXJuIHRvIHRoZSBsb29wKCkgZnVu
Y3Rpb24sIHdoaWNoIHRoYW5rcyB0byB0aGUKKyAgICAgICAgLy8gcHJldmlvdXMgc2VjdGlvbiB3
aWxsIGFsc28gcXVpY2tseSBlbmQuCisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3RyZWFtLT5w
YWQuZ2V0KCksICJTZW5kaW5nIEZMVVNIX1NUQVJUIGRvd25zdHJlYW0uIik7CisgICAgICAgIGdz
dF9wYWRfcHVzaF9ldmVudChzdHJlYW0tPnBhZC5nZXQoKSwgZ3N0X2V2ZW50X25ld19mbHVzaF9z
dGFydCgpKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzdHJlYW0tPnBhZC5nZXQoKSwgIkZM
VVNIX1NUQVJUIHNlbnQuIik7CisgICAgfQorCisgICAgLy8gQWRqdXN0IHNlZ21lbnQuIFRoaXMg
aXMgZGlmZmVyZW50IGZvciBzZWVrcyBhbmQgbm9uLXNlZWtpbmcgZmx1c2hlcy4KKyAgICBpZiAo
aXNTZWVraW5nRmx1c2gpIHsKKyAgICAgICAgLy8gSW4gdGhlIGNhc2Ugb2Ygc2Vla2luZyBmbHVz
aCB3ZSBhcmUgcmVzZXR0aW5nIHRoZSB0aW1lbGluZSAoc2VlIHRoZSBmbHVzaCBzdG9wIGxhdGVy
KS4KKyAgICAgICAgLy8gVGhlIHJlc3VsdGluZyBzZWdtZW50IGlzIGJyYW5kIG5ldywgYnV0IHdp
dGggYSBkaWZmZXJlbnQgc3RhcnQgdGltZS4KKyAgICAgICAgV2ViS2l0TWVkaWFTcmNQcml2YXRl
KiBwcml2ID0gc3RyZWFtLT5zb3VyY2UtPnByaXY7CisgICAgICAgIERhdGFNdXRleDxTdHJlYW06
OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyIHN0cmVhbWluZ01lbWJlcnMoc3RyZWFt
LT5zdHJlYW1pbmdNZW1iZXJzRGF0YU11dGV4KTsKKyAgICAgICAgc3RyZWFtaW5nTWVtYmVycy0+
c2VnbWVudC5iYXNlID0gMDsKKyAgICAgICAgc3RyZWFtaW5nTWVtYmVycy0+c2VnbWVudC5yYXRl
ID0gcHJpdi0+cmF0ZTsKKyAgICAgICAgc3RyZWFtaW5nTWVtYmVycy0+c2VnbWVudC5zdGFydCA9
IHN0cmVhbWluZ01lbWJlcnMtPnNlZ21lbnQudGltZSA9IHByaXYtPnN0YXJ0VGltZTsKKyAgICB9
IGVsc2UgeworICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiBub24tc2Vla2luZyBmbHVzaGVzIHdl
IGRvbid0IHJlc2V0IHRoZSB0aW1lbGluZSwgc28gaW5zdGVhZCB3ZSBuZWVkIHRvIGluY3JlYXNl
IHRoZSBgYmFzZWAgZmllbGQKKyAgICAgICAgLy8gYnkgaG93ZXZlciBydW5uaW5nIHRpbWUgd2Un
cmUgc3RhcnRpbmcgYWZ0ZXIgdGhlIGZsdXNoLgorCisgICAgICAgIEdzdENsb2NrVGltZSBwaXBl
bGluZVN0cmVhbVRpbWU7CisgICAgICAgIGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uKGZpbmRQ
aXBlbGluZShHUmVmUHRyPEdzdEVsZW1lbnQ+KEdTVF9FTEVNRU5UKHN0cmVhbS0+c291cmNlKSkp
LmdldCgpLCBHU1RfRk9STUFUX1RJTUUsCisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGdp
bnQ2NCo+KCZwaXBlbGluZVN0cmVhbVRpbWUpKTsKKyAgICAgICAgLy8gR1NUX0NMT0NLX1RJTUVf
Tk9ORSBpcyByZXR1cm5lZCB3aGVuIHRoZSBwaXBlbGluZSBpcyBub3QgeWV0IHByZS1yb2xsZWQg
KGUuZy4ganVzdCBhZnRlciBhIHNlZWspLiBJbiB0aGlzIGNhc2UKKyAgICAgICAgLy8gd2UgZG9u
J3QgbmVlZCB0byBhZGp1c3QgdGhlIHNlZ21lbnQgdGhvdWdoLCBhcyBydW5uaW5nIHRpbWUgaGFz
IG5vdCBhZHZhbmNlZC4KKyAgICAgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEKHBpcGVs
aW5lU3RyZWFtVGltZSkpIHsKKyAgICAgICAgICAgIERhdGFNdXRleDxTdHJlYW06OlN0cmVhbWlu
Z01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyIHN0cmVhbWluZ01lbWJlcnMoc3RyZWFtLT5zdHJlYW1p
bmdNZW1iZXJzRGF0YU11dGV4KTsKKyAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gaW5jcmVhc2Ug
dGhlIGJhc2UgYnkgdGhlIHJ1bm5pbmcgdGltZSBhY2N1bXVsYXRlZCBkdXJpbmcgdGhlIHByZXZp
b3VzIHNlZ21lbnQuCisKKyAgICAgICAgICAgIEdzdENsb2NrVGltZSBwaXBlbGluZVJ1bm5pbmdU
aW1lID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lKCZzdHJlYW1pbmdNZW1iZXJzLT5zZWdt
ZW50LCBHU1RfRk9STUFUX1RJTUUsIHBpcGVsaW5lU3RyZWFtVGltZSk7CisgICAgICAgICAgICBh
c3NlcnQoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQocGlwZWxpbmVSdW5uaW5nVGltZSkpOworICAg
ICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzdHJlYW0tPnNvdXJjZSwgIlJlc2V0dGluZyBzZWdt
ZW50IHRvIGN1cnJlbnQgcGlwZWxpbmUgcnVubmluZyB0aW1lICglIiBHU1RfVElNRV9GT1JNQVQi
KSBhbmQgc3RyZWFtIHRpbWUgKCUiIEdTVF9USU1FX0ZPUk1BVCAiKSIsCisgICAgICAgICAgICAg
ICAgR1NUX1RJTUVfQVJHUyhwaXBlbGluZVJ1bm5pbmdUaW1lKSwgR1NUX1RJTUVfQVJHUyhwaXBl
bGluZVN0cmVhbVRpbWUpKTsKKyAgICAgICAgICAgIHN0cmVhbWluZ01lbWJlcnMtPnNlZ21lbnQu
YmFzZSA9IHBpcGVsaW5lUnVubmluZ1RpbWU7CisKKyAgICAgICAgICAgIHN0cmVhbWluZ01lbWJl
cnMtPnNlZ21lbnQuc3RhcnQgPSBzdHJlYW1pbmdNZW1iZXJzLT5zZWdtZW50LnRpbWUgPSBzdGF0
aWNfY2FzdDxHc3RDbG9ja1RpbWU+KHBpcGVsaW5lU3RyZWFtVGltZSk7CiAgICAgICAgIH0KLSAg
ICAgICAgcmVzdWx0ID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDogewotICAg
ICAgICBHUmVmUHRyPEdzdFBhZD4gdGFyZ2V0ID0gYWRvcHRHUmVmKGdzdF9naG9zdF9wYWRfZ2V0
X3RhcmdldChHU1RfR0hPU1RfUEFEX0NBU1QocGFkKSkpOwotICAgICAgICAvLyBGb3J3YXJkIHRo
ZSBxdWVyeSB0byB0aGUgcHJveHkgdGFyZ2V0IHBhZC4KLSAgICAgICAgaWYgKHRhcmdldCkKLSAg
ICAgICAgICAgIHJlc3VsdCA9IGdzdF9wYWRfcXVlcnkodGFyZ2V0LmdldCgpLCBxdWVyeSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0OwotfQorICAg
IGlmICghc2tpcEZsdXNoKSB7CisgICAgICAgIC8vIEJ5IHRha2luZyB0aGUgc3RyZWFtIGxvY2sg
d2UgYXJlIHdhaXRpbmcgZm9yIHRoZSBzdHJlYW1pbmcgdGhyZWFkIHRhc2sgdG8gc3RvcCBpZiBp
dCBoYWRuJ3QgeWV0LgorICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHN0cmVhbS0+cGFkLmdldCgp
LCAiVGFraW5nIHRoZSBTVFJFQU1fTE9DSy4iKTsKKyAgICAgICAgR1NUX1BBRF9TVFJFQU1fTE9D
SyhzdHJlYW0tPnBhZC5nZXQoKSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19P
QkpFQ1Qoc3RyZWFtLT5wYWQuZ2V0KCksICJUYWtpbmcgdGhlIFN0cmVhbWluZ01lbWJlcnMgbXV0
ZXggYWdhaW4uIik7CisgICAgICAgICAgICBEYXRhTXV0ZXg8U3RyZWFtOjpTdHJlYW1pbmdNZW1i
ZXJzPjo6TG9ja2VkV3JhcHBlciBzdHJlYW1pbmdNZW1iZXJzKHN0cmVhbS0+c3RyZWFtaW5nTWVt
YmVyc0RhdGFNdXRleCk7CisgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHN0cmVhbS0+cGFk
LmdldCgpLCAiU3RyZWFtaW5nTWVtYmVycyBtdXRleCB0YWtlbiwgdXNpbmcgaXQgdG8gc2V0IGlz
Rmx1c2hpbmcgPSBmYWxzZS4iKTsKKyAgICAgICAgICAgIHN0cmVhbWluZ01lbWJlcnMtPmlzRmx1
c2hpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIHN0cmVhbWluZ01lbWJlcnMtPmRvZXNOZWVkU2Vn
bWVudEV2ZW50ID0gdHJ1ZTsKKyAgICAgICAgfQogCi12b2lkIHdlYktpdE1lZGlhU3JjVXBkYXRl
UHJlc2VudGF0aW9uU2l6ZShHc3RDYXBzKiBjYXBzLCBTdHJlYW0qIHN0cmVhbSkKLXsKLSAgICBH
U1RfT0JKRUNUX0xPQ0soc3RyZWFtLT5wYXJlbnQpOwotICAgIGlmIChXZWJDb3JlOjpkb0NhcHNI
YXZlVHlwZShjYXBzLCBHU1RfVklERU9fQ0FQU19UWVBFX1BSRUZJWCkpIHsKLSAgICAgICAgT3B0
aW9uYWw8V2ViQ29yZTo6RmxvYXRTaXplPiBzaXplID0gV2ViQ29yZTo6Z2V0VmlkZW9SZXNvbHV0
aW9uRnJvbUNhcHMoY2Fwcyk7Ci0gICAgICAgIGlmIChzaXplLmhhc1ZhbHVlKCkpCi0gICAgICAg
ICAgICBzdHJlYW0tPnByZXNlbnRhdGlvblNpemUgPSBzaXplLnZhbHVlKCk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHN0cmVhbS0+cHJlc2VudGF0aW9uU2l6ZSA9IFdlYkNvcmU6OkZsb2F0
U2l6ZSgpOwotICAgIH0gZWxzZQotICAgICAgICBzdHJlYW0tPnByZXNlbnRhdGlvblNpemUgPSBX
ZWJDb3JlOjpGbG9hdFNpemUoKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzdHJlYW0tPnBh
ZC5nZXQoKSwgIlNlbmRpbmcgRkxVU0hfU1RPUCBkb3duc3RyZWFtIChyZXNldFRpbWUgPSAlcyku
IiwgYm9vbEZvclByaW50aW5nKGlzU2Vla2luZ0ZsdXNoKSk7CisgICAgICAgIC8vIFNpbmNlIEZM
VVNIX1NUT1AgaXMgYSBzeW5jaHJvbml6ZWQgZXZlbnQsIHdlIHNlbmQgaXQgd2hpbGUgd2Ugc3Rp
bGwgaG9sZCB0aGUgc3RyZWFtIGxvY2sgb2YgdGhlIHBhZC4KKyAgICAgICAgZ3N0X3BhZF9wdXNo
X2V2ZW50KHN0cmVhbS0+cGFkLmdldCgpLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AoaXNTZWVr
aW5nRmx1c2gpKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzdHJlYW0tPnBhZC5nZXQoKSwg
IkZMVVNIX1NUT1Agc2VudC4iKTsKIAotICAgIGdzdF9jYXBzX3JlZihjYXBzKTsKLSAgICBzdHJl
YW0tPmNhcHMgPSBhZG9wdEdSZWYoY2Fwcyk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0soc3RyZWFt
LT5wYXJlbnQpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHN0cmVhbS0+cGFkLmdldCgpLCAi
U3RhcnRpbmcgd2ViS2l0TWVkaWFTcmNMb29wIHRhc2sgYW5kIHJlbGVhc2luZyB0aGUgU1RSRUFN
X0xPQ0suIik7CisgICAgICAgIGdzdF9wYWRfc3RhcnRfdGFzayhzdHJlYW0tPnBhZC5nZXQoKSwg
d2ViS2l0TWVkaWFTcmNMb29wLCBzdHJlYW0tPnBhZC5nZXQoKSwgbnVsbHB0cik7CisgICAgICAg
IEdTVF9QQURfU1RSRUFNX1VOTE9DSyhzdHJlYW0tPnBhZC5nZXQoKSk7CisgICAgfQogfQogCi12
b2lkIHdlYktpdE1lZGlhU3JjTGlua1N0cmVhbVRvU3JjUGFkKEdzdFBhZCogc291cmNlUGFkLCBT
dHJlYW0qIHN0cmVhbSkKK3ZvaWQgd2ViS2l0TWVkaWFTcmNGbHVzaChXZWJLaXRNZWRpYVNyYyog
c291cmNlLCBjb25zdCBBdG9tU3RyaW5nJiBzdHJlYW1OYW1lKQogewotICAgIHVuc2lnbmVkIHBh
ZElkID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdQT0lOVEVSX1RPX0lOVChnX29iamVjdF9nZXRf
ZGF0YShHX09CSkVDVChzb3VyY2VQYWQpLCAicGFkSWQiKSkpOwotICAgIEdTVF9ERUJVR19PQkpF
Q1Qoc3RyZWFtLT5wYXJlbnQsICJsaW5raW5nIHN0cmVhbSB0byBzcmMgcGFkIChpZDogJXUpIiwg
cGFkSWQpOwotCi0gICAgR1VuaXF1ZVB0cjxnY2hhcj4gcGFkTmFtZShnX3N0cmR1cF9wcmludGYo
InNyY18ldSIsIHBhZElkKSk7Ci0gICAgR3N0UGFkKiBnaG9zdHBhZCA9IFdlYkNvcmU6OndlYmtp
dEdzdEdob3N0UGFkRnJvbVN0YXRpY1RlbXBsYXRlKCZzcmNUZW1wbGF0ZSwgcGFkTmFtZS5nZXQo
KSwgc291cmNlUGFkKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEdTVF9ERUJV
R19PQkpFQ1Qoc291cmNlLCAiUmVjZWl2ZWQgbm9uLXNlZWsgZmx1c2ggcmVxdWVzdCBmb3Igc3Ry
ZWFtICclcycuIiwgc3RyZWFtTmFtZS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBTdHJl
YW0qIHN0cmVhbSA9IHNvdXJjZS0+cHJpdi0+c3RyZWFtQnlOYW1lKHN0cmVhbU5hbWUpOwogCi0g
ICAgYXV0byBwcm94eXBhZCA9IGFkb3B0R1JlZihHU1RfUEFEKGdzdF9wcm94eV9wYWRfZ2V0X2lu
dGVybmFsKEdTVF9QUk9YWV9QQUQoZ2hvc3RwYWQpKSkpOwotICAgIGdzdF9mbG93X2NvbWJpbmVy
X2FkZF9wYWQoc3RyZWFtLT5wYXJlbnQtPnByaXYtPmZsb3dDb21iaW5lci5nZXQoKSwgcHJveHlw
YWQuZ2V0KCkpOwotICAgIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uKHByb3h5cGFkLmdldCgp
LCBzdGF0aWNfY2FzdDxHc3RQYWRDaGFpbkZ1bmN0aW9uPih3ZWJraXRNZWRpYVNyY0NoYWluKSk7
Ci0gICAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24oZ2hvc3RwYWQsIHdlYktpdE1lZGlhU3Jj
UXVlcnlXaXRoUGFyZW50KTsKLQotICAgIGdzdF9wYWRfc2V0X2FjdGl2ZShnaG9zdHBhZCwgVFJV
RSk7Ci0gICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChHU1RfRUxFTUVOVChzdHJlYW0tPnBhcmVudCks
IGdob3N0cGFkKTsKKyAgICB3ZWJLaXRNZWRpYVNyY1N0cmVhbUZsdXNoKHN0cmVhbSwgZmFsc2Up
OwogfQogCi12b2lkIHdlYktpdE1lZGlhU3JjTGlua1NvdXJjZVBhZChHc3RQYWQqIHNvdXJjZVBh
ZCwgR3N0Q2FwcyogY2FwcywgU3RyZWFtKiBzdHJlYW0pCitzdGF0aWMgdm9pZCB3ZWJLaXRNZWRp
YVNyY1NlZWsoV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSwgdWludDY0X3Qgc3RhcnRUaW1lLCBkb3Vi
bGUgcmF0ZSkKIHsKLSAgICBBU1NFUlQoY2FwcyAmJiBzdHJlYW0tPnBhcmVudCk7Ci0gICAgaWYg
KCFjYXBzIHx8ICFzdHJlYW0tPnBhcmVudCkgewotICAgICAgICBHU1RfRVJST1IoIlVuYWJsZSB0
byBsaW5rIHBhcnNlciIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgd2ViS2l0TWVk
aWFTcmNVcGRhdGVQcmVzZW50YXRpb25TaXplKGNhcHMsIHN0cmVhbSk7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBzb3VyY2UtPnByaXYtPnN0YXJ0VGltZSA9IHN0YXJ0VGltZTsK
KyAgICBzb3VyY2UtPnByaXYtPnJhdGUgPSByYXRlOworICAgIEdTVF9ERUJVR19PQkpFQ1Qoc291
cmNlLCAiU2VlayByZXF1ZXN0ZWQgdG8gdGltZSAlIiBHU1RfVElNRV9GT1JNQVQgIiB3aXRoIHJh
dGUgJWYuIiwgR1NUX1RJTUVfQVJHUyhzdGFydFRpbWUpLCByYXRlKTsKIAotICAgIC8vIEZJWE1F
OiBkcm9wIHdlYktpdE1lZGlhU3JjTGlua1N0cmVhbVRvU3JjUGFkKCkgYW5kIG1vdmUgaXRzIGNv
ZGUgaGVyZS4KLSAgICBpZiAoIWdzdF9wYWRfaXNfbGlua2VkKHNvdXJjZVBhZCkpIHsKLSAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChzdHJlYW0tPnBhcmVudCwgInBhZCBub3QgbGlua2VkIHlldCIp
OwotICAgICAgICB3ZWJLaXRNZWRpYVNyY0xpbmtTdHJlYW1Ub1NyY1BhZChzb3VyY2VQYWQsIHN0
cmVhbSk7CisgICAgZm9yIChhdXRvJiBwYWlyIDogc291cmNlLT5wcml2LT5zdHJlYW1zKSB7Cisg
ICAgICAgIGNvbnN0IFJlZlB0cjxTdHJlYW0+JiBzdHJlYW0gPSBwYWlyLnZhbHVlOworICAgICAg
ICB3ZWJLaXRNZWRpYVNyY1N0cmVhbUZsdXNoKHN0cmVhbS5nZXQoKSwgdHJ1ZSk7CiAgICAgfQot
Ci0gICAgd2ViS2l0TWVkaWFTcmNDaGVja0FsbFRyYWNrc0NvbmZpZ3VyZWQoc3RyZWFtLT5wYXJl
bnQpOwogfQogCi12b2lkIHdlYktpdE1lZGlhU3JjRnJlZVN0cmVhbShXZWJLaXRNZWRpYVNyYyog
c291cmNlLCBTdHJlYW0qIHN0cmVhbSkKK3N0YXRpYyBpbnQgY291bnRTdHJlYW1zT2ZUeXBlKFdl
YktpdE1lZGlhU3JjKiBzb3VyY2UsIFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6
OlRyYWNrVHlwZSB0eXBlKQogewotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc291cmNlLCAiUmVsZWFz
aW5nIHN0cmVhbTogJXAiLCBzdHJlYW0pOworICAgIC8vIEJhcnJpbmcgcGlwZWxpbmUgZHVtcHMg
c29tZW9uZSBtYXkgYWRkIGR1cmluZyBkZWJ1Z2dpbmcsIFdlYktpdCB3aWxsIG9ubHkgcmVhZCB0
aGVzZSBwcm9wZXJ0aWVzIChuLXZpZGVvIGV0Yy4pIGZyb20gdGhlIG1haW4gdGhyZWFkLgorICAg
IHJldHVybiBzdGQ6OmNvdW50X2lmKHNvdXJjZS0+cHJpdi0+c3RyZWFtcy5iZWdpbigpLCBzb3Vy
Y2UtPnByaXYtPnN0cmVhbXMuZW5kKCksIFt0eXBlXShhdXRvIGl0ZW0pIHsKKyAgICAgICAgcmV0
dXJuIGl0ZW0udmFsdWUtPnRyYWNrLT50eXBlKCkgPT0gdHlwZTsKKyAgICB9KTsKK30KIAotICAg
IGlmIChHU1RfSVNfQVBQX1NSQyhzdHJlYW0tPmFwcHNyYykpIHsKLSAgICAgICAgLy8gRG9uJ3Qg
dHJpZ2dlciBjYWxsYmFja3MgZnJvbSB0aGlzIGFwcHNyYyB0byBhdm9pZCB1c2luZyB0aGUgc3Ry
ZWFtIGFueW1vcmUuCi0gICAgICAgIGdzdF9hcHBfc3JjX3NldF9jYWxsYmFja3MoR1NUX0FQUF9T
UkMoc3RyZWFtLT5hcHBzcmMpLCAmZGlzYWJsZWRBcHBzcmNDYWxsYmFja3MsIG51bGxwdHIsIG51
bGxwdHIpOwotICAgICAgICBnc3RfYXBwX3NyY19lbmRfb2Zfc3RyZWFtKEdTVF9BUFBfU1JDKHN0
cmVhbS0+YXBwc3JjKSk7Ci0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYoc3RyZWFtLT5hcHBzcmMp
OwotICAgIH0KK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjR2V0UHJvcGVydHkoR09iamVjdCog
b2JqZWN0LCB1bnNpZ25lZCBwcm9wSWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVj
KQoreworICAgIFdlYktpdE1lZGlhU3JjKiBzb3VyY2UgPSBXRUJLSVRfTUVESUFfU1JDKG9iamVj
dCk7CiAKLSAgICBHU1RfT0JKRUNUX0xPQ0soc291cmNlKTsKLSAgICBzd2l0Y2ggKHN0cmVhbS0+
dHlwZSkgewotICAgIGNhc2UgV2ViQ29yZTo6QXVkaW86Ci0gICAgICAgIHNvdXJjZS0+cHJpdi0+
bnVtYmVyT2ZBdWRpb1N0cmVhbXMtLTsKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2Ug
UFJPUF9OX0FVRElPOgorICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIGNvdW50U3RyZWFt
c09mVHlwZShzb3VyY2UsIFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNr
VHlwZTo6QXVkaW8pKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJDb3JlOjpWaWRlbzoK
LSAgICAgICAgc291cmNlLT5wcml2LT5udW1iZXJPZlZpZGVvU3RyZWFtcy0tOworICAgIGNhc2Ug
UFJPUF9OX1ZJREVPOgorICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIGNvdW50U3RyZWFt
c09mVHlwZShzb3VyY2UsIFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNr
VHlwZTo6VmlkZW8pKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJDb3JlOjpUZXh0Ogot
ICAgICAgICBzb3VyY2UtPnByaXYtPm51bWJlck9mVGV4dFN0cmVhbXMtLTsKKyAgICBjYXNlIFBS
T1BfTl9URVhUOgorICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIGNvdW50U3RyZWFtc09m
VHlwZShzb3VyY2UsIFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlw
ZTo6VGV4dCkpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsK
KyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElk
LCBwc3BlYyk7CiAgICAgfQotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNvdXJjZSk7Cit9CiAKLSAg
ICBpZiAoc3RyZWFtLT50eXBlICE9IFdlYkNvcmU6OkludmFsaWQpIHsKLSAgICAgICAgR1NUX0RF
QlVHKCJGcmVlaW5nIHRyYWNrLXJlbGF0ZWQgaW5mbyBvbiBzdHJlYW0gJXAiLCBzdHJlYW0pOwot
Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHNvdXJjZS0+cHJpdi0+c3RyZWFtTG9jayk7Ci0K
LSAgICAgICAgaWYgKHN0cmVhbS0+Y2FwcykKLSAgICAgICAgICAgIHN0cmVhbS0+Y2FwcyA9IG51
bGxwdHI7Ci0KLSAgICAgICAgaWYgKHN0cmVhbS0+YXVkaW9UcmFjaykKLSAgICAgICAgICAgIHN0
cmVhbS0+YXVkaW9UcmFjayA9IG51bGxwdHI7Ci0gICAgICAgIGlmIChzdHJlYW0tPnZpZGVvVHJh
Y2spCi0gICAgICAgICAgICBzdHJlYW0tPnZpZGVvVHJhY2sgPSBudWxscHRyOwotCi0gICAgICAg
IGludCBzaWduYWwgPSAtMTsKLSAgICAgICAgc3dpdGNoIChzdHJlYW0tPnR5cGUpIHsKLSAgICAg
ICAgY2FzZSBXZWJDb3JlOjpBdWRpbzoKLSAgICAgICAgICAgIHNpZ25hbCA9IFNJR05BTF9BVURJ
T19DSEFOR0VEOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6Vmlk
ZW86Ci0gICAgICAgICAgICBzaWduYWwgPSBTSUdOQUxfVklERU9fQ0hBTkdFRDsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdlYkNvcmU6OlRleHQ6Ci0gICAgICAgICAgICBzaWdu
YWwgPSBTSUdOQUxfVEVYVF9DSEFOR0VEOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3
ZWJLaXRNZWRpYVNyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0YXRlQ2hh
bmdlIHRyYW5zaXRpb24pCit7CisgICAgV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSA9IFdFQktJVF9N
RURJQV9TUkMoZWxlbWVudCk7CisgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBH
U1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKKyAgICAgICAgR1NUX0RFQlVHX09CSkVD
VChzb3VyY2UsICJEb3duZ3JhZGluZyB0byBSRUFEWSBzdGF0ZSwgdGVhcmluZyBkb3duIGFsbCBz
dHJlYW1zLi4uIik7CisgICAgICAgIHdoaWxlICghc291cmNlLT5wcml2LT5zdHJlYW1zLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHdlYktpdE1lZGlhU3JjVGVhckRvd25TdHJlYW0oc291cmNlLCBz
b3VyY2UtPnByaXYtPnN0cmVhbXMuYmVnaW4oKS0+a2V5KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKKyAgICAgICAgaWYgKHNvdXJj
ZS0+cHJpdi0+aXNTdGFydGVkKCkpIHsKKyAgICAgICAgICAgIEdTVF9GSVhNRV9PQkpFQ1Qoc291
cmNlLCAiUmVzdW1pbmcgc3RhdGUgZnJvbSBSRUFEWSAtPiBQQVVTRUQgYWZ0ZXIgYSBkb3duZ3Jh
ZGUgaXMgbm90IGltcGxlbWVudGVkLiBFeHBlY3QgZmFpbHVyZS4iKTsKICAgICAgICAgfQotICAg
ICAgICBzdHJlYW0tPnR5cGUgPSBXZWJDb3JlOjpJbnZhbGlkOwotCi0gICAgICAgIGlmIChzaWdu
YWwgIT0gLTEpCi0gICAgICAgICAgICBnX3NpZ25hbF9lbWl0KEdfT0JKRUNUKHNvdXJjZSksIHdl
YktpdE1lZGlhU3JjU2lnbmFsc1tzaWduYWxdLCAwLCBudWxscHRyKTsKLQotICAgICAgICBzb3Vy
Y2UtPnByaXYtPnN0cmVhbUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CiAgICAgfQotCi0gICAgZGVsZXRlIHN0cmVhbTsK
KyAgICByZXR1cm4gR1NUX0VMRU1FTlRfQ0xBU1Mod2Via2l0X21lZGlhX3NyY19wYXJlbnRfY2xh
c3MpLT5jaGFuZ2Vfc3RhdGUoZWxlbWVudCwgdHJhbnNpdGlvbik7CiB9CiAKLXZvaWQgd2ViS2l0
TWVkaWFTcmNDaGVja0FsbFRyYWNrc0NvbmZpZ3VyZWQoV2ViS2l0TWVkaWFTcmMqIHdlYktpdE1l
ZGlhU3JjKQorc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlhU3JjU2VuZEV2ZW50KEdzdEVsZW1l
bnQqIGVsZW1lbnQsIEdzdEV2ZW50KiBldmVudCkKIHsKLSAgICBib29sIGFsbFRyYWNrc0NvbmZp
Z3VyZWQgPSBmYWxzZTsKLQotICAgIEdTVF9PQkpFQ1RfTE9DSyh3ZWJLaXRNZWRpYVNyYyk7Ci0g
ICAgaWYgKCF3ZWJLaXRNZWRpYVNyYy0+cHJpdi0+YWxsVHJhY2tzQ29uZmlndXJlZCkgewotICAg
ICAgICBhbGxUcmFja3NDb25maWd1cmVkID0gdHJ1ZTsKLSAgICAgICAgZm9yIChTdHJlYW0qIHN0
cmVhbSA6IHdlYktpdE1lZGlhU3JjLT5wcml2LT5zdHJlYW1zKSB7Ci0gICAgICAgICAgICBpZiAo
c3RyZWFtLT50eXBlID09IFdlYkNvcmU6OkludmFsaWQpIHsKLSAgICAgICAgICAgICAgICBhbGxU
cmFja3NDb25maWd1cmVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9CisgICAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRShldmVudCkpIHsKKyAgICBjYXNlIEdT
VF9FVkVOVF9TRUVLOiB7CisgICAgICAgIGRvdWJsZSByYXRlOworICAgICAgICBHc3RGb3JtYXQg
Zm9ybWF0OworICAgICAgICBHc3RTZWVrVHlwZSBzdGFydFR5cGU7CisgICAgICAgIGludDY0X3Qg
c3RhcnQ7CisgICAgICAgIGdzdF9ldmVudF9wYXJzZV9zZWVrKGV2ZW50LCAmcmF0ZSwgJmZvcm1h
dCwgbnVsbHB0ciwgJnN0YXJ0VHlwZSwgJnN0YXJ0LCBudWxscHRyLCBudWxscHRyKTsKKyAgICAg
ICAgaWYgKGZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUgfHwgc3RhcnRUeXBlICE9IEdTVF9TRUVL
X1RZUEVfU0VUKSB7CisgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKGVsZW1lbnQsICJSZWpl
Y3RpbmcgdW5zdXBwb3J0ZWQgc2VlayBldmVudDogJSIgR1NUX1BUUl9GT1JNQVQsIGV2ZW50KTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBpZiAoYWxsVHJh
Y2tzQ29uZmlndXJlZCkKLSAgICAgICAgICAgIHdlYktpdE1lZGlhU3JjLT5wcml2LT5hbGxUcmFj
a3NDb25maWd1cmVkID0gdHJ1ZTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChlbGVtZW50LCAi
SGFuZGxpbmcgc2VlayBldmVudDogJSIgR1NUX1BUUl9GT1JNQVQsIGV2ZW50KTsKKyAgICAgICAg
d2ViS2l0TWVkaWFTcmNTZWVrKFdFQktJVF9NRURJQV9TUkMoZWxlbWVudCksIHN0YXJ0LCByYXRl
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHdl
YktpdE1lZGlhU3JjKTsKLQotICAgIGlmIChhbGxUcmFja3NDb25maWd1cmVkKSB7Ci0gICAgICAg
IEdTVF9ERUJVRygiQWxsIHRyYWNrcyBhdHRhY2hlZC4gQ29tcGxldGluZyBhc3luYyBzdGF0ZSBj
aGFuZ2Ugb3BlcmF0aW9uLiIpOwotICAgICAgICBnc3RfZWxlbWVudF9ub19tb3JlX3BhZHMoR1NU
X0VMRU1FTlQod2ViS2l0TWVkaWFTcmMpKTsKLSAgICAgICAgd2ViS2l0TWVkaWFTcmNEb0FzeW5j
RG9uZSh3ZWJLaXRNZWRpYVNyYyk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChlbGVtZW50LCAiUmVqZWN0aW5nIHVuc3VwcG9ydGVkIGV2ZW50OiAlIiBHU1RfUFRSX0ZP
Uk1BVCwgZXZlbnQpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQogCi0vLyBVcmkg
aGFuZGxlciBpbnRlcmZhY2UuCi1Hc3RVUklUeXBlIHdlYktpdE1lZGlhU3JjVXJpR2V0VHlwZShH
VHlwZSkKKy8vIFVSSSBoYW5kbGVyIGludGVyZmFjZS4gSXQncyBvbmx5IHB1cnBvc2UgaXMgZm9y
IHRoZSBlbGVtZW50IHRvIGJlIGluc3RhbnRpYXRlZCBieSBwbGF5YmluIG9uICJtZWRpYXNvdXJj
ZWJsb2I6IgorLy8gVVJJcy4gVGhlIGFjdHVhbCBVUkkgZG9lcyBub3QgbWF0dGVyLgorc3RhdGlj
IEdzdFVSSVR5cGUgd2ViS2l0TWVkaWFTcmNVcmlHZXRUeXBlKEdUeXBlKQogewogICAgIHJldHVy
biBHU1RfVVJJX1NSQzsKIH0KIAotY29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJLaXRNZWRpYVNyY0dl
dFByb3RvY29scyhHVHlwZSkKK3N0YXRpYyBjb25zdCBnY2hhciogY29uc3QqIHdlYktpdE1lZGlh
U3JjR2V0UHJvdG9jb2xzKEdUeXBlKQogewogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBwcm90b2Nv
bHNbXSA9IHsibWVkaWFzb3VyY2VibG9iIiwgbnVsbHB0ciB9OwogICAgIHJldHVybiBwcm90b2Nv
bHM7CiB9CiAKLWdjaGFyKiB3ZWJLaXRNZWRpYVNyY0dldFVyaShHc3RVUklIYW5kbGVyKiBoYW5k
bGVyKQorc3RhdGljIGdjaGFyKiB3ZWJLaXRNZWRpYVNyY0dldFVyaShHc3RVUklIYW5kbGVyKiBo
YW5kbGVyKQogewogICAgIFdlYktpdE1lZGlhU3JjKiBzb3VyY2UgPSBXRUJLSVRfTUVESUFfU1JD
KGhhbmRsZXIpOwogICAgIGdjaGFyKiByZXN1bHQ7CiAKICAgICBHU1RfT0JKRUNUX0xPQ0soc291
cmNlKTsKLSAgICByZXN1bHQgPSBnX3N0cmR1cChzb3VyY2UtPnByaXYtPmxvY2F0aW9uLmdldCgp
KTsKKyAgICByZXN1bHQgPSBnX3N0cmR1cChzb3VyY2UtPnByaXYtPnVyaS5nZXQoKSk7CiAgICAg
R1NUX09CSkVDVF9VTkxPQ0soc291cmNlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1nYm9v
bGVhbiB3ZWJLaXRNZWRpYVNyY1NldFVyaShHc3RVUklIYW5kbGVyKiBoYW5kbGVyLCBjb25zdCBn
Y2hhciogdXJpLCBHRXJyb3IqKikKK3N0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYVNyY1NldFVy
aShHc3RVUklIYW5kbGVyKiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpLCBHRXJyb3IqKikKIHsK
ICAgICBXZWJLaXRNZWRpYVNyYyogc291cmNlID0gV0VCS0lUX01FRElBX1NSQyhoYW5kbGVyKTsK
IAogICAgIGlmIChHU1RfU1RBVEUoc291cmNlKSA+PSBHU1RfU1RBVEVfUEFVU0VEKSB7CiAgICAg
ICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc291cmNlLCAiVVJJIGNhbiBvbmx5IGJlIHNldCBpbiBzdGF0
ZXMgPCBQQVVTRUQiKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCiAgICAgR1NUX09CSkVDVF9MT0NLKHNvdXJjZSk7Ci0gICAgV2ViS2l0TWVk
aWFTcmNQcml2YXRlKiBwcml2ID0gc291cmNlLT5wcml2OwotICAgIHByaXYtPmxvY2F0aW9uID0g
bnVsbHB0cjsKLSAgICBpZiAoIXVyaSkgewotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzb3Vy
Y2UpOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAgICBVUkwgdXJsKFVSTCgpLCB1
cmkpOwotCi0gICAgcHJpdi0+bG9jYXRpb24gPSBHVW5pcXVlUHRyPGdjaGFyPihnX3N0cmR1cCh1
cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSkpOworICAgIHNvdXJjZS0+cHJpdi0+dXJpID0gR1Vu
aXF1ZVB0cjxjaGFyPihnX3N0cmR1cCh1cmkpKTsKICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzb3Vy
Y2UpOwogICAgIHJldHVybiBUUlVFOwogfQogCi12b2lkIHdlYktpdE1lZGlhU3JjVXJpSGFuZGxl
ckluaXQoZ3BvaW50ZXIgZ0lmYWNlLCBncG9pbnRlcikKK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlh
U3JjVXJpSGFuZGxlckluaXQodm9pZCogZ0lmYWNlLCB2b2lkKikKIHsKICAgICBHc3RVUklIYW5k
bGVySW50ZXJmYWNlKiBpZmFjZSA9IChHc3RVUklIYW5kbGVySW50ZXJmYWNlICopIGdJZmFjZTsK
IApAQCAtNjU2LDE5OSArNzg0LDYgQEAgdm9pZCB3ZWJLaXRNZWRpYVNyY1VyaUhhbmRsZXJJbml0
KGdwb2ludGVyIGdJZmFjZSwgZ3BvaW50ZXIpCiAgICAgaWZhY2UtPnNldF91cmkgPSB3ZWJLaXRN
ZWRpYVNyY1NldFVyaTsKIH0KIAotc3RhdGljIHZvaWQgc2Vla05lZWRzRGF0YU1haW5UaHJlYWQo
V2ViS2l0TWVkaWFTcmMqIHNvdXJjZSkKLXsKLSAgICBHU1RfREVCVUcoIkJ1ZmZlcmluZyBuZWVk
ZWQgYmVmb3JlIHNlZWsiKTsKLQotICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKLQot
ICAgIEdTVF9PQkpFQ1RfTE9DSyhzb3VyY2UpOwotICAgIE1lZGlhVGltZSBzZWVrVGltZSA9IHNv
dXJjZS0+cHJpdi0+c2Vla1RpbWU7Ci0gICAgV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFKiBtZWRpYVBsYXllclByaXZhdGUgPSBzb3VyY2UtPnByaXYtPm1lZGlhUGxheWVy
UHJpdmF0ZTsKLQotICAgIGlmICghbWVkaWFQbGF5ZXJQcml2YXRlKSB7Ci0gICAgICAgIEdTVF9P
QkpFQ1RfVU5MT0NLKHNvdXJjZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3Ig
KFN0cmVhbSogc3RyZWFtIDogc291cmNlLT5wcml2LT5zdHJlYW1zKSB7Ci0gICAgICAgIGlmIChz
dHJlYW0tPnR5cGUgIT0gV2ViQ29yZTo6SW52YWxpZCkKLSAgICAgICAgICAgIHN0cmVhbS0+c291
cmNlQnVmZmVyLT5zZXRSZWFkeUZvck1vcmVTYW1wbGVzKHRydWUpOwotICAgIH0KLSAgICBHU1Rf
T0JKRUNUX1VOTE9DSyhzb3VyY2UpOwotICAgIG1lZGlhUGxheWVyUHJpdmF0ZS0+bm90aWZ5U2Vl
a05lZWRzRGF0YUZvclRpbWUoc2Vla1RpbWUpOwotfQotCi1zdGF0aWMgdm9pZCBub3RpZnlSZWFk
eUZvck1vcmVTYW1wbGVzTWFpblRocmVhZChXZWJLaXRNZWRpYVNyYyogc291cmNlLCBTdHJlYW0q
IGFwcHNyY1N0cmVhbSkKLXsKLSAgICBHU1RfT0JKRUNUX0xPQ0soc291cmNlKTsKLQotICAgIGF1
dG8gaXQgPSBzdGQ6OmZpbmQoc291cmNlLT5wcml2LT5zdHJlYW1zLmJlZ2luKCksIHNvdXJjZS0+
cHJpdi0+c3RyZWFtcy5lbmQoKSwgYXBwc3JjU3RyZWFtKTsKLSAgICBpZiAoaXQgPT0gc291cmNl
LT5wcml2LT5zdHJlYW1zLmVuZCgpKSB7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNvdXJj
ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJNU0UqIG1lZGlhUGxheWVyUHJpdmF0ZSA9IHNvdXJjZS0+cHJpdi0+bWVk
aWFQbGF5ZXJQcml2YXRlOwotICAgIGlmIChtZWRpYVBsYXllclByaXZhdGUgJiYgIW1lZGlhUGxh
eWVyUHJpdmF0ZS0+c2Vla2luZygpKQotICAgICAgICBhcHBzcmNTdHJlYW0tPnNvdXJjZUJ1ZmZl
ci0+bm90aWZ5UmVhZHlGb3JNb3JlU2FtcGxlcygpOwotCi0gICAgR1NUX09CSkVDVF9VTkxPQ0so
c291cmNlKTsKLX0KLQotdm9pZCB3ZWJLaXRNZWRpYVNyY1Jlc3RvcmVUcmFja3MoV2ViS2l0TWVk
aWFTcmMqIG9sZFNvdXJjZSwgV2ViS2l0TWVkaWFTcmMqIG5ld1NvdXJjZSkKLXsKLSAgICBuZXdT
b3VyY2UtPnByaXYtPnN0cmVhbXMgPSBXVEZNb3ZlKG9sZFNvdXJjZS0+cHJpdi0+c3RyZWFtcyk7
Ci0gICAgZm9yIChhdXRvKiBzdHJlYW0gOiBuZXdTb3VyY2UtPnByaXYtPnN0cmVhbXMpIHsKLSAg
ICAgICAgc3RyZWFtLT5wYXJlbnQgPSBuZXdTb3VyY2U7Ci0KLSAgICAgICAgYXV0byBvbGRTb3Vy
Y2VQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoc3RyZWFtLT5hcHBz
cmMsICJzcmMiKSk7Ci0gICAgICAgIHVuc2lnbmVkIHBhZElkID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEdQT0lOVEVSX1RPX0lOVChnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChvbGRTb3VyY2VQ
YWQuZ2V0KCkpLCAicGFkSWQiKSkpOwotCi0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYoc3RyZWFt
LT5hcHBzcmMpOwotCi0gICAgICAgIC8vIEVuc3VyZSBvd25lcnNoaXAgaXMgbm90IHRyYW5zZmVy
ZWQgdG8gdGhlIGJpbi4gVGhlIGFwcHNyYyBlbGVtZW50IGlzIG1hbmFnZWQgYnkgaXRzIHBhcmVu
dCBTdHJlYW0uCi0gICAgICAgIHN0cmVhbS0+YXBwc3JjID0gR1NUX0VMRU1FTlRfQ0FTVChnc3Rf
b2JqZWN0X3JlZl9zaW5rKGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBwc3JjIiwgbnVsbHB0
cikpKTsKLSAgICAgICAgc3RyZWFtLT5hcHBzcmNOZWVkRGF0YUZsYWcgPSB0cnVlOwotCi0gICAg
ICAgIGdzdF9hcHBfc3JjX3NldF9jYWxsYmFja3MoR1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMp
LCAmZW5hYmxlZEFwcHNyY0NhbGxiYWNrcywgc3RyZWFtLT5wYXJlbnQsIG51bGxwdHIpOwotICAg
ICAgICBnc3RfYXBwX3NyY19zZXRfZW1pdF9zaWduYWxzKEdTVF9BUFBfU1JDKHN0cmVhbS0+YXBw
c3JjKSwgRkFMU0UpOwotICAgICAgICBnc3RfYXBwX3NyY19zZXRfc3RyZWFtX3R5cGUoR1NUX0FQ
UF9TUkMoc3RyZWFtLT5hcHBzcmMpLCBHU1RfQVBQX1NUUkVBTV9UWVBFX1NFRUtBQkxFKTsKLQot
ICAgICAgICBnc3RfYXBwX3NyY19zZXRfbWF4X2J5dGVzKEdTVF9BUFBfU1JDKHN0cmVhbS0+YXBw
c3JjKSwgMiAqIFdURjo6TUIpOwotICAgICAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc3RyZWFt
LT5hcHBzcmMpLCAiYmxvY2siLCBGQUxTRSwgIm1pbi1wZXJjZW50IiwgMjAsICJmb3JtYXQiLCBH
U1RfRk9STUFUX1RJTUUsIG51bGxwdHIpOwotCi0gICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU5f
Q0FTVChuZXdTb3VyY2UpLCBzdHJlYW0tPmFwcHNyYyk7Ci0KLSAgICAgICAgYXV0byBzb3VyY2VQ
YWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoc3RyZWFtLT5hcHBzcmMs
ICJzcmMiKSk7Ci0gICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHNvdXJjZVBhZC5n
ZXQoKSksICJwYWRJZCIsIEdJTlRfVE9fUE9JTlRFUihwYWRJZCkpOwotICAgIH0KLQotICAgIG5l
d1NvdXJjZS0+cHJpdi0+bnVtYmVyT2ZBdWRpb1N0cmVhbXMgPSBvbGRTb3VyY2UtPnByaXYtPm51
bWJlck9mQXVkaW9TdHJlYW1zOwotICAgIG5ld1NvdXJjZS0+cHJpdi0+bnVtYmVyT2ZUZXh0U3Ry
ZWFtcyA9IG9sZFNvdXJjZS0+cHJpdi0+bnVtYmVyT2ZUZXh0U3RyZWFtczsKLSAgICBuZXdTb3Vy
Y2UtPnByaXYtPm51bWJlck9mVmlkZW9TdHJlYW1zID0gb2xkU291cmNlLT5wcml2LT5udW1iZXJP
ZlZpZGVvU3RyZWFtczsKLSAgICBuZXdTb3VyY2UtPnByaXYtPm51bWJlck9mUGFkcyA9IG9sZFNv
dXJjZS0+cHJpdi0+bnVtYmVyT2ZQYWRzOwotICAgIG5ld1NvdXJjZS0+cHJpdi0+YWxsVHJhY2tz
Q29uZmlndXJlZCA9IG9sZFNvdXJjZS0+cHJpdi0+YWxsVHJhY2tzQ29uZmlndXJlZDsKLX0KLQot
dm9pZCB3ZWJLaXRNZWRpYVNyY1NpZ25hbFRyYWNrcyhXZWJLaXRNZWRpYVNyYyogc291cmNlKQot
ewotICAgIGZvciAoYXV0byogc3RyZWFtIDogc291cmNlLT5wcml2LT5zdHJlYW1zKSB7Ci0gICAg
ICAgIGF1dG8gc291cmNlUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFk
KHN0cmVhbS0+YXBwc3JjLCAic3JjIikpOwotICAgICAgICB3ZWJLaXRNZWRpYVNyY0xpbmtTdHJl
YW1Ub1NyY1BhZChzb3VyY2VQYWQuZ2V0KCksIHN0cmVhbSk7Ci0KLSAgICAgICAgZ3N0X2VsZW1l
bnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChzdHJlYW0tPmFwcHNyYyk7Ci0KLSAgICAgICAgaW50
IHNpZ25hbCA9IC0xOwotICAgICAgICBzd2l0Y2ggKHN0cmVhbS0+dHlwZSkgewotICAgICAgICBj
YXNlIFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VmlkZW86Ci0gICAg
ICAgICAgICBzaWduYWwgPSBTSUdOQUxfVklERU9fQ0hBTkdFRDsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6
QXVkaW86Ci0gICAgICAgICAgICBzaWduYWwgPSBTSUdOQUxfQVVESU9fQ0hBTkdFRDsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlw
ZUdTdHJlYW1lcjo6VGV4dDoKLSAgICAgICAgICAgIHNpZ25hbCA9IFNJR05BTF9URVhUX0NIQU5H
RUQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzaWduYWwgIT0gLTEpCi0gICAgICAgICAgICBn
X3NpZ25hbF9lbWl0KEdfT0JKRUNUKHN0cmVhbS0+cGFyZW50KSwgd2ViS2l0TWVkaWFTcmNTaWdu
YWxzW3NpZ25hbF0sIDAsIG51bGxwdHIpOwotICAgIH0KLQotICAgIGlmIChzb3VyY2UtPnByaXYt
PnN0cmVhbXMuc2l6ZSgpKSB7Ci0gICAgICAgIGdzdF9lbGVtZW50X25vX21vcmVfcGFkcyhHU1Rf
RUxFTUVOVF9DQVNUKHNvdXJjZSkpOwotICAgICAgICB3ZWJLaXRNZWRpYVNyY0RvQXN5bmNEb25l
KHNvdXJjZSk7Ci0gICAgfQotfQotCi12b2lkIHdlYktpdE1lZGlhU3JjU2V0TWVkaWFQbGF5ZXJQ
cml2YXRlKFdlYktpdE1lZGlhU3JjKiBzb3VyY2UsIFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRSogbWVkaWFQbGF5ZXJQcml2YXRlKQotewotICAgIEdTVF9PQkpFQ1RfTE9D
Syhzb3VyY2UpOwotCi0gICAgLy8gU2V0IHRvIG51bGxwdHIgb24gTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyIGRlc3RydWN0aW9uLCBuZXZlciBhIGRhbmdsaW5nIHBvaW50ZXIuCi0gICAgc291
cmNlLT5wcml2LT5tZWRpYVBsYXllclByaXZhdGUgPSBtZWRpYVBsYXllclByaXZhdGU7Ci0gICAg
R1NUX09CSkVDVF9VTkxPQ0soc291cmNlKTsKLX0KLQotdm9pZCB3ZWJLaXRNZWRpYVNyY1NldFJl
YWR5Rm9yU2FtcGxlcyhXZWJLaXRNZWRpYVNyYyogc291cmNlLCBib29sIGlzUmVhZHkpCi17Ci0g
ICAgaWYgKHNvdXJjZSkgewotICAgICAgICBHU1RfT0JKRUNUX0xPQ0soc291cmNlKTsKLSAgICAg
ICAgZm9yIChTdHJlYW0qIHN0cmVhbSA6IHNvdXJjZS0+cHJpdi0+c3RyZWFtcykKLSAgICAgICAg
ICAgIHN0cmVhbS0+c291cmNlQnVmZmVyLT5zZXRSZWFkeUZvck1vcmVTYW1wbGVzKGlzUmVhZHkp
OwotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzb3VyY2UpOwotICAgIH0KLX0KLQotdm9pZCB3
ZWJLaXRNZWRpYVNyY1ByZXBhcmVTZWVrKFdlYktpdE1lZGlhU3JjKiBzb3VyY2UsIGNvbnN0IE1l
ZGlhVGltZSYgdGltZSkKLXsKLSAgICBHU1RfT0JKRUNUX0xPQ0soc291cmNlKTsKLSAgICBzb3Vy
Y2UtPnByaXYtPnNlZWtUaW1lID0gdGltZTsKLSAgICBzb3VyY2UtPnByaXYtPmFwcHNyY1NlZWtE
YXRhQ291bnQgPSAwOwotICAgIHNvdXJjZS0+cHJpdi0+YXBwc3JjTmVlZERhdGFDb3VudCA9IDA7
Ci0KLSAgICBmb3IgKFN0cmVhbSogc3RyZWFtIDogc291cmNlLT5wcml2LT5zdHJlYW1zKSB7Ci0g
ICAgICAgIHN0cmVhbS0+YXBwc3JjTmVlZERhdGFGbGFnID0gZmFsc2U7Ci0gICAgICAgIC8vIERv
bid0IGFsbG93IHNhbXBsZXMgYXdheSBmcm9tIHRoZSBzZWVrVGltZSB0byBiZSBlbnF1ZXVlZC4K
LSAgICAgICAgc3RyZWFtLT5sYXN0RW5xdWV1ZWRUaW1lID0gdGltZTsKLSAgICB9Ci0KLSAgICAv
LyBUaGUgcGVuZGluZyBhY3Rpb24gd2lsbCBiZSBwZXJmb3JtZWQgaW4gZW5hYmxlZEFwcHNyY1Nl
ZWtEYXRhKCkuCi0gICAgc291cmNlLT5wcml2LT5hcHBzcmNTZWVrRGF0YU5leHRBY3Rpb24gPSBN
ZWRpYVNvdXJjZVNlZWtUb1RpbWU7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0soc291cmNlKTsKLX0K
LQotR3N0UGFkUHJvYmVSZXR1cm4gaW5pdGlhbFNlZWtTZWdtZW50Rml4ZXJQcm9iZShHc3RQYWQg
KnBhZCwgR3N0UGFkUHJvYmVJbmZvICppbmZvLCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBH
c3RFdmVudCogZXZlbnQgPSBHU1RfUEFEX1BST0JFX0lORk9fRVZFTlQoaW5mbyk7Ci0gICAgaWYg
KEdTVF9FVkVOVF9UWVBFKGV2ZW50KSA9PSBHU1RfRVZFTlRfU0VHTUVOVCkgewotICAgICAgICBj
b25zdCBHc3RTZWdtZW50KiBvcmlnaW5hbFNlZ21lbnQgPSBudWxscHRyOwotICAgICAgICBjb25z
dCBHc3RTZWdtZW50KiBmaXhlZFNlZ21lbnQgPSBzdGF0aWNfY2FzdDxHc3RTZWdtZW50Kj4odXNl
ckRhdGEpOwotICAgICAgICBnc3RfZXZlbnRfcGFyc2Vfc2VnbWVudChldmVudCwgJm9yaWdpbmFs
U2VnbWVudCk7Ci0gICAgICAgIEdTVF9ERUJVRygiU2VnbWVudCBhdCAlczogJSIgR1NUX1NFR01F
TlRfRk9STUFUICIsIHJlcGxhY2VkIGJ5ICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwgR1NUX0VMRU1F
TlRfTkFNRShHU1RfUEFEX1BBUkVOVChwYWQpKSwgb3JpZ2luYWxTZWdtZW50LCBmaXhlZFNlZ21l
bnQpOwotICAgICAgICBnc3RfZXZlbnRfcmVwbGFjZShyZWludGVycHJldF9jYXN0PEdzdEV2ZW50
Kio+KCZpbmZvLT5kYXRhKSwgZ3N0X2V2ZW50X25ld19zZWdtZW50KGZpeGVkU2VnbWVudCkpOwot
ICAgICAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9SRU1PVkU7Ci0gICAgfQotICAgIHJldHVybiBH
U1RfUEFEX1BST0JFX09LOwotfQotCi12b2lkIHdlYktpdE1lZGlhU3JjUHJlcGFyZUluaXRpYWxT
ZWVrKFdlYktpdE1lZGlhU3JjKiBzb3VyY2UsIGRvdWJsZSByYXRlLCBjb25zdCBNZWRpYVRpbWUm
IHN0YXJ0VGltZSwgY29uc3QgTWVkaWFUaW1lJiBlbmRUaW1lKQotewotICAgIEdTVF9PQkpFQ1Rf
TE9DSyhzb3VyY2UpOwotICAgIE1lZGlhVGltZSBzZWVrVGltZSA9IChyYXRlID49IDApID8gc3Rh
cnRUaW1lIDogZW5kVGltZTsKLSAgICBzb3VyY2UtPnByaXYtPnNlZWtUaW1lID0gc2Vla1RpbWU7
Ci0gICAgc291cmNlLT5wcml2LT5hcHBzcmNTZWVrRGF0YUNvdW50ID0gMDsKLSAgICBzb3VyY2Ut
PnByaXYtPmFwcHNyY05lZWREYXRhQ291bnQgPSAwOwotCi0gICAgZm9yIChTdHJlYW0qIHN0cmVh
bSA6IHNvdXJjZS0+cHJpdi0+c3RyZWFtcykgewotICAgICAgICBzdHJlYW0tPmFwcHNyY05lZWRE
YXRhRmxhZyA9IGZhbHNlOwotICAgICAgICAvLyBEb24ndCBhbGxvdyBzYW1wbGVzIGF3YXkgZnJv
bSB0aGUgc2Vla1RpbWUgdG8gYmUgZW5xdWV1ZWQuCi0gICAgICAgIHN0cmVhbS0+bGFzdEVucXVl
dWVkVGltZSA9IHNlZWtUaW1lOwotICAgIH0KLQotICAgIC8vIFRoZSBwZW5kaW5nIGFjdGlvbiB3
aWxsIGJlIHBlcmZvcm1lZCBpbiBlbmFibGVkQXBwc3JjU2Vla0RhdGEoKS4KLSAgICBzb3VyY2Ut
PnByaXYtPmFwcHNyY1NlZWtEYXRhTmV4dEFjdGlvbiA9IE5vdGhpbmc7Ci0KLSAgICBHVW5pcXVl
UHRyPEdzdFNlZ21lbnQ+IHNlZ21lbnQoZ3N0X3NlZ21lbnRfbmV3KCkpOwotICAgIHNlZ21lbnQt
PmZvcm1hdCA9IEdTVF9GT1JNQVRfVElNRTsKLSAgICBnc3Rfc2VnbWVudF9kb19zZWVrKHNlZ21l
bnQuZ2V0KCksIHJhdGUsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8R3N0
U2Vla0ZsYWdzPihHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19BQ0NVUkFURSks
Ci0gICAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCBXZWJDb3JlOjp0b0dzdFVuc2lnbmVkNjRUaW1l
KHN0YXJ0VGltZSksCi0gICAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCBXZWJDb3JlOjp0b0dzdFVu
c2lnbmVkNjRUaW1lKGVuZFRpbWUpLCBudWxscHRyKTsKLQotICAgIGZvciAoU3RyZWFtKiBzdHJl
YW0gOiBzb3VyY2UtPnByaXYtPnN0cmVhbXMpIHsKLSAgICAgICAgLy8gVGhpcyBwcm9iZSB3aWxs
IGZpeCB0aGUgc2VnbWVudCBhdXRvZ2VuZXJhdGVkIGJ5IGFwcHNyYy4KLSAgICAgICAgR1JlZlB0
cjxHc3RQYWQ+IHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChzdHJl
YW0tPmFwcHNyYywgInNyYyIpKTsKLSAgICAgICAgZ3N0X3BhZF9hZGRfcHJvYmUocGFkLmdldCgp
LCBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRE9XTlNUUkVBTSwKLSAgICAgICAgICAgIGluaXRp
YWxTZWVrU2VnbWVudEZpeGVyUHJvYmUsIGdzdF9zZWdtZW50X2NvcHkoc2VnbWVudC5nZXQoKSks
IHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdzdF9zZWdtZW50X2ZyZWUpKTsKLSAg
ICAgICAgc3RyZWFtLT5zb3VyY2VCdWZmZXItPnNldFJlYWR5Rm9yTW9yZVNhbXBsZXModHJ1ZSk7
Ci0gICAgfQotCi0gICAgR1NUX09CSkVDVF9VTkxPQ0soc291cmNlKTsKLX0KLQogbmFtZXNwYWNl
IFdURiB7CiB0ZW1wbGF0ZSA8PiBHUmVmUHRyPFdlYktpdE1lZGlhU3JjPiBhZG9wdEdSZWYoV2Vi
S2l0TWVkaWFTcmMqIHB0cikKIHsKQEAgLTg2OSw3ICs4MDQsNiBAQCB0ZW1wbGF0ZSA8PiB2b2lk
IGRlcmVmR1B0cjxXZWJLaXRNZWRpYVNyYz4oV2ViS2l0TWVkaWFTcmMqIHB0cikKICAgICBpZiAo
cHRyKQogICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHB0cik7CiB9Ci19OworfSAvLyBuYW1lc3Bh
Y2UgV1RGCiAKICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNl
R1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
bXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmgKaW5kZXggOTk0ZmE5MjdmYjU5OTIyZWQ3
YWNiYjg4MzdlMzU1YWNlN2EzMDdjMS4uYTU1YTU2ZjkwNmRjOGJiN2Q2YzZkY2YyNDhhZjFiY2Nh
ZjA3NjIxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3Ry
ZWFtZXIuaApAQCAtMyw4ICszLDggQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMTMgQ29sbGFib3Jh
IEx0ZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMTMgT3JhbmdlCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDE0LCAyMDE1IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0g
KiAgQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCi0gKiAg
Q29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IElnYWxpYSwgUy5MCisgKiAgQ29weXJpZ2h0IChDKSAy
MDE1LCAyMDE2LCAyMDE4LCAyMDE5LCAyMDIwLCAyMDIxIE1ldHJvbG9naWNhbCBHcm91cCBCLlYu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2LCAyMDE4LCAyMDE5LCAyMDIwLCAyMDIxIEln
YWxpYSwgUy5MCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0zMSwxNSArMzEsMTMgQEAKICNpbmNs
dWRlICJNZWRpYVNvdXJjZVByaXZhdGUuaCIKICNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRl
LmgiCiAjaW5jbHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oIgotI2luY2x1ZGUgPGdz
dC9nc3QuaD4KKyNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
OwogCi1lbnVtIE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lciB7IEludmFsaWQsIFVua25v
d24sIEF1ZGlvLCBWaWRlbywgVGV4dCB9OwotCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
IEdfQkVHSU5fREVDTFMKIApAQCAtNDksMzUgKzQ3LDMwIEBAIEdfQkVHSU5fREVDTFMKICNkZWZp
bmUgV0VCS0lUX0lTX01FRElBX1NSQyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9UWVBFICgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfU1JDKSkKICNkZWZpbmUgV0VCS0lUX0lT
X01FRElBX1NSQ19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3Mp
LCBXRUJLSVRfVFlQRV9NRURJQV9TUkMpKQogCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0TWVkaWFT
cmMgICAgICAgIFdlYktpdE1lZGlhU3JjOwotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE1lZGlhU3Jj
Q2xhc3MgICBXZWJLaXRNZWRpYVNyY0NsYXNzOwotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE1lZGlh
U3JjUHJpdmF0ZSBXZWJLaXRNZWRpYVNyY1ByaXZhdGU7CitzdHJ1Y3QgV2ViS2l0TWVkaWFTcmNQ
cml2YXRlOwogCi1zdHJ1Y3QgX1dlYktpdE1lZGlhU3JjIHsKLSAgICBHc3RCaW4gcGFyZW50Owor
c3RydWN0IFdlYktpdE1lZGlhU3JjIHsKKyAgICBHc3RFbGVtZW50IHBhcmVudDsKIAogICAgIFdl
YktpdE1lZGlhU3JjUHJpdmF0ZSAqcHJpdjsKIH07CiAKLXN0cnVjdCBfV2ViS2l0TWVkaWFTcmND
bGFzcyB7Ci0gICAgR3N0QmluQ2xhc3MgcGFyZW50Q2xhc3M7Ci0KLSAgICAvLyBOb3RpZnkgYXBw
IHRoYXQgbnVtYmVyIG9mIGF1ZGlvL3ZpZGVvL3RleHQgc3RyZWFtcyBjaGFuZ2VkLgotICAgIHZv
aWQgKCp2aWRlb0NoYW5nZWQpKFdlYktpdE1lZGlhU3JjKik7Ci0gICAgdm9pZCAoKmF1ZGlvQ2hh
bmdlZCkoV2ViS2l0TWVkaWFTcmMqKTsKLSAgICB2b2lkICgqdGV4dENoYW5nZWQpKFdlYktpdE1l
ZGlhU3JjKik7CitzdHJ1Y3QgV2ViS2l0TWVkaWFTcmNDbGFzcyB7CisgICAgR3N0RWxlbWVudENs
YXNzIHBhcmVudENsYXNzOwogfTsKIAogR1R5cGUgd2Via2l0X21lZGlhX3NyY19nZXRfdHlwZSh2
b2lkKTsKIAotdm9pZCB3ZWJLaXRNZWRpYVNyY1Jlc3RvcmVUcmFja3MoV2ViS2l0TWVkaWFTcmMq
LCBXZWJLaXRNZWRpYVNyYyopOwotdm9pZCB3ZWJLaXRNZWRpYVNyY1NpZ25hbFRyYWNrcyhXZWJL
aXRNZWRpYVNyYyopOwotdm9pZCB3ZWJLaXRNZWRpYVNyY1NldE1lZGlhUGxheWVyUHJpdmF0ZShX
ZWJLaXRNZWRpYVNyYyosIFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSop
Owordm9pZCB3ZWJLaXRNZWRpYVNyY0VtaXRTdHJlYW1zKFdlYktpdE1lZGlhU3JjKiBzb3VyY2Us
IGNvbnN0IFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcj4+
JiB0cmFja3MpOwogCi12b2lkIHdlYktpdE1lZGlhU3JjUHJlcGFyZVNlZWsoV2ViS2l0TWVkaWFT
cmMqLCBjb25zdCBNZWRpYVRpbWUmKTsKLXZvaWQgd2ViS2l0TWVkaWFTcmNQcmVwYXJlSW5pdGlh
bFNlZWsoV2ViS2l0TWVkaWFTcmMqLCBkb3VibGUgcmF0ZSwgY29uc3QgTWVkaWFUaW1lJiBzdGFy
dFRpbWUsIGNvbnN0IE1lZGlhVGltZSYgZW5kVGltZSk7Ci12b2lkIHdlYktpdE1lZGlhU3JjU2V0
UmVhZHlGb3JTYW1wbGVzKFdlYktpdE1lZGlhU3JjKiwgYm9vbCk7Cit2b2lkIHdlYktpdE1lZGlh
U3JjRmx1c2goV2ViS2l0TWVkaWFTcmMqLCBjb25zdCBBdG9tU3RyaW5nJiBzdHJlYW1OYW1lKTsK
IAogR19FTkRfREVDTFMKIAorbmFtZXNwYWNlIFdURiB7Cit0ZW1wbGF0ZTw+IEdSZWZQdHI8V2Vi
S2l0TWVkaWFTcmM+IGFkb3B0R1JlZihXZWJLaXRNZWRpYVNyYyogcHRyKTsKK3RlbXBsYXRlPD4g
V2ViS2l0TWVkaWFTcmMqIHJlZkdQdHI8V2ViS2l0TWVkaWFTcmM+KFdlYktpdE1lZGlhU3JjKiBw
dHIpOwordGVtcGxhdGU8PiB2b2lkIGRlcmVmR1B0cjxXZWJLaXRNZWRpYVNyYz4oV2ViS2l0TWVk
aWFTcmMqIHB0cik7Cit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIFVTRShHU1RSRUFN
RVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJl
YW1lclByaXZhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDEzZGQzZmY2YWIx
NzVjMGFiYTc2ODgzMzZjMjFhNzIxMDU5ZDNiOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyUHJpdmF0ZS5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgTWV0cm9sb2dp
Y2FsIEdyb3VwIEIuVi4KLSAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhaW50IHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpICYmIEVOQUJMRShNRURJ
QV9TT1VSQ0UpCi0KLSNpbmNsdWRlICJBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgotI2lu
Y2x1ZGUgIkdVbmlxdWVQdHJHU3RyZWFtZXIuaCIKLSNpbmNsdWRlICJNYWluVGhyZWFkTm90aWZp
ZXIuaCIKLSNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmgiCi0jaW5jbHVk
ZSAiVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKLSNpbmNsdWRlICJXZWJLaXRNZWRpYVNv
dXJjZUdTdHJlYW1lci5oIgotCi0jaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzcmMuaD4KLSNpbmNs
dWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYv
Z2xpYi9HUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFOwotCi19OwotCi12b2lkIHdlYktpdE1lZGlhU3JjVXJpSGFu
ZGxlckluaXQoZ3BvaW50ZXIsIGdwb2ludGVyKTsKLQotI2RlZmluZSBXRUJLSVRfTUVESUFfU1JD
X0dFVF9QUklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VC
S0lUX1RZUEVfTUVESUFfU1JDLCBXZWJLaXRNZWRpYVNyY1ByaXZhdGUpKQotCi10eXBlZGVmIHN0
cnVjdCBfU3RyZWFtIFN0cmVhbTsKLQotc3RydWN0IF9TdHJlYW0gewotICAgIC8vIEZpZWxkcyBm
aWxsZWQgd2hlbiB0aGUgU3RyZWFtIGlzIGNyZWF0ZWQuCi0gICAgV2ViS2l0TWVkaWFTcmMqIHBh
cmVudDsKLQotICAgIC8vIEFwcFNyYy4gTmV2ZXIgbW9kaWZpZWQgYWZ0ZXIgZmlyc3QgYXNzaWdu
bWVudC4KLSAgICBHc3RFbGVtZW50KiBhcHBzcmM7Ci0KLSAgICAvLyBOZXZlciBtb2RpZmllZCBh
ZnRlciBmaXJzdCBhc3NpZ25tZW50LgotICAgIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVH
U3RyZWFtZXIqIHNvdXJjZUJ1ZmZlcjsKLQotICAgIC8vIEZpZWxkcyBmaWxsZWQgd2hlbiB0aGUg
dHJhY2sgaXMgYXR0YWNoZWQuCi0gICAgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0
cmVhbWVyIHR5cGU7Ci0gICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzOwotCi0gICAgLy8gT25seSBh
dWRpbywgdmlkZW8gb3Igbm90aGluZyBhdCBhIGdpdmVuIHRpbWUuCi0gICAgUmVmUHRyPFdlYkNv
cmU6OkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiBhdWRpb1RyYWNrOwotICAgIFJlZlB0cjxX
ZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gdmlkZW9UcmFjazsKLSAgICBXZWJD
b3JlOjpGbG9hdFNpemUgcHJlc2VudGF0aW9uU2l6ZTsKLQotICAgIC8vIFRoaXMgaGVscHMgV2Vi
S2l0TWVkaWFTcmNQcml2YXRlLmFwcHNyY05lZWREYXRhQ291bnQsIGVuc3VyaW5nIHRoYXQgbmVl
ZERhdGFzIGFyZQotICAgIC8vIGNvdW50ZWQgb25seSBvbmNlIHBlciBlYWNoIGFwcHNyYy4KLSAg
ICBib29sIGFwcHNyY05lZWREYXRhRmxhZzsKLQotICAgIC8vIFVzZWQgdG8gZW5mb3JjZSBjb250
aW51aXR5IGluIHRoZSBhcHBlbmRlZCBkYXRhIGFuZCBhdm9pZCBicmVha2luZyB0aGUgZGVjb2Rl
ci4KLSAgICAvLyBPbmx5IHVzZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCi0gICAgTWVkaWFUaW1l
IGxhc3RFbnF1ZXVlZFRpbWU7Ci19OwotCi1lbnVtIHsKLSAgICBQUk9QXzAsCi0gICAgUFJPUF9M
T0NBVElPTiwKLSAgICBQUk9QX05fQVVESU8sCi0gICAgUFJPUF9OX1ZJREVPLAotICAgIFBST1Bf
Tl9URVhULAotICAgIFBST1BfTEFTVAotfTsKLQotZW51bSB7Ci0gICAgU0lHTkFMX1ZJREVPX0NI
QU5HRUQsCi0gICAgU0lHTkFMX0FVRElPX0NIQU5HRUQsCi0gICAgU0lHTkFMX1RFWFRfQ0hBTkdF
RCwKLSAgICBMQVNUX1NJR05BTAotfTsKLQotZW51bSBPblNlZWtEYXRhQWN0aW9uIHsKLSAgICBO
b3RoaW5nLAotICAgIE1lZGlhU291cmNlU2Vla1RvVGltZQotfTsKLQotZW51bSBXZWJLaXRNZWRp
YVNyY01haW5UaHJlYWROb3RpZmljYXRpb24gewotICAgIFJlYWR5Rm9yTW9yZVNhbXBsZXMgPSAx
IDw8IDAsCi0gICAgU2Vla05lZWRzRGF0YSA9IDEgPDwgMQotfTsKLQotc3RydWN0IF9XZWJLaXRN
ZWRpYVNyY1ByaXZhdGUgewotICAgIC8vIFVzZWQgdG8gY29vcmRpbmF0ZSB0aGUgcmVsZWFzZSBv
ZiBTdHJlYW0gdHJhY2sgaW5mby4KLSAgICBMb2NrIHN0cmVhbUxvY2s7Ci0gICAgQ29uZGl0aW9u
IHN0cmVhbUNvbmRpdGlvbjsKLQotICAgIC8vIFN0cmVhbXMgYXJlIG9ubHkgYWRkZWQvcmVtb3Zl
ZCBpbiB0aGUgbWFpbiB0aHJlYWQuCi0gICAgVmVjdG9yPFN0cmVhbSo+IHN0cmVhbXM7Ci0KLSAg
ICBHVW5pcXVlUHRyPGdjaGFyPiBsb2NhdGlvbjsKLSAgICBpbnQgbnVtYmVyT2ZBdWRpb1N0cmVh
bXM7Ci0gICAgaW50IG51bWJlck9mVmlkZW9TdHJlYW1zOwotICAgIGludCBudW1iZXJPZlRleHRT
dHJlYW1zOwotICAgIGJvb2wgYXN5bmNTdGFydDsKLSAgICBib29sIGFsbFRyYWNrc0NvbmZpZ3Vy
ZWQ7Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZQYWRzOwotCi0gICAgTWVkaWFUaW1lIHNlZWtUaW1l
OwotCi0gICAgLy8gT24gc2Vlaywgd2Ugd2FpdCBmb3IgYWxsIHRoZSBzZWVrRGF0YXMsIHRoZW4g
Zm9yIGFsbCB0aGUgbmVlZERhdGFzLCBhbmQgdGhlbiBydW4gdGhlIG5leHRBY3Rpb24uCi0gICAg
T25TZWVrRGF0YUFjdGlvbiBhcHBzcmNTZWVrRGF0YU5leHRBY3Rpb247Ci0gICAgaW50IGFwcHNy
Y1NlZWtEYXRhQ291bnQ7Ci0gICAgaW50IGFwcHNyY05lZWREYXRhQ291bnQ7Ci0KLSAgICBXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UqIG1lZGlhUGxheWVyUHJpdmF0ZTsK
LQotICAgIFJlZlB0cjxXZWJDb3JlOjpNYWluVGhyZWFkTm90aWZpZXI8V2ViS2l0TWVkaWFTcmNN
YWluVGhyZWFkTm90aWZpY2F0aW9uPj4gbm90aWZpZXI7Ci0gICAgR1VuaXF1ZVB0cjxHc3RGbG93
Q29tYmluZXI+IGZsb3dDb21iaW5lcjsKLX07Ci0KLWV4dGVybiBndWludCB3ZWJLaXRNZWRpYVNy
Y1NpZ25hbHNbTEFTVF9TSUdOQUxdOwotZXh0ZXJuIEdzdEFwcFNyY0NhbGxiYWNrcyBlbmFibGVk
QXBwc3JjQ2FsbGJhY2tzOwotZXh0ZXJuIEdzdEFwcFNyY0NhbGxiYWNrcyBkaXNhYmxlZEFwcHNy
Y0NhbGxiYWNrczsKLQotdm9pZCB3ZWJLaXRNZWRpYVNyY1VyaUhhbmRsZXJJbml0KGdwb2ludGVy
IGdJZmFjZSwgZ3BvaW50ZXIgaWZhY2VEYXRhKTsKLXZvaWQgd2ViS2l0TWVkaWFTcmNGaW5hbGl6
ZShHT2JqZWN0Kik7Ci12b2lkIHdlYktpdE1lZGlhU3JjU2V0UHJvcGVydHkoR09iamVjdCosIGd1
aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSosIEdQYXJhbVNwZWMqKTsKLXZvaWQgd2ViS2l0
TWVkaWFTcmNHZXRQcm9wZXJ0eShHT2JqZWN0KiwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiwg
R1BhcmFtU3BlYyopOwotdm9pZCB3ZWJLaXRNZWRpYVNyY0RvQXN5bmNTdGFydChXZWJLaXRNZWRp
YVNyYyopOwotdm9pZCB3ZWJLaXRNZWRpYVNyY0RvQXN5bmNEb25lKFdlYktpdE1lZGlhU3JjKik7
Ci1Hc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRNZWRpYVNyY0NoYW5nZVN0YXRlKEdzdEVsZW1l
bnQqLCBHc3RTdGF0ZUNoYW5nZSk7Ci1naW50NjQgd2ViS2l0TWVkaWFTcmNHZXRTaXplKFdlYktp
dE1lZGlhU3JjKik7Ci1nYm9vbGVhbiB3ZWJLaXRNZWRpYVNyY1F1ZXJ5V2l0aFBhcmVudChHc3RQ
YWQqLCBHc3RPYmplY3QqLCBHc3RRdWVyeSopOwotdm9pZCB3ZWJLaXRNZWRpYVNyY1VwZGF0ZVBy
ZXNlbnRhdGlvblNpemUoR3N0Q2FwcyosIFN0cmVhbSopOwotdm9pZCB3ZWJLaXRNZWRpYVNyY0xp
bmtTdHJlYW1Ub1NyY1BhZChHc3RQYWQqLCBTdHJlYW0qKTsKLXZvaWQgd2ViS2l0TWVkaWFTcmNM
aW5rU291cmNlUGFkKEdzdFBhZCosIEdzdENhcHMqLCBTdHJlYW0qKTsKLXZvaWQgd2ViS2l0TWVk
aWFTcmNGcmVlU3RyZWFtKFdlYktpdE1lZGlhU3JjKiwgU3RyZWFtKik7Ci12b2lkIHdlYktpdE1l
ZGlhU3JjQ2hlY2tBbGxUcmFja3NDb25maWd1cmVkKFdlYktpdE1lZGlhU3JjKik7Ci1Hc3RVUklU
eXBlIHdlYktpdE1lZGlhU3JjVXJpR2V0VHlwZShHVHlwZSk7Ci1jb25zdCBnY2hhciogY29uc3Qq
IHdlYktpdE1lZGlhU3JjR2V0UHJvdG9jb2xzKEdUeXBlKTsKLWdjaGFyKiB3ZWJLaXRNZWRpYVNy
Y0dldFVyaShHc3RVUklIYW5kbGVyKik7Ci1nYm9vbGVhbiB3ZWJLaXRNZWRpYVNyY1NldFVyaShH
c3RVUklIYW5kbGVyKiwgY29uc3QgZ2NoYXIqLCBHRXJyb3IqKik7Ci0KLSNlbmRpZiAvLyBVU0Uo
R1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9n
CmluZGV4IGI3NTBiMmZjZDhjNTk2OWY5ZGMyYjM5Y2Q5MzUxYTJhOTI0NDFhMzAuLjNmZjM2ODFm
Y2FkZDc2ZGUwOWFkNzBmM2Y1OTQwNzExOWQ3Mzg3ZmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5n
ZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAyMS0wNC0yOSAg
QWxpY2lhIEJveWEgR2FyY8OtYSAgPGFib3lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW01TRV1b
R1N0cmVhbWVyXSBXZWJLaXRNZWRpYVNyYyByZXdvcmsgdjIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTE5MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYktpdE1lZGlhU3JjIGlzIGEgR09iamVjdCBj
bGFzcyBhbmQgbmVlZHMgdG8gZm9sbG93IHNvbWUgR09iamVjdAorICAgICAgICBjb252ZW50aW9u
cyB0aGF0IGNvbmZsaWN0IHdpdGggV2ViS2l0J3MuIE1ha2UgdGhlIGNoZWNrZXIgYXdhcmUgb2YK
KyAgICAgICAgdGhpcy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tl
ci5weToKKwogMjAyMS0wNC0yNiAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNv
bT4KIAogICAgICAgICBTdWJkaXZpZGUgaW1hZ2Ugb3ZlcmxheSB0ZXh0IGludG8gb25lIG9yIG1v
cmUgZWxlbWVudHMgcGVyIGxpbmUKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3R5bGUvY2hlY2tlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5w
eQppbmRleCA1N2MwNGVhNmRkYTUwMTU4NjFiMDAxYzk4MzY4YjUzMzdiODJmNDM2Li5mZGE4YjBm
MjMzNTE4NTI3MDU5MDFlOTA3YmI3MzA4NTBjNmYzMjY0IDEwMDY0NAotLS0gYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9zdHlsZS9jaGVja2VyLnB5CkBAIC0yMzUsNiArMjM1LDcgQEAgX1BBVEhfUlVMRVNfU1BFQ0lG
SUVSID0gWwogICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9y
bScsICdncmFwaGljcycsICdnc3RyZWFtZXInLCAnV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNw
cCcpLAogICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScs
ICdncmFwaGljcycsICdnc3RyZWFtZXInLCAnV2ViS2l0QXVkaW9TaW5rR1N0cmVhbWVyLmNwcCcp
LAogICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdn
cmFwaGljcycsICdnc3RyZWFtZXInLCAnV2ViS2l0QXVkaW9TaW5rR1N0cmVhbWVyLmgnKSwKKyAg
ICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnZ3JhcGhp
Y3MnLCAnZ3N0cmVhbWVyJywgJ21zZScsICdXZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAn
KSwKICAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAn
YXVkaW8nLCAnZ3N0cmVhbWVyJywgJ1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcCcp
LAogICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdt
ZWRpYXN0cmVhbScsICdnc3RyZWFtZXInLCAnR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuaCcp
LAogICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdt
ZWRpYXN0cmVhbScsICdnc3RyZWFtZXInLCAnR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3Bw
JyksCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggZjcwNmY2MDY4OTFmNjk4YjczNDRkNjU0NGE5NWM4ZTY4MzNjOGMzOS4uOTgy
OTc3Y2U4ZmVlMDhjOTRjY2YyODI4ZmMwMWYyMzA3MjZiNjQzMiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEz
IEBACisyMDIxLTA0LTI5ICBBbGljaWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4K
KworICAgICAgICBbTVNFXVtHU3RyZWFtZXJdIFdlYktpdE1lZGlhU3JjIHJld29yayB2MgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1MTkyCisKKyAg
ICAgICAgVXBkYXRlIGV4cGVjdGF0aW9ucy4KKworICAgICAgICAqIHBsYXRmb3JtL2dsaWIvVGVz
dEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBwbGF0Zm9ybS9nbGliL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWFwcGVuZC1idWZmZXItZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKwogMjAyMS0wNC0yMSAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2
aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBbY3NzLWZsZXhib3hdIHBlcmNlbnQgY2hpbGRy
ZW4gZG9uJ3QgcmVzb2x2ZSBhZ2FpbnN0IHRoZSBmbGV4IGJhc2lzIG9uIGEgZnVsbHkgaW5mbGV4
aWJsZSBpdGVtIHdpdGggZml4ZWQgZmxleC1iYXNpcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xp
Yi9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGRiM2QzZDc3ZDhiNTU4YjVlYTMxNjY5YzY2YmU0ODlh
NGJiZDkyOTYuLmU5MmU4Y2E4NzI3YWUwMzIzNjc4ZjZiMDlkM2I4MTZiNTdjMzAyYzAgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9ucworKysgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTU1MCw3ICs1NTAs
NiBAQCB3ZWJraXQub3JnL2IvMjEwMzg1IGZhc3QvbWVkaWFzdHJlYW0vc3RyZWFtLXN3aXRjaC5o
dG1sIFsgQ3Jhc2ggVGltZW91dCBQYXNzIF0KIHdlYmtpdC5vcmcvYi8yMTA1MjggZmFzdC9tZWRp
YXN0cmVhbS9NZWRpYVN0cmVhbS1NZWRpYUVsZW1lbnQtc2V0T2JqZWN0LW51bGwuaHRtbCBbIENy
YXNoIFBhc3MgXQogd2Via2l0Lm9yZy9iLzIxMDUyOCBmYXN0L21lZGlhc3RyZWFtL21lZGlhc3Ry
ZWFtdHJhY2stdmlkZW8tZnJhbWVSYXRlLWNsb25lLWRlY3JlYXNpbmcuaHRtbCBbIENyYXNoIFBh
c3MgXQogCi13ZWJraXQub3JnL2IvMjAzMDc4IG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3Vy
Y2UtcmVtb3ZlLXVubG9hZC1jcmFzaC5odG1sIFsgQ3Jhc2ggVGltZW91dCBQYXNzIF0KIHdlYmtp
dC5vcmcvYi8yMTgzMTcgbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS10cmFja2lkLWNo
YW5nZS5odG1sIFsgRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi8yMTA1MjggbWVkaWEvdmlkZW8t
c3JjLWJsb2ItcmVwbGF5Lmh0bWwgWyBDcmFzaCBQYXNzIF0KQEAgLTU4MCw3ICs1NzksNiBAQCB3
ZWJraXQub3JnL2IvMjI0NzY3IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEt
c291cmNlL21lZGlhc291cmNlLWNoYQogCiAjIFNlZSBhbHNvIGJ1ZyAjMTc1NTc4Lgogd2Via2l0
Lm9yZy9iLzE2NzEwOCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJj
ZS9tZWRpYXNvdXJjZS1hY3RpdmVzb3VyY2VidWZmZXJzLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtp
dC5vcmcvYi8xNjcxMDggaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3Vy
Y2UvbWVkaWFzb3VyY2UtYXBwZW5kLWJ1ZmZlci5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3Jn
L2IvMTY3MTA4IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21l
ZGlhc291cmNlLWF2dHJhY2tzLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xNjcxMDgg
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2Ut
YnVmZmVyZWQuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzE2NzEwOCBpbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jaGFuZ2V0eXBl
Lmh0bWwgWyBGYWlsdXJlIENyYXNoIF0KQEAgLTIxODIsOSArMjE4MCw3IEBAIHdlYmtpdC5vcmcv
Yi8yMTE5NDAgZmFzdC90ZXh0L211bHRpcGxlLWNvZGV1bml0LXZlcnRpY2FsLXVwcmlnaHQuaHRt
bCBbIEltYWdlT25sCiB3ZWJraXQub3JnL2IvMTY3MTA4IGltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvbWVkaWEtc291cmNlL21lZGlhc291cmNlLXNlcXVlbmNlbW9kZS1hcHBlbmQtYnVm
ZmVyLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xNjcxMDggaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2Utc2Vla2FibGUuaHRtbCBb
IEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzE5NzcxMSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb3JyZWN0LWZyYW1lcy5odG1sIFsgUGFz
cyBUaW1lb3V0IEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzIwMzA3OCBpbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1zZWVrLWJleW9uZC1kdXJh
dGlvbi5odG1sIFsgVGltZW91dCBDcmFzaCBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8yMTQzNDkg
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2Ut
Y2hhbmdldHlwZS1wbGF5LW5lZ2F0aXZlLmh0bWwgWyBDcmFzaCBGYWlsdXJlIFBhc3MgXQotd2Vi
a2l0Lm9yZy9iLzIyMDA4MyBbIERlYnVnIF0gbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJj
ZS11bm5lY2Vzc2FyeS1zZWVrLXNlZWtlZC5odG1sIFsgUGFzcyBDcmFzaCBdCit3ZWJraXQub3Jn
L2IvMjAzMDc4IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21l
ZGlhc291cmNlLXNlZWstYmV5b25kLWR1cmF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KIAogd2Via2l0
Lm9yZy9iLzIxOTIyNSBodHRwL3Rlc3RzL2luc3BlY3Rvci9kb20vZGlzY29ubmVjdC1kb20tdHJl
ZS1hZnRlci1tYWluLWZyYW1lLW5hdmlnYXRpb24uaHRtbCBbIEZhaWx1cmUgUGFzcyBdCiAKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtYXBwZW5kLWJ1ZmZlci1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWFwcGVuZC1idWZmZXItZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjAzMDg4ZmFlMmU4OTkwYWUxMDc4M2Y4YWNhZDk3YjI0NzRjZDRjYmIK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWFwcGVuZC1idWZm
ZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjUgQEAKKworUEFTUyBUZXN0IFNvdXJjZUJ1ZmZl
ci5hcHBlbmRCdWZmZXIoKSBldmVudCBkaXNwYXRjaGluZy4KK1BBU1MgVGVzdCBTb3VyY2VCdWZm
ZXIuYXBwZW5kQnVmZmVyKCkgY2FsbCBkdXJpbmcgYSBwZW5kaW5nIGFwcGVuZEJ1ZmZlcigpLgor
UEFTUyBUZXN0IFNvdXJjZUJ1ZmZlci5hYm9ydCgpIGNhbGwgZHVyaW5nIGEgcGVuZGluZyBhcHBl
bmRCdWZmZXIoKS4KK1BBU1MgVGVzdCBTb3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKCkgdHJpZ2dl
cmluZyBhbiAnZW5kZWQnIHRvICdvcGVuJyB0cmFuc2l0aW9uLgorUEFTUyBUZXN0IHplcm8gYnl0
ZSBTb3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKCkgY2FsbCB0cmlnZ2VyaW5nIGFuICdlbmRlZCcg
dG8gJ29wZW4nIHRyYW5zaXRpb24uCitQQVNTIFRlc3QgTWVkaWFTb3VyY2UucmVtb3ZlU291cmNl
QnVmZmVyKCkgY2FsbCBkdXJpbmcgYSBwZW5kaW5nIGFwcGVuZEJ1ZmZlcigpLgorUEFTUyBUZXN0
IHNldCBNZWRpYVNvdXJjZS5kdXJhdGlvbiBkdXJpbmcgYSBwZW5kaW5nIGFwcGVuZEJ1ZmZlcigp
IGZvciBvbmUgb2YgaXRzIFNvdXJjZUJ1ZmZlcnMuCitQQVNTIFRlc3QgTWVkaWFTb3VyY2UuZW5k
T2ZTdHJlYW0oKSBkdXJpbmcgYSBwZW5kaW5nIGFwcGVuZEJ1ZmZlcigpIGZvciBvbmUgb2YgaXRz
IFNvdXJjZUJ1ZmZlcnMuCitQQVNTIFRlc3Qgc2V0IFNvdXJjZUJ1ZmZlci50aW1lc3RhbXBPZmZz
ZXQgZHVyaW5nIGEgcGVuZGluZyBhcHBlbmRCdWZmZXIoKS4KK1BBU1MgVGVzdCBhcHBlbmRpbmcg
YW4gZW1wdHkgQXJyYXlCdWZmZXJWaWV3LgorUEFTUyBUZXN0IGFwcGVuZGluZyBhIG5ldXRlcmVk
IEFycmF5QnVmZmVyVmlldy4KK1BBU1MgVGVzdCBhcHBlbmRpbmcgYW4gZW1wdHkgQXJyYXlCdWZm
ZXIuCitQQVNTIFRlc3QgYXBwZW5kaW5nIGEgbmV1dGVyZWQgQXJyYXlCdWZmZXIuCitQQVNTIFRl
c3QgYXBwZW5kQnVmZmVyIHdpdGggcGFydGlhbCBpbml0IHNlZ21lbnRzLgorUEFTUyBUZXN0IGFw
cGVuZEJ1ZmZlciB3aXRoIHBhcnRpYWwgbWVkaWEgc2VnbWVudHMuCitGQUlMIFRlc3QgYXBwZW5k
QnVmZmVyIGV2ZW50cyBvcmRlci4gYXNzZXJ0X3RydWU6IGV4cGVjdGVkIHRydWUgZ290IGZhbHNl
CitQQVNTIFRlc3QgYWJvcnQgaW4gdGhlIG1pZGRsZSBvZiBhbiBpbml0aWFsaXphdGlvbiBzZWdt
ZW50LgorUEFTUyBUZXN0IGFib3J0IGFmdGVyIHJlbW92aW5nIHNvdXJjZWJ1ZmZlci4KK1BBU1Mg
VGVzdCBhYm9ydCBhZnRlciByZWFkeVN0YXRlIGlzIGVuZGVkIGZvbGxvd2luZyBpbml0IHNlZ21l
bnQgYW5kIG1lZGlhIHNlZ21lbnQuCitQQVNTIFRlc3QgYWJvcnQgYWZ0ZXIgYXBwZW5kQnVmZmVy
IHVwZGF0ZSBlbmRzLgorUEFTUyBUZXN0IGFwcGVuZGluZyBudWxsLgorUEFTUyBUZXN0IGFwcGVu
ZGluZyBhZnRlciByZW1vdmVTb3VyY2VCdWZmZXIoKS4KK0ZBSUwgVGVzdCBzbG93IGFwcGVuZGlu
ZyBkb2VzIG5vdCB0cmlnZ2VyIHN0YWxsZWQgZXZlbnRzLiBhc3NlcnRfdW5yZWFjaGVkOiBVbmV4
cGVjdGVkICdzdGFsbGVkJyBldmVudC4gUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427423</attachid>
            <date>2021-04-30 08:36:21 -0700</date>
            <delta_ts>2021-05-03 02:43:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225192-20210430173619.patch</filename>
            <type>text/plain</type>
            <size>181798</size>
            <attacher name="Alicia Boya García">aboya</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NjM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGMxMzdkZWEzNjE5N2Nj
NTU3Y2Y3NzJkMGY4ZmEyODg1MDI5ODM5Zi4uMTY3OWNhODA4NjMxY2EwNzg4NGM3MDJkYmUyYzEy
ZTFiMDE5MzdlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1OSBAQAorMjAyMS0wNC0yOSAgQWxp
Y2lhIEJveWEgR2FyY8OtYSAgPGFib3lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW01TRV1bR1N0
cmVhbWVyXSBXZWJLaXRNZWRpYVNyYyByZXdvcmsgdjIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTE5MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggKHJlKWludHJvZHVjZXMgYSBuZXcg
c291cmNlIGVsZW1lbnQgZm9yIHRoZSBNU0UgcGxheWJhY2sKKyAgICAgICAgcGlwZWxpbmUuIFRo
aXMgaXMgYW4gaXRlcmF0aW9uIG9uIHRoZSBwcmV2aW91cyB3b3JrIG9uIHIyNDkyMDUgdGhhdAor
ICAgICAgICBoYWQgdG8gYmUgcmV2ZXJ0ZWQgaW4gcjI1MTM2NSBiZWNhdXNlIG9mIGZsYWt5IHBs
YXliaW4zIGJ1Z3MuCisKKyAgICAgICAgVGhpcyBuZXcgdmVyc2lvbiBhdm9pZHMgdGhlc2UgcGl0
ZmFsbHMgYnkgYXZvaWRpbmcgZmx1c2hlcyBpbgorICAgICAgICBzaXR1YXRpb25zIHdoZXJlIHRo
ZXkgYXJlIGF2b2lkYWJsZSBhbmQga25vd24gdG8gZXhwb3NlIGJ1Z3MuCisKKyAgICAgICAgVGhp
cyByZS1sYW5kIHNoYXJlcyBtYW55IG9mIHRoZSBhZHZhbnRhZ2VzIHRoYXQgbW90aXZhdGVkIHRo
ZSBmaXJzdAorICAgICAgICBwYXRjaDogc2Vla3MgbWFzc2l2ZWx5IG92ZXJzaW1wbGlmaWVkIGFu
ZCBncmVhdGVyIGNvbnRyb2wgYnkgbm8gbG9uZ2VyCisgICAgICAgIHJlbHlpbmcgb24gYXBwc3Jj
LiBJdCBjYW4gaGFuZGxlIGZsdXNoZXMgb2YgaW5kaXZpZHVhbCBzdHJlYW1zCisgICAgICAgIG5h
dGl2ZWx5LgorCisgICAgICAgIFdvcmsgaGFzIGFsc28gZ29uZSBpbnRvIGRlY291cGxpbmcgdGhl
IHN0YXRlIG9mIHRoZSBmcmFtZSBxdWV1ZSBmcm9tCisgICAgICAgIHRoZSBzdGF0ZSBvZiBXZWJL
aXRNZWRpYVNyYyBzbyB0aGF0IHRoZSBiYWNrZW5kIGNhbiBzdXJ2aXZlCisgICAgICAgIHRyYW5z
aXRpb25zIGZyb20gUEFVU0VEIHRvIFJFQURZIGFuZCBiYWNrIHdoaWNoCisgICAgICAgIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lciBjcmVhdGVzIHdoZW4gcGxheWJhY2sgZW5kcy4gVGhpcyBs
YXR0ZXIKKyAgICAgICAgZWZmb3J0IGlzIG5vdCBjb21wbGV0ZSwgYW5kIGluc3RlYWQgdGhpcyB2
ZXJzaW9uIGFkZHMgYSBzcGVjaWFsIGNhc2UKKyAgICAgICAgdG8gaW5oaWJpdCBkb3dud2FyZHMg
YW5kIGJhY2sgdXB3YXJkcyB0cmFuc2l0aW9ucywgYXZvaWRpbmcgYW55CisgICAgICAgIGlzc3Vl
cy4KKworICAgICAgICBJdCBpcyBleHBlY3RlZCB0aGF0IGF0IHRoaXMgcG9pbnQgdGhpcyBuZXcg
YmFja2VuZCBpcyBhdCBsZWFzdCBhcworICAgICAgICBzdGFibGUgYXMgdGhlIHByZXZpb3VzIG9u
ZS4gTm8gTGF5b3V0VGVzdCBoYXMgZ290IHdvcnNlbmVkCisgICAgICAgIGV4cGVjdGF0aW9ucyBm
cm9tIGFkZGluZyB0aGlzIGJhY2tlbmQgYW5kIHNvbWUgaGF2ZSBpbXByb3ZlZC4KKworICAgICAg
ICAqIHBsYXRmb3JtL0dTdHJlYW1lci5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwOgorICAgICAgICAod2ViS2l0R0xW
aWRlb1NpbmtGaW5hbGl6ZSk6CisgICAgICAgICh3ZWJLaXRHTFZpZGVvU2lua1NldE1lZGlhUGxh
eWVyUHJpdmF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQ
dHJHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV1RGOjphZG9wdEdSZWYpOgorICAgICAgICAoV1RG
OjpyZWZHUHRyPEdzdE1pbmlPYmplY3Q+KToKKyAgICAgICAgKFdURjo6ZGVyZWZHUHRyPEdzdE1p
bmlPYmplY3Q+KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0
ckdTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpkb1NlZWspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVUcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTdHJlYW1Db2xsZWN0aW9uTWVzc2FnZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1l
c3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpk
aWRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpj
cmVhdGVHU1RQbGF5QmluKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmludmFsaWRhdGVDYWNoZWRQb3NpdGlvbik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OnNldEluaXRp
YWxDYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6Omlu
aXRpYWxDYXBzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0Fw
cGVuZFBpcGVsaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpwYXJz
ZURlbXV4ZXJTcmNQYWRDYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjph
cHBzaW5rQ2Fwc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmNv
bm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rRnJvbVN0cmVhbWluZ1RocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6Y29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmsp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxp
bmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpkZW11eGVyU3JjUGFkQ2Fw
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bG9hZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnBsYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpwYXVzZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNlZWsp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkb1Nl
ZWspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpz
ZXRSZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRTo6cHJvcGFnYXRlUmVhZHlTdGF0ZVRvUGxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6YXN5bmNTdGF0ZUNoYW5nZURvbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzb3VyY2VT
ZXR1cCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6
OnVwZGF0ZVN0YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0U6OnVuYmxvY2tEdXJhdGlvbkNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkdXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp0cmFja0RldGVjdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c3RhcnRT
b3VyY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0U6Omhhc0FsbFRyYWNrcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OndlYktpdE1lZGlhU3JjKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlUHJpdmF0
ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGVHU3Ry
ZWFtZXI6OmFkZFNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVBy
aXZhdGVHU3RyZWFtZXI6Om1hcmtFbmRPZlN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVNvdXJjZVByaXZhdGVHU3RyZWFtZXI6OnVubWFya0VuZE9mU3RyZWFtKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lcjo6d2FpdEZvclNlZWtDb21wbGV0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyOjpzZWVrQ29t
cGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lcjo6
c3RhcnRQbGF5YmFja0lmSGFzQWxsVHJhY2tzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lci5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1l
ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1l
cjo6TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNv
dXJjZVRyYWNrR1N0cmVhbWVyOjp+TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcjo6aXNSZWFkeUZvck1vcmVTYW1wbGVz
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXI6Om5vdGlmeVdo
ZW5SZWFkeUZvck1vcmVTYW1wbGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlVHJh
Y2tHU3RyZWFtZXI6OmVucXVldWVPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3Vy
Y2VUcmFja0dTdHJlYW1lcjo6Y2xlYXJRdWV1ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNv
dXJjZVRyYWNrR1N0cmVhbWVyOjpyZW1vdmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lci5oOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1BsYXliYWNrUGlwZWxpbmUuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1NvdXJj
ZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVm
ZmVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVtb3ZlZEZyb21NZWRpYVNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpmbHVzaCk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjplbnF1ZXVlU2FtcGxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OmlzUmVhZHlGb3JN
b3JlU2FtcGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVh
bWVyOjpub3RpZnlDbGllbnRXaGVuUmVhZHlGb3JNb3JlU2FtcGxlcyk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjphbGxTYW1wbGVzSW5UcmFja0VucXVl
dWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OmRp
ZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9tc2UvU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvVHJhY2tRdWV1ZS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tRdWV1ZTo6VHJhY2tRdWV1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUcmFja1F1ZXVlOjplbnF1ZXVlT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRy
YWNrUXVldWU6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUXVldWU6OmZsdXNoKToK
KyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUXVldWU6Om5vdGlmeVdoZW5Mb3dMZXZlbCk6CisgICAg
ICAgIChXZWJDb3JlOjpUcmFja1F1ZXVlOjpwb3ApOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tR
dWV1ZTo6bm90aWZ5V2hlbk5vdEVtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUXVldWU6
OnJlc2V0Tm90RW1wdHlIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUXVldWU6OmNo
ZWNrTG93TGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tRdWV1ZTo6ZHVyYXRpb25FbnF1
ZXVlZCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9U
cmFja1F1ZXVlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tRdWV1ZTo6aXNGdWxs
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUXVldWU6OmlzRW1wdHkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6VHJhY2tRdWV1ZTo6aGFzTm90RW1wdHlIYW5kbGVyIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291
cmNlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYktpdE1lZGlhU3JjUHJpdmF0ZTo6c3RyZWFt
QnlOYW1lKToKKyAgICAgICAgKFdlYktpdE1lZGlhU3JjUHJpdmF0ZTo6aXNTdGFydGVkKToKKyAg
ICAgICAgKFdURjo6YWRvcHRHUmVmKToKKyAgICAgICAgKFdURjo6cmVmR1B0cjxXZWJLaXRNZWRp
YVNyY1BhZD4pOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHI8V2ViS2l0TWVkaWFTcmNQYWQ+KToK
KyAgICAgICAgKHdlYmtpdF9tZWRpYV9zcmNfcGFkX2NsYXNzX2luaXQpOgorICAgICAgICAoU3Ry
ZWFtOjpTdHJlYW0pOgorICAgICAgICAoU3RyZWFtOjpTdHJlYW1pbmdNZW1iZXJzOjpTdHJlYW1p
bmdNZW1iZXJzKToKKyAgICAgICAgKGZpbmRQaXBlbGluZSk6CisgICAgICAgIChnc3RTdHJlYW1U
eXBlKToKKyAgICAgICAgKHN0cmVhbVR5cGVUb1N0cmluZyk6CisgICAgICAgICh3ZWJraXRfbWVk
aWFfc3JjX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X21lZGlhX3NyY19pbml0KToKKyAg
ICAgICAgKHdlYktpdE1lZGlhU3JjRmluYWxpemUpOgorICAgICAgICAod2ViS2l0TWVkaWFTcmNF
bWl0U3RyZWFtcyk6CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY1RlYXJEb3duU3RyZWFtKToKKyAg
ICAgICAgKHdlYktpdE1lZGlhU3JjQWN0aXZhdGVNb2RlKToKKyAgICAgICAgKHdlYktpdE1lZGlh
U3JjUGFkTGlua2VkKToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjTG9vcCk6CisgICAgICAgICh3
ZWJLaXRNZWRpYVNyY1N0cmVhbUZsdXNoKToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjRmx1c2gp
OgorICAgICAgICAod2ViS2l0TWVkaWFTcmNTZWVrKToKKyAgICAgICAgKGNvdW50U3RyZWFtc09m
VHlwZSk6CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY0dldFByb3BlcnR5KToKKyAgICAgICAgKHdl
YktpdE1lZGlhU3JjQ2hhbmdlU3RhdGUpOgorICAgICAgICAod2ViS2l0TWVkaWFTcmNTZW5kRXZl
bnQpOgorICAgICAgICAod2ViS2l0TWVkaWFTcmNVcmlHZXRUeXBlKToKKyAgICAgICAgKHdlYktp
dE1lZGlhU3JjR2V0UHJvdG9jb2xzKToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjR2V0VXJpKToK
KyAgICAgICAgKHdlYktpdE1lZGlhU3JjU2V0VXJpKToKKyAgICAgICAgKHdlYktpdE1lZGlhU3Jj
VXJpSGFuZGxlckluaXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyUHJpdmF0ZS5oOiBS
ZW1vdmVkLgorCiAyMDIxLTA0LTIxICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtjc3MtZmxleGJveF0gcGVyY2VudCBjaGlsZHJlbiBkb24ndCBy
ZXNvbHZlIGFnYWluc3QgdGhlIGZsZXggYmFzaXMgb24gYSBmdWxseSBpbmZsZXhpYmxlIGl0ZW0g
d2l0aCBmaXhlZCBmbGV4LWJhc2lzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21h
a2UKaW5kZXggYmEwYWIyYjQ3NTc4OGEyMWRiNjNlNDk0N2NlZTE3ZjgyNzBiOThmMS4uNGE3NjQw
NDkxYzUxZjMzYTQ2ZWY4N2RkYzUxYzdiNzBiNTNkOTllMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0dTdHJlYW1lci5jbWFrZQpAQCAtMzcsOCArMzcsOSBAQCBpZiAoRU5BQkxFX1ZJREVPIE9S
IEVOQUJMRV9XRUJfQVVESU8pCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvR1N0cmVhbWVyUmVnaXN0cnlTY2FubmVyTVNFLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNvdXJjZVByaXZhdGVH
U3RyZWFtZXIuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvUGxh
eWJhY2tQaXBlbGluZS5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21z
ZS9NZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvbXNlL1NvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuY3BwCisgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvVHJhY2tRdWV1ZS5jcHAKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1l
ci5jcHAKIAogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVy
VmlkZW9Db21tb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNwcAppbmRl
eCBhN2NkOTczMWZlNzRiYzk3ZDBmNjcxOTNiMzcyYjgyMTEyZjlkNjY4Li5kNTBjNzhhNmYwYTRi
ZWY2MTU4NTI1MjQzOWNmZTNlYzgxYzZmMzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZpZGVvU2lua0dT
dHJlYW1lci5jcHAKQEAgLTEzNSw2ICsxMzUsOCBAQCB2b2lkIHdlYktpdEdMVmlkZW9TaW5rRmlu
YWxpemUoR09iamVjdCogb2JqZWN0KQogICAgIGlmIChwcml2LT5tZWRpYVBsYXllclByaXZhdGUp
CiAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShwcml2LT5hcHBT
aW5rLmdldCgpLCBwcml2LT5tZWRpYVBsYXllclByaXZhdGUpOwogCisgICAgR1NUX0RFQlVHX09C
SkVDVChvYmplY3QsICJXZWJLaXRHTFZpZGVvU2luayBmaW5hbGl6ZWQuIik7CisKICAgICBHU1Rf
Q0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1MsIGZpbmFsaXplLCAob2JqZWN0KSk7CiB9CiAKQEAg
LTI0MCwxMSArMjQyLDE1IEBAIHZvaWQgd2ViS2l0R0xWaWRlb1NpbmtTZXRNZWRpYVBsYXllclBy
aXZhdGUoV2ViS2l0R0xWaWRlb1NpbmsqIHNpbmssIE1lZGlhUGxheWVyCiAgICAgcHJpdi0+bWVk
aWFQbGF5ZXJQcml2YXRlID0gcGxheWVyOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QocHJpdi0+YXBw
U2luay5nZXQoKSwgIm5ldy1zYW1wbGUiLCBHX0NBTExCQUNLKCtbXShHc3RFbGVtZW50KiBzaW5r
LCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikgLT4gR3N0Rmxvd1JldHVybiB7
CiAgICAgICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBzYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9z
aW5rX3B1bGxfc2FtcGxlKEdTVF9BUFBfU0lOSyhzaW5rKSkpOworICAgICAgICBHc3RCdWZmZXIq
IGJ1ZmZlciA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihzYW1wbGUuZ2V0KCkpOworICAgICAgICBH
U1RfVFJBQ0VfT0JKRUNUKHNpbmssICJuZXctc2FtcGxlIHdpdGggUFRTPSUiIEdTVF9USU1FX0ZP
Uk1BVCwgR1NUX1RJTUVfQVJHUyhHU1RfQlVGRkVSX1BUUyhidWZmZXIpKSk7CiAgICAgICAgIHBs
YXllci0+dHJpZ2dlclJlcGFpbnQoc2FtcGxlLmdldCgpKTsKICAgICAgICAgcmV0dXJuIEdTVF9G
TE9XX09LOwogICAgIH0pLCBwbGF5ZXIpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QocHJpdi0+YXBw
U2luay5nZXQoKSwgIm5ldy1wcmVyb2xsIiwgR19DQUxMQkFDSygrW10oR3N0RWxlbWVudCogc2lu
aywgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpIC0+IEdzdEZsb3dSZXR1cm4g
ewogICAgICAgICBHUmVmUHRyPEdzdFNhbXBsZT4gc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBf
c2lua19wdWxsX3ByZXJvbGwoR1NUX0FQUF9TSU5LKHNpbmspKSk7CisgICAgICAgIEdzdEJ1ZmZl
ciogYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKHNhbXBsZS5nZXQoKSk7CisgICAgICAg
IEdTVF9ERUJVR19PQkpFQ1Qoc2luaywgIm5ldy1wcmVyb2xsIHdpdGggUFRTPSUiIEdTVF9USU1F
X0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyhHU1RfQlVGRkVSX1BUUyhidWZmZXIpKSk7CiAgICAgICAg
IHBsYXllci0+dHJpZ2dlclJlcGFpbnQoc2FtcGxlLmdldCgpKTsKICAgICAgICAgcmV0dXJuIEdT
VF9GTE9XX09LOwogICAgIH0pLCBwbGF5ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3Bw
CmluZGV4IDRmZjJhOWRhYWMwNWU0YzcxNGI4N2QzMWM1NmY5MWMwNDBjOGExZDIuLjIzYWMxMjU3
NjYyMTk3ZmE0ZWFjOTdhOTk3Y2I1ZDBmZWVlNzQzOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJl
YW1lci5jcHAKQEAgLTI5LDYgKzI5LDI1IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCit0ZW1wbGF0
ZTw+IEdSZWZQdHI8R3N0TWluaU9iamVjdD4gYWRvcHRHUmVmKEdzdE1pbmlPYmplY3QqIHB0cikK
K3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RNaW5pT2JqZWN0PihwdHIsIEdSZWZQdHJBZG9wdCk7
Cit9CisKK3RlbXBsYXRlPD4gR3N0TWluaU9iamVjdCogcmVmR1B0cjxHc3RNaW5pT2JqZWN0PihH
c3RNaW5pT2JqZWN0KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X21pbmlfb2Jq
ZWN0X3JlZihwdHIpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGU8PiB2b2lkIGRl
cmVmR1B0cjxHc3RNaW5pT2JqZWN0PihHc3RNaW5pT2JqZWN0KiBwdHIpCit7CisgICAgaWYgKHB0
cikKKyAgICAgICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmKHB0cik7Cit9CisKIHRlbXBsYXRlIDw+
IEdSZWZQdHI8R3N0RWxlbWVudD4gYWRvcHRHUmVmKEdzdEVsZW1lbnQqIHB0cikKIHsKICAgICBB
U1NFUlQoIXB0ciB8fCAhZ19vYmplY3RfaXNfZmxvYXRpbmcocHRyKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1l
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJH
U3RyZWFtZXIuaAppbmRleCBhZmIxMzRkNzk1M2FjNzM2MTE4NTc1N2U1ZWEwNzA4Y2Q0NWRjMWI1
Li4wNzhkM2M1NjM5NzRmNmEyYjNhZjFlYjgzOTg2NDk4Nzk0NWZhN2Q4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1l
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVm
UHRyR1N0cmVhbWVyLmgKQEAgLTM5LDYgKzM5LDEwIEBAIHRlbXBsYXRlPD4gR1JlZlB0cjxHc3RQ
bHVnaW4+IGFkb3B0R1JlZihHc3RQbHVnaW4qIHB0cik7CiB0ZW1wbGF0ZTw+IEdzdFBsdWdpbiog
cmVmR1B0cjxHc3RQbHVnaW4+KEdzdFBsdWdpbiogcHRyKTsKIHRlbXBsYXRlPD4gdm9pZCBkZXJl
ZkdQdHI8R3N0UGx1Z2luPihHc3RQbHVnaW4qIHB0cik7CiAKK3RlbXBsYXRlPD4gR1JlZlB0cjxH
c3RNaW5pT2JqZWN0PiBhZG9wdEdSZWYoR3N0TWluaU9iamVjdCogcHRyKTsKK3RlbXBsYXRlPD4g
R3N0TWluaU9iamVjdCogcmVmR1B0cjxHc3RNaW5pT2JqZWN0PihHc3RNaW5pT2JqZWN0KiBwdHIp
OwordGVtcGxhdGU8PiB2b2lkIGRlcmVmR1B0cjxHc3RNaW5pT2JqZWN0PihHc3RNaW5pT2JqZWN0
KiBwdHIpOworCiB0ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0RWxlbWVudD4gYWRvcHRHUmVmKEdzdEVs
ZW1lbnQqIHB0cik7CiB0ZW1wbGF0ZTw+IEdzdEVsZW1lbnQqIHJlZkdQdHI8R3N0RWxlbWVudD4o
R3N0RWxlbWVudCogcHRyKTsKIHRlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8R3N0RWxlbWVudD4o
R3N0RWxlbWVudCogcHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5jcHAKaW5kZXggY2NjNDlhZWRlNDE2NmQ0YzYwNTQyYjA5MzNkYzY0NWEzODc1NTM5
MC4uMWJjYzBmODRjMDczYzg1MThiMjAxODIwM2M2Y2RjNTk4YzcyYWU3ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTQzOCw3ICs0Mzgs
NyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGF1c2VkKCkgY29uc3QKICAg
ICByZXR1cm4gcGF1c2VkOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
ZG9TZWVrKGNvbnN0IE1lZGlhVGltZSYgcG9zaXRpb24sIGZsb2F0IHJhdGUsIEdzdFNlZWtGbGFn
cyBzZWVrVHlwZSkKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkb1NlZWsoY29u
c3QgTWVkaWFUaW1lJiBwb3NpdGlvbiwgZmxvYXQgcmF0ZSwgR3N0U2Vla0ZsYWdzIHNlZWtGbGFn
cykKIHsKICAgICAvLyBEZWZhdWx0IHZhbHVlcyBmb3IgcmF0ZSA+PSAwLgogICAgIE1lZGlhVGlt
ZSBzdGFydFRpbWUgPSBwb3NpdGlvbiwgZW5kVGltZSA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUo
KTsKQEAgLTQ1Myw3ICs0NTMsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
ZG9TZWVrKGNvbnN0IE1lZGlhVGltZSYgcG9zaXRpb24sIGZsb2F0IHJhdGUsCiAgICAgICAgIHJh
dGUgPSAxLjA7CiAKICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbU2Vla10gUGVy
Zm9ybWluZyBhY3R1YWwgc2VlayB0byAlIiBHU1RfVElNRV9GT1JNQVQgIiAoZW5kVGltZTogJSIg
R1NUX1RJTUVfRk9STUFUICIpIGF0IHJhdGUgJWYiLCBHU1RfVElNRV9BUkdTKHRvR3N0Q2xvY2tU
aW1lKHN0YXJ0VGltZSkpLCBHU1RfVElNRV9BUkdTKHRvR3N0Q2xvY2tUaW1lKGVuZFRpbWUpKSwg
cmF0ZSk7Ci0gICAgcmV0dXJuIGdzdF9lbGVtZW50X3NlZWsobV9waXBlbGluZS5nZXQoKSwgcmF0
ZSwgR1NUX0ZPUk1BVF9USU1FLCBzZWVrVHlwZSwKKyAgICByZXR1cm4gZ3N0X2VsZW1lbnRfc2Vl
ayhtX3BpcGVsaW5lLmdldCgpLCByYXRlLCBHU1RfRk9STUFUX1RJTUUsIHNlZWtGbGFncywKICAg
ICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIHRvR3N0Q2xvY2tUaW1lKHN0YXJ0VGltZSksIEdTVF9T
RUVLX1RZUEVfU0VULCB0b0dzdENsb2NrVGltZShlbmRUaW1lKSk7CiB9CiAKQEAgLTE0ODIsMTgg
KzE0ODIsMTYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVRyYWNr
cyhjb25zdCBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24KICAgICB1bnNpZ25lZCB0ZXh0VHJh
Y2tJbmRleCA9IDA7CiAKICNkZWZpbmUgQ1JFQVRFX1RSQUNLKHR5cGUsIFR5cGUpIEdfU1RNVF9T
VEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKCF1c2VNZWRpYVNv
dXJjZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgIFJlZlB0cjxUeXBlIyNUcmFja1ByaXZhdGVHU3RyZWFtZXI+IHRyYWNrID0gVHlwZSMj
VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobWFrZVdlYWtQdHIoKnRoaXMpLCB0eXBlIyNU
cmFja0luZGV4LCBzdHJlYW0pOyBcCi0gICAgICAgICAgICBhdXRvIHRyYWNrSWQgPSB0cmFjay0+
aWQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAo
IXR5cGUjI1RyYWNrSW5kZXgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICAgICAgbV93YW50ZWQjI1R5cGUjI1N0cmVhbUlkID0gdHJhY2tJZDsgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgbV9yZXF1ZXN0ZWQjI1R5cGUjI1N0
cmVhbUlkID0gdHJhY2tJZDsgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgdHJh
Y2stPnNldEFjdGl2ZSh0cnVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0eXBlIyNUcmFja0luZGV4Kys7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBtXyMjdHlwZSMj
VHJhY2tzLmFkZCh0cmFja0lkLCB0cmFjayk7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICAgICBtX3BsYXllci0+YWRkIyNUeXBlIyNUcmFjaygqdHJhY2spOyAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFJlZlB0cjxUeXBlIyNUcmFj
a1ByaXZhdGVHU3RyZWFtZXI+IHRyYWNrID0gVHlwZSMjVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpj
cmVhdGUobWFrZVdlYWtQdHIoKnRoaXMpLCB0eXBlIyNUcmFja0luZGV4LCBzdHJlYW0pOyBcCisg
ICAgICAgIGF1dG8gdHJhY2tJZCA9IHRyYWNrLT5pZCgpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgaWYgKCF0eXBlIyNUcmFja0luZGV4KSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgbV93YW50ZWQjI1R5cGUjI1N0
cmVhbUlkID0gdHJhY2tJZDsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBtX3Jl
cXVlc3RlZCMjVHlwZSMjU3RyZWFtSWQgPSB0cmFja0lkOyAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgIHRyYWNrLT5zZXRBY3RpdmUodHJ1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHR5cGUjI1RyYWNrSW5kZXgrKzsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbV8jI3R5cGUj
I1RyYWNrcy5hZGQodHJhY2tJZCwgdHJhY2spOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBtX3BsYXllci0+YWRkIyNUeXBlIyNUcmFjaygqdHJhY2spOyAgICAgICAgICAgICAgICAg
ICAgICAgICBcCiAgICAgfSBHX1NUTVRfRU5ECiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKQEAgLTE1NDAsNiArMTUzOCwxNSBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3RyZWFtQ29sbGVjdGlvbk1lc3NhZ2UoR3N0TWVzc2Fn
ZSogbWVzcwogICAgIGlmIChtX2lzTGVnYWN5UGxheWJpbikKICAgICAgICAgcmV0dXJuOwogCisg
ICAgLy8gR1N0cmVhbWVyIHdvcmthcm91bmQ6CisgICAgLy8gVW5mb3J0dW5hdGVseSwgd2hlbiB3
ZSBoYXZlIGEgc3RyZWFtLWNvbGxlY3Rpb24gYXdhcmUgc291cmNlIChsaWtlIFdlYktpdE1lZGlh
U3JjKSBwYXJzZWJpbiBhbmQgZGVjb2RlYmluMyBlbWl0CisgICAgLy8gdGhlaXIgb3duIHN0cmVh
bS1jb2xsZWN0aW9uIG1lc3NhZ2VzLCBidXQgbGF0ZSwgYW5kIHNvbWV0aW1lcyB3aXRoIGR1cGxp
Y2F0ZWQgc3RyZWFtcy4gTGV0J3Mgb25seSBsaXN0ZW4gZm9yCisgICAgLy8gc3RyZWFtLWNvbGxl
Y3Rpb24gbWVzc2FnZXMgZnJvbSB0aGUgc291cmNlIGluIHRoZSBNU0UgY2FzZSB0byBhdm9pZCB0
aGVzZSBpc3N1ZXMuCisgICAgaWYgKGlzTWVkaWFTb3VyY2UoKSAmJiBHU1RfTUVTU0FHRV9TUkMo
bWVzc2FnZSkgIT0gR1NUX09CSkVDVChtX3NvdXJjZS5nZXQoKSkpIHsKKyAgICAgICAgR1NUX0RF
QlVHX09CSkVDVChwaXBlbGluZSgpLCAiSWdub3JpbmcgcmVkdW5kYW50IFNUUkVBTV9DT0xMRUNU
SU9OIGZyb20gJSIgR1NUX1BUUl9GT1JNQVQsIG1lc3NhZ2UtPnNyYyk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKICAgICBBU1NFUlQoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSA9PSBHU1Rf
TUVTU0FHRV9TVFJFQU1fQ09MTEVDVElPTik7CiAgICAgR1JlZlB0cjxHc3RTdHJlYW1Db2xsZWN0
aW9uPiBjb2xsZWN0aW9uOwogICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9jb2xsZWN0aW9u
KG1lc3NhZ2UsICZjb2xsZWN0aW9uLm91dFB0cigpKTsKQEAgLTE1NTUsNyArMTU2Miw3IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTdHJlYW1Db2xsZWN0aW9uTWVz
c2FnZShHc3RNZXNzYWdlKiBtZXNzCiAgICAgaWYgKCFjb2xsZWN0aW9uKQogICAgICAgICByZXR1
cm47CiAKLSAgICBjYWxsT25NYWluVGhyZWFkQW5kV2FpdChbcGxheWVyID0gbWFrZVdlYWtQdHIo
KnRoaXMpLCBjb2xsZWN0aW9uID0gV1RGTW92ZShjb2xsZWN0aW9uKV0geworICAgIGNhbGxPbk1h
aW5UaHJlYWQoW3BsYXllciA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgY29sbGVjdGlvbiA9IFdURk1v
dmUoY29sbGVjdGlvbildIHsKICAgICAgICAgaWYgKHBsYXllcikKICAgICAgICAgICAgIHBsYXll
ci0+dXBkYXRlVHJhY2tzKGNvbGxlY3Rpb24pOwogICAgIH0pOwpAQCAtMTgxMyw2ICsxODIwLDgg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVz
c2FnZSogbWVzc2FnZSkKICAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKGN1
cnJlbnRTdGF0ZSksICdfJywgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobmV3U3RhdGUpKS51
dGY4KCk7CiAgICAgICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklO
KG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGRvdEZpbGVOYW1l
LmRhdGEoKSk7CiAKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiQ2hhbmdl
ZCBzdGF0ZSBmcm9tICVzIHRvICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoY3VycmVu
dFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobmV3U3RhdGUpKTsKKwogICAgICAg
ICBpZiAoIW1faXNMZWdhY3lQbGF5YmluICYmIGN1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUEFV
U0VEICYmIG5ld1N0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKQogICAgICAgICAgICAgcGxheWJp
bjNTZW5kU2VsZWN0U3RyZWFtc0lmQXBwcm9wcmlhdGUoKTsKICAgICAgICAgdXBkYXRlU3RhdGVz
KCk7CkBAIC0xOTcxLDkgKzE5ODAsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICBwbGF5YmluM1Nl
bmRTZWxlY3RTdHJlYW1zSWZBcHByb3ByaWF0ZSgpOwogICAgICAgICBicmVhazsKICAgICB9Ci0g
ICAgY2FzZSBHU1RfTUVTU0FHRV9TVFJFQU1fQ09MTEVDVElPTjoKLSAgICAgICAgaGFuZGxlU3Ry
ZWFtQ29sbGVjdGlvbk1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlVuaGFuZGxlZCBHU3Ry
ZWFtZXIgbWVzc2FnZSB0eXBlOiAlcyIsIEdTVF9NRVNTQUdFX1RZUEVfTkFNRShtZXNzYWdlKSk7
CiAgICAgICAgIGJyZWFrOwpAQCAtMjU1MSw3ICsyNTU3LDcgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmRpZEVuZCgpCiAgICAgLy8gdW50aWwgd2UgZ2V0IHRoZSBpbml0aWFs
IFNUUkVBTVNfU0VMRUNURUQgbWVzc2FnZSBvbmUgbW9yZSB0aW1lLgogICAgIG1fd2FpdGluZ0Zv
clN0cmVhbXNTZWxlY3RlZEV2ZW50ID0gdHJ1ZTsKIAotICAgIGlmICghbV9wbGF5ZXItPmlzTG9v
cGluZygpKSB7CisgICAgaWYgKCFtX3BsYXllci0+aXNMb29waW5nKCkgJiYgIWlzTWVkaWFTb3Vy
Y2UoKSkgewogICAgICAgICBtX2lzUGF1c2VkID0gdHJ1ZTsKICAgICAgICAgY2hhbmdlUGlwZWxp
bmVTdGF0ZShHU1RfU1RBVEVfUkVBRFkpOwogICAgICAgICBtX2RpZERvd25sb2FkRmluaXNoID0g
ZmFsc2U7CkBAIC0yNjgxLDExICsyNjg3LDEwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKGNvbnN0IFVSTCYgdXJsKQogICAgIEdTVF9JTkZPKCJD
cmVhdGluZyBwaXBlbGluZSBmb3IgJXMgcGxheWVyIiwgbV9wbGF5ZXItPmlzVmlkZW9QbGF5ZXIo
KSA/ICJ2aWRlbyIgOiAiYXVkaW8iKTsKICAgICBjb25zdCBjaGFyKiBwbGF5YmluTmFtZSA9ICJw
bGF5YmluIjsKIAotICAgIC8vIE1TRSBkb2Vzbid0IHN1cHBvcnQgcGxheWJpbjMuIE1lZGlhc3Ry
ZWFtIHJlcXVpcmVzIHBsYXliaW4zLiBSZWd1bGFyCi0gICAgLy8gcGxheWJhY2sgY2FuIHVzZSBw
bGF5YmluMyBvbi1kZW1hbmQgd2l0aCB0aGUgV0VCS0lUX0dTVF9VU0VfUExBWUJJTjMKLSAgICAv
LyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAvLyBNU0UgYW5kIE1lZGlhc3RyZWFtIHJlcXVp
cmUgcGxheWJpbjMuIFJlZ3VsYXIgcGxheWJhY2sgY2FuIHVzZSBwbGF5YmluMyBvbi1kZW1hbmQg
d2l0aCB0aGUKKyAgICAvLyBXRUJLSVRfR1NUX1VTRV9QTEFZQklOMyBlbnZpcm9ubWVudCB2YXJp
YWJsZS4KICAgICBjb25zdCBjaGFyKiB1c2VQbGF5YmluMyA9IGdfZ2V0ZW52KCJXRUJLSVRfR1NU
X1VTRV9QTEFZQklOMyIpOwotICAgIGlmICgoIWlzTWVkaWFTb3VyY2UoKSAmJiB1c2VQbGF5Ymlu
MyAmJiBlcXVhbCh1c2VQbGF5YmluMywgIjEiKSkgfHwgdXJsLnByb3RvY29sSXMoIm1lZGlhc3Ry
ZWFtIikpCisgICAgaWYgKChpc01lZGlhU291cmNlKCkgfHwgdXJsLnByb3RvY29sSXMoIm1lZGlh
c3RyZWFtIikgfHwgKHVzZVBsYXliaW4zICYmIGVxdWFsKHVzZVBsYXliaW4zLCAiMSIpKSkpCiAg
ICAgICAgIHBsYXliaW5OYW1lID0gInBsYXliaW4zIjsKIAogICAgIEFTU0VSVCghbV9waXBlbGlu
ZSk7CkBAIC0yNzIzLDYgKzI3MjgsMTIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmNyZWF0ZUdTVFBsYXlCaW4oY29uc3QgVVJMJiB1cmwpCiAgICAgZ19zaWduYWxfY29ubmVj
dF9zd2FwcGVkKGJ1cy5nZXQoKSwgInN5bmMtbWVzc2FnZTo6bmVlZC1jb250ZXh0IiwgR19DQUxM
QkFDSygrW10oTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIsIEdzdE1lc3NhZ2Uq
IG1lc3NhZ2UpIHsKICAgICAgICAgcGxheWVyLT5oYW5kbGVOZWVkQ29udGV4dE1lc3NhZ2UobWVz
c2FnZSk7CiAgICAgfSksIHRoaXMpOworICAgIC8vIEluIHRoZSBNU0UgY2FzZSBzdHJlYW0gY29s
bGVjdGlvbiBtZXNzYWdlcyBhcmUgZW1pdHRlZCBmcm9tIHRoZSBtYWluIHRocmVhZCByaWdodCBi
ZWZvcmUgdGhlIGluaXRpbGl6YXRpb24gc2VnZW1lbnQKKyAgICAvLyBpcyBwYXJzZWQgYW5kICJ1
cGRhdGVlbmQiIGlzIGZpcmVkLiBXZSBuZWVkIHRoZXJlZm9yZSB0byBoYW5kbGUgdGhlc2Ugc3lu
Y2hyb25vdXNseSBpbiB0aGUgc2FtZSBtYWluIHRocmVhZCB0aWNrCisgICAgLy8gdG8gbWFrZSB0
aGUgdHJhY2tzIGluZm9ybWF0aW9uIGF2YWlsYWJsZSB0byBKUyBubyBsYXRlciB0aGFuICJ1cGRh
dGVlbmQiLgorICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChidXMuZ2V0KCksICJzeW5jLW1l
c3NhZ2U6OnN0cmVhbS1jb2xsZWN0aW9uIiwgR19DQUxMQkFDSygrW10oTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyKiBwbGF5ZXIsIEdzdE1lc3NhZ2UqIG1lc3NhZ2UpIHsKKyAgICAgICAgcGxh
eWVyLT5oYW5kbGVTdHJlYW1Db2xsZWN0aW9uTWVzc2FnZShtZXNzYWdlKTsKKyAgICB9KSwgdGhp
cyk7CiAKICAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgIm11dGUiLCBtX3BsYXll
ci0+bXV0ZWQoKSwgbnVsbHB0cik7CiAKQEAgLTI3NjksOCArMjc4MCw2IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKGNvbnN0IFVSTCYgdXJsKQog
ICAgIGlmIChtX3BsYXllci0+aXNWaWRlb1BsYXllcigpKQogICAgICAgICBnX29iamVjdF9zZXQo
bV9waXBlbGluZS5nZXQoKSwgInZpZGVvLXNpbmsiLCBjcmVhdGVWaWRlb1NpbmsoKSwgbnVsbHB0
cik7CiAKLSAgICBjb25maWd1cmVQbGF5U2luaygpOwotCiAgICAgaWYgKG1fc2hvdWxkUHJlc2Vy
dmVQaXRjaCkgewogICAgICAgICBHc3RFbGVtZW50KiBzY2FsZSA9IGdzdF9lbGVtZW50X2ZhY3Rv
cnlfbWFrZSgic2NhbGV0ZW1wbyIsIG51bGxwdHIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggZDQyMWVjNzQxYTZkZWRkODhhYjc3ZTRlN2I3
ZDFjM2E1NjQ1MzNjMy4uMWE4YTFjZGZjOTlmYjEzMjI3MzAyZDNkZjU3ZGQwZjI3NDBkOTYxOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaApAQCAtMTM5
LDcgKzEzOSw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZvaWQgY2FuY2VsTG9hZCgpIGZpbmFs
OwogICAgIHZvaWQgcHJlcGFyZVRvUGxheSgpIGZpbmFsOwotICAgIHZvaWQgcGxheSgpIGZpbmFs
OworICAgIHZvaWQgcGxheSgpIG92ZXJyaWRlOwogICAgIHZvaWQgcGF1c2UoKSBvdmVycmlkZTsK
ICAgICBib29sIHBhdXNlZCgpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgc2Vla2luZygpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1faXNTZWVraW5nOyB9CkBAIC0yNTIsNyArMjUyLDYgQEAgcHJv
dGVjdGVkOgogCiAgICAgdmlydHVhbCB2b2lkIGR1cmF0aW9uQ2hhbmdlZCgpOwogICAgIHZpcnR1
YWwgdm9pZCBzb3VyY2VTZXR1cChHc3RFbGVtZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIGNvbmZp
Z3VyZVBsYXlTaW5rKCkgeyB9CiAgICAgdmlydHVhbCBib29sIGNoYW5nZVBpcGVsaW5lU3RhdGUo
R3N0U3RhdGUpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVQbGF5YmFja1JhdGUoKTsKIApAQCAt
MzAzLDYgKzMwMiw5IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGVuc3VyZUF1ZGlvU291cmNlUHJv
dmlkZXIoKTsKICAgICB2b2lkIHNldEF1ZGlvU3RyZWFtUHJvcGVydGllcyhHT2JqZWN0Kik7CiAK
KyAgICB2aXJ0dWFsIGJvb2wgZG9TZWVrKGNvbnN0IE1lZGlhVGltZSYgcG9zaXRpb24sIGZsb2F0
IHJhdGUsIEdzdFNlZWtGbGFncyk7CisgICAgdm9pZCBpbnZhbGlkYXRlQ2FjaGVkUG9zaXRpb24o
KSB7IG1fbGFzdFF1ZXJ5VGltZS5yZXNldCgpOyB9CisKICAgICBzdGF0aWMgdm9pZCBzZXRBdWRp
b1N0cmVhbVByb3BlcnRpZXNDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqLCBH
T2JqZWN0Kik7CiAKICAgICBzdGF0aWMgdm9pZCBzb3VyY2VTZXR1cENhbGxiYWNrKE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lciosIEdzdEVsZW1lbnQqKTsKQEAgLTQzMSw4ICs0MzMsNiBAQCBw
cml2YXRlOgogICAgIHZvaWQgcHVyZ2VJbnZhbGlkVmlkZW9UcmFja3MoVmVjdG9yPFN0cmluZz4g
dmFsaWRUcmFja0lkcyk7CiAgICAgdm9pZCBwdXJnZUludmFsaWRUZXh0VHJhY2tzKFZlY3RvcjxT
dHJpbmc+IHZhbGlkVHJhY2tJZHMpOwogCi0gICAgdmlydHVhbCBib29sIGRvU2Vlayhjb25zdCBN
ZWRpYVRpbWUmIHBvc2l0aW9uLCBmbG9hdCByYXRlLCBHc3RTZWVrRmxhZ3Mgc2Vla1R5cGUpOwot
CiAgICAgU3RyaW5nIGVuZ2luZURlc2NyaXB0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
IkdTdHJlYW1lciI7IH0KICAgICBib29sIGRpZFBhc3NDT1JTQWNjZXNzQ2hlY2soKSBjb25zdCBv
dmVycmlkZTsKICAgICBib29sIGNhblNhdmVNZWRpYURhdGEoKSBjb25zdCBvdmVycmlkZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UcmFj
a1ByaXZhdGVCYXNlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5oCmluZGV4IGFmNGJmZDgyZmRi
YzhhZWFiNDA0YzllMTVhZjY0ODU1MzU1MzBjOTcuLjA5NTc1YWQ5MGY4MGExMGZiZDhhZjEzZmI0
NDcxMjhlMDIxZDU2OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9UcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFt
ZXIuaApAQCAtNjIsNiArNjIsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9zdHJlYW0u
Z2V0KCk7CiAgICAgfQogCisgICAgLy8gVXNlZCBmb3IgTVNFLCB3aGVyZSB0aGUgaW5pdGlhbCBj
YXBzIG9mIHRoZSBwYWQgYXJlIHJlbGV2YW50IGZvciBpbml0aWFsaXppbmcgdGhlIG1hdGNoaW5n
IHBhZCBpbiB0aGUKKyAgICAvLyBwbGF5YmFjayBwaXBlbGluZS4KKyAgICB2b2lkIHNldEluaXRp
YWxDYXBzKEdSZWZQdHI8R3N0Q2Fwcz4mJiBjYXBzKSB7IG1faW5pdGlhbENhcHMgPSBXVEZNb3Zl
KGNhcHMpOyB9CisgICAgY29uc3QgR1JlZlB0cjxHc3RDYXBzPiYgaW5pdGlhbENhcHMoKSB7IHJl
dHVybiBtX2luaXRpYWxDYXBzOyB9CisKIHByb3RlY3RlZDoKICAgICBUcmFja1ByaXZhdGVCYXNl
R1N0cmVhbWVyKFRyYWNrUHJpdmF0ZUJhc2UqIG93bmVyLCBnaW50IGluZGV4LCBHUmVmUHRyPEdz
dFBhZD4pOwogICAgIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIoVHJhY2tQcml2YXRlQmFzZSog
b3duZXIsIGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0U3RyZWFtPik7CkBAIC04Miw2ICs4Nyw3IEBA
IHByb3RlY3RlZDoKICAgICBHUmVmUHRyPEdzdFBhZD4gbV9iZXN0VXBzdHJlYW1QYWQ7CiAgICAg
R1JlZlB0cjxHc3RTdHJlYW0+IG1fc3RyZWFtOwogICAgIGd1bG9uZyBtX2V2ZW50UHJvYmU7Cisg
ICAgR1JlZlB0cjxHc3RDYXBzPiBtX2luaXRpYWxDYXBzOwogCiBwcml2YXRlOgogICAgIGJvb2wg
Z2V0TGFuZ3VhZ2VDb2RlKEdzdFRhZ0xpc3QqIHRhZ3MsIEF0b21TdHJpbmcmIHZhbHVlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2Uv
QXBwZW5kUGlwZWxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHAKaW5kZXggODA5ODIzMDZkZGZlYWRiOTY5NjQ5
YmQ5ODgwZmJiNDBiZjVhMjcxZC4uMzE3Y2VkM2QxYzAxNGQ3YzRjZjY1MWUxMjM3OTA3NzFhYjlm
OThiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHAKQEAgLTM4OSwxMyArMzg5
LDEzIEBAIHZvaWQgQXBwZW5kUGlwZWxpbmU6OnBhcnNlRGVtdXhlclNyY1BhZENhcHMoR3N0Q2Fw
cyogZGVtdXhlclNyY1BhZENhcHMpCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAogICAg
IG1fZGVtdXhlclNyY1BhZENhcHMgPSBhZG9wdEdSZWYoZGVtdXhlclNyY1BhZENhcHMpOwotICAg
IG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6
VW5rbm93bjsKKyAgICBtX3N0cmVhbVR5cGUgPSBNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFt
ZXI6OlVua25vd247CiAKICAgICBjb25zdCBjaGFyKiBvcmlnaW5hbE1lZGlhVHlwZSA9IGNhcHNN
ZWRpYVR5cGUobV9kZW11eGVyU3JjUGFkQ2Fwcy5nZXQoKSk7CiAgICAgYXV0byYgZ3N0UmVnaXN0
cnlTY2FubmVyID0gR1N0cmVhbWVyUmVnaXN0cnlTY2FubmVyTVNFOjpzaW5nbGV0b24oKTsKICAg
ICBpZiAoIWdzdFJlZ2lzdHJ5U2Nhbm5lci5pc0NvZGVjU3VwcG9ydGVkKEdTdHJlYW1lclJlZ2lz
dHJ5U2Nhbm5lcjo6Q29uZmlndXJhdGlvbjo6RGVjb2RpbmcsIG9yaWdpbmFsTWVkaWFUeXBlKSkg
ewogICAgICAgICAgICAgbV9wcmVzZW50YXRpb25TaXplID0gV2ViQ29yZTo6RmxvYXRTaXplKCk7
Ci0gICAgICAgICAgICBtX3N0cmVhbVR5cGUgPSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5
cGVHU3RyZWFtZXI6OkludmFsaWQ7CisgICAgICAgICAgICBtX3N0cmVhbVR5cGUgPSBNZWRpYVNv
dXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OkludmFsaWQ7CiAgICAgfSBlbHNlIGlmIChkb0NhcHNI
YXZlVHlwZShtX2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpLCBHU1RfVklERU9fQ0FQU19UWVBFX1BS
RUZJWCkpIHsKICAgICAgICAgT3B0aW9uYWw8RmxvYXRTaXplPiBzaXplID0gZ2V0VmlkZW9SZXNv
bHV0aW9uRnJvbUNhcHMobV9kZW11eGVyU3JjUGFkQ2Fwcy5nZXQoKSk7CiAgICAgICAgIGlmIChz
aXplLmhhc1ZhbHVlKCkpCkBAIC00MDMsMTMgKzQwMywxMyBAQCB2b2lkIEFwcGVuZFBpcGVsaW5l
OjpwYXJzZURlbXV4ZXJTcmNQYWRDYXBzKEdzdENhcHMqIGRlbXV4ZXJTcmNQYWRDYXBzKQogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBtX3ByZXNlbnRhdGlvblNpemUgPSBXZWJDb3JlOjpGbG9h
dFNpemUoKTsKIAotICAgICAgICBtX3N0cmVhbVR5cGUgPSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0
cmVhbVR5cGVHU3RyZWFtZXI6OlZpZGVvOworICAgICAgICBtX3N0cmVhbVR5cGUgPSBNZWRpYVNv
dXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlZpZGVvOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1f
cHJlc2VudGF0aW9uU2l6ZSA9IFdlYkNvcmU6OkZsb2F0U2l6ZSgpOwogICAgICAgICBpZiAoZG9D
YXBzSGF2ZVR5cGUobV9kZW11eGVyU3JjUGFkQ2Fwcy5nZXQoKSwgR1NUX0FVRElPX0NBUFNfVFlQ
RV9QUkVGSVgpKQotICAgICAgICAgICAgbV9zdHJlYW1UeXBlID0gV2ViQ29yZTo6TWVkaWFTb3Vy
Y2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpBdWRpbzsKKyAgICAgICAgICAgIG1fc3RyZWFtVHlwZSA9
IE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6QXVkaW87CiAgICAgICAgIGVsc2UgaWYg
KGRvQ2Fwc0hhdmVUeXBlKG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCksIEdTVF9URVhUX0NBUFNf
VFlQRV9QUkVGSVgpKQotICAgICAgICAgICAgbV9zdHJlYW1UeXBlID0gV2ViQ29yZTo6TWVkaWFT
b3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpUZXh0OworICAgICAgICAgICAgbV9zdHJlYW1UeXBl
ID0gTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpUZXh0OwogICAgIH0KIH0KIApAQCAt
NDI2LDE4ICs0MjYsMjQgQEAgdm9pZCBBcHBlbmRQaXBlbGluZTo6YXBwc2lua0NhcHNDaGFuZ2Vk
KCkKICAgICBpZiAoIWNhcHMpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIElmIHRoaXMgaXMg
bm90IHRoZSBmaXJzdCB0aW1lIHdlJ3JlIHBhcnNpbmcgYW4gaW5pdGlhbGl6YXRpb24gc2VnbWVu
dCwgZmFpbCBpZiB0aGUgdHJhY2sKKyAgICAvLyBoYXMgYSBkaWZmZXJlbnQgY29kZWMgb3IgdHlw
ZSAoZS5nLiBpZiB3ZSB3ZXJlIHByZXZpb3VzbHkgZGVtdXhpbmcgYW4gYXVkaW8gc3RyZWFtIGFu
ZAorICAgIC8vIHNvbWVvbmUgYXBwZW5kcyBhIHZpZGVvIHN0cmVhbSkuCisgICAgaWYgKG1fYXBw
c2lua0NhcHMgJiYgc3RyY21wKGNhcHNNZWRpYVR5cGUoY2Fwcy5nZXQoKSksIGNhcHNNZWRpYVR5
cGUobV9hcHBzaW5rQ2Fwcy5nZXQoKSkpKSB7CisgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCht
X3BpcGVsaW5lLmdldCgpLCAiVXNlciBhcHBlbmRlZCB0cmFjayBtZXRhZGF0YSB3aXRoIHR5cGUg
JyVzJyBmb3IgYSBTb3VyY2VCdWZmZXIgcHJldmlvdXNseSBoYW5kbGluZyAnJXMnLiBFcnJvcmlu
ZyBvdXQuIiwgY2Fwc01lZGlhVHlwZShjYXBzLmdldCgpKSwgY2Fwc01lZGlhVHlwZShtX2FwcHNp
bmtDYXBzLmdldCgpKSk7CisgICAgICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZS5hcHBlbmRQYXJz
aW5nRmFpbGVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoZG9DYXBzSGF2
ZVR5cGUoY2Fwcy5nZXQoKSwgR1NUX1ZJREVPX0NBUFNfVFlQRV9QUkVGSVgpKSB7CiAgICAgICAg
IE9wdGlvbmFsPEZsb2F0U2l6ZT4gc2l6ZSA9IGdldFZpZGVvUmVzb2x1dGlvbkZyb21DYXBzKGNh
cHMuZ2V0KCkpOwogICAgICAgICBpZiAoc2l6ZS5oYXNWYWx1ZSgpKQogICAgICAgICAgICAgbV9w
cmVzZW50YXRpb25TaXplID0gc2l6ZS52YWx1ZSgpOwogICAgIH0KIAotICAgIC8vIFRoaXMgbWVh
bnMgdGhhdCB3ZSdyZSByaWdodCBhZnRlciBhIG5ldyB0cmFjayBoYXMgYXBwZWFyZWQuIE90aGVy
d2lzZSwgaXQncyBhIGNhcHMgY2hhbmdlIGluc2lkZSB0aGUgc2FtZSB0cmFjay4KLSAgICBib29s
IHByZXZpb3VzQ2Fwc1dlcmVOdWxsID0gIW1fYXBwc2lua0NhcHM7Ci0KICAgICBpZiAobV9hcHBz
aW5rQ2FwcyAhPSBjYXBzKSB7CiAgICAgICAgIG1fYXBwc2lua0NhcHMgPSBXVEZNb3ZlKGNhcHMp
OwotICAgICAgICBtX3BsYXllclByaXZhdGUtPnRyYWNrRGV0ZWN0ZWQoKnRoaXMsIG1fdHJhY2ss
IHByZXZpb3VzQ2Fwc1dlcmVOdWxsKTsKKyAgICAgICAgbV9wbGF5ZXJQcml2YXRlLT50cmFja0Rl
dGVjdGVkKCp0aGlzLCBtX3RyYWNrKTsKICAgICB9CiB9CiAKQEAgLTcwOSw5ICs3MTUsOSBAQCB2
b2lkIEFwcGVuZFBpcGVsaW5lOjpjb25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2lua0Zyb21TdHJl
YW1pbmdUaHJlYWQoR3N0UGFkKiBkZQogICAgIH0KIAogICAgIC8vIE11c3QgYmUgZG9uZSBpbiB0
aGUgdGhyZWFkIHdlIHdlcmUgY2FsbGVkIGZyb20gKHVzdWFsbHkgc3RyZWFtaW5nIHRocmVhZCku
Ci0gICAgYm9vbCBpc0RhdGEgPSAobV9zdHJlYW1UeXBlID09IFdlYkNvcmU6Ok1lZGlhU291cmNl
U3RyZWFtVHlwZUdTdHJlYW1lcjo6QXVkaW8pCi0gICAgICAgIHx8IChtX3N0cmVhbVR5cGUgPT0g
V2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpWaWRlbykKLSAgICAgICAg
fHwgKG1fc3RyZWFtVHlwZSA9PSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFt
ZXI6OlRleHQpOworICAgIGJvb2wgaXNEYXRhID0gKG1fc3RyZWFtVHlwZSA9PSBNZWRpYVNvdXJj
ZVN0cmVhbVR5cGVHU3RyZWFtZXI6OkF1ZGlvKQorICAgICAgICB8fCAobV9zdHJlYW1UeXBlID09
IE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VmlkZW8pCisgICAgICAgIHx8IChtX3N0
cmVhbVR5cGUgPT0gTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpUZXh0KTsKIAogICAg
IGlmIChpc0RhdGEpIHsKICAgICAgICAgR1JlZlB0cjxHc3RPYmplY3Q+IHBhcmVudCA9IGFkb3B0
R1JlZihnc3RfZWxlbWVudF9nZXRfcGFyZW50KG1fYXBwc2luay5nZXQoKSkpOwpAQCAtNzU4LDYg
Kzc2NCw4IEBAIHZvaWQgQXBwZW5kUGlwZWxpbmU6OmNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBz
aW5rKEdzdFBhZCogZGVtdXhlclNyY1BhZCkKICAgICAvLyBPbmx5IG9uZSBzdHJlYW0gcGVyIGRl
bXV4ZXIgaXMgc3VwcG9ydGVkLgogICAgIEFTU0VSVCghZ3N0X3BhZF9pc19saW5rZWQoc2lua1Np
bmtQYWQuZ2V0KCkpKTsKIAorICAgIC8vIEFzIGl0IGlzIG5vdywgcmVzZXRQYXJzZXJTdGF0ZSgp
IHdpbGwgY2F1c2UgdGhlIHBhZHMgdG8gYmUgZGlzY29ubmVjdGVkLCBzbyB0aGV5IHdpbGwgbGF0
ZXIgYmUgcmUtYWRkZWQgb24gdGhlIG5leHQgaW5pdGlhbGl6YXRpb24gc2VnbWVudC4KKwogICAg
IEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9jdXJyZW50X2Nh
cHMoR1NUX1BBRChkZW11eGVyU3JjUGFkKSkpOwogCiAjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9E
RUJVRwpAQCAtNzY5LDE3ICs3NzcsMjcgQEAgdm9pZCBBcHBlbmRQaXBlbGluZTo6Y29ubmVjdERl
bXV4ZXJTcmNQYWRUb0FwcHNpbmsoR3N0UGFkKiBkZW11eGVyU3JjUGFkKQogCiAgICAgcGFyc2VE
ZW11eGVyU3JjUGFkQ2Fwcyhnc3RfY2Fwc19yZWYoY2Fwcy5nZXQoKSkpOwogCisgICAgVHJhY2tQ
cml2YXRlQmFzZUdTdHJlYW1lciogZ3N0cmVhbWVyVHJhY2s7CiAgICAgc3dpdGNoIChtX3N0cmVh
bVR5cGUpIHsKLSAgICBjYXNlIFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1l
cjo6QXVkaW86Ci0gICAgICAgIG1fdHJhY2sgPSBXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0ZUdT
dHJlYW1lcjo6Y3JlYXRlKG1ha2VXZWFrUHRyKCptX3BsYXllclByaXZhdGUpLCBpZCgpLCBzaW5r
U2lua1BhZC5nZXQoKSk7CisgICAgY2FzZSBNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6
OkF1ZGlvOiB7CisgICAgICAgIGF1dG8gc3BlY2lmaWNUcmFjayA9IFdlYkNvcmU6OkF1ZGlvVHJh
Y2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobWFrZVdlYWtQdHIoKm1fcGxheWVyUHJpdmF0ZSks
IGlkKCksIHNpbmtTaW5rUGFkLmdldCgpKTsKKyAgICAgICAgZ3N0cmVhbWVyVHJhY2sgPSBzcGVj
aWZpY1RyYWNrLnB0cigpOworICAgICAgICBtX3RyYWNrID0gbWFrZVJlZlB0cihzdGF0aWNfY2Fz
dDxUcmFja1ByaXZhdGVCYXNlKj4oc3BlY2lmaWNUcmFjay5wdHIoKSkpOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6Vmlk
ZW86Ci0gICAgICAgIG1fdHJhY2sgPSBXZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1l
cjo6Y3JlYXRlKG1ha2VXZWFrUHRyKCptX3BsYXllclByaXZhdGUpLCBpZCgpLCBzaW5rU2lua1Bh
ZC5nZXQoKSk7CisgICAgfQorICAgIGNhc2UgTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVy
OjpWaWRlbzogeworICAgICAgICBhdXRvIHNwZWNpZmljVHJhY2sgPSBXZWJDb3JlOjpWaWRlb1Ry
YWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1ha2VXZWFrUHRyKCptX3BsYXllclByaXZhdGUp
LCBpZCgpLCBzaW5rU2lua1BhZC5nZXQoKSk7CisgICAgICAgIGdzdHJlYW1lclRyYWNrID0gc3Bl
Y2lmaWNUcmFjay5wdHIoKTsKKyAgICAgICAgbV90cmFjayA9IG1ha2VSZWZQdHIoc3RhdGljX2Nh
c3Q8VHJhY2tQcml2YXRlQmFzZSo+KHNwZWNpZmljVHJhY2sucHRyKCkpKTsKICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlRl
eHQ6Ci0gICAgICAgIG1fdHJhY2sgPSBXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0
cmVhbWVyOjpjcmVhdGUoaWQoKSwgc2lua1NpbmtQYWQuZ2V0KCkpOworICAgIH0KKyAgICBjYXNl
IE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VGV4dDogeworICAgICAgICBhdXRvIHNw
ZWNpZmljVHJhY2sgPSBXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpj
cmVhdGUoaWQoKSwgc2lua1NpbmtQYWQuZ2V0KCkpOworICAgICAgICBnc3RyZWFtZXJUcmFjayA9
IHNwZWNpZmljVHJhY2sucHRyKCk7CisgICAgICAgIG1fdHJhY2sgPSBtYWtlUmVmUHRyKHN0YXRp
Y19jYXN0PFRyYWNrUHJpdmF0ZUJhc2UqPihzcGVjaWZpY1RyYWNrLnB0cigpKSk7CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVy
OjpJbnZhbGlkOgorICAgIH0KKyAgICBjYXNlIE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1l
cjo6SW52YWxpZDoKICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCks
ICJVbnN1cHBvcnRlZCB0cmFjayBjb2RlYzogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMuZ2V0KCkp
OwogICAgICAgICAvLyAzLjUuNyBJbml0aWFsaXphdGlvbiBTZWdtZW50IFJlY2VpdmVkCiAgICAg
ICAgIC8vIDUuMS4gSWYgdGhlIGluaXRpYWxpemF0aW9uIHNlZ21lbnQgY29udGFpbnMgdHJhY2tz
IHdpdGggY29kZWNzIHRoZSB1c2VyIGFnZW50IGRvZXMgbm90IHN1cHBvcnQsIHRoZW4gcnVuIHRo
ZQpAQCAtNzkxLDExICs4MDksMTIgQEAgdm9pZCBBcHBlbmRQaXBlbGluZTo6Y29ubmVjdERlbXV4
ZXJTcmNQYWRUb0FwcHNpbmsoR3N0UGFkKiBkZW11eGVyU3JjUGFkKQogICAgICAgICByZXR1cm47
CiAgICAgZGVmYXVsdDoKICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0
KCksICJQYWQgaGFzIHVua25vd24gdHJhY2sgdHlwZSwgaWdub3Jpbmc6ICUiIEdTVF9QVFJfRk9S
TUFULCBjYXBzLmdldCgpKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICB9
CisgICAgZ3N0cmVhbWVyVHJhY2stPnNldEluaXRpYWxDYXBzKEdSZWZQdHIoY2FwcykpOwogCiAg
ICAgbV9hcHBzaW5rQ2FwcyA9IFdURk1vdmUoY2Fwcyk7Ci0gICAgbV9wbGF5ZXJQcml2YXRlLT50
cmFja0RldGVjdGVkKCp0aGlzLCBtX3RyYWNrLCB0cnVlKTsKKyAgICBtX3BsYXllclByaXZhdGUt
PnRyYWNrRGV0ZWN0ZWQoKnRoaXMsIG1fdHJhY2spOwogfQogCiB2b2lkIEFwcGVuZFBpcGVsaW5l
OjpkaXNjb25uZWN0RGVtdXhlclNyY1BhZEZyb21BcHBzaW5rRnJvbUFueVRocmVhZChHc3RQYWQq
IGRlbXV4ZXJTcmNQYWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmgKaW5kZXggMTE2MTg2
ZTNjZDZhMjczZjMzZWMyNGNjOTdkOGIyZmU5YmJiNjU3Zi4uNjg3M2ZiNzU2NjFmNDc0MWYxM2Jj
MTBiMTk2NjM4MzFlMTQ1YWU0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuaApAQCAt
NTcsNiArNTcsOSBAQCBwdWJsaWM6CiAgICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
KiBwbGF5ZXJQcml2YXRlKCkgeyByZXR1cm4gbV9wbGF5ZXJQcml2YXRlOyB9CiAKIHByaXZhdGU6
CisgICAgLy8gU2ltaWxhciB0byBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGUs
IGJ1dCB3aXRoIGEgbmV3IHZhbHVlIChJbnZhbGlkKSBmb3Igd2hlbiB0aGUgY29kZWMgaXMKKyAg
ICAvLyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgc3lzdGVtLCB3aGljaCBzaG91bGQgcmVzdWx0IGlu
IFBhcnNpbmdGYWlsZWQgZXJyb3IgYmVpbmcgdGhyb3duIGluIFNvdXJjZUJ1ZmZlci4KKyAgICBl
bnVtIE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lciB7IEF1ZGlvLCBWaWRlbywgVGV4dCwg
VW5rbm93biwgSW52YWxpZCB9OwogCiAgICAgdm9pZCBoYW5kbGVFcnJvclN5bmNNZXNzYWdlKEdz
dE1lc3NhZ2UqKTsKICAgICB2b2lkIGhhbmRsZU5lZWRDb250ZXh0U3luY01lc3NhZ2UoR3N0TWVz
c2FnZSopOwpAQCAtODEsNyArODQsNiBAQCBwcml2YXRlOgogICAgIEdzdEVsZW1lbnQqIGFwcHNy
YygpIHsgcmV0dXJuIG1fYXBwc3JjLmdldCgpOyB9CiAgICAgR3N0RWxlbWVudCogYXBwc2luaygp
IHsgcmV0dXJuIG1fYXBwc2luay5nZXQoKTsgfQogICAgIEdzdENhcHMqIGRlbXV4ZXJTcmNQYWRD
YXBzKCkgeyByZXR1cm4gbV9kZW11eGVyU3JjUGFkQ2Fwcy5nZXQoKTsgfQotICAgIFdlYkNvcmU6
Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lciBzdHJlYW1UeXBlKCkgeyByZXR1cm4gbV9z
dHJlYW1UeXBlOyB9CiAKICAgICB2b2lkIGRpc2Nvbm5lY3REZW11eGVyU3JjUGFkRnJvbUFwcHNp
bmtGcm9tQW55VGhyZWFkKEdzdFBhZCopOwogICAgIHZvaWQgY29ubmVjdERlbXV4ZXJTcmNQYWRU
b0FwcHNpbmtGcm9tU3RyZWFtaW5nVGhyZWFkKEdzdFBhZCopOwpAQCAtMTQyLDcgKzE0NCw3IEBA
IHByaXZhdGU6CiAgICAgc3RydWN0IFBhZFByb2JlSW5mb3JtYXRpb24gbV9hcHBzaW5rUGFkRXZl
bnRQcm9iZUluZm9ybWF0aW9uOwogI2VuZGlmCiAKLSAgICBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0
cmVhbVR5cGVHU3RyZWFtZXIgbV9zdHJlYW1UeXBlOworICAgIE1lZGlhU291cmNlU3RyZWFtVHlw
ZUdTdHJlYW1lciBtX3N0cmVhbVR5cGU7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0
ZUJhc2U+IG1fdHJhY2s7CiAKICAgICBBYm9ydGFibGVUYXNrUXVldWUgbV90YXNrUXVldWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNl
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RS5jcHAKaW5kZXggNTQ0NTk2YWZmYTA0NGNjMGNlYWNkODU0MTVjMGI5NWI3Nzg4NjliNS4uODJj
YTVmMTdhMDhiYWY2NGNlODI2NzM1NDM0MTk3MWNkZDVlYzBlZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNwcApAQCAtMyw5
ICszLDkgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEgTHRkLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIu
Y29tPgogICogQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdu
b21lLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMywg
MjAxNiwgMjAxNyBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEs
IDIwMTIsIDIwMTMsIDIwMTYsIDIwMTcsIDIwMTgsIDIwMTksIDIwMjAgSWdhbGlhIFMuTAogICog
Q29weXJpZ2h0IChDKSAyMDE1IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxh
ci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYsIDIwMTcgTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiwgMjAxNywgMjAxOCwgMjAxOSwg
MjAyMCwgMjAyMSBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0zNiwxMCArMzYsMTEgQEAKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVk
ZSAiTWVkaWFEZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCi0jaW5jbHVk
ZSAiUGxheWJhY2tQaXBlbGluZS5oIgorI2luY2x1ZGUgIk1lZGlhU291cmNlVHJhY2tHU3RyZWFt
ZXIuaCIKICNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmgiCiAjaW5jbHVk
ZSAiVGltZVJhbmdlcy5oIgogI2luY2x1ZGUgIlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgi
CisjaW5jbHVkZSAiV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCIKIAogI2luY2x1ZGUgPGdz
dC9hcHAvZ3N0YXBwc2luay5oPgogI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc3JjLmg+CkBAIC0x
MTIsMTMgKzExMyw3IEBAIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6fk1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRSgpCiB7CiAgICAgR1NUX1RSQUNFKCJkZXN0cm95aW5nIHRo
ZSBwbGF5ZXIgKCVwKSIsIHRoaXMpOwogCi0gICAgaWYgKG1fc291cmNlKSB7Ci0gICAgICAgIHdl
YktpdE1lZGlhU3JjU2V0TWVkaWFQbGF5ZXJQcml2YXRlKFdFQktJVF9NRURJQV9TUkMobV9zb3Vy
Y2UuZ2V0KCkpLCBudWxscHRyKTsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9ieV9kYXRhKG1fc291cmNlLmdldCgpLCB0aGlzKTsKLSAgICB9Ci0KLSAgICBpZiAobV9wbGF5
YmFja1BpcGVsaW5lKQotICAgICAgICBtX3BsYXliYWNrUGlwZWxpbmUtPnNldFdlYktpdE1lZGlh
U3JjKG51bGxwdHIpOworICAgIG1fc291cmNlLmNsZWFyKCk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpsb2FkKGNvbnN0IFN0cmluZyYpCkBAIC0xMzQsMTkgKzEy
OSwyMyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bG9hZChjb25zdCBV
UkwmIHVybCwgY29uc3QgQ29udGVudFR5cGUmLCBNZQogICAgIEdTVF9ERUJVRygiTG9hZGluZyAl
cyIsIG1zZUJsb2JVUkkuYXNjaWkoKS5kYXRhKCkpOwogICAgIG1fbWVkaWFTb3VyY2UgPSBtZWRp
YVNvdXJjZTsKIAotICAgIGlmICghbV9wbGF5YmFja1BpcGVsaW5lKQotICAgICAgICBtX3BsYXli
YWNrUGlwZWxpbmUgPSBQbGF5YmFja1BpcGVsaW5lOjpjcmVhdGUoKTsKLQogICAgIG1fbWVkaWFT
b3VyY2VQcml2YXRlID0gTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyOjpvcGVuKCptX21lZGlh
U291cmNlLmdldCgpLCAqdGhpcyk7CiAKICAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmxvYWQobXNlQmxvYlVSSSk7CiB9CiAKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
TVNFOjpwbGF5KCkKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJQbGF5IHJl
cXVlc3RlZCIpOworICAgIG1faXNQYXVzZWQgPSBmYWxzZTsKKyAgICB1cGRhdGVTdGF0ZXMoKTsK
K30KKwogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnBhdXNlKCkKIHsKLSAg
ICAvLyBGSVhNRTogU2hvdWxkIG5vdCBuZWVkIGRpcmVjdCBhY2Nlc3MgdG8gdGhpcyBtZW1iZXIu
IFRoaXMgb3ZlcnJpZGUgaXMgcHJvYmFibHkgbm90IG5lZWRlZC4KKyAgICBHU1RfREVCVUdfT0JK
RUNUKHBpcGVsaW5lKCksICJQYXVzZSByZXF1ZXN0ZWQiKTsKICAgICBtX2lzUGF1c2VkID0gdHJ1
ZTsKLSAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhdXNlKCk7CisgICAgdXBkYXRl
U3RhdGVzKCk7CiB9CiAKIE1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6
OmR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3QKQEAgLTE1OSwzMTMgKzE1OCwxMDIgQEAgTWVkaWFU
aW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZHVyYXRpb25NZWRpYVRpbWUoKSBj
b25zdAogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2Vlayhjb25zdCBN
ZWRpYVRpbWUmIHRpbWUpCiB7Ci0gICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8IG1fZGlk
RXJyb3JPY2N1cikpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdTVF9JTkZPX09CSkVDVChwaXBl
bGluZSgpLCAiW1NlZWtdIHNlZWsgYXR0ZW1wdCB0byAlcyBzZWNzIiwgdG9TdHJpbmcodGltZSku
dXRmOCgpLmRhdGEoKSk7Ci0KLSAgICAvLyBBdm9pZCB1c2VsZXNzIHNlZWtpbmcuCi0gICAgTWVk
aWFUaW1lIGN1cnJlbnQgPSBjdXJyZW50TWVkaWFUaW1lKCk7Ci0gICAgaWYgKHRpbWUgPT0gY3Vy
cmVudCkgewotICAgICAgICBpZiAoIW1faXNTZWVraW5nKQotICAgICAgICAgICAgdGltZUNoYW5n
ZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX2lzTGl2ZVN0cmVhbSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faXNTZWVraW5nICYmIG1faXNTZWVrUGVuZGlu
ZykgewotICAgICAgICBtX3NlZWtUaW1lID0gdGltZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlNlZWtpbmcgZnJvbSAlcyB0byAl
cyBzZWNvbmRzIiwgdG9TdHJpbmcoY3VycmVudCkudXRmOCgpLmRhdGEoKSwgdG9TdHJpbmcodGlt
ZSkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBNZWRpYVRpbWUgcHJldmlvdXNTZWVrVGltZSA9IG1f
c2Vla1RpbWU7Ci0gICAgbV9zZWVrVGltZSA9IHRpbWU7Ci0KLSAgICBpZiAoIWRvU2VlayhtX3Nl
ZWtUaW1lLCBtX3BsYXliYWNrUmF0ZSwgc3RhdGljX2Nhc3Q8R3N0U2Vla0ZsYWdzPihHU1RfU0VF
S19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19BQ0NVUkFURSkpKSB7Ci0gICAgICAgIG1fc2Vl
a1RpbWUgPSBwcmV2aW91c1NlZWtUaW1lOwotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QocGlw
ZWxpbmUoKSwgIlNlZWtpbmcgdG8gJXMgZmFpbGVkIiwgdG9TdHJpbmcodGltZSkudXRmOCgpLmRh
dGEoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2lzRW5kUmVhY2hlZCA9IGZh
bHNlOwotICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIm1faXNTZWVraW5nPSVzLCBt
X3NlZWtUaW1lPSVzIiwgYm9vbEZvclByaW50aW5nKG1faXNTZWVraW5nKSwgdG9TdHJpbmcobV9z
ZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFOjpjb25maWd1cmVQbGF5U2luaygpCi17Ci0gICAgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpjb25maWd1cmVQbGF5U2luaygpOwotCi0gICAgR1JlZlB0cjxHc3RFbGVtZW50
PiBwbGF5c2luayA9IGFkb3B0R1JlZihnc3RfYmluX2dldF9ieV9uYW1lKEdTVF9CSU4obV9waXBl
bGluZS5nZXQoKSksICJwbGF5c2luayIpKTsKLSAgICBpZiAocGxheXNpbmspIHsKLSAgICAgICAg
Ly8gVGhlIGRlZmF1bHQgdmFsdWUgKDApIG1lYW5zICJzZW5kIGV2ZW50cyB0byBhbGwgdGhlIHNp
bmtzIiwgaW5zdGVhZAotICAgICAgICAvLyBvZiAib25seSB0byB0aGUgZmlyc3QgdGhhdCByZXR1
cm5zIHRydWUiLiBUaGlzIGlzIG5lZWRlZCBmb3IgTVNFIHNlZWsuCi0gICAgICAgIGdfb2JqZWN0
X3NldChHX09CSkVDVChwbGF5c2luay5nZXQoKSksICJzZW5kLWV2ZW50LW1vZGUiLCAwLCBudWxs
cHRyKTsKLSAgICB9CisgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiUmVxdWVzdGVk
IHNlZWsgdG8gJXMiLCB0aW1lLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgZG9TZWVr
KHRpbWUsIG1fcGxheWJhY2tSYXRlLCBHU1RfU0VFS19GTEFHX0ZMVVNIKTsKIH0KIAotYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmNoYW5nZVBpcGVsaW5lU3RhdGUoR3N0U3Rh
dGUgbmV3U3RhdGUpCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZG9TZWVr
KGNvbnN0IE1lZGlhVGltZSYgcG9zaXRpb24sIGZsb2F0IHJhdGUsIEdzdFNlZWtGbGFncyBzZWVr
RmxhZ3MpCiB7Ci0gICAgaWYgKHNlZWtpbmcoKSkgewotICAgICAgICBHU1RfREVCVUcoIlJlamVj
dGVkIHN0YXRlIGNoYW5nZSB0byAlcyB3aGlsZSBzZWVraW5nIiwKLSAgICAgICAgICAgIGdzdF9l
bGVtZW50X3N0YXRlX2dldF9uYW1lKG5ld1N0YXRlKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KKyAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgb3V0c2lkZSBv
ZiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UgYnkgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpzZXRSYXRlKCkuCiAKLSAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpjaGFuZ2VQaXBlbGluZVN0YXRlKG5ld1N0YXRlKTsKLX0KLQotdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0U6Om5vdGlmeVNlZWtOZWVkc0RhdGFGb3JUaW1lKGNvbnN0IE1l
ZGlhVGltZSYgc2Vla1RpbWUpCi17Ci0gICAgLy8gUmVlbnF1ZXVlIHNhbXBsZXMgbmVlZGVkIHRv
IHJlc3VtZSBwbGF5YmFjayBpbiB0aGUgbmV3IHBvc2l0aW9uLgotICAgIG1fbWVkaWFTb3VyY2Ut
PnNlZWtUb1RpbWUoc2Vla1RpbWUpOworICAgIC8vIE5vdGU6IEFuIGltcG9ydGFudCBkaWZmZXJl
bmNlIGJldHdlZW4gc2VlayB3aXRoIFdlYktpdE1lZGlhU3JjIGFuZCByZWd1bGFyIHBsYXliYWNr
IGlzIHRoYXQgc2Vla2luZyBiZWZvcmUKKyAgICAvLyBwcmUtcm9sbCAoZS5nLiB0byBzdGFydCBw
bGF5YmFjayBhdCBhIG5vbi16ZXJvIHBvc2l0aW9uKSBpcyBzdXBwb3J0ZWQgaW4gV2ViS2l0TWVk
aWFTcmMgYnV0IG5vdCBpbiByZWd1bGFyCisgICAgLy8gcGxheWJhY2suIFRoaXMgaXMgcmVsZXZh
bnQgaW4gTVNFIGJlY2F1c2UgcHJlLXJvbGwgbWF5IG5ldmVyIG9jY3VyIGlmIHRoZSBKUyBjb2Rl
IG5ldmVyIGFwcGVuZHMgYSByYW5nZSBzdGFydGluZworICAgIC8vIGF0IHplcm8sIGNyZWF0aW5n
IGEgY2hpY2tlbiBhbmQgZWdnIHByb2JsZW0uCiAKLSAgICBHU1RfREVCVUcoIk1TRSBzZWVrIHRv
ICVzIGZpbmlzaGVkIiwgdG9TdHJpbmcoc2Vla1RpbWUpLnV0ZjgoKS5kYXRhKCkpOworICAgIC8v
IEdTdHJlYW1lciBkb2Vzbid0IHN1cHBvcnQgemVybyBhcyBhIHZhbGlkIHBsYXliYWNrIHJhdGUu
IEluc3RlYWQsIHRoYXQgaXMgaW1wbGVtZW50ZWQgaW4gV2ViS2l0IGJ5IHBhdXNpbmcKKyAgICAv
LyB0aGUgcGlwZWxpbmUuCisgICAgaWYgKHJhdGUgPD0gMCkKKyAgICAgICAgcmF0ZSA9IDEuMDsK
IAotICAgIGlmICghbV9nc3RTZWVrQ29tcGxldGVkKSB7Ci0gICAgICAgIG1fZ3N0U2Vla0NvbXBs
ZXRlZCA9IHRydWU7Ci0gICAgICAgIG1heWJlRmluaXNoU2VlaygpOwotICAgIH0KLX0KLQotc3Rh
dGljIGJvb2wgY2hlY2tTaG91bGREZWxheVNlZWsoR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ2V0U3Rh
dGVSZXN1bHQsIEdzdFN0YXRlIGN1cnJlbnRTdGF0ZSwgR3N0U3RhdGUgbmV3U3RhdGUpCi17Ci0g
ICAgaWYgKGdldFN0YXRlUmVzdWx0ICE9IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoR1NUX1NUQVRFX1RSQU5TSVRJT04oY3VycmVudFN0YXRl
LCBuZXdTdGF0ZSkgPT0gR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChjdXJyZW50U3RhdGUgPT0gR1NUX1NUQVRFX1JFQURZ
ICYmIG5ld1N0YXRlID49IEdTVF9TVEFURV9QQVVTRUQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJN
U0U6OmRvU2Vlayhjb25zdCBNZWRpYVRpbWUmIHBvc2l0aW9uLCBmbG9hdCByYXRlLCBHc3RTZWVr
RmxhZ3Mgc2Vla1R5cGUpCi17Ci0gICAgLy8gRklYTUU6IE1ha2UgYSBjb3B5IGhlcmUgYmVjYXVz
ZSBpbiBzb21lIGNhc2VzIGJlbG93IGl0IGlzIG1vZGlmaWVkLiBUaGlzCi0gICAgLy8gc291bmRz
IGxpa2UgYSBiYWQgaWRlYSBhbmQgc2hvdWxkIGJlIGludmVzdGlnYXRlZCBmdXJ0aGVyLgotICAg
IE1lZGlhVGltZSBzZWVrVGltZSA9IHBvc2l0aW9uOwotCi0gICAgLy8gQWx3YXlzIG1vdmUgdG8g
c2Vla2luZyBzdGF0ZSB0byByZXBvcnQgY29ycmVjdCAnY3VycmVudFRpbWUnIHdoaWxlIHBlbmRp
bmcgZm9yIGFjdHVhbCBzZWVrIHRvIGNvbXBsZXRlLgorICAgIG1fc2Vla1RpbWUgPSBwb3NpdGlv
bjsKICAgICBtX2lzU2Vla2luZyA9IHRydWU7CisgICAgbV9pc1dhaXRpbmdGb3JQcmVyb2xsID0g
dHJ1ZTsKKyAgICBtX2lzRW5kUmVhY2hlZCA9IGZhbHNlOwogCi0gICAgLy8gQ2hlY2sgaWYgcGxh
eWJhY2sgcGlwZWxpbmUgaXMgcmVhZHkgZm9yIHNlZWsuCi0gICAgR3N0U3RhdGUgc3RhdGUsIG5l
d1N0YXRlOwotICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdldFN0YXRlUmVzdWx0ID0gZ3N0X2Vs
ZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwgJm5ld1N0YXRlLCAwKTsK
LSAgICBpZiAoZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFIHx8IGdl
dFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCkgewotICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbU2Vla10gY2Fubm90IHNlZWssIGN1cnJlbnQg
c3RhdGUgY2hhbmdlIGlzICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRf
bmFtZShnZXRTdGF0ZVJlc3VsdCkpOwotICAgICAgICB3ZWJLaXRNZWRpYVNyY1NldFJlYWR5Rm9y
U2FtcGxlcyhXRUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdldCgpKSwgdHJ1ZSk7Ci0gICAgICAg
IG1faXNTZWVraW5nID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBib29sIHNob3VsZERlbGF5U2VlayA9IGNoZWNrU2hvdWxkRGVsYXlTZWVrKGdldFN0YXRlUmVz
dWx0LCBzdGF0ZSwgbmV3U3RhdGUpOwotICAgIGlmIChzaG91bGREZWxheVNlZWsgfHwgbV9pc0Vu
ZFJlYWNoZWQgfHwgIW1fZ3N0U2Vla0NvbXBsZXRlZCkgewotICAgICAgICBDU3RyaW5nIHJlYXNv
biA9ICJVbmtub3duIHJlYXNvbiI7Ci0gICAgICAgIGlmIChzaG91bGREZWxheVNlZWspIHsKLSAg
ICAgICAgICAgIHJlYXNvbiA9IG1ha2VTdHJpbmcoIkluIGFzeW5jIGNoYW5nZSAiLAotICAgICAg
ICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSwgIiAtLT4gIiwKLSAg
ICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShuZXdTdGF0ZSkpLnV0Zjgo
KTsKLSAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA8IEdTVF9TVEFURV9QQVVTRUQpCi0gICAgICAg
ICAgICByZWFzb24gPSAiU3RhdGUgbGVzcyB0aGFuIFBBVVNFRCI7Ci0gICAgICAgIGVsc2UgaWYg
KG1faXNFbmRSZWFjaGVkKQotICAgICAgICAgICAgcmVhc29uID0gIkVuZCByZWFjaGVkIjsKLSAg
ICAgICAgZWxzZSBpZiAoIW1fZ3N0U2Vla0NvbXBsZXRlZCkKLSAgICAgICAgICAgIHJlYXNvbiA9
ICJQcmV2aW91cyBzZWVrIGlzIG5vdCBmaW5pc2hlZCB5ZXQiOwotCi0gICAgICAgIEdTVF9ERUJV
R19PQkpFQ1QocGlwZWxpbmUoKSwgIltTZWVrXSBEZWxheWluZyB0aGUgc2VlazogJXMiLCByZWFz
b24uZGF0YSgpKTsKLQotICAgICAgICBtX2lzU2Vla1BlbmRpbmcgPSB0cnVlOwotCi0gICAgICAg
IGlmIChtX2lzRW5kUmVhY2hlZCkgewotICAgICAgICAgICAgR1NUX0RFQlVHKCJbU2Vla10gcmVz
ZXQgcGlwZWxpbmUiKTsKLSAgICAgICAgICAgIG1fc2hvdWxkUmVzZXRQaXBlbGluZSA9IHRydWU7
Ci0gICAgICAgICAgICBtX2lzU2Vla2luZyA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKCFjaGFu
Z2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QQVVTRUQpKQotICAgICAgICAgICAgICAgIGxvYWRp
bmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZTo6RW1wdHkpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIG1faXNTZWVraW5nID0gdHJ1ZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiBtX2lzU2Vla2luZzsKLSAgICB9Ci0KLSAgICAvLyBTdG9wIGFjY2VwdGlu
ZyBuZXcgc2FtcGxlcyB1bnRpbCBhY3R1YWwgc2VlayBpcyBmaW5pc2hlZC4KLSAgICB3ZWJLaXRN
ZWRpYVNyY1NldFJlYWR5Rm9yU2FtcGxlcyhXRUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdldCgp
KSwgZmFsc2UpOwotCi0gICAgLy8gQ29ycmVjdCBzZWVrIHRpbWUgaWYgaXQgaGVscHMgdG8gZml4
IGEgc21hbGwgZ2FwLgotICAgIGlmICghaXNUaW1lQnVmZmVyZWQoc2Vla1RpbWUpKSB7Ci0gICAg
ICAgIC8vIExvb2sgaWYgYSBuZWFyIGZ1dHVyZSB0aW1lICg8MC4xIHNlYy4pIGlzIGJ1ZmZlcmVk
IGFuZCBjaGFuZ2UgdGhlIHNlZWsgdGFyZ2V0IHRpbWUuCi0gICAgICAgIGlmIChtX21lZGlhU291
cmNlKSB7Ci0gICAgICAgICAgICBjb25zdCBNZWRpYVRpbWUgbWluaUdhcCA9IE1lZGlhVGltZSgx
LCAxMCk7Ci0gICAgICAgICAgICBNZWRpYVRpbWUgbmVhcmVzdCA9IG1fbWVkaWFTb3VyY2UtPmJ1
ZmZlcmVkKCktPm5lYXJlc3Qoc2Vla1RpbWUpOwotICAgICAgICAgICAgaWYgKG5lYXJlc3QuaXNW
YWxpZCgpICYmIG5lYXJlc3QgPiBzZWVrVGltZSAmJiAobmVhcmVzdCAtIHNlZWtUaW1lKSA8PSBt
aW5pR2FwICYmIGlzVGltZUJ1ZmZlcmVkKG5lYXJlc3QgKyBtaW5pR2FwKSkgewotICAgICAgICAg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltTZWVrXSBDaGFuZ2VkIHRoZSBz
ZWVrIHRhcmdldCB0aW1lIGZyb20gJXMgdG8gJXMsIGEgbmVhciBwb2ludCBpbiB0aGUgZnV0dXJl
IiwgdG9TdHJpbmcoc2Vla1RpbWUpLnV0ZjgoKS5kYXRhKCksIHRvU3RyaW5nKG5lYXJlc3QpLnV0
ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIHNlZWtUaW1lID0gbmVhcmVzdDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIE1TRSBoYXMgc2Ft
cGxlcyBmb3IgcmVxdWVzdGVkIHRpbWUgYW5kIGRlZmVyIGFjdHVhbCBzZWVrIGlmIG5lZWRlZC4K
LSAgICBpZiAoIWlzVGltZUJ1ZmZlcmVkKHNlZWtUaW1lKSkgewotICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKHBpcGVsaW5lKCksICJbU2Vla10gRGVsYXlpbmcgdGhlIHNlZWs6IE1TRSBpcyBub3Qg
cmVhZHkiKTsKLSAgICAgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc2V0U3RhdGVSZXN1bHQgPSBn
c3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1BBVVNFRCk7
Ci0gICAgICAgIGlmIChzZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUp
IHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltTZWVrXSBDYW5u
b3Qgc2VlaywgZmFpbGVkIHRvIHBhdXNlIHBsYXliYWNrIHBpcGVsaW5lLiIpOwotICAgICAgICAg
ICAgd2ViS2l0TWVkaWFTcmNTZXRSZWFkeUZvclNhbXBsZXMoV0VCS0lUX01FRElBX1NSQyhtX3Nv
dXJjZS5nZXQoKSksIHRydWUpOwotICAgICAgICAgICAgbV9pc1NlZWtpbmcgPSBmYWxzZTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBtX3JlYWR5U3RhdGUg
PSBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZTo6SGF2ZU1ldGFkYXRhOwotICAgICAgICBub3RpZnlT
ZWVrTmVlZHNEYXRhRm9yVGltZShzZWVrVGltZSk7Ci0gICAgICAgIEFTU0VSVCghbV9tc2VTZWVr
Q29tcGxldGVkKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gQ29tcGxl
dGUgcHJldmlvdXMgTVNFIHNlZWsgaWYgbmVlZGVkLgotICAgIGlmICghbV9tc2VTZWVrQ29tcGxl
dGVkKSB7Ci0gICAgICAgIG1fbWVkaWFTb3VyY2UtPm1vbml0b3JTb3VyY2VCdWZmZXJzKCk7Ci0g
ICAgICAgIEFTU0VSVChtX21zZVNlZWtDb21wbGV0ZWQpOwotICAgICAgICAvLyBOb3RlOiBzZWVr
Q29tcGxldGVkIHdpbGwgcmVjdXJzaXZlbHkgY2FsbCB1cy4KLSAgICAgICAgcmV0dXJuIG1faXNT
ZWVraW5nOwotICAgIH0KLQotICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIldlIGNh
biBzZWVrIG5vdyIpOwotCi0gICAgTWVkaWFUaW1lIHN0YXJ0VGltZSA9IHNlZWtUaW1lLCBlbmRU
aW1lID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwotCi0gICAgaWYgKHJhdGUgPCAwKSB7Ci0g
ICAgICAgIHN0YXJ0VGltZSA9IE1lZGlhVGltZTo6emVyb1RpbWUoKTsKLSAgICAgICAgZW5kVGlt
ZSA9IHNlZWtUaW1lOwotICAgIH0KKyAgICAvLyBJbXBvcnRhbnQ6IEluIG9yZGVyIHRvIGVuc3Vy
ZSBjb3JyZWN0IHByb3BhZ2F0aW9uIHdoZXRoZXIgcHJlLXJvbGwgaGFzIGhhcHBlbmVkIG9yIG5v
dCwgd2Ugc2VuZCB0aGUgc2VlayBkaXJlY3RseQorICAgIC8vIHRvIHRoZSBzb3VyY2UgZWxlbWVu
dCwgcmF0aGVyIHRoYW4gbGV0dGluZyBwbGF5YmluIGRvIHRoZSByb3V0aW5nLgorICAgIGdzdF9l
bGVtZW50X3NlZWsobV9zb3VyY2UuZ2V0KCksIHJhdGUsIEdTVF9GT1JNQVRfVElNRSwgc2Vla0Zs
YWdzLAorICAgICAgICBHU1RfU0VFS19UWVBFX1NFVCwgdG9Hc3RDbG9ja1RpbWUobV9zZWVrVGlt
ZSksIEdTVF9TRUVLX1RZUEVfTk9ORSwgMCk7CisgICAgaW52YWxpZGF0ZUNhY2hlZFBvc2l0aW9u
KCk7CiAKLSAgICBpZiAoIXJhdGUpCi0gICAgICAgIHJhdGUgPSAxOwotCi0gICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAiQWN0dWFsIHNlZWsgdG8gJXMsIGVuZCB0aW1lOiAgJXMsIHJh
dGU6ICVmIiwgdG9TdHJpbmcoc3RhcnRUaW1lKS51dGY4KCkuZGF0YSgpLCB0b1N0cmluZyhlbmRU
aW1lKS51dGY4KCkuZGF0YSgpLCByYXRlKTsKLQotICAgIG1fZ3N0U2Vla0NvbXBsZXRlZCA9IGZh
bHNlOwotICAgIGlmIChzdGF0ZSA8IEdTVF9TVEFURV9QQVVTRUQpIHsKLSAgICAgICAgLy8gU3Bl
Y2lhbCBjYXNlIG9mIGluaXRpYWwgc2Vlay4gV2Ugc2V0IHRoZSByaWdodCBzZWdtZW50IGluc3Rl
YWQgb2YgYSBzZWVrLgotICAgICAgICB3ZWJLaXRNZWRpYVNyY1ByZXBhcmVJbml0aWFsU2VlayhX
RUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdldCgpKSwgcmF0ZSwgc3RhcnRUaW1lLCBlbmRUaW1l
KTsKLSAgICAgICAgbm90aWZ5U2Vla05lZWRzRGF0YUZvclRpbWUoc2Vla1RpbWUpOwotICAgICAg
ICBHU1RfREVCVUcoIkluaXRpYWwgc2VlayBzdWNjZWVkZWQsIHJldHVybmluZyB0cnVlIik7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgLy8gVGhpcyB3aWxsIGNhbGwgbm90aWZ5U2Vla05lZWRzRGF0
YSgpIGFmdGVyIHNvbWUgdGltZSB0byB0ZWxsIHRoYXQgdGhlIHBpcGVsaW5lIGlzIHJlYWR5IGZv
ciBzYW1wbGUgZW5xdWV1aW5nLgotICAgICAgICB3ZWJLaXRNZWRpYVNyY1ByZXBhcmVTZWVrKFdF
QktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCBzZWVrVGltZSk7Ci0KLSAgICAgICAgaWYg
KCFnc3RfZWxlbWVudF9zZWVrKG1fcGlwZWxpbmUuZ2V0KCksIHJhdGUsIEdTVF9GT1JNQVRfVElN
RSwgc2Vla1R5cGUsIEdTVF9TRUVLX1RZUEVfU0VULCB0b0dzdENsb2NrVGltZShzdGFydFRpbWUp
LCBHU1RfU0VFS19UWVBFX1NFVCwgdG9Hc3RDbG9ja1RpbWUoZW5kVGltZSkpKSB7Ci0gICAgICAg
ICAgICB3ZWJLaXRNZWRpYVNyY1NldFJlYWR5Rm9yU2FtcGxlcyhXRUJLSVRfTUVESUFfU1JDKG1f
c291cmNlLmdldCgpKSwgdHJ1ZSk7Ci0gICAgICAgICAgICBtX2lzU2Vla2luZyA9IGZhbHNlOwot
ICAgICAgICAgICAgbV9nc3RTZWVrQ29tcGxldGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIEdTVF9E
RUJVRygiZ3N0X2VsZW1lbnRfc2VlaygpIGZhaWxlZCwgcmV0dXJuaW5nIGZhbHNlIik7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gVGhlIHNhbXBsZXMg
d2lsbCBiZSBlbnF1ZXVlZCBpbiBub3RpZnlTZWVrTmVlZHNEYXRhKCkuCi0gICAgICAgIEdTVF9E
RUJVRygiZ3N0X2VsZW1lbnRfc2VlaygpIHN1Y2NlZWRlZCwgcmV0dXJuaW5nIHRydWUiKTsKLSAg
ICB9CisgICAgLy8gTm90aWZ5IE1lZGlhU291cmNlIGFuZCBoYXZlIG5ldyBmcmFtZXMgZW5xdWV1
ZWQgKHdoZW4gdGhleSdyZSBhdmFpbGFibGUpLgorICAgIG1fbWVkaWFTb3VyY2UtPnNlZWtUb1Rp
bWUobV9zZWVrVGltZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjptYXliZUZpbmlzaFNlZWsoKQordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJNU0U6OnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUg
bWVkaWFTb3VyY2VSZWFkeVN0YXRlKQogewotICAgIGlmICghbV9pc1NlZWtpbmcgfHwgIW1fbXNl
U2Vla0NvbXBsZXRlZCB8fCAhbV9nc3RTZWVrQ29tcGxldGVkKQorICAgIC8vIFNvbWV0aGluZyBp
bXBvcnRhbnQgdG8gYmVhciBpbiBtaW5kIGlzIHRoYXQgdGhlIHJlYWR5U3RhdGUgd2UgZ2V0IGhl
cmUgY29tZXMgZnJvbSBNZWRpYVNvdXJjZS4KKyAgICAvLyBGcm9tIE1lZGlhU291cmNlIHBlcnNw
ZWN0aXZlLCBhcyBsb25nIGFzIHRoZSBzYW1wbGUgZm9yIGN1cnJlbnRUaW1lIGV4aXN0cyBpbiB0
aGUgc2FtcGxlIG1hcCwgd2UgYXJlID49IEhhdmVDdXJyZW50RGF0YS4KKyAgICAvLyBUaGlzIGlz
IE5PVCB0cnVlIGZyb20gdGhlIHBsYXllciBwZXJzcGVjdGl2ZSB0aG91Z2gsIGJlY2F1c2UgdGhl
cmUgbmVlZHMgdG8gcGFzcyBzb21lIHRpbWUgc2luY2Ugd2UgaGF2ZSB0aGUgZmlyc3QgZnJhbWUK
KyAgICAvLyAoPj1IYXZlQ3VycmVudERhdGEgZm9yIE1lZGlhU291cmNlKSBhbmQgd2UgaGF2ZSBk
ZWNvZGVkIGl0IGFuZCBzZW50IGl0IHRvIHRoZSBzaW5rL2NvbXBvc2l0b3IgKD49SGF2ZUN1cnJl
bnREYXRhIGluIEhUTUxNZWRpYUVsZW1lbnQpLgorICAgIC8vIFRoZSB3YXkgd2UgaW1wbGVtZW50
IHRoaXMgaXMgYnkga2VlcGluZyB0cmFjayBvZiB0aGUgTWVkaWFTb3VyY2UgcmVhZHlTdGF0ZSBp
bnRlcm5hbGx5IGluIG1fbWVkaWFTb3VyY2VSZWFkeVN0YXRlIGJ1dCBub3QKKyAgICAvLyBzcHJl
YWRpbmcgc3RhdGVzID49IEhhdmVDdXJyZW50RGF0YSB0byB0aGUgcGxheWVyIHVudGlsIHByZXJv
bGxlZC4KKyAgICBpZiAobWVkaWFTb3VyY2VSZWFkeVN0YXRlID09IG1fbWVkaWFTb3VyY2VSZWFk
eVN0YXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBHc3RTdGF0ZSBzdGF0ZSwgbmV3U3RhdGU7
Ci0gICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ2V0U3RhdGVSZXN1bHQgPSBnc3RfZWxlbWVudF9n
ZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCAmbmV3U3RhdGUsIDApOwotCi0gICAg
aWYgKGdldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMKLSAgICAgICAgJiYg
IShzdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORyAmJiBuZXdTdGF0ZSA9PSBHU1RfU1RBVEVfUEFV
U0VEKSkgewotICAgICAgICBHU1RfREVCVUcoIltTZWVrXSBEZWxheWluZyBzZWVrIGZpbmlzaCIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEdTVF9ERUJVRygiTWVkaWFTb3VyY2UgY2Fs
bGVkIHNldFJlYWR5U3RhdGUoJXApOiAlcyAtPiAlcyBDdXJyZW50IHBsYXllciBzdGF0ZTogJXMg
V2FpdGluZyBmb3IgcHJlcm9sbDogJXMiLCB0aGlzLCBkdW1wUmVhZHlTdGF0ZShtX21lZGlhU291
cmNlUmVhZHlTdGF0ZSksIGR1bXBSZWFkeVN0YXRlKG1lZGlhU291cmNlUmVhZHlTdGF0ZSksIGR1
bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSksIGJvb2xGb3JQcmludGluZyhtX2lzV2FpdGluZ0Zv
clByZXJvbGwpKTsKKyAgICBtX21lZGlhU291cmNlUmVhZHlTdGF0ZSA9IG1lZGlhU291cmNlUmVh
ZHlTdGF0ZTsKIAotICAgIGlmIChtX2lzU2Vla1BlbmRpbmcpIHsKLSAgICAgICAgR1NUX0RFQlVH
KCJbU2Vla10gQ29tbWl0dGluZyBwZW5kaW5nIHNlZWsgdG8gJXMiLCB0b1N0cmluZyhtX3NlZWtU
aW1lKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgbV9pc1NlZWtQZW5kaW5nID0gZmFsc2U7Ci0g
ICAgICAgIGlmICghZG9TZWVrKG1fc2Vla1RpbWUsIG1fcGxheWJhY2tSYXRlLCBzdGF0aWNfY2Fz
dDxHc3RTZWVrRmxhZ3M+KEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX0FDQ1VS
QVRFKSkpIHsKLSAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJbU2Vla10gU2Vla2luZyB0byAlcyBm
YWlsZWQiLCB0b1N0cmluZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAg
IG1fY2FjaGVkUG9zaXRpb24gPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdTVF9ERUJVRygiW1NlZWtdIFNlZWtlZCB0
byAlcyIsIHRvU3RyaW5nKG1fc2Vla1RpbWUpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgd2ViS2l0
TWVkaWFTcmNTZXRSZWFkeUZvclNhbXBsZXMoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQo
KSksIHRydWUpOwotICAgIG1faXNTZWVraW5nID0gZmFsc2U7Ci0gICAgbV9jYWNoZWRQb3NpdGlv
biA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKLSAgICAvLyBUaGUgcGlwZWxpbmUgY2FuIHN0
aWxsIGhhdmUgYSBwZW5kaW5nIHN0YXRlLiBJbiB0aGlzIGNhc2UgYSBwb3NpdGlvbiBxdWVyeSB3
aWxsIGZhaWwuCi0gICAgLy8gUmlnaHQgbm93IHdlIGNhbiB1c2UgbV9zZWVrVGltZSBhcyBhIGZh
bGxiYWNrLgotICAgIG1fY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3NpdGlvbiA9IHRy
dWU7Ci0gICAgdGltZUNoYW5nZWQoKTsKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0U6OnNlZWtpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtX2lzU2Vla2luZzsKKyAg
ICBpZiAobWVkaWFTb3VyY2VSZWFkeVN0YXRlIDwgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGU6Okhh
dmVDdXJyZW50RGF0YSB8fCAhbV9pc1dhaXRpbmdGb3JQcmVyb2xsKQorICAgICAgICBwcm9wYWdh
dGVSZWFkeVN0YXRlVG9QbGF5ZXIoKTsKIH0KIAotLy8gRklYTUU6IE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lciBtYW5hZ2VzIHRoZSBSZWFkeVN0YXRlIG9uIGl0cyBvd24uIFdlIHNob3VsZG4n
dCBjaGFuZ2UgaXQgbWFudWFsbHkuCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RTo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKQordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnByb3BhZ2F0ZVJlYWR5U3RhdGVUb1Bs
YXllcigpCiB7Ci0gICAgaWYgKHJlYWR5U3RhdGUgPT0gbV9yZWFkeVN0YXRlKQorICAgIEFTU0VS
VChtX21lZGlhU291cmNlUmVhZHlTdGF0ZSA8IE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlOjpIYXZl
Q3VycmVudERhdGEgfHwgIW1faXNXYWl0aW5nRm9yUHJlcm9sbCk7CisgICAgaWYgKG1fcmVhZHlT
dGF0ZSA9PSBtX21lZGlhU291cmNlUmVhZHlTdGF0ZSkKICAgICAgICAgcmV0dXJuOworICAgIEdT
VF9ERUJVRygiUHJvcGFnYXRpbmcgTWVkaWFTb3VyY2UgcmVhZHlTdGF0ZSAlcyB0byBwbGF5ZXIg
cmVhZHkgc3RhdGUgKGN1cnJlbnRseSAlcykiLCBkdW1wUmVhZHlTdGF0ZShtX21lZGlhU291cmNl
UmVhZHlTdGF0ZSksIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkpOwogCi0gICAgaWYgKHNl
ZWtpbmcoKSkgewotICAgICAgICBHU1RfREVCVUcoIlNraXAgcmVhZHkgc3RhdGUgY2hhbmdlKCVz
IC0+ICVzKSBkdWUgdG8gc2Vla1xuIiwgZHVtcFJlYWR5U3RhdGUobV9yZWFkeVN0YXRlKSwgZHVt
cFJlYWR5U3RhdGUocmVhZHlTdGF0ZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
R1NUX0RFQlVHKCJSZWFkeSBTdGF0ZSBDaGFuZ2VkIG1hbnVhbGx5IGZyb20gJXUgdG8gJXUiLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obV9yZWFkeVN0YXRlKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHJlYWR5U3RhdGUpKTsKLSAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBvbGRSZWFkeVN0YXRl
ID0gbV9yZWFkeVN0YXRlOwotICAgIG1fcmVhZHlTdGF0ZSA9IHJlYWR5U3RhdGU7Ci0gICAgR1NU
X0RFQlVHKCJtX3JlYWR5U3RhdGU6ICVzIC0+ICVzIiwgZHVtcFJlYWR5U3RhdGUob2xkUmVhZHlT
dGF0ZSksIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkpOwotCi0gICAgaWYgKG9sZFJlYWR5
U3RhdGUgPCBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZTo6SGF2ZUN1cnJlbnREYXRhICYmIG1fcmVh
ZHlTdGF0ZSA+PSBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZTo6SGF2ZUN1cnJlbnREYXRhKSB7Ci0g
ICAgICAgIEdTVF9ERUJVRygiW1NlZWtdIFJlcG9ydGluZyBsb2FkIHN0YXRlIGNoYW5nZWQgdG8g
dHJpZ2dlciBzZWVrIGNvbnRpbnVhdGlvbiIpOwotICAgICAgICBsb2FkU3RhdGVDaGFuZ2VkKCk7
Ci0gICAgfQorICAgIG1fcmVhZHlTdGF0ZSA9IG1fbWVkaWFTb3VyY2VSZWFkeVN0YXRlOworICAg
IHVwZGF0ZVN0YXRlcygpOyAvLyBTZXQgdGhlIHBpcGVsaW5lIHRvIFBMQVlJTkcgb3IgUEFVU0VE
IGlmIG5lY2Vzc2FyeS4KICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKIAotICAg
IEdzdFN0YXRlIHBpcGVsaW5lU3RhdGU7Ci0gICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ2V0U3Rh
dGVSZXN1bHQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnBpcGVs
aW5lU3RhdGUsIG51bGxwdHIsIDI1MCAqIEdTVF9OU0VDT05EKTsKLSAgICBib29sIGlzUGxheWlu
ZyA9IChnZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MgJiYgcGlwZWxp
bmVTdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgICBpZiAobV9yZWFkeVN0YXRlID09
IE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlOjpIYXZlTWV0YWRhdGEgJiYgb2xkUmVhZHlTdGF0ZSA+
IE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlOjpIYXZlTWV0YWRhdGEgJiYgaXNQbGF5aW5nKSB7Ci0g
ICAgICAgIEdTVF9UUkFDRSgiQ2hhbmdpbmcgcGlwZWxpbmUgdG8gUEFVU0VELi4uIik7Ci0gICAg
ICAgIGJvb2wgb2sgPSBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QQVVTRUQpOwotICAg
ICAgICBHU1RfVFJBQ0UoIkNoYW5nZWQgcGlwZWxpbmUgdG8gUEFVU0VEOiAlcyIsIG9rID8gIlN1
Y2Nlc3MiIDogIkVycm9yIik7Ci0gICAgfQorICAgIC8vIFRoZSByZWFkeVN0YXRlIGNoYW5nZSBt
YXkgYmUgYSByZXN1bHQgb2YgbW9uaXRvclNvdXJjZUJ1ZmZlcnMoKSBmaW5kaW5nIHRoYXQgY3Vy
cmVudFRpbWUgPT0gZHVyYXRpb24sIHdoaWNoCisgICAgLy8gc2hvdWxkIGNhdXNlIHRoZSB2aWRl
byB0byBiZSBtYXJrZWQgYXMgZW5kZWQuIExldCdzIGhhdmUgdGhlIHBsYXllciBjaGVjayB0aGF0
LgorICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck1TRTo6d2FpdEZvclNlZWtDb21wbGV0ZWQoKQotewotICAgIGlmICghbV9p
c1NlZWtpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdTVF9ERUJVRygiV2FpdGluZyBmb3Ig
TVNFIHNlZWsgY29tcGxldGVkIik7Ci0gICAgbV9tc2VTZWVrQ29tcGxldGVkID0gZmFsc2U7Ci19
Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVrQ29tcGxldGVkKCkK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjphc3luY1N0YXRlQ2hhbmdlRG9u
ZSgpCiB7Ci0gICAgaWYgKG1fbXNlU2Vla0NvbXBsZXRlZCkKKyAgICBBU1NFUlQoR1NUX1NUQVRF
KG1fcGlwZWxpbmUuZ2V0KCkpID49IEdTVF9TVEFURV9QQVVTRUQpOworICAgIC8vIFRoZXJlIGFy
ZSB0aHJlZSBjaXJjdW1zdGFuY2VzIGluIHdoaWNoIGEgcHJlcm9sbCBjYW4gb2NjdXI6CisgICAg
Ly8gYSkgQXQgdGhlIGJlZ2luaW5nIG9mIHBsYXliYWNrLiBUaGlzIGlzIHRoZSBwb2ludCB3aGVy
ZSB3ZSBwcm9wYWdhdGUgPj1IYXZlQ3VycmVudERhdGEgdG8gdGhlIHBsYXllci4KKyAgICAvLyBi
KSBBdCB0aGUgZW5kIG9mIGEgc2Vlay4gV2UgZW1pdCB0aGUgInNlZWtlZCIgZXZlbnQgYXMgd2Vs
bC4KKyAgICAvLyBjKSBBdCB0aGUgZW5kIG9mIGEgZmx1c2ggKGZvcmNlZCBxdWFsaXR5IGNoYW5n
ZSkuIFRoZXNlIHNob3VsZCBub3QgcHJvZHVjZSBlaXRoZXIgb2YgdGhlc2Ugb3V0Y29tZXMuCisg
ICAgLy8gV2UgaWRlbnRpZnkgKGEpIGFuZCAoYikgYnkgc2V0dGluZyBtX2lzV2FpdGluZ0ZvclBy
ZXJvbGwgPSB0cnVlIGF0IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGxheWVyIGFuZAorICAg
IC8vIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBzZWVrLgorICAgIEdTVF9ERUJVRygiUGlwZWxpbmUg
cHJlcm9sbGVkLiBjdXJyZW50TWVkaWFUaW1lID0gJXMiLCBjdXJyZW50TWVkaWFUaW1lKCkudG9T
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAoIW1faXNXYWl0aW5nRm9yUHJlcm9sbCkg
eworICAgICAgICBHU1RfREVCVUcoIlByZXJvbGwgd2FzIGNvbnNlcXVlbmNlIG9mIGEgZmx1c2gs
IG5vdGhpbmcgdG8gZG8gYXQgdGhpcyBsZXZlbC4iKTsKICAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBtX2lzV2FpdGluZ0ZvclByZXJvbGwgPSBmYWxzZTsKIAotICAgIEdTVF9ERUJVRygiTVNF
IHNlZWsgY29tcGxldGVkIik7Ci0gICAgbV9tc2VTZWVrQ29tcGxldGVkID0gdHJ1ZTsKLQotICAg
IGRvU2VlayhtX3NlZWtUaW1lLCBtX3BsYXliYWNrUmF0ZSwgc3RhdGljX2Nhc3Q8R3N0U2Vla0Zs
YWdzPihHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19BQ0NVUkFURSkpOwotCi0g
ICAgaWYgKCFzZWVraW5nKCkgJiYgbV9yZWFkeVN0YXRlID49IE1lZGlhUGxheWVyOjpSZWFkeVN0
YXRlOjpIYXZlRnV0dXJlRGF0YSkKLSAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RB
VEVfUExBWUlORyk7CisgICAgLy8gVGhlIG9yZGVyIG9mIHRoZXNlIHNlY3Rpb25zIGlzIGltcG9y
dGFudC4gSW4gdGhlIGNhc2Ugb2YgYSBzZWVrLCB0aGUgInNlZWtlZCIgZXZlbnQgbXVzdCBiZSBl
bWl0dGVkCisgICAgLy8gYmVmb3JlIHRoZSAicGxheWluZyIgZXZlbnQgKHdoaWNoIGlzIGVtaXR0
ZWQgb24gSEFWRV9FTk9VR0hfREFUQSkuIFRoZXJlZm9yZSwgd2UgdGFrZSBjYXJlIG9mIHRoZW0g
aW4KKyAgICAvLyB0aGF0IG9yZGVyLgogCi0gICAgaWYgKCFzZWVraW5nKCkpCisgICAgaWYgKG1f
aXNTZWVraW5nKSB7CisgICAgICAgIG1faXNTZWVraW5nID0gZmFsc2U7CisgICAgICAgIEdTVF9E
RUJVRygiU2VlayBjb21wbGV0ZSBiZWNhdXNlIG9mIHByZXJvbGwuIGN1cnJlbnRNZWRpYVRpbWUg
PSAlcyIsIGN1cnJlbnRNZWRpYVRpbWUoKS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICAvLyBCeSBjYWxsaW5nIHRpbWVDaGFuZ2VkKCksIG1faXNTZWVraW5nIHdpbGwgYmUgY2hl
Y2tlZCBhbiBhICJzZWVrZWQiIGV2ZW50IHdpbGwgYmUgZW1pdHRlZC4KICAgICAgICAgbV9wbGF5
ZXItPnRpbWVDaGFuZ2VkKCk7CisgICAgfQorCisgICAgcHJvcGFnYXRlUmVhZHlTdGF0ZVRvUGxh
eWVyKCk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6YnVmZmVyZWQoKSBjb25zdApAQCAtNDc3LDE5OSArMjY1
LDI2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzb3VyY2VTZXR1cChH
c3RFbGVtZW50KiBzb3VyY2VFbGVtZW50KQogewogICAgIEFTU0VSVChXRUJLSVRfSVNfTUVESUFf
U1JDKHNvdXJjZUVsZW1lbnQpKTsKICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJT
b3VyY2UgJXAgc2V0dXAgKG9sZCB3YXM6ICVwKSIsIHNvdXJjZUVsZW1lbnQsIG1fc291cmNlLmdl
dCgpKTsKLQotICAgIGJvb2wgc2hvdWxkUmVzdG9yZVRyYWNrcyA9IG1fc291cmNlOwotICAgIGlm
IChzaG91bGRSZXN0b3JlVHJhY2tzKQotICAgICAgICB3ZWJLaXRNZWRpYVNyY1Jlc3RvcmVUcmFj
a3MoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSksIFdFQktJVF9NRURJQV9TUkMoc291
cmNlRWxlbWVudCkpOwogICAgIG1fc291cmNlID0gc291cmNlRWxlbWVudDsKLSAgICBtX2Vvc01h
cmtlZCA9IGZhbHNlOwotCi0gICAgbV9wbGF5YmFja1BpcGVsaW5lLT5zZXRXZWJLaXRNZWRpYVNy
YyhXRUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdldCgpKSk7Ci0gICAgZ19zaWduYWxfY29ubmVj
dF9zd2FwcGVkKG1fc291cmNlLmdldCgpLCAidmlkZW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodmlk
ZW9DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQo
bV9zb3VyY2UuZ2V0KCksICJhdWRpby1jaGFuZ2VkIiwgR19DQUxMQkFDSyhhdWRpb0NoYW5nZWRD
YWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3NvdXJjZS5n
ZXQoKSwgInRleHQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodGV4dENoYW5nZWRDYWxsYmFjayksIHRo
aXMpOwotICAgIHdlYktpdE1lZGlhU3JjU2V0TWVkaWFQbGF5ZXJQcml2YXRlKFdFQktJVF9NRURJ
QV9TUkMobV9zb3VyY2UuZ2V0KCkpLCB0aGlzKTsKLQotICAgIGlmIChzaG91bGRSZXN0b3JlVHJh
Y2tzKSB7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3BsYXllciA9IG1ha2VXZWFrUHRyKCp0
aGlzKV0gewotICAgICAgICAgICAgaWYgKCFwbGF5ZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgd2ViS2l0TWVkaWFTcmNTaWduYWxUcmFja3MoV0VCS0lUX01FRElBX1NS
QyhwbGF5ZXItPm1fc291cmNlLmdldCgpKSk7Ci0gICAgICAgICAgICBwbGF5ZXItPm1fbWVkaWFT
b3VyY2UtPm1vbml0b3JTb3VyY2VCdWZmZXJzKCk7Ci0KLSAgICAgICAgICAgIGF1dG8gc2Vla1Rp
bWUgPSBNZWRpYVRpbWU6Onplcm9UaW1lKCk7Ci0gICAgICAgICAgICB3ZWJLaXRNZWRpYVNyY1By
ZXBhcmVJbml0aWFsU2VlayhXRUJLSVRfTUVESUFfU1JDKHBsYXllci0+bV9zb3VyY2UuZ2V0KCkp
LCBwbGF5ZXItPm1fcGxheWJhY2tSYXRlLCBzZWVrVGltZSwgTWVkaWFUaW1lOjppbnZhbGlkVGlt
ZSgpKTsKLSAgICAgICAgICAgIHBsYXllci0+bm90aWZ5U2Vla05lZWRzRGF0YUZvclRpbWUoc2Vl
a1RpbWUpOwotICAgICAgICB9KTsKLSAgICB9CisKKyAgICBpZiAobV9oYXNBbGxUcmFja3MpCisg
ICAgICAgIHdlYktpdE1lZGlhU3JjRW1pdFN0cmVhbXMoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJj
ZS5nZXQoKSksIG1fdHJhY2tzKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJNU0U6OnVwZGF0ZVN0YXRlcygpCiB7Ci0gICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8
IG1fZGlkRXJyb3JPY2N1cikpCi0gICAgICAgIHJldHVybjsKLQotICAgIE1lZGlhUGxheWVyOjpO
ZXR3b3JrU3RhdGUgb2xkTmV0d29ya1N0YXRlID0gbV9uZXR3b3JrU3RhdGU7Ci0gICAgTWVkaWFQ
bGF5ZXI6OlJlYWR5U3RhdGUgb2xkUmVhZHlTdGF0ZSA9IG1fcmVhZHlTdGF0ZTsKLSAgICBHc3RT
dGF0ZSBzdGF0ZSwgcGVuZGluZzsKLSAgICBib29sIHN0YXRlUmVhbGx5Q2hhbmdlZCA9IGZhbHNl
OwotCi0gICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ2V0U3RhdGVSZXN1bHQgPSBnc3RfZWxlbWVu
dF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCAmcGVuZGluZywgMjUwICogR1NU
X05TRUNPTkQpOwotICAgIGlmIChzdGF0ZSAhPSBtX2N1cnJlbnRTdGF0ZSkgewotICAgICAgICBt
X29sZFN0YXRlID0gbV9jdXJyZW50U3RhdGU7Ci0gICAgICAgIG1fY3VycmVudFN0YXRlID0gc3Rh
dGU7Ci0gICAgICAgIHN0YXRlUmVhbGx5Q2hhbmdlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgYm9v
bCBzaG91bGRVcGRhdGVQbGF5YmFja1N0YXRlID0gZmFsc2U7Ci0gICAgc3dpdGNoIChnZXRTdGF0
ZVJlc3VsdCkgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOiB7Ci0gICAgICAg
IEdTVF9ERUJVRygiU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2dl
dF9uYW1lKHN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykpOwotCi0g
ICAgICAgIC8vIERvIG5vdGhpbmcgaWYgb24gRU9TIGFuZCBzdGF0ZSBjaGFuZ2VkIHRvIFJFQURZ
IHRvIGF2b2lkIHJlY3JlYXRpbmcgdGhlIHBsYXllcgotICAgICAgICAvLyBvbiBIVE1MTWVkaWFF
bGVtZW50IGFuZCBwcm9wZXJseSBnZW5lcmF0ZSB0aGUgdmlkZW8gJ2VuZGVkJyBldmVudC4KLSAg
ICAgICAgaWYgKG1faXNFbmRSZWFjaGVkICYmIHN0YXRlID09IEdTVF9TVEFURV9SRUFEWSkKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIG1fc2hvdWxkUmVzZXRQaXBlbGluZSA9IChzdGF0
ZSA8PSBHU1RfU1RBVEVfUkVBRFkpOwotICAgICAgICBpZiAobV9zaG91bGRSZXNldFBpcGVsaW5l
KQotICAgICAgICAgICAgbV9tZWRpYVRpbWVEdXJhdGlvbiA9IE1lZGlhVGltZTo6emVyb1RpbWUo
KTsKLQotICAgICAgICAvLyBVcGRhdGUgcmVhZHkgYW5kIG5ldHdvcmsgc3RhdGVzLgotICAgICAg
ICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgICAgIGNhc2UgR1NUX1NUQVRFX05VTEw6Ci0gICAgICAg
ICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZTo6SGF2ZU5vdGhpbmc7
Ci0gICAgICAgICAgICBHU1RfREVCVUcoIm1fcmVhZHlTdGF0ZT0lcyIsIGR1bXBSZWFkeVN0YXRl
KG1fcmVhZHlTdGF0ZSkpOwotICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXll
cjo6TmV0d29ya1N0YXRlOjpFbXB0eTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEdTVF9TVEFURV9SRUFEWToKLSAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVy
OjpSZWFkeVN0YXRlOjpIYXZlTWV0YWRhdGE7Ci0gICAgICAgICAgICBHU1RfREVCVUcoIm1fcmVh
ZHlTdGF0ZT0lcyIsIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkpOwotICAgICAgICAgICAg
bV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlOjpFbXB0eTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9TVEFURV9QQVVTRUQ6Ci0gICAgICAgIGNh
c2UgR1NUX1NUQVRFX1BMQVlJTkc6Ci0gICAgICAgICAgICBpZiAoc2Vla2luZygpKSB7Ci0gICAg
ICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGU6OkhhdmVN
ZXRhZGF0YTsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIG1hbmFnZSBOZXR3
b3JrU3RhdGUgdG9vPwotICAgICAgICAgICAgICAgIEdTVF9ERUJVRygibV9yZWFkeVN0YXRlPSVz
IiwgZHVtcFJlYWR5U3RhdGUobV9yZWFkeVN0YXRlKSk7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIGlmIChtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6UmVhZHlTdGF0
ZTo6SGF2ZUZ1dHVyZURhdGEpCi0gICAgICAgICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpSZWFkeVN0YXRlOjpIYXZlRnV0dXJlRGF0YTsKLSAgICAgICAgICAgICAgICBH
U1RfREVCVUcoIm1fcmVhZHlTdGF0ZT0lcyIsIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkp
OwotICAgICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6Ok5ldHdvcmtT
dGF0ZTo6TG9hZGluZzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1fZW9zTWFy
a2VkICYmIHN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKQotICAgICAgICAgICAgICAgIG1fZW9z
UGVuZGluZyA9IHRydWU7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIFN5bmMgc3RhdGVzIHdoZXJlIG5lZWRlZC4KLSAgICAgICAg
aWYgKHN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQpIHsKLSAgICAgICAgICAgIGlmICghbV9hcmVW
b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgICAgICAgICBub3RpZnlQbGF5ZXJP
ZlZvbHVtZUNoYW5nZSgpOwotICAgICAgICAgICAgICAgIG5vdGlmeVBsYXllck9mTXV0ZSgpOwot
ICAgICAgICAgICAgICAgIG1fYXJlVm9sdW1lQW5kTXV0ZUluaXRpYWxpemVkID0gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFzZWVraW5nKCkgJiYgIW1faXNQYXVzZWQg
JiYgbV9wbGF5YmFja1JhdGUpIHsKLSAgICAgICAgICAgICAgICBHU1RfREVCVUcoIltCdWZmZXJp
bmddIFJlc3RhcnRpbmcgcGxheWJhY2suIik7Ci0gICAgICAgICAgICAgICAgY2hhbmdlUGlwZWxp
bmVTdGF0ZShHU1RfU1RBVEVfUExBWUlORyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpIHsKLSAgICAgICAgICAgIG1faXNQYXVz
ZWQgPSBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKCFtX3BsYXliYWNrUmF0ZSkgewotICAgICAg
ICAgICAgICAgIEdTVF9ERUJVRygiW0J1ZmZlcmluZ10gUGF1c2luZyBzdHJlYW0gZm9yIGJ1ZmZl
cmluZy4iKTsKLSAgICAgICAgICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9Q
QVVTRUQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1faXNQ
YXVzZWQgPSB0cnVlOwotCi0gICAgICAgIGlmIChtX3JlcXVlc3RlZFN0YXRlID09IEdTVF9TVEFU
RV9QQVVTRUQgJiYgc3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkgewotICAgICAgICAgICAgc2hv
dWxkVXBkYXRlUGxheWJhY2tTdGF0ZSA9IHRydWU7Ci0gICAgICAgICAgICBHU1RfREVCVUcoIlJl
cXVlc3RlZCBzdGF0ZSBjaGFuZ2UgdG8gJXMgd2FzIGNvbXBsZXRlZCIsIGdzdF9lbGVtZW50X3N0
YXRlX2dldF9uYW1lKHN0YXRlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBFbWl0IHBsYXkg
c3RhdGUgY2hhbmdlIG5vdGlmaWNhdGlvbiBvbmx5IHdoZW4gZ29pbmcgdG8gUExBWUlORyBzbyB0
aGF0Ci0gICAgICAgIC8vIHRoZSBtZWRpYSBlbGVtZW50IGdldHMgYSBjaGFuY2UgdG8gZW5hYmxl
IGl0cyBwYWdlIHNsZWVwIGRpc2FibGVyLgotICAgICAgICAvLyBFbWl0dGluZyB0aGlzIG5vdGlm
aWNhdGlvbiBpbiBtb3JlIGNhc2VzIHRyaWdnZXJzIHVud2FudGVkIGNvZGUgcGF0aHMKLSAgICAg
ICAgLy8gYW5kIHRlc3QgdGltZW91dHMuCi0gICAgICAgIGlmIChzdGF0ZVJlYWxseUNoYW5nZWQg
JiYgKG1fb2xkU3RhdGUgIT0gbV9jdXJyZW50U3RhdGUpICYmIChtX29sZFN0YXRlID09IEdTVF9T
VEFURV9QQVVTRUQgJiYgbV9jdXJyZW50U3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpKSB7Ci0g
ICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIlBsYXliYWNrIHN0YXRlIGNo
YW5nZWQgZnJvbSAlcyB0byAlcy4gTm90aWZ5aW5nIHRoZSBtZWRpYSBwbGF5ZXIgY2xpZW50Iiwg
Z3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9vbGRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRl
X2dldF9uYW1lKG1fY3VycmVudFN0YXRlKSk7Ci0gICAgICAgICAgICBzaG91bGRVcGRhdGVQbGF5
YmFja1N0YXRlID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfQVNZTkM6Ci0gICAgICAgIEdTVF9ERUJVRygiQXN5bmM6
IFN0YXRlOiAlcywgcGVuZGluZzogJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShzdGF0
ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcpKTsKLSAgICAgICAgLy8gQ2hh
bmdlIGluIHByb2dyZXNzLgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFO
R0VfRkFJTFVSRToKLSAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWx1cmU6IFN0YXRlOiAlcywgcGVu
ZGluZzogJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShzdGF0ZSksIGdzdF9lbGVtZW50
X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcpKTsKLSAgICAgICAgLy8gQ2hhbmdlIGZhaWxlZC4KLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMOgotICAg
ICAgICBHU1RfREVCVUcoIk5vIHByZXJvbGw6IFN0YXRlOiAlcywgcGVuZGluZzogJXMiLCBnc3Rf
ZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShzdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1l
KHBlbmRpbmcpKTsKLQotICAgICAgICAvLyBMaXZlIHBpcGVsaW5lcyBnbyBpbiBQQVVTRUQgd2l0
aG91dCBwcmVyb2xsaW5nLgotICAgICAgICBtX2lzTGl2ZVN0cmVhbSA9IHRydWU7Ci0KLSAgICAg
ICAgaWYgKHN0YXRlID09IEdTVF9TVEFURV9SRUFEWSkgewotICAgICAgICAgICAgbV9yZWFkeVN0
YXRlID0gTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGU6OkhhdmVOb3RoaW5nOwotICAgICAgICAgICAg
R1NUX0RFQlVHKCJtX3JlYWR5U3RhdGU9JXMiLCBkdW1wUmVhZHlTdGF0ZShtX3JlYWR5U3RhdGUp
KTsKLSAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7Ci0gICAg
ICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZTo6SGF2ZUVub3Vn
aERhdGE7Ci0gICAgICAgICAgICBHU1RfREVCVUcoIm1fcmVhZHlTdGF0ZT0lcyIsIGR1bXBSZWFk
eVN0YXRlKG1fcmVhZHlTdGF0ZSkpOwotICAgICAgICAgICAgbV9pc1BhdXNlZCA9IHRydWU7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpCi0gICAgICAgICAg
ICBtX2lzUGF1c2VkID0gZmFsc2U7Ci0KLSAgICAgICAgaWYgKCFtX2lzUGF1c2VkICYmIG1fcGxh
eWJhY2tSYXRlKQotICAgICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUExB
WUlORyk7Ci0KLSAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TmV0d29ya1N0
YXRlOjpMb2FkaW5nOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBHU1Rf
REVCVUcoIkVsc2UgOiAlZCIsIGdldFN0YXRlUmVzdWx0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgbV9yZXF1ZXN0ZWRTdGF0ZSA9IEdTVF9TVEFURV9WT0lEX1BFTkRJTkc7Ci0KLSAg
ICBpZiAoc2hvdWxkVXBkYXRlUGxheWJhY2tTdGF0ZSkKLSAgICAgICAgbV9wbGF5ZXItPnBsYXli
YWNrU3RhdGVDaGFuZ2VkKCk7Ci0KLSAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gb2xkTmV0d29y
a1N0YXRlKSB7Ci0gICAgICAgIEdTVF9ERUJVRygiTmV0d29yayBTdGF0ZSBDaGFuZ2VkIGZyb20g
JXUgdG8gJXUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob2xkTmV0d29ya1N0YXRlKSwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG1fbmV0d29ya1N0YXRlKSk7Ci0gICAgICAgIG1fcGxheWVyLT5uZXR3
b3JrU3RhdGVDaGFuZ2VkKCk7Ci0gICAgfQotICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gb2xkUmVh
ZHlTdGF0ZSkgewotICAgICAgICBHU1RfREVCVUcoIlJlYWR5IFN0YXRlIENoYW5nZWQgZnJvbSAl
dSB0byAldSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihvbGRSZWFkeVN0YXRlKSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG1fcmVhZHlTdGF0ZSkpOwotICAgICAgICBtX3BsYXllci0+cmVhZHlTdGF0
ZUNoYW5nZWQoKTsKLSAgICB9Ci0KLSAgICBpZiAoZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRF
X0NIQU5HRV9TVUNDRVNTICYmIHN0YXRlID49IEdTVF9TVEFURV9QQVVTRUQpIHsKLSAgICAgICAg
dXBkYXRlUGxheWJhY2tSYXRlKCk7Ci0gICAgICAgIG1heWJlRmluaXNoU2VlaygpOworICAgIGJv
b2wgc2hvdWxkQmVQbGF5aW5nID0gIW1faXNQYXVzZWQgJiYgcmVhZHlTdGF0ZSgpID49IE1lZGlh
UGxheWVyOjpSZWFkeVN0YXRlOjpIYXZlRnV0dXJlRGF0YTsKKyAgICBHU1RfREVCVUdfT0JKRUNU
KHBpcGVsaW5lKCksICJzaG91bGRCZVBsYXlpbmcgPSAlZCwgbV9pc1BpcGVsaW5lUGxheWluZyA9
ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzaG91bGRCZVBsYXlpbmcpLCBzdGF0aWNfY2FzdDxpbnQ+
KG1faXNQaXBlbGluZVBsYXlpbmcpKTsKKyAgICBpZiAoc2hvdWxkQmVQbGF5aW5nICYmICFtX2lz
UGlwZWxpbmVQbGF5aW5nKSB7CisgICAgICAgIGlmICghY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1Rf
U1RBVEVfUExBWUlORykpCisgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHBpcGVsaW5lKCks
ICJTZXR0aW5nIHRoZSBwaXBlbGluZSB0byBQTEFZSU5HIGZhaWxlZCIpOworICAgICAgICBtX2lz
UGlwZWxpbmVQbGF5aW5nID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKCFzaG91bGRCZVBsYXlpbmcg
JiYgbV9pc1BpcGVsaW5lUGxheWluZykgeworICAgICAgICBpZiAoIWNoYW5nZVBpcGVsaW5lU3Rh
dGUoR1NUX1NUQVRFX1BBVVNFRCkpCisgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHBpcGVs
aW5lKCksICJTZXR0aW5nIHRoZSBwaXBlbGluZSB0byBQQVVTRUQgZmFpbGVkIik7CisgICAgICAg
IG1faXNQaXBlbGluZVBsYXlpbmcgPSBmYWxzZTsKICAgICB9CiB9Ci12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6YXN5bmNTdGF0ZUNoYW5nZURvbmUoKQotewotICAgIGlmIChV
TkxJS0VMWSghbV9waXBlbGluZSB8fCBtX2RpZEVycm9yT2NjdXIpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pc1NlZWtpbmcpCi0gICAgICAgIG1heWJlRmluaXNoU2VlaygpOwotICAg
IGVsc2UKLSAgICAgICAgdXBkYXRlU3RhdGVzKCk7Ci19CiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFOjppc1RpbWVCdWZmZXJlZChjb25zdCBNZWRpYVRpbWUgJnRpbWUpIGNv
bnN0CiB7CkBAIC02OTAsNyArMzA1LDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJNU0U6OnVuYmxvY2tEdXJhdGlvbkNoYW5nZXMoKQogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CiAgICAgaWYgKG1fc2hvdWxkUmVwb3J0RHVyYXRpb25XaGVuVW5ibG9ja2luZykgewogICAg
ICAgICBtX3BsYXllci0+ZHVyYXRpb25DaGFuZ2VkKCk7Ci0gICAgICAgIG1fcGxheWJhY2tQaXBl
bGluZS0+bm90aWZ5RHVyYXRpb25DaGFuZ2VkKCk7CiAgICAgICAgIG1fc2hvdWxkUmVwb3J0RHVy
YXRpb25XaGVuVW5ibG9ja2luZyA9IGZhbHNlOwogICAgIH0KIApAQCAtNzA5LDM5ICszMjMsMzkg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmR1cmF0aW9uQ2hhbmdlZCgp
CiAgICAgLy8gQXZvaWQgZW1pdGluZyBkdXJhdGlvbmNoYW5nZWQgaW4gdGhlIGNhc2Ugd2hlcmUg
dGhlIHByZXZpb3VzIGR1cmF0aW9uIHdhcyAwIGJlY2F1c2UgdGhhdCBjYXNlIGlzIGFscmVhZHkg
aGFuZGxlZAogICAgIC8vIGJ5IHRoZSBIVE1MTWVkaWFFbGVtZW50LgogICAgIGlmIChtX21lZGlh
VGltZUR1cmF0aW9uICE9IHByZXZpb3VzRHVyYXRpb24gJiYgbV9tZWRpYVRpbWVEdXJhdGlvbi5p
c1ZhbGlkKCkgJiYgcHJldmlvdXNEdXJhdGlvbi5pc1ZhbGlkKCkpIHsKLSAgICAgICAgaWYgKCFt
X2FyZUR1cmF0aW9uQ2hhbmdlc0Jsb2NrZWQpIHsKKyAgICAgICAgaWYgKCFtX2FyZUR1cmF0aW9u
Q2hhbmdlc0Jsb2NrZWQpCiAgICAgICAgICAgICBtX3BsYXllci0+ZHVyYXRpb25DaGFuZ2VkKCk7
Ci0gICAgICAgICAgICBtX3BsYXliYWNrUGlwZWxpbmUtPm5vdGlmeUR1cmF0aW9uQ2hhbmdlZCgp
OwotICAgICAgICB9IGVsc2UKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9zaG91bGRSZXBv
cnREdXJhdGlvbldoZW5VbmJsb2NraW5nID0gdHJ1ZTsKICAgICB9CiB9CiAKLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp0cmFja0RldGVjdGVkKEFwcGVuZFBpcGVsaW5lJiBh
cHBlbmRQaXBlbGluZSwgUmVmUHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2U+IG5ld1RyYWNr
LCBib29sIGZpcnN0VHJhY2tEZXRlY3RlZCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyTVNFOjp0cmFja0RldGVjdGVkKEFwcGVuZFBpcGVsaW5lJiBhcHBlbmRQaXBlbGluZSwgUmVm
UHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2U+IG5ld1RyYWNrKQogewogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKGFwcGVuZFBpcGVsaW5lLnRyYWNrKCkgPT0gbmV3
VHJhY2spOwogCi0gICAgR3N0Q2FwcyogY2FwcyA9IGFwcGVuZFBpcGVsaW5lLmFwcHNpbmtDYXBz
KCk7CisgICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gYXBwZW5kUGlwZWxpbmUuYXBwc2lua0Nh
cHMoKTsKICAgICBBU1NFUlQoY2Fwcyk7Ci0gICAgR1NUX0RFQlVHKCJEZW11eGVyIHBhcnNlZCBt
ZXRhZGF0YSB3aXRoIHRyYWNrIElEOiAlcywgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIG5ld1Ry
YWNrLT5pZCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSwgY2Fwcyk7CisgICAgR1NUX0RFQlVH
KCJEZW11eGVyIHBhcnNlZCBtZXRhZGF0YSB3aXRoIHRyYWNrIElEOiAlcywgY2FwczogJSIgR1NU
X1BUUl9GT1JNQVQsIG5ld1RyYWNrLT5pZCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSwgY2Fw
cy5nZXQoKSk7CiAKICAgICAvLyBXZSBzZXQgdGhlIHNpemUgb2YgdGhlIHZpZGVvIG9ubHkgZm9y
IHRoZSBmaXJzdCBpbml0aWFsaXphdGlvbiBzZWdtZW50LgogICAgIC8vIFRoaXMgaXMgaW50ZW50
aW9uYWw6IE5vcm1hbGx5IHRoZSB2aWRlbyBzaXplIGRlcGVuZHMgb24gdGhlIGZyYW1lcyBhcnJp
dmluZwogICAgIC8vIGF0IHRoZSBzaW5rIGluIHRoZSBwbGF5YmFjayBwaXBlbGluZSwgbm90IGlu
IHRoZSBhcHBlbmQgcGlwZWxpbmU7IGJ1dCB3ZSBzdGlsbAogICAgIC8vIHdhbnQgdG8gcmVwb3J0
IGFuIGluaXRpYWwgc2l6ZSBmb3IgSEFWRV9NRVRBREFUQSAoZmlyc3QgaW5pdGlhbGl6YXRpb24g
c2VnbWVudCkuCi0gICAgaWYgKG1fdmlkZW9TaXplLmlzRW1wdHkoKSAmJiBkb0NhcHNIYXZlVHlw
ZShjYXBzLCBHU1RfVklERU9fQ0FQU19UWVBFX1BSRUZJWCkpIHsKLSAgICAgICAgT3B0aW9uYWw8
RmxvYXRTaXplPiBzaXplID0gZ2V0VmlkZW9SZXNvbHV0aW9uRnJvbUNhcHMoY2Fwcyk7CisgICAg
aWYgKG1fdmlkZW9TaXplLmlzRW1wdHkoKSAmJiBkb0NhcHNIYXZlVHlwZShjYXBzLmdldCgpLCBH
U1RfVklERU9fQ0FQU19UWVBFX1BSRUZJWCkpIHsKKyAgICAgICAgT3B0aW9uYWw8RmxvYXRTaXpl
PiBzaXplID0gZ2V0VmlkZW9SZXNvbHV0aW9uRnJvbUNhcHMoY2Fwcy5nZXQoKSk7CiAgICAgICAg
IGlmIChzaXplLmhhc1ZhbHVlKCkpIHsKICAgICAgICAgICAgIG1fdmlkZW9TaXplID0gc2l6ZS52
YWx1ZSgpOwogICAgICAgICAgICAgR1NUX0RFQlVHKCJTZXR0aW5nIGluaXRpYWwgdmlkZW8gc2l6
ZTogJWd4JWciLCBtX3ZpZGVvU2l6ZS53aWR0aCgpLCBtX3ZpZGVvU2l6ZS5oZWlnaHQoKSk7CiAg
ICAgICAgIH0KICAgICB9Cit9CiAKLSAgICBpZiAoZmlyc3RUcmFja0RldGVjdGVkKQotICAgICAg
ICBtX3BsYXliYWNrUGlwZWxpbmUtPmF0dGFjaFRyYWNrKG1ha2VSZWYoYXBwZW5kUGlwZWxpbmUu
c291cmNlQnVmZmVyUHJpdmF0ZSgpKSwgbmV3VHJhY2ssIGNhcHMpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9wbGF5YmFja1BpcGVsaW5lLT5yZWF0dGFjaFRyYWNrKG1ha2VSZWYoYXBwZW5kUGlwZWxp
bmUuc291cmNlQnVmZmVyUHJpdmF0ZSgpKSwgbmV3VHJhY2ssIGNhcHMpOwordm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnN0YXJ0U291cmNlKGNvbnN0IFZlY3RvcjxSZWZQdHI8
TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcj4+JiB0cmFja3MpCit7CisgICAgbV90cmFja3MgPSB0
cmFja3M7CisgICAgd2ViS2l0TWVkaWFTcmNFbWl0U3RyZWFtcyhXRUJLSVRfTUVESUFfU1JDKG1f
c291cmNlLmdldCgpKSwgdHJhY2tzKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0U6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNl
bnNpdGl2ZUhhc2g+JiB0eXBlcykKQEAgLTc3MywzNCArMzg3LDYgQEAgTWVkaWFQbGF5ZXI6OlN1
cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnN1cHBvcnRzVHlwZShj
b25zdCBNZWQKICAgICByZXR1cm4gZmluYWxSZXN1bHQ7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjptYXJrRW5kT2ZTdHJlYW0oTWVkaWFTb3VyY2VQcml2YXRlOjpF
bmRPZlN0cmVhbVN0YXR1cyBzdGF0dXMpCi17Ci0gICAgaWYgKHN0YXR1cyAhPSBNZWRpYVNvdXJj
ZVByaXZhdGU6OkVvc05vRXJyb3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdTVF9ERUJVRygi
TWFya2luZyBlbmQgb2Ygc3RyZWFtIik7Ci0gICAgbV9lb3NNYXJrZWQgPSB0cnVlOwotICAgIHVw
ZGF0ZVN0YXRlcygpOwotfQotCi1NZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
TVNFOjpjdXJyZW50TWVkaWFUaW1lKCkgY29uc3QKLXsKLSAgICBNZWRpYVRpbWUgcG9zaXRpb24g
PSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmN1cnJlbnRNZWRpYVRpbWUoKTsKLQotICAg
IGlmIChtX2Vvc1BlbmRpbmcgJiYgcG9zaXRpb24gPj0gZHVyYXRpb25NZWRpYVRpbWUoKSkgewot
ICAgICAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZTo6
TG9hZGVkKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpOZXR3
b3JrU3RhdGU6OkxvYWRlZDsKLSAgICAgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFu
Z2VkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtX2Vvc1BlbmRpbmcgPSBmYWxzZTsKLSAgICAg
ICAgbV9pc0VuZFJlYWNoZWQgPSB0cnVlOwotICAgICAgICBtX2NhY2hlZFBvc2l0aW9uID0gbV9t
ZWRpYVRpbWVEdXJhdGlvbjsKLSAgICAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7Ci0gICAg
fQotICAgIHJldHVybiBwb3NpdGlvbjsKLX0KLQogTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6bWF4TWVkaWFUaW1lU2Vla2FibGUoKSBjb25zdAogewogICAgIGlmIChV
TkxJS0VMWShtX2RpZEVycm9yT2NjdXIpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJN
U0UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmgKaW5kZXggYzQ0YWM2ZTQwNmMyMzE5ZTZkNWVi
YzZhZmY1Mjk1Yjc2M2FkOWExZi4uNWYyMmE1MWU5NWZhMmRhNDRlMzIwOGFiYjY2ZGMzZmVlZDRk
N2U2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRS5oCkBAIC0zMCwxMiArMzAsMTQgQEAKICNpbmNsdWRlICJNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJNZWRpYVNhbXBsZS5oIgogI2luY2x1ZGUgIk1l
ZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lci5oIgotI2luY2x1ZGUgIldlYktpdE1lZGlhU291cmNl
R1N0cmVhbWVyLmgiCisKK3N0cnVjdCBXZWJLaXRNZWRpYVNyYzsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBBcHBlbmRQaXBlbGluZTsKLWNsYXNzIFBsYXliYWNrUGlwZWxpbmU7Citj
bGFzcyBUcmFja1F1ZXVlOworY2xhc3MgTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcjsKIAogY2xh
c3MgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFIDogcHVibGljIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC01MSwxMyArNTMs
MTIgQEAgcHVibGljOgogCiAgICAgdm9pZCB1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWcoKSBv
dmVycmlkZSB7IH07CiAKLSAgICBNZWRpYVRpbWUgY3VycmVudE1lZGlhVGltZSgpIGNvbnN0IG92
ZXJyaWRlOwotCisgICAgdm9pZCBwbGF5KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBwYXVzZSgpIG92
ZXJyaWRlOwotICAgIGJvb2wgc2Vla2luZygpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgc2Vl
ayhjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbmZpZ3VyZVBsYXlTaW5r
KCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjaGFuZ2VQaXBlbGluZVN0YXRlKEdzdFN0YXRlKSBvdmVy
cmlkZTsKKyAgICBib29sIGRvU2Vlayhjb25zdCBNZWRpYVRpbWUmLCBmbG9hdCByYXRlLCBHc3RT
ZWVrRmxhZ3MpIG92ZXJyaWRlOworCisgICAgdm9pZCB1cGRhdGVQaXBlbGluZVN0YXRlKEdzdFN0
YXRlKTsKIAogICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCkgb3ZlcnJpZGU7CiAgICAgTWVkaWFU
aW1lIGR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC02OCwxOSArNjksMTgg
QEAgcHVibGljOgogICAgIHZvaWQgc291cmNlU2V0dXAoR3N0RWxlbWVudCopIG92ZXJyaWRlOwog
CiAgICAgdm9pZCBzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlKTsKLSAgICB2
b2lkIHdhaXRGb3JTZWVrQ29tcGxldGVkKCk7Ci0gICAgdm9pZCBzZWVrQ29tcGxldGVkKCk7CiAg
ICAgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50KiBtZWRpYVNvdXJjZVByaXZhdGVDbGllbnQoKSB7
IHJldHVybiBtX21lZGlhU291cmNlLmdldCgpOyB9CiAKLSAgICB2b2lkIG1hcmtFbmRPZlN0cmVh
bShNZWRpYVNvdXJjZVByaXZhdGU6OkVuZE9mU3RyZWFtU3RhdHVzKTsKLQotICAgIHZvaWQgdHJh
Y2tEZXRlY3RlZChBcHBlbmRQaXBlbGluZSYsIFJlZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVC
YXNlPiwgYm9vbCBmaXJzdFRyYWNrRGV0ZWN0ZWQpOwotICAgIHZvaWQgbm90aWZ5U2Vla05lZWRz
RGF0YUZvclRpbWUoY29uc3QgTWVkaWFUaW1lJik7CisgICAgdm9pZCB0cmFja0RldGVjdGVkKEFw
cGVuZFBpcGVsaW5lJiwgUmVmUHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2U+KTsKIAogICAg
IHZvaWQgYmxvY2tEdXJhdGlvbkNoYW5nZXMoKTsKICAgICB2b2lkIHVuYmxvY2tEdXJhdGlvbkNo
YW5nZXMoKTsKIAotICAgIFBsYXliYWNrUGlwZWxpbmUqIHBsYXliYWNrUGlwZWxpbmUoKSBjb25z
dCB7IHJldHVybiBtX3BsYXliYWNrUGlwZWxpbmUuZ2V0KCk7IH0KKyAgICB2b2lkIGFzeW5jU3Rh
dGVDaGFuZ2VEb25lKCkgb3ZlcnJpZGU7CisKKyAgICBib29sIGhhc0FsbFRyYWNrcygpIGNvbnN0
IHsgcmV0dXJuIG1faGFzQWxsVHJhY2tzOyB9CisgICAgdm9pZCBzdGFydFNvdXJjZShjb25zdCBW
ZWN0b3I8UmVmUHRyPE1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXI+PiYgdHJhY2tzKTsKKyAgICBX
ZWJLaXRNZWRpYVNyYyogd2ViS2l0TWVkaWFTcmMoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0
PFdlYktpdE1lZGlhU3JjKj4obV9zb3VyY2UuZ2V0KCkpOyB9CiAKICNpZiAhUkVMRUFTRV9MT0df
RElTQUJMRUQKICAgICBXVEZMb2dDaGFubmVsJiBsb2dDaGFubmVsKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gV2ViQ29yZTo6TG9nTWVkaWFTb3VyY2U7IH0KQEAgLTkxLDI5ICs5MSwyNiBAQCBwcml2
YXRlOgogICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nLCBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+Jik7CiAgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBw
b3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMm
KTsKIAotICAgIC8vIEZJWE1FOiBSZWR1Y2UgY29kZSBkdXBsaWNhdGlvbi4KICAgICB2b2lkIHVw
ZGF0ZVN0YXRlcygpIG92ZXJyaWRlOwogCi0gICAgYm9vbCBkb1NlZWsoY29uc3QgTWVkaWFUaW1l
JiwgZmxvYXQsIEdzdFNlZWtGbGFncykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtYXliZUZpbmlzaFNl
ZWsoKTsKLQotICAgIHZvaWQgYXN5bmNTdGF0ZUNoYW5nZURvbmUoKSBvdmVycmlkZTsKLQogICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdmlkZW9QbGF5YmFja1F1YWxpdHlNZXRyaWNzLgogICAgIGJv
b2wgaXNUaW1lQnVmZmVyZWQoY29uc3QgTWVkaWFUaW1lJikgY29uc3Q7CiAKICAgICBib29sIGlz
TWVkaWFTb3VyY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBib29s
IG1fZW9zTWFya2VkID0gZmFsc2U7Ci0gICAgbXV0YWJsZSBib29sIG1fZW9zUGVuZGluZyA9IGZh
bHNlOwotICAgIGJvb2wgbV9nc3RTZWVrQ29tcGxldGVkID0gdHJ1ZTsKKyAgICB2b2lkIHByb3Bh
Z2F0ZVJlYWR5U3RhdGVUb1BsYXllcigpOworCiAgICAgUmVmUHRyPE1lZGlhU291cmNlUHJpdmF0
ZUNsaWVudD4gbV9tZWRpYVNvdXJjZTsKICAgICBSZWZQdHI8TWVkaWFTb3VyY2VQcml2YXRlR1N0
cmVhbWVyPiBtX21lZGlhU291cmNlUHJpdmF0ZTsKICAgICBNZWRpYVRpbWUgbV9tZWRpYVRpbWVE
dXJhdGlvbjsKLSAgICBib29sIG1fbXNlU2Vla0NvbXBsZXRlZCA9IHRydWU7CiAgICAgYm9vbCBt
X2FyZUR1cmF0aW9uQ2hhbmdlc0Jsb2NrZWQgPSBmYWxzZTsKICAgICBib29sIG1fc2hvdWxkUmVw
b3J0RHVyYXRpb25XaGVuVW5ibG9ja2luZyA9IGZhbHNlOwotICAgIFJlZlB0cjxQbGF5YmFja1Bp
cGVsaW5lPiBtX3BsYXliYWNrUGlwZWxpbmU7CisgICAgYm9vbCBtX2lzUGlwZWxpbmVQbGF5aW5n
ID0gdHJ1ZTsKKyAgICBib29sIG1faGFzQWxsVHJhY2tzID0gZmFsc2U7CisgICAgVmVjdG9yPFJl
ZlB0cjxNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyPj4gbV90cmFja3M7CisKKyAgICBib29sIG1f
aXNXYWl0aW5nRm9yUHJlcm9sbCA9IHRydWU7CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUg
bV9tZWRpYVNvdXJjZVJlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZTo6SGF2ZU5v
dGhpbmc7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlUHJpdmF0
ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvbXNlL01lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggZjg5MGI3MTNhMzBh
YTg4MWM2YWZkMGVlNTNlMDMxZTY0ZjM0OGJjMS4uMGMwN2VmYmM0YTk1N2Q4OGVlMjhkNDIzNWU4
NWJjZjg0MDJlMmJiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VQ
cml2YXRlR1N0cmVhbWVyLmNwcApAQCAtNDEsOCArNDEsOCBAQAogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaCIKKyNpbmNsdWRlICJNZWRpYVNvdXJjZVRy
YWNrR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQ
bGF5YmFja1BpcGVsaW5lLmgiCiAjaW5jbHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1l
ci5oIgogI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKICNpbmNsdWRlICJXZWJLaXRNZWRpYVNvdXJj
ZUdTdHJlYW1lci5oIgpAQCAtNzksMTAgKzc5LDE1IEBAIE1lZGlhU291cmNlUHJpdmF0ZUdTdHJl
YW1lcjo6fk1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lcigpCiBNZWRpYVNvdXJjZVByaXZhdGVH
U3RyZWFtZXI6OkFkZFN0YXR1cyBNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXI6OmFkZFNvdXJj
ZUJ1ZmZlcihjb25zdCBDb250ZW50VHlwZSYgY29udGVudFR5cGUsIGJvb2wsIFJlZlB0cjxTb3Vy
Y2VCdWZmZXJQcml2YXRlPiYgc291cmNlQnVmZmVyUHJpdmF0ZSkKIHsKICAgICBERUJVR19MT0co
TE9HSURFTlRJRklFUiwgY29udGVudFR5cGUpOworCisgICAgLy8gT25jZSBldmVyeSBTb3VyY2VC
dWZmZXIgaGFzIGhhZCBhbiBpbml0aWFsaXphdGlvbiBzZWdtZW50IGFwcGVuZGVkIHBsYXliYWNr
IHN0YXJ0cyBhbmQgaXQncyB0b28gbGF0ZSB0byBhZGQgbmV3IFNvdXJjZUJ1ZmZlcnMuCisgICAg
aWYgKG1fcGxheWVyUHJpdmF0ZS5oYXNBbGxUcmFja3MoKSkKKyAgICAgICAgcmV0dXJuIE1lZGlh
U291cmNlUHJpdmF0ZUdTdHJlYW1lcjo6QWRkU3RhdHVzOjpSZWFjaGVkSWRMaW1pdDsKKwogICAg
IHNvdXJjZUJ1ZmZlclByaXZhdGUgPSBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVh
dGUodGhpcywgY29udGVudFR5cGUsIG1fcGxheWVyUHJpdmF0ZSk7CiAgICAgUmVmUHRyPFNvdXJj
ZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+IHNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIgPSBz
dGF0aWNfY2FzdDxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyKj4oc291cmNlQnVmZmVyUHJp
dmF0ZS5nZXQoKSk7CiAgICAgbV9zb3VyY2VCdWZmZXJzLmFkZChzb3VyY2VCdWZmZXJQcml2YXRl
R1N0cmVhbWVyKTsKLSAgICByZXR1cm4gbV9wbGF5ZXJQcml2YXRlLnBsYXliYWNrUGlwZWxpbmUo
KS0+YWRkU291cmNlQnVmZmVyKHNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIpOworICAgIHJl
dHVybiBNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXI6OkFkZFN0YXR1czo6T2s7CiB9CiAKIHZv
aWQgTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyOjpyZW1vdmVTb3VyY2VCdWZmZXIoU291cmNl
QnVmZmVyUHJpdmF0ZSogc291cmNlQnVmZmVyUHJpdmF0ZSkKQEAgLTEwNywxNiArMTEyLDE1IEBA
IHZvaWQgTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyOjpkdXJhdGlvbkNoYW5nZWQoY29uc3Qg
TWVkaWFUaW1lJikKICAgICBtX3BsYXllclByaXZhdGUuZHVyYXRpb25DaGFuZ2VkKCk7CiB9CiAK
LXZvaWQgTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyOjptYXJrRW5kT2ZTdHJlYW0oRW5kT2ZT
dHJlYW1TdGF0dXMgc3RhdHVzKQordm9pZCBNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXI6Om1h
cmtFbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1cykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotICAgIG1fcGxheWVyUHJpdmF0ZS5tYXJrRW5kT2ZTdHJlYW0oc3RhdHVzKTsKICAg
ICBtX2lzRW5kZWQgPSB0cnVlOwogfQogCiB2b2lkIE1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1l
cjo6dW5tYXJrRW5kT2ZTdHJlYW0oKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBtX2lzRW5kZWQgPSBmYWxzZTsKIH0KIApAQCAtMTMy
LDEyICsxMzYsMTQgQEAgdm9pZCBNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXI6OnNldFJlYWR5
U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgc3RhdGUpCiAKIHZvaWQgTWVkaWFTb3VyY2VQ
cml2YXRlR1N0cmVhbWVyOjp3YWl0Rm9yU2Vla0NvbXBsZXRlZCgpCiB7Ci0gICAgbV9wbGF5ZXJQ
cml2YXRlLndhaXRGb3JTZWVrQ29tcGxldGVkKCk7CiB9CiAKIHZvaWQgTWVkaWFTb3VyY2VQcml2
YXRlR1N0cmVhbWVyOjpzZWVrQ29tcGxldGVkKCkKIHsKLSAgICBtX3BsYXllclByaXZhdGUuc2Vl
a0NvbXBsZXRlZCgpOworICAgIC8vIFRoaXMgY2FsbCBqdXN0IGluZm9ybXMgdXMgdGhhdCB0aGUg
c2VlayBoYXMgYmVlbiBjb21wbGV0ZWQgYXMgZmFyIGFzIE1lZGlhU291cmNlIGlzIGNvbmNlcm5l
ZDogdGhhdCBpcywKKyAgICAvLyB0aGUgc2FtcGxlcyBmb3IgYGN1cnJlbnRUaW1lYCBoYXZlIGJl
ZW4gZmVkLiBUaGlzIGRvZXNuJ3QgbWVhbiB0aGUgc2VlayBpcyBjb21wbGV0ZSBmb3IgdGhlIHBs
YXllciwgYXMKKyAgICAvLyB0aGV5IHN0aWxsIGhhdmUgdG8gYmUgZGVjb2RlZCBhbmQgcHJlcm9s
bCBoYXMgdG8gb2NjdXIgYmVmb3JlIHdlIGxldCB0aGUgInNlZWtlZCIgZXZlbnQgaGFwcGVuLgor
ICAgIC8vIFNlZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmFzeW5jU3RhdGVDaGFu
Z2VEb25lKCkKIH0KIAogTWVkaWFUaW1lIE1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lcjo6ZHVy
YXRpb24oKSBjb25zdApAQCAtMTU4LDYgKzE2NCwyOSBAQCB2b2lkIE1lZGlhU291cmNlUHJpdmF0
ZUdTdHJlYW1lcjo6c291cmNlQnVmZmVyUHJpdmF0ZURpZENoYW5nZUFjdGl2ZVN0YXRlKFNvdXJj
ZQogICAgICAgICBtX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMuYWRkKHNvdXJjZUJ1ZmZlclByaXZhdGUp
OwogfQogCit2b2lkIE1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lcjo6c3RhcnRQbGF5YmFja0lm
SGFzQWxsVHJhY2tzKCkKK3sKKyAgICBpZiAobV9oYXNBbGxUcmFja3MpIHsKKyAgICAgICAgLy8g
QWxyZWFkeSBzdGFydGVkLCBub3RoaW5nIHRvIGRvLgorICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgZm9yIChhdXRvJiBzb3VyY2VCdWZmZXIgOiBtX3NvdXJjZUJ1ZmZlcnMpIHsKKyAgICAg
ICAgaWYgKCFzb3VyY2VCdWZmZXItPmhhc1JlY2VpdmVkSW5pdGlhbGl6YXRpb25TZWdtZW50KCkp
IHsKKyAgICAgICAgICAgIEdTVF9ERUJVRygiTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyKCVw
KSAtIFRoZXJlIGFyZSBzdGlsbCBTb3VyY2VCdWZmZXJzIHdpdGhvdXQgYW4gaW5pdGlhbGl6YXRp
b24gc2VnbWVudCwgbm90IHN0YXJ0aW5nIHNvdXJjZSB5ZXQuIiwgdGhpcyk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBHU1RfREVCVUcoIk1lZGlhU291cmNl
UHJpdmF0ZUdTdHJlYW1lciglcCkgLSBBbGwgU291cmNlQnVmZmVycyBoYXZlIGFuIGluaXRpYWxp
emF0aW9uIHNlZ21lbnQsIHN0YXJ0aW5nIHNvdXJjZS4iLCB0aGlzKTsKKyAgICBtX2hhc0FsbFRy
YWNrcyA9IHRydWU7CisKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU291cmNlVHJhY2tHU3RyZWFt
ZXI+PiB0cmFja3M7CisgICAgZm9yIChhdXRvJiBzb3VyY2VCdWZmZXIgOiBtX3NvdXJjZUJ1ZmZl
cnMpCisgICAgICAgIHRyYWNrcy5hcHBlbmRSYW5nZShzb3VyY2VCdWZmZXItPnRyYWNrcygpLmJl
Z2luKCksIHNvdXJjZUJ1ZmZlci0+dHJhY2tzKCkuZW5kKCkpOworICAgIG1fcGxheWVyUHJpdmF0
ZS5zdGFydFNvdXJjZSh0cmFja3MpOworfQorCiBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1l
UmFuZ2VzPiBNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXI6OmJ1ZmZlcmVkKCkKIHsKICAgICBy
ZXR1cm4gbV9tZWRpYVNvdXJjZS0+YnVmZmVyZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VQcml2YXRlR1N0
cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNl
L01lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IDZlY2IxZDk4MDExMjYxYjBiZjVi
MzVjMzYzMTMyMzhjZTFhZjZiNTYuLjRkMWZjM2JiNDBmNjhjMGQzYjMyZjRlMzdlMDhjZjE1ZTZl
MGE3M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UvTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNvdXJjZVByaXZhdGVHU3Ry
ZWFtZXIuaApAQCAtNDEsOCArNDEsNiBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL0xvZ2dlckhlbHBlci5oPgogCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0TWVkaWFT
cmMgV2ViS2l0TWVkaWFTcmM7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU291cmNl
QnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjsKQEAgLTc2LDYgKzc0LDcgQEAgcHVibGljOgogICAgIE1l
ZGlhVGltZSBjdXJyZW50TWVkaWFUaW1lKCkgY29uc3Q7CiAKICAgICB2b2lkIHNvdXJjZUJ1ZmZl
clByaXZhdGVEaWRDaGFuZ2VBY3RpdmVTdGF0ZShTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVy
KiwgYm9vbCk7CisgICAgdm9pZCBzdGFydFBsYXliYWNrSWZIYXNBbGxUcmFja3MoKTsKIAogICAg
IHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCk7CiAKQEAgLTk2
LDYgKzk1LDcgQEAgcHJpdmF0ZToKICAgICBSZWY8TWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50PiBt
X21lZGlhU291cmNlOwogICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSYgbV9wbGF5
ZXJQcml2YXRlOwogICAgIGJvb2wgbV9pc0VuZGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFz
QWxsVHJhY2tzIHsgZmFsc2UgfTsKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKICAgICBSZWY8
Y29uc3QgTG9nZ2VyPiBtX2xvZ2dlcjsKICAgICBjb25zdCB2b2lkKiBtX2xvZ0lkZW50aWZpZXI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
bXNlL01lZGlhU291cmNlVHJhY2tHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iNGM1ZTY3MjY2YmVmMjZhMTdiOWNjNWVjOWFiMmJhMGUzMzg4MGYzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L21zZS9NZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDk3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwLCAyMDIxIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAsIDIwMjEgSWdhbGlhLCBTLkwKKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lci5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NP
VVJDRSkgJiYgVVNFKEdTVFJFQU1FUikKKworR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJr
aXRfbXNlX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9tc2VfZGVidWcK
KwordXNpbmcgV1RGOjpEYXRhTXV0ZXg7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTWVkaWFT
b3VyY2VUcmFja0dTdHJlYW1lcjo6TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcihUcmFja1ByaXZh
dGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGUgdHlwZSwgQXRvbVN0cmluZyB0cmFja0lkLCBHUmVm
UHRyPEdzdENhcHM+JiYgaW5pdGlhbENhcHMpCisgICAgOiBtX3R5cGUodHlwZSkKKyAgICAsIG1f
dHJhY2tJZCh0cmFja0lkKQorICAgICwgbV9pbml0aWFsQ2FwcyhXVEZNb3ZlKGluaXRpYWxDYXBz
KSkKKyAgICAsIG1fcXVldWVEYXRhTXV0ZXgodHJhY2tJZCkKK3sgfQorCitNZWRpYVNvdXJjZVRy
YWNrR1N0cmVhbWVyOjp+TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcigpCit7CisgICAgQVNTRVJU
KG1faXNSZW1vdmVkKTsKK30KKworUmVmPE1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXI+IE1lZGlh
U291cmNlVHJhY2tHU3RyZWFtZXI6OmNyZWF0ZShUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpU
cmFja1R5cGUgdHlwZSwgQXRvbVN0cmluZyB0cmFja0lkLCBHUmVmUHRyPEdzdENhcHM+JiYgaW5p
dGlhbENhcHMpCit7CisgICAgcmV0dXJuIG1ha2VSZWYoKm5ldyBNZWRpYVNvdXJjZVRyYWNrR1N0
cmVhbWVyKHR5cGUsIHRyYWNrSWQsIFdURk1vdmUoaW5pdGlhbENhcHMpKSk7Cit9CisKK2Jvb2wg
TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcjo6aXNSZWFkeUZvck1vcmVTYW1wbGVzKCkKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIFdURjo6RGF0YU11dGV4PFRyYWNrUXVldWU+
OjpMb2NrZWRXcmFwcGVyIHF1ZXVlKG1fcXVldWVEYXRhTXV0ZXgpOworICAgIHJldHVybiAhcXVl
dWUtPmlzRnVsbCgpOworfQorCit2b2lkIE1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXI6Om5vdGlm
eVdoZW5SZWFkeUZvck1vcmVTYW1wbGVzKFRyYWNrUXVldWU6Okxvd0xldmVsSGFuZGxlciYmIGhh
bmRsZXIpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBXVEY6OkRhdGFNdXRl
eDxUcmFja1F1ZXVlPjo6TG9ja2VkV3JhcHBlciBxdWV1ZShtX3F1ZXVlRGF0YU11dGV4KTsKKyAg
ICBxdWV1ZS0+bm90aWZ5V2hlbkxvd0xldmVsKFdURk1vdmUoaGFuZGxlcikpOworfQorCit2b2lk
IE1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXI6OmVucXVldWVPYmplY3QoR1JlZlB0cjxHc3RNaW5p
T2JqZWN0PiYmIG9iamVjdCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIFdU
Rjo6RGF0YU11dGV4PFRyYWNrUXVldWU+OjpMb2NrZWRXcmFwcGVyIHF1ZXVlKG1fcXVldWVEYXRh
TXV0ZXgpOworICAgIHF1ZXVlLT5lbnF1ZXVlT2JqZWN0KFdURk1vdmUob2JqZWN0KSk7Cit9CisK
K3ZvaWQgTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcjo6Y2xlYXJRdWV1ZSgpCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBXVEY6OkRhdGFNdXRleDxUcmFja1F1ZXVlPjo6TG9j
a2VkV3JhcHBlciBxdWV1ZShtX3F1ZXVlRGF0YU11dGV4KTsKKyAgICBxdWV1ZS0+Y2xlYXIoKTsK
K30KKwordm9pZCBNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyOjpyZW1vdmUoKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgbV9pc1JlbW92ZWQgPSB0cnVlOworfQorCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL21zZS9NZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlVHJhY2tHU3RyZWFtZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40OWNhZTU5ZmI4YWQ2MzgxNzk1MTA2ZWVhMDNjMjMyYWQ0Y2ZjYjk1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9NZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw4MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMSBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICog
Q29weXJpZ2h0IChDKSAyMDIwLCAyMDIxIElnYWxpYSwgUy5MCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoTUVESUFfU09VUkNFKSAmJiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSAiVHJhY2tQcml2
YXRlQmFzZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlRyYWNrUXVldWUuaCIKKyNpbmNsdWRlIDx3
dGYvRGF0YU11dGV4Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFTb3Vy
Y2VUcmFja0dTdHJlYW1lciBmaW5hbDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1lZGlh
U291cmNlVHJhY2tHU3RyZWFtZXI+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE1lZGlhU291
cmNlVHJhY2tHU3RyZWFtZXI+IGNyZWF0ZShUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFj
a1R5cGUsIEF0b21TdHJpbmcgdHJhY2tJZCwgR1JlZlB0cjxHc3RDYXBzPiYmIGluaXRpYWxDYXBz
KTsKKyAgICB+TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcigpOworCisgICAgVHJhY2tQcml2YXRl
QmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0K
KyAgICBBdG9tU3RyaW5nIHRyYWNrSWQoKSBjb25zdCB7IHJldHVybiBtX3RyYWNrSWQ7IH0KKyAg
ICBHUmVmUHRyPEdzdENhcHM+JiBpbml0aWFsQ2FwcygpIHsgcmV0dXJuIG1faW5pdGlhbENhcHM7
IH0KKyAgICBXVEY6OkRhdGFNdXRleDxUcmFja1F1ZXVlPiYgcXVldWVEYXRhTXV0ZXgoKSB7IHJl
dHVybiBtX3F1ZXVlRGF0YU11dGV4OyB9CisKKyAgICBib29sIGlzUmVhZHlGb3JNb3JlU2FtcGxl
cygpOworCisgICAgdm9pZCBub3RpZnlXaGVuUmVhZHlGb3JNb3JlU2FtcGxlcyhUcmFja1F1ZXVl
OjpMb3dMZXZlbEhhbmRsZXImJik7CisKKyAgICB2b2lkIGVucXVldWVPYmplY3QoR1JlZlB0cjxH
c3RNaW5pT2JqZWN0PiYmKTsKKworICAgIC8vIFRoaXMgbWV0aG9kIGlzIHByb3ZpZGVkIHRvIGNs
ZWFyIHRoZSBUcmFja1F1ZXVlIGluIGNhc2VzIHdoZXJlIHRoZSBzdHJlYW0gaGFzbid0IGJlZW4g
c3RhcnRlZCAoZS5nLiBiZWNhdXNlCisgICAgLy8gYW5vdGhlciBTb3VyY2VCdWZmZXIgaGFzbid0
IHJlY2VpdmVkIHRoZSBuZWNlc3NhcnkgaW5pdGFsaXphdGlvbiBzZWdtZW50IGZvciBwbGF5YmFj
aykuCisgICAgLy8gT3RoZXJ3aXNlLCB3ZWJLaXRNZWRpYVNyY0ZsdXNoKCkgc2hvdWxkIGJlIHVz
ZWQgaW5zdGVhZCwgd2hpY2ggd2lsbCBhbHNvIGRvIGEgR1N0cmVhbWVyIHBpcGVsaW5lIGZsdXNo
IHdoZXJlCisgICAgLy8gbmVjZXNzYXJ5LgorICAgIHZvaWQgY2xlYXJRdWV1ZSgpOworCisgICAg
dm9pZCByZW1vdmUoKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBNZWRpYVNvdXJjZVRyYWNr
R1N0cmVhbWVyKFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZSwgQXRvbVN0cmlu
ZyB0cmFja0lkLCBHUmVmUHRyPEdzdENhcHM+JiYgaW5pdGlhbENhcHMpOworCisgICAgVHJhY2tQ
cml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlIG1fdHlwZTsKKyAgICBBdG9tU3RyaW5nIG1f
dHJhY2tJZDsKKyAgICBHUmVmUHRyPEdzdENhcHM+IG1faW5pdGlhbENhcHM7CisgICAgV1RGOjpE
YXRhTXV0ZXg8VHJhY2tRdWV1ZT4gbV9xdWV1ZURhdGFNdXRleDsKKworICAgIGJvb2wgbV9pc1Jl
bW92ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1JlYWR5Rm9yTW9yZVNhbXBsZXMgeyB0cnVl
IH07Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1BsYXliYWNrUGlwZWxpbmUuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBiYzkxNTYwNWExNzRiYWQ4NGZiMjRkNTY4
YWViYjBlMjlhYzYwZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1BsYXli
YWNrUGlwZWxpbmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAqIENvcHlyaWdodCAoQykg
MjAxNiBJZ2FsaWEgUy5MCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShH
U1RSRUFNRVIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpCi0KLS8vIFBsYXliYWNrUGlwZWxpbmUg
aXMgKHNvcnQgb2YpIGEgZnJpZW5kIGNsYXNzIG9mIFdlYktpdE1lZGlhU291cmNlR1N0cmVhbWVy
LgotCi0jaW5jbHVkZSAiV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCIKLSNpbmNsdWRlICJX
ZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lclByaXZhdGUuaCIKLQotI2luY2x1ZGUgPGdzdC9nc3Qu
aD4KLSNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0
ci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLXRlbXBsYXRlPD4gR1JlZlB0cjxXZWJLaXRNZWRpYVNy
Yz4gYWRvcHRHUmVmKFdlYktpdE1lZGlhU3JjKik7Ci10ZW1wbGF0ZTw+IFdlYktpdE1lZGlhU3Jj
KiByZWZHUHRyPFdlYktpdE1lZGlhU3JjPihXZWJLaXRNZWRpYVNyYyopOwotdGVtcGxhdGU8PiB2
b2lkIGRlcmVmR1B0cjxXZWJLaXRNZWRpYVNyYz4oV2ViS2l0TWVkaWFTcmMqKTsKLX07Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ29udGVudFR5cGU7Ci1jbGFzcyBTb3VyY2VCdWZm
ZXJQcml2YXRlR1N0cmVhbWVyOwotY2xhc3MgTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyOwot
Ci1jbGFzcyBQbGF5YmFja1BpcGVsaW5lOiBwdWJsaWMgUmVmQ291bnRlZDxQbGF5YmFja1BpcGVs
aW5lPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxQbGF5YmFja1BpcGVsaW5lPiBjcmVhdGUo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGxheWJhY2tQaXBlbGluZSgp
KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5QbGF5YmFja1BpcGVsaW5lKCkgPSBkZWZhdWx0Owot
Ci0gICAgdm9pZCBzZXRXZWJLaXRNZWRpYVNyYyhXZWJLaXRNZWRpYVNyYyopOwotICAgIFdlYktp
dE1lZGlhU3JjKiB3ZWJLaXRNZWRpYVNyYygpOwotCi0gICAgTWVkaWFTb3VyY2VQcml2YXRlOjpB
ZGRTdGF0dXMgYWRkU291cmNlQnVmZmVyKFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVh
bWVyPik7Ci0gICAgdm9pZCByZW1vdmVTb3VyY2VCdWZmZXIoUmVmUHRyPFNvdXJjZUJ1ZmZlclBy
aXZhdGVHU3RyZWFtZXI+KTsKLSAgICB2b2lkIGF0dGFjaFRyYWNrKFJlZlB0cjxTb3VyY2VCdWZm
ZXJQcml2YXRlR1N0cmVhbWVyPiwgUmVmUHRyPFRyYWNrUHJpdmF0ZUJhc2U+LCBHc3RDYXBzKik7
Ci0gICAgdm9pZCByZWF0dGFjaFRyYWNrKFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVh
bWVyPiwgUmVmUHRyPFRyYWNrUHJpdmF0ZUJhc2U+LCBHc3RDYXBzKik7Ci0gICAgdm9pZCBub3Rp
ZnlEdXJhdGlvbkNoYW5nZWQoKTsKLQotICAgIC8vIEZyb20gTWVkaWFTb3VyY2VQcml2YXRlR1N0
cmVhbWVyLgotICAgIHZvaWQgbWFya0VuZE9mU3RyZWFtKE1lZGlhU291cmNlUHJpdmF0ZTo6RW5k
T2ZTdHJlYW1TdGF0dXMpOwotCi0gICAgLy8gRnJvbSBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVh
bWVyLgotICAgIHZvaWQgZmx1c2goQXRvbVN0cmluZyk7Ci0gICAgdm9pZCBlbnF1ZXVlU2FtcGxl
KFJlZjxNZWRpYVNhbXBsZT4mJik7Ci0gICAgdm9pZCBhbGxTYW1wbGVzSW5UcmFja0VucXVldWVk
KGNvbnN0IEF0b21TdHJpbmcmKTsKLQotICAgIEdzdEVsZW1lbnQqIHBpcGVsaW5lKCk7Ci1wcml2
YXRlOgotICAgIFBsYXliYWNrUGlwZWxpbmUoKSA9IGRlZmF1bHQ7Ci0gICAgR1JlZlB0cjxXZWJL
aXRNZWRpYVNyYz4gbV93ZWJLaXRNZWRpYVNyYzsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUuCi0KLSNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0
cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggYjE1ZmM0OTFlNGQ0NDVl
MzgwMTJlYjU2ZGY2OTM2ZTY1NzYyMjJkMi4uNzM0MjQzMjZkNzBmNDZkZjQ5ZjgwZjg0MWVkNDJm
NDdjMGQ0ZDY3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1NvdXJjZUJ1ZmZlclBy
aXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0zOCwxNSArMzgsMjIgQEAKICNpZiBFTkFCTEUoTUVESUFf
U09VUkNFKSAmJiBVU0UoR1NUUkVBTUVSKQogCiAjaW5jbHVkZSAiQXBwZW5kUGlwZWxpbmUuaCIK
KyNpbmNsdWRlICJBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgogI2luY2x1ZGUgIkNvbnRl
bnRUeXBlLmgiCiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjaW5jbHVkZSAiSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGVHU3Ry
ZWFtZXIuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaCIKICNp
bmNsdWRlICJNZWRpYVNhbXBsZS5oIgogI2luY2x1ZGUgIk1lZGlhU291cmNlUHJpdmF0ZUdTdHJl
YW1lci5oIgorI2luY2x1ZGUgIk1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXIuaCIKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXliYWNrUGlwZWxpbmUuaCIKKyNpbmNs
dWRlICJWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgogI2luY2x1ZGUgIldlYktpdE1lZGlh
U291cmNlR1N0cmVhbWVyLmgiCiAKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X21z
ZV9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfbXNlX2RlYnVnCisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogUmVmPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+IFNv
dXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShNZWRpYVNvdXJjZVByaXZhdGVHU3Ry
ZWFtZXIqIG1lZGlhU291cmNlLCBjb25zdCBDb250ZW50VHlwZSYgY29udGVudFR5cGUsIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSYgcGxheWVyUHJpdmF0ZSkKQEAgLTEwNSwxMCArMTEy
LDEwIEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVtb3ZlZEZyb21NZWRp
YVNvdXJjZSgpCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBjbGVhclRyYWNrQnVm
ZmVycygpOwogICAgIG1fbWVkaWFTb3VyY2UtPnJlbW92ZVNvdXJjZUJ1ZmZlcih0aGlzKTsKLSAg
ICBtX3BsYXllclByaXZhdGUucGxheWJhY2tQaXBlbGluZSgpLT5yZW1vdmVTb3VyY2VCdWZmZXIo
dGhpcyk7Ci0gICAgLy8gQWZ0ZXIgdGhpcyBvbmx5IFNvdXJjZUJ1ZmZlciBzaG91bGQgaG9sZCBh
IHJlZmVyZW5jZSB0byB1cywgd2hpY2ggd2lsbCBiZSBkZXN0cm95ZWQgZXZlbnR1YWxseSAod2hl
biBKUwotICAgIC8vIEdDIHJlbGVhc2VzIHRoZSBsYXN0IHJlZmVyZW5jZSkuIFVudGlsIHRoZW4g
U291cmNlQnVmZmVyIGlzIGluICJyZW1vdmVkIiBzdGF0ZSBhbmQgd29uJ3QgdXNlIFNvdXJjZUJ1
ZmZlclByaXZhdGUuCi0gICAgQVNTRVJUKHJlZkNvdW50KCkgPT0gMSk7CisKKyAgICBmb3IgKGF1
dG8mIHRyYWNrIDogbV90cmFja3MudmFsdWVzKCkpCisgICAgICAgIHRyYWNrLT5yZW1vdmUoKTsK
KyAgICBtX2hhc0JlZW5SZW1vdmVkRnJvbU1lZGlhU291cmNlID0gdHJ1ZTsKIH0KIAogTWVkaWFQ
bGF5ZXI6OlJlYWR5U3RhdGUgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVhZHlTdGF0
ZSgpIGNvbnN0CkBAIC0xMjYsNDEgKzEzMyw2MyBAQCB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVH
U3RyZWFtZXI6OmZsdXNoKGNvbnN0IEF0b21TdHJpbmcmIHRyYWNrSWQpCiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKIAogICAgIC8vIFRoaXMgaXMgb25seSBmb3Igb24tdGhlLWZseSByZWVu
cXVldWVzIGFmdGVyIGFwcGVuZHMuIFdoZW4gc2Vla2luZywgdGhlIHNlZWsgd2lsbCBkbyBpdHMg
b3duIGZsdXNoLgotICAgIGlmICghbV9wbGF5ZXJQcml2YXRlLnNlZWtpbmcoKSkKLSAgICAgICAg
bV9wbGF5ZXJQcml2YXRlLnBsYXliYWNrUGlwZWxpbmUoKS0+Zmx1c2godHJhY2tJZCk7Ci19CiAK
LXZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5xdWV1ZVNhbXBsZShSZWY8TWVk
aWFTYW1wbGU+JiYgc2FtcGxlLCBjb25zdCBBdG9tU3RyaW5nJikKLXsKLSAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotICAgIG1fbm90aWZ5V2hlblJlYWR5Rm9yTW9yZVNhbXBsZXMgPSBmYWxz
ZTsKKyAgICBpZiAoIW1fcGxheWVyUHJpdmF0ZS5oYXNBbGxUcmFja3MoKSkgeworICAgICAgICAv
LyBTb3VyY2UgZWxlbWVudCBoYXMgbm90IGVtaXR0ZWQgdHJhY2tzIHlldCwgc28gd2Ugb25seSBu
ZWVkIHRvIGNsZWFyIHRoZSBxdWV1ZS4KKyAgICAgICAgTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1l
ciogdHJhY2sgPSBtX3RyYWNrcy5nZXQodHJhY2tJZCk7CisgICAgICAgIHRyYWNrLT5jbGVhclF1
ZXVlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBtX3BsYXllclByaXZhdGUucGxh
eWJhY2tQaXBlbGluZSgpLT5lbnF1ZXVlU2FtcGxlKFdURk1vdmUoc2FtcGxlKSk7CisgICAgLy8g
U291cmNlIGVsZW1lbnQgaGFzIGVtaXR0ZWQgdHJhY2tzLCBsZXQgaXQgaGFuZGxlIHRoZSBmbHVz
aCwgd2hpY2ggbWF5IGNhdXNlIGEgcGlwZWxpbmUgZmx1c2ggYXMgd2VsbC4KKyAgICB3ZWJLaXRN
ZWRpYVNyY0ZsdXNoKG1fcGxheWVyUHJpdmF0ZS53ZWJLaXRNZWRpYVNyYygpLCB0cmFja0lkKTsK
IH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjphbGxTYW1wbGVzSW5UcmFj
a0VucXVldWVkKGNvbnN0IEF0b21TdHJpbmcmIHRyYWNrSWQpCit2b2lkIFNvdXJjZUJ1ZmZlclBy
aXZhdGVHU3RyZWFtZXI6OmVucXVldWVTYW1wbGUoUmVmPE1lZGlhU2FtcGxlPiYmIHNhbXBsZSwg
Y29uc3QgQXRvbVN0cmluZyYgdHJhY2tJZCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgIG1fcGxheWVyUHJpdmF0ZS5wbGF5YmFja1BpcGVsaW5lKCktPmFsbFNhbXBsZXNJblRy
YWNrRW5xdWV1ZWQodHJhY2tJZCk7CisKKyAgICBHU1RfVFJBQ0UoImVucXVlaW5nIHNhbXBsZSB0
cmFja0lkPSVzIFBUUz0lZiBwcmVzZW50YXRpb25TaXplPSUuMGZ4JS4wZiBhdCAlIiBHU1RfVElN
RV9GT1JNQVQgIiBkdXJhdGlvbjogJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgICB0cmFja0lk
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHNhbXBsZS0+cHJlc2VudGF0aW9uVGltZSgpLnRvRmxv
YXQoKSwKKyAgICAgICAgc2FtcGxlLT5wcmVzZW50YXRpb25TaXplKCkud2lkdGgoKSwgc2FtcGxl
LT5wcmVzZW50YXRpb25TaXplKCkuaGVpZ2h0KCksCisgICAgICAgIEdTVF9USU1FX0FSR1MoV2Vi
Q29yZTo6dG9Hc3RDbG9ja1RpbWUoc2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCkpKSwKKyAgICAg
ICAgR1NUX1RJTUVfQVJHUyhXZWJDb3JlOjp0b0dzdENsb2NrVGltZShzYW1wbGUtPmR1cmF0aW9u
KCkpKSk7CisKKyAgICBHUmVmUHRyPEdzdFNhbXBsZT4gZ3N0U2FtcGxlID0gc2FtcGxlLT5wbGF0
Zm9ybVNhbXBsZSgpLnNhbXBsZS5nc3RTYW1wbGU7CisgICAgQVNTRVJUKGdzdFNhbXBsZSk7Cisg
ICAgQVNTRVJUKGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihnc3RTYW1wbGUuZ2V0KCkpKTsKKworICAg
IE1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXIqIHRyYWNrID0gbV90cmFja3MuZ2V0KHRyYWNrSWQp
OworICAgIHRyYWNrLT5lbnF1ZXVlT2JqZWN0KGFkb3B0R1JlZihHU1RfTUlOSV9PQkpFQ1QoZ3N0
U2FtcGxlLmxlYWtSZWYoKSkpKTsKIH0KIAotYm9vbCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVh
bWVyOjppc1JlYWR5Rm9yTW9yZVNhbXBsZXMoY29uc3QgQXRvbVN0cmluZyYpCitib29sIFNvdXJj
ZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OmlzUmVhZHlGb3JNb3JlU2FtcGxlcyhjb25zdCBBdG9t
U3RyaW5nJiB0cmFja0lkKQogewotICAgIHJldHVybiBtX2lzUmVhZHlGb3JNb3JlU2FtcGxlczsK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIE1lZGlhU291cmNlVHJhY2tHU3RyZWFt
ZXIqIHRyYWNrID0gbV90cmFja3MuZ2V0KHRyYWNrSWQpOworICAgIGJvb2wgcmV0ID0gdHJhY2st
PmlzUmVhZHlGb3JNb3JlU2FtcGxlcygpOworICAgIEdTVF9UUkFDRSgiU291cmNlQnVmZmVyUHJp
dmF0ZSglcCkgLSBpc1JlYWR5Rm9yTW9yZVNhbXBsZXM6ICVzIiwgdGhpcywgYm9vbEZvclByaW50
aW5nKHJldCkpOworICAgIHJldHVybiByZXQ7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUHJpdmF0
ZUdTdHJlYW1lcjo6c2V0UmVhZHlGb3JNb3JlU2FtcGxlcyhib29sIGlzUmVhZHkpCit2b2lkIFNv
dXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeUNsaWVudFdoZW5SZWFkeUZvck1vcmVT
YW1wbGVzKGNvbnN0IEF0b21TdHJpbmcmIHRyYWNrSWQpCiB7Ci0gICAgQVNTRVJUKFdURjo6aXNN
YWluVGhyZWFkKCkpOwotICAgIG1faXNSZWFkeUZvck1vcmVTYW1wbGVzID0gaXNSZWFkeTsKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIE1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXIq
IHRyYWNrID0gbV90cmFja3MuZ2V0KHRyYWNrSWQpOworICAgIHRyYWNrLT5ub3RpZnlXaGVuUmVh
ZHlGb3JNb3JlU2FtcGxlcyhbcHJvdGVjdG9yID0gbWFrZVJlZigqdGhpcyksIHRoaXMsIHRyYWNr
SWRdKCkgbXV0YWJsZSB7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVj
dG9yID0gV1RGTW92ZShwcm90ZWN0b3IpLCB0aGlzLCB0cmFja0lkXSgpIHsKKyAgICAgICAgICAg
IGlmICghbV9oYXNCZWVuUmVtb3ZlZEZyb21NZWRpYVNvdXJjZSkKKyAgICAgICAgICAgICAgICBw
cm92aWRlTWVkaWFEYXRhKHRyYWNrSWQpOworICAgICAgICB9KTsKKyAgICB9KTsKIH0KIAotdm9p
ZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlSZWFkeUZvck1vcmVTYW1wbGVz
KCkKK3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6YWxsU2FtcGxlc0luVHJhY2tF
bnF1ZXVlZChjb25zdCBBdG9tU3RyaW5nJiB0cmFja0lkKQogewotICAgIEFTU0VSVChXVEY6Omlz
TWFpblRocmVhZCgpKTsKLSAgICBzZXRSZWFkeUZvck1vcmVTYW1wbGVzKHRydWUpOwotICAgIGlm
IChtX25vdGlmeVdoZW5SZWFkeUZvck1vcmVTYW1wbGVzKQotICAgICAgICBwcm92aWRlTWVkaWFE
YXRhKG1fdHJhY2tJZCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBHU1RfREVC
VUcoIkVucXVldWVpbmcgRU9TIGZvciB0cmFjayAnJXMnIiwgdHJhY2tJZC5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKKyAgICBNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyKiB0cmFjayA9IG1fdHJh
Y2tzLmdldCh0cmFja0lkKTsKKyAgICB0cmFjay0+ZW5xdWV1ZU9iamVjdChhZG9wdEdSZWYoR1NU
X01JTklfT0JKRUNUKGdzdF9ldmVudF9uZXdfZW9zKCkpKSk7CiB9CiAKIHZvaWQgU291cmNlQnVm
ZmVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0QWN0aXZlKGJvb2wgaXNBY3RpdmUpCkBAIC0xNzQsMTUg
KzIwMywyNyBAQCBib29sIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OmlzQWN0aXZlKCkg
Y29uc3QKICAgICByZXR1cm4gbV9pc0FjdGl2ZTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQcml2
YXRlR1N0cmVhbWVyOjpub3RpZnlDbGllbnRXaGVuUmVhZHlGb3JNb3JlU2FtcGxlcyhjb25zdCBB
dG9tU3RyaW5nJiB0cmFja0lkKQotewotICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsK
LSAgICBtX25vdGlmeVdoZW5SZWFkeUZvck1vcmVTYW1wbGVzID0gdHJ1ZTsKLSAgICBtX3RyYWNr
SWQgPSB0cmFja0lkOwotfQotCiB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OmRp
ZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6
SW5pdGlhbGl6YXRpb25TZWdtZW50JiYgaW5pdGlhbGl6YXRpb25TZWdtZW50LCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CisgICAgbV9oYXNSZWNlaXZl
ZEluaXRpYWxpemF0aW9uU2VnbWVudCA9IHRydWU7CisgICAgZm9yIChhdXRvJiB0cmFja0luZm8g
OiBpbml0aWFsaXphdGlvblNlZ21lbnQudmlkZW9UcmFja3MpIHsKKyAgICAgICAgR1JlZlB0cjxH
c3RDYXBzPiBpbml0aWFsQ2FwcyA9IHN0YXRpY19jYXN0PFZpZGVvVHJhY2tQcml2YXRlR1N0cmVh
bWVyKj4odHJhY2tJbmZvLnRyYWNrLmdldCgpKS0+aW5pdGlhbENhcHMoKTsKKyAgICAgICAgQVNT
RVJUKGluaXRpYWxDYXBzKTsKKyAgICAgICAgbV90cmFja3MuYWRkKHRyYWNrSW5mby50cmFjay0+
aWQoKSwgTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcjo6Y3JlYXRlKFRyYWNrUHJpdmF0ZUJhc2VH
U3RyZWFtZXI6OlRyYWNrVHlwZTo6VmlkZW8sIHRyYWNrSW5mby50cmFjay0+aWQoKSwgV1RGTW92
ZShpbml0aWFsQ2FwcykpKTsKKyAgICB9CisgICAgZm9yIChhdXRvJiB0cmFja0luZm8gOiBpbml0
aWFsaXphdGlvblNlZ21lbnQuYXVkaW9UcmFja3MpIHsKKyAgICAgICAgR1JlZlB0cjxHc3RDYXBz
PiBpbml0aWFsQ2FwcyA9IHN0YXRpY19jYXN0PEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyKj4o
dHJhY2tJbmZvLnRyYWNrLmdldCgpKS0+aW5pdGlhbENhcHMoKTsKKyAgICAgICAgQVNTRVJUKGlu
aXRpYWxDYXBzKTsKKyAgICAgICAgbV90cmFja3MuYWRkKHRyYWNrSW5mby50cmFjay0+aWQoKSwg
TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcjo6Y3JlYXRlKFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFt
ZXI6OlRyYWNrVHlwZTo6QXVkaW8sIHRyYWNrSW5mby50cmFjay0+aWQoKSwgV1RGTW92ZShpbml0
aWFsQ2FwcykpKTsKKyAgICB9CisgICAgZm9yIChhdXRvJiB0cmFja0luZm8gOiBpbml0aWFsaXph
dGlvblNlZ21lbnQudGV4dFRyYWNrcykgeworICAgICAgICBHUmVmUHRyPEdzdENhcHM+IGluaXRp
YWxDYXBzID0gc3RhdGljX2Nhc3Q8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcio+KHRy
YWNrSW5mby50cmFjay5nZXQoKSktPmluaXRpYWxDYXBzKCk7CisgICAgICAgIEFTU0VSVChpbml0
aWFsQ2Fwcyk7CisgICAgICAgIG1fdHJhY2tzLmFkZCh0cmFja0luZm8udHJhY2stPmlkKCksIE1l
ZGlhU291cmNlVHJhY2tHU3RyZWFtZXI6OmNyZWF0ZShUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVy
OjpUcmFja1R5cGU6OlRleHQsIHRyYWNrSW5mby50cmFjay0+aWQoKSwgV1RGTW92ZShpbml0aWFs
Q2FwcykpKTsKKyAgICB9CisKKyAgICBtX21lZGlhU291cmNlLT5zdGFydFBsYXliYWNrSWZIYXNB
bGxUcmFja3MoKTsKKwogICAgIFNvdXJjZUJ1ZmZlclByaXZhdGU6OmRpZFJlY2VpdmVJbml0aWFs
aXphdGlvblNlZ21lbnQoV1RGTW92ZShpbml0aWFsaXphdGlvblNlZ21lbnQpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Tb3VyY2VC
dWZmZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggY2MyYWNjMDU3Y2I0YThkODlmMDZmOGI3MTE2
MzFjMDZlYjBlYmQ5MC4uZjFiMGU5NzE0MWM3NDI5ZTQ2YmExNGMxNTk1NGYxYWNlY2E2MzI3ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21z
ZS9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVy
LmgKQEAgLTQwLDEyICs0MCwxNSBAQAogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRS5oIgogI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGUuaCIKICNpbmNsdWRlICJT
b3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LmgiCisjaW5jbHVkZSAiVHJhY2tQcml2YXRlQmFzZUdT
dHJlYW1lci5oIgogI2luY2x1ZGUgIldlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmgiCiAjaW5j
bHVkZSA8d3RmL0xvZ2dlckhlbHBlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNz
IEFwcGVuZFBpcGVsaW5lOwogY2xhc3MgTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyOworY2xh
c3MgTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcjsKIAogY2xhc3MgU291cmNlQnVmZmVyUHJpdmF0
ZUdTdHJlYW1lciBmaW5hbCA6IHB1YmxpYyBTb3VyY2VCdWZmZXJQcml2YXRlIHsKIHB1YmxpYzoK
QEAgLTY3LDEwICs3MCw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzUmVhZHlGb3JNb3JlU2FtcGxl
cyhjb25zdCBBdG9tU3RyaW5nJikgZmluYWw7CiAgICAgdm9pZCBzZXRBY3RpdmUoYm9vbCkgZmlu
YWw7CiAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgbm90aWZ5Q2xp
ZW50V2hlblJlYWR5Rm9yTW9yZVNhbXBsZXMoY29uc3QgQXRvbVN0cmluZyYpIGZpbmFsOwotCi0g
ICAgdm9pZCBzZXRSZWFkeUZvck1vcmVTYW1wbGVzKGJvb2wpOwotICAgIHZvaWQgbm90aWZ5UmVh
ZHlGb3JNb3JlU2FtcGxlcygpOwogCiAgICAgdm9pZCBkaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25T
ZWdtZW50KFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudCYm
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgZGlkUmVjZWl2ZVNhbXBs
ZShSZWY8TWVkaWFTYW1wbGU+JiYpOwpAQCAtODEsNiArODAsOSBAQCBwdWJsaWM6CiAgICAgTWVk
aWFUaW1lIGN1cnJlbnRNZWRpYVRpbWUoKSBjb25zdCBmaW5hbDsKICAgICBNZWRpYVRpbWUgZHVy
YXRpb24oKSBjb25zdCBmaW5hbDsKIAorICAgIGJvb2wgaGFzUmVjZWl2ZWRJbml0aWFsaXphdGlv
blNlZ21lbnQoKSBjb25zdCB7IHJldHVybiBtX2hhc1JlY2VpdmVkSW5pdGlhbGl6YXRpb25TZWdt
ZW50OyB9CisgICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBSZWZQdHI8TWVkaWFTb3VyY2VUcmFja0dT
dHJlYW1lcj4+OjpWYWx1ZXNJdGVyYXRvclJhbmdlIHRyYWNrcygpIHsgcmV0dXJuIG1fdHJhY2tz
LnZhbHVlcygpOyB9CisKICAgICBDb250ZW50VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9CiAKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKQEAgLTk1LDE0ICs5NywxOCBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIoTWVkaWFT
b3VyY2VQcml2YXRlR1N0cmVhbWVyKiwgY29uc3QgQ29udGVudFR5cGUmLCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJNU0UmKTsKIAorICAgIHZvaWQgbm90aWZ5Q2xpZW50V2hlblJlYWR5Rm9y
TW9yZVNhbXBsZXMoY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOworCiAgICAgTWVkaWFTb3Vy
Y2VQcml2YXRlR1N0cmVhbWVyKiBtX21lZGlhU291cmNlOwogICAgIGJvb2wgbV9pc0FjdGl2ZSB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc0JlZW5SZW1vdmVkRnJvbU1lZGlhU291cmNlIHsgZmFs
c2UgfTsKICAgICBDb250ZW50VHlwZSBtX3R5cGU7CiAgICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFJiBtX3BsYXllclByaXZhdGU7CiAgICAgVW5pcXVlUmVmPEFwcGVuZFBpcGVsaW5l
PiBtX2FwcGVuZFBpcGVsaW5lOwotICAgIGJvb2wgbV9pc1JlYWR5Rm9yTW9yZVNhbXBsZXMgPSB0
cnVlOwotICAgIGJvb2wgbV9ub3RpZnlXaGVuUmVhZHlGb3JNb3JlU2FtcGxlcyA9IGZhbHNlOwor
ICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQqIG1fc291cmNlQnVmZmVyUHJpdmF0ZUNsaWVu
dCB7IG51bGxwdHIgfTsKICAgICBBdG9tU3RyaW5nIG1fdHJhY2tJZDsKKyAgICBIYXNoTWFwPEF0
b21TdHJpbmcsIFJlZlB0cjxNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyPj4gbV90cmFja3M7Cisg
ICAgYm9vbCBtX2hhc1JlY2VpdmVkSW5pdGlhbGl6YXRpb25TZWdtZW50IHsgZmFsc2UgfTsKIAog
I2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgIFJlZjxjb25zdCBMb2dnZXI+IG1fbG9nZ2Vy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L21zZS9UcmFja1F1ZXVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9tc2UvVHJhY2tRdWV1ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjZhYmNhNDU0NTNhNjUxMjMz
NDFjOTA0NjkwYmIwNzZlODQ5NzkyYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvVHJhY2tRdWV1ZS5jcHAKQEAgLTAsMCAr
MSwxNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjEgTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMSBJZ2FsaWEsIFMuTAorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJUcmFja1F1ZXVlLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU09V
UkNFKSAmJiBVU0UoR1NUUkVBTUVSKQorCitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtp
dF9tc2VfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X21zZV9kZWJ1Zwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1RyYWNrUXVldWU6OlRyYWNrUXVldWUoQXRvbVN0cmlu
ZyB0cmFja0lkKQorICAgIDogbV90cmFja0lkKHRyYWNrSWQpCit7IH0KKwordm9pZCBUcmFja1F1
ZXVlOjplbnF1ZXVlT2JqZWN0KEdSZWZQdHI8R3N0TWluaU9iamVjdD4mJiBvYmplY3QpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoR1NUX0lTX1NBTVBMRShvYmpl
Y3QuZ2V0KCkpIHx8IEdTVF9JU19FVkVOVChvYmplY3QuZ2V0KCkpKTsKKworICAgIEdTVF9UUkFD
RSgiVHJhY2tRdWV1ZSBmb3IgJyVzJzogUHV0dGluZyBvYmplY3QgaW4gdGhlIHF1ZXVlOiAlIiBH
U1RfUFRSX0ZPUk1BVCAiLiBub3RFbXB0eUNhbGxiYWNrIGN1cnJlbnRseSAlcy4iLCBtX3RyYWNr
SWQuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgb2JqZWN0LmdldCgpLCBtX25vdEVtcHR5Q2FsbGJh
Y2sgPyAic2V0LCB3aWxsIGJlIGNhbGxlZCIgOiAidW5zZXQiKTsKKyAgICBpZiAoIW1fbm90RW1w
dHlDYWxsYmFjaykKKyAgICAgICAgbV9xdWV1ZS5hcHBlbmQoV1RGTW92ZShvYmplY3QpKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgLy8gSWYgYSBsb3cgbGV2ZWwgY2FsbGJhY2sgd2FzIGV2ZXIgc2V0
LCBpdCBoYWQgdG8gYmUgZGlzcGF0Y2hlZCB3aGVuIHRoZSBxdWV1ZSB3YXMgZW1wdHkgYXQgbGF0
ZXN0LgorICAgICAgICBBU1NFUlQoIW1fbG93TGV2ZWxDYWxsYmFjayk7CisKKyAgICAgICAgTm90
RW1wdHlIYW5kbGVyIG5vdEVtcHR5Q2FsbGJhY2s7CisgICAgICAgIHN0ZDo6c3dhcChub3RFbXB0
eUNhbGxiYWNrLCBtX25vdEVtcHR5Q2FsbGJhY2spOworICAgICAgICBub3RFbXB0eUNhbGxiYWNr
KFdURk1vdmUob2JqZWN0KSk7CisgICAgfQorfQorCit2b2lkIFRyYWNrUXVldWU6OmNsZWFyKCkK
K3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIG1fcXVldWUuY2xlYXIoKTsKKyAg
ICBHU1RfREVCVUcoIlRyYWNrUXVldWUgZm9yICclcyc6IEVtcHRpZWQuIiwgbV90cmFja0lkLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIC8vIE5vdGlmeSBtYWluIHRocmVhZCBvZiBsb3cg
bGV2ZWwgcmVhY2hlZCBpZiBpdCBwcm9jZWVkcy4KKyAgICBjaGVja0xvd0xldmVsKCk7Cit9CisK
K3ZvaWQgVHJhY2tRdWV1ZTo6Zmx1c2goKQoreworICAgIGNsZWFyKCk7CisgICAgLy8gSWYgdGhl
cmUgd2FzIGEgY2FsbGJhY2sgaW4gdGhlIHN0cmVhbWluZyB0aHJlYWQgd2FpdGluZyBmb3IgYSBz
YW1wbGUgdG8gYmUgYWRkZWQsIGNhbmNlbCBpdC4KKyAgICBpZiAobV9ub3RFbXB0eUNhbGxiYWNr
KSB7CisgICAgICAgIG1fbm90RW1wdHlDYWxsYmFjayA9IG51bGxwdHI7CisgICAgICAgIEdTVF9E
RUJVRygiVHJhY2tRdWV1ZSBmb3IgJyVzJzogbm90RW1wdHlDYWxsYmFjayB1bnNldC4iLCBtX3Ry
YWNrSWQuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgfQorfQorCit2b2lkIFRyYWNrUXVl
dWU6Om5vdGlmeVdoZW5Mb3dMZXZlbChMb3dMZXZlbEhhbmRsZXImJiBsb3dMZXZlbENhbGxiYWNr
KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgR1NUX1RSQUNFKCJUcmFja1F1
ZXVlIGZvciAnJXMnOiBTZXR0aW5nIGxvd0xldmVsQ2FsbGJhY2slcy4iLCBtX3RyYWNrSWQuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgbV9sb3dMZXZlbENhbGxiYWNrID8gIiAocHJl
dmlvdXMgY2FsbGJhY2sgd2lsbCBiZSBkaXNjYXJkZWQpIiA6ICIiKTsKKyAgICBtX2xvd0xldmVs
Q2FsbGJhY2sgPSBXVEZNb3ZlKGxvd0xldmVsQ2FsbGJhY2spOworICAgIGNoZWNrTG93TGV2ZWwo
KTsKK30KKworR1JlZlB0cjxHc3RNaW5pT2JqZWN0PiBUcmFja1F1ZXVlOjpwb3AoKQoreworICAg
IEFTU0VSVCghaXNFbXB0eSgpKTsKKyAgICBHUmVmUHRyPEdzdE1pbmlPYmplY3Q+IG9iamVjdCA9
IG1fcXVldWUudGFrZUZpcnN0KCk7CisgICAgY2hlY2tMb3dMZXZlbCgpOworICAgIHJldHVybiBv
YmplY3Q7Cit9CisKK3ZvaWQgVHJhY2tRdWV1ZTo6bm90aWZ5V2hlbk5vdEVtcHR5KE5vdEVtcHR5
SGFuZGxlciYmIG5vdEVtcHR5Q2FsbGJhY2spCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7CisgICAgQVNTRVJUKCFtX25vdEVtcHR5Q2FsbGJhY2spOworICAgIG1fbm90RW1wdHlDYWxs
YmFjayA9IFdURk1vdmUobm90RW1wdHlDYWxsYmFjayk7CisgICAgR1NUX1RSQUNFKCJUcmFja1F1
ZXVlIGZvciAnJXMnOiBub3RFbXB0eUNhbGxiYWNrIHNldC4iLCBtX3RyYWNrSWQuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgVHJhY2tRdWV1ZTo6cmVzZXROb3RFbXB0eUhhbmRs
ZXIoKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghbV9ub3RFbXB0
eUNhbGxiYWNrKQorICAgICAgICByZXR1cm47CisgICAgbV9ub3RFbXB0eUNhbGxiYWNrID0gbnVs
bHB0cjsKKyAgICBHU1RfVFJBQ0UoIlRyYWNrUXVldWUgZm9yICclcyc6IG5vdEVtcHR5Q2FsbGJh
Y2sgcmVzZXQuIiwgbV90cmFja0lkLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lk
IFRyYWNrUXVldWU6OmNoZWNrTG93TGV2ZWwoKQoreworICAgIGlmICghbV9sb3dMZXZlbENhbGxi
YWNrIHx8IGR1cmF0aW9uRW5xdWV1ZWQoKSA+IHNfZHVyYXRpb25FbnF1ZXVlZExvd1dhdGVyTGV2
ZWwpCisgICAgICAgIHJldHVybjsKKworICAgIExvd0xldmVsSGFuZGxlciBsb3dMZXZlbENhbGxi
YWNrOworICAgIHN0ZDo6c3dhcChsb3dMZXZlbENhbGxiYWNrLCBtX2xvd0xldmVsQ2FsbGJhY2sp
OworICAgIEdTVF9UUkFDRSgiVHJhY2tRdWV1ZSBmb3IgJyVzJzogbG93TGV2ZWxDYWxsYmFjayBj
YWxsZWQuIiwgbV90cmFja0lkLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGxvd0xldmVs
Q2FsbGJhY2soKTsKK30KKworR3N0Q2xvY2tUaW1lIFRyYWNrUXVldWU6OmR1cmF0aW9uRW5xdWV1
ZWQoKSBjb25zdAoreworICAgIC8vIEZpbmQgdGhlIGZpcnN0IGFuZCBsYXN0IEdzdFNhbXBsZSBp
biB0aGUgcXVldWUgYW5kIHN1YnRyYWN0IHRoZWlyIERUUy4KKworICAgIGF1dG8gZnJvbnRJdGVy
ID0gc3RkOjpmaW5kX2lmKG1fcXVldWUuYmVnaW4oKSwgbV9xdWV1ZS5lbmQoKSwgW10oY29uc3Qg
R1JlZlB0cjxHc3RNaW5pT2JqZWN0PiYgb2JqZWN0KSB7CisgICAgICAgIHJldHVybiBHU1RfSVNf
U0FNUExFKG9iamVjdC5nZXQoKSk7CisgICAgfSk7CisKKyAgICAvLyBJZiB0aGVyZSBhcmUgbm8g
c2FtcGxlcyBpbiB0aGUgcXVldWUsIHRoYXQgbWFrZXMgdG90YWwgZHVyYXRpb24gb2YgZW5xdWV1
ZWQgZnJhbWVzIG9mIHplcm8uCisgICAgaWYgKGZyb250SXRlciA9PSBtX3F1ZXVlLmVuZCgpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGF1dG8gYmFja0l0ZXIgPSBzdGQ6OmZpbmRfaWYobV9x
dWV1ZS5yYmVnaW4oKSwgbV9xdWV1ZS5yZW5kKCksIFtdKGNvbnN0IEdSZWZQdHI8R3N0TWluaU9i
amVjdD4mIG9iamVjdCkgeworICAgICAgICByZXR1cm4gR1NUX0lTX1NBTVBMRShvYmplY3QuZ2V0
KCkpOworICAgIH0pOworCisgICAgY29uc3QgR3N0QnVmZmVyKiBmcm9udCA9IGdzdF9zYW1wbGVf
Z2V0X2J1ZmZlcihHU1RfU0FNUExFKGZyb250SXRlci0+Z2V0KCkpKTsKKyAgICBjb25zdCBHc3RC
dWZmZXIqIGJhY2sgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIoR1NUX1NBTVBMRShiYWNrSXRlci0+
Z2V0KCkpKTsKKyAgICByZXR1cm4gR1NUX0JVRkZFUl9EVFNfT1JfUFRTKGJhY2spIC0gR1NUX0JV
RkZFUl9EVFNfT1JfUFRTKGZyb250KTsKK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1RyYWNrUXVldWUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvVHJhY2tRdWV1
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjQzNmI2NmEwODMxZGZhMDUzZTM5YjM0NGYxOTM4ODNlNmFlZWUzZDkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvbXNlL1RyYWNrUXVldWUuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwLCAyMDIxIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAsIDIwMjEgSWdhbGlhLCBTLkwKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TT1VS
Q0UpICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKKyNp
bmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFRyYWNrUXVldWUgeworcHVibGljOgorICAgIFRyYWNrUXVldWUo
QXRvbVN0cmluZyB0cmFja0lkKTsKKworICAgIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkKEdS
ZWZQdHI8R3N0TWluaU9iamVjdD4mJik+IE5vdEVtcHR5SGFuZGxlcjsKKyAgICB0eXBlZGVmIHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiBMb3dMZXZlbEhhbmRsZXI7CisKKyAgICAvLyBOb3RlOiBUaGUg
VHJhY2tRdWV1ZSBtZXRob2RzIGFyZSBub3QgdGhyZWFkLXNhZmUuIFRyYWNrUXVldWUgbXVzdCBh
bHdheXMgYmUgd3JhcHBlZCBpbiBhIERhdGFNdXRleDw+LgorCisgICAgLy8gRm9yIHByb2R1Y2Vy
IHRocmVhZCAobWFpbi10aHJlYWQpOgorICAgIHZvaWQgZW5xdWV1ZU9iamVjdChHUmVmUHRyPEdz
dE1pbmlPYmplY3Q+JiYpOworICAgIGJvb2wgaXNGdWxsKCkgY29uc3QgeyByZXR1cm4gZHVyYXRp
b25FbnF1ZXVlZCgpID49IHNfZHVyYXRpb25FbnF1ZXVlZEhpZ2hXYXRlckxldmVsOyB9CisgICAg
dm9pZCBub3RpZnlXaGVuTG93TGV2ZWwoTG93TGV2ZWxIYW5kbGVyJiYpOworICAgIHZvaWQgY2xl
YXIoKTsKKyAgICB2b2lkIGZsdXNoKCk7CisKKyAgICAvLyBGb3IgY29uc3VtZXIgdGhyZWFkOgor
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcXVldWUuaXNFbXB0eSgpOyB9Cisg
ICAgR1JlZlB0cjxHc3RNaW5pT2JqZWN0PiBwb3AoKTsKKyAgICB2b2lkIG5vdGlmeVdoZW5Ob3RF
bXB0eShOb3RFbXB0eUhhbmRsZXImJik7CisgICAgYm9vbCBoYXNOb3RFbXB0eUhhbmRsZXIoKSBj
b25zdCB7IHJldHVybiBtX25vdEVtcHR5Q2FsbGJhY2sgIT0gbnVsbHB0cjsgfQorICAgIHZvaWQg
cmVzZXROb3RFbXB0eUhhbmRsZXIoKTsKKworcHJpdmF0ZToKKyAgICAvLyBUaGUgcG9pbnQgb2Yg
aGF2aW5nIGEgcXVldWUgZm9yIFdlYktpdE1lZGlhU291cmNlIGlzIHRvIGxpbWl0IHRoZSBudW1i
ZXIgb2YgY29udGV4dCBzd2l0Y2hlcyBwZXIgc2Vjb25kLgorICAgIC8vIElmIHdlIGhhZCBubyBx
dWV1ZSwgdGhlIG1haW4gdGhyZWFkIHdvdWxkIGhhdmUgdG8gYmUgYXdha2VuIGZvciBldmVyeSBm
cmFtZS4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZQorICAgIC8vIHF1ZXVlIGhhZCB1bmxpbWl0
ZWQgc2l6ZSBXZWJLaXQgd291bGQgZW5kIHVwIHJlcXVlc3RpbmcgZmx1c2hlcyBtb3JlIG9mdGVu
IHRoYW4gbmVjZXNzYXJ5IHdoZW4gZnJhbWVzCisgICAgLy8gaW4gdGhlIGZ1dHVyZSBhcmUgcmUt
YXBwZW5kZWQuIEFzIGEgc3dlZXQgc3BvdCBiZXR3ZWVuIHRoZXNlIGV4dHJlbWVzIHdlIGNob29z
ZSB0byBhbGxvdyBlbnF1ZXVlaW5nIGEKKyAgICAvLyBmZXcgc2Vjb25kcyB3b3J0aCBvZiBzYW1w
bGVzLgorCisgICAgLy8gYGlzUmVhZHlGb3JNb3JlU2FtcGxlc2AgZm9sbG93cyB0aGUgY2xhc3Np
Y2FsIHR3byB3YXRlciBsZXZlbHMgc3RyYXRlZ3k6IGluaXRpYWxseSBpdCdzIHRydWUgdW50aWwg
dGhlCisgICAgLy8gaGlnaCB3YXRlciBsZXZlbCBpcyByZWFjaGVkLCB0aGVuIGl0IGJlY29tZXMg
ZmFsc2UgdW50aWwgdGhlIHF1ZXVlIGRyYWlucyBkb3duIHRvIHRoZSBsb3cgd2F0ZXIgbGV2ZWwK
KyAgICAvLyBhbmQgdGhlIGN5Y2xlIHJlcGVhdHMuIFRoaXMgd2F5IHdlIGF2b2lkIHN0YWxscyBh
bmQgbWluaW1pemUgY29udGV4dCBzd2l0Y2hlcy4KKworICAgIHN0YXRpYyBjb25zdCBHc3RDbG9j
a1RpbWUgc19kdXJhdGlvbkVucXVldWVkSGlnaFdhdGVyTGV2ZWwgPSA1ICogR1NUX1NFQ09ORDsK
KyAgICBzdGF0aWMgY29uc3QgR3N0Q2xvY2tUaW1lIHNfZHVyYXRpb25FbnF1ZXVlZExvd1dhdGVy
TGV2ZWwgPSAyICogR1NUX1NFQ09ORDsKKworICAgIEdzdENsb2NrVGltZSBkdXJhdGlvbkVucXVl
dWVkKCkgY29uc3Q7CisgICAgdm9pZCBjaGVja0xvd0xldmVsKCk7CisKKyAgICBBdG9tU3RyaW5n
IG1fdHJhY2tJZDsKKyAgICBEZXF1ZTxHUmVmUHRyPEdzdE1pbmlPYmplY3Q+PiBtX3F1ZXVlOwor
ICAgIExvd0xldmVsSGFuZGxlciBtX2xvd0xldmVsQ2FsbGJhY2s7CisgICAgTm90RW1wdHlIYW5k
bGVyIG1fbm90RW1wdHlDYWxsYmFjazsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlh
U291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4IGRiODMxMjQ0
MmRmNWIwNTc1ZWMxY2MwZDk3NmNlZDNjMDNlNmRmNTkuLjY4NDU5OGZjYzhkZGVkZDQyOWNlMWM2
MDc4ZTRkMzhmNjY0YTY3NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVk
aWFTb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0zLDggKzMsOCBAQAogICogIENvcHlyaWdodCAoQykg
MjAxMyBDb2xsYWJvcmEgTHRkLgogICogIENvcHlyaWdodCAoQykgMjAxMyBPcmFuZ2UKICAqICBD
b3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRy
aWN1bGFyLmNvbT4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgSWdhbGlhLCBTLkwKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYsIDIwMTgsIDIwMTksIDIwMjAsIDIwMjEgTWV0cm9sb2dp
Y2FsIEdyb3VwIEIuVi4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYsIDIwMTgsIDIwMTks
IDIwMjAsIDIwMjEgSWdhbGlhLCBTLkwKICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDE5MSAr
MjQsMjM1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0TWVkaWFTb3Vy
Y2VHU3RyZWFtZXIuaCIKIAotI2luY2x1ZGUgIlBsYXliYWNrUGlwZWxpbmUuaCIKLQogI2lmIEVO
QUJMRShWSURFTykgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgVVNFKEdTVFJFQU1FUikKIAot
I2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiR1N0cmVh
bWVyQ29tbW9uLmgiCi0jaW5jbHVkZSAiTWVkaWFEZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIk1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5oIgotI2luY2x1ZGUgIk1lZGlhU2FtcGxlLmgi
Ci0jaW5jbHVkZSAiTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyLmgiCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmgi
Ci0jaW5jbHVkZSAiVGltZVJhbmdlcy5oIgorI2luY2x1ZGUgIk1lZGlhU291cmNlVHJhY2tHU3Ry
ZWFtZXIuaCIKICNpbmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgotI2luY2x1
ZGUgIldlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyUHJpdmF0ZS5oIgogCi0jaW5jbHVkZSA8Z3N0
L3BidXRpbHMvcGJ1dGlscy5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgorI2luY2x1
ZGUgPGdzdC9nc3QuaD4KICNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3Rm
L0RhdGFNdXRleC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZERhdGEuaD4KICNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9tU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2gu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKK3VzaW5nIG5hbWVzcGFjZSBXVEY7
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwogR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyh3
ZWJraXRfbWVkaWFfc3JjX2RlYnVnKTsKICNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9t
ZWRpYV9zcmNfZGVidWcKIAogI2RlZmluZSB3ZWJraXRfbWVkaWFfc3JjX3BhcmVudF9jbGFzcyBw
YXJlbnRfY2xhc3MKICNkZWZpbmUgV0VCS0lUX01FRElBX1NSQ19DQVRFR09SWV9JTklUIEdTVF9E
RUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9tZWRpYV9zcmNfZGVidWcsICJ3ZWJraXRtZWRpYXNy
YyIsIDAsICJ3ZWJzcmMgZWxlbWVudCIpOwogCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUg
c3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgic3JjXyV1IiwgR1NUX1BBRF9T
UkMsCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjVGVtcGxhdGUgPSBHU1RfU1RBVElD
X1BBRF9URU1QTEFURSgic3JjXyVzIiwgR1NUX1BBRF9TUkMsCiAgICAgR1NUX1BBRF9TT01FVElN
RVMsIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwogCi1zdGF0aWMgdm9pZCBlbmFibGVkQXBwc3JjTmVl
ZERhdGEoR3N0QXBwU3JjKiwgZ3VpbnQsIGdwb2ludGVyKTsKLXN0YXRpYyB2b2lkIGVuYWJsZWRB
cHBzcmNFbm91Z2hEYXRhKEdzdEFwcFNyYyosIGdwb2ludGVyKTsKLXN0YXRpYyBnYm9vbGVhbiBl
bmFibGVkQXBwc3JjU2Vla0RhdGEoR3N0QXBwU3JjKiwgZ3VpbnQ2NCwgZ3BvaW50ZXIpOwotCi1z
dGF0aWMgdm9pZCBkaXNhYmxlZEFwcHNyY05lZWREYXRhKEdzdEFwcFNyYyosIGd1aW50LCBncG9p
bnRlcikgeyB9Owotc3RhdGljIHZvaWQgZGlzYWJsZWRBcHBzcmNFbm91Z2hEYXRhKEdzdEFwcFNy
YyosIGdwb2ludGVyKSB7IH07Ci1zdGF0aWMgZ2Jvb2xlYW4gZGlzYWJsZWRBcHBzcmNTZWVrRGF0
YShHc3RBcHBTcmMqLCBndWludDY0LCBncG9pbnRlcikKLXsKLSAgICByZXR1cm4gRkFMU0U7Ci19
OwotCi1Hc3RBcHBTcmNDYWxsYmFja3MgZW5hYmxlZEFwcHNyY0NhbGxiYWNrcyA9IHsKLSAgICBl
bmFibGVkQXBwc3JjTmVlZERhdGEsCi0gICAgZW5hYmxlZEFwcHNyY0Vub3VnaERhdGEsCi0gICAg
ZW5hYmxlZEFwcHNyY1NlZWtEYXRhLAotICAgIHsgMCB9Ci19OwotCi1Hc3RBcHBTcmNDYWxsYmFj
a3MgZGlzYWJsZWRBcHBzcmNDYWxsYmFja3MgPSB7Ci0gICAgZGlzYWJsZWRBcHBzcmNOZWVkRGF0
YSwKLSAgICBkaXNhYmxlZEFwcHNyY0Vub3VnaERhdGEsCi0gICAgZGlzYWJsZWRBcHBzcmNTZWVr
RGF0YSwKLSAgICB7IDAgfQorZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfTl9BVURJTywK
KyAgICBQUk9QX05fVklERU8sCisgICAgUFJPUF9OX1RFWFQsCisgICAgUFJPUF9MQVNUCiB9Owog
Ci1zdGF0aWMgU3RyZWFtKiBnZXRTdHJlYW1CeUFwcHNyYyhXZWJLaXRNZWRpYVNyYyosIEdzdEVs
ZW1lbnQqKTsKLXN0YXRpYyB2b2lkIHNlZWtOZWVkc0RhdGFNYWluVGhyZWFkKFdlYktpdE1lZGlh
U3JjKik7Ci1zdGF0aWMgdm9pZCBub3RpZnlSZWFkeUZvck1vcmVTYW1wbGVzTWFpblRocmVhZChX
ZWJLaXRNZWRpYVNyYyosIFN0cmVhbSopOworc3RydWN0IFN0cmVhbTsKIAotc3RhdGljIHZvaWQg
ZW5hYmxlZEFwcHNyY05lZWREYXRhKEdzdEFwcFNyYyogYXBwc3JjLCBndWludCwgZ3BvaW50ZXIg
dXNlckRhdGEpCi17Ci0gICAgV2ViS2l0TWVkaWFTcmMqIHdlYktpdE1lZGlhU3JjID0gc3RhdGlj
X2Nhc3Q8V2ViS2l0TWVkaWFTcmMqPih1c2VyRGF0YSk7Ci0gICAgQVNTRVJUKFdFQktJVF9JU19N
RURJQV9TUkMod2ViS2l0TWVkaWFTcmMpKTsKLQotICAgIEdTVF9PQkpFQ1RfTE9DSyh3ZWJLaXRN
ZWRpYVNyYyk7Ci0gICAgT25TZWVrRGF0YUFjdGlvbiBhcHBzcmNTZWVrRGF0YU5leHRBY3Rpb24g
PSB3ZWJLaXRNZWRpYVNyYy0+cHJpdi0+YXBwc3JjU2Vla0RhdGFOZXh0QWN0aW9uOwotICAgIFN0
cmVhbSogYXBwc3JjU3RyZWFtID0gZ2V0U3RyZWFtQnlBcHBzcmMod2ViS2l0TWVkaWFTcmMsIEdT
VF9FTEVNRU5UKGFwcHNyYykpOwotICAgIGJvb2wgYWxsQXBwc3JjTmVlZERhdGFBZnRlclNlZWsg
PSBmYWxzZTsKLQotICAgIGlmICh3ZWJLaXRNZWRpYVNyYy0+cHJpdi0+YXBwc3JjU2Vla0RhdGFD
b3VudCA+IDApIHsKLSAgICAgICAgaWYgKGFwcHNyY1N0cmVhbSAmJiAhYXBwc3JjU3RyZWFtLT5h
cHBzcmNOZWVkRGF0YUZsYWcpIHsKLSAgICAgICAgICAgICsrd2ViS2l0TWVkaWFTcmMtPnByaXYt
PmFwcHNyY05lZWREYXRhQ291bnQ7Ci0gICAgICAgICAgICBhcHBzcmNTdHJlYW0tPmFwcHNyY05l
ZWREYXRhRmxhZyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IG51bUFwcHNyY3MgPSB3
ZWJLaXRNZWRpYVNyYy0+cHJpdi0+c3RyZWFtcy5zaXplKCk7Ci0gICAgICAgIGlmICh3ZWJLaXRN
ZWRpYVNyYy0+cHJpdi0+YXBwc3JjU2Vla0RhdGFDb3VudCA9PSBudW1BcHBzcmNzICYmIHdlYktp
dE1lZGlhU3JjLT5wcml2LT5hcHBzcmNOZWVkRGF0YUNvdW50ID09IG51bUFwcHNyY3MpIHsKLSAg
ICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qod2ViS2l0TWVkaWFTcmMsICJBbGwgbmVlZERhdGFz
IGNvbXBsZXRlZCIpOwotICAgICAgICAgICAgYWxsQXBwc3JjTmVlZERhdGFBZnRlclNlZWsgPSB0
cnVlOwotICAgICAgICAgICAgd2ViS2l0TWVkaWFTcmMtPnByaXYtPmFwcHNyY1NlZWtEYXRhQ291
bnQgPSAwOwotICAgICAgICAgICAgd2ViS2l0TWVkaWFTcmMtPnByaXYtPmFwcHNyY05lZWREYXRh
Q291bnQgPSAwOwotICAgICAgICAgICAgd2ViS2l0TWVkaWFTcmMtPnByaXYtPmFwcHNyY1NlZWtE
YXRhTmV4dEFjdGlvbiA9IE5vdGhpbmc7Ci0KLSAgICAgICAgICAgIGZvciAoU3RyZWFtKiBzdHJl
YW0gOiB3ZWJLaXRNZWRpYVNyYy0+cHJpdi0+c3RyZWFtcykKLSAgICAgICAgICAgICAgICBzdHJl
YW0tPmFwcHNyY05lZWREYXRhRmxhZyA9IGZhbHNlOwotICAgICAgICB9CitzdHJ1Y3QgV2ViS2l0
TWVkaWFTcmNQcml2YXRlIHsKKyAgICBIYXNoTWFwPEF0b21TdHJpbmcsIFJlZlB0cjxTdHJlYW0+
PiBzdHJlYW1zOworICAgIFN0cmVhbSogc3RyZWFtQnlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIG5h
bWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBTdHJl
YW0qIHN0cmVhbSA9IHN0cmVhbXMuZ2V0KG5hbWUpOworICAgICAgICBBU1NFUlQoc3RyZWFtKTsK
KyAgICAgICAgcmV0dXJuIHN0cmVhbTsKICAgICB9Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sod2Vi
S2l0TWVkaWFTcmMpOwogCi0gICAgaWYgKGFsbEFwcHNyY05lZWREYXRhQWZ0ZXJTZWVrKSB7Ci0g
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qod2ViS2l0TWVkaWFTcmMsICJBbGwgZXhwZWN0ZWQgYXBw
c3JjU2Vla0RhdGEoKSBhbmQgYXBwc3JjTmVlZERhdGEoKSBjYWxscyBwZXJmb3JtZWQuIFJ1bm5p
bmcgbmV4dCBhY3Rpb24gKCVkKSIsIHN0YXRpY19jYXN0PGludD4oYXBwc3JjU2Vla0RhdGFOZXh0
QWN0aW9uKSk7CisgICAgLy8gVXNlZCBmb3Igc3RyZWFtLXN0YXJ0IGV2ZW50cywgc2hhcmVkIGJ5
IGFsbCBzdHJlYW1zLgorICAgIGNvbnN0IHVuc2lnbmVkIGdyb3VwSWQgeyBnc3RfdXRpbF9ncm91
cF9pZF9uZXh0KCkgfTsKIAotICAgICAgICBzd2l0Y2ggKGFwcHNyY1NlZWtEYXRhTmV4dEFjdGlv
bikgewotICAgICAgICBjYXNlIE1lZGlhU291cmNlU2Vla1RvVGltZToKLSAgICAgICAgICAgIHdl
YktpdE1lZGlhU3JjLT5wcml2LT5ub3RpZmllci0+bm90aWZ5KFdlYktpdE1lZGlhU3JjTWFpblRo
cmVhZE5vdGlmaWNhdGlvbjo6U2Vla05lZWRzRGF0YSwgW3dlYktpdE1lZGlhU3JjXSB7Ci0gICAg
ICAgICAgICAgICAgc2Vla05lZWRzRGF0YU1haW5UaHJlYWQod2ViS2l0TWVkaWFTcmMpOwotICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOb3RoaW5nOgot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGFwcHNyY1NlZWtE
YXRhTmV4dEFjdGlvbiA9PSBOb3RoaW5nKSB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHdl
YktpdE1lZGlhU3JjLT5wcml2LT5zdHJlYW1Mb2NrKTsKKyAgICAvLyBTZXQgb25jZSB3aGVuIHRo
ZSBzb3VyY2UgaXMgc3RhcnRlZC4gTm90IGNoYW5nZWQgYWZ0ZXIuCisgICAgR1JlZlB0cjxHc3RT
dHJlYW1Db2xsZWN0aW9uPiBjb2xsZWN0aW9uOworICAgIGJvb2wgaXNTdGFydGVkKCkgeyByZXR1
cm4gY29sbGVjdGlvbjsgfQogCi0gICAgICAgIEdTVF9PQkpFQ1RfTE9DSyh3ZWJLaXRNZWRpYVNy
Yyk7CisgICAgLy8gQ2hhbmdlZCBvbiBzZWVrcy4KKyAgICBHc3RDbG9ja1RpbWUgc3RhcnRUaW1l
IHsgMCB9OworICAgIGRvdWJsZSByYXRlIHsgMS4wIH07CiAKLSAgICAgICAgLy8gU2VhcmNoIGFn
YWluIGZvciB0aGUgU3RyZWFtLCBqdXN0IGluIGNhc2UgaXQgd2FzIHJlbW92ZWQgYmV0d2VlbiB0
aGUgcHJldmlvdXMgbG9jayBhbmQgdGhpcyBvbmUuCi0gICAgICAgIGFwcHNyY1N0cmVhbSA9IGdl
dFN0cmVhbUJ5QXBwc3JjKHdlYktpdE1lZGlhU3JjLCBHU1RfRUxFTUVOVChhcHBzcmMpKTsKKyAg
ICAvLyBPbmx5IHVzZWQgYnkgVVJJIEhhbmRsZXIgQVBJIGltcGxlbWVudGF0aW9uLgorICAgIEdV
bmlxdWVQdHI8Y2hhcj4gdXJpOworfTsKIAotICAgICAgICBpZiAoYXBwc3JjU3RyZWFtICYmIGFw
cHNyY1N0cmVhbS0+dHlwZSAhPSBXZWJDb3JlOjpJbnZhbGlkKQotICAgICAgICAgICAgd2ViS2l0
TWVkaWFTcmMtPnByaXYtPm5vdGlmaWVyLT5ub3RpZnkoV2ViS2l0TWVkaWFTcmNNYWluVGhyZWFk
Tm90aWZpY2F0aW9uOjpSZWFkeUZvck1vcmVTYW1wbGVzLCBbd2ViS2l0TWVkaWFTcmMsIGFwcHNy
Y1N0cmVhbV0gewotICAgICAgICAgICAgICAgIG5vdGlmeVJlYWR5Rm9yTW9yZVNhbXBsZXNNYWlu
VGhyZWFkKHdlYktpdE1lZGlhU3JjLCBhcHBzcmNTdHJlYW0pOwotICAgICAgICAgICAgfSk7Citz
dGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY1VyaUhhbmRsZXJJbml0KGdwb2ludGVyLCBncG9pbnRl
cik7CitzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY0NvbnN0cnVjdGVkKEdPYmplY3QqKTsKK3N0
YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjRmluYWxpemUoR09iamVjdCopOworc3RhdGljIEdzdFN0
YXRlQ2hhbmdlUmV0dXJuIHdlYktpdE1lZGlhU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCosIEdz
dFN0YXRlQ2hhbmdlKTsKK3N0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYVNyY0FjdGl2YXRlTW9k
ZShHc3RQYWQqLCBHc3RPYmplY3QqLCBHc3RQYWRNb2RlLCBnYm9vbGVhbiBhY3RpdmF0ZSk7Citz
dGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY0xvb3Aodm9pZCopOworc3RhdGljIHZvaWQgd2ViS2l0
TWVkaWFTcmNUZWFyRG93blN0cmVhbShXZWJLaXRNZWRpYVNyYyogc291cmNlLCBjb25zdCBBdG9t
U3RyaW5nJiBuYW1lKTsKK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjR2V0UHJvcGVydHkoR09i
amVjdCosIHVuc2lnbmVkIHByb3BJZCwgR1ZhbHVlKiwgR1BhcmFtU3BlYyopOworc3RhdGljIHZv
aWQgd2ViS2l0TWVkaWFTcmNTdHJlYW1GbHVzaChTdHJlYW0qLCBib29sIGlzU2Vla2luZ0ZsdXNo
KTsKK3N0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYVNyY1NlbmRFdmVudChHc3RFbGVtZW50Kiwg
R3N0RXZlbnQqKTsKIAotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyh3ZWJLaXRNZWRpYVNyYyk7
Ci0gICAgfQotfQorI2RlZmluZSB3ZWJraXRfbWVkaWFfc3JjX3BhcmVudF9jbGFzcyBwYXJlbnRf
Y2xhc3MKIAotc3RhdGljIHZvaWQgZW5hYmxlZEFwcHNyY0Vub3VnaERhdGEoR3N0QXBwU3JjICph
cHBzcmMsIGdwb2ludGVyIHVzZXJEYXRhKQotewotICAgIC8vIE5vIG5lZWQgdG8gbG9jayBvbiB3
ZWJLaXRNZWRpYVNyYywgd2UncmUgb24gdGhlIG1haW4gdGhyZWFkIGFuZCBub2JvZHkgaXMgZ29p
bmcgdG8gcmVtb3ZlIHRoZSBzdHJlYW0gaW4gdGhlIG1lYW50aW1lLgotICAgIEFTU0VSVChXVEY6
OmlzTWFpblRocmVhZCgpKTsKK3N0cnVjdCBXZWJLaXRNZWRpYVNyY1BhZFByaXZhdGUgeworICAg
IFJlZlB0cjxTdHJlYW0+IHN0cmVhbTsKK307CiAKLSAgICBXZWJLaXRNZWRpYVNyYyogd2ViS2l0
TWVkaWFTcmMgPSBzdGF0aWNfY2FzdDxXZWJLaXRNZWRpYVNyYyo+KHVzZXJEYXRhKTsKLSAgICBB
U1NFUlQoV0VCS0lUX0lTX01FRElBX1NSQyh3ZWJLaXRNZWRpYVNyYykpOwotICAgIFN0cmVhbSog
c3RyZWFtID0gZ2V0U3RyZWFtQnlBcHBzcmMod2ViS2l0TWVkaWFTcmMsIEdTVF9FTEVNRU5UKGFw
cHNyYykpOworc3RydWN0IFdlYktpdE1lZGlhU3JjUGFkIHsKKyAgICBHc3RQYWQgcGFyZW50Owor
ICAgIFdlYktpdE1lZGlhU3JjUGFkUHJpdmF0ZSogcHJpdjsKK307CiAKLSAgICAvLyBUaGlzIGNh
bGxiYWNrIG1pZ2h0IGhhdmUgYmVlbiBzY2hlZHVsZWQgZnJvbSBhIGNoaWxkIHRocmVhZCBiZWZv
cmUgdGhlIHN0cmVhbSB3YXMgcmVtb3ZlZC4KLSAgICAvLyBUaGVuLCB0aGUgcmVtb3ZhbCBjb2Rl
IG1pZ2h0IGhhdmUgcnVuLCBhbmQgbGF0ZXIgdGhpcyBjYWxsYmFjay4KLSAgICAvLyBUaGlzIGNo
ZWNrIHNvbHZlcyB0aGUgcmFjZSBjb25kaXRpb24uCi0gICAgaWYgKCFzdHJlYW0gfHwgc3RyZWFt
LT50eXBlID09IFdlYkNvcmU6OkludmFsaWQpCi0gICAgICAgIHJldHVybjsKK3N0cnVjdCBXZWJL
aXRNZWRpYVNyY1BhZENsYXNzIHsKKyAgICBHc3RQYWRDbGFzcyBwYXJlbnQ7Cit9OworCituYW1l
c3BhY2UgV1RGIHsKIAotICAgIHN0cmVhbS0+c291cmNlQnVmZmVyLT5zZXRSZWFkeUZvck1vcmVT
YW1wbGVzKGZhbHNlKTsKK3RlbXBsYXRlPD4gR1JlZlB0cjxXZWJLaXRNZWRpYVNyY1BhZD4gYWRv
cHRHUmVmKFdlYktpdE1lZGlhU3JjUGFkKiBwdHIpCit7CisgICAgQVNTRVJUKCFwdHIgfHwgIWdf
b2JqZWN0X2lzX2Zsb2F0aW5nKHB0cikpOworICAgIHJldHVybiBHUmVmUHRyPFdlYktpdE1lZGlh
U3JjUGFkPihwdHIsIEdSZWZQdHJBZG9wdCk7CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiBlbmFibGVk
QXBwc3JjU2Vla0RhdGEoR3N0QXBwU3JjKiwgZ3VpbnQ2NCwgZ3BvaW50ZXIgdXNlckRhdGEpCit0
ZW1wbGF0ZTw+IFdlYktpdE1lZGlhU3JjUGFkKiByZWZHUHRyPFdlYktpdE1lZGlhU3JjUGFkPihX
ZWJLaXRNZWRpYVNyY1BhZCogcHRyKQogewotICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgp
KTsKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZl9zaW5rKEdTVF9PQkpFQ1Qo
cHRyKSk7CiAKLSAgICBXZWJLaXRNZWRpYVNyYyogd2ViS2l0TWVkaWFTcmMgPSBzdGF0aWNfY2Fz
dDxXZWJLaXRNZWRpYVNyYyo+KHVzZXJEYXRhKTsKKyAgICByZXR1cm4gcHRyOworfQogCi0gICAg
QVNTRVJUKFdFQktJVF9JU19NRURJQV9TUkMod2ViS2l0TWVkaWFTcmMpKTsKK3RlbXBsYXRlPD4g
dm9pZCBkZXJlZkdQdHI8V2ViS2l0TWVkaWFTcmNQYWQ+KFdlYktpdE1lZGlhU3JjUGFkKiBwdHIp
Cit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIpOworfQogCi0g
ICAgR1NUX09CSkVDVF9MT0NLKHdlYktpdE1lZGlhU3JjKTsKLSAgICB3ZWJLaXRNZWRpYVNyYy0+
cHJpdi0+YXBwc3JjU2Vla0RhdGFDb3VudCsrOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHdlYktp
dE1lZGlhU3JjKTsKK30gLy8gbmFtZXNwYWNlIFdURgogCi0gICAgcmV0dXJuIFRSVUU7CitzdGF0
aWMgR1R5cGUgd2Via2l0X21lZGlhX3NyY19wYWRfZ2V0X3R5cGUoKTsKK1dFQktJVF9ERUZJTkVf
VFlQRShXZWJLaXRNZWRpYVNyY1BhZCwgd2Via2l0X21lZGlhX3NyY19wYWQsIEdTVF9UWVBFX1BB
RCk7CisjZGVmaW5lIFdFQktJVF9UWVBFX01FRElBX1NSQ19QQUQgKHdlYmtpdF9tZWRpYV9zcmNf
cGFkX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9NRURJQV9TUkNfUEFEKG9iaikgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9NRURJQV9TUkNfUEFELCBX
ZWJLaXRNZWRpYVNyY1BhZCkpCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9zcmNfcGFkX2Ns
YXNzX2luaXQoV2ViS2l0TWVkaWFTcmNQYWRDbGFzcyopCit7CiB9CiAKLXN0YXRpYyBTdHJlYW0q
IGdldFN0cmVhbUJ5QXBwc3JjKFdlYktpdE1lZGlhU3JjKiBzb3VyY2UsIEdzdEVsZW1lbnQqIGFw
cHNyYykKK1dFQktJVF9ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0TWVkaWFTcmMsIHdlYmtp
dF9tZWRpYV9zcmMsIEdTVF9UWVBFX0VMRU1FTlQsCisgICAgR19JTVBMRU1FTlRfSU5URVJGQUNF
KEdTVF9UWVBFX1VSSV9IQU5ETEVSLCB3ZWJLaXRNZWRpYVNyY1VyaUhhbmRsZXJJbml0KTsKKyAg
ICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfbWVkaWFfc3JjX2RlYnVnLCAid2Via2l0
bWVkaWFzcmMiLCAwLCAiV2ViS2l0IE1TRSBzb3VyY2UgZWxlbWVudCIpKTsKKworc3RydWN0IFN0
cmVhbSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTdHJlYW0+IHsKKyAgICBTdHJlYW0o
V2ViS2l0TWVkaWFTcmMqIHNvdXJjZSwgR1JlZlB0cjxHc3RQYWQ+JiYgcGFkLCBSZWY8TWVkaWFT
b3VyY2VUcmFja0dTdHJlYW1lcj4gdHJhY2ssIEdSZWZQdHI8R3N0U3RyZWFtPiYmIHN0cmVhbUlu
Zm8pCisgICAgICAgIDogc291cmNlKHNvdXJjZSkKKyAgICAgICAgLCBwYWQoV1RGTW92ZShwYWQp
KQorICAgICAgICAsIHRyYWNrKHRyYWNrKQorICAgICAgICAsIHN0cmVhbUluZm8oV1RGTW92ZShz
dHJlYW1JbmZvKSkKKyAgICAgICAgLCBzdHJlYW1pbmdNZW1iZXJzRGF0YU11dGV4KEdSZWZQdHIo
dHJhY2stPmluaXRpYWxDYXBzKCkpLCBzb3VyY2UtPnByaXYtPnN0YXJ0VGltZSwgc291cmNlLT5w
cml2LT5yYXRlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHRyYWNrLT5pbml0aWFsQ2FwcygpKTsK
KyAgICB9CisKKyAgICBXZWJLaXRNZWRpYVNyYyogY29uc3Qgc291cmNlOworICAgIEdSZWZQdHI8
R3N0UGFkPiBjb25zdCBwYWQ7CisgICAgUmVmPE1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXI+IHRy
YWNrOworICAgIEdSZWZQdHI8R3N0U3RyZWFtPiBzdHJlYW1JbmZvOworCisgICAgc3RydWN0IFN0
cmVhbWluZ01lbWJlcnMgeworICAgICAgICBTdHJlYW1pbmdNZW1iZXJzKEdSZWZQdHI8R3N0Q2Fw
cz4mJiBpbml0aWFsQ2FwcywgR3N0Q2xvY2tUaW1lIHN0YXJ0VGltZSwgZG91YmxlIHJhdGUpCisg
ICAgICAgICAgICA6IHBlbmRpbmdJbml0aWFsQ2FwcyhXVEZNb3ZlKGluaXRpYWxDYXBzKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgZ3N0X3NlZ21lbnRfaW5pdCgmc2VnbWVudCwgR1NUX0ZPUk1B
VF9USU1FKTsKKyAgICAgICAgICAgIHNlZ21lbnQuc3RhcnQgPSBzZWdtZW50LnRpbWUgPSBzdGFy
dFRpbWU7CisgICAgICAgICAgICBzZWdtZW50LnJhdGUgPSByYXRlOworICAgICAgICAgICAgQVNT
RVJUKHBlbmRpbmdJbml0aWFsQ2Fwcyk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGhhc1B1
c2hlZFN0cmVhbUNvbGxlY3Rpb25FdmVudCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgd2FzU3Ry
ZWFtU3RhcnRTZW50IHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBkb2VzTmVlZFNlZ21lbnRFdmVu
dCB7IHRydWUgfTsKKyAgICAgICAgYm9vbCBoYXNQdXNoZWRGaXJzdEJ1ZmZlciB7IGZhbHNlIH07
IC8vIFVzZWQgdG8gZ2V0IGEgcGlwZWxpbmUgZHVtcCBvZiB0aGUgcGlwZWxpbmUgYmVmb3JlIGJ1
ZmZlcnMgYXJlIGZsb3dpbmcuCisgICAgICAgIEdzdFNlZ21lbnQgc2VnbWVudDsKKyAgICAgICAg
R1JlZlB0cjxHc3RDYXBzPiBwZW5kaW5nSW5pdGlhbENhcHM7CisgICAgICAgIEdSZWZQdHI8R3N0
Q2Fwcz4gcHJldmlvdXNDYXBzOyAvLyBDYXBzIGZyb20gZW5xdWV1ZWQgc2FtcGxlcyBhcmUgY2Ft
cGFyZWQgdG8gdGhlc2UgdG8gcHVzaCBDQVBTIGV2ZW50cyBhcyBuZWVkZWQuCisgICAgICAgIENv
bmRpdGlvbiBwYWRMaW5rZWRPckZsdXNoZWRDb25kaXRpb247CisgICAgICAgIENvbmRpdGlvbiBx
dWV1ZUNoYW5nZWRPckZsdXNoZWRDb25kaXRpb247CisgICAgICAgIGJvb2wgaXNGbHVzaGluZyB7
IGZhbHNlIH07CisKKyAgICAgICAgLy8gRmx1c2hlcyBiZWZvcmUgYW55IGJ1ZmZlciBoYXMgYmVl
biBwb3BwZWQgZnJvbSB0aGUgcXVldWUgYW5kIHNlbnQgZG93bnN0cmVhbSBjYW4gYmUgYXZvaWRl
ZCBqdXN0CisgICAgICAgIC8vIGJ5IGNsZWFyaW5nIHRoZSBxdWV1ZS4KKyAgICAgICAgYm9vbCBo
YXNQb3BwZWRGaXJzdE9iamVjdCB7IGZhbHNlIH07CisgICAgfTsKKyAgICBEYXRhTXV0ZXg8U3Ry
ZWFtaW5nTWVtYmVycz4gc3RyZWFtaW5nTWVtYmVyc0RhdGFNdXRleDsKK307CisKK3N0YXRpYyBH
UmVmUHRyPEdzdEVsZW1lbnQ+IGZpbmRQaXBlbGluZShHUmVmUHRyPEdzdEVsZW1lbnQ+IGVsZW1l
bnQpCiB7Ci0gICAgZm9yIChTdHJlYW0qIHN0cmVhbSA6IHNvdXJjZS0+cHJpdi0+c3RyZWFtcykg
ewotICAgICAgICBpZiAoc3RyZWFtLT5hcHBzcmMgPT0gYXBwc3JjKQotICAgICAgICAgICAgcmV0
dXJuIHN0cmVhbTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBHUmVmUHRyPEdzdEVsZW1l
bnQ+IHBhcmVudEVsZW1lbnQgPSBhZG9wdEdSZWYoR1NUX0VMRU1FTlQoZ3N0X2VsZW1lbnRfZ2V0
X3BhcmVudChlbGVtZW50LmdldCgpKSkpOworICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQpCisg
ICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICAgICAgZWxlbWVudCA9IHBhcmVudEVsZW1l
bnQ7CiAgICAgfQotICAgIHJldHVybiBudWxscHRyOwogfQogCi1HX0RFRklORV9UWVBFX1dJVEhf
Q09ERShXZWJLaXRNZWRpYVNyYywgd2Via2l0X21lZGlhX3NyYywgR1NUX1RZUEVfQklOLAotICAg
IEdfSU1QTEVNRU5UX0lOVEVSRkFDRShHU1RfVFlQRV9VUklfSEFORExFUiwgd2ViS2l0TWVkaWFT
cmNVcmlIYW5kbGVySW5pdCk7Ci0gICAgV0VCS0lUX01FRElBX1NSQ19DQVRFR09SWV9JTklUKTsK
K3N0YXRpYyBHc3RTdHJlYW1UeXBlIGdzdFN0cmVhbVR5cGUoVHJhY2tQcml2YXRlQmFzZUdTdHJl
YW1lcjo6VHJhY2tUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBU
cmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OlZpZGVvOgorICAgICAgICByZXR1
cm4gR1NUX1NUUkVBTV9UWVBFX1ZJREVPOworICAgIGNhc2UgVHJhY2tQcml2YXRlQmFzZUdTdHJl
YW1lcjo6VHJhY2tUeXBlOjpBdWRpbzoKKyAgICAgICAgcmV0dXJuIEdTVF9TVFJFQU1fVFlQRV9B
VURJTzsKKyAgICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6VGV4
dDoKKyAgICAgICAgcmV0dXJuIEdTVF9TVFJFQU1fVFlQRV9URVhUOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEdTVF9FUlJPUigiUmVjZWl2ZWQgdW5leHBlY3RlZCBzdHJlYW0gdHlwZSIpOworICAg
ICAgICByZXR1cm4gR1NUX1NUUkVBTV9UWVBFX1VOS05PV047CisgICAgfQorfQogCi1ndWludCB3
ZWJLaXRNZWRpYVNyY1NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07CisjaWZuZGVmIEdTVF9E
SVNBQkxFX0dTVF9ERUJVRworc3RhdGljIGNvbnN0IGNoYXIqIHN0cmVhbVR5cGVUb1N0cmluZyhU
cmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6
QXVkaW86CisgICAgICAgIHJldHVybiAiQXVkaW8iOworICAgIGNhc2UgVHJhY2tQcml2YXRlQmFz
ZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpWaWRlbzoKKyAgICAgICAgcmV0dXJuICJWaWRlbyI7Cisg
ICAgY2FzZSBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OlRleHQ6CisgICAg
ICAgIHJldHVybiAiVGV4dCI7CisgICAgZGVmYXVsdDoKKyAgICBjYXNlIFRyYWNrUHJpdmF0ZUJh
c2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6VW5rbm93bjoKKyAgICAgICAgcmV0dXJuICJVbmtub3du
IjsKKyAgICB9Cit9CisjZW5kaWYgLy8gR1NUX0RJU0FCTEVfR1NUX0RFQlVHCiAKIHN0YXRpYyB2
b2lkIHdlYmtpdF9tZWRpYV9zcmNfY2xhc3NfaW5pdChXZWJLaXRNZWRpYVNyY0NsYXNzKiBrbGFz
cykKIHsKICAgICBHT2JqZWN0Q2xhc3MqIG9rbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsK
ICAgICBHc3RFbGVtZW50Q2xhc3MqIGVrbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTKGtsYXNzKTsK
IAorICAgIG9rbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJLaXRNZWRpYVNyY0NvbnN0cnVjdGVkOwog
ICAgIG9rbGFzcy0+ZmluYWxpemUgPSB3ZWJLaXRNZWRpYVNyY0ZpbmFsaXplOwotICAgIG9rbGFz
cy0+c2V0X3Byb3BlcnR5ID0gd2ViS2l0TWVkaWFTcmNTZXRQcm9wZXJ0eTsKICAgICBva2xhc3Mt
PmdldF9wcm9wZXJ0eSA9IHdlYktpdE1lZGlhU3JjR2V0UHJvcGVydHk7CiAKLSAgICBnc3RfZWxl
bWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlKGVrbGFzcywgZ3N0X3N0YXRpY19wYWRfdGVtcGxh
dGVfZ2V0KCZzcmNUZW1wbGF0ZSkpOworICAgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNf
cGFkX3RlbXBsYXRlX3dpdGhfZ3R5cGUoZWtsYXNzLCAmc3JjVGVtcGxhdGUsIHdlYmtpdF9tZWRp
YV9zcmNfcGFkX2dldF90eXBlKCkpOwogCi0gICAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRp
Y19tZXRhZGF0YShla2xhc3MsICJXZWJLaXQgTWVkaWEgc291cmNlIGVsZW1lbnQiLCAiU291cmNl
IiwgIkhhbmRsZXMgQmxvYiB1cmlzIiwgIlN0ZXBoYW5lIEphZGF1ZCA8c2phZGF1ZEBzaWkuZnI+
LCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPiwgRW5yaXF1ZSBP
Y2HDsWEgR29uesOhbGV6IDxlb2NhbmhhQGlnYWxpYS5jb20+Iik7CisgICAgZ3N0X2VsZW1lbnRf
Y2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YShla2xhc3MsICJXZWJLaXQgTWVkaWFTb3VyY2Ugc291
cmNlIGVsZW1lbnQiLCAiU291cmNlL05ldHdvcmsiLCAiRmVlZHMgc2FtcGxlcyBjb21pbmcgZnJv
bSBXZWJLaXQgTWVkaWFTb3VyY2Ugb2JqZWN0IiwgIklnYWxpYSA8YWJveWFAaWdhbGlhLmNvbT4i
KTsKIAotICAgIC8vIEFsbG93cyBzZXR0aW5nIHRoZSB1cmkgdXNpbmcgdGhlICdsb2NhdGlvbicg
cHJvcGVydHksIHdoaWNoIGlzIHVzZWQgZm9yIGV4YW1wbGUgYnkgZ3N0X2VsZW1lbnRfbWFrZV9m
cm9tX3VyaSgpLgotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2tsYXNzLAot
ICAgICAgICBQUk9QX0xPQ0FUSU9OLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJsb2Nh
dGlvbiIsICJsb2NhdGlvbiIsICJMb2NhdGlvbiB0byByZWFkIGZyb20iLCBudWxscHRyLAotICAg
ICAgICBHUGFyYW1GbGFncyhHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklO
R1MpKSk7CisgICAgZWtsYXNzLT5jaGFuZ2Vfc3RhdGUgPSB3ZWJLaXRNZWRpYVNyY0NoYW5nZVN0
YXRlOworICAgIGVrbGFzcy0+c2VuZF9ldmVudCA9IHdlYktpdE1lZGlhU3JjU2VuZEV2ZW50Owog
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2tsYXNzLAogICAgICAgICBQUk9Q
X05fQVVESU8sCiAgICAgICAgIGdfcGFyYW1fc3BlY19pbnQoIm4tYXVkaW8iLCAiTnVtYmVyIEF1
ZGlvIiwgIlRvdGFsIG51bWJlciBvZiBhdWRpbyBzdHJlYW1zIiwKQEAgLTIyMSw0MzIgKzI2NSw1
MTYgQEAgc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX3NyY19jbGFzc19pbml0KFdlYktpdE1lZGlh
U3JjQ2xhc3MqIGtsYXNzKQogICAgICAgICBQUk9QX05fVEVYVCwKICAgICAgICAgZ19wYXJhbV9z
cGVjX2ludCgibi10ZXh0IiwgIk51bWJlciBUZXh0IiwgIlRvdGFsIG51bWJlciBvZiB0ZXh0IHN0
cmVhbXMiLAogICAgICAgICAwLCBHX01BWElOVCwgMCwgR1BhcmFtRmxhZ3MoR19QQVJBTV9SRUFE
QUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7Ci0KLSAgICB3ZWJLaXRNZWRpYVNyY1Np
Z25hbHNbU0lHTkFMX1ZJREVPX0NIQU5HRURdID0KLSAgICAgICAgZ19zaWduYWxfbmV3KCJ2aWRl
by1jaGFuZ2VkIiwgR19UWVBFX0ZST01fQ0xBU1Mob2tsYXNzKSwKLSAgICAgICAgR19TSUdOQUxf
UlVOX0xBU1QsCi0gICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRNZWRpYVNyY0NsYXNzLCB2
aWRlb0NoYW5nZWQpLCBudWxscHRyLCBudWxscHRyLAotICAgICAgICBnX2NjbG9zdXJlX21hcnNo
YWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDAsIEdfVFlQRV9OT05FKTsKLSAgICB3ZWJLaXRNZWRp
YVNyY1NpZ25hbHNbU0lHTkFMX0FVRElPX0NIQU5HRURdID0KLSAgICAgICAgZ19zaWduYWxfbmV3
KCJhdWRpby1jaGFuZ2VkIiwgR19UWVBFX0ZST01fQ0xBU1Mob2tsYXNzKSwKLSAgICAgICAgR19T
SUdOQUxfUlVOX0xBU1QsCi0gICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRNZWRpYVNyY0Ns
YXNzLCBhdWRpb0NoYW5nZWQpLCBudWxscHRyLCBudWxscHRyLAotICAgICAgICBnX2NjbG9zdXJl
X21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDAsIEdfVFlQRV9OT05FKTsKLSAgICB3ZWJL
aXRNZWRpYVNyY1NpZ25hbHNbU0lHTkFMX1RFWFRfQ0hBTkdFRF0gPQotICAgICAgICBnX3NpZ25h
bF9uZXcoInRleHQtY2hhbmdlZCIsIEdfVFlQRV9GUk9NX0NMQVNTKG9rbGFzcyksCi0gICAgICAg
IEdfU0lHTkFMX1JVTl9MQVNULAotICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0TWVkaWFT
cmNDbGFzcywgdGV4dENoYW5nZWQpLCBudWxscHRyLCBudWxscHRyLAotICAgICAgICBnX2NjbG9z
dXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDAsIEdfVFlQRV9OT05FKTsKLQotICAg
IGVrbGFzcy0+Y2hhbmdlX3N0YXRlID0gd2ViS2l0TWVkaWFTcmNDaGFuZ2VTdGF0ZTsKLQotICAg
IGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdE1lZGlhU3JjUHJp
dmF0ZSkpOwogfQogCi1zdGF0aWMgR3N0Rmxvd1JldHVybiB3ZWJraXRNZWRpYVNyY0NoYWluKEdz
dFBhZCogcGFkLCBHc3RPYmplY3QqIHBhcmVudCwgR3N0QnVmZmVyKiBidWZmZXIpCitzdGF0aWMg
dm9pZCB3ZWJLaXRNZWRpYVNyY0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKIHsKLSAgICBH
UmVmUHRyPFdlYktpdE1lZGlhU3JjPiBzZWxmID0gYWRvcHRHUmVmKFdFQktJVF9NRURJQV9TUkMo
Z3N0X29iamVjdF9nZXRfcGFyZW50KHBhcmVudCkpKTsKKyAgICBHU1RfQ0FMTF9QQVJFTlQoR19P
QkpFQ1RfQ0xBU1MsIGNvbnN0cnVjdGVkLCAob2JqZWN0KSk7CiAKLSAgICByZXR1cm4gZ3N0X2Zs
b3dfY29tYmluZXJfdXBkYXRlX3BhZF9mbG93KHNlbGYtPnByaXYtPmZsb3dDb21iaW5lci5nZXQo
KSwgcGFkLCBnc3RfcHJveHlfcGFkX2NoYWluX2RlZmF1bHQocGFkLCBHU1RfT0JKRUNUKHNlbGYu
Z2V0KCkpLCBidWZmZXIpKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEdTVF9P
QkpFQ1RfRkxBR19TRVQob2JqZWN0LCBHU1RfRUxFTUVOVF9GTEFHX1NPVVJDRSk7CiB9CiAKLXN0
YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9zcmNfaW5pdChXZWJLaXRNZWRpYVNyYyogc291cmNlKQor
c3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiB7Ci0g
ICAgc291cmNlLT5wcml2ID0gV0VCS0lUX01FRElBX1NSQ19HRVRfUFJJVkFURShzb3VyY2UpOwot
ICAgIG5ldyAoc291cmNlLT5wcml2KSBXZWJLaXRNZWRpYVNyY1ByaXZhdGUoKTsKLSAgICBzb3Vy
Y2UtPnByaXYtPnNlZWtUaW1lID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwotICAgIHNvdXJj
ZS0+cHJpdi0+YXBwc3JjU2Vla0RhdGFDb3VudCA9IDA7Ci0gICAgc291cmNlLT5wcml2LT5hcHBz
cmNOZWVkRGF0YUNvdW50ID0gMDsKLSAgICBzb3VyY2UtPnByaXYtPmFwcHNyY1NlZWtEYXRhTmV4
dEFjdGlvbiA9IE5vdGhpbmc7Ci0gICAgc291cmNlLT5wcml2LT5mbG93Q29tYmluZXIgPSBHVW5p
cXVlUHRyPEdzdEZsb3dDb21iaW5lcj4oZ3N0X2Zsb3dfY29tYmluZXJfbmV3KCkpOwotICAgIHNv
dXJjZS0+cHJpdi0+bm90aWZpZXIgPSBXZWJDb3JlOjpNYWluVGhyZWFkTm90aWZpZXI8V2ViS2l0
TWVkaWFTcmNNYWluVGhyZWFkTm90aWZpY2F0aW9uPjo6Y3JlYXRlKCk7Ci0KLSAgICAvLyBObyBu
ZWVkIHRvIHJlc2V0IFN0cmVhbS5hcHBzcmNOZWVkRGF0YUZsYWcgYmVjYXVzZSB0aGVyZSBhcmUg
bm8gU3RyZWFtcyBhdCB0aGlzIHBvaW50IHlldC4KKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworCisgICAgV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSA9IFdFQktJVF9NRURJQV9TUkMob2JqZWN0
KTsKKyAgICBzb3VyY2UtPnByaXYtPn5XZWJLaXRNZWRpYVNyY1ByaXZhdGUoKTsKKyAgICBHU1Rf
Q0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1MsIGZpbmFsaXplLCAob2JqZWN0KSk7CiB9CiAKLXZv
aWQgd2ViS2l0TWVkaWFTcmNGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit2b2lkIHdlYktpdE1l
ZGlhU3JjRW1pdFN0cmVhbXMoV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSwgY29uc3QgVmVjdG9yPFJl
ZlB0cjxNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyPj4mIHRyYWNrcykKIHsKLSAgICBBU1NFUlQo
V1RGOjppc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBB
U1NFUlQoIXNvdXJjZS0+cHJpdi0+aXNTdGFydGVkKCkpOworICAgIEdTVF9ERUJVR19PQkpFQ1Qo
c291cmNlLCAiRW1pdHRpbmcgU1RSRUFNX0NPTExFQ1RJT04iKTsKIAotICAgIFdlYktpdE1lZGlh
U3JjKiBzb3VyY2UgPSBXRUJLSVRfTUVESUFfU1JDKG9iamVjdCk7Ci0gICAgV2ViS2l0TWVkaWFT
cmNQcml2YXRlKiBwcml2ID0gc291cmNlLT5wcml2OworICAgIHNvdXJjZS0+cHJpdi0+Y29sbGVj
dGlvbiA9IGFkb3B0R1JlZihnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fbmV3KCJXZWJLaXRNZWRpYVNy
YyIpKTsKKyAgICBmb3IgKFJlZlB0cjxNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyPiB0cmFjayA6
IHRyYWNrcykgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNvdXJjZSwgIkFkZGluZyBzdHJl
YW0gd2l0aCB0cmFja0lkICclcycgb2YgdHlwZSAlcyB3aXRoIGNhcHMgJSIgR1NUX1BUUl9GT1JN
QVQsIHRyYWNrLT50cmFja0lkKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3RyZWFtVHlwZVRv
U3RyaW5nKHRyYWNrLT50eXBlKCkpLCB0cmFjay0+aW5pdGlhbENhcHMoKS5nZXQoKSk7CiAKLSAg
ICBHU1RfREVCVUdfT0JKRUNUKHNvdXJjZSwgIkZpbmFsaXppbmcgJXAiLCBzb3VyY2UpOwotICAg
IFZlY3RvcjxTdHJlYW0qPiBvbGRTdHJlYW1zOwotICAgIHNvdXJjZS0+cHJpdi0+c3RyZWFtcy5z
d2FwKG9sZFN0cmVhbXMpOworICAgICAgICBHUmVmUHRyPFdlYktpdE1lZGlhU3JjUGFkPiBwYWQg
PSBXRUJLSVRfTUVESUFfU1JDX1BBRChnX29iamVjdF9uZXcod2Via2l0X21lZGlhX3NyY19wYWRf
Z2V0X3R5cGUoKSwgIm5hbWUiLCBtYWtlU3RyaW5nKCJzcmNfIiwgdHJhY2stPnRyYWNrSWQoKSku
dXRmOCgpLmRhdGEoKSwgImRpcmVjdGlvbiIsIEdTVF9QQURfU1JDLCBOVUxMKSk7CisgICAgICAg
IGdzdF9wYWRfc2V0X2FjdGl2YXRlbW9kZV9mdW5jdGlvbihHU1RfUEFEKHBhZC5nZXQoKSksIHdl
YktpdE1lZGlhU3JjQWN0aXZhdGVNb2RlKTsKIAotICAgIGZvciAoU3RyZWFtKiBzdHJlYW0gOiBv
bGRTdHJlYW1zKQotICAgICAgICB3ZWJLaXRNZWRpYVNyY0ZyZWVTdHJlYW0oc291cmNlLCBzdHJl
YW0pOworICAgICAgICBBU1NFUlQodHJhY2stPmluaXRpYWxDYXBzKCkpOworICAgICAgICBSZWZQ
dHI8U3RyZWFtPiBzdHJlYW0gPSBhZG9wdFJlZihuZXcgU3RyZWFtKHNvdXJjZSwgR1JlZlB0cjxH
c3RQYWQ+KEdTVF9QQUQocGFkLmdldCgpKSksIG1ha2VSZWYoKnRyYWNrKSwKKyAgICAgICAgICAg
IGFkb3B0R1JlZihnc3Rfc3RyZWFtX25ldyh0cmFjay0+dHJhY2tJZCgpLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCksIHRyYWNrLT5pbml0aWFsQ2FwcygpLmdldCgpLCBnc3RTdHJlYW1UeXBlKHRyYWNr
LT50eXBlKCkpLCBHU1RfU1RSRUFNX0ZMQUdfU0VMRUNUKSkpKTsKKyAgICAgICAgcGFkLT5wcml2
LT5zdHJlYW0gPSBzdHJlYW07CiAKLSAgICBwcml2LT5zZWVrVGltZSA9IE1lZGlhVGltZTo6aW52
YWxpZFRpbWUoKTsKKyAgICAgICAgZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2FkZF9zdHJlYW0oc291
cmNlLT5wcml2LT5jb2xsZWN0aW9uLmdldCgpLCBHUmVmUHRyPEdzdFN0cmVhbT4oc3RyZWFtLT5z
dHJlYW1JbmZvLmdldCgpKS5sZWFrUmVmKCkpOworICAgICAgICBzb3VyY2UtPnByaXYtPnN0cmVh
bXMuc2V0KHRyYWNrLT50cmFja0lkKCksIFdURk1vdmUoc3RyZWFtKSk7CisgICAgfQogCi0gICAg
c291cmNlLT5wcml2LT5ub3RpZmllci0+aW52YWxpZGF0ZSgpOworICAgIGdzdF9lbGVtZW50X3Bv
c3RfbWVzc2FnZShHU1RfRUxFTUVOVChzb3VyY2UpLCBnc3RfbWVzc2FnZV9uZXdfc3RyZWFtX2Nv
bGxlY3Rpb24oR1NUX09CSkVDVChzb3VyY2UpLCBzb3VyY2UtPnByaXYtPmNvbGxlY3Rpb24uZ2V0
KCkpKTsKIAotICAgIGlmIChwcml2LT5tZWRpYVBsYXllclByaXZhdGUpCi0gICAgICAgIHdlYktp
dE1lZGlhU3JjU2V0TWVkaWFQbGF5ZXJQcml2YXRlKHNvdXJjZSwgbnVsbHB0cik7CisgICAgZm9y
IChhdXRvJiBwYWlyIDogc291cmNlLT5wcml2LT5zdHJlYW1zKSB7CisgICAgICAgIGNvbnN0IFJl
ZlB0cjxTdHJlYW0+JiBzdHJlYW0gPSBwYWlyLnZhbHVlOwogCi0gICAgLy8gV2UgdXNlZCBhIHBs
YWNlbWVudCBuZXcgZm9yIGNvbnN0cnVjdGlvbiwgdGhlIGRlc3RydWN0b3Igd29uJ3QgYmUgY2Fs
bGVkIGF1dG9tYXRpY2FsbHkuCi0gICAgcHJpdi0+fl9XZWJLaXRNZWRpYVNyY1ByaXZhdGUoKTsK
KyAgICAgICAgLy8gV29ya2Fyb3VuZDogZ3N0X2VsZW1lbnRfYWRkX3BhZCgpIHNob3VsZCBhbHJl
YWR5IGNhbGwgZ3N0X3BhZF9zZXRfYWN0aXZlKCkgaWYgdGhlIGVsZW1lbnQgaXMgUEFVU0VEIG9y
CisgICAgICAgIC8vIFBMQVlJTkcuIFVuZm9ydHVuYXRlbHksIGFzIG9mIEdTdHJlYW1lciAxLjE4
LjIgaXQgZG9lcyBzbyB3aXRoIHRoZSBlbGVtZW50IGxvY2sgdGFrZW4sIGNhdXNpbmcgYSBkZWFk
bG9jaworICAgICAgICAvLyBpbiBnc3RfcGFkX3N0YXJ0X3Rhc2soKSwgd2hvIHRyaWVzIHRvIHBv
c3QgYSBgc3RyZWFtLXN0YXR1c2AgbWVzc2FnZSBpbiB0aGUgZWxlbWVudCwgd2hpY2ggYWxzbyBy
ZXF1aXJlcworICAgICAgICAvLyB0aGUgZWxlbWVudCBsb2NrLiBBY3RpdmF0aW5nIHRoZSBwYWQg
YmVmb3JlaGFuZCBhdm9pZHMgdGhhdCBjb2RlcGF0aC4KKyAgICAgICAgLy8gaHR0cHM6Ly9naXRs
YWIuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3RyZWFtZXIvLS9tZXJnZV9yZXF1ZXN0cy8y
MTAKKyAgICAgICAgR3N0U3RhdGUgc3RhdGU7CisgICAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0
ZShHU1RfRUxFTUVOVChzb3VyY2UpLCAmc3RhdGUsIG51bGxwdHIsIDApOworICAgICAgICBpZiAo
c3RhdGUgPiBHU1RfU1RBVEVfUkVBRFkpCisgICAgICAgICAgICBnc3RfcGFkX3NldF9hY3RpdmUo
R1NUX1BBRChzdHJlYW0tPnBhZC5nZXQoKSksIHRydWUpOwogCi0gICAgR1NUX0NBTExfUEFSRU5U
KEdfT0JKRUNUX0NMQVNTLCBmaW5hbGl6ZSwgKG9iamVjdCkpOworICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKHNvdXJjZSwgIkFkZGluZyBwYWQgJyVzJyBmb3Igc3RyZWFtIHdpdGggbmFtZSAnJXMn
IiwgR1NUX09CSkVDVF9OQU1FKHN0cmVhbS0+cGFkLmdldCgpKSwgc3RyZWFtLT50cmFjay0+dHJh
Y2tJZCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBnc3RfZWxlbWVudF9hZGRf
cGFkKEdTVF9FTEVNRU5UKHNvdXJjZSksIEdTVF9QQUQoc3RyZWFtLT5wYWQuZ2V0KCkpKTsKKyAg
ICB9CisgICAgR1NUX0RFQlVHX09CSkVDVChzb3VyY2UsICJBbGwgcGFkcyBhZGRlZCIpOwogfQog
Ci12b2lkIHdlYktpdE1lZGlhU3JjU2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wSWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQorc3RhdGljIHZv
aWQgd2ViS2l0TWVkaWFTcmNUZWFyRG93blN0cmVhbShXZWJLaXRNZWRpYVNyYyogc291cmNlLCBj
b25zdCBBdG9tU3RyaW5nJiBuYW1lKQogewotICAgIFdlYktpdE1lZGlhU3JjKiBzb3VyY2UgPSBX
RUJLSVRfTUVESUFfU1JDKG9iamVjdCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBTdHJlYW0qIHN0cmVhbSA9IHNvdXJjZS0+cHJpdi0+c3RyZWFtQnlOYW1lKG5hbWUpOworICAg
IEdTVF9ERUJVR19PQkpFQ1Qoc291cmNlLCAiVGVhcmluZyBkb3duIHN0cmVhbSAnJXMnIiwgbmFt
ZS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAotICAgIHN3aXRjaCAocHJvcElkKSB7Ci0gICAg
Y2FzZSBQUk9QX0xPQ0FUSU9OOgotICAgICAgICBnc3RfdXJpX2hhbmRsZXJfc2V0X3VyaShyZWlu
dGVycHJldF9jYXN0PEdzdFVSSUhhbmRsZXIqPihzb3VyY2UpLCBnX3ZhbHVlX2dldF9zdHJpbmco
dmFsdWUpLCBudWxscHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElkLCBwc3BlYyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICAvLyBGbHVzaCB0aGUgc291cmNlIGVsZW1lbnQg
KiphbmQqKiBkb3duc3RyZWFtLiBXZSB3YW50IHRvIHN0b3AgdGhlIHN0cmVhbWluZyB0aHJlYWQg
YW5kIGZvciB0aGF0IHdlIG5lZWQgYWxsIGVsZW1lbnRzIGRvd25zdHJlYW0gdG8gYmUgaWRsZS4K
KyAgICB3ZWJLaXRNZWRpYVNyY1N0cmVhbUZsdXNoKHN0cmVhbSwgZmFsc2UpOworICAgIC8vIFN0
b3AgdGhlIHRocmVhZCBub3cuCisgICAgZ3N0X3BhZF9zZXRfYWN0aXZlKHN0cmVhbS0+cGFkLmdl
dCgpLCBmYWxzZSk7CisKKyAgICBpZiAoc291cmNlLT5wcml2LT5pc1N0YXJ0ZWQoKSkKKyAgICAg
ICAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZChHU1RfRUxFTUVOVChzb3VyY2UpLCBzdHJlYW0tPnBh
ZC5nZXQoKSk7CisgICAgc291cmNlLT5wcml2LT5zdHJlYW1zLnJlbW92ZShuYW1lKTsKIH0KIAot
dm9pZCB3ZWJLaXRNZWRpYVNyY0dldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cElkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJLaXRNZWRpYVNyY0FjdGl2YXRlTW9kZShHc3RQYWQqIHBhZCwgR3N0T2JqZWN0KiBzb3VyY2Us
IEdzdFBhZE1vZGUgbW9kZSwgZ2Jvb2xlYW4gYWN0aXZlKQogewotICAgIFdlYktpdE1lZGlhU3Jj
KiBzb3VyY2UgPSBXRUJLSVRfTUVESUFfU1JDKG9iamVjdCk7Ci0gICAgV2ViS2l0TWVkaWFTcmNQ
cml2YXRlKiBwcml2ID0gc291cmNlLT5wcml2OworICAgIGlmIChtb2RlICE9IEdTVF9QQURfTU9E
RV9QVVNIKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc291cmNlLCAiVW5leHBlY3RlZCBw
YWQgbW9kZSBpbiBXZWJLaXRNZWRpYVNyYyIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQogCi0gICAgR1NUX09CSkVDVF9MT0NLKHNvdXJjZSk7Ci0gICAgc3dpdGNoIChwcm9wSWQpIHsK
LSAgICBjYXNlIFBST1BfTE9DQVRJT046Ci0gICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1
ZSwgcHJpdi0+bG9jYXRpb24uZ2V0KCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1Bf
Tl9BVURJTzoKLSAgICAgICAgZ192YWx1ZV9zZXRfaW50KHZhbHVlLCBwcml2LT5udW1iZXJPZkF1
ZGlvU3RyZWFtcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9OX1ZJREVPOgotICAg
ICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHByaXYtPm51bWJlck9mVmlkZW9TdHJlYW1zKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05fVEVYVDoKLSAgICAgICAgZ192YWx1ZV9z
ZXRfaW50KHZhbHVlLCBwcml2LT5udW1iZXJPZlRleHRTdHJlYW1zKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcElkLCBwc3BlYyk7Ci0gICAgICAgIGJyZWFrOworICAgIGlmIChhY3RpdmUp
CisgICAgICAgIGdzdF9wYWRfc3RhcnRfdGFzayhwYWQsIHdlYktpdE1lZGlhU3JjTG9vcCwgcGFk
LCBudWxscHRyKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gVW5ibG9jayB0aGUgc3RyZWFtaW5n
IHRocmVhZC4KKyAgICAgICAgUmVmUHRyPFN0cmVhbT4mIHN0cmVhbSA9IFdFQktJVF9NRURJQV9T
UkNfUEFEKHBhZCktPnByaXYtPnN0cmVhbTsKKyAgICAgICAgeworICAgICAgICAgICAgRGF0YU11
dGV4PFN0cmVhbTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgc3RyZWFtaW5nTWVt
YmVycyhzdHJlYW0tPnN0cmVhbWluZ01lbWJlcnNEYXRhTXV0ZXgpOworICAgICAgICAgICAgc3Ry
ZWFtaW5nTWVtYmVycy0+aXNGbHVzaGluZyA9IHRydWU7CisgICAgICAgICAgICBzdHJlYW1pbmdN
ZW1iZXJzLT5wYWRMaW5rZWRPckZsdXNoZWRDb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgICAg
ICAgICBzdHJlYW1pbmdNZW1iZXJzLT5xdWV1ZUNoYW5nZWRPckZsdXNoZWRDb25kaXRpb24ubm90
aWZ5T25lKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gRm9sbG93aW5nIGdzdGJhc2VzcmMgaW1w
bGVtZW50YXRpb24sIHRoaXMgY29kZSBpcyBub3QgZmx1c2hpbmcgZG93bnN0cmVhbS4KKyAgICAg
ICAgLy8gSWYgdGhlcmUgaXMgYW55IHBvc3NpYmlsaXR5IG9mIHRoZSBzdHJlYW1pbmcgdGhyZWFk
IGJlaW5nIGJsb2NrZWQgZG93bnN0cmVhbSB0aGUgY2FsbGVyIE1VU1QgZmx1c2ggYmVmb3JlLgor
ICAgICAgICAvLyBPdGhlcndpc2UgYSBkZWFkbG9jayB3b3VsZCBvY2N1ciBhcyB0aGUgbmV4dCBm
dW5jdGlvbiB0cmllcyB0byBqb2luIHRoZSB0aHJlYWQuCisgICAgICAgIGdzdF9wYWRfc3RvcF90
YXNrKHBhZCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIERhdGFNdXRleDxTdHJlYW06OlN0cmVh
bWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyIHN0cmVhbWluZ01lbWJlcnMoc3RyZWFtLT5zdHJl
YW1pbmdNZW1iZXJzRGF0YU11dGV4KTsKKyAgICAgICAgICAgIHN0cmVhbWluZ01lbWJlcnMtPmlz
Rmx1c2hpbmcgPSBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KLSAgICBHU1RfT0JKRUNUX1VOTE9D
Syhzb3VyY2UpOworICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIHdlYktpdE1lZGlhU3JjRG9B
c3luY1N0YXJ0KFdlYktpdE1lZGlhU3JjKiBzb3VyY2UpCitzdGF0aWMgdm9pZCB3ZWJLaXRNZWRp
YVNyY1BhZExpbmtlZChHc3RQYWQqIHBhZCwgR3N0UGFkKiwgdm9pZCopCiB7Ci0gICAgc291cmNl
LT5wcml2LT5hc3luY1N0YXJ0ID0gdHJ1ZTsKLSAgICBHU1RfQklOX0NMQVNTKHBhcmVudF9jbGFz
cyktPmhhbmRsZV9tZXNzYWdlKEdTVF9CSU4oc291cmNlKSwKLSAgICAgICAgZ3N0X21lc3NhZ2Vf
bmV3X2FzeW5jX3N0YXJ0KEdTVF9PQkpFQ1Qoc291cmNlKSkpOworICAgIFJlZlB0cjxTdHJlYW0+
JiBzdHJlYW0gPSBXRUJLSVRfTUVESUFfU1JDX1BBRChwYWQpLT5wcml2LT5zdHJlYW07CisgICAg
RGF0YU11dGV4PFN0cmVhbTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgc3RyZWFt
aW5nTWVtYmVycyhzdHJlYW0tPnN0cmVhbWluZ01lbWJlcnNEYXRhTXV0ZXgpOworICAgIHN0cmVh
bWluZ01lbWJlcnMtPnBhZExpbmtlZE9yRmx1c2hlZENvbmRpdGlvbi5ub3RpZnlPbmUoKTsKIH0K
IAotdm9pZCB3ZWJLaXRNZWRpYVNyY0RvQXN5bmNEb25lKFdlYktpdE1lZGlhU3JjKiBzb3VyY2Up
CisvLyBDYWxsZWQgd2l0aCBTVFJFQU1fTE9DSy4KK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3Jj
TG9vcCh2b2lkKiB1c2VyRGF0YSkKIHsKLSAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYg
PSBzb3VyY2UtPnByaXY7Ci0gICAgaWYgKHByaXYtPmFzeW5jU3RhcnQpIHsKLSAgICAgICAgR1NU
X0JJTl9DTEFTUyhwYXJlbnRfY2xhc3MpLT5oYW5kbGVfbWVzc2FnZShHU1RfQklOKHNvdXJjZSks
Ci0gICAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfYXN5bmNfZG9uZShHU1RfT0JKRUNUKHNvdXJj
ZSksIEdTVF9DTE9DS19USU1FX05PTkUpKTsKLSAgICAgICAgcHJpdi0+YXN5bmNTdGFydCA9IGZh
bHNlOworICAgIEdzdFBhZCogcGFkID0gR1NUX1BBRCh1c2VyRGF0YSk7CisgICAgUmVmUHRyPFN0
cmVhbT4mIHN0cmVhbSA9IFdFQktJVF9NRURJQV9TUkNfUEFEKHBhZCktPnByaXYtPnN0cmVhbTsK
KworICAgIERhdGFNdXRleDxTdHJlYW06OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVy
IHN0cmVhbWluZ01lbWJlcnMoc3RyZWFtLT5zdHJlYW1pbmdNZW1iZXJzRGF0YU11dGV4KTsKKyAg
ICBpZiAoc3RyZWFtaW5nTWVtYmVycy0+aXNGbHVzaGluZykgeworICAgICAgICBnc3RfcGFkX3Bh
dXNlX3Rhc2socGFkKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLX0KIAotR3N0U3RhdGVDaGFu
Z2VSZXR1cm4gd2ViS2l0TWVkaWFTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBH
c3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICAgIFdlYktpdE1lZGlhU3JjKiBzb3VyY2Ug
PSBXRUJLSVRfTUVESUFfU1JDKGVsZW1lbnQpOwotICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSog
cHJpdiA9IHNvdXJjZS0+cHJpdjsKKyAgICAvLyBTaW5jZSB0aGUgcGFkIGNhbiBhbmQgd2lsbCBi
ZSBhZGRlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGluIFBMQVlJTkcgc3RhdGUsIHRoaXMgdGFzayBj
YW4gc3RhcnQgcnVubmluZworICAgIC8vIGJlZm9yZSB0aGUgcGFkIGlzIGxpbmtlZC4gV2FpdCBm
b3IgdGhlIHBhZCB0byBiZSBsaW5rZWQgdG8gYXZvaWQgYnVmZmVycyBiZWluZyBsb3N0IHRvIG5v
dC1saW5rZWQgZXJyb3JzLgorICAgIEdTVF9PQkpFQ1RfTE9DSyhwYWQpOworICAgIGlmICghR1NU
X1BBRF9JU19MSU5LRUQocGFkKSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBhZCwgIldh
aXRpbmcgZm9yIHRoZSBwYWQgdG8gYmUgbGlua2VkLi4uIik7CisgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QocGFkLCAibGlua2VkIiwgR19DQUxMQkFDSyh3ZWJLaXRNZWRpYVNyY1BhZExpbmtlZCks
IG51bGxwdHIpOworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhwYWQpOwogCi0gICAgR1NUX0RF
QlVHX09CSkVDVChlbGVtZW50LCAiJXMiLCBnc3Rfc3RhdGVfY2hhbmdlX2dldF9uYW1lKHRyYW5z
aXRpb24pKTsKLSAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9D
SEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgICBwcml2LT5hbGxUcmFja3NDb25maWd1cmVk
ID0gZmFsc2U7Ci0gICAgICAgIHdlYktpdE1lZGlhU3JjRG9Bc3luY1N0YXJ0KHNvdXJjZSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgICAgICBzdHJl
YW1pbmdNZW1iZXJzLT5wYWRMaW5rZWRPckZsdXNoZWRDb25kaXRpb24ud2FpdChzdHJlYW1pbmdN
ZW1iZXJzLm11dGV4KCkpOworCisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3Rf
YnlfZnVuYyhwYWQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHdlYktpdE1lZGlhU3JjUGFkTGlu
a2VkKSwgbnVsbHB0cik7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGFkLCAiRmluaXNoZWQg
d2FpdGluZyBmb3IgdGhlIHBhZCB0byBiZSBsaW5rZWQuIik7CisgICAgICAgIGlmIChzdHJlYW1p
bmdNZW1iZXJzLT5pc0ZsdXNoaW5nKSB7CisgICAgICAgICAgICBnc3RfcGFkX3BhdXNlX3Rhc2so
cGFkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAg
ICBHU1RfT0JKRUNUX1VOTE9DSyhwYWQpOworICAgIEFTU0VSVChnc3RfcGFkX2lzX2xpbmtlZChw
YWQpKTsKKworICAgIC8vIEJ5IGtlZXBpbmcgdGhlIGxvY2sgd2UgYXJlIGd1YXJhbnRlZWQgdGhh
dCBhIGZsdXNoIHdpbGwgbm90IGhhcHBlbiB3aGlsZSB3ZSBzZW5kIGVzc2VudGlhbCBldmVudHMu
CisgICAgLy8gVGhlc2UgZXZlbnRzIHNob3VsZCBuZXZlciBibG9jayBkb3duc3RyZWFtLCBzbyB0
aGUgbG9jayBzaG91bGQgYmUgcmVsZWFzZWQgaW4gbGl0dGxlIHRpbWUgaW4gZXZlcnkKKyAgICAv
LyBjYXNlLgorCisgICAgaWYgKCFzdHJlYW1pbmdNZW1iZXJzLT5oYXNQdXNoZWRTdHJlYW1Db2xs
ZWN0aW9uRXZlbnQpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwYWQsICJQdXNoaW5nIFNU
UkVBTV9DT0xMRUNUSU9OIGV2ZW50LiIpOworICAgICAgICBib29sIHdhc1N0cmVhbUNvbGxlY3Rp
b25TZW50ID0gZ3N0X3BhZF9wdXNoX2V2ZW50KHN0cmVhbS0+cGFkLmdldCgpLCBnc3RfZXZlbnRf
bmV3X3N0cmVhbV9jb2xsZWN0aW9uKHN0cmVhbS0+c291cmNlLT5wcml2LT5jb2xsZWN0aW9uLmdl
dCgpKSk7CisgICAgICAgIHN0cmVhbWluZ01lbWJlcnMtPmhhc1B1c2hlZFN0cmVhbUNvbGxlY3Rp
b25FdmVudCA9IHRydWU7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGFkLCAiU1RSRUFNX0NP
TExFQ1RJT04gZXZlbnQgaGFzIGJlZW4gcHVzaGVkLCAlcyB3YXMgcmV0dXJuZWQuIiwgYm9vbEZv
clByaW50aW5nKHdhc1N0cmVhbUNvbGxlY3Rpb25TZW50KSk7CisgICAgICAgIC8vIEluaXRpYWwg
ZXZlbnRzIGxpa2UgdGhpcyBtdXN0IGdvIHRocm91Z2gsIGZsdXNoZXMgKGluY2x1ZGluZyB0ZWFy
aW5nIGRvd24gdGhlIGVsZW1lbnQpIGlzIG5vdCBhbGxvd2VkIHVudGlsCisgICAgICAgIC8vIGBo
YXNQdXNoZWRGaXJzdEJ1ZmZlcmAgaGFzIGJlZW4gc2V0IHRvIHRydWUuCisgICAgICAgIEFTU0VS
VCh3YXNTdHJlYW1Db2xsZWN0aW9uU2VudCk7CisgICAgfQorCisgICAgaWYgKCFzdHJlYW1pbmdN
ZW1iZXJzLT53YXNTdHJlYW1TdGFydFNlbnQpIHsKKyAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBz
dHJlYW1JZChnX3N0cmR1cF9wcmludGYoIm1zZS8lcyIsIHN0cmVhbS0+dHJhY2stPnRyYWNrSWQo
KS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIEdSZWZQdHI8R3N0RXZlbnQ+IGV2
ZW50ID0gYWRvcHRHUmVmKGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0KHN0cmVhbUlkLmdldCgp
KSk7CisgICAgICAgIGdzdF9ldmVudF9zZXRfZ3JvdXBfaWQoZXZlbnQuZ2V0KCksIHN0cmVhbS0+
c291cmNlLT5wcml2LT5ncm91cElkKTsKKyAgICAgICAgZ3N0X2V2ZW50X3NldF9zdHJlYW0oZXZl
bnQuZ2V0KCksIHN0cmVhbS0+c3RyZWFtSW5mby5nZXQoKSk7CisKKyAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChwYWQsICJQdXNoaW5nIFNUUkVBTV9TVEFSVCBldmVudC4iKTsKKyAgICAgICAgYm9v
bCB3YXNTdHJlYW1TdGFydFNlbnQgPSBnc3RfcGFkX3B1c2hfZXZlbnQocGFkLCBldmVudC5sZWFr
UmVmKCkpOworICAgICAgICBzdHJlYW1pbmdNZW1iZXJzLT53YXNTdHJlYW1TdGFydFNlbnQgPSB3
YXNTdHJlYW1TdGFydFNlbnQ7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGFkLCAiU1RSRUFN
X1NUQVJUIGV2ZW50IHB1c2hlZCwgJXMgd2FzIHJldHVybmVkLiIsIGJvb2xGb3JQcmludGluZyh3
YXNTdHJlYW1TdGFydFNlbnQpKTsKKyAgICAgICAgQVNTRVJUKHdhc1N0cmVhbVN0YXJ0U2VudCk7
CisgICAgfQorCisgICAgaWYgKHN0cmVhbWluZ01lbWJlcnMtPnBlbmRpbmdJbml0aWFsQ2Fwcykg
eworICAgICAgICBHUmVmUHRyPEdzdEV2ZW50PiBldmVudCA9IGFkb3B0R1JlZihnc3RfZXZlbnRf
bmV3X2NhcHMoc3RyZWFtaW5nTWVtYmVycy0+cGVuZGluZ0luaXRpYWxDYXBzLmdldCgpKSk7CisK
KyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwYWQsICJQdXNoaW5nIGluaXRpYWwgQ0FQUyBldmVu
dDogJSIgR1NUX1BUUl9GT1JNQVQsIHN0cmVhbWluZ01lbWJlcnMtPnBlbmRpbmdJbml0aWFsQ2Fw
cy5nZXQoKSk7CisgICAgICAgIGJvb2wgd2FzQ2Fwc0V2ZW50U2VudCA9IGdzdF9wYWRfcHVzaF9l
dmVudChwYWQsIGV2ZW50LmxlYWtSZWYoKSk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGFk
LCAiUHVzaGVkIGluaXRpYWwgQ0FQUyBldmVudCwgJXMgd2FzIHJldHVybmVkLiIsIGJvb2xGb3JQ
cmludGluZyh3YXNDYXBzRXZlbnRTZW50KSk7CisKKyAgICAgICAgc3RyZWFtaW5nTWVtYmVycy0+
cHJldmlvdXNDYXBzID0gV1RGTW92ZShzdHJlYW1pbmdNZW1iZXJzLT5wZW5kaW5nSW5pdGlhbENh
cHMpOworICAgICAgICBBU1NFUlQoIXN0cmVhbWluZ01lbWJlcnMtPnBlbmRpbmdJbml0aWFsQ2Fw
cyk7CisgICAgfQorCisgICAgR1JlZlB0cjxHc3RNaW5pT2JqZWN0PiBvYmplY3Q7CisgICAgewor
ICAgICAgICBEYXRhTXV0ZXg8VHJhY2tRdWV1ZT46OkxvY2tlZFdyYXBwZXIgcXVldWUoc3RyZWFt
LT50cmFjay0+cXVldWVEYXRhTXV0ZXgoKSk7CisgICAgICAgIGlmICghcXVldWUtPmlzRW1wdHko
KSkgeworICAgICAgICAgICAgb2JqZWN0ID0gcXVldWUtPnBvcCgpOworICAgICAgICAgICAgc3Ry
ZWFtaW5nTWVtYmVycy0+aGFzUG9wcGVkRmlyc3RPYmplY3QgPSB0cnVlOworICAgICAgICAgICAg
R1NUX1RSQUNFX09CSkVDVChwYWQsICJRdWV1ZSBub3QgZW1wdHksIHBvcHBlZCAlIiBHU1RfUFRS
X0ZPUk1BVCwgb2JqZWN0LmdldCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHF1
ZXVlLT5ub3RpZnlXaGVuTm90RW1wdHkoWyZvYmplY3QsIHN0cmVhbV0oR1JlZlB0cjxHc3RNaW5p
T2JqZWN0PiYmIHJlY2VpdmVkT2JqZWN0KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICAgICAgICAgICAgICBEYXRhTXV0ZXg8U3RyZWFtOjpTdHJlYW1pbmdN
ZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBzdHJlYW1pbmdNZW1iZXJzKHN0cmVhbS0+c3RyZWFtaW5n
TWVtYmVyc0RhdGFNdXRleCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFzdHJlYW1pbmdNZW1i
ZXJzLT5pc0ZsdXNoaW5nKTsKKworICAgICAgICAgICAgICAgIG9iamVjdCA9IFdURk1vdmUocmVj
ZWl2ZWRPYmplY3QpOworICAgICAgICAgICAgICAgIHN0cmVhbWluZ01lbWJlcnMtPmhhc1BvcHBl
ZEZpcnN0T2JqZWN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzdHJlYW1pbmdNZW1iZXJzLT5x
dWV1ZUNoYW5nZWRPckZsdXNoZWRDb25kaXRpb24ubm90aWZ5QWxsKCk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1QocGFkLCAiV2FpdGluZyBmb3Igb2JqZWN0
cyB0byBiZSBwdXNoZWQgdG8gdGhlIHRyYWNrIHF1ZXVlLiIpOworICAgICAgICB9CiAgICAgfQog
Ci0gICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmVzdWx0ID0gR1NUX0VMRU1FTlRfQ0xBU1MocGFy
ZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotICAgIGlmIChH
X1VOTElLRUxZKHJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpKSB7Ci0gICAgICAg
IEdTVF9XQVJOSU5HX09CSkVDVChzb3VyY2UsICJTdGF0ZSBjaGFuZ2UgZmFpbGVkIik7Ci0gICAg
ICAgIHdlYktpdE1lZGlhU3JjRG9Bc3luY0RvbmUoc291cmNlKTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAvLyBXYWl0IHRvIHJlY2VpdmUgYW4gb2JqZWN0IGZyb20gdGhlIHF1ZXVlIChp
ZiB3ZSBkaWRuJ3QgZ2V0IG9uZSBhbHJlYWR5KSBvciBmbHVzaC4KKyAgICBzdHJlYW1pbmdNZW1i
ZXJzLT5xdWV1ZUNoYW5nZWRPckZsdXNoZWRDb25kaXRpb24ud2FpdChzdHJlYW1pbmdNZW1iZXJz
Lm11dGV4KCksIFsmXSgpIHsKKyAgICAgICAgcmV0dXJuIHN0cmVhbWluZ01lbWJlcnMtPmlzRmx1
c2hpbmcgfHwgb2JqZWN0OworICAgIH0pOworICAgIHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQg
bm90aWZ5V2hlbk5vdEVtcHR5KCkncyBjYWxsYmFjayAoaWYgYW55KSBpcyBjbGVhcmVkIGFmdGVy
IHRoaXMgcG9pbnQuCisgICAgICAgIERhdGFNdXRleDxUcmFja1F1ZXVlPjo6TG9ja2VkV3JhcHBl
ciBxdWV1ZShzdHJlYW0tPnRyYWNrLT5xdWV1ZURhdGFNdXRleCgpKTsKKyAgICAgICAgcXVldWUt
PnJlc2V0Tm90RW1wdHlIYW5kbGVyKCk7CisgICAgfQorICAgIGlmIChzdHJlYW1pbmdNZW1iZXJz
LT5pc0ZsdXNoaW5nKSB7CisgICAgICAgIGdzdF9wYWRfcGF1c2VfdGFzayhwYWQpOworICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBH
U1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgICAgcmVzdWx0ID0gR1NUX1NU
QVRFX0NIQU5HRV9BU1lOQzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hB
TkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICAgICAgd2ViS2l0TWVkaWFTcmNEb0FzeW5jRG9uZShz
b3VyY2UpOwotICAgICAgICBwcml2LT5hbGxUcmFja3NDb25maWd1cmVkID0gZmFsc2U7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgIC8vIFdlIHdhaXQg
dG8gZ2V0IGEgc2FtcGxlIGJlZm9yZSBlbWl0dGluZyB0aGUgZmlyc3Qgc2VnbWVudC4gVGhpcyB3
YXksIGlmIHdlIGdldCBhIHNlZWsgYmVmb3JlIGFueQorICAgIC8vIGVucXVldWUsIHdlJ3JlIHNl
bmRpbmcgb25seSBvbmUgc2VnbWVudC4gVGhpcyBhbHNvIGVuc3VyZXMgdGhhdCB3aGVuIHN1Y2gg
YSBzZWVrIGlzIG1hZGUsIHdoZXJlIHdlIGFsc28KKyAgICAvLyBvbWl0IHRoZSBmbHVzaCAoc2Vl
IHdlYktpdE1lZGlhU3JjRmx1c2gpIHdlIGFjdHVhbGx5IGVtaXQgdGhlIHVwZGF0ZWQsIGNvcnJl
Y3Qgc2VnbWVudC4KKyAgICBpZiAoc3RyZWFtaW5nTWVtYmVycy0+ZG9lc05lZWRTZWdtZW50RXZl
bnQpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwYWQsICJOZWVkIG5ldyBTRUdNRU5UIGV2
ZW50LCBwdXNoaW5nIGl0OiAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsICZzdHJlYW1pbmdNZW1iZXJz
LT5zZWdtZW50KTsKKyAgICAgICAgYm9vbCByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQocGFkLCBn
c3RfZXZlbnRfbmV3X3NlZ21lbnQoJnN0cmVhbWluZ01lbWJlcnMtPnNlZ21lbnQpKTsKKyAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChwYWQsICJTRUdNRU5UIGV2ZW50IHB1c2hlZCwgcmV0ID0gJXMu
IiwgYm9vbEZvclByaW50aW5nKHJldCkpOworICAgICAgICBBU1NFUlQocmV0KTsKKyAgICAgICAg
c3RyZWFtaW5nTWVtYmVycy0+ZG9lc05lZWRTZWdtZW50RXZlbnQgPSBmYWxzZTsKICAgICB9CiAK
LSAgICByZXR1cm4gcmVzdWx0OwotfQorICAgIGlmIChHU1RfSVNfU0FNUExFKG9iamVjdC5nZXQo
KSkpIHsKKyAgICAgICAgR1JlZlB0cjxHc3RTYW1wbGU+IHNhbXBsZSA9IGFkb3B0R1JlZihHU1Rf
U0FNUExFKG9iamVjdC5sZWFrUmVmKCkpKTsKIAotZ2ludDY0IHdlYktpdE1lZGlhU3JjR2V0U2l6
ZShXZWJLaXRNZWRpYVNyYyogd2ViS2l0TWVkaWFTcmMpCi17Ci0gICAgZ2ludDY0IGR1cmF0aW9u
ID0gMDsKLSAgICBmb3IgKFN0cmVhbSogc3RyZWFtIDogd2ViS2l0TWVkaWFTcmMtPnByaXYtPnN0
cmVhbXMpCi0gICAgICAgIGR1cmF0aW9uID0gc3RkOjptYXg8Z2ludDY0PihkdXJhdGlvbiwgZ3N0
X2FwcF9zcmNfZ2V0X3NpemUoR1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpKSk7Ci0gICAgcmV0
dXJuIGR1cmF0aW9uOworICAgICAgICBpZiAoIWdzdF9jYXBzX2lzX2VxdWFsKGdzdF9zYW1wbGVf
Z2V0X2NhcHMoc2FtcGxlLmdldCgpKSwgc3RyZWFtaW5nTWVtYmVycy0+cHJldmlvdXNDYXBzLmdl
dCgpKSkgeworICAgICAgICAgICAgLy8gVGhpcyBzYW1wbGUgbmVlZHMgbmV3IGNhcHMgKHR5cGlj
YWxseSBiZWNhdXNlIG9mIGEgcXVhbGl0eSBjaGFuZ2UpLgorICAgICAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChwYWQsICJQdXNoaW5nIG5ldyBDQVBTIGV2ZW50OiAlIiBHU1RfUFRSX0ZPUk1BVCwg
Z3N0X3NhbXBsZV9nZXRfY2FwcyhzYW1wbGUuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJvb2wgcmV0
ID0gZ3N0X3BhZF9wdXNoX2V2ZW50KHN0cmVhbS0+cGFkLmdldCgpLCBnc3RfZXZlbnRfbmV3X2Nh
cHMoZ3N0X3NhbXBsZV9nZXRfY2FwcyhzYW1wbGUuZ2V0KCkpKSk7CisgICAgICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKHBhZCwgIkNBUFMgZXZlbnQgcHVzaGVkLCByZXQgPSAlcy4iLCBib29sRm9y
UHJpbnRpbmcocmV0KSk7CisgICAgICAgICAgICBBU1NFUlQocmV0KTsKKyAgICAgICAgICAgIHN0
cmVhbWluZ01lbWJlcnMtPnByZXZpb3VzQ2FwcyA9IGdzdF9zYW1wbGVfZ2V0X2NhcHMoc2FtcGxl
LmdldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEdSZWZQdHI8R3N0QnVmZmVyPiBidWZmZXIg
PSBnc3Rfc2FtcGxlX2dldF9idWZmZXIoc2FtcGxlLmdldCgpKTsKKyAgICAgICAgc2FtcGxlLmNs
ZWFyKCk7CisKKyAgICAgICAgYm9vbCBwdXNoaW5nRmlyc3RCdWZmZXIgPSAhc3RyZWFtaW5nTWVt
YmVycy0+aGFzUHVzaGVkRmlyc3RCdWZmZXI7CisgICAgICAgIGlmIChwdXNoaW5nRmlyc3RCdWZm
ZXIpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGFkLCAiU2VuZGluZyBmaXJzdCBi
dWZmZXIgb24gdGhpcyBwYWQuIik7CisgICAgICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IGZpbGVO
YW1lIHsgZ19zdHJkdXBfcHJpbnRmKCJwbGF5YmFjay1waXBlbGluZS1iZWZvcmUtcGxheWJhY2st
JXMiLCBzdHJlYW0tPnRyYWNrLT50cmFja0lkKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSkgfTsK
KyAgICAgICAgICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKGZp
bmRQaXBlbGluZShHUmVmUHRyPEdzdEVsZW1lbnQ+KEdTVF9FTEVNRU5UKHN0cmVhbS0+c291cmNl
KSkpLmdldCgpKSwKKyAgICAgICAgICAgICAgICBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGZp
bGVOYW1lLmdldCgpKTsKKyAgICAgICAgICAgIHN0cmVhbWluZ01lbWJlcnMtPmhhc1B1c2hlZEZp
cnN0QnVmZmVyID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFB1c2ggdGhlIGJ1ZmZl
ciB3aXRob3V0IHRoZSBzdHJlYW1pbmdNZW1iZXJzIGxvY2sgc28gdGhhdCBmbHVzaGVzIGNhbiBo
YXBwZW4gd2hpbGUgaXQgdHJhdmVscyBkb3duc3RyZWFtLgorICAgICAgICBzdHJlYW1pbmdNZW1i
ZXJzLmxvY2tIb2xkZXIoKS51bmxvY2tFYXJseSgpOworCisgICAgICAgIEFTU0VSVChHU1RfQlVG
RkVSX1BUU19JU19WQUxJRChidWZmZXIuZ2V0KCkpKTsKKyAgICAgICAgR1NUX1RSQUNFX09CSkVD
VChwYWQsICJQdXNoaW5nIGJ1ZmZlciBkb3duc3RyZWFtOiAlIiBHU1RfUFRSX0ZPUk1BVCwgYnVm
ZmVyLmdldCgpKTsKKyAgICAgICAgR3N0Rmxvd1JldHVybiByZXQgPSBnc3RfcGFkX3B1c2gocGFk
LCBidWZmZXIubGVha1JlZigpKTsKKyAgICAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSyAmJiBy
ZXQgIT0gR1NUX0ZMT1dfRkxVU0hJTkcpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qo
cGFkLCAiUHVzaGluZyBidWZmZXIgcmV0dXJuZWQgJXMiLCBnc3RfZmxvd19nZXRfbmFtZShyZXQp
KTsKKyAgICAgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gZmlsZU5hbWUgeyBnX3N0cmR1cF9wcmlu
dGYoInBsYXliYWNrLXBpcGVsaW5lLXB1c2hpbmctYnVmZmVyLWZhaWxlZC0lcyIsIHN0cmVhbS0+
dHJhY2stPnRyYWNrSWQoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSB9OworICAgICAgICAgICAg
R1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU4oZmluZFBpcGVsaW5lKEdS
ZWZQdHI8R3N0RWxlbWVudD4oR1NUX0VMRU1FTlQoc3RyZWFtLT5zb3VyY2UpKSkuZ2V0KCkpLAor
ICAgICAgICAgICAgICAgIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgZmlsZU5hbWUuZ2V0KCkp
OworICAgICAgICAgICAgZ3N0X3BhZF9wYXVzZV90YXNrKHBhZCk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgaWYgKEdTVF9JU19FVkVOVChvYmplY3QuZ2V0KCkpKSB7CisgICAgICAgIC8vIEVPUyBl
dmVudHMgYW5kIG90aGVyIGVucXVldWVkIGV2ZW50cyBhcmUgYWxzbyBzZW50IHVubG9ja2VkIHNv
IHRoZXkgY2FuIHJlYWN0IHRvIGZsdXNoZXMgaWYgbmVjZXNzYXJ5LgorICAgICAgICBHUmVmUHRy
PEdzdEV2ZW50PiBldmVudCA9IEdSZWZQdHI8R3N0RXZlbnQ+KEdTVF9FVkVOVChvYmplY3QubGVh
a1JlZigpKSk7CisKKyAgICAgICAgc3RyZWFtaW5nTWVtYmVycy5sb2NrSG9sZGVyKCkudW5sb2Nr
RWFybHkoKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwYWQsICJQdXNoaW5nIGV2ZW50IGRv
d25zdHJlYW06ICUiIEdTVF9QVFJfRk9STUFULCBldmVudC5nZXQoKSk7CisgICAgICAgIGJvb2wg
ZXZlbnRIYW5kbGVkID0gZ3N0X3BhZF9wdXNoX2V2ZW50KHBhZCwgR1JlZlB0cjxHc3RFdmVudD4o
ZXZlbnQpLmxlYWtSZWYoKSk7CisgICAgICAgIGlmICghZXZlbnRIYW5kbGVkKQorICAgICAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChwYWQsICJQdXNoZWQgZXZlbnQgd2FzIG5vdCBoYW5kbGVkOiAl
IiBHU1RfUFRSX0ZPUk1BVCwgZXZlbnQuZ2V0KCkpOworICAgIH0gZWxzZQorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotZ2Jvb2xlYW4gd2ViS2l0TWVkaWFTcmNRdWVyeVdpdGhQ
YXJlbnQoR3N0UGFkKiBwYWQsIEdzdE9iamVjdCogcGFyZW50LCBHc3RRdWVyeSogcXVlcnkpCitz
dGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY1N0cmVhbUZsdXNoKFN0cmVhbSogc3RyZWFtLCBib29s
IGlzU2Vla2luZ0ZsdXNoKQogewotICAgIFdlYktpdE1lZGlhU3JjKiBzb3VyY2UgPSBXRUJLSVRf
TUVESUFfU1JDKEdTVF9FTEVNRU5UKHBhcmVudCkpOwotICAgIGdib29sZWFuIHJlc3VsdCA9IEZB
TFNFOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgYm9vbCBza2lwRmx1c2ggPSBm
YWxzZTsKIAotICAgIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUocXVlcnkpKSB7Ci0gICAgY2FzZSBH
U1RfUVVFUllfRFVSQVRJT046IHsKLSAgICAgICAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgICAgICAg
Z3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uKHF1ZXJ5LCAmZm9ybWF0LCBudWxscHRyKTsKLQotICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHNvdXJjZSwgImR1cmF0aW9uIHF1ZXJ5IGluIGZvcm1hdCAl
cyIsIGdzdF9mb3JtYXRfZ2V0X25hbWUoZm9ybWF0KSk7Ci0gICAgICAgIEdTVF9PQkpFQ1RfTE9D
Syhzb3VyY2UpOwotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAgICBjYXNlIEdTVF9G
T1JNQVRfVElNRTogewotICAgICAgICAgICAgaWYgKHNvdXJjZS0+cHJpdiAmJiBzb3VyY2UtPnBy
aXYtPm1lZGlhUGxheWVyUHJpdmF0ZSkgewotICAgICAgICAgICAgICAgIE1lZGlhVGltZSBkdXJh
dGlvbiA9IHNvdXJjZS0+cHJpdi0+bWVkaWFQbGF5ZXJQcml2YXRlLT5kdXJhdGlvbk1lZGlhVGlt
ZSgpOwotICAgICAgICAgICAgICAgIGlmIChkdXJhdGlvbiA+IE1lZGlhVGltZTo6emVyb1RpbWUo
KSkgewotICAgICAgICAgICAgICAgICAgICBnc3RfcXVlcnlfc2V0X2R1cmF0aW9uKHF1ZXJ5LCBm
b3JtYXQsIFdlYkNvcmU6OnRvR3N0Q2xvY2tUaW1lKGR1cmF0aW9uKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc291cmNlLCAiQW5zd2VyaW5nOiBkdXJhdGlvbj0lIiBH
U1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MoV2ViQ29yZTo6dG9Hc3RDbG9ja1RpbWUoZHVy
YXRpb24pKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRSVUU7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBHU1RfRk9STUFUX0JZVEVTOiB7Ci0gICAgICAgICAgICBpZiAoc291cmNlLT5w
cml2KSB7Ci0gICAgICAgICAgICAgICAgZ2ludDY0IGR1cmF0aW9uID0gd2ViS2l0TWVkaWFTcmNH
ZXRTaXplKHNvdXJjZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGR1cmF0aW9uKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24ocXVlcnksIGZvcm1hdCwgZHVyYXRp
b24pOwotICAgICAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNvdXJjZSwgInNpemU6
ICUiIEdfR0lOVDY0X0ZPUk1BVCwgZHVyYXRpb24pOwotICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBUUlVFOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOworICAgIHsKKyAgICAgICAgRGF0YU11dGV4PFN0cmVhbTo6U3RyZWFtaW5nTWVtYmVy
cz46OkxvY2tlZFdyYXBwZXIgc3RyZWFtaW5nTWVtYmVycyhzdHJlYW0tPnN0cmVhbWluZ01lbWJl
cnNEYXRhTXV0ZXgpOworCisgICAgICAgIGlmICghc3RyZWFtaW5nTWVtYmVycy0+aGFzUG9wcGVk
Rmlyc3RPYmplY3QpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3RyZWFtLT5zb3Vy
Y2UsICJGbHVzaCByZXF1ZXN0IGZvciBzdHJlYW0gJyVzJyBvY2N1cnJlZCBiZWZvcmUgaGFzUG9w
cGVkRmlyc3RPYmplY3QsIGp1c3QgY2xlYXJpbmcgdGhlIHF1ZXVlIGFuZCByZWFkanVzdGluZyB0
aGUgc2VnbWVudC4iLCBzdHJlYW0tPnRyYWNrLT50cmFja0lkKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgICAgICBEYXRhTXV0ZXg8VHJhY2tRdWV1ZT46OkxvY2tlZFdyYXBwZXIg
cXVldWUoc3RyZWFtLT50cmFjay0+cXVldWVEYXRhTXV0ZXgoKSk7CisgICAgICAgICAgICAvLyBX
ZSB1c2UgY2xlYXIoKSBpbnN0ZWFkIG9mIGZsdXNoKCkgYmVjYXVzZSB0aGUgV2ViS2l0TWVkaWFT
cmMgc3RyZWFtaW5nIHRocmVhZCBjb3VsZCBiZSB3YWl0aW5nCisgICAgICAgICAgICAvLyBmb3Ig
dGhlIHF1ZXVlLiBmbHVzaCgpIHdvdWxkIGNhbmNlbCB0aGUgbm90RW1wdHlDYWxsYmFjayB0aGVy
ZWZvcmUgbGVhdmluZyB0aGUgc3RyZWFtaW5nIHRocmVhZAorICAgICAgICAgICAgLy8gc3R1Y2sg
d2FpdGluZyBmb3JldmVyLgorICAgICAgICAgICAgcXVldWUtPmNsZWFyKCk7CisgICAgICAgICAg
ICBza2lwRmx1c2ggPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIXNraXBGbHVzaCkgeworICAgICAgICAvLyBT
aWduYWwgdGhlIGxvb3AoKSBmdW5jdGlvbiB0byBzdG9wIHdhaXRpbmcgZm9yIGFueSBjb25kaXRp
b24gdmFyaWFibGUsIHBhdXNlIHRoZSB0YXNrIGFuZCByZXR1cm4sCisgICAgICAgIC8vIHdoaWNo
IHdpbGwga2VlcGluZyB0aGUgc3RyZWFtaW5nIHRocmVhZCBpZGxlLgorICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHN0cmVhbS0+cGFkLmdldCgpLCAiVGFraW5nIHRoZSBTdHJlYW1pbmdNZW1iZXJz
IG11dGV4IGFuZCBzZXR0aW5nIGlzRmx1c2hpbmcgPSB0cnVlLiIpOworICAgICAgICB7CisgICAg
ICAgICAgICBEYXRhTXV0ZXg8U3RyZWFtOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBl
ciBzdHJlYW1pbmdNZW1iZXJzKHN0cmVhbS0+c3RyZWFtaW5nTWVtYmVyc0RhdGFNdXRleCk7Cisg
ICAgICAgICAgICBEYXRhTXV0ZXg8VHJhY2tRdWV1ZT46OkxvY2tlZFdyYXBwZXIgcXVldWUoc3Ry
ZWFtLT50cmFjay0+cXVldWVEYXRhTXV0ZXgoKSk7CisKKyAgICAgICAgICAgIHN0cmVhbWluZ01l
bWJlcnMtPmlzRmx1c2hpbmcgPSB0cnVlOworICAgICAgICAgICAgcXVldWUtPmZsdXNoKCk7IC8v
IENsZWFyIHRoZSBxdWV1ZSBhbmQgY2FuY2VsIGFueSB3YWl0aW5nIGNhbGxiYWNrLgorCisgICAg
ICAgICAgICBzdHJlYW1pbmdNZW1iZXJzLT5xdWV1ZUNoYW5nZWRPckZsdXNoZWRDb25kaXRpb24u
bm90aWZ5QWxsKCk7CisgICAgICAgICAgICBzdHJlYW1pbmdNZW1iZXJzLT5wYWRMaW5rZWRPckZs
dXNoZWRDb25kaXRpb24ubm90aWZ5QWxsKCk7CiAgICAgICAgIH0KIAotICAgICAgICBHU1RfT0JK
RUNUX1VOTE9DSyhzb3VyY2UpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1Rf
UVVFUllfVVJJOgotICAgICAgICBpZiAoc291cmNlKSB7Ci0gICAgICAgICAgICBHU1RfT0JKRUNU
X0xPQ0soc291cmNlKTsKLSAgICAgICAgICAgIGlmIChzb3VyY2UtPnByaXYpCi0gICAgICAgICAg
ICAgICAgZ3N0X3F1ZXJ5X3NldF91cmkocXVlcnksIHNvdXJjZS0+cHJpdi0+bG9jYXRpb24uZ2V0
KCkpOwotICAgICAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc291cmNlKTsKKyAgICAgICAgLy8g
Rmx1c2ggZG93bnN0cmVhbS4gVGhpcyB3aWxsIHN0b3AgcHJvY2Vzc2luZyBpbiBkb3duc3RyZWFt
IGVsZW1lbnRzIGFuZCBpZiB0aGUgc3RyZWFtaW5nIHRocmVhZCB3YXMgaW4gYQorICAgICAgICAv
LyBkb3duc3RyZWFtIGNoYWluKCkgZnVuY3Rpb24sIGl0IHdpbGwgcXVpY2tseSByZXR1cm4gdG8g
dGhlIGxvb3AoKSBmdW5jdGlvbiwgd2hpY2ggdGhhbmtzIHRvIHRoZQorICAgICAgICAvLyBwcmV2
aW91cyBzZWN0aW9uIHdpbGwgYWxzbyBxdWlja2x5IGVuZC4KKyAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChzdHJlYW0tPnBhZC5nZXQoKSwgIlNlbmRpbmcgRkxVU0hfU1RBUlQgZG93bnN0cmVhbS4i
KTsKKyAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50KHN0cmVhbS0+cGFkLmdldCgpLCBnc3RfZXZl
bnRfbmV3X2ZsdXNoX3N0YXJ0KCkpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHN0cmVhbS0+
cGFkLmdldCgpLCAiRkxVU0hfU1RBUlQgc2VudC4iKTsKKyAgICB9CisKKyAgICAvLyBBZGp1c3Qg
c2VnbWVudC4gVGhpcyBpcyBkaWZmZXJlbnQgZm9yIHNlZWtzIGFuZCBub24tc2Vla2luZyBmbHVz
aGVzLgorICAgIGlmIChpc1NlZWtpbmdGbHVzaCkgeworICAgICAgICAvLyBJbiB0aGUgY2FzZSBv
ZiBzZWVraW5nIGZsdXNoIHdlIGFyZSByZXNldHRpbmcgdGhlIHRpbWVsaW5lIChzZWUgdGhlIGZs
dXNoIHN0b3AgbGF0ZXIpLgorICAgICAgICAvLyBUaGUgcmVzdWx0aW5nIHNlZ21lbnQgaXMgYnJh
bmQgbmV3LCBidXQgd2l0aCBhIGRpZmZlcmVudCBzdGFydCB0aW1lLgorICAgICAgICBXZWJLaXRN
ZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzdHJlYW0tPnNvdXJjZS0+cHJpdjsKKyAgICAgICAgRGF0
YU11dGV4PFN0cmVhbTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgc3RyZWFtaW5n
TWVtYmVycyhzdHJlYW0tPnN0cmVhbWluZ01lbWJlcnNEYXRhTXV0ZXgpOworICAgICAgICBzdHJl
YW1pbmdNZW1iZXJzLT5zZWdtZW50LmJhc2UgPSAwOworICAgICAgICBzdHJlYW1pbmdNZW1iZXJz
LT5zZWdtZW50LnJhdGUgPSBwcml2LT5yYXRlOworICAgICAgICBzdHJlYW1pbmdNZW1iZXJzLT5z
ZWdtZW50LnN0YXJ0ID0gc3RyZWFtaW5nTWVtYmVycy0+c2VnbWVudC50aW1lID0gcHJpdi0+c3Rh
cnRUaW1lOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEluIHRoZSBjYXNlIG9mIG5vbi1zZWVr
aW5nIGZsdXNoZXMgd2UgZG9uJ3QgcmVzZXQgdGhlIHRpbWVsaW5lLCBzbyBpbnN0ZWFkIHdlIG5l
ZWQgdG8gaW5jcmVhc2UgdGhlIGBiYXNlYCBmaWVsZAorICAgICAgICAvLyBieSBob3dldmVyIHJ1
bm5pbmcgdGltZSB3ZSdyZSBzdGFydGluZyBhZnRlciB0aGUgZmx1c2guCisKKyAgICAgICAgR3N0
Q2xvY2tUaW1lIHBpcGVsaW5lU3RyZWFtVGltZTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfcXVlcnlf
cG9zaXRpb24oZmluZFBpcGVsaW5lKEdSZWZQdHI8R3N0RWxlbWVudD4oR1NUX0VMRU1FTlQoc3Ry
ZWFtLT5zb3VyY2UpKSkuZ2V0KCksIEdTVF9GT1JNQVRfVElNRSwKKyAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8Z2ludDY0Kj4oJnBpcGVsaW5lU3RyZWFtVGltZSkpOworICAgICAgICAvLyBH
U1RfQ0xPQ0tfVElNRV9OT05FIGlzIHJldHVybmVkIHdoZW4gdGhlIHBpcGVsaW5lIGlzIG5vdCB5
ZXQgcHJlLXJvbGxlZCAoZS5nLiBqdXN0IGFmdGVyIGEgc2VlaykuIEluIHRoaXMgY2FzZQorICAg
ICAgICAvLyB3ZSBkb24ndCBuZWVkIHRvIGFkanVzdCB0aGUgc2VnbWVudCB0aG91Z2gsIGFzIHJ1
bm5pbmcgdGltZSBoYXMgbm90IGFkdmFuY2VkLgorICAgICAgICBpZiAoR1NUX0NMT0NLX1RJTUVf
SVNfVkFMSUQocGlwZWxpbmVTdHJlYW1UaW1lKSkgeworICAgICAgICAgICAgRGF0YU11dGV4PFN0
cmVhbTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgc3RyZWFtaW5nTWVtYmVycyhz
dHJlYW0tPnN0cmVhbWluZ01lbWJlcnNEYXRhTXV0ZXgpOworICAgICAgICAgICAgLy8gV2UgbmVl
ZCB0byBpbmNyZWFzZSB0aGUgYmFzZSBieSB0aGUgcnVubmluZyB0aW1lIGFjY3VtdWxhdGVkIGR1
cmluZyB0aGUgcHJldmlvdXMgc2VnbWVudC4KKworICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIHBp
cGVsaW5lUnVubmluZ1RpbWUgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUoJnN0cmVhbWlu
Z01lbWJlcnMtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgcGlwZWxpbmVTdHJlYW1UaW1lKTsK
KyAgICAgICAgICAgIGFzc2VydChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRChwaXBlbGluZVJ1bm5p
bmdUaW1lKSk7CisgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHN0cmVhbS0+c291cmNlLCAi
UmVzZXR0aW5nIHNlZ21lbnQgdG8gY3VycmVudCBwaXBlbGluZSBydW5uaW5nIHRpbWUgKCUiIEdT
VF9USU1FX0ZPUk1BVCIpIGFuZCBzdHJlYW0gdGltZSAoJSIgR1NUX1RJTUVfRk9STUFUICIpIiwK
KyAgICAgICAgICAgICAgICBHU1RfVElNRV9BUkdTKHBpcGVsaW5lUnVubmluZ1RpbWUpLCBHU1Rf
VElNRV9BUkdTKHBpcGVsaW5lU3RyZWFtVGltZSkpOworICAgICAgICAgICAgc3RyZWFtaW5nTWVt
YmVycy0+c2VnbWVudC5iYXNlID0gcGlwZWxpbmVSdW5uaW5nVGltZTsKKworICAgICAgICAgICAg
c3RyZWFtaW5nTWVtYmVycy0+c2VnbWVudC5zdGFydCA9IHN0cmVhbWluZ01lbWJlcnMtPnNlZ21l
bnQudGltZSA9IHN0YXRpY19jYXN0PEdzdENsb2NrVGltZT4ocGlwZWxpbmVTdHJlYW1UaW1lKTsK
ICAgICAgICAgfQotICAgICAgICByZXN1bHQgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OiB7Ci0gICAgICAgIEdSZWZQdHI8R3N0UGFkPiB0YXJnZXQgPSBhZG9wdEdSZWYoZ3N0
X2dob3N0X3BhZF9nZXRfdGFyZ2V0KEdTVF9HSE9TVF9QQURfQ0FTVChwYWQpKSk7Ci0gICAgICAg
IC8vIEZvcndhcmQgdGhlIHF1ZXJ5IHRvIHRoZSBwcm94eSB0YXJnZXQgcGFkLgotICAgICAgICBp
ZiAodGFyZ2V0KQotICAgICAgICAgICAgcmVzdWx0ID0gZ3N0X3BhZF9xdWVyeSh0YXJnZXQuZ2V0
KCksIHF1ZXJ5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQogICAgIH0KIAotICAgIHJldHVybiBy
ZXN1bHQ7Ci19CisgICAgaWYgKCFza2lwRmx1c2gpIHsKKyAgICAgICAgLy8gQnkgdGFraW5nIHRo
ZSBzdHJlYW0gbG9jayB3ZSBhcmUgd2FpdGluZyBmb3IgdGhlIHN0cmVhbWluZyB0aHJlYWQgdGFz
ayB0byBzdG9wIGlmIGl0IGhhZG4ndCB5ZXQuCisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3Ry
ZWFtLT5wYWQuZ2V0KCksICJUYWtpbmcgdGhlIFNUUkVBTV9MT0NLLiIpOworICAgICAgICBHU1Rf
UEFEX1NUUkVBTV9MT0NLKHN0cmVhbS0+cGFkLmdldCgpKTsKKyAgICAgICAgeworICAgICAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChzdHJlYW0tPnBhZC5nZXQoKSwgIlRha2luZyB0aGUgU3RyZWFt
aW5nTWVtYmVycyBtdXRleCBhZ2Fpbi4iKTsKKyAgICAgICAgICAgIERhdGFNdXRleDxTdHJlYW06
OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyIHN0cmVhbWluZ01lbWJlcnMoc3RyZWFt
LT5zdHJlYW1pbmdNZW1iZXJzRGF0YU11dGV4KTsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpF
Q1Qoc3RyZWFtLT5wYWQuZ2V0KCksICJTdHJlYW1pbmdNZW1iZXJzIG11dGV4IHRha2VuLCB1c2lu
ZyBpdCB0byBzZXQgaXNGbHVzaGluZyA9IGZhbHNlLiIpOworICAgICAgICAgICAgc3RyZWFtaW5n
TWVtYmVycy0+aXNGbHVzaGluZyA9IGZhbHNlOworICAgICAgICAgICAgc3RyZWFtaW5nTWVtYmVy
cy0+ZG9lc05lZWRTZWdtZW50RXZlbnQgPSB0cnVlOworICAgICAgICB9CiAKLXZvaWQgd2ViS2l0
TWVkaWFTcmNVcGRhdGVQcmVzZW50YXRpb25TaXplKEdzdENhcHMqIGNhcHMsIFN0cmVhbSogc3Ry
ZWFtKQotewotICAgIEdTVF9PQkpFQ1RfTE9DSyhzdHJlYW0tPnBhcmVudCk7Ci0gICAgaWYgKFdl
YkNvcmU6OmRvQ2Fwc0hhdmVUeXBlKGNhcHMsIEdTVF9WSURFT19DQVBTX1RZUEVfUFJFRklYKSkg
ewotICAgICAgICBPcHRpb25hbDxXZWJDb3JlOjpGbG9hdFNpemU+IHNpemUgPSBXZWJDb3JlOjpn
ZXRWaWRlb1Jlc29sdXRpb25Gcm9tQ2FwcyhjYXBzKTsKLSAgICAgICAgaWYgKHNpemUuaGFzVmFs
dWUoKSkKLSAgICAgICAgICAgIHN0cmVhbS0+cHJlc2VudGF0aW9uU2l6ZSA9IHNpemUudmFsdWUo
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RyZWFtLT5wcmVzZW50YXRpb25TaXplID0g
V2ViQ29yZTo6RmxvYXRTaXplKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHN0cmVhbS0+cHJlc2Vu
dGF0aW9uU2l6ZSA9IFdlYkNvcmU6OkZsb2F0U2l6ZSgpOworICAgICAgICBHU1RfREVCVUdfT0JK
RUNUKHN0cmVhbS0+cGFkLmdldCgpLCAiU2VuZGluZyBGTFVTSF9TVE9QIGRvd25zdHJlYW0gKHJl
c2V0VGltZSA9ICVzKS4iLCBib29sRm9yUHJpbnRpbmcoaXNTZWVraW5nRmx1c2gpKTsKKyAgICAg
ICAgLy8gU2luY2UgRkxVU0hfU1RPUCBpcyBhIHN5bmNocm9uaXplZCBldmVudCwgd2Ugc2VuZCBp
dCB3aGlsZSB3ZSBzdGlsbCBob2xkIHRoZSBzdHJlYW0gbG9jayBvZiB0aGUgcGFkLgorICAgICAg
ICBnc3RfcGFkX3B1c2hfZXZlbnQoc3RyZWFtLT5wYWQuZ2V0KCksIGdzdF9ldmVudF9uZXdfZmx1
c2hfc3RvcChpc1NlZWtpbmdGbHVzaCkpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHN0cmVh
bS0+cGFkLmdldCgpLCAiRkxVU0hfU1RPUCBzZW50LiIpOwogCi0gICAgZ3N0X2NhcHNfcmVmKGNh
cHMpOwotICAgIHN0cmVhbS0+Y2FwcyA9IGFkb3B0R1JlZihjYXBzKTsKLSAgICBHU1RfT0JKRUNU
X1VOTE9DSyhzdHJlYW0tPnBhcmVudCk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3RyZWFt
LT5wYWQuZ2V0KCksICJTdGFydGluZyB3ZWJLaXRNZWRpYVNyY0xvb3AgdGFzayBhbmQgcmVsZWFz
aW5nIHRoZSBTVFJFQU1fTE9DSy4iKTsKKyAgICAgICAgZ3N0X3BhZF9zdGFydF90YXNrKHN0cmVh
bS0+cGFkLmdldCgpLCB3ZWJLaXRNZWRpYVNyY0xvb3AsIHN0cmVhbS0+cGFkLmdldCgpLCBudWxs
cHRyKTsKKyAgICAgICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLKHN0cmVhbS0+cGFkLmdldCgpKTsK
KyAgICB9CiB9CiAKLXZvaWQgd2ViS2l0TWVkaWFTcmNMaW5rU3RyZWFtVG9TcmNQYWQoR3N0UGFk
KiBzb3VyY2VQYWQsIFN0cmVhbSogc3RyZWFtKQordm9pZCB3ZWJLaXRNZWRpYVNyY0ZsdXNoKFdl
YktpdE1lZGlhU3JjKiBzb3VyY2UsIGNvbnN0IEF0b21TdHJpbmcmIHN0cmVhbU5hbWUpCiB7Ci0g
ICAgdW5zaWduZWQgcGFkSWQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR1BPSU5URVJfVE9fSU5U
KGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKHNvdXJjZVBhZCksICJwYWRJZCIpKSk7Ci0gICAg
R1NUX0RFQlVHX09CSkVDVChzdHJlYW0tPnBhcmVudCwgImxpbmtpbmcgc3RyZWFtIHRvIHNyYyBw
YWQgKGlkOiAldSkiLCBwYWRJZCk7Ci0KLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBwYWROYW1lKGdf
c3RyZHVwX3ByaW50Zigic3JjXyV1IiwgcGFkSWQpKTsKLSAgICBHc3RQYWQqIGdob3N0cGFkID0g
V2ViQ29yZTo6d2Via2l0R3N0R2hvc3RQYWRGcm9tU3RhdGljVGVtcGxhdGUoJnNyY1RlbXBsYXRl
LCBwYWROYW1lLmdldCgpLCBzb3VyY2VQYWQpOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgR1NUX0RFQlVHX09CSkVDVChzb3VyY2UsICJSZWNlaXZlZCBub24tc2VlayBmbHVzaCBy
ZXF1ZXN0IGZvciBzdHJlYW0gJyVzJy4iLCBzdHJlYW1OYW1lLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOworICAgIFN0cmVhbSogc3RyZWFtID0gc291cmNlLT5wcml2LT5zdHJlYW1CeU5hbWUoc3Ry
ZWFtTmFtZSk7CiAKLSAgICBhdXRvIHByb3h5cGFkID0gYWRvcHRHUmVmKEdTVF9QQUQoZ3N0X3By
b3h5X3BhZF9nZXRfaW50ZXJuYWwoR1NUX1BST1hZX1BBRChnaG9zdHBhZCkpKSk7Ci0gICAgZ3N0
X2Zsb3dfY29tYmluZXJfYWRkX3BhZChzdHJlYW0tPnBhcmVudC0+cHJpdi0+Zmxvd0NvbWJpbmVy
LmdldCgpLCBwcm94eXBhZC5nZXQoKSk7Ci0gICAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24o
cHJveHlwYWQuZ2V0KCksIHN0YXRpY19jYXN0PEdzdFBhZENoYWluRnVuY3Rpb24+KHdlYmtpdE1l
ZGlhU3JjQ2hhaW4pKTsKLSAgICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbihnaG9zdHBhZCwg
d2ViS2l0TWVkaWFTcmNRdWVyeVdpdGhQYXJlbnQpOwotCi0gICAgZ3N0X3BhZF9zZXRfYWN0aXZl
KGdob3N0cGFkLCBUUlVFKTsKLSAgICBnc3RfZWxlbWVudF9hZGRfcGFkKEdTVF9FTEVNRU5UKHN0
cmVhbS0+cGFyZW50KSwgZ2hvc3RwYWQpOworICAgIHdlYktpdE1lZGlhU3JjU3RyZWFtRmx1c2go
c3RyZWFtLCBmYWxzZSk7CiB9CiAKLXZvaWQgd2ViS2l0TWVkaWFTcmNMaW5rU291cmNlUGFkKEdz
dFBhZCogc291cmNlUGFkLCBHc3RDYXBzKiBjYXBzLCBTdHJlYW0qIHN0cmVhbSkKK3N0YXRpYyB2
b2lkIHdlYktpdE1lZGlhU3JjU2VlayhXZWJLaXRNZWRpYVNyYyogc291cmNlLCB1aW50NjRfdCBz
dGFydFRpbWUsIGRvdWJsZSByYXRlKQogewotICAgIEFTU0VSVChjYXBzICYmIHN0cmVhbS0+cGFy
ZW50KTsKLSAgICBpZiAoIWNhcHMgfHwgIXN0cmVhbS0+cGFyZW50KSB7Ci0gICAgICAgIEdTVF9F
UlJPUigiVW5hYmxlIHRvIGxpbmsgcGFyc2VyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICB3ZWJLaXRNZWRpYVNyY1VwZGF0ZVByZXNlbnRhdGlvblNpemUoY2Fwcywgc3RyZWFtKTsK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHNvdXJjZS0+cHJpdi0+c3RhcnRUaW1l
ID0gc3RhcnRUaW1lOworICAgIHNvdXJjZS0+cHJpdi0+cmF0ZSA9IHJhdGU7CisgICAgR1NUX0RF
QlVHX09CSkVDVChzb3VyY2UsICJTZWVrIHJlcXVlc3RlZCB0byB0aW1lICUiIEdTVF9USU1FX0ZP
Uk1BVCAiIHdpdGggcmF0ZSAlZi4iLCBHU1RfVElNRV9BUkdTKHN0YXJ0VGltZSksIHJhdGUpOwog
Ci0gICAgLy8gRklYTUU6IGRyb3Agd2ViS2l0TWVkaWFTcmNMaW5rU3RyZWFtVG9TcmNQYWQoKSBh
bmQgbW92ZSBpdHMgY29kZSBoZXJlLgotICAgIGlmICghZ3N0X3BhZF9pc19saW5rZWQoc291cmNl
UGFkKSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHN0cmVhbS0+cGFyZW50LCAicGFkIG5v
dCBsaW5rZWQgeWV0Iik7Ci0gICAgICAgIHdlYktpdE1lZGlhU3JjTGlua1N0cmVhbVRvU3JjUGFk
KHNvdXJjZVBhZCwgc3RyZWFtKTsKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBzb3VyY2UtPnByaXYt
PnN0cmVhbXMpIHsKKyAgICAgICAgY29uc3QgUmVmUHRyPFN0cmVhbT4mIHN0cmVhbSA9IHBhaXIu
dmFsdWU7CisgICAgICAgIHdlYktpdE1lZGlhU3JjU3RyZWFtRmx1c2goc3RyZWFtLmdldCgpLCB0
cnVlKTsKICAgICB9Ci0KLSAgICB3ZWJLaXRNZWRpYVNyY0NoZWNrQWxsVHJhY2tzQ29uZmlndXJl
ZChzdHJlYW0tPnBhcmVudCk7CiB9CiAKLXZvaWQgd2ViS2l0TWVkaWFTcmNGcmVlU3RyZWFtKFdl
YktpdE1lZGlhU3JjKiBzb3VyY2UsIFN0cmVhbSogc3RyZWFtKQorc3RhdGljIGludCBjb3VudFN0
cmVhbXNPZlR5cGUoV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSwgV2ViQ29yZTo6VHJhY2tQcml2YXRl
QmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlIHR5cGUpCiB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVChz
b3VyY2UsICJSZWxlYXNpbmcgc3RyZWFtOiAlcCIsIHN0cmVhbSk7CisgICAgLy8gQmFycmluZyBw
aXBlbGluZSBkdW1wcyBzb21lb25lIG1heSBhZGQgZHVyaW5nIGRlYnVnZ2luZywgV2ViS2l0IHdp
bGwgb25seSByZWFkIHRoZXNlIHByb3BlcnRpZXMgKG4tdmlkZW8gZXRjLikgZnJvbSB0aGUgbWFp
biB0aHJlYWQuCisgICAgcmV0dXJuIHN0ZDo6Y291bnRfaWYoc291cmNlLT5wcml2LT5zdHJlYW1z
LmJlZ2luKCksIHNvdXJjZS0+cHJpdi0+c3RyZWFtcy5lbmQoKSwgW3R5cGVdKGF1dG8gaXRlbSkg
eworICAgICAgICByZXR1cm4gaXRlbS52YWx1ZS0+dHJhY2stPnR5cGUoKSA9PSB0eXBlOworICAg
IH0pOworfQogCi0gICAgaWYgKEdTVF9JU19BUFBfU1JDKHN0cmVhbS0+YXBwc3JjKSkgewotICAg
ICAgICAvLyBEb24ndCB0cmlnZ2VyIGNhbGxiYWNrcyBmcm9tIHRoaXMgYXBwc3JjIHRvIGF2b2lk
IHVzaW5nIHRoZSBzdHJlYW0gYW55bW9yZS4KLSAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X2NhbGxi
YWNrcyhHU1RfQVBQX1NSQyhzdHJlYW0tPmFwcHNyYyksICZkaXNhYmxlZEFwcHNyY0NhbGxiYWNr
cywgbnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0o
R1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpKTsKLSAgICAgICAgZ3N0X29iamVjdF91bnJlZihz
dHJlYW0tPmFwcHNyYyk7Ci0gICAgfQorc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNHZXRQcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIHVuc2lnbmVkIHByb3BJZCwgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSA9IFdFQktJVF9N
RURJQV9TUkMob2JqZWN0KTsKIAotICAgIEdTVF9PQkpFQ1RfTE9DSyhzb3VyY2UpOwotICAgIHN3
aXRjaCAoc3RyZWFtLT50eXBlKSB7Ci0gICAgY2FzZSBXZWJDb3JlOjpBdWRpbzoKLSAgICAgICAg
c291cmNlLT5wcml2LT5udW1iZXJPZkF1ZGlvU3RyZWFtcy0tOworICAgIHN3aXRjaCAocHJvcElk
KSB7CisgICAgY2FzZSBQUk9QX05fQVVESU86CisgICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1
ZSwgY291bnRTdHJlYW1zT2ZUeXBlKHNvdXJjZSwgV2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZUdT
dHJlYW1lcjo6VHJhY2tUeXBlOjpBdWRpbykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIFdl
YkNvcmU6OlZpZGVvOgotICAgICAgICBzb3VyY2UtPnByaXYtPm51bWJlck9mVmlkZW9TdHJlYW1z
LS07CisgICAgY2FzZSBQUk9QX05fVklERU86CisgICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1
ZSwgY291bnRTdHJlYW1zT2ZUeXBlKHNvdXJjZSwgV2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZUdT
dHJlYW1lcjo6VHJhY2tUeXBlOjpWaWRlbykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIFdl
YkNvcmU6OlRleHQ6Ci0gICAgICAgIHNvdXJjZS0+cHJpdi0+bnVtYmVyT2ZUZXh0U3RyZWFtcy0t
OworICAgIGNhc2UgUFJPUF9OX1RFWFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwg
Y291bnRTdHJlYW1zT2ZUeXBlKHNvdXJjZSwgV2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZUdTdHJl
YW1lcjo6VHJhY2tUeXBlOjpUZXh0KSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGJyZWFrOworICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQo
b2JqZWN0LCBwcm9wSWQsIHBzcGVjKTsKICAgICB9Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0soc291
cmNlKTsKK30KIAotICAgIGlmIChzdHJlYW0tPnR5cGUgIT0gV2ViQ29yZTo6SW52YWxpZCkgewot
ICAgICAgICBHU1RfREVCVUcoIkZyZWVpbmcgdHJhY2stcmVsYXRlZCBpbmZvIG9uIHN0cmVhbSAl
cCIsIHN0cmVhbSk7Ci0KLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc291cmNlLT5wcml2LT5z
dHJlYW1Mb2NrKTsKLQotICAgICAgICBpZiAoc3RyZWFtLT5jYXBzKQotICAgICAgICAgICAgc3Ry
ZWFtLT5jYXBzID0gbnVsbHB0cjsKLQotICAgICAgICBpZiAoc3RyZWFtLT5hdWRpb1RyYWNrKQot
ICAgICAgICAgICAgc3RyZWFtLT5hdWRpb1RyYWNrID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKHN0
cmVhbS0+dmlkZW9UcmFjaykKLSAgICAgICAgICAgIHN0cmVhbS0+dmlkZW9UcmFjayA9IG51bGxw
dHI7Ci0KLSAgICAgICAgaW50IHNpZ25hbCA9IC0xOwotICAgICAgICBzd2l0Y2ggKHN0cmVhbS0+
dHlwZSkgewotICAgICAgICBjYXNlIFdlYkNvcmU6OkF1ZGlvOgotICAgICAgICAgICAgc2lnbmFs
ID0gU0lHTkFMX0FVRElPX0NIQU5HRUQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpWaWRlbzoKLSAgICAgICAgICAgIHNpZ25hbCA9IFNJR05BTF9WSURFT19DSEFO
R0VEOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6VGV4dDoKLSAg
ICAgICAgICAgIHNpZ25hbCA9IFNJR05BTF9URVhUX0NIQU5HRUQ7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOworc3RhdGljIEdzdFN0YXRl
Q2hhbmdlUmV0dXJuIHdlYktpdE1lZGlhU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVu
dCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKK3sKKyAgICBXZWJLaXRNZWRpYVNyYyogc291
cmNlID0gV0VCS0lUX01FRElBX1NSQyhlbGVtZW50KTsKKyAgICBzd2l0Y2ggKHRyYW5zaXRpb24p
IHsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgorICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHNvdXJjZSwgIkRvd25ncmFkaW5nIHRvIFJFQURZIHN0YXRlLCB0ZWFy
aW5nIGRvd24gYWxsIHN0cmVhbXMuLi4iKTsKKyAgICAgICAgd2hpbGUgKCFzb3VyY2UtPnByaXYt
PnN0cmVhbXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgd2ViS2l0TWVkaWFTcmNUZWFyRG93blN0
cmVhbShzb3VyY2UsIHNvdXJjZS0+cHJpdi0+c3RyZWFtcy5iZWdpbigpLT5rZXkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgorICAg
ICAgICBpZiAoc291cmNlLT5wcml2LT5pc1N0YXJ0ZWQoKSkgeworICAgICAgICAgICAgR1NUX0ZJ
WE1FX09CSkVDVChzb3VyY2UsICJSZXN1bWluZyBzdGF0ZSBmcm9tIFJFQURZIC0+IFBBVVNFRCBh
ZnRlciBhIGRvd25ncmFkZSBpcyBub3QgaW1wbGVtZW50ZWQuIEV4cGVjdCBmYWlsdXJlLiIpOwog
ICAgICAgICB9Ci0gICAgICAgIHN0cmVhbS0+dHlwZSA9IFdlYkNvcmU6OkludmFsaWQ7Ci0KLSAg
ICAgICAgaWYgKHNpZ25hbCAhPSAtMSkKLSAgICAgICAgICAgIGdfc2lnbmFsX2VtaXQoR19PQkpF
Q1Qoc291cmNlKSwgd2ViS2l0TWVkaWFTcmNTaWduYWxzW3NpZ25hbF0sIDAsIG51bGxwdHIpOwot
Ci0gICAgICAgIHNvdXJjZS0+cHJpdi0+c3RyZWFtQ29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKICAgICB9Ci0KLSAgICBk
ZWxldGUgc3RyZWFtOworICAgIHJldHVybiBHU1RfRUxFTUVOVF9DTEFTUyh3ZWJraXRfbWVkaWFf
c3JjX3BhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZShlbGVtZW50LCB0cmFuc2l0aW9uKTsKIH0K
IAotdm9pZCB3ZWJLaXRNZWRpYVNyY0NoZWNrQWxsVHJhY2tzQ29uZmlndXJlZChXZWJLaXRNZWRp
YVNyYyogd2ViS2l0TWVkaWFTcmMpCitzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFTcmNTZW5k
RXZlbnQoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0RXZlbnQqIGV2ZW50KQogewotICAgIGJvb2wg
YWxsVHJhY2tzQ29uZmlndXJlZCA9IGZhbHNlOwotCi0gICAgR1NUX09CSkVDVF9MT0NLKHdlYktp
dE1lZGlhU3JjKTsKLSAgICBpZiAoIXdlYktpdE1lZGlhU3JjLT5wcml2LT5hbGxUcmFja3NDb25m
aWd1cmVkKSB7Ci0gICAgICAgIGFsbFRyYWNrc0NvbmZpZ3VyZWQgPSB0cnVlOwotICAgICAgICBm
b3IgKFN0cmVhbSogc3RyZWFtIDogd2ViS2l0TWVkaWFTcmMtPnByaXYtPnN0cmVhbXMpIHsKLSAg
ICAgICAgICAgIGlmIChzdHJlYW0tPnR5cGUgPT0gV2ViQ29yZTo6SW52YWxpZCkgewotICAgICAg
ICAgICAgICAgIGFsbFRyYWNrc0NvbmZpZ3VyZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KKyAgICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFKGV2ZW50KSkg
eworICAgIGNhc2UgR1NUX0VWRU5UX1NFRUs6IHsKKyAgICAgICAgZG91YmxlIHJhdGU7CisgICAg
ICAgIEdzdEZvcm1hdCBmb3JtYXQ7CisgICAgICAgIEdzdFNlZWtUeXBlIHN0YXJ0VHlwZTsKKyAg
ICAgICAgaW50NjRfdCBzdGFydDsKKyAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3NlZWsoZXZlbnQs
ICZyYXRlLCAmZm9ybWF0LCBudWxscHRyLCAmc3RhcnRUeXBlLCAmc3RhcnQsIG51bGxwdHIsIG51
bGxwdHIpOworICAgICAgICBpZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSB8fCBzdGFydFR5
cGUgIT0gR1NUX1NFRUtfVFlQRV9TRVQpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qo
ZWxlbWVudCwgIlJlamVjdGluZyB1bnN1cHBvcnRlZCBzZWVrIGV2ZW50OiAlIiBHU1RfUFRSX0ZP
Uk1BVCwgZXZlbnQpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAg
ICAgIGlmIChhbGxUcmFja3NDb25maWd1cmVkKQotICAgICAgICAgICAgd2ViS2l0TWVkaWFTcmMt
PnByaXYtPmFsbFRyYWNrc0NvbmZpZ3VyZWQgPSB0cnVlOworICAgICAgICBHU1RfREVCVUdfT0JK
RUNUKGVsZW1lbnQsICJIYW5kbGluZyBzZWVrIGV2ZW50OiAlIiBHU1RfUFRSX0ZPUk1BVCwgZXZl
bnQpOworICAgICAgICB3ZWJLaXRNZWRpYVNyY1NlZWsoV0VCS0lUX01FRElBX1NSQyhlbGVtZW50
KSwgc3RhcnQsIHJhdGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgR1NUX09C
SkVDVF9VTkxPQ0sod2ViS2l0TWVkaWFTcmMpOwotCi0gICAgaWYgKGFsbFRyYWNrc0NvbmZpZ3Vy
ZWQpIHsKLSAgICAgICAgR1NUX0RFQlVHKCJBbGwgdHJhY2tzIGF0dGFjaGVkLiBDb21wbGV0aW5n
IGFzeW5jIHN0YXRlIGNoYW5nZSBvcGVyYXRpb24uIik7Ci0gICAgICAgIGdzdF9lbGVtZW50X25v
X21vcmVfcGFkcyhHU1RfRUxFTUVOVCh3ZWJLaXRNZWRpYVNyYykpOwotICAgICAgICB3ZWJLaXRN
ZWRpYVNyY0RvQXN5bmNEb25lKHdlYktpdE1lZGlhU3JjKTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBHU1RfREVCVUdfT0JKRUNUKGVsZW1lbnQsICJSZWplY3RpbmcgdW5zdXBwb3J0ZWQgZXZlbnQ6
ICUiIEdTVF9QVFJfRk9STUFULCBldmVudCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiB9CiAKLS8vIFVyaSBoYW5kbGVyIGludGVyZmFjZS4KLUdzdFVSSVR5cGUgd2ViS2l0TWVkaWFT
cmNVcmlHZXRUeXBlKEdUeXBlKQorLy8gVVJJIGhhbmRsZXIgaW50ZXJmYWNlLiBJdCdzIG9ubHkg
cHVycG9zZSBpcyBmb3IgdGhlIGVsZW1lbnQgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IHBsYXliaW4g
b24gIm1lZGlhc291cmNlYmxvYjoiCisvLyBVUklzLiBUaGUgYWN0dWFsIFVSSSBkb2VzIG5vdCBt
YXR0ZXIuCitzdGF0aWMgR3N0VVJJVHlwZSB3ZWJLaXRNZWRpYVNyY1VyaUdldFR5cGUoR1R5cGUp
CiB7CiAgICAgcmV0dXJuIEdTVF9VUklfU1JDOwogfQogCi1jb25zdCBnY2hhciogY29uc3QqIHdl
YktpdE1lZGlhU3JjR2V0UHJvdG9jb2xzKEdUeXBlKQorc3RhdGljIGNvbnN0IGdjaGFyKiBjb25z
dCogd2ViS2l0TWVkaWFTcmNHZXRQcm90b2NvbHMoR1R5cGUpCiB7CiAgICAgc3RhdGljIGNvbnN0
IGNoYXIqIHByb3RvY29sc1tdID0geyJtZWRpYXNvdXJjZWJsb2IiLCBudWxscHRyIH07CiAgICAg
cmV0dXJuIHByb3RvY29sczsKIH0KIAotZ2NoYXIqIHdlYktpdE1lZGlhU3JjR2V0VXJpKEdzdFVS
SUhhbmRsZXIqIGhhbmRsZXIpCitzdGF0aWMgZ2NoYXIqIHdlYktpdE1lZGlhU3JjR2V0VXJpKEdz
dFVSSUhhbmRsZXIqIGhhbmRsZXIpCiB7CiAgICAgV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSA9IFdF
QktJVF9NRURJQV9TUkMoaGFuZGxlcik7CiAgICAgZ2NoYXIqIHJlc3VsdDsKIAogICAgIEdTVF9P
QkpFQ1RfTE9DSyhzb3VyY2UpOwotICAgIHJlc3VsdCA9IGdfc3RyZHVwKHNvdXJjZS0+cHJpdi0+
bG9jYXRpb24uZ2V0KCkpOworICAgIHJlc3VsdCA9IGdfc3RyZHVwKHNvdXJjZS0+cHJpdi0+dXJp
LmdldCgpKTsKICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzb3VyY2UpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLWdib29sZWFuIHdlYktpdE1lZGlhU3JjU2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhh
bmRsZXIsIGNvbnN0IGdjaGFyKiB1cmksIEdFcnJvcioqKQorc3RhdGljIGdib29sZWFuIHdlYktp
dE1lZGlhU3JjU2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmks
IEdFcnJvcioqKQogewogICAgIFdlYktpdE1lZGlhU3JjKiBzb3VyY2UgPSBXRUJLSVRfTUVESUFf
U1JDKGhhbmRsZXIpOwogCiAgICAgaWYgKEdTVF9TVEFURShzb3VyY2UpID49IEdTVF9TVEFURV9Q
QVVTRUQpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzb3VyY2UsICJVUkkgY2FuIG9ubHkg
YmUgc2V0IGluIHN0YXRlcyA8IFBBVVNFRCIpOwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBHU1RfT0JKRUNUX0xPQ0soc291cmNlKTsK
LSAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzb3VyY2UtPnByaXY7Ci0gICAgcHJp
di0+bG9jYXRpb24gPSBudWxscHRyOwotICAgIGlmICghdXJpKSB7Ci0gICAgICAgIEdTVF9PQkpF
Q1RfVU5MT0NLKHNvdXJjZSk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIFVS
TCB1cmwoVVJMKCksIHVyaSk7Ci0KLSAgICBwcml2LT5sb2NhdGlvbiA9IEdVbmlxdWVQdHI8Z2No
YXI+KGdfc3RyZHVwKHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgc291cmNlLT5w
cml2LT51cmkgPSBHVW5pcXVlUHRyPGNoYXI+KGdfc3RyZHVwKHVyaSkpOwogICAgIEdTVF9PQkpF
Q1RfVU5MT0NLKHNvdXJjZSk7CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKLXZvaWQgd2ViS2l0TWVk
aWFTcmNVcmlIYW5kbGVySW5pdChncG9pbnRlciBnSWZhY2UsIGdwb2ludGVyKQorc3RhdGljIHZv
aWQgd2ViS2l0TWVkaWFTcmNVcmlIYW5kbGVySW5pdCh2b2lkKiBnSWZhY2UsIHZvaWQqKQogewog
ICAgIEdzdFVSSUhhbmRsZXJJbnRlcmZhY2UqIGlmYWNlID0gKEdzdFVSSUhhbmRsZXJJbnRlcmZh
Y2UgKikgZ0lmYWNlOwogCkBAIC02NTYsMTk5ICs3ODQsNiBAQCB2b2lkIHdlYktpdE1lZGlhU3Jj
VXJpSGFuZGxlckluaXQoZ3BvaW50ZXIgZ0lmYWNlLCBncG9pbnRlcikKICAgICBpZmFjZS0+c2V0
X3VyaSA9IHdlYktpdE1lZGlhU3JjU2V0VXJpOwogfQogCi1zdGF0aWMgdm9pZCBzZWVrTmVlZHNE
YXRhTWFpblRocmVhZChXZWJLaXRNZWRpYVNyYyogc291cmNlKQotewotICAgIEdTVF9ERUJVRygi
QnVmZmVyaW5nIG5lZWRlZCBiZWZvcmUgc2VlayIpOwotCi0gICAgQVNTRVJUKFdURjo6aXNNYWlu
VGhyZWFkKCkpOwotCi0gICAgR1NUX09CSkVDVF9MT0NLKHNvdXJjZSk7Ci0gICAgTWVkaWFUaW1l
IHNlZWtUaW1lID0gc291cmNlLT5wcml2LT5zZWVrVGltZTsKLSAgICBXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0UqIG1lZGlhUGxheWVyUHJpdmF0ZSA9IHNvdXJjZS0+cHJp
di0+bWVkaWFQbGF5ZXJQcml2YXRlOwotCi0gICAgaWYgKCFtZWRpYVBsYXllclByaXZhdGUpIHsK
LSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc291cmNlKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGZvciAoU3RyZWFtKiBzdHJlYW0gOiBzb3VyY2UtPnByaXYtPnN0cmVhbXMpIHsK
LSAgICAgICAgaWYgKHN0cmVhbS0+dHlwZSAhPSBXZWJDb3JlOjpJbnZhbGlkKQotICAgICAgICAg
ICAgc3RyZWFtLT5zb3VyY2VCdWZmZXItPnNldFJlYWR5Rm9yTW9yZVNhbXBsZXModHJ1ZSk7Ci0g
ICAgfQotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNvdXJjZSk7Ci0gICAgbWVkaWFQbGF5ZXJQcml2
YXRlLT5ub3RpZnlTZWVrTmVlZHNEYXRhRm9yVGltZShzZWVrVGltZSk7Ci19Ci0KLXN0YXRpYyB2
b2lkIG5vdGlmeVJlYWR5Rm9yTW9yZVNhbXBsZXNNYWluVGhyZWFkKFdlYktpdE1lZGlhU3JjKiBz
b3VyY2UsIFN0cmVhbSogYXBwc3JjU3RyZWFtKQotewotICAgIEdTVF9PQkpFQ1RfTE9DSyhzb3Vy
Y2UpOwotCi0gICAgYXV0byBpdCA9IHN0ZDo6ZmluZChzb3VyY2UtPnByaXYtPnN0cmVhbXMuYmVn
aW4oKSwgc291cmNlLT5wcml2LT5zdHJlYW1zLmVuZCgpLCBhcHBzcmNTdHJlYW0pOwotICAgIGlm
IChpdCA9PSBzb3VyY2UtPnByaXYtPnN0cmVhbXMuZW5kKCkpIHsKLSAgICAgICAgR1NUX09CSkVD
VF9VTkxPQ0soc291cmNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSogbWVkaWFQbGF5ZXJQcml2YXRlID0gc291
cmNlLT5wcml2LT5tZWRpYVBsYXllclByaXZhdGU7Ci0gICAgaWYgKG1lZGlhUGxheWVyUHJpdmF0
ZSAmJiAhbWVkaWFQbGF5ZXJQcml2YXRlLT5zZWVraW5nKCkpCi0gICAgICAgIGFwcHNyY1N0cmVh
bS0+c291cmNlQnVmZmVyLT5ub3RpZnlSZWFkeUZvck1vcmVTYW1wbGVzKCk7Ci0KLSAgICBHU1Rf
T0JKRUNUX1VOTE9DSyhzb3VyY2UpOwotfQotCi12b2lkIHdlYktpdE1lZGlhU3JjUmVzdG9yZVRy
YWNrcyhXZWJLaXRNZWRpYVNyYyogb2xkU291cmNlLCBXZWJLaXRNZWRpYVNyYyogbmV3U291cmNl
KQotewotICAgIG5ld1NvdXJjZS0+cHJpdi0+c3RyZWFtcyA9IFdURk1vdmUob2xkU291cmNlLT5w
cml2LT5zdHJlYW1zKTsKLSAgICBmb3IgKGF1dG8qIHN0cmVhbSA6IG5ld1NvdXJjZS0+cHJpdi0+
c3RyZWFtcykgewotICAgICAgICBzdHJlYW0tPnBhcmVudCA9IG5ld1NvdXJjZTsKLQotICAgICAg
ICBhdXRvIG9sZFNvdXJjZVBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3Bh
ZChzdHJlYW0tPmFwcHNyYywgInNyYyIpKTsKLSAgICAgICAgdW5zaWduZWQgcGFkSWQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oR1BPSU5URVJfVE9fSU5UKGdfb2JqZWN0X2dldF9kYXRhKEdfT0JK
RUNUKG9sZFNvdXJjZVBhZC5nZXQoKSksICJwYWRJZCIpKSk7Ci0KLSAgICAgICAgZ3N0X29iamVj
dF91bnJlZihzdHJlYW0tPmFwcHNyYyk7Ci0KLSAgICAgICAgLy8gRW5zdXJlIG93bmVyc2hpcCBp
cyBub3QgdHJhbnNmZXJlZCB0byB0aGUgYmluLiBUaGUgYXBwc3JjIGVsZW1lbnQgaXMgbWFuYWdl
ZCBieSBpdHMgcGFyZW50IFN0cmVhbS4KLSAgICAgICAgc3RyZWFtLT5hcHBzcmMgPSBHU1RfRUxF
TUVOVF9DQVNUKGdzdF9vYmplY3RfcmVmX3NpbmsoZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJh
cHBzcmMiLCBudWxscHRyKSkpOwotICAgICAgICBzdHJlYW0tPmFwcHNyY05lZWREYXRhRmxhZyA9
IHRydWU7Ci0KLSAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X2NhbGxiYWNrcyhHU1RfQVBQX1NSQyhz
dHJlYW0tPmFwcHNyYyksICZlbmFibGVkQXBwc3JjQ2FsbGJhY2tzLCBzdHJlYW0tPnBhcmVudCwg
bnVsbHB0cik7Ci0gICAgICAgIGdzdF9hcHBfc3JjX3NldF9lbWl0X3NpZ25hbHMoR1NUX0FQUF9T
UkMoc3RyZWFtLT5hcHBzcmMpLCBGQUxTRSk7Ci0gICAgICAgIGdzdF9hcHBfc3JjX3NldF9zdHJl
YW1fdHlwZShHU1RfQVBQX1NSQyhzdHJlYW0tPmFwcHNyYyksIEdTVF9BUFBfU1RSRUFNX1RZUEVf
U0VFS0FCTEUpOwotCi0gICAgICAgIGdzdF9hcHBfc3JjX3NldF9tYXhfYnl0ZXMoR1NUX0FQUF9T
UkMoc3RyZWFtLT5hcHBzcmMpLCAyICogV1RGOjpNQik7Ci0gICAgICAgIGdfb2JqZWN0X3NldChH
X09CSkVDVChzdHJlYW0tPmFwcHNyYyksICJibG9jayIsIEZBTFNFLCAibWluLXBlcmNlbnQiLCAy
MCwgImZvcm1hdCIsIEdTVF9GT1JNQVRfVElNRSwgbnVsbHB0cik7Ci0KLSAgICAgICAgZ3N0X2Jp
bl9hZGQoR1NUX0JJTl9DQVNUKG5ld1NvdXJjZSksIHN0cmVhbS0+YXBwc3JjKTsKLQotICAgICAg
ICBhdXRvIHNvdXJjZVBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChz
dHJlYW0tPmFwcHNyYywgInNyYyIpKTsKLSAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpF
Q1Qoc291cmNlUGFkLmdldCgpKSwgInBhZElkIiwgR0lOVF9UT19QT0lOVEVSKHBhZElkKSk7Ci0g
ICAgfQotCi0gICAgbmV3U291cmNlLT5wcml2LT5udW1iZXJPZkF1ZGlvU3RyZWFtcyA9IG9sZFNv
dXJjZS0+cHJpdi0+bnVtYmVyT2ZBdWRpb1N0cmVhbXM7Ci0gICAgbmV3U291cmNlLT5wcml2LT5u
dW1iZXJPZlRleHRTdHJlYW1zID0gb2xkU291cmNlLT5wcml2LT5udW1iZXJPZlRleHRTdHJlYW1z
OwotICAgIG5ld1NvdXJjZS0+cHJpdi0+bnVtYmVyT2ZWaWRlb1N0cmVhbXMgPSBvbGRTb3VyY2Ut
PnByaXYtPm51bWJlck9mVmlkZW9TdHJlYW1zOwotICAgIG5ld1NvdXJjZS0+cHJpdi0+bnVtYmVy
T2ZQYWRzID0gb2xkU291cmNlLT5wcml2LT5udW1iZXJPZlBhZHM7Ci0gICAgbmV3U291cmNlLT5w
cml2LT5hbGxUcmFja3NDb25maWd1cmVkID0gb2xkU291cmNlLT5wcml2LT5hbGxUcmFja3NDb25m
aWd1cmVkOwotfQotCi12b2lkIHdlYktpdE1lZGlhU3JjU2lnbmFsVHJhY2tzKFdlYktpdE1lZGlh
U3JjKiBzb3VyY2UpCi17Ci0gICAgZm9yIChhdXRvKiBzdHJlYW0gOiBzb3VyY2UtPnByaXYtPnN0
cmVhbXMpIHsKLSAgICAgICAgYXV0byBzb3VyY2VQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRpY19wYWQoc3RyZWFtLT5hcHBzcmMsICJzcmMiKSk7Ci0gICAgICAgIHdlYktpdE1l
ZGlhU3JjTGlua1N0cmVhbVRvU3JjUGFkKHNvdXJjZVBhZC5nZXQoKSwgc3RyZWFtKTsKLQotICAg
ICAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KHN0cmVhbS0+YXBwc3JjKTsK
LQotICAgICAgICBpbnQgc2lnbmFsID0gLTE7Ci0gICAgICAgIHN3aXRjaCAoc3RyZWFtLT50eXBl
KSB7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVy
OjpWaWRlbzoKLSAgICAgICAgICAgIHNpZ25hbCA9IFNJR05BTF9WSURFT19DSEFOR0VEOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1U
eXBlR1N0cmVhbWVyOjpBdWRpbzoKLSAgICAgICAgICAgIHNpZ25hbCA9IFNJR05BTF9BVURJT19D
SEFOR0VEOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFT
b3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpUZXh0OgotICAgICAgICAgICAgc2lnbmFsID0gU0lH
TkFMX1RFWFRfQ0hBTkdFRDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHNpZ25hbCAhPSAtMSkK
LSAgICAgICAgICAgIGdfc2lnbmFsX2VtaXQoR19PQkpFQ1Qoc3RyZWFtLT5wYXJlbnQpLCB3ZWJL
aXRNZWRpYVNyY1NpZ25hbHNbc2lnbmFsXSwgMCwgbnVsbHB0cik7Ci0gICAgfQotCi0gICAgaWYg
KHNvdXJjZS0+cHJpdi0+c3RyZWFtcy5zaXplKCkpIHsKLSAgICAgICAgZ3N0X2VsZW1lbnRfbm9f
bW9yZV9wYWRzKEdTVF9FTEVNRU5UX0NBU1Qoc291cmNlKSk7Ci0gICAgICAgIHdlYktpdE1lZGlh
U3JjRG9Bc3luY0RvbmUoc291cmNlKTsKLSAgICB9Ci19Ci0KLXZvaWQgd2ViS2l0TWVkaWFTcmNT
ZXRNZWRpYVBsYXllclByaXZhdGUoV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSwgV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFKiBtZWRpYVBsYXllclByaXZhdGUpCi17Ci0gICAg
R1NUX09CSkVDVF9MT0NLKHNvdXJjZSk7Ci0KLSAgICAvLyBTZXQgdG8gbnVsbHB0ciBvbiBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIgZGVzdHJ1Y3Rpb24sIG5ldmVyIGEgZGFuZ2xpbmcgcG9p
bnRlci4KLSAgICBzb3VyY2UtPnByaXYtPm1lZGlhUGxheWVyUHJpdmF0ZSA9IG1lZGlhUGxheWVy
UHJpdmF0ZTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzb3VyY2UpOwotfQotCi12b2lkIHdlYktp
dE1lZGlhU3JjU2V0UmVhZHlGb3JTYW1wbGVzKFdlYktpdE1lZGlhU3JjKiBzb3VyY2UsIGJvb2wg
aXNSZWFkeSkKLXsKLSAgICBpZiAoc291cmNlKSB7Ci0gICAgICAgIEdTVF9PQkpFQ1RfTE9DSyhz
b3VyY2UpOwotICAgICAgICBmb3IgKFN0cmVhbSogc3RyZWFtIDogc291cmNlLT5wcml2LT5zdHJl
YW1zKQotICAgICAgICAgICAgc3RyZWFtLT5zb3VyY2VCdWZmZXItPnNldFJlYWR5Rm9yTW9yZVNh
bXBsZXMoaXNSZWFkeSk7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNvdXJjZSk7Ci0gICAg
fQotfQotCi12b2lkIHdlYktpdE1lZGlhU3JjUHJlcGFyZVNlZWsoV2ViS2l0TWVkaWFTcmMqIHNv
dXJjZSwgY29uc3QgTWVkaWFUaW1lJiB0aW1lKQotewotICAgIEdTVF9PQkpFQ1RfTE9DSyhzb3Vy
Y2UpOwotICAgIHNvdXJjZS0+cHJpdi0+c2Vla1RpbWUgPSB0aW1lOwotICAgIHNvdXJjZS0+cHJp
di0+YXBwc3JjU2Vla0RhdGFDb3VudCA9IDA7Ci0gICAgc291cmNlLT5wcml2LT5hcHBzcmNOZWVk
RGF0YUNvdW50ID0gMDsKLQotICAgIGZvciAoU3RyZWFtKiBzdHJlYW0gOiBzb3VyY2UtPnByaXYt
PnN0cmVhbXMpIHsKLSAgICAgICAgc3RyZWFtLT5hcHBzcmNOZWVkRGF0YUZsYWcgPSBmYWxzZTsK
LSAgICAgICAgLy8gRG9uJ3QgYWxsb3cgc2FtcGxlcyBhd2F5IGZyb20gdGhlIHNlZWtUaW1lIHRv
IGJlIGVucXVldWVkLgotICAgICAgICBzdHJlYW0tPmxhc3RFbnF1ZXVlZFRpbWUgPSB0aW1lOwot
ICAgIH0KLQotICAgIC8vIFRoZSBwZW5kaW5nIGFjdGlvbiB3aWxsIGJlIHBlcmZvcm1lZCBpbiBl
bmFibGVkQXBwc3JjU2Vla0RhdGEoKS4KLSAgICBzb3VyY2UtPnByaXYtPmFwcHNyY1NlZWtEYXRh
TmV4dEFjdGlvbiA9IE1lZGlhU291cmNlU2Vla1RvVGltZTsKLSAgICBHU1RfT0JKRUNUX1VOTE9D
Syhzb3VyY2UpOwotfQotCi1Hc3RQYWRQcm9iZVJldHVybiBpbml0aWFsU2Vla1NlZ21lbnRGaXhl
clByb2JlKEdzdFBhZCAqcGFkLCBHc3RQYWRQcm9iZUluZm8gKmluZm8sIGdwb2ludGVyIHVzZXJE
YXRhKQotewotICAgIEdzdEV2ZW50KiBldmVudCA9IEdTVF9QQURfUFJPQkVfSU5GT19FVkVOVChp
bmZvKTsKLSAgICBpZiAoR1NUX0VWRU5UX1RZUEUoZXZlbnQpID09IEdTVF9FVkVOVF9TRUdNRU5U
KSB7Ci0gICAgICAgIGNvbnN0IEdzdFNlZ21lbnQqIG9yaWdpbmFsU2VnbWVudCA9IG51bGxwdHI7
Ci0gICAgICAgIGNvbnN0IEdzdFNlZ21lbnQqIGZpeGVkU2VnbWVudCA9IHN0YXRpY19jYXN0PEdz
dFNlZ21lbnQqPih1c2VyRGF0YSk7Ci0gICAgICAgIGdzdF9ldmVudF9wYXJzZV9zZWdtZW50KGV2
ZW50LCAmb3JpZ2luYWxTZWdtZW50KTsKLSAgICAgICAgR1NUX0RFQlVHKCJTZWdtZW50IGF0ICVz
OiAlIiBHU1RfU0VHTUVOVF9GT1JNQVQgIiwgcmVwbGFjZWQgYnkgJSIgR1NUX1NFR01FTlRfRk9S
TUFULCBHU1RfRUxFTUVOVF9OQU1FKEdTVF9QQURfUEFSRU5UKHBhZCkpLCBvcmlnaW5hbFNlZ21l
bnQsIGZpeGVkU2VnbWVudCk7Ci0gICAgICAgIGdzdF9ldmVudF9yZXBsYWNlKHJlaW50ZXJwcmV0
X2Nhc3Q8R3N0RXZlbnQqKj4oJmluZm8tPmRhdGEpLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQoZml4
ZWRTZWdtZW50KSk7Ci0gICAgICAgIHJldHVybiBHU1RfUEFEX1BST0JFX1JFTU9WRTsKLSAgICB9
Ci0gICAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci19Ci0KLXZvaWQgd2ViS2l0TWVkaWFTcmNQ
cmVwYXJlSW5pdGlhbFNlZWsoV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSwgZG91YmxlIHJhdGUsIGNv
bnN0IE1lZGlhVGltZSYgc3RhcnRUaW1lLCBjb25zdCBNZWRpYVRpbWUmIGVuZFRpbWUpCi17Ci0g
ICAgR1NUX09CSkVDVF9MT0NLKHNvdXJjZSk7Ci0gICAgTWVkaWFUaW1lIHNlZWtUaW1lID0gKHJh
dGUgPj0gMCkgPyBzdGFydFRpbWUgOiBlbmRUaW1lOwotICAgIHNvdXJjZS0+cHJpdi0+c2Vla1Rp
bWUgPSBzZWVrVGltZTsKLSAgICBzb3VyY2UtPnByaXYtPmFwcHNyY1NlZWtEYXRhQ291bnQgPSAw
OwotICAgIHNvdXJjZS0+cHJpdi0+YXBwc3JjTmVlZERhdGFDb3VudCA9IDA7Ci0KLSAgICBmb3Ig
KFN0cmVhbSogc3RyZWFtIDogc291cmNlLT5wcml2LT5zdHJlYW1zKSB7Ci0gICAgICAgIHN0cmVh
bS0+YXBwc3JjTmVlZERhdGFGbGFnID0gZmFsc2U7Ci0gICAgICAgIC8vIERvbid0IGFsbG93IHNh
bXBsZXMgYXdheSBmcm9tIHRoZSBzZWVrVGltZSB0byBiZSBlbnF1ZXVlZC4KLSAgICAgICAgc3Ry
ZWFtLT5sYXN0RW5xdWV1ZWRUaW1lID0gc2Vla1RpbWU7Ci0gICAgfQotCi0gICAgLy8gVGhlIHBl
bmRpbmcgYWN0aW9uIHdpbGwgYmUgcGVyZm9ybWVkIGluIGVuYWJsZWRBcHBzcmNTZWVrRGF0YSgp
LgotICAgIHNvdXJjZS0+cHJpdi0+YXBwc3JjU2Vla0RhdGFOZXh0QWN0aW9uID0gTm90aGluZzsK
LQotICAgIEdVbmlxdWVQdHI8R3N0U2VnbWVudD4gc2VnbWVudChnc3Rfc2VnbWVudF9uZXcoKSk7
Ci0gICAgc2VnbWVudC0+Zm9ybWF0ID0gR1NUX0ZPUk1BVF9USU1FOwotICAgIGdzdF9zZWdtZW50
X2RvX3NlZWsoc2VnbWVudC5nZXQoKSwgcmF0ZSwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICBz
dGF0aWNfY2FzdDxHc3RTZWVrRmxhZ3M+KEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19G
TEFHX0FDQ1VSQVRFKSwKLSAgICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIFdlYkNvcmU6OnRvR3N0
VW5zaWduZWQ2NFRpbWUoc3RhcnRUaW1lKSwKLSAgICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIFdl
YkNvcmU6OnRvR3N0VW5zaWduZWQ2NFRpbWUoZW5kVGltZSksIG51bGxwdHIpOwotCi0gICAgZm9y
IChTdHJlYW0qIHN0cmVhbSA6IHNvdXJjZS0+cHJpdi0+c3RyZWFtcykgewotICAgICAgICAvLyBU
aGlzIHByb2JlIHdpbGwgZml4IHRoZSBzZWdtZW50IGF1dG9nZW5lcmF0ZWQgYnkgYXBwc3JjLgot
ICAgICAgICBHUmVmUHRyPEdzdFBhZD4gcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9z
dGF0aWNfcGFkKHN0cmVhbS0+YXBwc3JjLCAic3JjIikpOwotICAgICAgICBnc3RfcGFkX2FkZF9w
cm9iZShwYWQuZ2V0KCksIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFNLAotICAg
ICAgICAgICAgaW5pdGlhbFNlZWtTZWdtZW50Rml4ZXJQcm9iZSwgZ3N0X3NlZ21lbnRfY29weShz
ZWdtZW50LmdldCgpKSwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZ3N0X3NlZ21l
bnRfZnJlZSkpOwotICAgICAgICBzdHJlYW0tPnNvdXJjZUJ1ZmZlci0+c2V0UmVhZHlGb3JNb3Jl
U2FtcGxlcyh0cnVlKTsKLSAgICB9Ci0KLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzb3VyY2UpOwot
fQotCiBuYW1lc3BhY2UgV1RGIHsKIHRlbXBsYXRlIDw+IEdSZWZQdHI8V2ViS2l0TWVkaWFTcmM+
IGFkb3B0R1JlZihXZWJLaXRNZWRpYVNyYyogcHRyKQogewpAQCAtODY5LDcgKzgwNCw2IEBAIHRl
bXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPFdlYktpdE1lZGlhU3JjPihXZWJLaXRNZWRpYVNyYyog
cHRyKQogICAgIGlmIChwdHIpCiAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYocHRyKTsKIH0KLX07
Cit9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCi0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvV2Vi
S2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaAppbmRleCA5OTRm
YTkyN2ZiNTk5MjJlZDdhY2JiODgzN2UzNTVhY2U3YTMwN2MxLi5hNTVhNTZmOTA2ZGM4YmI3ZDZj
NmRjZjI0OGFmMWJjY2FmMDc2MjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9XZWJLaXRN
ZWRpYVNvdXJjZUdTdHJlYW1lci5oCkBAIC0zLDggKzMsOCBAQAogICogIENvcHlyaWdodCAoQykg
MjAxMyBDb2xsYWJvcmEgTHRkLgogICogIENvcHlyaWdodCAoQykgMjAxMyBPcmFuZ2UKICAqICBD
b3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRy
aWN1bGFyLmNvbT4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgSWdhbGlhLCBTLkwKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYsIDIwMTgsIDIwMTksIDIwMjAsIDIwMjEgTWV0cm9sb2dp
Y2FsIEdyb3VwIEIuVi4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYsIDIwMTgsIDIwMTks
IDIwMjAsIDIwMjEgSWdhbGlhLCBTLkwKICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTMxLDE1ICsz
MSwxMyBAQAogI2luY2x1ZGUgIk1lZGlhU291cmNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIlNvdXJj
ZUJ1ZmZlclByaXZhdGUuaCIKICNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50Lmgi
Ci0jaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGVHU3Ry
ZWFtZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0U7CiAKLWVudW0gTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyIHsg
SW52YWxpZCwgVW5rbm93biwgQXVkaW8sIFZpZGVvLCBUZXh0IH07Ci0KLX0KK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogR19CRUdJTl9ERUNMUwogCkBAIC00OSwzNSArNDcsMzAgQEAgR19CRUdJ
Tl9ERUNMUwogI2RlZmluZSBXRUJLSVRfSVNfTUVESUFfU1JDKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBXRUJLSVRfVFlQRV9NRURJQV9TUkMpKQogI2Rl
ZmluZSBXRUJLSVRfSVNfTUVESUFfU1JDX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNT
X1RZUEUgKChrbGFzcyksIFdFQktJVF9UWVBFX01FRElBX1NSQykpCiAKLXR5cGVkZWYgc3RydWN0
IF9XZWJLaXRNZWRpYVNyYyAgICAgICAgV2ViS2l0TWVkaWFTcmM7Ci10eXBlZGVmIHN0cnVjdCBf
V2ViS2l0TWVkaWFTcmNDbGFzcyAgIFdlYktpdE1lZGlhU3JjQ2xhc3M7Ci10eXBlZGVmIHN0cnVj
dCBfV2ViS2l0TWVkaWFTcmNQcml2YXRlIFdlYktpdE1lZGlhU3JjUHJpdmF0ZTsKK3N0cnVjdCBX
ZWJLaXRNZWRpYVNyY1ByaXZhdGU7CiAKLXN0cnVjdCBfV2ViS2l0TWVkaWFTcmMgewotICAgIEdz
dEJpbiBwYXJlbnQ7CitzdHJ1Y3QgV2ViS2l0TWVkaWFTcmMgeworICAgIEdzdEVsZW1lbnQgcGFy
ZW50OwogCiAgICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlICpwcml2OwogfTsKIAotc3RydWN0IF9X
ZWJLaXRNZWRpYVNyY0NsYXNzIHsKLSAgICBHc3RCaW5DbGFzcyBwYXJlbnRDbGFzczsKLQotICAg
IC8vIE5vdGlmeSBhcHAgdGhhdCBudW1iZXIgb2YgYXVkaW8vdmlkZW8vdGV4dCBzdHJlYW1zIGNo
YW5nZWQuCi0gICAgdm9pZCAoKnZpZGVvQ2hhbmdlZCkoV2ViS2l0TWVkaWFTcmMqKTsKLSAgICB2
b2lkICgqYXVkaW9DaGFuZ2VkKShXZWJLaXRNZWRpYVNyYyopOwotICAgIHZvaWQgKCp0ZXh0Q2hh
bmdlZCkoV2ViS2l0TWVkaWFTcmMqKTsKK3N0cnVjdCBXZWJLaXRNZWRpYVNyY0NsYXNzIHsKKyAg
ICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50Q2xhc3M7CiB9OwogCiBHVHlwZSB3ZWJraXRfbWVkaWFf
c3JjX2dldF90eXBlKHZvaWQpOwogCi12b2lkIHdlYktpdE1lZGlhU3JjUmVzdG9yZVRyYWNrcyhX
ZWJLaXRNZWRpYVNyYyosIFdlYktpdE1lZGlhU3JjKik7Ci12b2lkIHdlYktpdE1lZGlhU3JjU2ln
bmFsVHJhY2tzKFdlYktpdE1lZGlhU3JjKik7Ci12b2lkIHdlYktpdE1lZGlhU3JjU2V0TWVkaWFQ
bGF5ZXJQcml2YXRlKFdlYktpdE1lZGlhU3JjKiwgV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFKik7Cit2b2lkIHdlYktpdE1lZGlhU3JjRW1pdFN0cmVhbXMoV2ViS2l0TWVk
aWFTcmMqIHNvdXJjZSwgY29uc3QgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpNZWRpYVNvdXJjZVRy
YWNrR1N0cmVhbWVyPj4mIHRyYWNrcyk7CiAKLXZvaWQgd2ViS2l0TWVkaWFTcmNQcmVwYXJlU2Vl
ayhXZWJLaXRNZWRpYVNyYyosIGNvbnN0IE1lZGlhVGltZSYpOwotdm9pZCB3ZWJLaXRNZWRpYVNy
Y1ByZXBhcmVJbml0aWFsU2VlayhXZWJLaXRNZWRpYVNyYyosIGRvdWJsZSByYXRlLCBjb25zdCBN
ZWRpYVRpbWUmIHN0YXJ0VGltZSwgY29uc3QgTWVkaWFUaW1lJiBlbmRUaW1lKTsKLXZvaWQgd2Vi
S2l0TWVkaWFTcmNTZXRSZWFkeUZvclNhbXBsZXMoV2ViS2l0TWVkaWFTcmMqLCBib29sKTsKK3Zv
aWQgd2ViS2l0TWVkaWFTcmNGbHVzaChXZWJLaXRNZWRpYVNyYyosIGNvbnN0IEF0b21TdHJpbmcm
IHN0cmVhbU5hbWUpOwogCiBHX0VORF9ERUNMUwogCituYW1lc3BhY2UgV1RGIHsKK3RlbXBsYXRl
PD4gR1JlZlB0cjxXZWJLaXRNZWRpYVNyYz4gYWRvcHRHUmVmKFdlYktpdE1lZGlhU3JjKiBwdHIp
OwordGVtcGxhdGU8PiBXZWJLaXRNZWRpYVNyYyogcmVmR1B0cjxXZWJLaXRNZWRpYVNyYz4oV2Vi
S2l0TWVkaWFTcmMqIHB0cik7Cit0ZW1wbGF0ZTw+IHZvaWQgZGVyZWZHUHRyPFdlYktpdE1lZGlh
U3JjPihXZWJLaXRNZWRpYVNyYyogcHRyKTsKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYg
Ly8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXJQcml2YXRlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1l
ZGlhU291cmNlR1N0cmVhbWVyUHJpdmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA0MTNkZDNmZjZhYjE3NWMwYWJhNzY4ODMzNmMyMWE3MjEwNTlkM2I4Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXJQcml2YXRl
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgotICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxp
YSBTLkwKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFpbnQg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikg
JiYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLQotI2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlR1N0
cmVhbWVyLmgiCi0jaW5jbHVkZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5oIgotI2luY2x1ZGUgIk1h
aW5UaHJlYWROb3RpZmllci5oIgotI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFt
ZXIuaCIKLSNpbmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgotI2luY2x1ZGUg
IldlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmgiCi0KLSNpbmNsdWRlIDxnc3QvYXBwL2dzdGFw
cHNyYy5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgot
I2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U7Ci0KLX07Ci0KLXZvaWQgd2ViS2l0
TWVkaWFTcmNVcmlIYW5kbGVySW5pdChncG9pbnRlciwgZ3BvaW50ZXIpOwotCi0jZGVmaW5lIFdF
QktJVF9NRURJQV9TUkNfR0VUX1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklW
QVRFKChvYmopLCBXRUJLSVRfVFlQRV9NRURJQV9TUkMsIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSkp
Ci0KLXR5cGVkZWYgc3RydWN0IF9TdHJlYW0gU3RyZWFtOwotCi1zdHJ1Y3QgX1N0cmVhbSB7Ci0g
ICAgLy8gRmllbGRzIGZpbGxlZCB3aGVuIHRoZSBTdHJlYW0gaXMgY3JlYXRlZC4KLSAgICBXZWJL
aXRNZWRpYVNyYyogcGFyZW50OwotCi0gICAgLy8gQXBwU3JjLiBOZXZlciBtb2RpZmllZCBhZnRl
ciBmaXJzdCBhc3NpZ25tZW50LgotICAgIEdzdEVsZW1lbnQqIGFwcHNyYzsKLQotICAgIC8vIE5l
dmVyIG1vZGlmaWVkIGFmdGVyIGZpcnN0IGFzc2lnbm1lbnQuCi0gICAgV2ViQ29yZTo6U291cmNl
QnVmZmVyUHJpdmF0ZUdTdHJlYW1lciogc291cmNlQnVmZmVyOwotCi0gICAgLy8gRmllbGRzIGZp
bGxlZCB3aGVuIHRoZSB0cmFjayBpcyBhdHRhY2hlZC4KLSAgICBXZWJDb3JlOjpNZWRpYVNvdXJj
ZVN0cmVhbVR5cGVHU3RyZWFtZXIgdHlwZTsKLSAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHM7Ci0K
LSAgICAvLyBPbmx5IGF1ZGlvLCB2aWRlbyBvciBub3RoaW5nIGF0IGEgZ2l2ZW4gdGltZS4KLSAg
ICBSZWZQdHI8V2ViQ29yZTo6QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+IGF1ZGlvVHJhY2s7
Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiB2aWRlb1Ry
YWNrOwotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBwcmVzZW50YXRpb25TaXplOwotCi0gICAgLy8g
VGhpcyBoZWxwcyBXZWJLaXRNZWRpYVNyY1ByaXZhdGUuYXBwc3JjTmVlZERhdGFDb3VudCwgZW5z
dXJpbmcgdGhhdCBuZWVkRGF0YXMgYXJlCi0gICAgLy8gY291bnRlZCBvbmx5IG9uY2UgcGVyIGVh
Y2ggYXBwc3JjLgotICAgIGJvb2wgYXBwc3JjTmVlZERhdGFGbGFnOwotCi0gICAgLy8gVXNlZCB0
byBlbmZvcmNlIGNvbnRpbnVpdHkgaW4gdGhlIGFwcGVuZGVkIGRhdGEgYW5kIGF2b2lkIGJyZWFr
aW5nIHRoZSBkZWNvZGVyLgotICAgIC8vIE9ubHkgdXNlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4K
LSAgICBNZWRpYVRpbWUgbGFzdEVucXVldWVkVGltZTsKLX07Ci0KLWVudW0gewotICAgIFBST1Bf
MCwKLSAgICBQUk9QX0xPQ0FUSU9OLAotICAgIFBST1BfTl9BVURJTywKLSAgICBQUk9QX05fVklE
RU8sCi0gICAgUFJPUF9OX1RFWFQsCi0gICAgUFJPUF9MQVNUCi19OwotCi1lbnVtIHsKLSAgICBT
SUdOQUxfVklERU9fQ0hBTkdFRCwKLSAgICBTSUdOQUxfQVVESU9fQ0hBTkdFRCwKLSAgICBTSUdO
QUxfVEVYVF9DSEFOR0VELAotICAgIExBU1RfU0lHTkFMCi19OwotCi1lbnVtIE9uU2Vla0RhdGFB
Y3Rpb24gewotICAgIE5vdGhpbmcsCi0gICAgTWVkaWFTb3VyY2VTZWVrVG9UaW1lCi19OwotCi1l
bnVtIFdlYktpdE1lZGlhU3JjTWFpblRocmVhZE5vdGlmaWNhdGlvbiB7Ci0gICAgUmVhZHlGb3JN
b3JlU2FtcGxlcyA9IDEgPDwgMCwKLSAgICBTZWVrTmVlZHNEYXRhID0gMSA8PCAxCi19OwotCi1z
dHJ1Y3QgX1dlYktpdE1lZGlhU3JjUHJpdmF0ZSB7Ci0gICAgLy8gVXNlZCB0byBjb29yZGluYXRl
IHRoZSByZWxlYXNlIG9mIFN0cmVhbSB0cmFjayBpbmZvLgotICAgIExvY2sgc3RyZWFtTG9jazsK
LSAgICBDb25kaXRpb24gc3RyZWFtQ29uZGl0aW9uOwotCi0gICAgLy8gU3RyZWFtcyBhcmUgb25s
eSBhZGRlZC9yZW1vdmVkIGluIHRoZSBtYWluIHRocmVhZC4KLSAgICBWZWN0b3I8U3RyZWFtKj4g
c3RyZWFtczsKLQotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGxvY2F0aW9uOwotICAgIGludCBudW1i
ZXJPZkF1ZGlvU3RyZWFtczsKLSAgICBpbnQgbnVtYmVyT2ZWaWRlb1N0cmVhbXM7Ci0gICAgaW50
IG51bWJlck9mVGV4dFN0cmVhbXM7Ci0gICAgYm9vbCBhc3luY1N0YXJ0OwotICAgIGJvb2wgYWxs
VHJhY2tzQ29uZmlndXJlZDsKLSAgICB1bnNpZ25lZCBudW1iZXJPZlBhZHM7Ci0KLSAgICBNZWRp
YVRpbWUgc2Vla1RpbWU7Ci0KLSAgICAvLyBPbiBzZWVrLCB3ZSB3YWl0IGZvciBhbGwgdGhlIHNl
ZWtEYXRhcywgdGhlbiBmb3IgYWxsIHRoZSBuZWVkRGF0YXMsIGFuZCB0aGVuIHJ1biB0aGUgbmV4
dEFjdGlvbi4KLSAgICBPblNlZWtEYXRhQWN0aW9uIGFwcHNyY1NlZWtEYXRhTmV4dEFjdGlvbjsK
LSAgICBpbnQgYXBwc3JjU2Vla0RhdGFDb3VudDsKLSAgICBpbnQgYXBwc3JjTmVlZERhdGFDb3Vu
dDsKLQotICAgIFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSogbWVkaWFQ
bGF5ZXJQcml2YXRlOwotCi0gICAgUmVmUHRyPFdlYkNvcmU6Ok1haW5UaHJlYWROb3RpZmllcjxX
ZWJLaXRNZWRpYVNyY01haW5UaHJlYWROb3RpZmljYXRpb24+PiBub3RpZmllcjsKLSAgICBHVW5p
cXVlUHRyPEdzdEZsb3dDb21iaW5lcj4gZmxvd0NvbWJpbmVyOwotfTsKLQotZXh0ZXJuIGd1aW50
IHdlYktpdE1lZGlhU3JjU2lnbmFsc1tMQVNUX1NJR05BTF07Ci1leHRlcm4gR3N0QXBwU3JjQ2Fs
bGJhY2tzIGVuYWJsZWRBcHBzcmNDYWxsYmFja3M7Ci1leHRlcm4gR3N0QXBwU3JjQ2FsbGJhY2tz
IGRpc2FibGVkQXBwc3JjQ2FsbGJhY2tzOwotCi12b2lkIHdlYktpdE1lZGlhU3JjVXJpSGFuZGxl
ckluaXQoZ3BvaW50ZXIgZ0lmYWNlLCBncG9pbnRlciBpZmFjZURhdGEpOwotdm9pZCB3ZWJLaXRN
ZWRpYVNyY0ZpbmFsaXplKEdPYmplY3QqKTsKLXZvaWQgd2ViS2l0TWVkaWFTcmNTZXRQcm9wZXJ0
eShHT2JqZWN0KiwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiwgR1BhcmFtU3BlYyop
Owotdm9pZCB3ZWJLaXRNZWRpYVNyY0dldFByb3BlcnR5KEdPYmplY3QqLCBndWludCBwcm9wZXJ0
eUlkLCBHVmFsdWUqLCBHUGFyYW1TcGVjKik7Ci12b2lkIHdlYktpdE1lZGlhU3JjRG9Bc3luY1N0
YXJ0KFdlYktpdE1lZGlhU3JjKik7Ci12b2lkIHdlYktpdE1lZGlhU3JjRG9Bc3luY0RvbmUoV2Vi
S2l0TWVkaWFTcmMqKTsKLUdzdFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktpdE1lZGlhU3JjQ2hhbmdl
U3RhdGUoR3N0RWxlbWVudCosIEdzdFN0YXRlQ2hhbmdlKTsKLWdpbnQ2NCB3ZWJLaXRNZWRpYVNy
Y0dldFNpemUoV2ViS2l0TWVkaWFTcmMqKTsKLWdib29sZWFuIHdlYktpdE1lZGlhU3JjUXVlcnlX
aXRoUGFyZW50KEdzdFBhZCosIEdzdE9iamVjdCosIEdzdFF1ZXJ5Kik7Ci12b2lkIHdlYktpdE1l
ZGlhU3JjVXBkYXRlUHJlc2VudGF0aW9uU2l6ZShHc3RDYXBzKiwgU3RyZWFtKik7Ci12b2lkIHdl
YktpdE1lZGlhU3JjTGlua1N0cmVhbVRvU3JjUGFkKEdzdFBhZCosIFN0cmVhbSopOwotdm9pZCB3
ZWJLaXRNZWRpYVNyY0xpbmtTb3VyY2VQYWQoR3N0UGFkKiwgR3N0Q2FwcyosIFN0cmVhbSopOwot
dm9pZCB3ZWJLaXRNZWRpYVNyY0ZyZWVTdHJlYW0oV2ViS2l0TWVkaWFTcmMqLCBTdHJlYW0qKTsK
LXZvaWQgd2ViS2l0TWVkaWFTcmNDaGVja0FsbFRyYWNrc0NvbmZpZ3VyZWQoV2ViS2l0TWVkaWFT
cmMqKTsKLUdzdFVSSVR5cGUgd2ViS2l0TWVkaWFTcmNVcmlHZXRUeXBlKEdUeXBlKTsKLWNvbnN0
IGdjaGFyKiBjb25zdCogd2ViS2l0TWVkaWFTcmNHZXRQcm90b2NvbHMoR1R5cGUpOwotZ2NoYXIq
IHdlYktpdE1lZGlhU3JjR2V0VXJpKEdzdFVSSUhhbmRsZXIqKTsKLWdib29sZWFuIHdlYktpdE1l
ZGlhU3JjU2V0VXJpKEdzdFVSSUhhbmRsZXIqLCBjb25zdCBnY2hhciosIEdFcnJvcioqKTsKLQot
I2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427545</attachid>
            <date>2021-05-03 02:43:58 -0700</date>
            <delta_ts>2021-05-05 10:45:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225192-20210503114355.patch</filename>
            <type>text/plain</type>
            <size>189077</size>
            <attacher name="Alicia Boya García">aboya</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NjM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGMxMzdkZWEzNjE5N2Nj
NTU3Y2Y3NzJkMGY4ZmEyODg1MDI5ODM5Zi4uMTY3OWNhODA4NjMxY2EwNzg4NGM3MDJkYmUyYzEy
ZTFiMDE5MzdlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1OSBAQAorMjAyMS0wNC0yOSAgQWxp
Y2lhIEJveWEgR2FyY8OtYSAgPGFib3lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW01TRV1bR1N0
cmVhbWVyXSBXZWJLaXRNZWRpYVNyYyByZXdvcmsgdjIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTE5MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggKHJlKWludHJvZHVjZXMgYSBuZXcg
c291cmNlIGVsZW1lbnQgZm9yIHRoZSBNU0UgcGxheWJhY2sKKyAgICAgICAgcGlwZWxpbmUuIFRo
aXMgaXMgYW4gaXRlcmF0aW9uIG9uIHRoZSBwcmV2aW91cyB3b3JrIG9uIHIyNDkyMDUgdGhhdAor
ICAgICAgICBoYWQgdG8gYmUgcmV2ZXJ0ZWQgaW4gcjI1MTM2NSBiZWNhdXNlIG9mIGZsYWt5IHBs
YXliaW4zIGJ1Z3MuCisKKyAgICAgICAgVGhpcyBuZXcgdmVyc2lvbiBhdm9pZHMgdGhlc2UgcGl0
ZmFsbHMgYnkgYXZvaWRpbmcgZmx1c2hlcyBpbgorICAgICAgICBzaXR1YXRpb25zIHdoZXJlIHRo
ZXkgYXJlIGF2b2lkYWJsZSBhbmQga25vd24gdG8gZXhwb3NlIGJ1Z3MuCisKKyAgICAgICAgVGhp
cyByZS1sYW5kIHNoYXJlcyBtYW55IG9mIHRoZSBhZHZhbnRhZ2VzIHRoYXQgbW90aXZhdGVkIHRo
ZSBmaXJzdAorICAgICAgICBwYXRjaDogc2Vla3MgbWFzc2l2ZWx5IG92ZXJzaW1wbGlmaWVkIGFu
ZCBncmVhdGVyIGNvbnRyb2wgYnkgbm8gbG9uZ2VyCisgICAgICAgIHJlbHlpbmcgb24gYXBwc3Jj
LiBJdCBjYW4gaGFuZGxlIGZsdXNoZXMgb2YgaW5kaXZpZHVhbCBzdHJlYW1zCisgICAgICAgIG5h
dGl2ZWx5LgorCisgICAgICAgIFdvcmsgaGFzIGFsc28gZ29uZSBpbnRvIGRlY291cGxpbmcgdGhl
IHN0YXRlIG9mIHRoZSBmcmFtZSBxdWV1ZSBmcm9tCisgICAgICAgIHRoZSBzdGF0ZSBvZiBXZWJL
aXRNZWRpYVNyYyBzbyB0aGF0IHRoZSBiYWNrZW5kIGNhbiBzdXJ2aXZlCisgICAgICAgIHRyYW5z
aXRpb25zIGZyb20gUEFVU0VEIHRvIFJFQURZIGFuZCBiYWNrIHdoaWNoCisgICAgICAgIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lciBjcmVhdGVzIHdoZW4gcGxheWJhY2sgZW5kcy4gVGhpcyBs
YXR0ZXIKKyAgICAgICAgZWZmb3J0IGlzIG5vdCBjb21wbGV0ZSwgYW5kIGluc3RlYWQgdGhpcyB2
ZXJzaW9uIGFkZHMgYSBzcGVjaWFsIGNhc2UKKyAgICAgICAgdG8gaW5oaWJpdCBkb3dud2FyZHMg
YW5kIGJhY2sgdXB3YXJkcyB0cmFuc2l0aW9ucywgYXZvaWRpbmcgYW55CisgICAgICAgIGlzc3Vl
cy4KKworICAgICAgICBJdCBpcyBleHBlY3RlZCB0aGF0IGF0IHRoaXMgcG9pbnQgdGhpcyBuZXcg
YmFja2VuZCBpcyBhdCBsZWFzdCBhcworICAgICAgICBzdGFibGUgYXMgdGhlIHByZXZpb3VzIG9u
ZS4gTm8gTGF5b3V0VGVzdCBoYXMgZ290IHdvcnNlbmVkCisgICAgICAgIGV4cGVjdGF0aW9ucyBm
cm9tIGFkZGluZyB0aGlzIGJhY2tlbmQgYW5kIHNvbWUgaGF2ZSBpbXByb3ZlZC4KKworICAgICAg
ICAqIHBsYXRmb3JtL0dTdHJlYW1lci5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwOgorICAgICAgICAod2ViS2l0R0xW
aWRlb1NpbmtGaW5hbGl6ZSk6CisgICAgICAgICh3ZWJLaXRHTFZpZGVvU2lua1NldE1lZGlhUGxh
eWVyUHJpdmF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQ
dHJHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV1RGOjphZG9wdEdSZWYpOgorICAgICAgICAoV1RG
OjpyZWZHUHRyPEdzdE1pbmlPYmplY3Q+KToKKyAgICAgICAgKFdURjo6ZGVyZWZHUHRyPEdzdE1p
bmlPYmplY3Q+KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0
ckdTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpkb1NlZWspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVUcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTdHJlYW1Db2xsZWN0aW9uTWVzc2FnZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1l
c3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpk
aWRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpj
cmVhdGVHU1RQbGF5QmluKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmludmFsaWRhdGVDYWNoZWRQb3NpdGlvbik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OnNldEluaXRp
YWxDYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6Omlu
aXRpYWxDYXBzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0Fw
cGVuZFBpcGVsaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpwYXJz
ZURlbXV4ZXJTcmNQYWRDYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjph
cHBzaW5rQ2Fwc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmNv
bm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rRnJvbVN0cmVhbWluZ1RocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6Y29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmsp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxp
bmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpkZW11eGVyU3JjUGFkQ2Fw
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bG9hZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnBsYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpwYXVzZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNlZWsp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkb1Nl
ZWspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpz
ZXRSZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRTo6cHJvcGFnYXRlUmVhZHlTdGF0ZVRvUGxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6YXN5bmNTdGF0ZUNoYW5nZURvbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzb3VyY2VT
ZXR1cCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6
OnVwZGF0ZVN0YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0U6OnVuYmxvY2tEdXJhdGlvbkNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkdXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp0cmFja0RldGVjdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c3RhcnRT
b3VyY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0U6Omhhc0FsbFRyYWNrcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OndlYktpdE1lZGlhU3JjKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlUHJpdmF0
ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGVHU3Ry
ZWFtZXI6OmFkZFNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVBy
aXZhdGVHU3RyZWFtZXI6Om1hcmtFbmRPZlN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVNvdXJjZVByaXZhdGVHU3RyZWFtZXI6OnVubWFya0VuZE9mU3RyZWFtKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lcjo6d2FpdEZvclNlZWtDb21wbGV0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyOjpzZWVrQ29t
cGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lcjo6
c3RhcnRQbGF5YmFja0lmSGFzQWxsVHJhY2tzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lci5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1l
ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1l
cjo6TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNv
dXJjZVRyYWNrR1N0cmVhbWVyOjp+TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcik6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcjo6aXNSZWFkeUZvck1vcmVTYW1wbGVz
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXI6Om5vdGlmeVdo
ZW5SZWFkeUZvck1vcmVTYW1wbGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlVHJh
Y2tHU3RyZWFtZXI6OmVucXVldWVPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3Vy
Y2VUcmFja0dTdHJlYW1lcjo6Y2xlYXJRdWV1ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNv
dXJjZVRyYWNrR1N0cmVhbWVyOjpyZW1vdmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lci5oOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1BsYXliYWNrUGlwZWxpbmUuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1NvdXJj
ZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVm
ZmVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVtb3ZlZEZyb21NZWRpYVNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpmbHVzaCk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjplbnF1ZXVlU2FtcGxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OmlzUmVhZHlGb3JN
b3JlU2FtcGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVh
bWVyOjpub3RpZnlDbGllbnRXaGVuUmVhZHlGb3JNb3JlU2FtcGxlcyk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjphbGxTYW1wbGVzSW5UcmFja0VucXVl
dWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OmRp
ZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9tc2UvU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvVHJhY2tRdWV1ZS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tRdWV1ZTo6VHJhY2tRdWV1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUcmFja1F1ZXVlOjplbnF1ZXVlT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRy
YWNrUXVldWU6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUXVldWU6OmZsdXNoKToK
KyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUXVldWU6Om5vdGlmeVdoZW5Mb3dMZXZlbCk6CisgICAg
ICAgIChXZWJDb3JlOjpUcmFja1F1ZXVlOjpwb3ApOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tR
dWV1ZTo6bm90aWZ5V2hlbk5vdEVtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUXVldWU6
OnJlc2V0Tm90RW1wdHlIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUXVldWU6OmNo
ZWNrTG93TGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tRdWV1ZTo6ZHVyYXRpb25FbnF1
ZXVlZCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9U
cmFja1F1ZXVlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tRdWV1ZTo6aXNGdWxs
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUXVldWU6OmlzRW1wdHkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6VHJhY2tRdWV1ZTo6aGFzTm90RW1wdHlIYW5kbGVyIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291
cmNlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYktpdE1lZGlhU3JjUHJpdmF0ZTo6c3RyZWFt
QnlOYW1lKToKKyAgICAgICAgKFdlYktpdE1lZGlhU3JjUHJpdmF0ZTo6aXNTdGFydGVkKToKKyAg
ICAgICAgKFdURjo6YWRvcHRHUmVmKToKKyAgICAgICAgKFdURjo6cmVmR1B0cjxXZWJLaXRNZWRp
YVNyY1BhZD4pOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHI8V2ViS2l0TWVkaWFTcmNQYWQ+KToK
KyAgICAgICAgKHdlYmtpdF9tZWRpYV9zcmNfcGFkX2NsYXNzX2luaXQpOgorICAgICAgICAoU3Ry
ZWFtOjpTdHJlYW0pOgorICAgICAgICAoU3RyZWFtOjpTdHJlYW1pbmdNZW1iZXJzOjpTdHJlYW1p
bmdNZW1iZXJzKToKKyAgICAgICAgKGZpbmRQaXBlbGluZSk6CisgICAgICAgIChnc3RTdHJlYW1U
eXBlKToKKyAgICAgICAgKHN0cmVhbVR5cGVUb1N0cmluZyk6CisgICAgICAgICh3ZWJraXRfbWVk
aWFfc3JjX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X21lZGlhX3NyY19pbml0KToKKyAg
ICAgICAgKHdlYktpdE1lZGlhU3JjRmluYWxpemUpOgorICAgICAgICAod2ViS2l0TWVkaWFTcmNF
bWl0U3RyZWFtcyk6CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY1RlYXJEb3duU3RyZWFtKToKKyAg
ICAgICAgKHdlYktpdE1lZGlhU3JjQWN0aXZhdGVNb2RlKToKKyAgICAgICAgKHdlYktpdE1lZGlh
U3JjUGFkTGlua2VkKToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjTG9vcCk6CisgICAgICAgICh3
ZWJLaXRNZWRpYVNyY1N0cmVhbUZsdXNoKToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjRmx1c2gp
OgorICAgICAgICAod2ViS2l0TWVkaWFTcmNTZWVrKToKKyAgICAgICAgKGNvdW50U3RyZWFtc09m
VHlwZSk6CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY0dldFByb3BlcnR5KToKKyAgICAgICAgKHdl
YktpdE1lZGlhU3JjQ2hhbmdlU3RhdGUpOgorICAgICAgICAod2ViS2l0TWVkaWFTcmNTZW5kRXZl
bnQpOgorICAgICAgICAod2ViS2l0TWVkaWFTcmNVcmlHZXRUeXBlKToKKyAgICAgICAgKHdlYktp
dE1lZGlhU3JjR2V0UHJvdG9jb2xzKToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjR2V0VXJpKToK
KyAgICAgICAgKHdlYktpdE1lZGlhU3JjU2V0VXJpKToKKyAgICAgICAgKHdlYktpdE1lZGlhU3Jj
VXJpSGFuZGxlckluaXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyUHJpdmF0ZS5oOiBS
ZW1vdmVkLgorCiAyMDIxLTA0LTIxICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtjc3MtZmxleGJveF0gcGVyY2VudCBjaGlsZHJlbiBkb24ndCBy
ZXNvbHZlIGFnYWluc3QgdGhlIGZsZXggYmFzaXMgb24gYSBmdWxseSBpbmZsZXhpYmxlIGl0ZW0g
d2l0aCBmaXhlZCBmbGV4LWJhc2lzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21h
a2UKaW5kZXggYmEwYWIyYjQ3NTc4OGEyMWRiNjNlNDk0N2NlZTE3ZjgyNzBiOThmMS4uNGE3NjQw
NDkxYzUxZjMzYTQ2ZWY4N2RkYzUxYzdiNzBiNTNkOTllMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0dTdHJlYW1lci5jbWFrZQpAQCAtMzcsOCArMzcsOSBAQCBpZiAoRU5BQkxFX1ZJREVPIE9S
IEVOQUJMRV9XRUJfQVVESU8pCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvR1N0cmVhbWVyUmVnaXN0cnlTY2FubmVyTVNFLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNvdXJjZVByaXZhdGVH
U3RyZWFtZXIuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvUGxh
eWJhY2tQaXBlbGluZS5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21z
ZS9NZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvbXNlL1NvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuY3BwCisgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvVHJhY2tRdWV1ZS5jcHAKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1l
ci5jcHAKIAogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvR1N0cmVhbWVy
VmlkZW9Db21tb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNwcAppbmRl
eCBhN2NkOTczMWZlNzRiYzk3ZDBmNjcxOTNiMzcyYjgyMTEyZjlkNjY4Li5kNTBjNzhhNmYwYTRi
ZWY2MTU4NTI1MjQzOWNmZTNlYzgxYzZmMzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZpZGVvU2lua0dT
dHJlYW1lci5jcHAKQEAgLTEzNSw2ICsxMzUsOCBAQCB2b2lkIHdlYktpdEdMVmlkZW9TaW5rRmlu
YWxpemUoR09iamVjdCogb2JqZWN0KQogICAgIGlmIChwcml2LT5tZWRpYVBsYXllclByaXZhdGUp
CiAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShwcml2LT5hcHBT
aW5rLmdldCgpLCBwcml2LT5tZWRpYVBsYXllclByaXZhdGUpOwogCisgICAgR1NUX0RFQlVHX09C
SkVDVChvYmplY3QsICJXZWJLaXRHTFZpZGVvU2luayBmaW5hbGl6ZWQuIik7CisKICAgICBHU1Rf
Q0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1MsIGZpbmFsaXplLCAob2JqZWN0KSk7CiB9CiAKQEAg
LTI0MCwxMSArMjQyLDE1IEBAIHZvaWQgd2ViS2l0R0xWaWRlb1NpbmtTZXRNZWRpYVBsYXllclBy
aXZhdGUoV2ViS2l0R0xWaWRlb1NpbmsqIHNpbmssIE1lZGlhUGxheWVyCiAgICAgcHJpdi0+bWVk
aWFQbGF5ZXJQcml2YXRlID0gcGxheWVyOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QocHJpdi0+YXBw
U2luay5nZXQoKSwgIm5ldy1zYW1wbGUiLCBHX0NBTExCQUNLKCtbXShHc3RFbGVtZW50KiBzaW5r
LCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikgLT4gR3N0Rmxvd1JldHVybiB7
CiAgICAgICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBzYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9z
aW5rX3B1bGxfc2FtcGxlKEdTVF9BUFBfU0lOSyhzaW5rKSkpOworICAgICAgICBHc3RCdWZmZXIq
IGJ1ZmZlciA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihzYW1wbGUuZ2V0KCkpOworICAgICAgICBH
U1RfVFJBQ0VfT0JKRUNUKHNpbmssICJuZXctc2FtcGxlIHdpdGggUFRTPSUiIEdTVF9USU1FX0ZP
Uk1BVCwgR1NUX1RJTUVfQVJHUyhHU1RfQlVGRkVSX1BUUyhidWZmZXIpKSk7CiAgICAgICAgIHBs
YXllci0+dHJpZ2dlclJlcGFpbnQoc2FtcGxlLmdldCgpKTsKICAgICAgICAgcmV0dXJuIEdTVF9G
TE9XX09LOwogICAgIH0pLCBwbGF5ZXIpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QocHJpdi0+YXBw
U2luay5nZXQoKSwgIm5ldy1wcmVyb2xsIiwgR19DQUxMQkFDSygrW10oR3N0RWxlbWVudCogc2lu
aywgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpIC0+IEdzdEZsb3dSZXR1cm4g
ewogICAgICAgICBHUmVmUHRyPEdzdFNhbXBsZT4gc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBf
c2lua19wdWxsX3ByZXJvbGwoR1NUX0FQUF9TSU5LKHNpbmspKSk7CisgICAgICAgIEdzdEJ1ZmZl
ciogYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKHNhbXBsZS5nZXQoKSk7CisgICAgICAg
IEdTVF9ERUJVR19PQkpFQ1Qoc2luaywgIm5ldy1wcmVyb2xsIHdpdGggUFRTPSUiIEdTVF9USU1F
X0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyhHU1RfQlVGRkVSX1BUUyhidWZmZXIpKSk7CiAgICAgICAg
IHBsYXllci0+dHJpZ2dlclJlcGFpbnQoc2FtcGxlLmdldCgpKTsKICAgICAgICAgcmV0dXJuIEdT
VF9GTE9XX09LOwogICAgIH0pLCBwbGF5ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3Bw
CmluZGV4IDRmZjJhOWRhYWMwNWU0YzcxNGI4N2QzMWM1NmY5MWMwNDBjOGExZDIuLjIzYWMxMjU3
NjYyMTk3ZmE0ZWFjOTdhOTk3Y2I1ZDBmZWVlNzQzOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJl
YW1lci5jcHAKQEAgLTI5LDYgKzI5LDI1IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCit0ZW1wbGF0
ZTw+IEdSZWZQdHI8R3N0TWluaU9iamVjdD4gYWRvcHRHUmVmKEdzdE1pbmlPYmplY3QqIHB0cikK
K3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RNaW5pT2JqZWN0PihwdHIsIEdSZWZQdHJBZG9wdCk7
Cit9CisKK3RlbXBsYXRlPD4gR3N0TWluaU9iamVjdCogcmVmR1B0cjxHc3RNaW5pT2JqZWN0PihH
c3RNaW5pT2JqZWN0KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X21pbmlfb2Jq
ZWN0X3JlZihwdHIpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGU8PiB2b2lkIGRl
cmVmR1B0cjxHc3RNaW5pT2JqZWN0PihHc3RNaW5pT2JqZWN0KiBwdHIpCit7CisgICAgaWYgKHB0
cikKKyAgICAgICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmKHB0cik7Cit9CisKIHRlbXBsYXRlIDw+
IEdSZWZQdHI8R3N0RWxlbWVudD4gYWRvcHRHUmVmKEdzdEVsZW1lbnQqIHB0cikKIHsKICAgICBB
U1NFUlQoIXB0ciB8fCAhZ19vYmplY3RfaXNfZmxvYXRpbmcocHRyKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1l
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJH
U3RyZWFtZXIuaAppbmRleCBhZmIxMzRkNzk1M2FjNzM2MTE4NTc1N2U1ZWEwNzA4Y2Q0NWRjMWI1
Li4wNzhkM2M1NjM5NzRmNmEyYjNhZjFlYjgzOTg2NDk4Nzk0NWZhN2Q4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1l
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVm
UHRyR1N0cmVhbWVyLmgKQEAgLTM5LDYgKzM5LDEwIEBAIHRlbXBsYXRlPD4gR1JlZlB0cjxHc3RQ
bHVnaW4+IGFkb3B0R1JlZihHc3RQbHVnaW4qIHB0cik7CiB0ZW1wbGF0ZTw+IEdzdFBsdWdpbiog
cmVmR1B0cjxHc3RQbHVnaW4+KEdzdFBsdWdpbiogcHRyKTsKIHRlbXBsYXRlPD4gdm9pZCBkZXJl
ZkdQdHI8R3N0UGx1Z2luPihHc3RQbHVnaW4qIHB0cik7CiAKK3RlbXBsYXRlPD4gR1JlZlB0cjxH
c3RNaW5pT2JqZWN0PiBhZG9wdEdSZWYoR3N0TWluaU9iamVjdCogcHRyKTsKK3RlbXBsYXRlPD4g
R3N0TWluaU9iamVjdCogcmVmR1B0cjxHc3RNaW5pT2JqZWN0PihHc3RNaW5pT2JqZWN0KiBwdHIp
OwordGVtcGxhdGU8PiB2b2lkIGRlcmVmR1B0cjxHc3RNaW5pT2JqZWN0PihHc3RNaW5pT2JqZWN0
KiBwdHIpOworCiB0ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0RWxlbWVudD4gYWRvcHRHUmVmKEdzdEVs
ZW1lbnQqIHB0cik7CiB0ZW1wbGF0ZTw+IEdzdEVsZW1lbnQqIHJlZkdQdHI8R3N0RWxlbWVudD4o
R3N0RWxlbWVudCogcHRyKTsKIHRlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8R3N0RWxlbWVudD4o
R3N0RWxlbWVudCogcHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5jcHAKaW5kZXggY2NjNDlhZWRlNDE2NmQ0YzYwNTQyYjA5MzNkYzY0NWEzODc1NTM5
MC4uMWJjYzBmODRjMDczYzg1MThiMjAxODIwM2M2Y2RjNTk4YzcyYWU3ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTQzOCw3ICs0Mzgs
NyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGF1c2VkKCkgY29uc3QKICAg
ICByZXR1cm4gcGF1c2VkOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
ZG9TZWVrKGNvbnN0IE1lZGlhVGltZSYgcG9zaXRpb24sIGZsb2F0IHJhdGUsIEdzdFNlZWtGbGFn
cyBzZWVrVHlwZSkKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkb1NlZWsoY29u
c3QgTWVkaWFUaW1lJiBwb3NpdGlvbiwgZmxvYXQgcmF0ZSwgR3N0U2Vla0ZsYWdzIHNlZWtGbGFn
cykKIHsKICAgICAvLyBEZWZhdWx0IHZhbHVlcyBmb3IgcmF0ZSA+PSAwLgogICAgIE1lZGlhVGlt
ZSBzdGFydFRpbWUgPSBwb3NpdGlvbiwgZW5kVGltZSA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUo
KTsKQEAgLTQ1Myw3ICs0NTMsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
ZG9TZWVrKGNvbnN0IE1lZGlhVGltZSYgcG9zaXRpb24sIGZsb2F0IHJhdGUsCiAgICAgICAgIHJh
dGUgPSAxLjA7CiAKICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbU2Vla10gUGVy
Zm9ybWluZyBhY3R1YWwgc2VlayB0byAlIiBHU1RfVElNRV9GT1JNQVQgIiAoZW5kVGltZTogJSIg
R1NUX1RJTUVfRk9STUFUICIpIGF0IHJhdGUgJWYiLCBHU1RfVElNRV9BUkdTKHRvR3N0Q2xvY2tU
aW1lKHN0YXJ0VGltZSkpLCBHU1RfVElNRV9BUkdTKHRvR3N0Q2xvY2tUaW1lKGVuZFRpbWUpKSwg
cmF0ZSk7Ci0gICAgcmV0dXJuIGdzdF9lbGVtZW50X3NlZWsobV9waXBlbGluZS5nZXQoKSwgcmF0
ZSwgR1NUX0ZPUk1BVF9USU1FLCBzZWVrVHlwZSwKKyAgICByZXR1cm4gZ3N0X2VsZW1lbnRfc2Vl
ayhtX3BpcGVsaW5lLmdldCgpLCByYXRlLCBHU1RfRk9STUFUX1RJTUUsIHNlZWtGbGFncywKICAg
ICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIHRvR3N0Q2xvY2tUaW1lKHN0YXJ0VGltZSksIEdTVF9T
RUVLX1RZUEVfU0VULCB0b0dzdENsb2NrVGltZShlbmRUaW1lKSk7CiB9CiAKQEAgLTE0ODIsMTgg
KzE0ODIsMTYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVRyYWNr
cyhjb25zdCBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24KICAgICB1bnNpZ25lZCB0ZXh0VHJh
Y2tJbmRleCA9IDA7CiAKICNkZWZpbmUgQ1JFQVRFX1RSQUNLKHR5cGUsIFR5cGUpIEdfU1RNVF9T
VEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKCF1c2VNZWRpYVNv
dXJjZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgIFJlZlB0cjxUeXBlIyNUcmFja1ByaXZhdGVHU3RyZWFtZXI+IHRyYWNrID0gVHlwZSMj
VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobWFrZVdlYWtQdHIoKnRoaXMpLCB0eXBlIyNU
cmFja0luZGV4LCBzdHJlYW0pOyBcCi0gICAgICAgICAgICBhdXRvIHRyYWNrSWQgPSB0cmFjay0+
aWQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAo
IXR5cGUjI1RyYWNrSW5kZXgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICAgICAgbV93YW50ZWQjI1R5cGUjI1N0cmVhbUlkID0gdHJhY2tJZDsgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgbV9yZXF1ZXN0ZWQjI1R5cGUjI1N0
cmVhbUlkID0gdHJhY2tJZDsgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgdHJh
Y2stPnNldEFjdGl2ZSh0cnVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0eXBlIyNUcmFja0luZGV4Kys7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBtXyMjdHlwZSMj
VHJhY2tzLmFkZCh0cmFja0lkLCB0cmFjayk7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICAgICBtX3BsYXllci0+YWRkIyNUeXBlIyNUcmFjaygqdHJhY2spOyAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFJlZlB0cjxUeXBlIyNUcmFj
a1ByaXZhdGVHU3RyZWFtZXI+IHRyYWNrID0gVHlwZSMjVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpj
cmVhdGUobWFrZVdlYWtQdHIoKnRoaXMpLCB0eXBlIyNUcmFja0luZGV4LCBzdHJlYW0pOyBcCisg
ICAgICAgIGF1dG8gdHJhY2tJZCA9IHRyYWNrLT5pZCgpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgaWYgKCF0eXBlIyNUcmFja0luZGV4KSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgbV93YW50ZWQjI1R5cGUjI1N0
cmVhbUlkID0gdHJhY2tJZDsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBtX3Jl
cXVlc3RlZCMjVHlwZSMjU3RyZWFtSWQgPSB0cmFja0lkOyAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgIHRyYWNrLT5zZXRBY3RpdmUodHJ1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHR5cGUjI1RyYWNrSW5kZXgrKzsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbV8jI3R5cGUj
I1RyYWNrcy5hZGQodHJhY2tJZCwgdHJhY2spOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBtX3BsYXllci0+YWRkIyNUeXBlIyNUcmFjaygqdHJhY2spOyAgICAgICAgICAgICAgICAg
ICAgICAgICBcCiAgICAgfSBHX1NUTVRfRU5ECiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKQEAgLTE1NDAsNiArMTUzOCwxNSBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3RyZWFtQ29sbGVjdGlvbk1lc3NhZ2UoR3N0TWVzc2Fn
ZSogbWVzcwogICAgIGlmIChtX2lzTGVnYWN5UGxheWJpbikKICAgICAgICAgcmV0dXJuOwogCisg
ICAgLy8gR1N0cmVhbWVyIHdvcmthcm91bmQ6CisgICAgLy8gVW5mb3J0dW5hdGVseSwgd2hlbiB3
ZSBoYXZlIGEgc3RyZWFtLWNvbGxlY3Rpb24gYXdhcmUgc291cmNlIChsaWtlIFdlYktpdE1lZGlh
U3JjKSBwYXJzZWJpbiBhbmQgZGVjb2RlYmluMyBlbWl0CisgICAgLy8gdGhlaXIgb3duIHN0cmVh
bS1jb2xsZWN0aW9uIG1lc3NhZ2VzLCBidXQgbGF0ZSwgYW5kIHNvbWV0aW1lcyB3aXRoIGR1cGxp
Y2F0ZWQgc3RyZWFtcy4gTGV0J3Mgb25seSBsaXN0ZW4gZm9yCisgICAgLy8gc3RyZWFtLWNvbGxl
Y3Rpb24gbWVzc2FnZXMgZnJvbSB0aGUgc291cmNlIGluIHRoZSBNU0UgY2FzZSB0byBhdm9pZCB0
aGVzZSBpc3N1ZXMuCisgICAgaWYgKGlzTWVkaWFTb3VyY2UoKSAmJiBHU1RfTUVTU0FHRV9TUkMo
bWVzc2FnZSkgIT0gR1NUX09CSkVDVChtX3NvdXJjZS5nZXQoKSkpIHsKKyAgICAgICAgR1NUX0RF
QlVHX09CSkVDVChwaXBlbGluZSgpLCAiSWdub3JpbmcgcmVkdW5kYW50IFNUUkVBTV9DT0xMRUNU
SU9OIGZyb20gJSIgR1NUX1BUUl9GT1JNQVQsIG1lc3NhZ2UtPnNyYyk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKICAgICBBU1NFUlQoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSA9PSBHU1Rf
TUVTU0FHRV9TVFJFQU1fQ09MTEVDVElPTik7CiAgICAgR1JlZlB0cjxHc3RTdHJlYW1Db2xsZWN0
aW9uPiBjb2xsZWN0aW9uOwogICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9jb2xsZWN0aW9u
KG1lc3NhZ2UsICZjb2xsZWN0aW9uLm91dFB0cigpKTsKQEAgLTE1NTUsNyArMTU2Miw3IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTdHJlYW1Db2xsZWN0aW9uTWVz
c2FnZShHc3RNZXNzYWdlKiBtZXNzCiAgICAgaWYgKCFjb2xsZWN0aW9uKQogICAgICAgICByZXR1
cm47CiAKLSAgICBjYWxsT25NYWluVGhyZWFkQW5kV2FpdChbcGxheWVyID0gbWFrZVdlYWtQdHIo
KnRoaXMpLCBjb2xsZWN0aW9uID0gV1RGTW92ZShjb2xsZWN0aW9uKV0geworICAgIGNhbGxPbk1h
aW5UaHJlYWQoW3BsYXllciA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgY29sbGVjdGlvbiA9IFdURk1v
dmUoY29sbGVjdGlvbildIHsKICAgICAgICAgaWYgKHBsYXllcikKICAgICAgICAgICAgIHBsYXll
ci0+dXBkYXRlVHJhY2tzKGNvbGxlY3Rpb24pOwogICAgIH0pOwpAQCAtMTgxMyw2ICsxODIwLDgg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVz
c2FnZSogbWVzc2FnZSkKICAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKGN1
cnJlbnRTdGF0ZSksICdfJywgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobmV3U3RhdGUpKS51
dGY4KCk7CiAgICAgICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklO
KG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGRvdEZpbGVOYW1l
LmRhdGEoKSk7CiAKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiQ2hhbmdl
ZCBzdGF0ZSBmcm9tICVzIHRvICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoY3VycmVu
dFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobmV3U3RhdGUpKTsKKwogICAgICAg
ICBpZiAoIW1faXNMZWdhY3lQbGF5YmluICYmIGN1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUEFV
U0VEICYmIG5ld1N0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKQogICAgICAgICAgICAgcGxheWJp
bjNTZW5kU2VsZWN0U3RyZWFtc0lmQXBwcm9wcmlhdGUoKTsKICAgICAgICAgdXBkYXRlU3RhdGVz
KCk7CkBAIC0xOTcxLDkgKzE5ODAsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICBwbGF5YmluM1Nl
bmRTZWxlY3RTdHJlYW1zSWZBcHByb3ByaWF0ZSgpOwogICAgICAgICBicmVhazsKICAgICB9Ci0g
ICAgY2FzZSBHU1RfTUVTU0FHRV9TVFJFQU1fQ09MTEVDVElPTjoKLSAgICAgICAgaGFuZGxlU3Ry
ZWFtQ29sbGVjdGlvbk1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlVuaGFuZGxlZCBHU3Ry
ZWFtZXIgbWVzc2FnZSB0eXBlOiAlcyIsIEdTVF9NRVNTQUdFX1RZUEVfTkFNRShtZXNzYWdlKSk7
CiAgICAgICAgIGJyZWFrOwpAQCAtMjU1MSw3ICsyNTU3LDcgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmRpZEVuZCgpCiAgICAgLy8gdW50aWwgd2UgZ2V0IHRoZSBpbml0aWFs
IFNUUkVBTVNfU0VMRUNURUQgbWVzc2FnZSBvbmUgbW9yZSB0aW1lLgogICAgIG1fd2FpdGluZ0Zv
clN0cmVhbXNTZWxlY3RlZEV2ZW50ID0gdHJ1ZTsKIAotICAgIGlmICghbV9wbGF5ZXItPmlzTG9v
cGluZygpKSB7CisgICAgaWYgKCFtX3BsYXllci0+aXNMb29waW5nKCkgJiYgIWlzTWVkaWFTb3Vy
Y2UoKSkgewogICAgICAgICBtX2lzUGF1c2VkID0gdHJ1ZTsKICAgICAgICAgY2hhbmdlUGlwZWxp
bmVTdGF0ZShHU1RfU1RBVEVfUkVBRFkpOwogICAgICAgICBtX2RpZERvd25sb2FkRmluaXNoID0g
ZmFsc2U7CkBAIC0yNjgxLDExICsyNjg3LDEwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKGNvbnN0IFVSTCYgdXJsKQogICAgIEdTVF9JTkZPKCJD
cmVhdGluZyBwaXBlbGluZSBmb3IgJXMgcGxheWVyIiwgbV9wbGF5ZXItPmlzVmlkZW9QbGF5ZXIo
KSA/ICJ2aWRlbyIgOiAiYXVkaW8iKTsKICAgICBjb25zdCBjaGFyKiBwbGF5YmluTmFtZSA9ICJw
bGF5YmluIjsKIAotICAgIC8vIE1TRSBkb2Vzbid0IHN1cHBvcnQgcGxheWJpbjMuIE1lZGlhc3Ry
ZWFtIHJlcXVpcmVzIHBsYXliaW4zLiBSZWd1bGFyCi0gICAgLy8gcGxheWJhY2sgY2FuIHVzZSBw
bGF5YmluMyBvbi1kZW1hbmQgd2l0aCB0aGUgV0VCS0lUX0dTVF9VU0VfUExBWUJJTjMKLSAgICAv
LyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAvLyBNU0UgYW5kIE1lZGlhc3RyZWFtIHJlcXVp
cmUgcGxheWJpbjMuIFJlZ3VsYXIgcGxheWJhY2sgY2FuIHVzZSBwbGF5YmluMyBvbi1kZW1hbmQg
d2l0aCB0aGUKKyAgICAvLyBXRUJLSVRfR1NUX1VTRV9QTEFZQklOMyBlbnZpcm9ubWVudCB2YXJp
YWJsZS4KICAgICBjb25zdCBjaGFyKiB1c2VQbGF5YmluMyA9IGdfZ2V0ZW52KCJXRUJLSVRfR1NU
X1VTRV9QTEFZQklOMyIpOwotICAgIGlmICgoIWlzTWVkaWFTb3VyY2UoKSAmJiB1c2VQbGF5Ymlu
MyAmJiBlcXVhbCh1c2VQbGF5YmluMywgIjEiKSkgfHwgdXJsLnByb3RvY29sSXMoIm1lZGlhc3Ry
ZWFtIikpCisgICAgaWYgKChpc01lZGlhU291cmNlKCkgfHwgdXJsLnByb3RvY29sSXMoIm1lZGlh
c3RyZWFtIikgfHwgKHVzZVBsYXliaW4zICYmIGVxdWFsKHVzZVBsYXliaW4zLCAiMSIpKSkpCiAg
ICAgICAgIHBsYXliaW5OYW1lID0gInBsYXliaW4zIjsKIAogICAgIEFTU0VSVCghbV9waXBlbGlu
ZSk7CkBAIC0yNzIzLDYgKzI3MjgsMTIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmNyZWF0ZUdTVFBsYXlCaW4oY29uc3QgVVJMJiB1cmwpCiAgICAgZ19zaWduYWxfY29ubmVj
dF9zd2FwcGVkKGJ1cy5nZXQoKSwgInN5bmMtbWVzc2FnZTo6bmVlZC1jb250ZXh0IiwgR19DQUxM
QkFDSygrW10oTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIsIEdzdE1lc3NhZ2Uq
IG1lc3NhZ2UpIHsKICAgICAgICAgcGxheWVyLT5oYW5kbGVOZWVkQ29udGV4dE1lc3NhZ2UobWVz
c2FnZSk7CiAgICAgfSksIHRoaXMpOworICAgIC8vIEluIHRoZSBNU0UgY2FzZSBzdHJlYW0gY29s
bGVjdGlvbiBtZXNzYWdlcyBhcmUgZW1pdHRlZCBmcm9tIHRoZSBtYWluIHRocmVhZCByaWdodCBi
ZWZvcmUgdGhlIGluaXRpbGl6YXRpb24gc2VnZW1lbnQKKyAgICAvLyBpcyBwYXJzZWQgYW5kICJ1
cGRhdGVlbmQiIGlzIGZpcmVkLiBXZSBuZWVkIHRoZXJlZm9yZSB0byBoYW5kbGUgdGhlc2Ugc3lu
Y2hyb25vdXNseSBpbiB0aGUgc2FtZSBtYWluIHRocmVhZCB0aWNrCisgICAgLy8gdG8gbWFrZSB0
aGUgdHJhY2tzIGluZm9ybWF0aW9uIGF2YWlsYWJsZSB0byBKUyBubyBsYXRlciB0aGFuICJ1cGRh
dGVlbmQiLgorICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChidXMuZ2V0KCksICJzeW5jLW1l
c3NhZ2U6OnN0cmVhbS1jb2xsZWN0aW9uIiwgR19DQUxMQkFDSygrW10oTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyKiBwbGF5ZXIsIEdzdE1lc3NhZ2UqIG1lc3NhZ2UpIHsKKyAgICAgICAgcGxh
eWVyLT5oYW5kbGVTdHJlYW1Db2xsZWN0aW9uTWVzc2FnZShtZXNzYWdlKTsKKyAgICB9KSwgdGhp
cyk7CiAKICAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgIm11dGUiLCBtX3BsYXll
ci0+bXV0ZWQoKSwgbnVsbHB0cik7CiAKQEAgLTI3NjksOCArMjc4MCw2IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKGNvbnN0IFVSTCYgdXJsKQog
ICAgIGlmIChtX3BsYXllci0+aXNWaWRlb1BsYXllcigpKQogICAgICAgICBnX29iamVjdF9zZXQo
bV9waXBlbGluZS5nZXQoKSwgInZpZGVvLXNpbmsiLCBjcmVhdGVWaWRlb1NpbmsoKSwgbnVsbHB0
cik7CiAKLSAgICBjb25maWd1cmVQbGF5U2luaygpOwotCiAgICAgaWYgKG1fc2hvdWxkUHJlc2Vy
dmVQaXRjaCkgewogICAgICAgICBHc3RFbGVtZW50KiBzY2FsZSA9IGdzdF9lbGVtZW50X2ZhY3Rv
cnlfbWFrZSgic2NhbGV0ZW1wbyIsIG51bGxwdHIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggZDQyMWVjNzQxYTZkZWRkODhhYjc3ZTRlN2I3
ZDFjM2E1NjQ1MzNjMy4uMWE4YTFjZGZjOTlmYjEzMjI3MzAyZDNkZjU3ZGQwZjI3NDBkOTYxOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaApAQCAtMTM5
LDcgKzEzOSw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZvaWQgY2FuY2VsTG9hZCgpIGZpbmFs
OwogICAgIHZvaWQgcHJlcGFyZVRvUGxheSgpIGZpbmFsOwotICAgIHZvaWQgcGxheSgpIGZpbmFs
OworICAgIHZvaWQgcGxheSgpIG92ZXJyaWRlOwogICAgIHZvaWQgcGF1c2UoKSBvdmVycmlkZTsK
ICAgICBib29sIHBhdXNlZCgpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgc2Vla2luZygpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1faXNTZWVraW5nOyB9CkBAIC0yNTIsNyArMjUyLDYgQEAgcHJv
dGVjdGVkOgogCiAgICAgdmlydHVhbCB2b2lkIGR1cmF0aW9uQ2hhbmdlZCgpOwogICAgIHZpcnR1
YWwgdm9pZCBzb3VyY2VTZXR1cChHc3RFbGVtZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIGNvbmZp
Z3VyZVBsYXlTaW5rKCkgeyB9CiAgICAgdmlydHVhbCBib29sIGNoYW5nZVBpcGVsaW5lU3RhdGUo
R3N0U3RhdGUpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVQbGF5YmFja1JhdGUoKTsKIApAQCAt
MzAzLDYgKzMwMiw5IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGVuc3VyZUF1ZGlvU291cmNlUHJv
dmlkZXIoKTsKICAgICB2b2lkIHNldEF1ZGlvU3RyZWFtUHJvcGVydGllcyhHT2JqZWN0Kik7CiAK
KyAgICB2aXJ0dWFsIGJvb2wgZG9TZWVrKGNvbnN0IE1lZGlhVGltZSYgcG9zaXRpb24sIGZsb2F0
IHJhdGUsIEdzdFNlZWtGbGFncyk7CisgICAgdm9pZCBpbnZhbGlkYXRlQ2FjaGVkUG9zaXRpb24o
KSB7IG1fbGFzdFF1ZXJ5VGltZS5yZXNldCgpOyB9CisKICAgICBzdGF0aWMgdm9pZCBzZXRBdWRp
b1N0cmVhbVByb3BlcnRpZXNDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqLCBH
T2JqZWN0Kik7CiAKICAgICBzdGF0aWMgdm9pZCBzb3VyY2VTZXR1cENhbGxiYWNrKE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lciosIEdzdEVsZW1lbnQqKTsKQEAgLTQzMSw4ICs0MzMsNiBAQCBw
cml2YXRlOgogICAgIHZvaWQgcHVyZ2VJbnZhbGlkVmlkZW9UcmFja3MoVmVjdG9yPFN0cmluZz4g
dmFsaWRUcmFja0lkcyk7CiAgICAgdm9pZCBwdXJnZUludmFsaWRUZXh0VHJhY2tzKFZlY3RvcjxT
dHJpbmc+IHZhbGlkVHJhY2tJZHMpOwogCi0gICAgdmlydHVhbCBib29sIGRvU2Vlayhjb25zdCBN
ZWRpYVRpbWUmIHBvc2l0aW9uLCBmbG9hdCByYXRlLCBHc3RTZWVrRmxhZ3Mgc2Vla1R5cGUpOwot
CiAgICAgU3RyaW5nIGVuZ2luZURlc2NyaXB0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
IkdTdHJlYW1lciI7IH0KICAgICBib29sIGRpZFBhc3NDT1JTQWNjZXNzQ2hlY2soKSBjb25zdCBv
dmVycmlkZTsKICAgICBib29sIGNhblNhdmVNZWRpYURhdGEoKSBjb25zdCBvdmVycmlkZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UcmFj
a1ByaXZhdGVCYXNlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5oCmluZGV4IGFmNGJmZDgyZmRi
YzhhZWFiNDA0YzllMTVhZjY0ODU1MzU1MzBjOTcuLjA5NTc1YWQ5MGY4MGExMGZiZDhhZjEzZmI0
NDcxMjhlMDIxZDU2OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9UcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFt
ZXIuaApAQCAtNjIsNiArNjIsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9zdHJlYW0u
Z2V0KCk7CiAgICAgfQogCisgICAgLy8gVXNlZCBmb3IgTVNFLCB3aGVyZSB0aGUgaW5pdGlhbCBj
YXBzIG9mIHRoZSBwYWQgYXJlIHJlbGV2YW50IGZvciBpbml0aWFsaXppbmcgdGhlIG1hdGNoaW5n
IHBhZCBpbiB0aGUKKyAgICAvLyBwbGF5YmFjayBwaXBlbGluZS4KKyAgICB2b2lkIHNldEluaXRp
YWxDYXBzKEdSZWZQdHI8R3N0Q2Fwcz4mJiBjYXBzKSB7IG1faW5pdGlhbENhcHMgPSBXVEZNb3Zl
KGNhcHMpOyB9CisgICAgY29uc3QgR1JlZlB0cjxHc3RDYXBzPiYgaW5pdGlhbENhcHMoKSB7IHJl
dHVybiBtX2luaXRpYWxDYXBzOyB9CisKIHByb3RlY3RlZDoKICAgICBUcmFja1ByaXZhdGVCYXNl
R1N0cmVhbWVyKFRyYWNrUHJpdmF0ZUJhc2UqIG93bmVyLCBnaW50IGluZGV4LCBHUmVmUHRyPEdz
dFBhZD4pOwogICAgIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIoVHJhY2tQcml2YXRlQmFzZSog
b3duZXIsIGdpbnQgaW5kZXgsIEdSZWZQdHI8R3N0U3RyZWFtPik7CkBAIC04Miw2ICs4Nyw3IEBA
IHByb3RlY3RlZDoKICAgICBHUmVmUHRyPEdzdFBhZD4gbV9iZXN0VXBzdHJlYW1QYWQ7CiAgICAg
R1JlZlB0cjxHc3RTdHJlYW0+IG1fc3RyZWFtOwogICAgIGd1bG9uZyBtX2V2ZW50UHJvYmU7Cisg
ICAgR1JlZlB0cjxHc3RDYXBzPiBtX2luaXRpYWxDYXBzOwogCiBwcml2YXRlOgogICAgIGJvb2wg
Z2V0TGFuZ3VhZ2VDb2RlKEdzdFRhZ0xpc3QqIHRhZ3MsIEF0b21TdHJpbmcmIHZhbHVlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2Uv
QXBwZW5kUGlwZWxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHAKaW5kZXggODA5ODIzMDZkZGZlYWRiOTY5NjQ5
YmQ5ODgwZmJiNDBiZjVhMjcxZC4uMzE3Y2VkM2QxYzAxNGQ3YzRjZjY1MWUxMjM3OTA3NzFhYjlm
OThiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHAKQEAgLTM4OSwxMyArMzg5
LDEzIEBAIHZvaWQgQXBwZW5kUGlwZWxpbmU6OnBhcnNlRGVtdXhlclNyY1BhZENhcHMoR3N0Q2Fw
cyogZGVtdXhlclNyY1BhZENhcHMpCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAogICAg
IG1fZGVtdXhlclNyY1BhZENhcHMgPSBhZG9wdEdSZWYoZGVtdXhlclNyY1BhZENhcHMpOwotICAg
IG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6
VW5rbm93bjsKKyAgICBtX3N0cmVhbVR5cGUgPSBNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFt
ZXI6OlVua25vd247CiAKICAgICBjb25zdCBjaGFyKiBvcmlnaW5hbE1lZGlhVHlwZSA9IGNhcHNN
ZWRpYVR5cGUobV9kZW11eGVyU3JjUGFkQ2Fwcy5nZXQoKSk7CiAgICAgYXV0byYgZ3N0UmVnaXN0
cnlTY2FubmVyID0gR1N0cmVhbWVyUmVnaXN0cnlTY2FubmVyTVNFOjpzaW5nbGV0b24oKTsKICAg
ICBpZiAoIWdzdFJlZ2lzdHJ5U2Nhbm5lci5pc0NvZGVjU3VwcG9ydGVkKEdTdHJlYW1lclJlZ2lz
dHJ5U2Nhbm5lcjo6Q29uZmlndXJhdGlvbjo6RGVjb2RpbmcsIG9yaWdpbmFsTWVkaWFUeXBlKSkg
ewogICAgICAgICAgICAgbV9wcmVzZW50YXRpb25TaXplID0gV2ViQ29yZTo6RmxvYXRTaXplKCk7
Ci0gICAgICAgICAgICBtX3N0cmVhbVR5cGUgPSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5
cGVHU3RyZWFtZXI6OkludmFsaWQ7CisgICAgICAgICAgICBtX3N0cmVhbVR5cGUgPSBNZWRpYVNv
dXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OkludmFsaWQ7CiAgICAgfSBlbHNlIGlmIChkb0NhcHNI
YXZlVHlwZShtX2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpLCBHU1RfVklERU9fQ0FQU19UWVBFX1BS
RUZJWCkpIHsKICAgICAgICAgT3B0aW9uYWw8RmxvYXRTaXplPiBzaXplID0gZ2V0VmlkZW9SZXNv
bHV0aW9uRnJvbUNhcHMobV9kZW11eGVyU3JjUGFkQ2Fwcy5nZXQoKSk7CiAgICAgICAgIGlmIChz
aXplLmhhc1ZhbHVlKCkpCkBAIC00MDMsMTMgKzQwMywxMyBAQCB2b2lkIEFwcGVuZFBpcGVsaW5l
OjpwYXJzZURlbXV4ZXJTcmNQYWRDYXBzKEdzdENhcHMqIGRlbXV4ZXJTcmNQYWRDYXBzKQogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBtX3ByZXNlbnRhdGlvblNpemUgPSBXZWJDb3JlOjpGbG9h
dFNpemUoKTsKIAotICAgICAgICBtX3N0cmVhbVR5cGUgPSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0
cmVhbVR5cGVHU3RyZWFtZXI6OlZpZGVvOworICAgICAgICBtX3N0cmVhbVR5cGUgPSBNZWRpYVNv
dXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlZpZGVvOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1f
cHJlc2VudGF0aW9uU2l6ZSA9IFdlYkNvcmU6OkZsb2F0U2l6ZSgpOwogICAgICAgICBpZiAoZG9D
YXBzSGF2ZVR5cGUobV9kZW11eGVyU3JjUGFkQ2Fwcy5nZXQoKSwgR1NUX0FVRElPX0NBUFNfVFlQ
RV9QUkVGSVgpKQotICAgICAgICAgICAgbV9zdHJlYW1UeXBlID0gV2ViQ29yZTo6TWVkaWFTb3Vy
Y2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpBdWRpbzsKKyAgICAgICAgICAgIG1fc3RyZWFtVHlwZSA9
IE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6QXVkaW87CiAgICAgICAgIGVsc2UgaWYg
KGRvQ2Fwc0hhdmVUeXBlKG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCksIEdTVF9URVhUX0NBUFNf
VFlQRV9QUkVGSVgpKQotICAgICAgICAgICAgbV9zdHJlYW1UeXBlID0gV2ViQ29yZTo6TWVkaWFT
b3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpUZXh0OworICAgICAgICAgICAgbV9zdHJlYW1UeXBl
ID0gTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpUZXh0OwogICAgIH0KIH0KIApAQCAt
NDI2LDE4ICs0MjYsMjQgQEAgdm9pZCBBcHBlbmRQaXBlbGluZTo6YXBwc2lua0NhcHNDaGFuZ2Vk
KCkKICAgICBpZiAoIWNhcHMpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIElmIHRoaXMgaXMg
bm90IHRoZSBmaXJzdCB0aW1lIHdlJ3JlIHBhcnNpbmcgYW4gaW5pdGlhbGl6YXRpb24gc2VnbWVu
dCwgZmFpbCBpZiB0aGUgdHJhY2sKKyAgICAvLyBoYXMgYSBkaWZmZXJlbnQgY29kZWMgb3IgdHlw
ZSAoZS5nLiBpZiB3ZSB3ZXJlIHByZXZpb3VzbHkgZGVtdXhpbmcgYW4gYXVkaW8gc3RyZWFtIGFu
ZAorICAgIC8vIHNvbWVvbmUgYXBwZW5kcyBhIHZpZGVvIHN0cmVhbSkuCisgICAgaWYgKG1fYXBw
c2lua0NhcHMgJiYgc3RyY21wKGNhcHNNZWRpYVR5cGUoY2Fwcy5nZXQoKSksIGNhcHNNZWRpYVR5
cGUobV9hcHBzaW5rQ2Fwcy5nZXQoKSkpKSB7CisgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCht
X3BpcGVsaW5lLmdldCgpLCAiVXNlciBhcHBlbmRlZCB0cmFjayBtZXRhZGF0YSB3aXRoIHR5cGUg
JyVzJyBmb3IgYSBTb3VyY2VCdWZmZXIgcHJldmlvdXNseSBoYW5kbGluZyAnJXMnLiBFcnJvcmlu
ZyBvdXQuIiwgY2Fwc01lZGlhVHlwZShjYXBzLmdldCgpKSwgY2Fwc01lZGlhVHlwZShtX2FwcHNp
bmtDYXBzLmdldCgpKSk7CisgICAgICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZS5hcHBlbmRQYXJz
aW5nRmFpbGVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoZG9DYXBzSGF2
ZVR5cGUoY2Fwcy5nZXQoKSwgR1NUX1ZJREVPX0NBUFNfVFlQRV9QUkVGSVgpKSB7CiAgICAgICAg
IE9wdGlvbmFsPEZsb2F0U2l6ZT4gc2l6ZSA9IGdldFZpZGVvUmVzb2x1dGlvbkZyb21DYXBzKGNh
cHMuZ2V0KCkpOwogICAgICAgICBpZiAoc2l6ZS5oYXNWYWx1ZSgpKQogICAgICAgICAgICAgbV9w
cmVzZW50YXRpb25TaXplID0gc2l6ZS52YWx1ZSgpOwogICAgIH0KIAotICAgIC8vIFRoaXMgbWVh
bnMgdGhhdCB3ZSdyZSByaWdodCBhZnRlciBhIG5ldyB0cmFjayBoYXMgYXBwZWFyZWQuIE90aGVy
d2lzZSwgaXQncyBhIGNhcHMgY2hhbmdlIGluc2lkZSB0aGUgc2FtZSB0cmFjay4KLSAgICBib29s
IHByZXZpb3VzQ2Fwc1dlcmVOdWxsID0gIW1fYXBwc2lua0NhcHM7Ci0KICAgICBpZiAobV9hcHBz
aW5rQ2FwcyAhPSBjYXBzKSB7CiAgICAgICAgIG1fYXBwc2lua0NhcHMgPSBXVEZNb3ZlKGNhcHMp
OwotICAgICAgICBtX3BsYXllclByaXZhdGUtPnRyYWNrRGV0ZWN0ZWQoKnRoaXMsIG1fdHJhY2ss
IHByZXZpb3VzQ2Fwc1dlcmVOdWxsKTsKKyAgICAgICAgbV9wbGF5ZXJQcml2YXRlLT50cmFja0Rl
dGVjdGVkKCp0aGlzLCBtX3RyYWNrKTsKICAgICB9CiB9CiAKQEAgLTcwOSw5ICs3MTUsOSBAQCB2
b2lkIEFwcGVuZFBpcGVsaW5lOjpjb25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2lua0Zyb21TdHJl
YW1pbmdUaHJlYWQoR3N0UGFkKiBkZQogICAgIH0KIAogICAgIC8vIE11c3QgYmUgZG9uZSBpbiB0
aGUgdGhyZWFkIHdlIHdlcmUgY2FsbGVkIGZyb20gKHVzdWFsbHkgc3RyZWFtaW5nIHRocmVhZCku
Ci0gICAgYm9vbCBpc0RhdGEgPSAobV9zdHJlYW1UeXBlID09IFdlYkNvcmU6Ok1lZGlhU291cmNl
U3RyZWFtVHlwZUdTdHJlYW1lcjo6QXVkaW8pCi0gICAgICAgIHx8IChtX3N0cmVhbVR5cGUgPT0g
V2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpWaWRlbykKLSAgICAgICAg
fHwgKG1fc3RyZWFtVHlwZSA9PSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFt
ZXI6OlRleHQpOworICAgIGJvb2wgaXNEYXRhID0gKG1fc3RyZWFtVHlwZSA9PSBNZWRpYVNvdXJj
ZVN0cmVhbVR5cGVHU3RyZWFtZXI6OkF1ZGlvKQorICAgICAgICB8fCAobV9zdHJlYW1UeXBlID09
IE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VmlkZW8pCisgICAgICAgIHx8IChtX3N0
cmVhbVR5cGUgPT0gTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpUZXh0KTsKIAogICAg
IGlmIChpc0RhdGEpIHsKICAgICAgICAgR1JlZlB0cjxHc3RPYmplY3Q+IHBhcmVudCA9IGFkb3B0
R1JlZihnc3RfZWxlbWVudF9nZXRfcGFyZW50KG1fYXBwc2luay5nZXQoKSkpOwpAQCAtNzU4LDYg
Kzc2NCw4IEBAIHZvaWQgQXBwZW5kUGlwZWxpbmU6OmNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBz
aW5rKEdzdFBhZCogZGVtdXhlclNyY1BhZCkKICAgICAvLyBPbmx5IG9uZSBzdHJlYW0gcGVyIGRl
bXV4ZXIgaXMgc3VwcG9ydGVkLgogICAgIEFTU0VSVCghZ3N0X3BhZF9pc19saW5rZWQoc2lua1Np
bmtQYWQuZ2V0KCkpKTsKIAorICAgIC8vIEFzIGl0IGlzIG5vdywgcmVzZXRQYXJzZXJTdGF0ZSgp
IHdpbGwgY2F1c2UgdGhlIHBhZHMgdG8gYmUgZGlzY29ubmVjdGVkLCBzbyB0aGV5IHdpbGwgbGF0
ZXIgYmUgcmUtYWRkZWQgb24gdGhlIG5leHQgaW5pdGlhbGl6YXRpb24gc2VnbWVudC4KKwogICAg
IEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9jdXJyZW50X2Nh
cHMoR1NUX1BBRChkZW11eGVyU3JjUGFkKSkpOwogCiAjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9E
RUJVRwpAQCAtNzY5LDE3ICs3NzcsMjcgQEAgdm9pZCBBcHBlbmRQaXBlbGluZTo6Y29ubmVjdERl
bXV4ZXJTcmNQYWRUb0FwcHNpbmsoR3N0UGFkKiBkZW11eGVyU3JjUGFkKQogCiAgICAgcGFyc2VE
ZW11eGVyU3JjUGFkQ2Fwcyhnc3RfY2Fwc19yZWYoY2Fwcy5nZXQoKSkpOwogCisgICAgVHJhY2tQ
cml2YXRlQmFzZUdTdHJlYW1lciogZ3N0cmVhbWVyVHJhY2s7CiAgICAgc3dpdGNoIChtX3N0cmVh
bVR5cGUpIHsKLSAgICBjYXNlIFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1l
cjo6QXVkaW86Ci0gICAgICAgIG1fdHJhY2sgPSBXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0ZUdT
dHJlYW1lcjo6Y3JlYXRlKG1ha2VXZWFrUHRyKCptX3BsYXllclByaXZhdGUpLCBpZCgpLCBzaW5r
U2lua1BhZC5nZXQoKSk7CisgICAgY2FzZSBNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6
OkF1ZGlvOiB7CisgICAgICAgIGF1dG8gc3BlY2lmaWNUcmFjayA9IFdlYkNvcmU6OkF1ZGlvVHJh
Y2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobWFrZVdlYWtQdHIoKm1fcGxheWVyUHJpdmF0ZSks
IGlkKCksIHNpbmtTaW5rUGFkLmdldCgpKTsKKyAgICAgICAgZ3N0cmVhbWVyVHJhY2sgPSBzcGVj
aWZpY1RyYWNrLnB0cigpOworICAgICAgICBtX3RyYWNrID0gbWFrZVJlZlB0cihzdGF0aWNfY2Fz
dDxUcmFja1ByaXZhdGVCYXNlKj4oc3BlY2lmaWNUcmFjay5wdHIoKSkpOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6Vmlk
ZW86Ci0gICAgICAgIG1fdHJhY2sgPSBXZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1l
cjo6Y3JlYXRlKG1ha2VXZWFrUHRyKCptX3BsYXllclByaXZhdGUpLCBpZCgpLCBzaW5rU2lua1Bh
ZC5nZXQoKSk7CisgICAgfQorICAgIGNhc2UgTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVy
OjpWaWRlbzogeworICAgICAgICBhdXRvIHNwZWNpZmljVHJhY2sgPSBXZWJDb3JlOjpWaWRlb1Ry
YWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1ha2VXZWFrUHRyKCptX3BsYXllclByaXZhdGUp
LCBpZCgpLCBzaW5rU2lua1BhZC5nZXQoKSk7CisgICAgICAgIGdzdHJlYW1lclRyYWNrID0gc3Bl
Y2lmaWNUcmFjay5wdHIoKTsKKyAgICAgICAgbV90cmFjayA9IG1ha2VSZWZQdHIoc3RhdGljX2Nh
c3Q8VHJhY2tQcml2YXRlQmFzZSo+KHNwZWNpZmljVHJhY2sucHRyKCkpKTsKICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlRl
eHQ6Ci0gICAgICAgIG1fdHJhY2sgPSBXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0
cmVhbWVyOjpjcmVhdGUoaWQoKSwgc2lua1NpbmtQYWQuZ2V0KCkpOworICAgIH0KKyAgICBjYXNl
IE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VGV4dDogeworICAgICAgICBhdXRvIHNw
ZWNpZmljVHJhY2sgPSBXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpj
cmVhdGUoaWQoKSwgc2lua1NpbmtQYWQuZ2V0KCkpOworICAgICAgICBnc3RyZWFtZXJUcmFjayA9
IHNwZWNpZmljVHJhY2sucHRyKCk7CisgICAgICAgIG1fdHJhY2sgPSBtYWtlUmVmUHRyKHN0YXRp
Y19jYXN0PFRyYWNrUHJpdmF0ZUJhc2UqPihzcGVjaWZpY1RyYWNrLnB0cigpKSk7CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVy
OjpJbnZhbGlkOgorICAgIH0KKyAgICBjYXNlIE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1l
cjo6SW52YWxpZDoKICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCks
ICJVbnN1cHBvcnRlZCB0cmFjayBjb2RlYzogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMuZ2V0KCkp
OwogICAgICAgICAvLyAzLjUuNyBJbml0aWFsaXphdGlvbiBTZWdtZW50IFJlY2VpdmVkCiAgICAg
ICAgIC8vIDUuMS4gSWYgdGhlIGluaXRpYWxpemF0aW9uIHNlZ21lbnQgY29udGFpbnMgdHJhY2tz
IHdpdGggY29kZWNzIHRoZSB1c2VyIGFnZW50IGRvZXMgbm90IHN1cHBvcnQsIHRoZW4gcnVuIHRo
ZQpAQCAtNzkxLDExICs4MDksMTIgQEAgdm9pZCBBcHBlbmRQaXBlbGluZTo6Y29ubmVjdERlbXV4
ZXJTcmNQYWRUb0FwcHNpbmsoR3N0UGFkKiBkZW11eGVyU3JjUGFkKQogICAgICAgICByZXR1cm47
CiAgICAgZGVmYXVsdDoKICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0
KCksICJQYWQgaGFzIHVua25vd24gdHJhY2sgdHlwZSwgaWdub3Jpbmc6ICUiIEdTVF9QVFJfRk9S
TUFULCBjYXBzLmdldCgpKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICB9
CisgICAgZ3N0cmVhbWVyVHJhY2stPnNldEluaXRpYWxDYXBzKEdSZWZQdHIoY2FwcykpOwogCiAg
ICAgbV9hcHBzaW5rQ2FwcyA9IFdURk1vdmUoY2Fwcyk7Ci0gICAgbV9wbGF5ZXJQcml2YXRlLT50
cmFja0RldGVjdGVkKCp0aGlzLCBtX3RyYWNrLCB0cnVlKTsKKyAgICBtX3BsYXllclByaXZhdGUt
PnRyYWNrRGV0ZWN0ZWQoKnRoaXMsIG1fdHJhY2spOwogfQogCiB2b2lkIEFwcGVuZFBpcGVsaW5l
OjpkaXNjb25uZWN0RGVtdXhlclNyY1BhZEZyb21BcHBzaW5rRnJvbUFueVRocmVhZChHc3RQYWQq
IGRlbXV4ZXJTcmNQYWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmgKaW5kZXggMTE2MTg2
ZTNjZDZhMjczZjMzZWMyNGNjOTdkOGIyZmU5YmJiNjU3Zi4uNjg3M2ZiNzU2NjFmNDc0MWYxM2Jj
MTBiMTk2NjM4MzFlMTQ1YWU0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuaApAQCAt
NTcsNiArNTcsOSBAQCBwdWJsaWM6CiAgICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
KiBwbGF5ZXJQcml2YXRlKCkgeyByZXR1cm4gbV9wbGF5ZXJQcml2YXRlOyB9CiAKIHByaXZhdGU6
CisgICAgLy8gU2ltaWxhciB0byBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGUs
IGJ1dCB3aXRoIGEgbmV3IHZhbHVlIChJbnZhbGlkKSBmb3Igd2hlbiB0aGUgY29kZWMgaXMKKyAg
ICAvLyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgc3lzdGVtLCB3aGljaCBzaG91bGQgcmVzdWx0IGlu
IFBhcnNpbmdGYWlsZWQgZXJyb3IgYmVpbmcgdGhyb3duIGluIFNvdXJjZUJ1ZmZlci4KKyAgICBl
bnVtIE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lciB7IEF1ZGlvLCBWaWRlbywgVGV4dCwg
VW5rbm93biwgSW52YWxpZCB9OwogCiAgICAgdm9pZCBoYW5kbGVFcnJvclN5bmNNZXNzYWdlKEdz
dE1lc3NhZ2UqKTsKICAgICB2b2lkIGhhbmRsZU5lZWRDb250ZXh0U3luY01lc3NhZ2UoR3N0TWVz
c2FnZSopOwpAQCAtODEsNyArODQsNiBAQCBwcml2YXRlOgogICAgIEdzdEVsZW1lbnQqIGFwcHNy
YygpIHsgcmV0dXJuIG1fYXBwc3JjLmdldCgpOyB9CiAgICAgR3N0RWxlbWVudCogYXBwc2luaygp
IHsgcmV0dXJuIG1fYXBwc2luay5nZXQoKTsgfQogICAgIEdzdENhcHMqIGRlbXV4ZXJTcmNQYWRD
YXBzKCkgeyByZXR1cm4gbV9kZW11eGVyU3JjUGFkQ2Fwcy5nZXQoKTsgfQotICAgIFdlYkNvcmU6
Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lciBzdHJlYW1UeXBlKCkgeyByZXR1cm4gbV9z
dHJlYW1UeXBlOyB9CiAKICAgICB2b2lkIGRpc2Nvbm5lY3REZW11eGVyU3JjUGFkRnJvbUFwcHNp
bmtGcm9tQW55VGhyZWFkKEdzdFBhZCopOwogICAgIHZvaWQgY29ubmVjdERlbXV4ZXJTcmNQYWRU
b0FwcHNpbmtGcm9tU3RyZWFtaW5nVGhyZWFkKEdzdFBhZCopOwpAQCAtMTQyLDcgKzE0NCw3IEBA
IHByaXZhdGU6CiAgICAgc3RydWN0IFBhZFByb2JlSW5mb3JtYXRpb24gbV9hcHBzaW5rUGFkRXZl
bnRQcm9iZUluZm9ybWF0aW9uOwogI2VuZGlmCiAKLSAgICBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0
cmVhbVR5cGVHU3RyZWFtZXIgbV9zdHJlYW1UeXBlOworICAgIE1lZGlhU291cmNlU3RyZWFtVHlw
ZUdTdHJlYW1lciBtX3N0cmVhbVR5cGU7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0
ZUJhc2U+IG1fdHJhY2s7CiAKICAgICBBYm9ydGFibGVUYXNrUXVldWUgbV90YXNrUXVldWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNl
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RS5jcHAKaW5kZXggNTQ0NTk2YWZmYTA0NGNjMGNlYWNkODU0MTVjMGI5NWI3Nzg4NjliNS4uODJj
YTVmMTdhMDhiYWY2NGNlODI2NzM1NDM0MTk3MWNkZDVlYzBlZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNwcApAQCAtMyw5
ICszLDkgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEgTHRkLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIu
Y29tPgogICogQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdu
b21lLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMywg
MjAxNiwgMjAxNyBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEs
IDIwMTIsIDIwMTMsIDIwMTYsIDIwMTcsIDIwMTgsIDIwMTksIDIwMjAgSWdhbGlhIFMuTAogICog
Q29weXJpZ2h0IChDKSAyMDE1IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxh
ci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYsIDIwMTcgTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiwgMjAxNywgMjAxOCwgMjAxOSwg
MjAyMCwgMjAyMSBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0zNiwxMCArMzYsMTEgQEAKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVk
ZSAiTWVkaWFEZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCi0jaW5jbHVk
ZSAiUGxheWJhY2tQaXBlbGluZS5oIgorI2luY2x1ZGUgIk1lZGlhU291cmNlVHJhY2tHU3RyZWFt
ZXIuaCIKICNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmgiCiAjaW5jbHVk
ZSAiVGltZVJhbmdlcy5oIgogI2luY2x1ZGUgIlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgi
CisjaW5jbHVkZSAiV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCIKIAogI2luY2x1ZGUgPGdz
dC9hcHAvZ3N0YXBwc2luay5oPgogI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc3JjLmg+CkBAIC0x
MTIsMTMgKzExMyw3IEBAIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6fk1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRSgpCiB7CiAgICAgR1NUX1RSQUNFKCJkZXN0cm95aW5nIHRo
ZSBwbGF5ZXIgKCVwKSIsIHRoaXMpOwogCi0gICAgaWYgKG1fc291cmNlKSB7Ci0gICAgICAgIHdl
YktpdE1lZGlhU3JjU2V0TWVkaWFQbGF5ZXJQcml2YXRlKFdFQktJVF9NRURJQV9TUkMobV9zb3Vy
Y2UuZ2V0KCkpLCBudWxscHRyKTsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9ieV9kYXRhKG1fc291cmNlLmdldCgpLCB0aGlzKTsKLSAgICB9Ci0KLSAgICBpZiAobV9wbGF5
YmFja1BpcGVsaW5lKQotICAgICAgICBtX3BsYXliYWNrUGlwZWxpbmUtPnNldFdlYktpdE1lZGlh
U3JjKG51bGxwdHIpOworICAgIG1fc291cmNlLmNsZWFyKCk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpsb2FkKGNvbnN0IFN0cmluZyYpCkBAIC0xMzQsMTkgKzEy
OSwyMyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bG9hZChjb25zdCBV
UkwmIHVybCwgY29uc3QgQ29udGVudFR5cGUmLCBNZQogICAgIEdTVF9ERUJVRygiTG9hZGluZyAl
cyIsIG1zZUJsb2JVUkkuYXNjaWkoKS5kYXRhKCkpOwogICAgIG1fbWVkaWFTb3VyY2UgPSBtZWRp
YVNvdXJjZTsKIAotICAgIGlmICghbV9wbGF5YmFja1BpcGVsaW5lKQotICAgICAgICBtX3BsYXli
YWNrUGlwZWxpbmUgPSBQbGF5YmFja1BpcGVsaW5lOjpjcmVhdGUoKTsKLQogICAgIG1fbWVkaWFT
b3VyY2VQcml2YXRlID0gTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyOjpvcGVuKCptX21lZGlh
U291cmNlLmdldCgpLCAqdGhpcyk7CiAKICAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmxvYWQobXNlQmxvYlVSSSk7CiB9CiAKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
TVNFOjpwbGF5KCkKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJQbGF5IHJl
cXVlc3RlZCIpOworICAgIG1faXNQYXVzZWQgPSBmYWxzZTsKKyAgICB1cGRhdGVTdGF0ZXMoKTsK
K30KKwogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnBhdXNlKCkKIHsKLSAg
ICAvLyBGSVhNRTogU2hvdWxkIG5vdCBuZWVkIGRpcmVjdCBhY2Nlc3MgdG8gdGhpcyBtZW1iZXIu
IFRoaXMgb3ZlcnJpZGUgaXMgcHJvYmFibHkgbm90IG5lZWRlZC4KKyAgICBHU1RfREVCVUdfT0JK
RUNUKHBpcGVsaW5lKCksICJQYXVzZSByZXF1ZXN0ZWQiKTsKICAgICBtX2lzUGF1c2VkID0gdHJ1
ZTsKLSAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhdXNlKCk7CisgICAgdXBkYXRl
U3RhdGVzKCk7CiB9CiAKIE1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6
OmR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3QKQEAgLTE1OSwzMTMgKzE1OCwxMDIgQEAgTWVkaWFU
aW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZHVyYXRpb25NZWRpYVRpbWUoKSBj
b25zdAogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2Vlayhjb25zdCBN
ZWRpYVRpbWUmIHRpbWUpCiB7Ci0gICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8IG1fZGlk
RXJyb3JPY2N1cikpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdTVF9JTkZPX09CSkVDVChwaXBl
bGluZSgpLCAiW1NlZWtdIHNlZWsgYXR0ZW1wdCB0byAlcyBzZWNzIiwgdG9TdHJpbmcodGltZSku
dXRmOCgpLmRhdGEoKSk7Ci0KLSAgICAvLyBBdm9pZCB1c2VsZXNzIHNlZWtpbmcuCi0gICAgTWVk
aWFUaW1lIGN1cnJlbnQgPSBjdXJyZW50TWVkaWFUaW1lKCk7Ci0gICAgaWYgKHRpbWUgPT0gY3Vy
cmVudCkgewotICAgICAgICBpZiAoIW1faXNTZWVraW5nKQotICAgICAgICAgICAgdGltZUNoYW5n
ZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX2lzTGl2ZVN0cmVhbSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faXNTZWVraW5nICYmIG1faXNTZWVrUGVuZGlu
ZykgewotICAgICAgICBtX3NlZWtUaW1lID0gdGltZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlNlZWtpbmcgZnJvbSAlcyB0byAl
cyBzZWNvbmRzIiwgdG9TdHJpbmcoY3VycmVudCkudXRmOCgpLmRhdGEoKSwgdG9TdHJpbmcodGlt
ZSkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBNZWRpYVRpbWUgcHJldmlvdXNTZWVrVGltZSA9IG1f
c2Vla1RpbWU7Ci0gICAgbV9zZWVrVGltZSA9IHRpbWU7Ci0KLSAgICBpZiAoIWRvU2VlayhtX3Nl
ZWtUaW1lLCBtX3BsYXliYWNrUmF0ZSwgc3RhdGljX2Nhc3Q8R3N0U2Vla0ZsYWdzPihHU1RfU0VF
S19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19BQ0NVUkFURSkpKSB7Ci0gICAgICAgIG1fc2Vl
a1RpbWUgPSBwcmV2aW91c1NlZWtUaW1lOwotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QocGlw
ZWxpbmUoKSwgIlNlZWtpbmcgdG8gJXMgZmFpbGVkIiwgdG9TdHJpbmcodGltZSkudXRmOCgpLmRh
dGEoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2lzRW5kUmVhY2hlZCA9IGZh
bHNlOwotICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIm1faXNTZWVraW5nPSVzLCBt
X3NlZWtUaW1lPSVzIiwgYm9vbEZvclByaW50aW5nKG1faXNTZWVraW5nKSwgdG9TdHJpbmcobV9z
ZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFOjpjb25maWd1cmVQbGF5U2luaygpCi17Ci0gICAgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpjb25maWd1cmVQbGF5U2luaygpOwotCi0gICAgR1JlZlB0cjxHc3RFbGVtZW50
PiBwbGF5c2luayA9IGFkb3B0R1JlZihnc3RfYmluX2dldF9ieV9uYW1lKEdTVF9CSU4obV9waXBl
bGluZS5nZXQoKSksICJwbGF5c2luayIpKTsKLSAgICBpZiAocGxheXNpbmspIHsKLSAgICAgICAg
Ly8gVGhlIGRlZmF1bHQgdmFsdWUgKDApIG1lYW5zICJzZW5kIGV2ZW50cyB0byBhbGwgdGhlIHNp
bmtzIiwgaW5zdGVhZAotICAgICAgICAvLyBvZiAib25seSB0byB0aGUgZmlyc3QgdGhhdCByZXR1
cm5zIHRydWUiLiBUaGlzIGlzIG5lZWRlZCBmb3IgTVNFIHNlZWsuCi0gICAgICAgIGdfb2JqZWN0
X3NldChHX09CSkVDVChwbGF5c2luay5nZXQoKSksICJzZW5kLWV2ZW50LW1vZGUiLCAwLCBudWxs
cHRyKTsKLSAgICB9CisgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiUmVxdWVzdGVk
IHNlZWsgdG8gJXMiLCB0aW1lLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgZG9TZWVr
KHRpbWUsIG1fcGxheWJhY2tSYXRlLCBHU1RfU0VFS19GTEFHX0ZMVVNIKTsKIH0KIAotYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmNoYW5nZVBpcGVsaW5lU3RhdGUoR3N0U3Rh
dGUgbmV3U3RhdGUpCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZG9TZWVr
KGNvbnN0IE1lZGlhVGltZSYgcG9zaXRpb24sIGZsb2F0IHJhdGUsIEdzdFNlZWtGbGFncyBzZWVr
RmxhZ3MpCiB7Ci0gICAgaWYgKHNlZWtpbmcoKSkgewotICAgICAgICBHU1RfREVCVUcoIlJlamVj
dGVkIHN0YXRlIGNoYW5nZSB0byAlcyB3aGlsZSBzZWVraW5nIiwKLSAgICAgICAgICAgIGdzdF9l
bGVtZW50X3N0YXRlX2dldF9uYW1lKG5ld1N0YXRlKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KKyAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgb3V0c2lkZSBv
ZiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UgYnkgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpzZXRSYXRlKCkuCiAKLSAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpjaGFuZ2VQaXBlbGluZVN0YXRlKG5ld1N0YXRlKTsKLX0KLQotdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0U6Om5vdGlmeVNlZWtOZWVkc0RhdGFGb3JUaW1lKGNvbnN0IE1l
ZGlhVGltZSYgc2Vla1RpbWUpCi17Ci0gICAgLy8gUmVlbnF1ZXVlIHNhbXBsZXMgbmVlZGVkIHRv
IHJlc3VtZSBwbGF5YmFjayBpbiB0aGUgbmV3IHBvc2l0aW9uLgotICAgIG1fbWVkaWFTb3VyY2Ut
PnNlZWtUb1RpbWUoc2Vla1RpbWUpOworICAgIC8vIE5vdGU6IEFuIGltcG9ydGFudCBkaWZmZXJl
bmNlIGJldHdlZW4gc2VlayB3aXRoIFdlYktpdE1lZGlhU3JjIGFuZCByZWd1bGFyIHBsYXliYWNr
IGlzIHRoYXQgc2Vla2luZyBiZWZvcmUKKyAgICAvLyBwcmUtcm9sbCAoZS5nLiB0byBzdGFydCBw
bGF5YmFjayBhdCBhIG5vbi16ZXJvIHBvc2l0aW9uKSBpcyBzdXBwb3J0ZWQgaW4gV2ViS2l0TWVk
aWFTcmMgYnV0IG5vdCBpbiByZWd1bGFyCisgICAgLy8gcGxheWJhY2suIFRoaXMgaXMgcmVsZXZh
bnQgaW4gTVNFIGJlY2F1c2UgcHJlLXJvbGwgbWF5IG5ldmVyIG9jY3VyIGlmIHRoZSBKUyBjb2Rl
IG5ldmVyIGFwcGVuZHMgYSByYW5nZSBzdGFydGluZworICAgIC8vIGF0IHplcm8sIGNyZWF0aW5n
IGEgY2hpY2tlbiBhbmQgZWdnIHByb2JsZW0uCiAKLSAgICBHU1RfREVCVUcoIk1TRSBzZWVrIHRv
ICVzIGZpbmlzaGVkIiwgdG9TdHJpbmcoc2Vla1RpbWUpLnV0ZjgoKS5kYXRhKCkpOworICAgIC8v
IEdTdHJlYW1lciBkb2Vzbid0IHN1cHBvcnQgemVybyBhcyBhIHZhbGlkIHBsYXliYWNrIHJhdGUu
IEluc3RlYWQsIHRoYXQgaXMgaW1wbGVtZW50ZWQgaW4gV2ViS2l0IGJ5IHBhdXNpbmcKKyAgICAv
LyB0aGUgcGlwZWxpbmUuCisgICAgaWYgKHJhdGUgPD0gMCkKKyAgICAgICAgcmF0ZSA9IDEuMDsK
IAotICAgIGlmICghbV9nc3RTZWVrQ29tcGxldGVkKSB7Ci0gICAgICAgIG1fZ3N0U2Vla0NvbXBs
ZXRlZCA9IHRydWU7Ci0gICAgICAgIG1heWJlRmluaXNoU2VlaygpOwotICAgIH0KLX0KLQotc3Rh
dGljIGJvb2wgY2hlY2tTaG91bGREZWxheVNlZWsoR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ2V0U3Rh
dGVSZXN1bHQsIEdzdFN0YXRlIGN1cnJlbnRTdGF0ZSwgR3N0U3RhdGUgbmV3U3RhdGUpCi17Ci0g
ICAgaWYgKGdldFN0YXRlUmVzdWx0ICE9IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoR1NUX1NUQVRFX1RSQU5TSVRJT04oY3VycmVudFN0YXRl
LCBuZXdTdGF0ZSkgPT0gR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChjdXJyZW50U3RhdGUgPT0gR1NUX1NUQVRFX1JFQURZ
ICYmIG5ld1N0YXRlID49IEdTVF9TVEFURV9QQVVTRUQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJN
U0U6OmRvU2Vlayhjb25zdCBNZWRpYVRpbWUmIHBvc2l0aW9uLCBmbG9hdCByYXRlLCBHc3RTZWVr
RmxhZ3Mgc2Vla1R5cGUpCi17Ci0gICAgLy8gRklYTUU6IE1ha2UgYSBjb3B5IGhlcmUgYmVjYXVz
ZSBpbiBzb21lIGNhc2VzIGJlbG93IGl0IGlzIG1vZGlmaWVkLiBUaGlzCi0gICAgLy8gc291bmRz
IGxpa2UgYSBiYWQgaWRlYSBhbmQgc2hvdWxkIGJlIGludmVzdGlnYXRlZCBmdXJ0aGVyLgotICAg
IE1lZGlhVGltZSBzZWVrVGltZSA9IHBvc2l0aW9uOwotCi0gICAgLy8gQWx3YXlzIG1vdmUgdG8g
c2Vla2luZyBzdGF0ZSB0byByZXBvcnQgY29ycmVjdCAnY3VycmVudFRpbWUnIHdoaWxlIHBlbmRp
bmcgZm9yIGFjdHVhbCBzZWVrIHRvIGNvbXBsZXRlLgorICAgIG1fc2Vla1RpbWUgPSBwb3NpdGlv
bjsKICAgICBtX2lzU2Vla2luZyA9IHRydWU7CisgICAgbV9pc1dhaXRpbmdGb3JQcmVyb2xsID0g
dHJ1ZTsKKyAgICBtX2lzRW5kUmVhY2hlZCA9IGZhbHNlOwogCi0gICAgLy8gQ2hlY2sgaWYgcGxh
eWJhY2sgcGlwZWxpbmUgaXMgcmVhZHkgZm9yIHNlZWsuCi0gICAgR3N0U3RhdGUgc3RhdGUsIG5l
d1N0YXRlOwotICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdldFN0YXRlUmVzdWx0ID0gZ3N0X2Vs
ZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwgJm5ld1N0YXRlLCAwKTsK
LSAgICBpZiAoZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFIHx8IGdl
dFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCkgewotICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbU2Vla10gY2Fubm90IHNlZWssIGN1cnJlbnQg
c3RhdGUgY2hhbmdlIGlzICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdlX3JldHVybl9nZXRf
bmFtZShnZXRTdGF0ZVJlc3VsdCkpOwotICAgICAgICB3ZWJLaXRNZWRpYVNyY1NldFJlYWR5Rm9y
U2FtcGxlcyhXRUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdldCgpKSwgdHJ1ZSk7Ci0gICAgICAg
IG1faXNTZWVraW5nID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBib29sIHNob3VsZERlbGF5U2VlayA9IGNoZWNrU2hvdWxkRGVsYXlTZWVrKGdldFN0YXRlUmVz
dWx0LCBzdGF0ZSwgbmV3U3RhdGUpOwotICAgIGlmIChzaG91bGREZWxheVNlZWsgfHwgbV9pc0Vu
ZFJlYWNoZWQgfHwgIW1fZ3N0U2Vla0NvbXBsZXRlZCkgewotICAgICAgICBDU3RyaW5nIHJlYXNv
biA9ICJVbmtub3duIHJlYXNvbiI7Ci0gICAgICAgIGlmIChzaG91bGREZWxheVNlZWspIHsKLSAg
ICAgICAgICAgIHJlYXNvbiA9IG1ha2VTdHJpbmcoIkluIGFzeW5jIGNoYW5nZSAiLAotICAgICAg
ICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSwgIiAtLT4gIiwKLSAg
ICAgICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShuZXdTdGF0ZSkpLnV0Zjgo
KTsKLSAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA8IEdTVF9TVEFURV9QQVVTRUQpCi0gICAgICAg
ICAgICByZWFzb24gPSAiU3RhdGUgbGVzcyB0aGFuIFBBVVNFRCI7Ci0gICAgICAgIGVsc2UgaWYg
KG1faXNFbmRSZWFjaGVkKQotICAgICAgICAgICAgcmVhc29uID0gIkVuZCByZWFjaGVkIjsKLSAg
ICAgICAgZWxzZSBpZiAoIW1fZ3N0U2Vla0NvbXBsZXRlZCkKLSAgICAgICAgICAgIHJlYXNvbiA9
ICJQcmV2aW91cyBzZWVrIGlzIG5vdCBmaW5pc2hlZCB5ZXQiOwotCi0gICAgICAgIEdTVF9ERUJV
R19PQkpFQ1QocGlwZWxpbmUoKSwgIltTZWVrXSBEZWxheWluZyB0aGUgc2VlazogJXMiLCByZWFz
b24uZGF0YSgpKTsKLQotICAgICAgICBtX2lzU2Vla1BlbmRpbmcgPSB0cnVlOwotCi0gICAgICAg
IGlmIChtX2lzRW5kUmVhY2hlZCkgewotICAgICAgICAgICAgR1NUX0RFQlVHKCJbU2Vla10gcmVz
ZXQgcGlwZWxpbmUiKTsKLSAgICAgICAgICAgIG1fc2hvdWxkUmVzZXRQaXBlbGluZSA9IHRydWU7
Ci0gICAgICAgICAgICBtX2lzU2Vla2luZyA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKCFjaGFu
Z2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QQVVTRUQpKQotICAgICAgICAgICAgICAgIGxvYWRp
bmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZTo6RW1wdHkpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIG1faXNTZWVraW5nID0gdHJ1ZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiBtX2lzU2Vla2luZzsKLSAgICB9Ci0KLSAgICAvLyBTdG9wIGFjY2VwdGlu
ZyBuZXcgc2FtcGxlcyB1bnRpbCBhY3R1YWwgc2VlayBpcyBmaW5pc2hlZC4KLSAgICB3ZWJLaXRN
ZWRpYVNyY1NldFJlYWR5Rm9yU2FtcGxlcyhXRUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdldCgp
KSwgZmFsc2UpOwotCi0gICAgLy8gQ29ycmVjdCBzZWVrIHRpbWUgaWYgaXQgaGVscHMgdG8gZml4
IGEgc21hbGwgZ2FwLgotICAgIGlmICghaXNUaW1lQnVmZmVyZWQoc2Vla1RpbWUpKSB7Ci0gICAg
ICAgIC8vIExvb2sgaWYgYSBuZWFyIGZ1dHVyZSB0aW1lICg8MC4xIHNlYy4pIGlzIGJ1ZmZlcmVk
IGFuZCBjaGFuZ2UgdGhlIHNlZWsgdGFyZ2V0IHRpbWUuCi0gICAgICAgIGlmIChtX21lZGlhU291
cmNlKSB7Ci0gICAgICAgICAgICBjb25zdCBNZWRpYVRpbWUgbWluaUdhcCA9IE1lZGlhVGltZSgx
LCAxMCk7Ci0gICAgICAgICAgICBNZWRpYVRpbWUgbmVhcmVzdCA9IG1fbWVkaWFTb3VyY2UtPmJ1
ZmZlcmVkKCktPm5lYXJlc3Qoc2Vla1RpbWUpOwotICAgICAgICAgICAgaWYgKG5lYXJlc3QuaXNW
YWxpZCgpICYmIG5lYXJlc3QgPiBzZWVrVGltZSAmJiAobmVhcmVzdCAtIHNlZWtUaW1lKSA8PSBt
aW5pR2FwICYmIGlzVGltZUJ1ZmZlcmVkKG5lYXJlc3QgKyBtaW5pR2FwKSkgewotICAgICAgICAg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltTZWVrXSBDaGFuZ2VkIHRoZSBz
ZWVrIHRhcmdldCB0aW1lIGZyb20gJXMgdG8gJXMsIGEgbmVhciBwb2ludCBpbiB0aGUgZnV0dXJl
IiwgdG9TdHJpbmcoc2Vla1RpbWUpLnV0ZjgoKS5kYXRhKCksIHRvU3RyaW5nKG5lYXJlc3QpLnV0
ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIHNlZWtUaW1lID0gbmVhcmVzdDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIE1TRSBoYXMgc2Ft
cGxlcyBmb3IgcmVxdWVzdGVkIHRpbWUgYW5kIGRlZmVyIGFjdHVhbCBzZWVrIGlmIG5lZWRlZC4K
LSAgICBpZiAoIWlzVGltZUJ1ZmZlcmVkKHNlZWtUaW1lKSkgewotICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKHBpcGVsaW5lKCksICJbU2Vla10gRGVsYXlpbmcgdGhlIHNlZWs6IE1TRSBpcyBub3Qg
cmVhZHkiKTsKLSAgICAgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc2V0U3RhdGVSZXN1bHQgPSBn
c3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1BBVVNFRCk7
Ci0gICAgICAgIGlmIChzZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUp
IHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltTZWVrXSBDYW5u
b3Qgc2VlaywgZmFpbGVkIHRvIHBhdXNlIHBsYXliYWNrIHBpcGVsaW5lLiIpOwotICAgICAgICAg
ICAgd2ViS2l0TWVkaWFTcmNTZXRSZWFkeUZvclNhbXBsZXMoV0VCS0lUX01FRElBX1NSQyhtX3Nv
dXJjZS5nZXQoKSksIHRydWUpOwotICAgICAgICAgICAgbV9pc1NlZWtpbmcgPSBmYWxzZTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBtX3JlYWR5U3RhdGUg
PSBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZTo6SGF2ZU1ldGFkYXRhOwotICAgICAgICBub3RpZnlT
ZWVrTmVlZHNEYXRhRm9yVGltZShzZWVrVGltZSk7Ci0gICAgICAgIEFTU0VSVCghbV9tc2VTZWVr
Q29tcGxldGVkKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gQ29tcGxl
dGUgcHJldmlvdXMgTVNFIHNlZWsgaWYgbmVlZGVkLgotICAgIGlmICghbV9tc2VTZWVrQ29tcGxl
dGVkKSB7Ci0gICAgICAgIG1fbWVkaWFTb3VyY2UtPm1vbml0b3JTb3VyY2VCdWZmZXJzKCk7Ci0g
ICAgICAgIEFTU0VSVChtX21zZVNlZWtDb21wbGV0ZWQpOwotICAgICAgICAvLyBOb3RlOiBzZWVr
Q29tcGxldGVkIHdpbGwgcmVjdXJzaXZlbHkgY2FsbCB1cy4KLSAgICAgICAgcmV0dXJuIG1faXNT
ZWVraW5nOwotICAgIH0KLQotICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIldlIGNh
biBzZWVrIG5vdyIpOwotCi0gICAgTWVkaWFUaW1lIHN0YXJ0VGltZSA9IHNlZWtUaW1lLCBlbmRU
aW1lID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwotCi0gICAgaWYgKHJhdGUgPCAwKSB7Ci0g
ICAgICAgIHN0YXJ0VGltZSA9IE1lZGlhVGltZTo6emVyb1RpbWUoKTsKLSAgICAgICAgZW5kVGlt
ZSA9IHNlZWtUaW1lOwotICAgIH0KKyAgICAvLyBJbXBvcnRhbnQ6IEluIG9yZGVyIHRvIGVuc3Vy
ZSBjb3JyZWN0IHByb3BhZ2F0aW9uIHdoZXRoZXIgcHJlLXJvbGwgaGFzIGhhcHBlbmVkIG9yIG5v
dCwgd2Ugc2VuZCB0aGUgc2VlayBkaXJlY3RseQorICAgIC8vIHRvIHRoZSBzb3VyY2UgZWxlbWVu
dCwgcmF0aGVyIHRoYW4gbGV0dGluZyBwbGF5YmluIGRvIHRoZSByb3V0aW5nLgorICAgIGdzdF9l
bGVtZW50X3NlZWsobV9zb3VyY2UuZ2V0KCksIHJhdGUsIEdTVF9GT1JNQVRfVElNRSwgc2Vla0Zs
YWdzLAorICAgICAgICBHU1RfU0VFS19UWVBFX1NFVCwgdG9Hc3RDbG9ja1RpbWUobV9zZWVrVGlt
ZSksIEdTVF9TRUVLX1RZUEVfTk9ORSwgMCk7CisgICAgaW52YWxpZGF0ZUNhY2hlZFBvc2l0aW9u
KCk7CiAKLSAgICBpZiAoIXJhdGUpCi0gICAgICAgIHJhdGUgPSAxOwotCi0gICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAiQWN0dWFsIHNlZWsgdG8gJXMsIGVuZCB0aW1lOiAgJXMsIHJh
dGU6ICVmIiwgdG9TdHJpbmcoc3RhcnRUaW1lKS51dGY4KCkuZGF0YSgpLCB0b1N0cmluZyhlbmRU
aW1lKS51dGY4KCkuZGF0YSgpLCByYXRlKTsKLQotICAgIG1fZ3N0U2Vla0NvbXBsZXRlZCA9IGZh
bHNlOwotICAgIGlmIChzdGF0ZSA8IEdTVF9TVEFURV9QQVVTRUQpIHsKLSAgICAgICAgLy8gU3Bl
Y2lhbCBjYXNlIG9mIGluaXRpYWwgc2Vlay4gV2Ugc2V0IHRoZSByaWdodCBzZWdtZW50IGluc3Rl
YWQgb2YgYSBzZWVrLgotICAgICAgICB3ZWJLaXRNZWRpYVNyY1ByZXBhcmVJbml0aWFsU2VlayhX
RUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdldCgpKSwgcmF0ZSwgc3RhcnRUaW1lLCBlbmRUaW1l
KTsKLSAgICAgICAgbm90aWZ5U2Vla05lZWRzRGF0YUZvclRpbWUoc2Vla1RpbWUpOwotICAgICAg
ICBHU1RfREVCVUcoIkluaXRpYWwgc2VlayBzdWNjZWVkZWQsIHJldHVybmluZyB0cnVlIik7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgLy8gVGhpcyB3aWxsIGNhbGwgbm90aWZ5U2Vla05lZWRzRGF0
YSgpIGFmdGVyIHNvbWUgdGltZSB0byB0ZWxsIHRoYXQgdGhlIHBpcGVsaW5lIGlzIHJlYWR5IGZv
ciBzYW1wbGUgZW5xdWV1aW5nLgotICAgICAgICB3ZWJLaXRNZWRpYVNyY1ByZXBhcmVTZWVrKFdF
QktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCBzZWVrVGltZSk7Ci0KLSAgICAgICAgaWYg
KCFnc3RfZWxlbWVudF9zZWVrKG1fcGlwZWxpbmUuZ2V0KCksIHJhdGUsIEdTVF9GT1JNQVRfVElN
RSwgc2Vla1R5cGUsIEdTVF9TRUVLX1RZUEVfU0VULCB0b0dzdENsb2NrVGltZShzdGFydFRpbWUp
LCBHU1RfU0VFS19UWVBFX1NFVCwgdG9Hc3RDbG9ja1RpbWUoZW5kVGltZSkpKSB7Ci0gICAgICAg
ICAgICB3ZWJLaXRNZWRpYVNyY1NldFJlYWR5Rm9yU2FtcGxlcyhXRUJLSVRfTUVESUFfU1JDKG1f
c291cmNlLmdldCgpKSwgdHJ1ZSk7Ci0gICAgICAgICAgICBtX2lzU2Vla2luZyA9IGZhbHNlOwot
ICAgICAgICAgICAgbV9nc3RTZWVrQ29tcGxldGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIEdTVF9E
RUJVRygiZ3N0X2VsZW1lbnRfc2VlaygpIGZhaWxlZCwgcmV0dXJuaW5nIGZhbHNlIik7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gVGhlIHNhbXBsZXMg
d2lsbCBiZSBlbnF1ZXVlZCBpbiBub3RpZnlTZWVrTmVlZHNEYXRhKCkuCi0gICAgICAgIEdTVF9E
RUJVRygiZ3N0X2VsZW1lbnRfc2VlaygpIHN1Y2NlZWRlZCwgcmV0dXJuaW5nIHRydWUiKTsKLSAg
ICB9CisgICAgLy8gTm90aWZ5IE1lZGlhU291cmNlIGFuZCBoYXZlIG5ldyBmcmFtZXMgZW5xdWV1
ZWQgKHdoZW4gdGhleSdyZSBhdmFpbGFibGUpLgorICAgIG1fbWVkaWFTb3VyY2UtPnNlZWtUb1Rp
bWUobV9zZWVrVGltZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjptYXliZUZpbmlzaFNlZWsoKQordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJNU0U6OnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUg
bWVkaWFTb3VyY2VSZWFkeVN0YXRlKQogewotICAgIGlmICghbV9pc1NlZWtpbmcgfHwgIW1fbXNl
U2Vla0NvbXBsZXRlZCB8fCAhbV9nc3RTZWVrQ29tcGxldGVkKQorICAgIC8vIFNvbWV0aGluZyBp
bXBvcnRhbnQgdG8gYmVhciBpbiBtaW5kIGlzIHRoYXQgdGhlIHJlYWR5U3RhdGUgd2UgZ2V0IGhl
cmUgY29tZXMgZnJvbSBNZWRpYVNvdXJjZS4KKyAgICAvLyBGcm9tIE1lZGlhU291cmNlIHBlcnNw
ZWN0aXZlLCBhcyBsb25nIGFzIHRoZSBzYW1wbGUgZm9yIGN1cnJlbnRUaW1lIGV4aXN0cyBpbiB0
aGUgc2FtcGxlIG1hcCwgd2UgYXJlID49IEhhdmVDdXJyZW50RGF0YS4KKyAgICAvLyBUaGlzIGlz
IE5PVCB0cnVlIGZyb20gdGhlIHBsYXllciBwZXJzcGVjdGl2ZSB0aG91Z2gsIGJlY2F1c2UgdGhl
cmUgbmVlZHMgdG8gcGFzcyBzb21lIHRpbWUgc2luY2Ugd2UgaGF2ZSB0aGUgZmlyc3QgZnJhbWUK
KyAgICAvLyAoPj1IYXZlQ3VycmVudERhdGEgZm9yIE1lZGlhU291cmNlKSBhbmQgd2UgaGF2ZSBk
ZWNvZGVkIGl0IGFuZCBzZW50IGl0IHRvIHRoZSBzaW5rL2NvbXBvc2l0b3IgKD49SGF2ZUN1cnJl
bnREYXRhIGluIEhUTUxNZWRpYUVsZW1lbnQpLgorICAgIC8vIFRoZSB3YXkgd2UgaW1wbGVtZW50
IHRoaXMgaXMgYnkga2VlcGluZyB0cmFjayBvZiB0aGUgTWVkaWFTb3VyY2UgcmVhZHlTdGF0ZSBp
bnRlcm5hbGx5IGluIG1fbWVkaWFTb3VyY2VSZWFkeVN0YXRlIGJ1dCBub3QKKyAgICAvLyBzcHJl
YWRpbmcgc3RhdGVzID49IEhhdmVDdXJyZW50RGF0YSB0byB0aGUgcGxheWVyIHVudGlsIHByZXJv
bGxlZC4KKyAgICBpZiAobWVkaWFTb3VyY2VSZWFkeVN0YXRlID09IG1fbWVkaWFTb3VyY2VSZWFk
eVN0YXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBHc3RTdGF0ZSBzdGF0ZSwgbmV3U3RhdGU7
Ci0gICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ2V0U3RhdGVSZXN1bHQgPSBnc3RfZWxlbWVudF9n
ZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCAmbmV3U3RhdGUsIDApOwotCi0gICAg
aWYgKGdldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMKLSAgICAgICAgJiYg
IShzdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORyAmJiBuZXdTdGF0ZSA9PSBHU1RfU1RBVEVfUEFV
U0VEKSkgewotICAgICAgICBHU1RfREVCVUcoIltTZWVrXSBEZWxheWluZyBzZWVrIGZpbmlzaCIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEdTVF9ERUJVRygiTWVkaWFTb3VyY2UgY2Fs
bGVkIHNldFJlYWR5U3RhdGUoJXApOiAlcyAtPiAlcyBDdXJyZW50IHBsYXllciBzdGF0ZTogJXMg
V2FpdGluZyBmb3IgcHJlcm9sbDogJXMiLCB0aGlzLCBkdW1wUmVhZHlTdGF0ZShtX21lZGlhU291
cmNlUmVhZHlTdGF0ZSksIGR1bXBSZWFkeVN0YXRlKG1lZGlhU291cmNlUmVhZHlTdGF0ZSksIGR1
bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSksIGJvb2xGb3JQcmludGluZyhtX2lzV2FpdGluZ0Zv
clByZXJvbGwpKTsKKyAgICBtX21lZGlhU291cmNlUmVhZHlTdGF0ZSA9IG1lZGlhU291cmNlUmVh
ZHlTdGF0ZTsKIAotICAgIGlmIChtX2lzU2Vla1BlbmRpbmcpIHsKLSAgICAgICAgR1NUX0RFQlVH
KCJbU2Vla10gQ29tbWl0dGluZyBwZW5kaW5nIHNlZWsgdG8gJXMiLCB0b1N0cmluZyhtX3NlZWtU
aW1lKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgbV9pc1NlZWtQZW5kaW5nID0gZmFsc2U7Ci0g
ICAgICAgIGlmICghZG9TZWVrKG1fc2Vla1RpbWUsIG1fcGxheWJhY2tSYXRlLCBzdGF0aWNfY2Fz
dDxHc3RTZWVrRmxhZ3M+KEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX0FDQ1VS
QVRFKSkpIHsKLSAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJbU2Vla10gU2Vla2luZyB0byAlcyBm
YWlsZWQiLCB0b1N0cmluZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAg
IG1fY2FjaGVkUG9zaXRpb24gPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdTVF9ERUJVRygiW1NlZWtdIFNlZWtlZCB0
byAlcyIsIHRvU3RyaW5nKG1fc2Vla1RpbWUpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgd2ViS2l0
TWVkaWFTcmNTZXRSZWFkeUZvclNhbXBsZXMoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQo
KSksIHRydWUpOwotICAgIG1faXNTZWVraW5nID0gZmFsc2U7Ci0gICAgbV9jYWNoZWRQb3NpdGlv
biA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKLSAgICAvLyBUaGUgcGlwZWxpbmUgY2FuIHN0
aWxsIGhhdmUgYSBwZW5kaW5nIHN0YXRlLiBJbiB0aGlzIGNhc2UgYSBwb3NpdGlvbiBxdWVyeSB3
aWxsIGZhaWwuCi0gICAgLy8gUmlnaHQgbm93IHdlIGNhbiB1c2UgbV9zZWVrVGltZSBhcyBhIGZh
bGxiYWNrLgotICAgIG1fY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3NpdGlvbiA9IHRy
dWU7Ci0gICAgdGltZUNoYW5nZWQoKTsKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0U6OnNlZWtpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtX2lzU2Vla2luZzsKKyAg
ICBpZiAobWVkaWFTb3VyY2VSZWFkeVN0YXRlIDwgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGU6Okhh
dmVDdXJyZW50RGF0YSB8fCAhbV9pc1dhaXRpbmdGb3JQcmVyb2xsKQorICAgICAgICBwcm9wYWdh
dGVSZWFkeVN0YXRlVG9QbGF5ZXIoKTsKIH0KIAotLy8gRklYTUU6IE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lciBtYW5hZ2VzIHRoZSBSZWFkeVN0YXRlIG9uIGl0cyBvd24uIFdlIHNob3VsZG4n
dCBjaGFuZ2UgaXQgbWFudWFsbHkuCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RTo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKQordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnByb3BhZ2F0ZVJlYWR5U3RhdGVUb1Bs
YXllcigpCiB7Ci0gICAgaWYgKHJlYWR5U3RhdGUgPT0gbV9yZWFkeVN0YXRlKQorICAgIEFTU0VS
VChtX21lZGlhU291cmNlUmVhZHlTdGF0ZSA8IE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlOjpIYXZl
Q3VycmVudERhdGEgfHwgIW1faXNXYWl0aW5nRm9yUHJlcm9sbCk7CisgICAgaWYgKG1fcmVhZHlT
dGF0ZSA9PSBtX21lZGlhU291cmNlUmVhZHlTdGF0ZSkKICAgICAgICAgcmV0dXJuOworICAgIEdT
VF9ERUJVRygiUHJvcGFnYXRpbmcgTWVkaWFTb3VyY2UgcmVhZHlTdGF0ZSAlcyB0byBwbGF5ZXIg
cmVhZHkgc3RhdGUgKGN1cnJlbnRseSAlcykiLCBkdW1wUmVhZHlTdGF0ZShtX21lZGlhU291cmNl
UmVhZHlTdGF0ZSksIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkpOwogCi0gICAgaWYgKHNl
ZWtpbmcoKSkgewotICAgICAgICBHU1RfREVCVUcoIlNraXAgcmVhZHkgc3RhdGUgY2hhbmdlKCVz
IC0+ICVzKSBkdWUgdG8gc2Vla1xuIiwgZHVtcFJlYWR5U3RhdGUobV9yZWFkeVN0YXRlKSwgZHVt
cFJlYWR5U3RhdGUocmVhZHlTdGF0ZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
R1NUX0RFQlVHKCJSZWFkeSBTdGF0ZSBDaGFuZ2VkIG1hbnVhbGx5IGZyb20gJXUgdG8gJXUiLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obV9yZWFkeVN0YXRlKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHJlYWR5U3RhdGUpKTsKLSAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBvbGRSZWFkeVN0YXRl
ID0gbV9yZWFkeVN0YXRlOwotICAgIG1fcmVhZHlTdGF0ZSA9IHJlYWR5U3RhdGU7Ci0gICAgR1NU
X0RFQlVHKCJtX3JlYWR5U3RhdGU6ICVzIC0+ICVzIiwgZHVtcFJlYWR5U3RhdGUob2xkUmVhZHlT
dGF0ZSksIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkpOwotCi0gICAgaWYgKG9sZFJlYWR5
U3RhdGUgPCBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZTo6SGF2ZUN1cnJlbnREYXRhICYmIG1fcmVh
ZHlTdGF0ZSA+PSBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZTo6SGF2ZUN1cnJlbnREYXRhKSB7Ci0g
ICAgICAgIEdTVF9ERUJVRygiW1NlZWtdIFJlcG9ydGluZyBsb2FkIHN0YXRlIGNoYW5nZWQgdG8g
dHJpZ2dlciBzZWVrIGNvbnRpbnVhdGlvbiIpOwotICAgICAgICBsb2FkU3RhdGVDaGFuZ2VkKCk7
Ci0gICAgfQorICAgIG1fcmVhZHlTdGF0ZSA9IG1fbWVkaWFTb3VyY2VSZWFkeVN0YXRlOworICAg
IHVwZGF0ZVN0YXRlcygpOyAvLyBTZXQgdGhlIHBpcGVsaW5lIHRvIFBMQVlJTkcgb3IgUEFVU0VE
IGlmIG5lY2Vzc2FyeS4KICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKIAotICAg
IEdzdFN0YXRlIHBpcGVsaW5lU3RhdGU7Ci0gICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ2V0U3Rh
dGVSZXN1bHQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnBpcGVs
aW5lU3RhdGUsIG51bGxwdHIsIDI1MCAqIEdTVF9OU0VDT05EKTsKLSAgICBib29sIGlzUGxheWlu
ZyA9IChnZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MgJiYgcGlwZWxp
bmVTdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgICBpZiAobV9yZWFkeVN0YXRlID09
IE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlOjpIYXZlTWV0YWRhdGEgJiYgb2xkUmVhZHlTdGF0ZSA+
IE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlOjpIYXZlTWV0YWRhdGEgJiYgaXNQbGF5aW5nKSB7Ci0g
ICAgICAgIEdTVF9UUkFDRSgiQ2hhbmdpbmcgcGlwZWxpbmUgdG8gUEFVU0VELi4uIik7Ci0gICAg
ICAgIGJvb2wgb2sgPSBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QQVVTRUQpOwotICAg
ICAgICBHU1RfVFJBQ0UoIkNoYW5nZWQgcGlwZWxpbmUgdG8gUEFVU0VEOiAlcyIsIG9rID8gIlN1
Y2Nlc3MiIDogIkVycm9yIik7Ci0gICAgfQorICAgIC8vIFRoZSByZWFkeVN0YXRlIGNoYW5nZSBt
YXkgYmUgYSByZXN1bHQgb2YgbW9uaXRvclNvdXJjZUJ1ZmZlcnMoKSBmaW5kaW5nIHRoYXQgY3Vy
cmVudFRpbWUgPT0gZHVyYXRpb24sIHdoaWNoCisgICAgLy8gc2hvdWxkIGNhdXNlIHRoZSB2aWRl
byB0byBiZSBtYXJrZWQgYXMgZW5kZWQuIExldCdzIGhhdmUgdGhlIHBsYXllciBjaGVjayB0aGF0
LgorICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck1TRTo6d2FpdEZvclNlZWtDb21wbGV0ZWQoKQotewotICAgIGlmICghbV9p
c1NlZWtpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdTVF9ERUJVRygiV2FpdGluZyBmb3Ig
TVNFIHNlZWsgY29tcGxldGVkIik7Ci0gICAgbV9tc2VTZWVrQ29tcGxldGVkID0gZmFsc2U7Ci19
Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVrQ29tcGxldGVkKCkK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjphc3luY1N0YXRlQ2hhbmdlRG9u
ZSgpCiB7Ci0gICAgaWYgKG1fbXNlU2Vla0NvbXBsZXRlZCkKKyAgICBBU1NFUlQoR1NUX1NUQVRF
KG1fcGlwZWxpbmUuZ2V0KCkpID49IEdTVF9TVEFURV9QQVVTRUQpOworICAgIC8vIFRoZXJlIGFy
ZSB0aHJlZSBjaXJjdW1zdGFuY2VzIGluIHdoaWNoIGEgcHJlcm9sbCBjYW4gb2NjdXI6CisgICAg
Ly8gYSkgQXQgdGhlIGJlZ2luaW5nIG9mIHBsYXliYWNrLiBUaGlzIGlzIHRoZSBwb2ludCB3aGVy
ZSB3ZSBwcm9wYWdhdGUgPj1IYXZlQ3VycmVudERhdGEgdG8gdGhlIHBsYXllci4KKyAgICAvLyBi
KSBBdCB0aGUgZW5kIG9mIGEgc2Vlay4gV2UgZW1pdCB0aGUgInNlZWtlZCIgZXZlbnQgYXMgd2Vs
bC4KKyAgICAvLyBjKSBBdCB0aGUgZW5kIG9mIGEgZmx1c2ggKGZvcmNlZCBxdWFsaXR5IGNoYW5n
ZSkuIFRoZXNlIHNob3VsZCBub3QgcHJvZHVjZSBlaXRoZXIgb2YgdGhlc2Ugb3V0Y29tZXMuCisg
ICAgLy8gV2UgaWRlbnRpZnkgKGEpIGFuZCAoYikgYnkgc2V0dGluZyBtX2lzV2FpdGluZ0ZvclBy
ZXJvbGwgPSB0cnVlIGF0IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGxheWVyIGFuZAorICAg
IC8vIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBzZWVrLgorICAgIEdTVF9ERUJVRygiUGlwZWxpbmUg
cHJlcm9sbGVkLiBjdXJyZW50TWVkaWFUaW1lID0gJXMiLCBjdXJyZW50TWVkaWFUaW1lKCkudG9T
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAoIW1faXNXYWl0aW5nRm9yUHJlcm9sbCkg
eworICAgICAgICBHU1RfREVCVUcoIlByZXJvbGwgd2FzIGNvbnNlcXVlbmNlIG9mIGEgZmx1c2gs
IG5vdGhpbmcgdG8gZG8gYXQgdGhpcyBsZXZlbC4iKTsKICAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBtX2lzV2FpdGluZ0ZvclByZXJvbGwgPSBmYWxzZTsKIAotICAgIEdTVF9ERUJVRygiTVNF
IHNlZWsgY29tcGxldGVkIik7Ci0gICAgbV9tc2VTZWVrQ29tcGxldGVkID0gdHJ1ZTsKLQotICAg
IGRvU2VlayhtX3NlZWtUaW1lLCBtX3BsYXliYWNrUmF0ZSwgc3RhdGljX2Nhc3Q8R3N0U2Vla0Zs
YWdzPihHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19BQ0NVUkFURSkpOwotCi0g
ICAgaWYgKCFzZWVraW5nKCkgJiYgbV9yZWFkeVN0YXRlID49IE1lZGlhUGxheWVyOjpSZWFkeVN0
YXRlOjpIYXZlRnV0dXJlRGF0YSkKLSAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RB
VEVfUExBWUlORyk7CisgICAgLy8gVGhlIG9yZGVyIG9mIHRoZXNlIHNlY3Rpb25zIGlzIGltcG9y
dGFudC4gSW4gdGhlIGNhc2Ugb2YgYSBzZWVrLCB0aGUgInNlZWtlZCIgZXZlbnQgbXVzdCBiZSBl
bWl0dGVkCisgICAgLy8gYmVmb3JlIHRoZSAicGxheWluZyIgZXZlbnQgKHdoaWNoIGlzIGVtaXR0
ZWQgb24gSEFWRV9FTk9VR0hfREFUQSkuIFRoZXJlZm9yZSwgd2UgdGFrZSBjYXJlIG9mIHRoZW0g
aW4KKyAgICAvLyB0aGF0IG9yZGVyLgogCi0gICAgaWYgKCFzZWVraW5nKCkpCisgICAgaWYgKG1f
aXNTZWVraW5nKSB7CisgICAgICAgIG1faXNTZWVraW5nID0gZmFsc2U7CisgICAgICAgIEdTVF9E
RUJVRygiU2VlayBjb21wbGV0ZSBiZWNhdXNlIG9mIHByZXJvbGwuIGN1cnJlbnRNZWRpYVRpbWUg
PSAlcyIsIGN1cnJlbnRNZWRpYVRpbWUoKS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICAvLyBCeSBjYWxsaW5nIHRpbWVDaGFuZ2VkKCksIG1faXNTZWVraW5nIHdpbGwgYmUgY2hl
Y2tlZCBhbiBhICJzZWVrZWQiIGV2ZW50IHdpbGwgYmUgZW1pdHRlZC4KICAgICAgICAgbV9wbGF5
ZXItPnRpbWVDaGFuZ2VkKCk7CisgICAgfQorCisgICAgcHJvcGFnYXRlUmVhZHlTdGF0ZVRvUGxh
eWVyKCk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6YnVmZmVyZWQoKSBjb25zdApAQCAtNDc3LDE5OSArMjY1
LDI2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzb3VyY2VTZXR1cChH
c3RFbGVtZW50KiBzb3VyY2VFbGVtZW50KQogewogICAgIEFTU0VSVChXRUJLSVRfSVNfTUVESUFf
U1JDKHNvdXJjZUVsZW1lbnQpKTsKICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJT
b3VyY2UgJXAgc2V0dXAgKG9sZCB3YXM6ICVwKSIsIHNvdXJjZUVsZW1lbnQsIG1fc291cmNlLmdl
dCgpKTsKLQotICAgIGJvb2wgc2hvdWxkUmVzdG9yZVRyYWNrcyA9IG1fc291cmNlOwotICAgIGlm
IChzaG91bGRSZXN0b3JlVHJhY2tzKQotICAgICAgICB3ZWJLaXRNZWRpYVNyY1Jlc3RvcmVUcmFj
a3MoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSksIFdFQktJVF9NRURJQV9TUkMoc291
cmNlRWxlbWVudCkpOwogICAgIG1fc291cmNlID0gc291cmNlRWxlbWVudDsKLSAgICBtX2Vvc01h
cmtlZCA9IGZhbHNlOwotCi0gICAgbV9wbGF5YmFja1BpcGVsaW5lLT5zZXRXZWJLaXRNZWRpYVNy
YyhXRUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdldCgpKSk7Ci0gICAgZ19zaWduYWxfY29ubmVj
dF9zd2FwcGVkKG1fc291cmNlLmdldCgpLCAidmlkZW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodmlk
ZW9DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQo
bV9zb3VyY2UuZ2V0KCksICJhdWRpby1jaGFuZ2VkIiwgR19DQUxMQkFDSyhhdWRpb0NoYW5nZWRD
YWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3NvdXJjZS5n
ZXQoKSwgInRleHQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodGV4dENoYW5nZWRDYWxsYmFjayksIHRo
aXMpOwotICAgIHdlYktpdE1lZGlhU3JjU2V0TWVkaWFQbGF5ZXJQcml2YXRlKFdFQktJVF9NRURJ
QV9TUkMobV9zb3VyY2UuZ2V0KCkpLCB0aGlzKTsKLQotICAgIGlmIChzaG91bGRSZXN0b3JlVHJh
Y2tzKSB7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3BsYXllciA9IG1ha2VXZWFrUHRyKCp0
aGlzKV0gewotICAgICAgICAgICAgaWYgKCFwbGF5ZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgd2ViS2l0TWVkaWFTcmNTaWduYWxUcmFja3MoV0VCS0lUX01FRElBX1NS
QyhwbGF5ZXItPm1fc291cmNlLmdldCgpKSk7Ci0gICAgICAgICAgICBwbGF5ZXItPm1fbWVkaWFT
b3VyY2UtPm1vbml0b3JTb3VyY2VCdWZmZXJzKCk7Ci0KLSAgICAgICAgICAgIGF1dG8gc2Vla1Rp
bWUgPSBNZWRpYVRpbWU6Onplcm9UaW1lKCk7Ci0gICAgICAgICAgICB3ZWJLaXRNZWRpYVNyY1By
ZXBhcmVJbml0aWFsU2VlayhXRUJLSVRfTUVESUFfU1JDKHBsYXllci0+bV9zb3VyY2UuZ2V0KCkp
LCBwbGF5ZXItPm1fcGxheWJhY2tSYXRlLCBzZWVrVGltZSwgTWVkaWFUaW1lOjppbnZhbGlkVGlt
ZSgpKTsKLSAgICAgICAgICAgIHBsYXllci0+bm90aWZ5U2Vla05lZWRzRGF0YUZvclRpbWUoc2Vl
a1RpbWUpOwotICAgICAgICB9KTsKLSAgICB9CisKKyAgICBpZiAobV9oYXNBbGxUcmFja3MpCisg
ICAgICAgIHdlYktpdE1lZGlhU3JjRW1pdFN0cmVhbXMoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJj
ZS5nZXQoKSksIG1fdHJhY2tzKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJNU0U6OnVwZGF0ZVN0YXRlcygpCiB7Ci0gICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8
IG1fZGlkRXJyb3JPY2N1cikpCi0gICAgICAgIHJldHVybjsKLQotICAgIE1lZGlhUGxheWVyOjpO
ZXR3b3JrU3RhdGUgb2xkTmV0d29ya1N0YXRlID0gbV9uZXR3b3JrU3RhdGU7Ci0gICAgTWVkaWFQ
bGF5ZXI6OlJlYWR5U3RhdGUgb2xkUmVhZHlTdGF0ZSA9IG1fcmVhZHlTdGF0ZTsKLSAgICBHc3RT
dGF0ZSBzdGF0ZSwgcGVuZGluZzsKLSAgICBib29sIHN0YXRlUmVhbGx5Q2hhbmdlZCA9IGZhbHNl
OwotCi0gICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ2V0U3RhdGVSZXN1bHQgPSBnc3RfZWxlbWVu
dF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCAmcGVuZGluZywgMjUwICogR1NU
X05TRUNPTkQpOwotICAgIGlmIChzdGF0ZSAhPSBtX2N1cnJlbnRTdGF0ZSkgewotICAgICAgICBt
X29sZFN0YXRlID0gbV9jdXJyZW50U3RhdGU7Ci0gICAgICAgIG1fY3VycmVudFN0YXRlID0gc3Rh
dGU7Ci0gICAgICAgIHN0YXRlUmVhbGx5Q2hhbmdlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgYm9v
bCBzaG91bGRVcGRhdGVQbGF5YmFja1N0YXRlID0gZmFsc2U7Ci0gICAgc3dpdGNoIChnZXRTdGF0
ZVJlc3VsdCkgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOiB7Ci0gICAgICAg
IEdTVF9ERUJVRygiU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2dl
dF9uYW1lKHN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykpOwotCi0g
ICAgICAgIC8vIERvIG5vdGhpbmcgaWYgb24gRU9TIGFuZCBzdGF0ZSBjaGFuZ2VkIHRvIFJFQURZ
IHRvIGF2b2lkIHJlY3JlYXRpbmcgdGhlIHBsYXllcgotICAgICAgICAvLyBvbiBIVE1MTWVkaWFF
bGVtZW50IGFuZCBwcm9wZXJseSBnZW5lcmF0ZSB0aGUgdmlkZW8gJ2VuZGVkJyBldmVudC4KLSAg
ICAgICAgaWYgKG1faXNFbmRSZWFjaGVkICYmIHN0YXRlID09IEdTVF9TVEFURV9SRUFEWSkKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIG1fc2hvdWxkUmVzZXRQaXBlbGluZSA9IChzdGF0
ZSA8PSBHU1RfU1RBVEVfUkVBRFkpOwotICAgICAgICBpZiAobV9zaG91bGRSZXNldFBpcGVsaW5l
KQotICAgICAgICAgICAgbV9tZWRpYVRpbWVEdXJhdGlvbiA9IE1lZGlhVGltZTo6emVyb1RpbWUo
KTsKLQotICAgICAgICAvLyBVcGRhdGUgcmVhZHkgYW5kIG5ldHdvcmsgc3RhdGVzLgotICAgICAg
ICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgICAgIGNhc2UgR1NUX1NUQVRFX05VTEw6Ci0gICAgICAg
ICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZTo6SGF2ZU5vdGhpbmc7
Ci0gICAgICAgICAgICBHU1RfREVCVUcoIm1fcmVhZHlTdGF0ZT0lcyIsIGR1bXBSZWFkeVN0YXRl
KG1fcmVhZHlTdGF0ZSkpOwotICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXll
cjo6TmV0d29ya1N0YXRlOjpFbXB0eTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEdTVF9TVEFURV9SRUFEWToKLSAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVy
OjpSZWFkeVN0YXRlOjpIYXZlTWV0YWRhdGE7Ci0gICAgICAgICAgICBHU1RfREVCVUcoIm1fcmVh
ZHlTdGF0ZT0lcyIsIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkpOwotICAgICAgICAgICAg
bV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlOjpFbXB0eTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9TVEFURV9QQVVTRUQ6Ci0gICAgICAgIGNh
c2UgR1NUX1NUQVRFX1BMQVlJTkc6Ci0gICAgICAgICAgICBpZiAoc2Vla2luZygpKSB7Ci0gICAg
ICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGU6OkhhdmVN
ZXRhZGF0YTsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIG1hbmFnZSBOZXR3
b3JrU3RhdGUgdG9vPwotICAgICAgICAgICAgICAgIEdTVF9ERUJVRygibV9yZWFkeVN0YXRlPSVz
IiwgZHVtcFJlYWR5U3RhdGUobV9yZWFkeVN0YXRlKSk7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIGlmIChtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6UmVhZHlTdGF0
ZTo6SGF2ZUZ1dHVyZURhdGEpCi0gICAgICAgICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpSZWFkeVN0YXRlOjpIYXZlRnV0dXJlRGF0YTsKLSAgICAgICAgICAgICAgICBH
U1RfREVCVUcoIm1fcmVhZHlTdGF0ZT0lcyIsIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkp
OwotICAgICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6Ok5ldHdvcmtT
dGF0ZTo6TG9hZGluZzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1fZW9zTWFy
a2VkICYmIHN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKQotICAgICAgICAgICAgICAgIG1fZW9z
UGVuZGluZyA9IHRydWU7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIFN5bmMgc3RhdGVzIHdoZXJlIG5lZWRlZC4KLSAgICAgICAg
aWYgKHN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQpIHsKLSAgICAgICAgICAgIGlmICghbV9hcmVW
b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgICAgICAgICBub3RpZnlQbGF5ZXJP
ZlZvbHVtZUNoYW5nZSgpOwotICAgICAgICAgICAgICAgIG5vdGlmeVBsYXllck9mTXV0ZSgpOwot
ICAgICAgICAgICAgICAgIG1fYXJlVm9sdW1lQW5kTXV0ZUluaXRpYWxpemVkID0gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFzZWVraW5nKCkgJiYgIW1faXNQYXVzZWQg
JiYgbV9wbGF5YmFja1JhdGUpIHsKLSAgICAgICAgICAgICAgICBHU1RfREVCVUcoIltCdWZmZXJp
bmddIFJlc3RhcnRpbmcgcGxheWJhY2suIik7Ci0gICAgICAgICAgICAgICAgY2hhbmdlUGlwZWxp
bmVTdGF0ZShHU1RfU1RBVEVfUExBWUlORyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpIHsKLSAgICAgICAgICAgIG1faXNQYXVz
ZWQgPSBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKCFtX3BsYXliYWNrUmF0ZSkgewotICAgICAg
ICAgICAgICAgIEdTVF9ERUJVRygiW0J1ZmZlcmluZ10gUGF1c2luZyBzdHJlYW0gZm9yIGJ1ZmZl
cmluZy4iKTsKLSAgICAgICAgICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9Q
QVVTRUQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1faXNQ
YXVzZWQgPSB0cnVlOwotCi0gICAgICAgIGlmIChtX3JlcXVlc3RlZFN0YXRlID09IEdTVF9TVEFU
RV9QQVVTRUQgJiYgc3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkgewotICAgICAgICAgICAgc2hv
dWxkVXBkYXRlUGxheWJhY2tTdGF0ZSA9IHRydWU7Ci0gICAgICAgICAgICBHU1RfREVCVUcoIlJl
cXVlc3RlZCBzdGF0ZSBjaGFuZ2UgdG8gJXMgd2FzIGNvbXBsZXRlZCIsIGdzdF9lbGVtZW50X3N0
YXRlX2dldF9uYW1lKHN0YXRlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBFbWl0IHBsYXkg
c3RhdGUgY2hhbmdlIG5vdGlmaWNhdGlvbiBvbmx5IHdoZW4gZ29pbmcgdG8gUExBWUlORyBzbyB0
aGF0Ci0gICAgICAgIC8vIHRoZSBtZWRpYSBlbGVtZW50IGdldHMgYSBjaGFuY2UgdG8gZW5hYmxl
IGl0cyBwYWdlIHNsZWVwIGRpc2FibGVyLgotICAgICAgICAvLyBFbWl0dGluZyB0aGlzIG5vdGlm
aWNhdGlvbiBpbiBtb3JlIGNhc2VzIHRyaWdnZXJzIHVud2FudGVkIGNvZGUgcGF0aHMKLSAgICAg
ICAgLy8gYW5kIHRlc3QgdGltZW91dHMuCi0gICAgICAgIGlmIChzdGF0ZVJlYWxseUNoYW5nZWQg
JiYgKG1fb2xkU3RhdGUgIT0gbV9jdXJyZW50U3RhdGUpICYmIChtX29sZFN0YXRlID09IEdTVF9T
VEFURV9QQVVTRUQgJiYgbV9jdXJyZW50U3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpKSB7Ci0g
ICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIlBsYXliYWNrIHN0YXRlIGNo
YW5nZWQgZnJvbSAlcyB0byAlcy4gTm90aWZ5aW5nIHRoZSBtZWRpYSBwbGF5ZXIgY2xpZW50Iiwg
Z3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9vbGRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRl
X2dldF9uYW1lKG1fY3VycmVudFN0YXRlKSk7Ci0gICAgICAgICAgICBzaG91bGRVcGRhdGVQbGF5
YmFja1N0YXRlID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfQVNZTkM6Ci0gICAgICAgIEdTVF9ERUJVRygiQXN5bmM6
IFN0YXRlOiAlcywgcGVuZGluZzogJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShzdGF0
ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcpKTsKLSAgICAgICAgLy8gQ2hh
bmdlIGluIHByb2dyZXNzLgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFO
R0VfRkFJTFVSRToKLSAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWx1cmU6IFN0YXRlOiAlcywgcGVu
ZGluZzogJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShzdGF0ZSksIGdzdF9lbGVtZW50
X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcpKTsKLSAgICAgICAgLy8gQ2hhbmdlIGZhaWxlZC4KLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMOgotICAg
ICAgICBHU1RfREVCVUcoIk5vIHByZXJvbGw6IFN0YXRlOiAlcywgcGVuZGluZzogJXMiLCBnc3Rf
ZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShzdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1l
KHBlbmRpbmcpKTsKLQotICAgICAgICAvLyBMaXZlIHBpcGVsaW5lcyBnbyBpbiBQQVVTRUQgd2l0
aG91dCBwcmVyb2xsaW5nLgotICAgICAgICBtX2lzTGl2ZVN0cmVhbSA9IHRydWU7Ci0KLSAgICAg
ICAgaWYgKHN0YXRlID09IEdTVF9TVEFURV9SRUFEWSkgewotICAgICAgICAgICAgbV9yZWFkeVN0
YXRlID0gTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGU6OkhhdmVOb3RoaW5nOwotICAgICAgICAgICAg
R1NUX0RFQlVHKCJtX3JlYWR5U3RhdGU9JXMiLCBkdW1wUmVhZHlTdGF0ZShtX3JlYWR5U3RhdGUp
KTsKLSAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7Ci0gICAg
ICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZTo6SGF2ZUVub3Vn
aERhdGE7Ci0gICAgICAgICAgICBHU1RfREVCVUcoIm1fcmVhZHlTdGF0ZT0lcyIsIGR1bXBSZWFk
eVN0YXRlKG1fcmVhZHlTdGF0ZSkpOwotICAgICAgICAgICAgbV9pc1BhdXNlZCA9IHRydWU7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpCi0gICAgICAgICAg
ICBtX2lzUGF1c2VkID0gZmFsc2U7Ci0KLSAgICAgICAgaWYgKCFtX2lzUGF1c2VkICYmIG1fcGxh
eWJhY2tSYXRlKQotICAgICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUExB
WUlORyk7Ci0KLSAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TmV0d29ya1N0
YXRlOjpMb2FkaW5nOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBHU1Rf
REVCVUcoIkVsc2UgOiAlZCIsIGdldFN0YXRlUmVzdWx0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgbV9yZXF1ZXN0ZWRTdGF0ZSA9IEdTVF9TVEFURV9WT0lEX1BFTkRJTkc7Ci0KLSAg
ICBpZiAoc2hvdWxkVXBkYXRlUGxheWJhY2tTdGF0ZSkKLSAgICAgICAgbV9wbGF5ZXItPnBsYXli
YWNrU3RhdGVDaGFuZ2VkKCk7Ci0KLSAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gb2xkTmV0d29y
a1N0YXRlKSB7Ci0gICAgICAgIEdTVF9ERUJVRygiTmV0d29yayBTdGF0ZSBDaGFuZ2VkIGZyb20g
JXUgdG8gJXUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob2xkTmV0d29ya1N0YXRlKSwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG1fbmV0d29ya1N0YXRlKSk7Ci0gICAgICAgIG1fcGxheWVyLT5uZXR3
b3JrU3RhdGVDaGFuZ2VkKCk7Ci0gICAgfQotICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gb2xkUmVh
ZHlTdGF0ZSkgewotICAgICAgICBHU1RfREVCVUcoIlJlYWR5IFN0YXRlIENoYW5nZWQgZnJvbSAl
dSB0byAldSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihvbGRSZWFkeVN0YXRlKSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG1fcmVhZHlTdGF0ZSkpOwotICAgICAgICBtX3BsYXllci0+cmVhZHlTdGF0
ZUNoYW5nZWQoKTsKLSAgICB9Ci0KLSAgICBpZiAoZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRF
X0NIQU5HRV9TVUNDRVNTICYmIHN0YXRlID49IEdTVF9TVEFURV9QQVVTRUQpIHsKLSAgICAgICAg
dXBkYXRlUGxheWJhY2tSYXRlKCk7Ci0gICAgICAgIG1heWJlRmluaXNoU2VlaygpOworICAgIGJv
b2wgc2hvdWxkQmVQbGF5aW5nID0gIW1faXNQYXVzZWQgJiYgcmVhZHlTdGF0ZSgpID49IE1lZGlh
UGxheWVyOjpSZWFkeVN0YXRlOjpIYXZlRnV0dXJlRGF0YTsKKyAgICBHU1RfREVCVUdfT0JKRUNU
KHBpcGVsaW5lKCksICJzaG91bGRCZVBsYXlpbmcgPSAlZCwgbV9pc1BpcGVsaW5lUGxheWluZyA9
ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzaG91bGRCZVBsYXlpbmcpLCBzdGF0aWNfY2FzdDxpbnQ+
KG1faXNQaXBlbGluZVBsYXlpbmcpKTsKKyAgICBpZiAoc2hvdWxkQmVQbGF5aW5nICYmICFtX2lz
UGlwZWxpbmVQbGF5aW5nKSB7CisgICAgICAgIGlmICghY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1Rf
U1RBVEVfUExBWUlORykpCisgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHBpcGVsaW5lKCks
ICJTZXR0aW5nIHRoZSBwaXBlbGluZSB0byBQTEFZSU5HIGZhaWxlZCIpOworICAgICAgICBtX2lz
UGlwZWxpbmVQbGF5aW5nID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKCFzaG91bGRCZVBsYXlpbmcg
JiYgbV9pc1BpcGVsaW5lUGxheWluZykgeworICAgICAgICBpZiAoIWNoYW5nZVBpcGVsaW5lU3Rh
dGUoR1NUX1NUQVRFX1BBVVNFRCkpCisgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHBpcGVs
aW5lKCksICJTZXR0aW5nIHRoZSBwaXBlbGluZSB0byBQQVVTRUQgZmFpbGVkIik7CisgICAgICAg
IG1faXNQaXBlbGluZVBsYXlpbmcgPSBmYWxzZTsKICAgICB9CiB9Ci12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6YXN5bmNTdGF0ZUNoYW5nZURvbmUoKQotewotICAgIGlmIChV
TkxJS0VMWSghbV9waXBlbGluZSB8fCBtX2RpZEVycm9yT2NjdXIpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pc1NlZWtpbmcpCi0gICAgICAgIG1heWJlRmluaXNoU2VlaygpOwotICAg
IGVsc2UKLSAgICAgICAgdXBkYXRlU3RhdGVzKCk7Ci19CiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFOjppc1RpbWVCdWZmZXJlZChjb25zdCBNZWRpYVRpbWUgJnRpbWUpIGNv
bnN0CiB7CkBAIC02OTAsNyArMzA1LDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJNU0U6OnVuYmxvY2tEdXJhdGlvbkNoYW5nZXMoKQogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CiAgICAgaWYgKG1fc2hvdWxkUmVwb3J0RHVyYXRpb25XaGVuVW5ibG9ja2luZykgewogICAg
ICAgICBtX3BsYXllci0+ZHVyYXRpb25DaGFuZ2VkKCk7Ci0gICAgICAgIG1fcGxheWJhY2tQaXBl
bGluZS0+bm90aWZ5RHVyYXRpb25DaGFuZ2VkKCk7CiAgICAgICAgIG1fc2hvdWxkUmVwb3J0RHVy
YXRpb25XaGVuVW5ibG9ja2luZyA9IGZhbHNlOwogICAgIH0KIApAQCAtNzA5LDM5ICszMjMsMzkg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmR1cmF0aW9uQ2hhbmdlZCgp
CiAgICAgLy8gQXZvaWQgZW1pdGluZyBkdXJhdGlvbmNoYW5nZWQgaW4gdGhlIGNhc2Ugd2hlcmUg
dGhlIHByZXZpb3VzIGR1cmF0aW9uIHdhcyAwIGJlY2F1c2UgdGhhdCBjYXNlIGlzIGFscmVhZHkg
aGFuZGxlZAogICAgIC8vIGJ5IHRoZSBIVE1MTWVkaWFFbGVtZW50LgogICAgIGlmIChtX21lZGlh
VGltZUR1cmF0aW9uICE9IHByZXZpb3VzRHVyYXRpb24gJiYgbV9tZWRpYVRpbWVEdXJhdGlvbi5p
c1ZhbGlkKCkgJiYgcHJldmlvdXNEdXJhdGlvbi5pc1ZhbGlkKCkpIHsKLSAgICAgICAgaWYgKCFt
X2FyZUR1cmF0aW9uQ2hhbmdlc0Jsb2NrZWQpIHsKKyAgICAgICAgaWYgKCFtX2FyZUR1cmF0aW9u
Q2hhbmdlc0Jsb2NrZWQpCiAgICAgICAgICAgICBtX3BsYXllci0+ZHVyYXRpb25DaGFuZ2VkKCk7
Ci0gICAgICAgICAgICBtX3BsYXliYWNrUGlwZWxpbmUtPm5vdGlmeUR1cmF0aW9uQ2hhbmdlZCgp
OwotICAgICAgICB9IGVsc2UKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9zaG91bGRSZXBv
cnREdXJhdGlvbldoZW5VbmJsb2NraW5nID0gdHJ1ZTsKICAgICB9CiB9CiAKLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp0cmFja0RldGVjdGVkKEFwcGVuZFBpcGVsaW5lJiBh
cHBlbmRQaXBlbGluZSwgUmVmUHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2U+IG5ld1RyYWNr
LCBib29sIGZpcnN0VHJhY2tEZXRlY3RlZCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyTVNFOjp0cmFja0RldGVjdGVkKEFwcGVuZFBpcGVsaW5lJiBhcHBlbmRQaXBlbGluZSwgUmVm
UHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2U+IG5ld1RyYWNrKQogewogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKGFwcGVuZFBpcGVsaW5lLnRyYWNrKCkgPT0gbmV3
VHJhY2spOwogCi0gICAgR3N0Q2FwcyogY2FwcyA9IGFwcGVuZFBpcGVsaW5lLmFwcHNpbmtDYXBz
KCk7CisgICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gYXBwZW5kUGlwZWxpbmUuYXBwc2lua0Nh
cHMoKTsKICAgICBBU1NFUlQoY2Fwcyk7Ci0gICAgR1NUX0RFQlVHKCJEZW11eGVyIHBhcnNlZCBt
ZXRhZGF0YSB3aXRoIHRyYWNrIElEOiAlcywgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIG5ld1Ry
YWNrLT5pZCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSwgY2Fwcyk7CisgICAgR1NUX0RFQlVH
KCJEZW11eGVyIHBhcnNlZCBtZXRhZGF0YSB3aXRoIHRyYWNrIElEOiAlcywgY2FwczogJSIgR1NU
X1BUUl9GT1JNQVQsIG5ld1RyYWNrLT5pZCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSwgY2Fw
cy5nZXQoKSk7CiAKICAgICAvLyBXZSBzZXQgdGhlIHNpemUgb2YgdGhlIHZpZGVvIG9ubHkgZm9y
IHRoZSBmaXJzdCBpbml0aWFsaXphdGlvbiBzZWdtZW50LgogICAgIC8vIFRoaXMgaXMgaW50ZW50
aW9uYWw6IE5vcm1hbGx5IHRoZSB2aWRlbyBzaXplIGRlcGVuZHMgb24gdGhlIGZyYW1lcyBhcnJp
dmluZwogICAgIC8vIGF0IHRoZSBzaW5rIGluIHRoZSBwbGF5YmFjayBwaXBlbGluZSwgbm90IGlu
IHRoZSBhcHBlbmQgcGlwZWxpbmU7IGJ1dCB3ZSBzdGlsbAogICAgIC8vIHdhbnQgdG8gcmVwb3J0
IGFuIGluaXRpYWwgc2l6ZSBmb3IgSEFWRV9NRVRBREFUQSAoZmlyc3QgaW5pdGlhbGl6YXRpb24g
c2VnbWVudCkuCi0gICAgaWYgKG1fdmlkZW9TaXplLmlzRW1wdHkoKSAmJiBkb0NhcHNIYXZlVHlw
ZShjYXBzLCBHU1RfVklERU9fQ0FQU19UWVBFX1BSRUZJWCkpIHsKLSAgICAgICAgT3B0aW9uYWw8
RmxvYXRTaXplPiBzaXplID0gZ2V0VmlkZW9SZXNvbHV0aW9uRnJvbUNhcHMoY2Fwcyk7CisgICAg
aWYgKG1fdmlkZW9TaXplLmlzRW1wdHkoKSAmJiBkb0NhcHNIYXZlVHlwZShjYXBzLmdldCgpLCBH
U1RfVklERU9fQ0FQU19UWVBFX1BSRUZJWCkpIHsKKyAgICAgICAgT3B0aW9uYWw8RmxvYXRTaXpl
PiBzaXplID0gZ2V0VmlkZW9SZXNvbHV0aW9uRnJvbUNhcHMoY2Fwcy5nZXQoKSk7CiAgICAgICAg
IGlmIChzaXplLmhhc1ZhbHVlKCkpIHsKICAgICAgICAgICAgIG1fdmlkZW9TaXplID0gc2l6ZS52
YWx1ZSgpOwogICAgICAgICAgICAgR1NUX0RFQlVHKCJTZXR0aW5nIGluaXRpYWwgdmlkZW8gc2l6
ZTogJWd4JWciLCBtX3ZpZGVvU2l6ZS53aWR0aCgpLCBtX3ZpZGVvU2l6ZS5oZWlnaHQoKSk7CiAg
ICAgICAgIH0KICAgICB9Cit9CiAKLSAgICBpZiAoZmlyc3RUcmFja0RldGVjdGVkKQotICAgICAg
ICBtX3BsYXliYWNrUGlwZWxpbmUtPmF0dGFjaFRyYWNrKG1ha2VSZWYoYXBwZW5kUGlwZWxpbmUu
c291cmNlQnVmZmVyUHJpdmF0ZSgpKSwgbmV3VHJhY2ssIGNhcHMpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9wbGF5YmFja1BpcGVsaW5lLT5yZWF0dGFjaFRyYWNrKG1ha2VSZWYoYXBwZW5kUGlwZWxp
bmUuc291cmNlQnVmZmVyUHJpdmF0ZSgpKSwgbmV3VHJhY2ssIGNhcHMpOwordm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnN0YXJ0U291cmNlKGNvbnN0IFZlY3RvcjxSZWZQdHI8
TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcj4+JiB0cmFja3MpCit7CisgICAgbV90cmFja3MgPSB0
cmFja3M7CisgICAgd2ViS2l0TWVkaWFTcmNFbWl0U3RyZWFtcyhXRUJLSVRfTUVESUFfU1JDKG1f
c291cmNlLmdldCgpKSwgdHJhY2tzKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0U6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNl
bnNpdGl2ZUhhc2g+JiB0eXBlcykKQEAgLTc3MywzNCArMzg3LDYgQEAgTWVkaWFQbGF5ZXI6OlN1
cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnN1cHBvcnRzVHlwZShj
b25zdCBNZWQKICAgICByZXR1cm4gZmluYWxSZXN1bHQ7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjptYXJrRW5kT2ZTdHJlYW0oTWVkaWFTb3VyY2VQcml2YXRlOjpF
bmRPZlN0cmVhbVN0YXR1cyBzdGF0dXMpCi17Ci0gICAgaWYgKHN0YXR1cyAhPSBNZWRpYVNvdXJj
ZVByaXZhdGU6OkVvc05vRXJyb3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdTVF9ERUJVRygi
TWFya2luZyBlbmQgb2Ygc3RyZWFtIik7Ci0gICAgbV9lb3NNYXJrZWQgPSB0cnVlOwotICAgIHVw
ZGF0ZVN0YXRlcygpOwotfQotCi1NZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
TVNFOjpjdXJyZW50TWVkaWFUaW1lKCkgY29uc3QKLXsKLSAgICBNZWRpYVRpbWUgcG9zaXRpb24g
PSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmN1cnJlbnRNZWRpYVRpbWUoKTsKLQotICAg
IGlmIChtX2Vvc1BlbmRpbmcgJiYgcG9zaXRpb24gPj0gZHVyYXRpb25NZWRpYVRpbWUoKSkgewot
ICAgICAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZTo6
TG9hZGVkKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpOZXR3
b3JrU3RhdGU6OkxvYWRlZDsKLSAgICAgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFu
Z2VkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtX2Vvc1BlbmRpbmcgPSBmYWxzZTsKLSAgICAg
ICAgbV9pc0VuZFJlYWNoZWQgPSB0cnVlOwotICAgICAgICBtX2NhY2hlZFBvc2l0aW9uID0gbV9t
ZWRpYVRpbWVEdXJhdGlvbjsKLSAgICAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7Ci0gICAg
fQotICAgIHJldHVybiBwb3NpdGlvbjsKLX0KLQogTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6bWF4TWVkaWFUaW1lU2Vla2FibGUoKSBjb25zdAogewogICAgIGlmIChV
TkxJS0VMWShtX2RpZEVycm9yT2NjdXIpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJN
U0UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmgKaW5kZXggYzQ0YWM2ZTQwNmMyMzE5ZTZkNWVi
YzZhZmY1Mjk1Yjc2M2FkOWExZi4uNWYyMmE1MWU5NWZhMmRhNDRlMzIwOGFiYjY2ZGMzZmVlZDRk
N2U2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRS5oCkBAIC0zMCwxMiArMzAsMTQgQEAKICNpbmNsdWRlICJNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJNZWRpYVNhbXBsZS5oIgogI2luY2x1ZGUgIk1l
ZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lci5oIgotI2luY2x1ZGUgIldlYktpdE1lZGlhU291cmNl
R1N0cmVhbWVyLmgiCisKK3N0cnVjdCBXZWJLaXRNZWRpYVNyYzsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBBcHBlbmRQaXBlbGluZTsKLWNsYXNzIFBsYXliYWNrUGlwZWxpbmU7Citj
bGFzcyBUcmFja1F1ZXVlOworY2xhc3MgTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcjsKIAogY2xh
c3MgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFIDogcHVibGljIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC01MSwxMyArNTMs
MTIgQEAgcHVibGljOgogCiAgICAgdm9pZCB1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWcoKSBv
dmVycmlkZSB7IH07CiAKLSAgICBNZWRpYVRpbWUgY3VycmVudE1lZGlhVGltZSgpIGNvbnN0IG92
ZXJyaWRlOwotCisgICAgdm9pZCBwbGF5KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBwYXVzZSgpIG92
ZXJyaWRlOwotICAgIGJvb2wgc2Vla2luZygpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgc2Vl
ayhjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbmZpZ3VyZVBsYXlTaW5r
KCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjaGFuZ2VQaXBlbGluZVN0YXRlKEdzdFN0YXRlKSBvdmVy
cmlkZTsKKyAgICBib29sIGRvU2Vlayhjb25zdCBNZWRpYVRpbWUmLCBmbG9hdCByYXRlLCBHc3RT
ZWVrRmxhZ3MpIG92ZXJyaWRlOworCisgICAgdm9pZCB1cGRhdGVQaXBlbGluZVN0YXRlKEdzdFN0
YXRlKTsKIAogICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCkgb3ZlcnJpZGU7CiAgICAgTWVkaWFU
aW1lIGR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC02OCwxOSArNjksMTgg
QEAgcHVibGljOgogICAgIHZvaWQgc291cmNlU2V0dXAoR3N0RWxlbWVudCopIG92ZXJyaWRlOwog
CiAgICAgdm9pZCBzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlKTsKLSAgICB2
b2lkIHdhaXRGb3JTZWVrQ29tcGxldGVkKCk7Ci0gICAgdm9pZCBzZWVrQ29tcGxldGVkKCk7CiAg
ICAgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50KiBtZWRpYVNvdXJjZVByaXZhdGVDbGllbnQoKSB7
IHJldHVybiBtX21lZGlhU291cmNlLmdldCgpOyB9CiAKLSAgICB2b2lkIG1hcmtFbmRPZlN0cmVh
bShNZWRpYVNvdXJjZVByaXZhdGU6OkVuZE9mU3RyZWFtU3RhdHVzKTsKLQotICAgIHZvaWQgdHJh
Y2tEZXRlY3RlZChBcHBlbmRQaXBlbGluZSYsIFJlZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVC
YXNlPiwgYm9vbCBmaXJzdFRyYWNrRGV0ZWN0ZWQpOwotICAgIHZvaWQgbm90aWZ5U2Vla05lZWRz
RGF0YUZvclRpbWUoY29uc3QgTWVkaWFUaW1lJik7CisgICAgdm9pZCB0cmFja0RldGVjdGVkKEFw
cGVuZFBpcGVsaW5lJiwgUmVmUHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2U+KTsKIAogICAg
IHZvaWQgYmxvY2tEdXJhdGlvbkNoYW5nZXMoKTsKICAgICB2b2lkIHVuYmxvY2tEdXJhdGlvbkNo
YW5nZXMoKTsKIAotICAgIFBsYXliYWNrUGlwZWxpbmUqIHBsYXliYWNrUGlwZWxpbmUoKSBjb25z
dCB7IHJldHVybiBtX3BsYXliYWNrUGlwZWxpbmUuZ2V0KCk7IH0KKyAgICB2b2lkIGFzeW5jU3Rh
dGVDaGFuZ2VEb25lKCkgb3ZlcnJpZGU7CisKKyAgICBib29sIGhhc0FsbFRyYWNrcygpIGNvbnN0
IHsgcmV0dXJuIG1faGFzQWxsVHJhY2tzOyB9CisgICAgdm9pZCBzdGFydFNvdXJjZShjb25zdCBW
ZWN0b3I8UmVmUHRyPE1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXI+PiYgdHJhY2tzKTsKKyAgICBX
ZWJLaXRNZWRpYVNyYyogd2ViS2l0TWVkaWFTcmMoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0
PFdlYktpdE1lZGlhU3JjKj4obV9zb3VyY2UuZ2V0KCkpOyB9CiAKICNpZiAhUkVMRUFTRV9MT0df
RElTQUJMRUQKICAgICBXVEZMb2dDaGFubmVsJiBsb2dDaGFubmVsKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gV2ViQ29yZTo6TG9nTWVkaWFTb3VyY2U7IH0KQEAgLTkxLDI5ICs5MSwyNiBAQCBwcml2
YXRlOgogICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nLCBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+Jik7CiAgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBw
b3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMm
KTsKIAotICAgIC8vIEZJWE1FOiBSZWR1Y2UgY29kZSBkdXBsaWNhdGlvbi4KICAgICB2b2lkIHVw
ZGF0ZVN0YXRlcygpIG92ZXJyaWRlOwogCi0gICAgYm9vbCBkb1NlZWsoY29uc3QgTWVkaWFUaW1l
JiwgZmxvYXQsIEdzdFNlZWtGbGFncykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtYXliZUZpbmlzaFNl
ZWsoKTsKLQotICAgIHZvaWQgYXN5bmNTdGF0ZUNoYW5nZURvbmUoKSBvdmVycmlkZTsKLQogICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdmlkZW9QbGF5YmFja1F1YWxpdHlNZXRyaWNzLgogICAgIGJv
b2wgaXNUaW1lQnVmZmVyZWQoY29uc3QgTWVkaWFUaW1lJikgY29uc3Q7CiAKICAgICBib29sIGlz
TWVkaWFTb3VyY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBib29s
IG1fZW9zTWFya2VkID0gZmFsc2U7Ci0gICAgbXV0YWJsZSBib29sIG1fZW9zUGVuZGluZyA9IGZh
bHNlOwotICAgIGJvb2wgbV9nc3RTZWVrQ29tcGxldGVkID0gdHJ1ZTsKKyAgICB2b2lkIHByb3Bh
Z2F0ZVJlYWR5U3RhdGVUb1BsYXllcigpOworCiAgICAgUmVmUHRyPE1lZGlhU291cmNlUHJpdmF0
ZUNsaWVudD4gbV9tZWRpYVNvdXJjZTsKICAgICBSZWZQdHI8TWVkaWFTb3VyY2VQcml2YXRlR1N0
cmVhbWVyPiBtX21lZGlhU291cmNlUHJpdmF0ZTsKICAgICBNZWRpYVRpbWUgbV9tZWRpYVRpbWVE
dXJhdGlvbjsKLSAgICBib29sIG1fbXNlU2Vla0NvbXBsZXRlZCA9IHRydWU7CiAgICAgYm9vbCBt
X2FyZUR1cmF0aW9uQ2hhbmdlc0Jsb2NrZWQgPSBmYWxzZTsKICAgICBib29sIG1fc2hvdWxkUmVw
b3J0RHVyYXRpb25XaGVuVW5ibG9ja2luZyA9IGZhbHNlOwotICAgIFJlZlB0cjxQbGF5YmFja1Bp
cGVsaW5lPiBtX3BsYXliYWNrUGlwZWxpbmU7CisgICAgYm9vbCBtX2lzUGlwZWxpbmVQbGF5aW5n
ID0gdHJ1ZTsKKyAgICBib29sIG1faGFzQWxsVHJhY2tzID0gZmFsc2U7CisgICAgVmVjdG9yPFJl
ZlB0cjxNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyPj4gbV90cmFja3M7CisKKyAgICBib29sIG1f
aXNXYWl0aW5nRm9yUHJlcm9sbCA9IHRydWU7CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUg
bV9tZWRpYVNvdXJjZVJlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZTo6SGF2ZU5v
dGhpbmc7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlUHJpdmF0
ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvbXNlL01lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggZjg5MGI3MTNhMzBh
YTg4MWM2YWZkMGVlNTNlMDMxZTY0ZjM0OGJjMS4uMGMwN2VmYmM0YTk1N2Q4OGVlMjhkNDIzNWU4
NWJjZjg0MDJlMmJiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VQ
cml2YXRlR1N0cmVhbWVyLmNwcApAQCAtNDEsOCArNDEsOCBAQAogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaCIKKyNpbmNsdWRlICJNZWRpYVNvdXJjZVRy
YWNrR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQ
bGF5YmFja1BpcGVsaW5lLmgiCiAjaW5jbHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1l
ci5oIgogI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKICNpbmNsdWRlICJXZWJLaXRNZWRpYVNvdXJj
ZUdTdHJlYW1lci5oIgpAQCAtNzksMTAgKzc5LDE1IEBAIE1lZGlhU291cmNlUHJpdmF0ZUdTdHJl
YW1lcjo6fk1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lcigpCiBNZWRpYVNvdXJjZVByaXZhdGVH
U3RyZWFtZXI6OkFkZFN0YXR1cyBNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXI6OmFkZFNvdXJj
ZUJ1ZmZlcihjb25zdCBDb250ZW50VHlwZSYgY29udGVudFR5cGUsIGJvb2wsIFJlZlB0cjxTb3Vy
Y2VCdWZmZXJQcml2YXRlPiYgc291cmNlQnVmZmVyUHJpdmF0ZSkKIHsKICAgICBERUJVR19MT0co
TE9HSURFTlRJRklFUiwgY29udGVudFR5cGUpOworCisgICAgLy8gT25jZSBldmVyeSBTb3VyY2VC
dWZmZXIgaGFzIGhhZCBhbiBpbml0aWFsaXphdGlvbiBzZWdtZW50IGFwcGVuZGVkIHBsYXliYWNr
IHN0YXJ0cyBhbmQgaXQncyB0b28gbGF0ZSB0byBhZGQgbmV3IFNvdXJjZUJ1ZmZlcnMuCisgICAg
aWYgKG1fcGxheWVyUHJpdmF0ZS5oYXNBbGxUcmFja3MoKSkKKyAgICAgICAgcmV0dXJuIE1lZGlh
U291cmNlUHJpdmF0ZUdTdHJlYW1lcjo6QWRkU3RhdHVzOjpSZWFjaGVkSWRMaW1pdDsKKwogICAg
IHNvdXJjZUJ1ZmZlclByaXZhdGUgPSBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVh
dGUodGhpcywgY29udGVudFR5cGUsIG1fcGxheWVyUHJpdmF0ZSk7CiAgICAgUmVmUHRyPFNvdXJj
ZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+IHNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIgPSBz
dGF0aWNfY2FzdDxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyKj4oc291cmNlQnVmZmVyUHJp
dmF0ZS5nZXQoKSk7CiAgICAgbV9zb3VyY2VCdWZmZXJzLmFkZChzb3VyY2VCdWZmZXJQcml2YXRl
R1N0cmVhbWVyKTsKLSAgICByZXR1cm4gbV9wbGF5ZXJQcml2YXRlLnBsYXliYWNrUGlwZWxpbmUo
KS0+YWRkU291cmNlQnVmZmVyKHNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIpOworICAgIHJl
dHVybiBNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXI6OkFkZFN0YXR1czo6T2s7CiB9CiAKIHZv
aWQgTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyOjpyZW1vdmVTb3VyY2VCdWZmZXIoU291cmNl
QnVmZmVyUHJpdmF0ZSogc291cmNlQnVmZmVyUHJpdmF0ZSkKQEAgLTEwNywxNiArMTEyLDE1IEBA
IHZvaWQgTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyOjpkdXJhdGlvbkNoYW5nZWQoY29uc3Qg
TWVkaWFUaW1lJikKICAgICBtX3BsYXllclByaXZhdGUuZHVyYXRpb25DaGFuZ2VkKCk7CiB9CiAK
LXZvaWQgTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyOjptYXJrRW5kT2ZTdHJlYW0oRW5kT2ZT
dHJlYW1TdGF0dXMgc3RhdHVzKQordm9pZCBNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXI6Om1h
cmtFbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1cykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotICAgIG1fcGxheWVyUHJpdmF0ZS5tYXJrRW5kT2ZTdHJlYW0oc3RhdHVzKTsKICAg
ICBtX2lzRW5kZWQgPSB0cnVlOwogfQogCiB2b2lkIE1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1l
cjo6dW5tYXJrRW5kT2ZTdHJlYW0oKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBtX2lzRW5kZWQgPSBmYWxzZTsKIH0KIApAQCAtMTMy
LDEyICsxMzYsMTQgQEAgdm9pZCBNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXI6OnNldFJlYWR5
U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgc3RhdGUpCiAKIHZvaWQgTWVkaWFTb3VyY2VQ
cml2YXRlR1N0cmVhbWVyOjp3YWl0Rm9yU2Vla0NvbXBsZXRlZCgpCiB7Ci0gICAgbV9wbGF5ZXJQ
cml2YXRlLndhaXRGb3JTZWVrQ29tcGxldGVkKCk7CiB9CiAKIHZvaWQgTWVkaWFTb3VyY2VQcml2
YXRlR1N0cmVhbWVyOjpzZWVrQ29tcGxldGVkKCkKIHsKLSAgICBtX3BsYXllclByaXZhdGUuc2Vl
a0NvbXBsZXRlZCgpOworICAgIC8vIFRoaXMgY2FsbCBqdXN0IGluZm9ybXMgdXMgdGhhdCB0aGUg
c2VlayBoYXMgYmVlbiBjb21wbGV0ZWQgYXMgZmFyIGFzIE1lZGlhU291cmNlIGlzIGNvbmNlcm5l
ZDogdGhhdCBpcywKKyAgICAvLyB0aGUgc2FtcGxlcyBmb3IgYGN1cnJlbnRUaW1lYCBoYXZlIGJl
ZW4gZmVkLiBUaGlzIGRvZXNuJ3QgbWVhbiB0aGUgc2VlayBpcyBjb21wbGV0ZSBmb3IgdGhlIHBs
YXllciwgYXMKKyAgICAvLyB0aGV5IHN0aWxsIGhhdmUgdG8gYmUgZGVjb2RlZCBhbmQgcHJlcm9s
bCBoYXMgdG8gb2NjdXIgYmVmb3JlIHdlIGxldCB0aGUgInNlZWtlZCIgZXZlbnQgaGFwcGVuLgor
ICAgIC8vIFNlZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmFzeW5jU3RhdGVDaGFu
Z2VEb25lKCkKIH0KIAogTWVkaWFUaW1lIE1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lcjo6ZHVy
YXRpb24oKSBjb25zdApAQCAtMTU4LDYgKzE2NCwyOSBAQCB2b2lkIE1lZGlhU291cmNlUHJpdmF0
ZUdTdHJlYW1lcjo6c291cmNlQnVmZmVyUHJpdmF0ZURpZENoYW5nZUFjdGl2ZVN0YXRlKFNvdXJj
ZQogICAgICAgICBtX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMuYWRkKHNvdXJjZUJ1ZmZlclByaXZhdGUp
OwogfQogCit2b2lkIE1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lcjo6c3RhcnRQbGF5YmFja0lm
SGFzQWxsVHJhY2tzKCkKK3sKKyAgICBpZiAobV9oYXNBbGxUcmFja3MpIHsKKyAgICAgICAgLy8g
QWxyZWFkeSBzdGFydGVkLCBub3RoaW5nIHRvIGRvLgorICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgZm9yIChhdXRvJiBzb3VyY2VCdWZmZXIgOiBtX3NvdXJjZUJ1ZmZlcnMpIHsKKyAgICAg
ICAgaWYgKCFzb3VyY2VCdWZmZXItPmhhc1JlY2VpdmVkSW5pdGlhbGl6YXRpb25TZWdtZW50KCkp
IHsKKyAgICAgICAgICAgIEdTVF9ERUJVRygiTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyKCVw
KSAtIFRoZXJlIGFyZSBzdGlsbCBTb3VyY2VCdWZmZXJzIHdpdGhvdXQgYW4gaW5pdGlhbGl6YXRp
b24gc2VnbWVudCwgbm90IHN0YXJ0aW5nIHNvdXJjZSB5ZXQuIiwgdGhpcyk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBHU1RfREVCVUcoIk1lZGlhU291cmNl
UHJpdmF0ZUdTdHJlYW1lciglcCkgLSBBbGwgU291cmNlQnVmZmVycyBoYXZlIGFuIGluaXRpYWxp
emF0aW9uIHNlZ21lbnQsIHN0YXJ0aW5nIHNvdXJjZS4iLCB0aGlzKTsKKyAgICBtX2hhc0FsbFRy
YWNrcyA9IHRydWU7CisKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU291cmNlVHJhY2tHU3RyZWFt
ZXI+PiB0cmFja3M7CisgICAgZm9yIChhdXRvJiBzb3VyY2VCdWZmZXIgOiBtX3NvdXJjZUJ1ZmZl
cnMpCisgICAgICAgIHRyYWNrcy5hcHBlbmRSYW5nZShzb3VyY2VCdWZmZXItPnRyYWNrcygpLmJl
Z2luKCksIHNvdXJjZUJ1ZmZlci0+dHJhY2tzKCkuZW5kKCkpOworICAgIG1fcGxheWVyUHJpdmF0
ZS5zdGFydFNvdXJjZSh0cmFja3MpOworfQorCiBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1l
UmFuZ2VzPiBNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXI6OmJ1ZmZlcmVkKCkKIHsKICAgICBy
ZXR1cm4gbV9tZWRpYVNvdXJjZS0+YnVmZmVyZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VQcml2YXRlR1N0
cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNl
L01lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IDZlY2IxZDk4MDExMjYxYjBiZjVi
MzVjMzYzMTMyMzhjZTFhZjZiNTYuLjRkMWZjM2JiNDBmNjhjMGQzYjMyZjRlMzdlMDhjZjE1ZTZl
MGE3M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UvTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNvdXJjZVByaXZhdGVHU3Ry
ZWFtZXIuaApAQCAtNDEsOCArNDEsNiBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL0xvZ2dlckhlbHBlci5oPgogCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0TWVkaWFT
cmMgV2ViS2l0TWVkaWFTcmM7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU291cmNl
QnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjsKQEAgLTc2LDYgKzc0LDcgQEAgcHVibGljOgogICAgIE1l
ZGlhVGltZSBjdXJyZW50TWVkaWFUaW1lKCkgY29uc3Q7CiAKICAgICB2b2lkIHNvdXJjZUJ1ZmZl
clByaXZhdGVEaWRDaGFuZ2VBY3RpdmVTdGF0ZShTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVy
KiwgYm9vbCk7CisgICAgdm9pZCBzdGFydFBsYXliYWNrSWZIYXNBbGxUcmFja3MoKTsKIAogICAg
IHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCk7CiAKQEAgLTk2
LDYgKzk1LDcgQEAgcHJpdmF0ZToKICAgICBSZWY8TWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50PiBt
X21lZGlhU291cmNlOwogICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSYgbV9wbGF5
ZXJQcml2YXRlOwogICAgIGJvb2wgbV9pc0VuZGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFz
QWxsVHJhY2tzIHsgZmFsc2UgfTsKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKICAgICBSZWY8
Y29uc3QgTG9nZ2VyPiBtX2xvZ2dlcjsKICAgICBjb25zdCB2b2lkKiBtX2xvZ0lkZW50aWZpZXI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
bXNlL01lZGlhU291cmNlVHJhY2tHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iNGM1ZTY3MjY2YmVmMjZhMTdiOWNjNWVjOWFiMmJhMGUzMzg4MGYzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L21zZS9NZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDk3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwLCAyMDIxIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAsIDIwMjEgSWdhbGlhLCBTLkwKKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lci5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NP
VVJDRSkgJiYgVVNFKEdTVFJFQU1FUikKKworR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJr
aXRfbXNlX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9tc2VfZGVidWcK
KwordXNpbmcgV1RGOjpEYXRhTXV0ZXg7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTWVkaWFT
b3VyY2VUcmFja0dTdHJlYW1lcjo6TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcihUcmFja1ByaXZh
dGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGUgdHlwZSwgQXRvbVN0cmluZyB0cmFja0lkLCBHUmVm
UHRyPEdzdENhcHM+JiYgaW5pdGlhbENhcHMpCisgICAgOiBtX3R5cGUodHlwZSkKKyAgICAsIG1f
dHJhY2tJZCh0cmFja0lkKQorICAgICwgbV9pbml0aWFsQ2FwcyhXVEZNb3ZlKGluaXRpYWxDYXBz
KSkKKyAgICAsIG1fcXVldWVEYXRhTXV0ZXgodHJhY2tJZCkKK3sgfQorCitNZWRpYVNvdXJjZVRy
YWNrR1N0cmVhbWVyOjp+TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcigpCit7CisgICAgQVNTRVJU
KG1faXNSZW1vdmVkKTsKK30KKworUmVmPE1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXI+IE1lZGlh
U291cmNlVHJhY2tHU3RyZWFtZXI6OmNyZWF0ZShUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpU
cmFja1R5cGUgdHlwZSwgQXRvbVN0cmluZyB0cmFja0lkLCBHUmVmUHRyPEdzdENhcHM+JiYgaW5p
dGlhbENhcHMpCit7CisgICAgcmV0dXJuIG1ha2VSZWYoKm5ldyBNZWRpYVNvdXJjZVRyYWNrR1N0
cmVhbWVyKHR5cGUsIHRyYWNrSWQsIFdURk1vdmUoaW5pdGlhbENhcHMpKSk7Cit9CisKK2Jvb2wg
TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcjo6aXNSZWFkeUZvck1vcmVTYW1wbGVzKCkKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIFdURjo6RGF0YU11dGV4PFRyYWNrUXVldWU+
OjpMb2NrZWRXcmFwcGVyIHF1ZXVlKG1fcXVldWVEYXRhTXV0ZXgpOworICAgIHJldHVybiAhcXVl
dWUtPmlzRnVsbCgpOworfQorCit2b2lkIE1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXI6Om5vdGlm
eVdoZW5SZWFkeUZvck1vcmVTYW1wbGVzKFRyYWNrUXVldWU6Okxvd0xldmVsSGFuZGxlciYmIGhh
bmRsZXIpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBXVEY6OkRhdGFNdXRl
eDxUcmFja1F1ZXVlPjo6TG9ja2VkV3JhcHBlciBxdWV1ZShtX3F1ZXVlRGF0YU11dGV4KTsKKyAg
ICBxdWV1ZS0+bm90aWZ5V2hlbkxvd0xldmVsKFdURk1vdmUoaGFuZGxlcikpOworfQorCit2b2lk
IE1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXI6OmVucXVldWVPYmplY3QoR1JlZlB0cjxHc3RNaW5p
T2JqZWN0PiYmIG9iamVjdCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIFdU
Rjo6RGF0YU11dGV4PFRyYWNrUXVldWU+OjpMb2NrZWRXcmFwcGVyIHF1ZXVlKG1fcXVldWVEYXRh
TXV0ZXgpOworICAgIHF1ZXVlLT5lbnF1ZXVlT2JqZWN0KFdURk1vdmUob2JqZWN0KSk7Cit9CisK
K3ZvaWQgTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcjo6Y2xlYXJRdWV1ZSgpCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBXVEY6OkRhdGFNdXRleDxUcmFja1F1ZXVlPjo6TG9j
a2VkV3JhcHBlciBxdWV1ZShtX3F1ZXVlRGF0YU11dGV4KTsKKyAgICBxdWV1ZS0+Y2xlYXIoKTsK
K30KKwordm9pZCBNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyOjpyZW1vdmUoKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgbV9pc1JlbW92ZWQgPSB0cnVlOworfQorCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL21zZS9NZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlVHJhY2tHU3RyZWFtZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40OWNhZTU5ZmI4YWQ2MzgxNzk1MTA2ZWVhMDNjMjMyYWQ0Y2ZjYjk1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9NZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw4MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMSBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICog
Q29weXJpZ2h0IChDKSAyMDIwLCAyMDIxIElnYWxpYSwgUy5MCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoTUVESUFfU09VUkNFKSAmJiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSAiVHJhY2tQcml2
YXRlQmFzZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlRyYWNrUXVldWUuaCIKKyNpbmNsdWRlIDx3
dGYvRGF0YU11dGV4Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFTb3Vy
Y2VUcmFja0dTdHJlYW1lciBmaW5hbDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1lZGlh
U291cmNlVHJhY2tHU3RyZWFtZXI+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE1lZGlhU291
cmNlVHJhY2tHU3RyZWFtZXI+IGNyZWF0ZShUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFj
a1R5cGUsIEF0b21TdHJpbmcgdHJhY2tJZCwgR1JlZlB0cjxHc3RDYXBzPiYmIGluaXRpYWxDYXBz
KTsKKyAgICB+TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcigpOworCisgICAgVHJhY2tQcml2YXRl
QmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0K
KyAgICBBdG9tU3RyaW5nIHRyYWNrSWQoKSBjb25zdCB7IHJldHVybiBtX3RyYWNrSWQ7IH0KKyAg
ICBHUmVmUHRyPEdzdENhcHM+JiBpbml0aWFsQ2FwcygpIHsgcmV0dXJuIG1faW5pdGlhbENhcHM7
IH0KKyAgICBXVEY6OkRhdGFNdXRleDxUcmFja1F1ZXVlPiYgcXVldWVEYXRhTXV0ZXgoKSB7IHJl
dHVybiBtX3F1ZXVlRGF0YU11dGV4OyB9CisKKyAgICBib29sIGlzUmVhZHlGb3JNb3JlU2FtcGxl
cygpOworCisgICAgdm9pZCBub3RpZnlXaGVuUmVhZHlGb3JNb3JlU2FtcGxlcyhUcmFja1F1ZXVl
OjpMb3dMZXZlbEhhbmRsZXImJik7CisKKyAgICB2b2lkIGVucXVldWVPYmplY3QoR1JlZlB0cjxH
c3RNaW5pT2JqZWN0PiYmKTsKKworICAgIC8vIFRoaXMgbWV0aG9kIGlzIHByb3ZpZGVkIHRvIGNs
ZWFyIHRoZSBUcmFja1F1ZXVlIGluIGNhc2VzIHdoZXJlIHRoZSBzdHJlYW0gaGFzbid0IGJlZW4g
c3RhcnRlZCAoZS5nLiBiZWNhdXNlCisgICAgLy8gYW5vdGhlciBTb3VyY2VCdWZmZXIgaGFzbid0
IHJlY2VpdmVkIHRoZSBuZWNlc3NhcnkgaW5pdGFsaXphdGlvbiBzZWdtZW50IGZvciBwbGF5YmFj
aykuCisgICAgLy8gT3RoZXJ3aXNlLCB3ZWJLaXRNZWRpYVNyY0ZsdXNoKCkgc2hvdWxkIGJlIHVz
ZWQgaW5zdGVhZCwgd2hpY2ggd2lsbCBhbHNvIGRvIGEgR1N0cmVhbWVyIHBpcGVsaW5lIGZsdXNo
IHdoZXJlCisgICAgLy8gbmVjZXNzYXJ5LgorICAgIHZvaWQgY2xlYXJRdWV1ZSgpOworCisgICAg
dm9pZCByZW1vdmUoKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBNZWRpYVNvdXJjZVRyYWNr
R1N0cmVhbWVyKFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZSwgQXRvbVN0cmlu
ZyB0cmFja0lkLCBHUmVmUHRyPEdzdENhcHM+JiYgaW5pdGlhbENhcHMpOworCisgICAgVHJhY2tQ
cml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlIG1fdHlwZTsKKyAgICBBdG9tU3RyaW5nIG1f
dHJhY2tJZDsKKyAgICBHUmVmUHRyPEdzdENhcHM+IG1faW5pdGlhbENhcHM7CisgICAgV1RGOjpE
YXRhTXV0ZXg8VHJhY2tRdWV1ZT4gbV9xdWV1ZURhdGFNdXRleDsKKworICAgIGJvb2wgbV9pc1Jl
bW92ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1JlYWR5Rm9yTW9yZVNhbXBsZXMgeyB0cnVl
IH07Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1BsYXliYWNrUGlwZWxpbmUuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBiYzkxNTYwNWExNzRiYWQ4NGZiMjRkNTY4
YWViYjBlMjlhYzYwZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1BsYXli
YWNrUGlwZWxpbmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAqIENvcHlyaWdodCAoQykg
MjAxNiBJZ2FsaWEgUy5MCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShH
U1RSRUFNRVIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpCi0KLS8vIFBsYXliYWNrUGlwZWxpbmUg
aXMgKHNvcnQgb2YpIGEgZnJpZW5kIGNsYXNzIG9mIFdlYktpdE1lZGlhU291cmNlR1N0cmVhbWVy
LgotCi0jaW5jbHVkZSAiV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCIKLSNpbmNsdWRlICJX
ZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lclByaXZhdGUuaCIKLQotI2luY2x1ZGUgPGdzdC9nc3Qu
aD4KLSNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0
ci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLXRlbXBsYXRlPD4gR1JlZlB0cjxXZWJLaXRNZWRpYVNy
Yz4gYWRvcHRHUmVmKFdlYktpdE1lZGlhU3JjKik7Ci10ZW1wbGF0ZTw+IFdlYktpdE1lZGlhU3Jj
KiByZWZHUHRyPFdlYktpdE1lZGlhU3JjPihXZWJLaXRNZWRpYVNyYyopOwotdGVtcGxhdGU8PiB2
b2lkIGRlcmVmR1B0cjxXZWJLaXRNZWRpYVNyYz4oV2ViS2l0TWVkaWFTcmMqKTsKLX07Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ29udGVudFR5cGU7Ci1jbGFzcyBTb3VyY2VCdWZm
ZXJQcml2YXRlR1N0cmVhbWVyOwotY2xhc3MgTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyOwot
Ci1jbGFzcyBQbGF5YmFja1BpcGVsaW5lOiBwdWJsaWMgUmVmQ291bnRlZDxQbGF5YmFja1BpcGVs
aW5lPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxQbGF5YmFja1BpcGVsaW5lPiBjcmVhdGUo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGxheWJhY2tQaXBlbGluZSgp
KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5QbGF5YmFja1BpcGVsaW5lKCkgPSBkZWZhdWx0Owot
Ci0gICAgdm9pZCBzZXRXZWJLaXRNZWRpYVNyYyhXZWJLaXRNZWRpYVNyYyopOwotICAgIFdlYktp
dE1lZGlhU3JjKiB3ZWJLaXRNZWRpYVNyYygpOwotCi0gICAgTWVkaWFTb3VyY2VQcml2YXRlOjpB
ZGRTdGF0dXMgYWRkU291cmNlQnVmZmVyKFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVh
bWVyPik7Ci0gICAgdm9pZCByZW1vdmVTb3VyY2VCdWZmZXIoUmVmUHRyPFNvdXJjZUJ1ZmZlclBy
aXZhdGVHU3RyZWFtZXI+KTsKLSAgICB2b2lkIGF0dGFjaFRyYWNrKFJlZlB0cjxTb3VyY2VCdWZm
ZXJQcml2YXRlR1N0cmVhbWVyPiwgUmVmUHRyPFRyYWNrUHJpdmF0ZUJhc2U+LCBHc3RDYXBzKik7
Ci0gICAgdm9pZCByZWF0dGFjaFRyYWNrKFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVh
bWVyPiwgUmVmUHRyPFRyYWNrUHJpdmF0ZUJhc2U+LCBHc3RDYXBzKik7Ci0gICAgdm9pZCBub3Rp
ZnlEdXJhdGlvbkNoYW5nZWQoKTsKLQotICAgIC8vIEZyb20gTWVkaWFTb3VyY2VQcml2YXRlR1N0
cmVhbWVyLgotICAgIHZvaWQgbWFya0VuZE9mU3RyZWFtKE1lZGlhU291cmNlUHJpdmF0ZTo6RW5k
T2ZTdHJlYW1TdGF0dXMpOwotCi0gICAgLy8gRnJvbSBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVh
bWVyLgotICAgIHZvaWQgZmx1c2goQXRvbVN0cmluZyk7Ci0gICAgdm9pZCBlbnF1ZXVlU2FtcGxl
KFJlZjxNZWRpYVNhbXBsZT4mJik7Ci0gICAgdm9pZCBhbGxTYW1wbGVzSW5UcmFja0VucXVldWVk
KGNvbnN0IEF0b21TdHJpbmcmKTsKLQotICAgIEdzdEVsZW1lbnQqIHBpcGVsaW5lKCk7Ci1wcml2
YXRlOgotICAgIFBsYXliYWNrUGlwZWxpbmUoKSA9IGRlZmF1bHQ7Ci0gICAgR1JlZlB0cjxXZWJL
aXRNZWRpYVNyYz4gbV93ZWJLaXRNZWRpYVNyYzsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUuCi0KLSNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0
cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggYjE1ZmM0OTFlNGQ0NDVl
MzgwMTJlYjU2ZGY2OTM2ZTY1NzYyMjJkMi4uNzM0MjQzMjZkNzBmNDZkZjQ5ZjgwZjg0MWVkNDJm
NDdjMGQ0ZDY3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1NvdXJjZUJ1ZmZlclBy
aXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0zOCwxNSArMzgsMjIgQEAKICNpZiBFTkFCTEUoTUVESUFf
U09VUkNFKSAmJiBVU0UoR1NUUkVBTUVSKQogCiAjaW5jbHVkZSAiQXBwZW5kUGlwZWxpbmUuaCIK
KyNpbmNsdWRlICJBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgogI2luY2x1ZGUgIkNvbnRl
bnRUeXBlLmgiCiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjaW5jbHVkZSAiSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGVHU3Ry
ZWFtZXIuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaCIKICNp
bmNsdWRlICJNZWRpYVNhbXBsZS5oIgogI2luY2x1ZGUgIk1lZGlhU291cmNlUHJpdmF0ZUdTdHJl
YW1lci5oIgorI2luY2x1ZGUgIk1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXIuaCIKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXliYWNrUGlwZWxpbmUuaCIKKyNpbmNs
dWRlICJWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgogI2luY2x1ZGUgIldlYktpdE1lZGlh
U291cmNlR1N0cmVhbWVyLmgiCiAKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X21z
ZV9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfbXNlX2RlYnVnCisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogUmVmPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+IFNv
dXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShNZWRpYVNvdXJjZVByaXZhdGVHU3Ry
ZWFtZXIqIG1lZGlhU291cmNlLCBjb25zdCBDb250ZW50VHlwZSYgY29udGVudFR5cGUsIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSYgcGxheWVyUHJpdmF0ZSkKQEAgLTEwNSwxMCArMTEy
LDEwIEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVtb3ZlZEZyb21NZWRp
YVNvdXJjZSgpCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBjbGVhclRyYWNrQnVm
ZmVycygpOwogICAgIG1fbWVkaWFTb3VyY2UtPnJlbW92ZVNvdXJjZUJ1ZmZlcih0aGlzKTsKLSAg
ICBtX3BsYXllclByaXZhdGUucGxheWJhY2tQaXBlbGluZSgpLT5yZW1vdmVTb3VyY2VCdWZmZXIo
dGhpcyk7Ci0gICAgLy8gQWZ0ZXIgdGhpcyBvbmx5IFNvdXJjZUJ1ZmZlciBzaG91bGQgaG9sZCBh
IHJlZmVyZW5jZSB0byB1cywgd2hpY2ggd2lsbCBiZSBkZXN0cm95ZWQgZXZlbnR1YWxseSAod2hl
biBKUwotICAgIC8vIEdDIHJlbGVhc2VzIHRoZSBsYXN0IHJlZmVyZW5jZSkuIFVudGlsIHRoZW4g
U291cmNlQnVmZmVyIGlzIGluICJyZW1vdmVkIiBzdGF0ZSBhbmQgd29uJ3QgdXNlIFNvdXJjZUJ1
ZmZlclByaXZhdGUuCi0gICAgQVNTRVJUKHJlZkNvdW50KCkgPT0gMSk7CisKKyAgICBmb3IgKGF1
dG8mIHRyYWNrIDogbV90cmFja3MudmFsdWVzKCkpCisgICAgICAgIHRyYWNrLT5yZW1vdmUoKTsK
KyAgICBtX2hhc0JlZW5SZW1vdmVkRnJvbU1lZGlhU291cmNlID0gdHJ1ZTsKIH0KIAogTWVkaWFQ
bGF5ZXI6OlJlYWR5U3RhdGUgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVhZHlTdGF0
ZSgpIGNvbnN0CkBAIC0xMjYsNDEgKzEzMyw2MyBAQCB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVH
U3RyZWFtZXI6OmZsdXNoKGNvbnN0IEF0b21TdHJpbmcmIHRyYWNrSWQpCiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKIAogICAgIC8vIFRoaXMgaXMgb25seSBmb3Igb24tdGhlLWZseSByZWVu
cXVldWVzIGFmdGVyIGFwcGVuZHMuIFdoZW4gc2Vla2luZywgdGhlIHNlZWsgd2lsbCBkbyBpdHMg
b3duIGZsdXNoLgotICAgIGlmICghbV9wbGF5ZXJQcml2YXRlLnNlZWtpbmcoKSkKLSAgICAgICAg
bV9wbGF5ZXJQcml2YXRlLnBsYXliYWNrUGlwZWxpbmUoKS0+Zmx1c2godHJhY2tJZCk7Ci19CiAK
LXZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5xdWV1ZVNhbXBsZShSZWY8TWVk
aWFTYW1wbGU+JiYgc2FtcGxlLCBjb25zdCBBdG9tU3RyaW5nJikKLXsKLSAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotICAgIG1fbm90aWZ5V2hlblJlYWR5Rm9yTW9yZVNhbXBsZXMgPSBmYWxz
ZTsKKyAgICBpZiAoIW1fcGxheWVyUHJpdmF0ZS5oYXNBbGxUcmFja3MoKSkgeworICAgICAgICAv
LyBTb3VyY2UgZWxlbWVudCBoYXMgbm90IGVtaXR0ZWQgdHJhY2tzIHlldCwgc28gd2Ugb25seSBu
ZWVkIHRvIGNsZWFyIHRoZSBxdWV1ZS4KKyAgICAgICAgTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1l
ciogdHJhY2sgPSBtX3RyYWNrcy5nZXQodHJhY2tJZCk7CisgICAgICAgIHRyYWNrLT5jbGVhclF1
ZXVlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBtX3BsYXllclByaXZhdGUucGxh
eWJhY2tQaXBlbGluZSgpLT5lbnF1ZXVlU2FtcGxlKFdURk1vdmUoc2FtcGxlKSk7CisgICAgLy8g
U291cmNlIGVsZW1lbnQgaGFzIGVtaXR0ZWQgdHJhY2tzLCBsZXQgaXQgaGFuZGxlIHRoZSBmbHVz
aCwgd2hpY2ggbWF5IGNhdXNlIGEgcGlwZWxpbmUgZmx1c2ggYXMgd2VsbC4KKyAgICB3ZWJLaXRN
ZWRpYVNyY0ZsdXNoKG1fcGxheWVyUHJpdmF0ZS53ZWJLaXRNZWRpYVNyYygpLCB0cmFja0lkKTsK
IH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjphbGxTYW1wbGVzSW5UcmFj
a0VucXVldWVkKGNvbnN0IEF0b21TdHJpbmcmIHRyYWNrSWQpCit2b2lkIFNvdXJjZUJ1ZmZlclBy
aXZhdGVHU3RyZWFtZXI6OmVucXVldWVTYW1wbGUoUmVmPE1lZGlhU2FtcGxlPiYmIHNhbXBsZSwg
Y29uc3QgQXRvbVN0cmluZyYgdHJhY2tJZCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgIG1fcGxheWVyUHJpdmF0ZS5wbGF5YmFja1BpcGVsaW5lKCktPmFsbFNhbXBsZXNJblRy
YWNrRW5xdWV1ZWQodHJhY2tJZCk7CisKKyAgICBHU1RfVFJBQ0UoImVucXVlaW5nIHNhbXBsZSB0
cmFja0lkPSVzIFBUUz0lZiBwcmVzZW50YXRpb25TaXplPSUuMGZ4JS4wZiBhdCAlIiBHU1RfVElN
RV9GT1JNQVQgIiBkdXJhdGlvbjogJSIgR1NUX1RJTUVfRk9STUFULAorICAgICAgICB0cmFja0lk
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHNhbXBsZS0+cHJlc2VudGF0aW9uVGltZSgpLnRvRmxv
YXQoKSwKKyAgICAgICAgc2FtcGxlLT5wcmVzZW50YXRpb25TaXplKCkud2lkdGgoKSwgc2FtcGxl
LT5wcmVzZW50YXRpb25TaXplKCkuaGVpZ2h0KCksCisgICAgICAgIEdTVF9USU1FX0FSR1MoV2Vi
Q29yZTo6dG9Hc3RDbG9ja1RpbWUoc2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCkpKSwKKyAgICAg
ICAgR1NUX1RJTUVfQVJHUyhXZWJDb3JlOjp0b0dzdENsb2NrVGltZShzYW1wbGUtPmR1cmF0aW9u
KCkpKSk7CisKKyAgICBHUmVmUHRyPEdzdFNhbXBsZT4gZ3N0U2FtcGxlID0gc2FtcGxlLT5wbGF0
Zm9ybVNhbXBsZSgpLnNhbXBsZS5nc3RTYW1wbGU7CisgICAgQVNTRVJUKGdzdFNhbXBsZSk7Cisg
ICAgQVNTRVJUKGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihnc3RTYW1wbGUuZ2V0KCkpKTsKKworICAg
IE1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXIqIHRyYWNrID0gbV90cmFja3MuZ2V0KHRyYWNrSWQp
OworICAgIHRyYWNrLT5lbnF1ZXVlT2JqZWN0KGFkb3B0R1JlZihHU1RfTUlOSV9PQkpFQ1QoZ3N0
U2FtcGxlLmxlYWtSZWYoKSkpKTsKIH0KIAotYm9vbCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVh
bWVyOjppc1JlYWR5Rm9yTW9yZVNhbXBsZXMoY29uc3QgQXRvbVN0cmluZyYpCitib29sIFNvdXJj
ZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OmlzUmVhZHlGb3JNb3JlU2FtcGxlcyhjb25zdCBBdG9t
U3RyaW5nJiB0cmFja0lkKQogewotICAgIHJldHVybiBtX2lzUmVhZHlGb3JNb3JlU2FtcGxlczsK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIE1lZGlhU291cmNlVHJhY2tHU3RyZWFt
ZXIqIHRyYWNrID0gbV90cmFja3MuZ2V0KHRyYWNrSWQpOworICAgIGJvb2wgcmV0ID0gdHJhY2st
PmlzUmVhZHlGb3JNb3JlU2FtcGxlcygpOworICAgIEdTVF9UUkFDRSgiU291cmNlQnVmZmVyUHJp
dmF0ZSglcCkgLSBpc1JlYWR5Rm9yTW9yZVNhbXBsZXM6ICVzIiwgdGhpcywgYm9vbEZvclByaW50
aW5nKHJldCkpOworICAgIHJldHVybiByZXQ7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUHJpdmF0
ZUdTdHJlYW1lcjo6c2V0UmVhZHlGb3JNb3JlU2FtcGxlcyhib29sIGlzUmVhZHkpCit2b2lkIFNv
dXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeUNsaWVudFdoZW5SZWFkeUZvck1vcmVT
YW1wbGVzKGNvbnN0IEF0b21TdHJpbmcmIHRyYWNrSWQpCiB7Ci0gICAgQVNTRVJUKFdURjo6aXNN
YWluVGhyZWFkKCkpOwotICAgIG1faXNSZWFkeUZvck1vcmVTYW1wbGVzID0gaXNSZWFkeTsKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIE1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXIq
IHRyYWNrID0gbV90cmFja3MuZ2V0KHRyYWNrSWQpOworICAgIHRyYWNrLT5ub3RpZnlXaGVuUmVh
ZHlGb3JNb3JlU2FtcGxlcyhbcHJvdGVjdG9yID0gbWFrZVJlZigqdGhpcyksIHRoaXMsIHRyYWNr
SWRdKCkgbXV0YWJsZSB7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVj
dG9yID0gV1RGTW92ZShwcm90ZWN0b3IpLCB0aGlzLCB0cmFja0lkXSgpIHsKKyAgICAgICAgICAg
IGlmICghbV9oYXNCZWVuUmVtb3ZlZEZyb21NZWRpYVNvdXJjZSkKKyAgICAgICAgICAgICAgICBw
cm92aWRlTWVkaWFEYXRhKHRyYWNrSWQpOworICAgICAgICB9KTsKKyAgICB9KTsKIH0KIAotdm9p
ZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlSZWFkeUZvck1vcmVTYW1wbGVz
KCkKK3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6YWxsU2FtcGxlc0luVHJhY2tF
bnF1ZXVlZChjb25zdCBBdG9tU3RyaW5nJiB0cmFja0lkKQogewotICAgIEFTU0VSVChXVEY6Omlz
TWFpblRocmVhZCgpKTsKLSAgICBzZXRSZWFkeUZvck1vcmVTYW1wbGVzKHRydWUpOwotICAgIGlm
IChtX25vdGlmeVdoZW5SZWFkeUZvck1vcmVTYW1wbGVzKQotICAgICAgICBwcm92aWRlTWVkaWFE
YXRhKG1fdHJhY2tJZCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBHU1RfREVC
VUcoIkVucXVldWVpbmcgRU9TIGZvciB0cmFjayAnJXMnIiwgdHJhY2tJZC5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKKyAgICBNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyKiB0cmFjayA9IG1fdHJh
Y2tzLmdldCh0cmFja0lkKTsKKyAgICB0cmFjay0+ZW5xdWV1ZU9iamVjdChhZG9wdEdSZWYoR1NU
X01JTklfT0JKRUNUKGdzdF9ldmVudF9uZXdfZW9zKCkpKSk7CiB9CiAKIHZvaWQgU291cmNlQnVm
ZmVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0QWN0aXZlKGJvb2wgaXNBY3RpdmUpCkBAIC0xNzQsMTUg
KzIwMywyNyBAQCBib29sIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OmlzQWN0aXZlKCkg
Y29uc3QKICAgICByZXR1cm4gbV9pc0FjdGl2ZTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQcml2
YXRlR1N0cmVhbWVyOjpub3RpZnlDbGllbnRXaGVuUmVhZHlGb3JNb3JlU2FtcGxlcyhjb25zdCBB
dG9tU3RyaW5nJiB0cmFja0lkKQotewotICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsK
LSAgICBtX25vdGlmeVdoZW5SZWFkeUZvck1vcmVTYW1wbGVzID0gdHJ1ZTsKLSAgICBtX3RyYWNr
SWQgPSB0cmFja0lkOwotfQotCiB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OmRp
ZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6
SW5pdGlhbGl6YXRpb25TZWdtZW50JiYgaW5pdGlhbGl6YXRpb25TZWdtZW50LCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CisgICAgbV9oYXNSZWNlaXZl
ZEluaXRpYWxpemF0aW9uU2VnbWVudCA9IHRydWU7CisgICAgZm9yIChhdXRvJiB0cmFja0luZm8g
OiBpbml0aWFsaXphdGlvblNlZ21lbnQudmlkZW9UcmFja3MpIHsKKyAgICAgICAgR1JlZlB0cjxH
c3RDYXBzPiBpbml0aWFsQ2FwcyA9IHN0YXRpY19jYXN0PFZpZGVvVHJhY2tQcml2YXRlR1N0cmVh
bWVyKj4odHJhY2tJbmZvLnRyYWNrLmdldCgpKS0+aW5pdGlhbENhcHMoKTsKKyAgICAgICAgQVNT
RVJUKGluaXRpYWxDYXBzKTsKKyAgICAgICAgbV90cmFja3MuYWRkKHRyYWNrSW5mby50cmFjay0+
aWQoKSwgTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcjo6Y3JlYXRlKFRyYWNrUHJpdmF0ZUJhc2VH
U3RyZWFtZXI6OlRyYWNrVHlwZTo6VmlkZW8sIHRyYWNrSW5mby50cmFjay0+aWQoKSwgV1RGTW92
ZShpbml0aWFsQ2FwcykpKTsKKyAgICB9CisgICAgZm9yIChhdXRvJiB0cmFja0luZm8gOiBpbml0
aWFsaXphdGlvblNlZ21lbnQuYXVkaW9UcmFja3MpIHsKKyAgICAgICAgR1JlZlB0cjxHc3RDYXBz
PiBpbml0aWFsQ2FwcyA9IHN0YXRpY19jYXN0PEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyKj4o
dHJhY2tJbmZvLnRyYWNrLmdldCgpKS0+aW5pdGlhbENhcHMoKTsKKyAgICAgICAgQVNTRVJUKGlu
aXRpYWxDYXBzKTsKKyAgICAgICAgbV90cmFja3MuYWRkKHRyYWNrSW5mby50cmFjay0+aWQoKSwg
TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcjo6Y3JlYXRlKFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFt
ZXI6OlRyYWNrVHlwZTo6QXVkaW8sIHRyYWNrSW5mby50cmFjay0+aWQoKSwgV1RGTW92ZShpbml0
aWFsQ2FwcykpKTsKKyAgICB9CisgICAgZm9yIChhdXRvJiB0cmFja0luZm8gOiBpbml0aWFsaXph
dGlvblNlZ21lbnQudGV4dFRyYWNrcykgeworICAgICAgICBHUmVmUHRyPEdzdENhcHM+IGluaXRp
YWxDYXBzID0gc3RhdGljX2Nhc3Q8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcio+KHRy
YWNrSW5mby50cmFjay5nZXQoKSktPmluaXRpYWxDYXBzKCk7CisgICAgICAgIEFTU0VSVChpbml0
aWFsQ2Fwcyk7CisgICAgICAgIG1fdHJhY2tzLmFkZCh0cmFja0luZm8udHJhY2stPmlkKCksIE1l
ZGlhU291cmNlVHJhY2tHU3RyZWFtZXI6OmNyZWF0ZShUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVy
OjpUcmFja1R5cGU6OlRleHQsIHRyYWNrSW5mby50cmFjay0+aWQoKSwgV1RGTW92ZShpbml0aWFs
Q2FwcykpKTsKKyAgICB9CisKKyAgICBtX21lZGlhU291cmNlLT5zdGFydFBsYXliYWNrSWZIYXNB
bGxUcmFja3MoKTsKKwogICAgIFNvdXJjZUJ1ZmZlclByaXZhdGU6OmRpZFJlY2VpdmVJbml0aWFs
aXphdGlvblNlZ21lbnQoV1RGTW92ZShpbml0aWFsaXphdGlvblNlZ21lbnQpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Tb3VyY2VC
dWZmZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggY2MyYWNjMDU3Y2I0YThkODlmMDZmOGI3MTE2
MzFjMDZlYjBlYmQ5MC4uZjFiMGU5NzE0MWM3NDI5ZTQ2YmExNGMxNTk1NGYxYWNlY2E2MzI3ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21z
ZS9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVy
LmgKQEAgLTQwLDEyICs0MCwxNSBAQAogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRS5oIgogI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGUuaCIKICNpbmNsdWRlICJT
b3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LmgiCisjaW5jbHVkZSAiVHJhY2tQcml2YXRlQmFzZUdT
dHJlYW1lci5oIgogI2luY2x1ZGUgIldlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmgiCiAjaW5j
bHVkZSA8d3RmL0xvZ2dlckhlbHBlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNz
IEFwcGVuZFBpcGVsaW5lOwogY2xhc3MgTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyOworY2xh
c3MgTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcjsKIAogY2xhc3MgU291cmNlQnVmZmVyUHJpdmF0
ZUdTdHJlYW1lciBmaW5hbCA6IHB1YmxpYyBTb3VyY2VCdWZmZXJQcml2YXRlIHsKIHB1YmxpYzoK
QEAgLTY3LDEwICs3MCw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzUmVhZHlGb3JNb3JlU2FtcGxl
cyhjb25zdCBBdG9tU3RyaW5nJikgZmluYWw7CiAgICAgdm9pZCBzZXRBY3RpdmUoYm9vbCkgZmlu
YWw7CiAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgbm90aWZ5Q2xp
ZW50V2hlblJlYWR5Rm9yTW9yZVNhbXBsZXMoY29uc3QgQXRvbVN0cmluZyYpIGZpbmFsOwotCi0g
ICAgdm9pZCBzZXRSZWFkeUZvck1vcmVTYW1wbGVzKGJvb2wpOwotICAgIHZvaWQgbm90aWZ5UmVh
ZHlGb3JNb3JlU2FtcGxlcygpOwogCiAgICAgdm9pZCBkaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25T
ZWdtZW50KFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudCYm
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgZGlkUmVjZWl2ZVNhbXBs
ZShSZWY8TWVkaWFTYW1wbGU+JiYpOwpAQCAtODEsNiArODAsOSBAQCBwdWJsaWM6CiAgICAgTWVk
aWFUaW1lIGN1cnJlbnRNZWRpYVRpbWUoKSBjb25zdCBmaW5hbDsKICAgICBNZWRpYVRpbWUgZHVy
YXRpb24oKSBjb25zdCBmaW5hbDsKIAorICAgIGJvb2wgaGFzUmVjZWl2ZWRJbml0aWFsaXphdGlv
blNlZ21lbnQoKSBjb25zdCB7IHJldHVybiBtX2hhc1JlY2VpdmVkSW5pdGlhbGl6YXRpb25TZWdt
ZW50OyB9CisgICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBSZWZQdHI8TWVkaWFTb3VyY2VUcmFja0dT
dHJlYW1lcj4+OjpWYWx1ZXNJdGVyYXRvclJhbmdlIHRyYWNrcygpIHsgcmV0dXJuIG1fdHJhY2tz
LnZhbHVlcygpOyB9CisKICAgICBDb250ZW50VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9CiAKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKQEAgLTk1LDE0ICs5NywxOCBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIoTWVkaWFT
b3VyY2VQcml2YXRlR1N0cmVhbWVyKiwgY29uc3QgQ29udGVudFR5cGUmLCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJNU0UmKTsKIAorICAgIHZvaWQgbm90aWZ5Q2xpZW50V2hlblJlYWR5Rm9y
TW9yZVNhbXBsZXMoY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOworCiAgICAgTWVkaWFTb3Vy
Y2VQcml2YXRlR1N0cmVhbWVyKiBtX21lZGlhU291cmNlOwogICAgIGJvb2wgbV9pc0FjdGl2ZSB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc0JlZW5SZW1vdmVkRnJvbU1lZGlhU291cmNlIHsgZmFs
c2UgfTsKICAgICBDb250ZW50VHlwZSBtX3R5cGU7CiAgICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFJiBtX3BsYXllclByaXZhdGU7CiAgICAgVW5pcXVlUmVmPEFwcGVuZFBpcGVsaW5l
PiBtX2FwcGVuZFBpcGVsaW5lOwotICAgIGJvb2wgbV9pc1JlYWR5Rm9yTW9yZVNhbXBsZXMgPSB0
cnVlOwotICAgIGJvb2wgbV9ub3RpZnlXaGVuUmVhZHlGb3JNb3JlU2FtcGxlcyA9IGZhbHNlOwor
ICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQqIG1fc291cmNlQnVmZmVyUHJpdmF0ZUNsaWVu
dCB7IG51bGxwdHIgfTsKICAgICBBdG9tU3RyaW5nIG1fdHJhY2tJZDsKKyAgICBIYXNoTWFwPEF0
b21TdHJpbmcsIFJlZlB0cjxNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyPj4gbV90cmFja3M7Cisg
ICAgYm9vbCBtX2hhc1JlY2VpdmVkSW5pdGlhbGl6YXRpb25TZWdtZW50IHsgZmFsc2UgfTsKIAog
I2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgIFJlZjxjb25zdCBMb2dnZXI+IG1fbG9nZ2Vy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L21zZS9UcmFja1F1ZXVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9tc2UvVHJhY2tRdWV1ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjZhYmNhNDU0NTNhNjUxMjMz
NDFjOTA0NjkwYmIwNzZlODQ5NzkyYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvVHJhY2tRdWV1ZS5jcHAKQEAgLTAsMCAr
MSwxNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjEgTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMSBJZ2FsaWEsIFMuTAorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJUcmFja1F1ZXVlLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU09V
UkNFKSAmJiBVU0UoR1NUUkVBTUVSKQorCitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtp
dF9tc2VfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X21zZV9kZWJ1Zwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1RyYWNrUXVldWU6OlRyYWNrUXVldWUoQXRvbVN0cmlu
ZyB0cmFja0lkKQorICAgIDogbV90cmFja0lkKHRyYWNrSWQpCit7IH0KKwordm9pZCBUcmFja1F1
ZXVlOjplbnF1ZXVlT2JqZWN0KEdSZWZQdHI8R3N0TWluaU9iamVjdD4mJiBvYmplY3QpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoR1NUX0lTX1NBTVBMRShvYmpl
Y3QuZ2V0KCkpIHx8IEdTVF9JU19FVkVOVChvYmplY3QuZ2V0KCkpKTsKKworICAgIEdTVF9UUkFD
RSgiVHJhY2tRdWV1ZSBmb3IgJyVzJzogUHV0dGluZyBvYmplY3QgaW4gdGhlIHF1ZXVlOiAlIiBH
U1RfUFRSX0ZPUk1BVCAiLiBub3RFbXB0eUNhbGxiYWNrIGN1cnJlbnRseSAlcy4iLCBtX3RyYWNr
SWQuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgb2JqZWN0LmdldCgpLCBtX25vdEVtcHR5Q2FsbGJh
Y2sgPyAic2V0LCB3aWxsIGJlIGNhbGxlZCIgOiAidW5zZXQiKTsKKyAgICBpZiAoIW1fbm90RW1w
dHlDYWxsYmFjaykKKyAgICAgICAgbV9xdWV1ZS5hcHBlbmQoV1RGTW92ZShvYmplY3QpKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgLy8gSWYgYSBsb3cgbGV2ZWwgY2FsbGJhY2sgd2FzIGV2ZXIgc2V0
LCBpdCBoYWQgdG8gYmUgZGlzcGF0Y2hlZCB3aGVuIHRoZSBxdWV1ZSB3YXMgZW1wdHkgYXQgbGF0
ZXN0LgorICAgICAgICBBU1NFUlQoIW1fbG93TGV2ZWxDYWxsYmFjayk7CisKKyAgICAgICAgTm90
RW1wdHlIYW5kbGVyIG5vdEVtcHR5Q2FsbGJhY2s7CisgICAgICAgIHN0ZDo6c3dhcChub3RFbXB0
eUNhbGxiYWNrLCBtX25vdEVtcHR5Q2FsbGJhY2spOworICAgICAgICBub3RFbXB0eUNhbGxiYWNr
KFdURk1vdmUob2JqZWN0KSk7CisgICAgfQorfQorCit2b2lkIFRyYWNrUXVldWU6OmNsZWFyKCkK
K3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIG1fcXVldWUuY2xlYXIoKTsKKyAg
ICBHU1RfREVCVUcoIlRyYWNrUXVldWUgZm9yICclcyc6IEVtcHRpZWQuIiwgbV90cmFja0lkLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIC8vIE5vdGlmeSBtYWluIHRocmVhZCBvZiBsb3cg
bGV2ZWwgcmVhY2hlZCBpZiBpdCBwcm9jZWVkcy4KKyAgICBjaGVja0xvd0xldmVsKCk7Cit9CisK
K3ZvaWQgVHJhY2tRdWV1ZTo6Zmx1c2goKQoreworICAgIGNsZWFyKCk7CisgICAgLy8gSWYgdGhl
cmUgd2FzIGEgY2FsbGJhY2sgaW4gdGhlIHN0cmVhbWluZyB0aHJlYWQgd2FpdGluZyBmb3IgYSBz
YW1wbGUgdG8gYmUgYWRkZWQsIGNhbmNlbCBpdC4KKyAgICBpZiAobV9ub3RFbXB0eUNhbGxiYWNr
KSB7CisgICAgICAgIG1fbm90RW1wdHlDYWxsYmFjayA9IG51bGxwdHI7CisgICAgICAgIEdTVF9E
RUJVRygiVHJhY2tRdWV1ZSBmb3IgJyVzJzogbm90RW1wdHlDYWxsYmFjayB1bnNldC4iLCBtX3Ry
YWNrSWQuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgfQorfQorCit2b2lkIFRyYWNrUXVl
dWU6Om5vdGlmeVdoZW5Mb3dMZXZlbChMb3dMZXZlbEhhbmRsZXImJiBsb3dMZXZlbENhbGxiYWNr
KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgR1NUX1RSQUNFKCJUcmFja1F1
ZXVlIGZvciAnJXMnOiBTZXR0aW5nIGxvd0xldmVsQ2FsbGJhY2slcy4iLCBtX3RyYWNrSWQuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgbV9sb3dMZXZlbENhbGxiYWNrID8gIiAocHJl
dmlvdXMgY2FsbGJhY2sgd2lsbCBiZSBkaXNjYXJkZWQpIiA6ICIiKTsKKyAgICBtX2xvd0xldmVs
Q2FsbGJhY2sgPSBXVEZNb3ZlKGxvd0xldmVsQ2FsbGJhY2spOworICAgIGNoZWNrTG93TGV2ZWwo
KTsKK30KKworR1JlZlB0cjxHc3RNaW5pT2JqZWN0PiBUcmFja1F1ZXVlOjpwb3AoKQoreworICAg
IEFTU0VSVCghaXNFbXB0eSgpKTsKKyAgICBHUmVmUHRyPEdzdE1pbmlPYmplY3Q+IG9iamVjdCA9
IG1fcXVldWUudGFrZUZpcnN0KCk7CisgICAgY2hlY2tMb3dMZXZlbCgpOworICAgIHJldHVybiBv
YmplY3Q7Cit9CisKK3ZvaWQgVHJhY2tRdWV1ZTo6bm90aWZ5V2hlbk5vdEVtcHR5KE5vdEVtcHR5
SGFuZGxlciYmIG5vdEVtcHR5Q2FsbGJhY2spCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7CisgICAgQVNTRVJUKCFtX25vdEVtcHR5Q2FsbGJhY2spOworICAgIG1fbm90RW1wdHlDYWxs
YmFjayA9IFdURk1vdmUobm90RW1wdHlDYWxsYmFjayk7CisgICAgR1NUX1RSQUNFKCJUcmFja1F1
ZXVlIGZvciAnJXMnOiBub3RFbXB0eUNhbGxiYWNrIHNldC4iLCBtX3RyYWNrSWQuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgVHJhY2tRdWV1ZTo6cmVzZXROb3RFbXB0eUhhbmRs
ZXIoKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghbV9ub3RFbXB0
eUNhbGxiYWNrKQorICAgICAgICByZXR1cm47CisgICAgbV9ub3RFbXB0eUNhbGxiYWNrID0gbnVs
bHB0cjsKKyAgICBHU1RfVFJBQ0UoIlRyYWNrUXVldWUgZm9yICclcyc6IG5vdEVtcHR5Q2FsbGJh
Y2sgcmVzZXQuIiwgbV90cmFja0lkLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lk
IFRyYWNrUXVldWU6OmNoZWNrTG93TGV2ZWwoKQoreworICAgIGlmICghbV9sb3dMZXZlbENhbGxi
YWNrIHx8IGR1cmF0aW9uRW5xdWV1ZWQoKSA+IHNfZHVyYXRpb25FbnF1ZXVlZExvd1dhdGVyTGV2
ZWwpCisgICAgICAgIHJldHVybjsKKworICAgIExvd0xldmVsSGFuZGxlciBsb3dMZXZlbENhbGxi
YWNrOworICAgIHN0ZDo6c3dhcChsb3dMZXZlbENhbGxiYWNrLCBtX2xvd0xldmVsQ2FsbGJhY2sp
OworICAgIEdTVF9UUkFDRSgiVHJhY2tRdWV1ZSBmb3IgJyVzJzogbG93TGV2ZWxDYWxsYmFjayBj
YWxsZWQuIiwgbV90cmFja0lkLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGxvd0xldmVs
Q2FsbGJhY2soKTsKK30KKworR3N0Q2xvY2tUaW1lIFRyYWNrUXVldWU6OmR1cmF0aW9uRW5xdWV1
ZWQoKSBjb25zdAoreworICAgIC8vIEZpbmQgdGhlIGZpcnN0IGFuZCBsYXN0IEdzdFNhbXBsZSBp
biB0aGUgcXVldWUgYW5kIHN1YnRyYWN0IHRoZWlyIERUUy4KKworICAgIGF1dG8gZnJvbnRJdGVy
ID0gc3RkOjpmaW5kX2lmKG1fcXVldWUuYmVnaW4oKSwgbV9xdWV1ZS5lbmQoKSwgW10oY29uc3Qg
R1JlZlB0cjxHc3RNaW5pT2JqZWN0PiYgb2JqZWN0KSB7CisgICAgICAgIHJldHVybiBHU1RfSVNf
U0FNUExFKG9iamVjdC5nZXQoKSk7CisgICAgfSk7CisKKyAgICAvLyBJZiB0aGVyZSBhcmUgbm8g
c2FtcGxlcyBpbiB0aGUgcXVldWUsIHRoYXQgbWFrZXMgdG90YWwgZHVyYXRpb24gb2YgZW5xdWV1
ZWQgZnJhbWVzIG9mIHplcm8uCisgICAgaWYgKGZyb250SXRlciA9PSBtX3F1ZXVlLmVuZCgpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGF1dG8gYmFja0l0ZXIgPSBzdGQ6OmZpbmRfaWYobV9x
dWV1ZS5yYmVnaW4oKSwgbV9xdWV1ZS5yZW5kKCksIFtdKGNvbnN0IEdSZWZQdHI8R3N0TWluaU9i
amVjdD4mIG9iamVjdCkgeworICAgICAgICByZXR1cm4gR1NUX0lTX1NBTVBMRShvYmplY3QuZ2V0
KCkpOworICAgIH0pOworCisgICAgY29uc3QgR3N0QnVmZmVyKiBmcm9udCA9IGdzdF9zYW1wbGVf
Z2V0X2J1ZmZlcihHU1RfU0FNUExFKGZyb250SXRlci0+Z2V0KCkpKTsKKyAgICBjb25zdCBHc3RC
dWZmZXIqIGJhY2sgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIoR1NUX1NBTVBMRShiYWNrSXRlci0+
Z2V0KCkpKTsKKyAgICByZXR1cm4gR1NUX0JVRkZFUl9EVFNfT1JfUFRTKGJhY2spIC0gR1NUX0JV
RkZFUl9EVFNfT1JfUFRTKGZyb250KTsKK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1RyYWNrUXVldWUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvVHJhY2tRdWV1
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjQzNmI2NmEwODMxZGZhMDUzZTM5YjM0NGYxOTM4ODNlNmFlZWUzZDkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvbXNlL1RyYWNrUXVldWUuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwLCAyMDIxIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAsIDIwMjEgSWdhbGlhLCBTLkwKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TT1VS
Q0UpICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKKyNp
bmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFRyYWNrUXVldWUgeworcHVibGljOgorICAgIFRyYWNrUXVldWUo
QXRvbVN0cmluZyB0cmFja0lkKTsKKworICAgIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkKEdS
ZWZQdHI8R3N0TWluaU9iamVjdD4mJik+IE5vdEVtcHR5SGFuZGxlcjsKKyAgICB0eXBlZGVmIHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiBMb3dMZXZlbEhhbmRsZXI7CisKKyAgICAvLyBOb3RlOiBUaGUg
VHJhY2tRdWV1ZSBtZXRob2RzIGFyZSBub3QgdGhyZWFkLXNhZmUuIFRyYWNrUXVldWUgbXVzdCBh
bHdheXMgYmUgd3JhcHBlZCBpbiBhIERhdGFNdXRleDw+LgorCisgICAgLy8gRm9yIHByb2R1Y2Vy
IHRocmVhZCAobWFpbi10aHJlYWQpOgorICAgIHZvaWQgZW5xdWV1ZU9iamVjdChHUmVmUHRyPEdz
dE1pbmlPYmplY3Q+JiYpOworICAgIGJvb2wgaXNGdWxsKCkgY29uc3QgeyByZXR1cm4gZHVyYXRp
b25FbnF1ZXVlZCgpID49IHNfZHVyYXRpb25FbnF1ZXVlZEhpZ2hXYXRlckxldmVsOyB9CisgICAg
dm9pZCBub3RpZnlXaGVuTG93TGV2ZWwoTG93TGV2ZWxIYW5kbGVyJiYpOworICAgIHZvaWQgY2xl
YXIoKTsKKyAgICB2b2lkIGZsdXNoKCk7CisKKyAgICAvLyBGb3IgY29uc3VtZXIgdGhyZWFkOgor
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcXVldWUuaXNFbXB0eSgpOyB9Cisg
ICAgR1JlZlB0cjxHc3RNaW5pT2JqZWN0PiBwb3AoKTsKKyAgICB2b2lkIG5vdGlmeVdoZW5Ob3RF
bXB0eShOb3RFbXB0eUhhbmRsZXImJik7CisgICAgYm9vbCBoYXNOb3RFbXB0eUhhbmRsZXIoKSBj
b25zdCB7IHJldHVybiBtX25vdEVtcHR5Q2FsbGJhY2sgIT0gbnVsbHB0cjsgfQorICAgIHZvaWQg
cmVzZXROb3RFbXB0eUhhbmRsZXIoKTsKKworcHJpdmF0ZToKKyAgICAvLyBUaGUgcG9pbnQgb2Yg
aGF2aW5nIGEgcXVldWUgZm9yIFdlYktpdE1lZGlhU291cmNlIGlzIHRvIGxpbWl0IHRoZSBudW1i
ZXIgb2YgY29udGV4dCBzd2l0Y2hlcyBwZXIgc2Vjb25kLgorICAgIC8vIElmIHdlIGhhZCBubyBx
dWV1ZSwgdGhlIG1haW4gdGhyZWFkIHdvdWxkIGhhdmUgdG8gYmUgYXdha2VuIGZvciBldmVyeSBm
cmFtZS4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZQorICAgIC8vIHF1ZXVlIGhhZCB1bmxpbWl0
ZWQgc2l6ZSBXZWJLaXQgd291bGQgZW5kIHVwIHJlcXVlc3RpbmcgZmx1c2hlcyBtb3JlIG9mdGVu
IHRoYW4gbmVjZXNzYXJ5IHdoZW4gZnJhbWVzCisgICAgLy8gaW4gdGhlIGZ1dHVyZSBhcmUgcmUt
YXBwZW5kZWQuIEFzIGEgc3dlZXQgc3BvdCBiZXR3ZWVuIHRoZXNlIGV4dHJlbWVzIHdlIGNob29z
ZSB0byBhbGxvdyBlbnF1ZXVlaW5nIGEKKyAgICAvLyBmZXcgc2Vjb25kcyB3b3J0aCBvZiBzYW1w
bGVzLgorCisgICAgLy8gYGlzUmVhZHlGb3JNb3JlU2FtcGxlc2AgZm9sbG93cyB0aGUgY2xhc3Np
Y2FsIHR3byB3YXRlciBsZXZlbHMgc3RyYXRlZ3k6IGluaXRpYWxseSBpdCdzIHRydWUgdW50aWwg
dGhlCisgICAgLy8gaGlnaCB3YXRlciBsZXZlbCBpcyByZWFjaGVkLCB0aGVuIGl0IGJlY29tZXMg
ZmFsc2UgdW50aWwgdGhlIHF1ZXVlIGRyYWlucyBkb3duIHRvIHRoZSBsb3cgd2F0ZXIgbGV2ZWwK
KyAgICAvLyBhbmQgdGhlIGN5Y2xlIHJlcGVhdHMuIFRoaXMgd2F5IHdlIGF2b2lkIHN0YWxscyBh
bmQgbWluaW1pemUgY29udGV4dCBzd2l0Y2hlcy4KKworICAgIHN0YXRpYyBjb25zdCBHc3RDbG9j
a1RpbWUgc19kdXJhdGlvbkVucXVldWVkSGlnaFdhdGVyTGV2ZWwgPSA1ICogR1NUX1NFQ09ORDsK
KyAgICBzdGF0aWMgY29uc3QgR3N0Q2xvY2tUaW1lIHNfZHVyYXRpb25FbnF1ZXVlZExvd1dhdGVy
TGV2ZWwgPSAyICogR1NUX1NFQ09ORDsKKworICAgIEdzdENsb2NrVGltZSBkdXJhdGlvbkVucXVl
dWVkKCkgY29uc3Q7CisgICAgdm9pZCBjaGVja0xvd0xldmVsKCk7CisKKyAgICBBdG9tU3RyaW5n
IG1fdHJhY2tJZDsKKyAgICBEZXF1ZTxHUmVmUHRyPEdzdE1pbmlPYmplY3Q+PiBtX3F1ZXVlOwor
ICAgIExvd0xldmVsSGFuZGxlciBtX2xvd0xldmVsQ2FsbGJhY2s7CisgICAgTm90RW1wdHlIYW5k
bGVyIG1fbm90RW1wdHlDYWxsYmFjazsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlh
U291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4IGRiODMxMjQ0
MmRmNWIwNTc1ZWMxY2MwZDk3NmNlZDNjMDNlNmRmNTkuLjY4NDU5OGZjYzhkZGVkZDQyOWNlMWM2
MDc4ZTRkMzhmNjY0YTY3NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVk
aWFTb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0zLDggKzMsOCBAQAogICogIENvcHlyaWdodCAoQykg
MjAxMyBDb2xsYWJvcmEgTHRkLgogICogIENvcHlyaWdodCAoQykgMjAxMyBPcmFuZ2UKICAqICBD
b3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRy
aWN1bGFyLmNvbT4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgSWdhbGlhLCBTLkwKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYsIDIwMTgsIDIwMTksIDIwMjAsIDIwMjEgTWV0cm9sb2dp
Y2FsIEdyb3VwIEIuVi4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYsIDIwMTgsIDIwMTks
IDIwMjAsIDIwMjEgSWdhbGlhLCBTLkwKICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDE5MSAr
MjQsMjM1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0TWVkaWFTb3Vy
Y2VHU3RyZWFtZXIuaCIKIAotI2luY2x1ZGUgIlBsYXliYWNrUGlwZWxpbmUuaCIKLQogI2lmIEVO
QUJMRShWSURFTykgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgVVNFKEdTVFJFQU1FUikKIAot
I2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiR1N0cmVh
bWVyQ29tbW9uLmgiCi0jaW5jbHVkZSAiTWVkaWFEZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIk1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5oIgotI2luY2x1ZGUgIk1lZGlhU2FtcGxlLmgi
Ci0jaW5jbHVkZSAiTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyLmgiCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmgi
Ci0jaW5jbHVkZSAiVGltZVJhbmdlcy5oIgorI2luY2x1ZGUgIk1lZGlhU291cmNlVHJhY2tHU3Ry
ZWFtZXIuaCIKICNpbmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgotI2luY2x1
ZGUgIldlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyUHJpdmF0ZS5oIgogCi0jaW5jbHVkZSA8Z3N0
L3BidXRpbHMvcGJ1dGlscy5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgorI2luY2x1
ZGUgPGdzdC9nc3QuaD4KICNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3Rm
L0RhdGFNdXRleC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZERhdGEuaD4KICNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9tU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2gu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKK3VzaW5nIG5hbWVzcGFjZSBXVEY7
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwogR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyh3
ZWJraXRfbWVkaWFfc3JjX2RlYnVnKTsKICNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9t
ZWRpYV9zcmNfZGVidWcKIAogI2RlZmluZSB3ZWJraXRfbWVkaWFfc3JjX3BhcmVudF9jbGFzcyBw
YXJlbnRfY2xhc3MKICNkZWZpbmUgV0VCS0lUX01FRElBX1NSQ19DQVRFR09SWV9JTklUIEdTVF9E
RUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9tZWRpYV9zcmNfZGVidWcsICJ3ZWJraXRtZWRpYXNy
YyIsIDAsICJ3ZWJzcmMgZWxlbWVudCIpOwogCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUg
c3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgic3JjXyV1IiwgR1NUX1BBRF9T
UkMsCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjVGVtcGxhdGUgPSBHU1RfU1RBVElD
X1BBRF9URU1QTEFURSgic3JjXyVzIiwgR1NUX1BBRF9TUkMsCiAgICAgR1NUX1BBRF9TT01FVElN
RVMsIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwogCi1zdGF0aWMgdm9pZCBlbmFibGVkQXBwc3JjTmVl
ZERhdGEoR3N0QXBwU3JjKiwgZ3VpbnQsIGdwb2ludGVyKTsKLXN0YXRpYyB2b2lkIGVuYWJsZWRB
cHBzcmNFbm91Z2hEYXRhKEdzdEFwcFNyYyosIGdwb2ludGVyKTsKLXN0YXRpYyBnYm9vbGVhbiBl
bmFibGVkQXBwc3JjU2Vla0RhdGEoR3N0QXBwU3JjKiwgZ3VpbnQ2NCwgZ3BvaW50ZXIpOwotCi1z
dGF0aWMgdm9pZCBkaXNhYmxlZEFwcHNyY05lZWREYXRhKEdzdEFwcFNyYyosIGd1aW50LCBncG9p
bnRlcikgeyB9Owotc3RhdGljIHZvaWQgZGlzYWJsZWRBcHBzcmNFbm91Z2hEYXRhKEdzdEFwcFNy
YyosIGdwb2ludGVyKSB7IH07Ci1zdGF0aWMgZ2Jvb2xlYW4gZGlzYWJsZWRBcHBzcmNTZWVrRGF0
YShHc3RBcHBTcmMqLCBndWludDY0LCBncG9pbnRlcikKLXsKLSAgICByZXR1cm4gRkFMU0U7Ci19
OwotCi1Hc3RBcHBTcmNDYWxsYmFja3MgZW5hYmxlZEFwcHNyY0NhbGxiYWNrcyA9IHsKLSAgICBl
bmFibGVkQXBwc3JjTmVlZERhdGEsCi0gICAgZW5hYmxlZEFwcHNyY0Vub3VnaERhdGEsCi0gICAg
ZW5hYmxlZEFwcHNyY1NlZWtEYXRhLAotICAgIHsgMCB9Ci19OwotCi1Hc3RBcHBTcmNDYWxsYmFj
a3MgZGlzYWJsZWRBcHBzcmNDYWxsYmFja3MgPSB7Ci0gICAgZGlzYWJsZWRBcHBzcmNOZWVkRGF0
YSwKLSAgICBkaXNhYmxlZEFwcHNyY0Vub3VnaERhdGEsCi0gICAgZGlzYWJsZWRBcHBzcmNTZWVr
RGF0YSwKLSAgICB7IDAgfQorZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfTl9BVURJTywK
KyAgICBQUk9QX05fVklERU8sCisgICAgUFJPUF9OX1RFWFQsCisgICAgUFJPUF9MQVNUCiB9Owog
Ci1zdGF0aWMgU3RyZWFtKiBnZXRTdHJlYW1CeUFwcHNyYyhXZWJLaXRNZWRpYVNyYyosIEdzdEVs
ZW1lbnQqKTsKLXN0YXRpYyB2b2lkIHNlZWtOZWVkc0RhdGFNYWluVGhyZWFkKFdlYktpdE1lZGlh
U3JjKik7Ci1zdGF0aWMgdm9pZCBub3RpZnlSZWFkeUZvck1vcmVTYW1wbGVzTWFpblRocmVhZChX
ZWJLaXRNZWRpYVNyYyosIFN0cmVhbSopOworc3RydWN0IFN0cmVhbTsKIAotc3RhdGljIHZvaWQg
ZW5hYmxlZEFwcHNyY05lZWREYXRhKEdzdEFwcFNyYyogYXBwc3JjLCBndWludCwgZ3BvaW50ZXIg
dXNlckRhdGEpCi17Ci0gICAgV2ViS2l0TWVkaWFTcmMqIHdlYktpdE1lZGlhU3JjID0gc3RhdGlj
X2Nhc3Q8V2ViS2l0TWVkaWFTcmMqPih1c2VyRGF0YSk7Ci0gICAgQVNTRVJUKFdFQktJVF9JU19N
RURJQV9TUkMod2ViS2l0TWVkaWFTcmMpKTsKLQotICAgIEdTVF9PQkpFQ1RfTE9DSyh3ZWJLaXRN
ZWRpYVNyYyk7Ci0gICAgT25TZWVrRGF0YUFjdGlvbiBhcHBzcmNTZWVrRGF0YU5leHRBY3Rpb24g
PSB3ZWJLaXRNZWRpYVNyYy0+cHJpdi0+YXBwc3JjU2Vla0RhdGFOZXh0QWN0aW9uOwotICAgIFN0
cmVhbSogYXBwc3JjU3RyZWFtID0gZ2V0U3RyZWFtQnlBcHBzcmMod2ViS2l0TWVkaWFTcmMsIEdT
VF9FTEVNRU5UKGFwcHNyYykpOwotICAgIGJvb2wgYWxsQXBwc3JjTmVlZERhdGFBZnRlclNlZWsg
PSBmYWxzZTsKLQotICAgIGlmICh3ZWJLaXRNZWRpYVNyYy0+cHJpdi0+YXBwc3JjU2Vla0RhdGFD
b3VudCA+IDApIHsKLSAgICAgICAgaWYgKGFwcHNyY1N0cmVhbSAmJiAhYXBwc3JjU3RyZWFtLT5h
cHBzcmNOZWVkRGF0YUZsYWcpIHsKLSAgICAgICAgICAgICsrd2ViS2l0TWVkaWFTcmMtPnByaXYt
PmFwcHNyY05lZWREYXRhQ291bnQ7Ci0gICAgICAgICAgICBhcHBzcmNTdHJlYW0tPmFwcHNyY05l
ZWREYXRhRmxhZyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IG51bUFwcHNyY3MgPSB3
ZWJLaXRNZWRpYVNyYy0+cHJpdi0+c3RyZWFtcy5zaXplKCk7Ci0gICAgICAgIGlmICh3ZWJLaXRN
ZWRpYVNyYy0+cHJpdi0+YXBwc3JjU2Vla0RhdGFDb3VudCA9PSBudW1BcHBzcmNzICYmIHdlYktp
dE1lZGlhU3JjLT5wcml2LT5hcHBzcmNOZWVkRGF0YUNvdW50ID09IG51bUFwcHNyY3MpIHsKLSAg
ICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qod2ViS2l0TWVkaWFTcmMsICJBbGwgbmVlZERhdGFz
IGNvbXBsZXRlZCIpOwotICAgICAgICAgICAgYWxsQXBwc3JjTmVlZERhdGFBZnRlclNlZWsgPSB0
cnVlOwotICAgICAgICAgICAgd2ViS2l0TWVkaWFTcmMtPnByaXYtPmFwcHNyY1NlZWtEYXRhQ291
bnQgPSAwOwotICAgICAgICAgICAgd2ViS2l0TWVkaWFTcmMtPnByaXYtPmFwcHNyY05lZWREYXRh
Q291bnQgPSAwOwotICAgICAgICAgICAgd2ViS2l0TWVkaWFTcmMtPnByaXYtPmFwcHNyY1NlZWtE
YXRhTmV4dEFjdGlvbiA9IE5vdGhpbmc7Ci0KLSAgICAgICAgICAgIGZvciAoU3RyZWFtKiBzdHJl
YW0gOiB3ZWJLaXRNZWRpYVNyYy0+cHJpdi0+c3RyZWFtcykKLSAgICAgICAgICAgICAgICBzdHJl
YW0tPmFwcHNyY05lZWREYXRhRmxhZyA9IGZhbHNlOwotICAgICAgICB9CitzdHJ1Y3QgV2ViS2l0
TWVkaWFTcmNQcml2YXRlIHsKKyAgICBIYXNoTWFwPEF0b21TdHJpbmcsIFJlZlB0cjxTdHJlYW0+
PiBzdHJlYW1zOworICAgIFN0cmVhbSogc3RyZWFtQnlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIG5h
bWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBTdHJl
YW0qIHN0cmVhbSA9IHN0cmVhbXMuZ2V0KG5hbWUpOworICAgICAgICBBU1NFUlQoc3RyZWFtKTsK
KyAgICAgICAgcmV0dXJuIHN0cmVhbTsKICAgICB9Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sod2Vi
S2l0TWVkaWFTcmMpOwogCi0gICAgaWYgKGFsbEFwcHNyY05lZWREYXRhQWZ0ZXJTZWVrKSB7Ci0g
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qod2ViS2l0TWVkaWFTcmMsICJBbGwgZXhwZWN0ZWQgYXBw
c3JjU2Vla0RhdGEoKSBhbmQgYXBwc3JjTmVlZERhdGEoKSBjYWxscyBwZXJmb3JtZWQuIFJ1bm5p
bmcgbmV4dCBhY3Rpb24gKCVkKSIsIHN0YXRpY19jYXN0PGludD4oYXBwc3JjU2Vla0RhdGFOZXh0
QWN0aW9uKSk7CisgICAgLy8gVXNlZCBmb3Igc3RyZWFtLXN0YXJ0IGV2ZW50cywgc2hhcmVkIGJ5
IGFsbCBzdHJlYW1zLgorICAgIGNvbnN0IHVuc2lnbmVkIGdyb3VwSWQgeyBnc3RfdXRpbF9ncm91
cF9pZF9uZXh0KCkgfTsKIAotICAgICAgICBzd2l0Y2ggKGFwcHNyY1NlZWtEYXRhTmV4dEFjdGlv
bikgewotICAgICAgICBjYXNlIE1lZGlhU291cmNlU2Vla1RvVGltZToKLSAgICAgICAgICAgIHdl
YktpdE1lZGlhU3JjLT5wcml2LT5ub3RpZmllci0+bm90aWZ5KFdlYktpdE1lZGlhU3JjTWFpblRo
cmVhZE5vdGlmaWNhdGlvbjo6U2Vla05lZWRzRGF0YSwgW3dlYktpdE1lZGlhU3JjXSB7Ci0gICAg
ICAgICAgICAgICAgc2Vla05lZWRzRGF0YU1haW5UaHJlYWQod2ViS2l0TWVkaWFTcmMpOwotICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOb3RoaW5nOgot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGFwcHNyY1NlZWtE
YXRhTmV4dEFjdGlvbiA9PSBOb3RoaW5nKSB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHdl
YktpdE1lZGlhU3JjLT5wcml2LT5zdHJlYW1Mb2NrKTsKKyAgICAvLyBTZXQgb25jZSB3aGVuIHRo
ZSBzb3VyY2UgaXMgc3RhcnRlZC4gTm90IGNoYW5nZWQgYWZ0ZXIuCisgICAgR1JlZlB0cjxHc3RT
dHJlYW1Db2xsZWN0aW9uPiBjb2xsZWN0aW9uOworICAgIGJvb2wgaXNTdGFydGVkKCkgeyByZXR1
cm4gY29sbGVjdGlvbjsgfQogCi0gICAgICAgIEdTVF9PQkpFQ1RfTE9DSyh3ZWJLaXRNZWRpYVNy
Yyk7CisgICAgLy8gQ2hhbmdlZCBvbiBzZWVrcy4KKyAgICBHc3RDbG9ja1RpbWUgc3RhcnRUaW1l
IHsgMCB9OworICAgIGRvdWJsZSByYXRlIHsgMS4wIH07CiAKLSAgICAgICAgLy8gU2VhcmNoIGFn
YWluIGZvciB0aGUgU3RyZWFtLCBqdXN0IGluIGNhc2UgaXQgd2FzIHJlbW92ZWQgYmV0d2VlbiB0
aGUgcHJldmlvdXMgbG9jayBhbmQgdGhpcyBvbmUuCi0gICAgICAgIGFwcHNyY1N0cmVhbSA9IGdl
dFN0cmVhbUJ5QXBwc3JjKHdlYktpdE1lZGlhU3JjLCBHU1RfRUxFTUVOVChhcHBzcmMpKTsKKyAg
ICAvLyBPbmx5IHVzZWQgYnkgVVJJIEhhbmRsZXIgQVBJIGltcGxlbWVudGF0aW9uLgorICAgIEdV
bmlxdWVQdHI8Y2hhcj4gdXJpOworfTsKIAotICAgICAgICBpZiAoYXBwc3JjU3RyZWFtICYmIGFw
cHNyY1N0cmVhbS0+dHlwZSAhPSBXZWJDb3JlOjpJbnZhbGlkKQotICAgICAgICAgICAgd2ViS2l0
TWVkaWFTcmMtPnByaXYtPm5vdGlmaWVyLT5ub3RpZnkoV2ViS2l0TWVkaWFTcmNNYWluVGhyZWFk
Tm90aWZpY2F0aW9uOjpSZWFkeUZvck1vcmVTYW1wbGVzLCBbd2ViS2l0TWVkaWFTcmMsIGFwcHNy
Y1N0cmVhbV0gewotICAgICAgICAgICAgICAgIG5vdGlmeVJlYWR5Rm9yTW9yZVNhbXBsZXNNYWlu
VGhyZWFkKHdlYktpdE1lZGlhU3JjLCBhcHBzcmNTdHJlYW0pOwotICAgICAgICAgICAgfSk7Citz
dGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY1VyaUhhbmRsZXJJbml0KGdwb2ludGVyLCBncG9pbnRl
cik7CitzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY0NvbnN0cnVjdGVkKEdPYmplY3QqKTsKK3N0
YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjRmluYWxpemUoR09iamVjdCopOworc3RhdGljIEdzdFN0
YXRlQ2hhbmdlUmV0dXJuIHdlYktpdE1lZGlhU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCosIEdz
dFN0YXRlQ2hhbmdlKTsKK3N0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYVNyY0FjdGl2YXRlTW9k
ZShHc3RQYWQqLCBHc3RPYmplY3QqLCBHc3RQYWRNb2RlLCBnYm9vbGVhbiBhY3RpdmF0ZSk7Citz
dGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY0xvb3Aodm9pZCopOworc3RhdGljIHZvaWQgd2ViS2l0
TWVkaWFTcmNUZWFyRG93blN0cmVhbShXZWJLaXRNZWRpYVNyYyogc291cmNlLCBjb25zdCBBdG9t
U3RyaW5nJiBuYW1lKTsKK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjR2V0UHJvcGVydHkoR09i
amVjdCosIHVuc2lnbmVkIHByb3BJZCwgR1ZhbHVlKiwgR1BhcmFtU3BlYyopOworc3RhdGljIHZv
aWQgd2ViS2l0TWVkaWFTcmNTdHJlYW1GbHVzaChTdHJlYW0qLCBib29sIGlzU2Vla2luZ0ZsdXNo
KTsKK3N0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYVNyY1NlbmRFdmVudChHc3RFbGVtZW50Kiwg
R3N0RXZlbnQqKTsKIAotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyh3ZWJLaXRNZWRpYVNyYyk7
Ci0gICAgfQotfQorI2RlZmluZSB3ZWJraXRfbWVkaWFfc3JjX3BhcmVudF9jbGFzcyBwYXJlbnRf
Y2xhc3MKIAotc3RhdGljIHZvaWQgZW5hYmxlZEFwcHNyY0Vub3VnaERhdGEoR3N0QXBwU3JjICph
cHBzcmMsIGdwb2ludGVyIHVzZXJEYXRhKQotewotICAgIC8vIE5vIG5lZWQgdG8gbG9jayBvbiB3
ZWJLaXRNZWRpYVNyYywgd2UncmUgb24gdGhlIG1haW4gdGhyZWFkIGFuZCBub2JvZHkgaXMgZ29p
bmcgdG8gcmVtb3ZlIHRoZSBzdHJlYW0gaW4gdGhlIG1lYW50aW1lLgotICAgIEFTU0VSVChXVEY6
OmlzTWFpblRocmVhZCgpKTsKK3N0cnVjdCBXZWJLaXRNZWRpYVNyY1BhZFByaXZhdGUgeworICAg
IFJlZlB0cjxTdHJlYW0+IHN0cmVhbTsKK307CiAKLSAgICBXZWJLaXRNZWRpYVNyYyogd2ViS2l0
TWVkaWFTcmMgPSBzdGF0aWNfY2FzdDxXZWJLaXRNZWRpYVNyYyo+KHVzZXJEYXRhKTsKLSAgICBB
U1NFUlQoV0VCS0lUX0lTX01FRElBX1NSQyh3ZWJLaXRNZWRpYVNyYykpOwotICAgIFN0cmVhbSog
c3RyZWFtID0gZ2V0U3RyZWFtQnlBcHBzcmMod2ViS2l0TWVkaWFTcmMsIEdTVF9FTEVNRU5UKGFw
cHNyYykpOworc3RydWN0IFdlYktpdE1lZGlhU3JjUGFkIHsKKyAgICBHc3RQYWQgcGFyZW50Owor
ICAgIFdlYktpdE1lZGlhU3JjUGFkUHJpdmF0ZSogcHJpdjsKK307CiAKLSAgICAvLyBUaGlzIGNh
bGxiYWNrIG1pZ2h0IGhhdmUgYmVlbiBzY2hlZHVsZWQgZnJvbSBhIGNoaWxkIHRocmVhZCBiZWZv
cmUgdGhlIHN0cmVhbSB3YXMgcmVtb3ZlZC4KLSAgICAvLyBUaGVuLCB0aGUgcmVtb3ZhbCBjb2Rl
IG1pZ2h0IGhhdmUgcnVuLCBhbmQgbGF0ZXIgdGhpcyBjYWxsYmFjay4KLSAgICAvLyBUaGlzIGNo
ZWNrIHNvbHZlcyB0aGUgcmFjZSBjb25kaXRpb24uCi0gICAgaWYgKCFzdHJlYW0gfHwgc3RyZWFt
LT50eXBlID09IFdlYkNvcmU6OkludmFsaWQpCi0gICAgICAgIHJldHVybjsKK3N0cnVjdCBXZWJL
aXRNZWRpYVNyY1BhZENsYXNzIHsKKyAgICBHc3RQYWRDbGFzcyBwYXJlbnQ7Cit9OworCituYW1l
c3BhY2UgV1RGIHsKIAotICAgIHN0cmVhbS0+c291cmNlQnVmZmVyLT5zZXRSZWFkeUZvck1vcmVT
YW1wbGVzKGZhbHNlKTsKK3RlbXBsYXRlPD4gR1JlZlB0cjxXZWJLaXRNZWRpYVNyY1BhZD4gYWRv
cHRHUmVmKFdlYktpdE1lZGlhU3JjUGFkKiBwdHIpCit7CisgICAgQVNTRVJUKCFwdHIgfHwgIWdf
b2JqZWN0X2lzX2Zsb2F0aW5nKHB0cikpOworICAgIHJldHVybiBHUmVmUHRyPFdlYktpdE1lZGlh
U3JjUGFkPihwdHIsIEdSZWZQdHJBZG9wdCk7CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiBlbmFibGVk
QXBwc3JjU2Vla0RhdGEoR3N0QXBwU3JjKiwgZ3VpbnQ2NCwgZ3BvaW50ZXIgdXNlckRhdGEpCit0
ZW1wbGF0ZTw+IFdlYktpdE1lZGlhU3JjUGFkKiByZWZHUHRyPFdlYktpdE1lZGlhU3JjUGFkPihX
ZWJLaXRNZWRpYVNyY1BhZCogcHRyKQogewotICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgp
KTsKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZl9zaW5rKEdTVF9PQkpFQ1Qo
cHRyKSk7CiAKLSAgICBXZWJLaXRNZWRpYVNyYyogd2ViS2l0TWVkaWFTcmMgPSBzdGF0aWNfY2Fz
dDxXZWJLaXRNZWRpYVNyYyo+KHVzZXJEYXRhKTsKKyAgICByZXR1cm4gcHRyOworfQogCi0gICAg
QVNTRVJUKFdFQktJVF9JU19NRURJQV9TUkMod2ViS2l0TWVkaWFTcmMpKTsKK3RlbXBsYXRlPD4g
dm9pZCBkZXJlZkdQdHI8V2ViS2l0TWVkaWFTcmNQYWQ+KFdlYktpdE1lZGlhU3JjUGFkKiBwdHIp
Cit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIpOworfQogCi0g
ICAgR1NUX09CSkVDVF9MT0NLKHdlYktpdE1lZGlhU3JjKTsKLSAgICB3ZWJLaXRNZWRpYVNyYy0+
cHJpdi0+YXBwc3JjU2Vla0RhdGFDb3VudCsrOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHdlYktp
dE1lZGlhU3JjKTsKK30gLy8gbmFtZXNwYWNlIFdURgogCi0gICAgcmV0dXJuIFRSVUU7CitzdGF0
aWMgR1R5cGUgd2Via2l0X21lZGlhX3NyY19wYWRfZ2V0X3R5cGUoKTsKK1dFQktJVF9ERUZJTkVf
VFlQRShXZWJLaXRNZWRpYVNyY1BhZCwgd2Via2l0X21lZGlhX3NyY19wYWQsIEdTVF9UWVBFX1BB
RCk7CisjZGVmaW5lIFdFQktJVF9UWVBFX01FRElBX1NSQ19QQUQgKHdlYmtpdF9tZWRpYV9zcmNf
cGFkX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9NRURJQV9TUkNfUEFEKG9iaikgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9NRURJQV9TUkNfUEFELCBX
ZWJLaXRNZWRpYVNyY1BhZCkpCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9zcmNfcGFkX2Ns
YXNzX2luaXQoV2ViS2l0TWVkaWFTcmNQYWRDbGFzcyopCit7CiB9CiAKLXN0YXRpYyBTdHJlYW0q
IGdldFN0cmVhbUJ5QXBwc3JjKFdlYktpdE1lZGlhU3JjKiBzb3VyY2UsIEdzdEVsZW1lbnQqIGFw
cHNyYykKK1dFQktJVF9ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0TWVkaWFTcmMsIHdlYmtp
dF9tZWRpYV9zcmMsIEdTVF9UWVBFX0VMRU1FTlQsCisgICAgR19JTVBMRU1FTlRfSU5URVJGQUNF
KEdTVF9UWVBFX1VSSV9IQU5ETEVSLCB3ZWJLaXRNZWRpYVNyY1VyaUhhbmRsZXJJbml0KTsKKyAg
ICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfbWVkaWFfc3JjX2RlYnVnLCAid2Via2l0
bWVkaWFzcmMiLCAwLCAiV2ViS2l0IE1TRSBzb3VyY2UgZWxlbWVudCIpKTsKKworc3RydWN0IFN0
cmVhbSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTdHJlYW0+IHsKKyAgICBTdHJlYW0o
V2ViS2l0TWVkaWFTcmMqIHNvdXJjZSwgR1JlZlB0cjxHc3RQYWQ+JiYgcGFkLCBSZWY8TWVkaWFT
b3VyY2VUcmFja0dTdHJlYW1lcj4gdHJhY2ssIEdSZWZQdHI8R3N0U3RyZWFtPiYmIHN0cmVhbUlu
Zm8pCisgICAgICAgIDogc291cmNlKHNvdXJjZSkKKyAgICAgICAgLCBwYWQoV1RGTW92ZShwYWQp
KQorICAgICAgICAsIHRyYWNrKHRyYWNrKQorICAgICAgICAsIHN0cmVhbUluZm8oV1RGTW92ZShz
dHJlYW1JbmZvKSkKKyAgICAgICAgLCBzdHJlYW1pbmdNZW1iZXJzRGF0YU11dGV4KEdSZWZQdHIo
dHJhY2stPmluaXRpYWxDYXBzKCkpLCBzb3VyY2UtPnByaXYtPnN0YXJ0VGltZSwgc291cmNlLT5w
cml2LT5yYXRlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHRyYWNrLT5pbml0aWFsQ2FwcygpKTsK
KyAgICB9CisKKyAgICBXZWJLaXRNZWRpYVNyYyogY29uc3Qgc291cmNlOworICAgIEdSZWZQdHI8
R3N0UGFkPiBjb25zdCBwYWQ7CisgICAgUmVmPE1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXI+IHRy
YWNrOworICAgIEdSZWZQdHI8R3N0U3RyZWFtPiBzdHJlYW1JbmZvOworCisgICAgc3RydWN0IFN0
cmVhbWluZ01lbWJlcnMgeworICAgICAgICBTdHJlYW1pbmdNZW1iZXJzKEdSZWZQdHI8R3N0Q2Fw
cz4mJiBpbml0aWFsQ2FwcywgR3N0Q2xvY2tUaW1lIHN0YXJ0VGltZSwgZG91YmxlIHJhdGUpCisg
ICAgICAgICAgICA6IHBlbmRpbmdJbml0aWFsQ2FwcyhXVEZNb3ZlKGluaXRpYWxDYXBzKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgZ3N0X3NlZ21lbnRfaW5pdCgmc2VnbWVudCwgR1NUX0ZPUk1B
VF9USU1FKTsKKyAgICAgICAgICAgIHNlZ21lbnQuc3RhcnQgPSBzZWdtZW50LnRpbWUgPSBzdGFy
dFRpbWU7CisgICAgICAgICAgICBzZWdtZW50LnJhdGUgPSByYXRlOworICAgICAgICAgICAgQVNT
RVJUKHBlbmRpbmdJbml0aWFsQ2Fwcyk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGhhc1B1
c2hlZFN0cmVhbUNvbGxlY3Rpb25FdmVudCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgd2FzU3Ry
ZWFtU3RhcnRTZW50IHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBkb2VzTmVlZFNlZ21lbnRFdmVu
dCB7IHRydWUgfTsKKyAgICAgICAgYm9vbCBoYXNQdXNoZWRGaXJzdEJ1ZmZlciB7IGZhbHNlIH07
IC8vIFVzZWQgdG8gZ2V0IGEgcGlwZWxpbmUgZHVtcCBvZiB0aGUgcGlwZWxpbmUgYmVmb3JlIGJ1
ZmZlcnMgYXJlIGZsb3dpbmcuCisgICAgICAgIEdzdFNlZ21lbnQgc2VnbWVudDsKKyAgICAgICAg
R1JlZlB0cjxHc3RDYXBzPiBwZW5kaW5nSW5pdGlhbENhcHM7CisgICAgICAgIEdSZWZQdHI8R3N0
Q2Fwcz4gcHJldmlvdXNDYXBzOyAvLyBDYXBzIGZyb20gZW5xdWV1ZWQgc2FtcGxlcyBhcmUgY2Ft
cGFyZWQgdG8gdGhlc2UgdG8gcHVzaCBDQVBTIGV2ZW50cyBhcyBuZWVkZWQuCisgICAgICAgIENv
bmRpdGlvbiBwYWRMaW5rZWRPckZsdXNoZWRDb25kaXRpb247CisgICAgICAgIENvbmRpdGlvbiBx
dWV1ZUNoYW5nZWRPckZsdXNoZWRDb25kaXRpb247CisgICAgICAgIGJvb2wgaXNGbHVzaGluZyB7
IGZhbHNlIH07CisKKyAgICAgICAgLy8gRmx1c2hlcyBiZWZvcmUgYW55IGJ1ZmZlciBoYXMgYmVl
biBwb3BwZWQgZnJvbSB0aGUgcXVldWUgYW5kIHNlbnQgZG93bnN0cmVhbSBjYW4gYmUgYXZvaWRl
ZCBqdXN0CisgICAgICAgIC8vIGJ5IGNsZWFyaW5nIHRoZSBxdWV1ZS4KKyAgICAgICAgYm9vbCBo
YXNQb3BwZWRGaXJzdE9iamVjdCB7IGZhbHNlIH07CisgICAgfTsKKyAgICBEYXRhTXV0ZXg8U3Ry
ZWFtaW5nTWVtYmVycz4gc3RyZWFtaW5nTWVtYmVyc0RhdGFNdXRleDsKK307CisKK3N0YXRpYyBH
UmVmUHRyPEdzdEVsZW1lbnQ+IGZpbmRQaXBlbGluZShHUmVmUHRyPEdzdEVsZW1lbnQ+IGVsZW1l
bnQpCiB7Ci0gICAgZm9yIChTdHJlYW0qIHN0cmVhbSA6IHNvdXJjZS0+cHJpdi0+c3RyZWFtcykg
ewotICAgICAgICBpZiAoc3RyZWFtLT5hcHBzcmMgPT0gYXBwc3JjKQotICAgICAgICAgICAgcmV0
dXJuIHN0cmVhbTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBHUmVmUHRyPEdzdEVsZW1l
bnQ+IHBhcmVudEVsZW1lbnQgPSBhZG9wdEdSZWYoR1NUX0VMRU1FTlQoZ3N0X2VsZW1lbnRfZ2V0
X3BhcmVudChlbGVtZW50LmdldCgpKSkpOworICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQpCisg
ICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICAgICAgZWxlbWVudCA9IHBhcmVudEVsZW1l
bnQ7CiAgICAgfQotICAgIHJldHVybiBudWxscHRyOwogfQogCi1HX0RFRklORV9UWVBFX1dJVEhf
Q09ERShXZWJLaXRNZWRpYVNyYywgd2Via2l0X21lZGlhX3NyYywgR1NUX1RZUEVfQklOLAotICAg
IEdfSU1QTEVNRU5UX0lOVEVSRkFDRShHU1RfVFlQRV9VUklfSEFORExFUiwgd2ViS2l0TWVkaWFT
cmNVcmlIYW5kbGVySW5pdCk7Ci0gICAgV0VCS0lUX01FRElBX1NSQ19DQVRFR09SWV9JTklUKTsK
K3N0YXRpYyBHc3RTdHJlYW1UeXBlIGdzdFN0cmVhbVR5cGUoVHJhY2tQcml2YXRlQmFzZUdTdHJl
YW1lcjo6VHJhY2tUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBU
cmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OlZpZGVvOgorICAgICAgICByZXR1
cm4gR1NUX1NUUkVBTV9UWVBFX1ZJREVPOworICAgIGNhc2UgVHJhY2tQcml2YXRlQmFzZUdTdHJl
YW1lcjo6VHJhY2tUeXBlOjpBdWRpbzoKKyAgICAgICAgcmV0dXJuIEdTVF9TVFJFQU1fVFlQRV9B
VURJTzsKKyAgICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6VGV4
dDoKKyAgICAgICAgcmV0dXJuIEdTVF9TVFJFQU1fVFlQRV9URVhUOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEdTVF9FUlJPUigiUmVjZWl2ZWQgdW5leHBlY3RlZCBzdHJlYW0gdHlwZSIpOworICAg
ICAgICByZXR1cm4gR1NUX1NUUkVBTV9UWVBFX1VOS05PV047CisgICAgfQorfQogCi1ndWludCB3
ZWJLaXRNZWRpYVNyY1NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07CisjaWZuZGVmIEdTVF9E
SVNBQkxFX0dTVF9ERUJVRworc3RhdGljIGNvbnN0IGNoYXIqIHN0cmVhbVR5cGVUb1N0cmluZyhU
cmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6
QXVkaW86CisgICAgICAgIHJldHVybiAiQXVkaW8iOworICAgIGNhc2UgVHJhY2tQcml2YXRlQmFz
ZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpWaWRlbzoKKyAgICAgICAgcmV0dXJuICJWaWRlbyI7Cisg
ICAgY2FzZSBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OlRleHQ6CisgICAg
ICAgIHJldHVybiAiVGV4dCI7CisgICAgZGVmYXVsdDoKKyAgICBjYXNlIFRyYWNrUHJpdmF0ZUJh
c2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6VW5rbm93bjoKKyAgICAgICAgcmV0dXJuICJVbmtub3du
IjsKKyAgICB9Cit9CisjZW5kaWYgLy8gR1NUX0RJU0FCTEVfR1NUX0RFQlVHCiAKIHN0YXRpYyB2
b2lkIHdlYmtpdF9tZWRpYV9zcmNfY2xhc3NfaW5pdChXZWJLaXRNZWRpYVNyY0NsYXNzKiBrbGFz
cykKIHsKICAgICBHT2JqZWN0Q2xhc3MqIG9rbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsK
ICAgICBHc3RFbGVtZW50Q2xhc3MqIGVrbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTKGtsYXNzKTsK
IAorICAgIG9rbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJLaXRNZWRpYVNyY0NvbnN0cnVjdGVkOwog
ICAgIG9rbGFzcy0+ZmluYWxpemUgPSB3ZWJLaXRNZWRpYVNyY0ZpbmFsaXplOwotICAgIG9rbGFz
cy0+c2V0X3Byb3BlcnR5ID0gd2ViS2l0TWVkaWFTcmNTZXRQcm9wZXJ0eTsKICAgICBva2xhc3Mt
PmdldF9wcm9wZXJ0eSA9IHdlYktpdE1lZGlhU3JjR2V0UHJvcGVydHk7CiAKLSAgICBnc3RfZWxl
bWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlKGVrbGFzcywgZ3N0X3N0YXRpY19wYWRfdGVtcGxh
dGVfZ2V0KCZzcmNUZW1wbGF0ZSkpOworICAgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNf
cGFkX3RlbXBsYXRlX3dpdGhfZ3R5cGUoZWtsYXNzLCAmc3JjVGVtcGxhdGUsIHdlYmtpdF9tZWRp
YV9zcmNfcGFkX2dldF90eXBlKCkpOwogCi0gICAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRp
Y19tZXRhZGF0YShla2xhc3MsICJXZWJLaXQgTWVkaWEgc291cmNlIGVsZW1lbnQiLCAiU291cmNl
IiwgIkhhbmRsZXMgQmxvYiB1cmlzIiwgIlN0ZXBoYW5lIEphZGF1ZCA8c2phZGF1ZEBzaWkuZnI+
LCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPiwgRW5yaXF1ZSBP
Y2HDsWEgR29uesOhbGV6IDxlb2NhbmhhQGlnYWxpYS5jb20+Iik7CisgICAgZ3N0X2VsZW1lbnRf
Y2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YShla2xhc3MsICJXZWJLaXQgTWVkaWFTb3VyY2Ugc291
cmNlIGVsZW1lbnQiLCAiU291cmNlL05ldHdvcmsiLCAiRmVlZHMgc2FtcGxlcyBjb21pbmcgZnJv
bSBXZWJLaXQgTWVkaWFTb3VyY2Ugb2JqZWN0IiwgIklnYWxpYSA8YWJveWFAaWdhbGlhLmNvbT4i
KTsKIAotICAgIC8vIEFsbG93cyBzZXR0aW5nIHRoZSB1cmkgdXNpbmcgdGhlICdsb2NhdGlvbicg
cHJvcGVydHksIHdoaWNoIGlzIHVzZWQgZm9yIGV4YW1wbGUgYnkgZ3N0X2VsZW1lbnRfbWFrZV9m
cm9tX3VyaSgpLgotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2tsYXNzLAot
ICAgICAgICBQUk9QX0xPQ0FUSU9OLAotICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJsb2Nh
dGlvbiIsICJsb2NhdGlvbiIsICJMb2NhdGlvbiB0byByZWFkIGZyb20iLCBudWxscHRyLAotICAg
ICAgICBHUGFyYW1GbGFncyhHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklO
R1MpKSk7CisgICAgZWtsYXNzLT5jaGFuZ2Vfc3RhdGUgPSB3ZWJLaXRNZWRpYVNyY0NoYW5nZVN0
YXRlOworICAgIGVrbGFzcy0+c2VuZF9ldmVudCA9IHdlYktpdE1lZGlhU3JjU2VuZEV2ZW50Owog
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2tsYXNzLAogICAgICAgICBQUk9Q
X05fQVVESU8sCiAgICAgICAgIGdfcGFyYW1fc3BlY19pbnQoIm4tYXVkaW8iLCAiTnVtYmVyIEF1
ZGlvIiwgIlRvdGFsIG51bWJlciBvZiBhdWRpbyBzdHJlYW1zIiwKQEAgLTIyMSw0MzIgKzI2NSw1
MTYgQEAgc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX3NyY19jbGFzc19pbml0KFdlYktpdE1lZGlh
U3JjQ2xhc3MqIGtsYXNzKQogICAgICAgICBQUk9QX05fVEVYVCwKICAgICAgICAgZ19wYXJhbV9z
cGVjX2ludCgibi10ZXh0IiwgIk51bWJlciBUZXh0IiwgIlRvdGFsIG51bWJlciBvZiB0ZXh0IHN0
cmVhbXMiLAogICAgICAgICAwLCBHX01BWElOVCwgMCwgR1BhcmFtRmxhZ3MoR19QQVJBTV9SRUFE
QUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7Ci0KLSAgICB3ZWJLaXRNZWRpYVNyY1Np
Z25hbHNbU0lHTkFMX1ZJREVPX0NIQU5HRURdID0KLSAgICAgICAgZ19zaWduYWxfbmV3KCJ2aWRl
by1jaGFuZ2VkIiwgR19UWVBFX0ZST01fQ0xBU1Mob2tsYXNzKSwKLSAgICAgICAgR19TSUdOQUxf
UlVOX0xBU1QsCi0gICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRNZWRpYVNyY0NsYXNzLCB2
aWRlb0NoYW5nZWQpLCBudWxscHRyLCBudWxscHRyLAotICAgICAgICBnX2NjbG9zdXJlX21hcnNo
YWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDAsIEdfVFlQRV9OT05FKTsKLSAgICB3ZWJLaXRNZWRp
YVNyY1NpZ25hbHNbU0lHTkFMX0FVRElPX0NIQU5HRURdID0KLSAgICAgICAgZ19zaWduYWxfbmV3
KCJhdWRpby1jaGFuZ2VkIiwgR19UWVBFX0ZST01fQ0xBU1Mob2tsYXNzKSwKLSAgICAgICAgR19T
SUdOQUxfUlVOX0xBU1QsCi0gICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRNZWRpYVNyY0Ns
YXNzLCBhdWRpb0NoYW5nZWQpLCBudWxscHRyLCBudWxscHRyLAotICAgICAgICBnX2NjbG9zdXJl
X21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDAsIEdfVFlQRV9OT05FKTsKLSAgICB3ZWJL
aXRNZWRpYVNyY1NpZ25hbHNbU0lHTkFMX1RFWFRfQ0hBTkdFRF0gPQotICAgICAgICBnX3NpZ25h
bF9uZXcoInRleHQtY2hhbmdlZCIsIEdfVFlQRV9GUk9NX0NMQVNTKG9rbGFzcyksCi0gICAgICAg
IEdfU0lHTkFMX1JVTl9MQVNULAotICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0TWVkaWFT
cmNDbGFzcywgdGV4dENoYW5nZWQpLCBudWxscHRyLCBudWxscHRyLAotICAgICAgICBnX2NjbG9z
dXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDAsIEdfVFlQRV9OT05FKTsKLQotICAg
IGVrbGFzcy0+Y2hhbmdlX3N0YXRlID0gd2ViS2l0TWVkaWFTcmNDaGFuZ2VTdGF0ZTsKLQotICAg
IGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdE1lZGlhU3JjUHJp
dmF0ZSkpOwogfQogCi1zdGF0aWMgR3N0Rmxvd1JldHVybiB3ZWJraXRNZWRpYVNyY0NoYWluKEdz
dFBhZCogcGFkLCBHc3RPYmplY3QqIHBhcmVudCwgR3N0QnVmZmVyKiBidWZmZXIpCitzdGF0aWMg
dm9pZCB3ZWJLaXRNZWRpYVNyY0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKIHsKLSAgICBH
UmVmUHRyPFdlYktpdE1lZGlhU3JjPiBzZWxmID0gYWRvcHRHUmVmKFdFQktJVF9NRURJQV9TUkMo
Z3N0X29iamVjdF9nZXRfcGFyZW50KHBhcmVudCkpKTsKKyAgICBHU1RfQ0FMTF9QQVJFTlQoR19P
QkpFQ1RfQ0xBU1MsIGNvbnN0cnVjdGVkLCAob2JqZWN0KSk7CiAKLSAgICByZXR1cm4gZ3N0X2Zs
b3dfY29tYmluZXJfdXBkYXRlX3BhZF9mbG93KHNlbGYtPnByaXYtPmZsb3dDb21iaW5lci5nZXQo
KSwgcGFkLCBnc3RfcHJveHlfcGFkX2NoYWluX2RlZmF1bHQocGFkLCBHU1RfT0JKRUNUKHNlbGYu
Z2V0KCkpLCBidWZmZXIpKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEdTVF9P
QkpFQ1RfRkxBR19TRVQob2JqZWN0LCBHU1RfRUxFTUVOVF9GTEFHX1NPVVJDRSk7CiB9CiAKLXN0
YXRpYyB2b2lkIHdlYmtpdF9tZWRpYV9zcmNfaW5pdChXZWJLaXRNZWRpYVNyYyogc291cmNlKQor
c3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiB7Ci0g
ICAgc291cmNlLT5wcml2ID0gV0VCS0lUX01FRElBX1NSQ19HRVRfUFJJVkFURShzb3VyY2UpOwot
ICAgIG5ldyAoc291cmNlLT5wcml2KSBXZWJLaXRNZWRpYVNyY1ByaXZhdGUoKTsKLSAgICBzb3Vy
Y2UtPnByaXYtPnNlZWtUaW1lID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwotICAgIHNvdXJj
ZS0+cHJpdi0+YXBwc3JjU2Vla0RhdGFDb3VudCA9IDA7Ci0gICAgc291cmNlLT5wcml2LT5hcHBz
cmNOZWVkRGF0YUNvdW50ID0gMDsKLSAgICBzb3VyY2UtPnByaXYtPmFwcHNyY1NlZWtEYXRhTmV4
dEFjdGlvbiA9IE5vdGhpbmc7Ci0gICAgc291cmNlLT5wcml2LT5mbG93Q29tYmluZXIgPSBHVW5p
cXVlUHRyPEdzdEZsb3dDb21iaW5lcj4oZ3N0X2Zsb3dfY29tYmluZXJfbmV3KCkpOwotICAgIHNv
dXJjZS0+cHJpdi0+bm90aWZpZXIgPSBXZWJDb3JlOjpNYWluVGhyZWFkTm90aWZpZXI8V2ViS2l0
TWVkaWFTcmNNYWluVGhyZWFkTm90aWZpY2F0aW9uPjo6Y3JlYXRlKCk7Ci0KLSAgICAvLyBObyBu
ZWVkIHRvIHJlc2V0IFN0cmVhbS5hcHBzcmNOZWVkRGF0YUZsYWcgYmVjYXVzZSB0aGVyZSBhcmUg
bm8gU3RyZWFtcyBhdCB0aGlzIHBvaW50IHlldC4KKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworCisgICAgV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSA9IFdFQktJVF9NRURJQV9TUkMob2JqZWN0
KTsKKyAgICBzb3VyY2UtPnByaXYtPn5XZWJLaXRNZWRpYVNyY1ByaXZhdGUoKTsKKyAgICBHU1Rf
Q0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1MsIGZpbmFsaXplLCAob2JqZWN0KSk7CiB9CiAKLXZv
aWQgd2ViS2l0TWVkaWFTcmNGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit2b2lkIHdlYktpdE1l
ZGlhU3JjRW1pdFN0cmVhbXMoV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSwgY29uc3QgVmVjdG9yPFJl
ZlB0cjxNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyPj4mIHRyYWNrcykKIHsKLSAgICBBU1NFUlQo
V1RGOjppc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBB
U1NFUlQoIXNvdXJjZS0+cHJpdi0+aXNTdGFydGVkKCkpOworICAgIEdTVF9ERUJVR19PQkpFQ1Qo
c291cmNlLCAiRW1pdHRpbmcgU1RSRUFNX0NPTExFQ1RJT04iKTsKIAotICAgIFdlYktpdE1lZGlh
U3JjKiBzb3VyY2UgPSBXRUJLSVRfTUVESUFfU1JDKG9iamVjdCk7Ci0gICAgV2ViS2l0TWVkaWFT
cmNQcml2YXRlKiBwcml2ID0gc291cmNlLT5wcml2OworICAgIHNvdXJjZS0+cHJpdi0+Y29sbGVj
dGlvbiA9IGFkb3B0R1JlZihnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fbmV3KCJXZWJLaXRNZWRpYVNy
YyIpKTsKKyAgICBmb3IgKFJlZlB0cjxNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyPiB0cmFjayA6
IHRyYWNrcykgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNvdXJjZSwgIkFkZGluZyBzdHJl
YW0gd2l0aCB0cmFja0lkICclcycgb2YgdHlwZSAlcyB3aXRoIGNhcHMgJSIgR1NUX1BUUl9GT1JN
QVQsIHRyYWNrLT50cmFja0lkKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3RyZWFtVHlwZVRv
U3RyaW5nKHRyYWNrLT50eXBlKCkpLCB0cmFjay0+aW5pdGlhbENhcHMoKS5nZXQoKSk7CiAKLSAg
ICBHU1RfREVCVUdfT0JKRUNUKHNvdXJjZSwgIkZpbmFsaXppbmcgJXAiLCBzb3VyY2UpOwotICAg
IFZlY3RvcjxTdHJlYW0qPiBvbGRTdHJlYW1zOwotICAgIHNvdXJjZS0+cHJpdi0+c3RyZWFtcy5z
d2FwKG9sZFN0cmVhbXMpOworICAgICAgICBHUmVmUHRyPFdlYktpdE1lZGlhU3JjUGFkPiBwYWQg
PSBXRUJLSVRfTUVESUFfU1JDX1BBRChnX29iamVjdF9uZXcod2Via2l0X21lZGlhX3NyY19wYWRf
Z2V0X3R5cGUoKSwgIm5hbWUiLCBtYWtlU3RyaW5nKCJzcmNfIiwgdHJhY2stPnRyYWNrSWQoKSku
dXRmOCgpLmRhdGEoKSwgImRpcmVjdGlvbiIsIEdTVF9QQURfU1JDLCBOVUxMKSk7CisgICAgICAg
IGdzdF9wYWRfc2V0X2FjdGl2YXRlbW9kZV9mdW5jdGlvbihHU1RfUEFEKHBhZC5nZXQoKSksIHdl
YktpdE1lZGlhU3JjQWN0aXZhdGVNb2RlKTsKIAotICAgIGZvciAoU3RyZWFtKiBzdHJlYW0gOiBv
bGRTdHJlYW1zKQotICAgICAgICB3ZWJLaXRNZWRpYVNyY0ZyZWVTdHJlYW0oc291cmNlLCBzdHJl
YW0pOworICAgICAgICBBU1NFUlQodHJhY2stPmluaXRpYWxDYXBzKCkpOworICAgICAgICBSZWZQ
dHI8U3RyZWFtPiBzdHJlYW0gPSBhZG9wdFJlZihuZXcgU3RyZWFtKHNvdXJjZSwgR1JlZlB0cjxH
c3RQYWQ+KEdTVF9QQUQocGFkLmdldCgpKSksIG1ha2VSZWYoKnRyYWNrKSwKKyAgICAgICAgICAg
IGFkb3B0R1JlZihnc3Rfc3RyZWFtX25ldyh0cmFjay0+dHJhY2tJZCgpLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCksIHRyYWNrLT5pbml0aWFsQ2FwcygpLmdldCgpLCBnc3RTdHJlYW1UeXBlKHRyYWNr
LT50eXBlKCkpLCBHU1RfU1RSRUFNX0ZMQUdfU0VMRUNUKSkpKTsKKyAgICAgICAgcGFkLT5wcml2
LT5zdHJlYW0gPSBzdHJlYW07CiAKLSAgICBwcml2LT5zZWVrVGltZSA9IE1lZGlhVGltZTo6aW52
YWxpZFRpbWUoKTsKKyAgICAgICAgZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2FkZF9zdHJlYW0oc291
cmNlLT5wcml2LT5jb2xsZWN0aW9uLmdldCgpLCBHUmVmUHRyPEdzdFN0cmVhbT4oc3RyZWFtLT5z
dHJlYW1JbmZvLmdldCgpKS5sZWFrUmVmKCkpOworICAgICAgICBzb3VyY2UtPnByaXYtPnN0cmVh
bXMuc2V0KHRyYWNrLT50cmFja0lkKCksIFdURk1vdmUoc3RyZWFtKSk7CisgICAgfQogCi0gICAg
c291cmNlLT5wcml2LT5ub3RpZmllci0+aW52YWxpZGF0ZSgpOworICAgIGdzdF9lbGVtZW50X3Bv
c3RfbWVzc2FnZShHU1RfRUxFTUVOVChzb3VyY2UpLCBnc3RfbWVzc2FnZV9uZXdfc3RyZWFtX2Nv
bGxlY3Rpb24oR1NUX09CSkVDVChzb3VyY2UpLCBzb3VyY2UtPnByaXYtPmNvbGxlY3Rpb24uZ2V0
KCkpKTsKIAotICAgIGlmIChwcml2LT5tZWRpYVBsYXllclByaXZhdGUpCi0gICAgICAgIHdlYktp
dE1lZGlhU3JjU2V0TWVkaWFQbGF5ZXJQcml2YXRlKHNvdXJjZSwgbnVsbHB0cik7CisgICAgZm9y
IChhdXRvJiBwYWlyIDogc291cmNlLT5wcml2LT5zdHJlYW1zKSB7CisgICAgICAgIGNvbnN0IFJl
ZlB0cjxTdHJlYW0+JiBzdHJlYW0gPSBwYWlyLnZhbHVlOwogCi0gICAgLy8gV2UgdXNlZCBhIHBs
YWNlbWVudCBuZXcgZm9yIGNvbnN0cnVjdGlvbiwgdGhlIGRlc3RydWN0b3Igd29uJ3QgYmUgY2Fs
bGVkIGF1dG9tYXRpY2FsbHkuCi0gICAgcHJpdi0+fl9XZWJLaXRNZWRpYVNyY1ByaXZhdGUoKTsK
KyAgICAgICAgLy8gV29ya2Fyb3VuZDogZ3N0X2VsZW1lbnRfYWRkX3BhZCgpIHNob3VsZCBhbHJl
YWR5IGNhbGwgZ3N0X3BhZF9zZXRfYWN0aXZlKCkgaWYgdGhlIGVsZW1lbnQgaXMgUEFVU0VEIG9y
CisgICAgICAgIC8vIFBMQVlJTkcuIFVuZm9ydHVuYXRlbHksIGFzIG9mIEdTdHJlYW1lciAxLjE4
LjIgaXQgZG9lcyBzbyB3aXRoIHRoZSBlbGVtZW50IGxvY2sgdGFrZW4sIGNhdXNpbmcgYSBkZWFk
bG9jaworICAgICAgICAvLyBpbiBnc3RfcGFkX3N0YXJ0X3Rhc2soKSwgd2hvIHRyaWVzIHRvIHBv
c3QgYSBgc3RyZWFtLXN0YXR1c2AgbWVzc2FnZSBpbiB0aGUgZWxlbWVudCwgd2hpY2ggYWxzbyBy
ZXF1aXJlcworICAgICAgICAvLyB0aGUgZWxlbWVudCBsb2NrLiBBY3RpdmF0aW5nIHRoZSBwYWQg
YmVmb3JlaGFuZCBhdm9pZHMgdGhhdCBjb2RlcGF0aC4KKyAgICAgICAgLy8gaHR0cHM6Ly9naXRs
YWIuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3RyZWFtZXIvLS9tZXJnZV9yZXF1ZXN0cy8y
MTAKKyAgICAgICAgR3N0U3RhdGUgc3RhdGU7CisgICAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0
ZShHU1RfRUxFTUVOVChzb3VyY2UpLCAmc3RhdGUsIG51bGxwdHIsIDApOworICAgICAgICBpZiAo
c3RhdGUgPiBHU1RfU1RBVEVfUkVBRFkpCisgICAgICAgICAgICBnc3RfcGFkX3NldF9hY3RpdmUo
R1NUX1BBRChzdHJlYW0tPnBhZC5nZXQoKSksIHRydWUpOwogCi0gICAgR1NUX0NBTExfUEFSRU5U
KEdfT0JKRUNUX0NMQVNTLCBmaW5hbGl6ZSwgKG9iamVjdCkpOworICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKHNvdXJjZSwgIkFkZGluZyBwYWQgJyVzJyBmb3Igc3RyZWFtIHdpdGggbmFtZSAnJXMn
IiwgR1NUX09CSkVDVF9OQU1FKHN0cmVhbS0+cGFkLmdldCgpKSwgc3RyZWFtLT50cmFjay0+dHJh
Y2tJZCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBnc3RfZWxlbWVudF9hZGRf
cGFkKEdTVF9FTEVNRU5UKHNvdXJjZSksIEdTVF9QQUQoc3RyZWFtLT5wYWQuZ2V0KCkpKTsKKyAg
ICB9CisgICAgR1NUX0RFQlVHX09CSkVDVChzb3VyY2UsICJBbGwgcGFkcyBhZGRlZCIpOwogfQog
Ci12b2lkIHdlYktpdE1lZGlhU3JjU2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wSWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQorc3RhdGljIHZv
aWQgd2ViS2l0TWVkaWFTcmNUZWFyRG93blN0cmVhbShXZWJLaXRNZWRpYVNyYyogc291cmNlLCBj
b25zdCBBdG9tU3RyaW5nJiBuYW1lKQogewotICAgIFdlYktpdE1lZGlhU3JjKiBzb3VyY2UgPSBX
RUJLSVRfTUVESUFfU1JDKG9iamVjdCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBTdHJlYW0qIHN0cmVhbSA9IHNvdXJjZS0+cHJpdi0+c3RyZWFtQnlOYW1lKG5hbWUpOworICAg
IEdTVF9ERUJVR19PQkpFQ1Qoc291cmNlLCAiVGVhcmluZyBkb3duIHN0cmVhbSAnJXMnIiwgbmFt
ZS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAotICAgIHN3aXRjaCAocHJvcElkKSB7Ci0gICAg
Y2FzZSBQUk9QX0xPQ0FUSU9OOgotICAgICAgICBnc3RfdXJpX2hhbmRsZXJfc2V0X3VyaShyZWlu
dGVycHJldF9jYXN0PEdzdFVSSUhhbmRsZXIqPihzb3VyY2UpLCBnX3ZhbHVlX2dldF9zdHJpbmco
dmFsdWUpLCBudWxscHRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElkLCBwc3BlYyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICAvLyBGbHVzaCB0aGUgc291cmNlIGVsZW1lbnQg
KiphbmQqKiBkb3duc3RyZWFtLiBXZSB3YW50IHRvIHN0b3AgdGhlIHN0cmVhbWluZyB0aHJlYWQg
YW5kIGZvciB0aGF0IHdlIG5lZWQgYWxsIGVsZW1lbnRzIGRvd25zdHJlYW0gdG8gYmUgaWRsZS4K
KyAgICB3ZWJLaXRNZWRpYVNyY1N0cmVhbUZsdXNoKHN0cmVhbSwgZmFsc2UpOworICAgIC8vIFN0
b3AgdGhlIHRocmVhZCBub3cuCisgICAgZ3N0X3BhZF9zZXRfYWN0aXZlKHN0cmVhbS0+cGFkLmdl
dCgpLCBmYWxzZSk7CisKKyAgICBpZiAoc291cmNlLT5wcml2LT5pc1N0YXJ0ZWQoKSkKKyAgICAg
ICAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZChHU1RfRUxFTUVOVChzb3VyY2UpLCBzdHJlYW0tPnBh
ZC5nZXQoKSk7CisgICAgc291cmNlLT5wcml2LT5zdHJlYW1zLnJlbW92ZShuYW1lKTsKIH0KIAot
dm9pZCB3ZWJLaXRNZWRpYVNyY0dldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cElkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJLaXRNZWRpYVNyY0FjdGl2YXRlTW9kZShHc3RQYWQqIHBhZCwgR3N0T2JqZWN0KiBzb3VyY2Us
IEdzdFBhZE1vZGUgbW9kZSwgZ2Jvb2xlYW4gYWN0aXZlKQogewotICAgIFdlYktpdE1lZGlhU3Jj
KiBzb3VyY2UgPSBXRUJLSVRfTUVESUFfU1JDKG9iamVjdCk7Ci0gICAgV2ViS2l0TWVkaWFTcmNQ
cml2YXRlKiBwcml2ID0gc291cmNlLT5wcml2OworICAgIGlmIChtb2RlICE9IEdTVF9QQURfTU9E
RV9QVVNIKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc291cmNlLCAiVW5leHBlY3RlZCBw
YWQgbW9kZSBpbiBXZWJLaXRNZWRpYVNyYyIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQogCi0gICAgR1NUX09CSkVDVF9MT0NLKHNvdXJjZSk7Ci0gICAgc3dpdGNoIChwcm9wSWQpIHsK
LSAgICBjYXNlIFBST1BfTE9DQVRJT046Ci0gICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1
ZSwgcHJpdi0+bG9jYXRpb24uZ2V0KCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1Bf
Tl9BVURJTzoKLSAgICAgICAgZ192YWx1ZV9zZXRfaW50KHZhbHVlLCBwcml2LT5udW1iZXJPZkF1
ZGlvU3RyZWFtcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9OX1ZJREVPOgotICAg
ICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHByaXYtPm51bWJlck9mVmlkZW9TdHJlYW1zKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05fVEVYVDoKLSAgICAgICAgZ192YWx1ZV9z
ZXRfaW50KHZhbHVlLCBwcml2LT5udW1iZXJPZlRleHRTdHJlYW1zKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcElkLCBwc3BlYyk7Ci0gICAgICAgIGJyZWFrOworICAgIGlmIChhY3RpdmUp
CisgICAgICAgIGdzdF9wYWRfc3RhcnRfdGFzayhwYWQsIHdlYktpdE1lZGlhU3JjTG9vcCwgcGFk
LCBudWxscHRyKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gVW5ibG9jayB0aGUgc3RyZWFtaW5n
IHRocmVhZC4KKyAgICAgICAgUmVmUHRyPFN0cmVhbT4mIHN0cmVhbSA9IFdFQktJVF9NRURJQV9T
UkNfUEFEKHBhZCktPnByaXYtPnN0cmVhbTsKKyAgICAgICAgeworICAgICAgICAgICAgRGF0YU11
dGV4PFN0cmVhbTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgc3RyZWFtaW5nTWVt
YmVycyhzdHJlYW0tPnN0cmVhbWluZ01lbWJlcnNEYXRhTXV0ZXgpOworICAgICAgICAgICAgc3Ry
ZWFtaW5nTWVtYmVycy0+aXNGbHVzaGluZyA9IHRydWU7CisgICAgICAgICAgICBzdHJlYW1pbmdN
ZW1iZXJzLT5wYWRMaW5rZWRPckZsdXNoZWRDb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgICAg
ICAgICBzdHJlYW1pbmdNZW1iZXJzLT5xdWV1ZUNoYW5nZWRPckZsdXNoZWRDb25kaXRpb24ubm90
aWZ5T25lKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gRm9sbG93aW5nIGdzdGJhc2VzcmMgaW1w
bGVtZW50YXRpb24sIHRoaXMgY29kZSBpcyBub3QgZmx1c2hpbmcgZG93bnN0cmVhbS4KKyAgICAg
ICAgLy8gSWYgdGhlcmUgaXMgYW55IHBvc3NpYmlsaXR5IG9mIHRoZSBzdHJlYW1pbmcgdGhyZWFk
IGJlaW5nIGJsb2NrZWQgZG93bnN0cmVhbSB0aGUgY2FsbGVyIE1VU1QgZmx1c2ggYmVmb3JlLgor
ICAgICAgICAvLyBPdGhlcndpc2UgYSBkZWFkbG9jayB3b3VsZCBvY2N1ciBhcyB0aGUgbmV4dCBm
dW5jdGlvbiB0cmllcyB0byBqb2luIHRoZSB0aHJlYWQuCisgICAgICAgIGdzdF9wYWRfc3RvcF90
YXNrKHBhZCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIERhdGFNdXRleDxTdHJlYW06OlN0cmVh
bWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyIHN0cmVhbWluZ01lbWJlcnMoc3RyZWFtLT5zdHJl
YW1pbmdNZW1iZXJzRGF0YU11dGV4KTsKKyAgICAgICAgICAgIHN0cmVhbWluZ01lbWJlcnMtPmlz
Rmx1c2hpbmcgPSBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KLSAgICBHU1RfT0JKRUNUX1VOTE9D
Syhzb3VyY2UpOworICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIHdlYktpdE1lZGlhU3JjRG9B
c3luY1N0YXJ0KFdlYktpdE1lZGlhU3JjKiBzb3VyY2UpCitzdGF0aWMgdm9pZCB3ZWJLaXRNZWRp
YVNyY1BhZExpbmtlZChHc3RQYWQqIHBhZCwgR3N0UGFkKiwgdm9pZCopCiB7Ci0gICAgc291cmNl
LT5wcml2LT5hc3luY1N0YXJ0ID0gdHJ1ZTsKLSAgICBHU1RfQklOX0NMQVNTKHBhcmVudF9jbGFz
cyktPmhhbmRsZV9tZXNzYWdlKEdTVF9CSU4oc291cmNlKSwKLSAgICAgICAgZ3N0X21lc3NhZ2Vf
bmV3X2FzeW5jX3N0YXJ0KEdTVF9PQkpFQ1Qoc291cmNlKSkpOworICAgIFJlZlB0cjxTdHJlYW0+
JiBzdHJlYW0gPSBXRUJLSVRfTUVESUFfU1JDX1BBRChwYWQpLT5wcml2LT5zdHJlYW07CisgICAg
RGF0YU11dGV4PFN0cmVhbTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgc3RyZWFt
aW5nTWVtYmVycyhzdHJlYW0tPnN0cmVhbWluZ01lbWJlcnNEYXRhTXV0ZXgpOworICAgIHN0cmVh
bWluZ01lbWJlcnMtPnBhZExpbmtlZE9yRmx1c2hlZENvbmRpdGlvbi5ub3RpZnlPbmUoKTsKIH0K
IAotdm9pZCB3ZWJLaXRNZWRpYVNyY0RvQXN5bmNEb25lKFdlYktpdE1lZGlhU3JjKiBzb3VyY2Up
CisvLyBDYWxsZWQgd2l0aCBTVFJFQU1fTE9DSy4KK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3Jj
TG9vcCh2b2lkKiB1c2VyRGF0YSkKIHsKLSAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYg
PSBzb3VyY2UtPnByaXY7Ci0gICAgaWYgKHByaXYtPmFzeW5jU3RhcnQpIHsKLSAgICAgICAgR1NU
X0JJTl9DTEFTUyhwYXJlbnRfY2xhc3MpLT5oYW5kbGVfbWVzc2FnZShHU1RfQklOKHNvdXJjZSks
Ci0gICAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfYXN5bmNfZG9uZShHU1RfT0JKRUNUKHNvdXJj
ZSksIEdTVF9DTE9DS19USU1FX05PTkUpKTsKLSAgICAgICAgcHJpdi0+YXN5bmNTdGFydCA9IGZh
bHNlOworICAgIEdzdFBhZCogcGFkID0gR1NUX1BBRCh1c2VyRGF0YSk7CisgICAgUmVmUHRyPFN0
cmVhbT4mIHN0cmVhbSA9IFdFQktJVF9NRURJQV9TUkNfUEFEKHBhZCktPnByaXYtPnN0cmVhbTsK
KworICAgIERhdGFNdXRleDxTdHJlYW06OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVy
IHN0cmVhbWluZ01lbWJlcnMoc3RyZWFtLT5zdHJlYW1pbmdNZW1iZXJzRGF0YU11dGV4KTsKKyAg
ICBpZiAoc3RyZWFtaW5nTWVtYmVycy0+aXNGbHVzaGluZykgeworICAgICAgICBnc3RfcGFkX3Bh
dXNlX3Rhc2socGFkKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLX0KIAotR3N0U3RhdGVDaGFu
Z2VSZXR1cm4gd2ViS2l0TWVkaWFTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBH
c3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICAgIFdlYktpdE1lZGlhU3JjKiBzb3VyY2Ug
PSBXRUJLSVRfTUVESUFfU1JDKGVsZW1lbnQpOwotICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSog
cHJpdiA9IHNvdXJjZS0+cHJpdjsKKyAgICAvLyBTaW5jZSB0aGUgcGFkIGNhbiBhbmQgd2lsbCBi
ZSBhZGRlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGluIFBMQVlJTkcgc3RhdGUsIHRoaXMgdGFzayBj
YW4gc3RhcnQgcnVubmluZworICAgIC8vIGJlZm9yZSB0aGUgcGFkIGlzIGxpbmtlZC4gV2FpdCBm
b3IgdGhlIHBhZCB0byBiZSBsaW5rZWQgdG8gYXZvaWQgYnVmZmVycyBiZWluZyBsb3N0IHRvIG5v
dC1saW5rZWQgZXJyb3JzLgorICAgIEdTVF9PQkpFQ1RfTE9DSyhwYWQpOworICAgIGlmICghR1NU
X1BBRF9JU19MSU5LRUQocGFkKSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBhZCwgIldh
aXRpbmcgZm9yIHRoZSBwYWQgdG8gYmUgbGlua2VkLi4uIik7CisgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QocGFkLCAibGlua2VkIiwgR19DQUxMQkFDSyh3ZWJLaXRNZWRpYVNyY1BhZExpbmtlZCks
IG51bGxwdHIpOworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhwYWQpOwogCi0gICAgR1NUX0RF
QlVHX09CSkVDVChlbGVtZW50LCAiJXMiLCBnc3Rfc3RhdGVfY2hhbmdlX2dldF9uYW1lKHRyYW5z
aXRpb24pKTsKLSAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9D
SEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgICBwcml2LT5hbGxUcmFja3NDb25maWd1cmVk
ID0gZmFsc2U7Ci0gICAgICAgIHdlYktpdE1lZGlhU3JjRG9Bc3luY1N0YXJ0KHNvdXJjZSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgICAgICBzdHJl
YW1pbmdNZW1iZXJzLT5wYWRMaW5rZWRPckZsdXNoZWRDb25kaXRpb24ud2FpdChzdHJlYW1pbmdN
ZW1iZXJzLm11dGV4KCkpOworCisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3Rf
YnlfZnVuYyhwYWQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHdlYktpdE1lZGlhU3JjUGFkTGlu
a2VkKSwgbnVsbHB0cik7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGFkLCAiRmluaXNoZWQg
d2FpdGluZyBmb3IgdGhlIHBhZCB0byBiZSBsaW5rZWQuIik7CisgICAgICAgIGlmIChzdHJlYW1p
bmdNZW1iZXJzLT5pc0ZsdXNoaW5nKSB7CisgICAgICAgICAgICBnc3RfcGFkX3BhdXNlX3Rhc2so
cGFkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAg
ICBHU1RfT0JKRUNUX1VOTE9DSyhwYWQpOworICAgIEFTU0VSVChnc3RfcGFkX2lzX2xpbmtlZChw
YWQpKTsKKworICAgIC8vIEJ5IGtlZXBpbmcgdGhlIGxvY2sgd2UgYXJlIGd1YXJhbnRlZWQgdGhh
dCBhIGZsdXNoIHdpbGwgbm90IGhhcHBlbiB3aGlsZSB3ZSBzZW5kIGVzc2VudGlhbCBldmVudHMu
CisgICAgLy8gVGhlc2UgZXZlbnRzIHNob3VsZCBuZXZlciBibG9jayBkb3duc3RyZWFtLCBzbyB0
aGUgbG9jayBzaG91bGQgYmUgcmVsZWFzZWQgaW4gbGl0dGxlIHRpbWUgaW4gZXZlcnkKKyAgICAv
LyBjYXNlLgorCisgICAgaWYgKCFzdHJlYW1pbmdNZW1iZXJzLT5oYXNQdXNoZWRTdHJlYW1Db2xs
ZWN0aW9uRXZlbnQpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwYWQsICJQdXNoaW5nIFNU
UkVBTV9DT0xMRUNUSU9OIGV2ZW50LiIpOworICAgICAgICBib29sIHdhc1N0cmVhbUNvbGxlY3Rp
b25TZW50ID0gZ3N0X3BhZF9wdXNoX2V2ZW50KHN0cmVhbS0+cGFkLmdldCgpLCBnc3RfZXZlbnRf
bmV3X3N0cmVhbV9jb2xsZWN0aW9uKHN0cmVhbS0+c291cmNlLT5wcml2LT5jb2xsZWN0aW9uLmdl
dCgpKSk7CisgICAgICAgIHN0cmVhbWluZ01lbWJlcnMtPmhhc1B1c2hlZFN0cmVhbUNvbGxlY3Rp
b25FdmVudCA9IHRydWU7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGFkLCAiU1RSRUFNX0NP
TExFQ1RJT04gZXZlbnQgaGFzIGJlZW4gcHVzaGVkLCAlcyB3YXMgcmV0dXJuZWQuIiwgYm9vbEZv
clByaW50aW5nKHdhc1N0cmVhbUNvbGxlY3Rpb25TZW50KSk7CisgICAgICAgIC8vIEluaXRpYWwg
ZXZlbnRzIGxpa2UgdGhpcyBtdXN0IGdvIHRocm91Z2gsIGZsdXNoZXMgKGluY2x1ZGluZyB0ZWFy
aW5nIGRvd24gdGhlIGVsZW1lbnQpIGlzIG5vdCBhbGxvd2VkIHVudGlsCisgICAgICAgIC8vIGBo
YXNQdXNoZWRGaXJzdEJ1ZmZlcmAgaGFzIGJlZW4gc2V0IHRvIHRydWUuCisgICAgICAgIEFTU0VS
VCh3YXNTdHJlYW1Db2xsZWN0aW9uU2VudCk7CisgICAgfQorCisgICAgaWYgKCFzdHJlYW1pbmdN
ZW1iZXJzLT53YXNTdHJlYW1TdGFydFNlbnQpIHsKKyAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBz
dHJlYW1JZChnX3N0cmR1cF9wcmludGYoIm1zZS8lcyIsIHN0cmVhbS0+dHJhY2stPnRyYWNrSWQo
KS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIEdSZWZQdHI8R3N0RXZlbnQ+IGV2
ZW50ID0gYWRvcHRHUmVmKGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0KHN0cmVhbUlkLmdldCgp
KSk7CisgICAgICAgIGdzdF9ldmVudF9zZXRfZ3JvdXBfaWQoZXZlbnQuZ2V0KCksIHN0cmVhbS0+
c291cmNlLT5wcml2LT5ncm91cElkKTsKKyAgICAgICAgZ3N0X2V2ZW50X3NldF9zdHJlYW0oZXZl
bnQuZ2V0KCksIHN0cmVhbS0+c3RyZWFtSW5mby5nZXQoKSk7CisKKyAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChwYWQsICJQdXNoaW5nIFNUUkVBTV9TVEFSVCBldmVudC4iKTsKKyAgICAgICAgYm9v
bCB3YXNTdHJlYW1TdGFydFNlbnQgPSBnc3RfcGFkX3B1c2hfZXZlbnQocGFkLCBldmVudC5sZWFr
UmVmKCkpOworICAgICAgICBzdHJlYW1pbmdNZW1iZXJzLT53YXNTdHJlYW1TdGFydFNlbnQgPSB3
YXNTdHJlYW1TdGFydFNlbnQ7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGFkLCAiU1RSRUFN
X1NUQVJUIGV2ZW50IHB1c2hlZCwgJXMgd2FzIHJldHVybmVkLiIsIGJvb2xGb3JQcmludGluZyh3
YXNTdHJlYW1TdGFydFNlbnQpKTsKKyAgICAgICAgQVNTRVJUKHdhc1N0cmVhbVN0YXJ0U2VudCk7
CisgICAgfQorCisgICAgaWYgKHN0cmVhbWluZ01lbWJlcnMtPnBlbmRpbmdJbml0aWFsQ2Fwcykg
eworICAgICAgICBHUmVmUHRyPEdzdEV2ZW50PiBldmVudCA9IGFkb3B0R1JlZihnc3RfZXZlbnRf
bmV3X2NhcHMoc3RyZWFtaW5nTWVtYmVycy0+cGVuZGluZ0luaXRpYWxDYXBzLmdldCgpKSk7CisK
KyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwYWQsICJQdXNoaW5nIGluaXRpYWwgQ0FQUyBldmVu
dDogJSIgR1NUX1BUUl9GT1JNQVQsIHN0cmVhbWluZ01lbWJlcnMtPnBlbmRpbmdJbml0aWFsQ2Fw
cy5nZXQoKSk7CisgICAgICAgIGJvb2wgd2FzQ2Fwc0V2ZW50U2VudCA9IGdzdF9wYWRfcHVzaF9l
dmVudChwYWQsIGV2ZW50LmxlYWtSZWYoKSk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGFk
LCAiUHVzaGVkIGluaXRpYWwgQ0FQUyBldmVudCwgJXMgd2FzIHJldHVybmVkLiIsIGJvb2xGb3JQ
cmludGluZyh3YXNDYXBzRXZlbnRTZW50KSk7CisKKyAgICAgICAgc3RyZWFtaW5nTWVtYmVycy0+
cHJldmlvdXNDYXBzID0gV1RGTW92ZShzdHJlYW1pbmdNZW1iZXJzLT5wZW5kaW5nSW5pdGlhbENh
cHMpOworICAgICAgICBBU1NFUlQoIXN0cmVhbWluZ01lbWJlcnMtPnBlbmRpbmdJbml0aWFsQ2Fw
cyk7CisgICAgfQorCisgICAgR1JlZlB0cjxHc3RNaW5pT2JqZWN0PiBvYmplY3Q7CisgICAgewor
ICAgICAgICBEYXRhTXV0ZXg8VHJhY2tRdWV1ZT46OkxvY2tlZFdyYXBwZXIgcXVldWUoc3RyZWFt
LT50cmFjay0+cXVldWVEYXRhTXV0ZXgoKSk7CisgICAgICAgIGlmICghcXVldWUtPmlzRW1wdHko
KSkgeworICAgICAgICAgICAgb2JqZWN0ID0gcXVldWUtPnBvcCgpOworICAgICAgICAgICAgc3Ry
ZWFtaW5nTWVtYmVycy0+aGFzUG9wcGVkRmlyc3RPYmplY3QgPSB0cnVlOworICAgICAgICAgICAg
R1NUX1RSQUNFX09CSkVDVChwYWQsICJRdWV1ZSBub3QgZW1wdHksIHBvcHBlZCAlIiBHU1RfUFRS
X0ZPUk1BVCwgb2JqZWN0LmdldCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHF1
ZXVlLT5ub3RpZnlXaGVuTm90RW1wdHkoWyZvYmplY3QsIHN0cmVhbV0oR1JlZlB0cjxHc3RNaW5p
T2JqZWN0PiYmIHJlY2VpdmVkT2JqZWN0KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICAgICAgICAgICAgICBEYXRhTXV0ZXg8U3RyZWFtOjpTdHJlYW1pbmdN
ZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBzdHJlYW1pbmdNZW1iZXJzKHN0cmVhbS0+c3RyZWFtaW5n
TWVtYmVyc0RhdGFNdXRleCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFzdHJlYW1pbmdNZW1i
ZXJzLT5pc0ZsdXNoaW5nKTsKKworICAgICAgICAgICAgICAgIG9iamVjdCA9IFdURk1vdmUocmVj
ZWl2ZWRPYmplY3QpOworICAgICAgICAgICAgICAgIHN0cmVhbWluZ01lbWJlcnMtPmhhc1BvcHBl
ZEZpcnN0T2JqZWN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzdHJlYW1pbmdNZW1iZXJzLT5x
dWV1ZUNoYW5nZWRPckZsdXNoZWRDb25kaXRpb24ubm90aWZ5QWxsKCk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1QocGFkLCAiV2FpdGluZyBmb3Igb2JqZWN0
cyB0byBiZSBwdXNoZWQgdG8gdGhlIHRyYWNrIHF1ZXVlLiIpOworICAgICAgICB9CiAgICAgfQog
Ci0gICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmVzdWx0ID0gR1NUX0VMRU1FTlRfQ0xBU1MocGFy
ZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotICAgIGlmIChH
X1VOTElLRUxZKHJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpKSB7Ci0gICAgICAg
IEdTVF9XQVJOSU5HX09CSkVDVChzb3VyY2UsICJTdGF0ZSBjaGFuZ2UgZmFpbGVkIik7Ci0gICAg
ICAgIHdlYktpdE1lZGlhU3JjRG9Bc3luY0RvbmUoc291cmNlKTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAvLyBXYWl0IHRvIHJlY2VpdmUgYW4gb2JqZWN0IGZyb20gdGhlIHF1ZXVlIChp
ZiB3ZSBkaWRuJ3QgZ2V0IG9uZSBhbHJlYWR5KSBvciBmbHVzaC4KKyAgICBzdHJlYW1pbmdNZW1i
ZXJzLT5xdWV1ZUNoYW5nZWRPckZsdXNoZWRDb25kaXRpb24ud2FpdChzdHJlYW1pbmdNZW1iZXJz
Lm11dGV4KCksIFsmXSgpIHsKKyAgICAgICAgcmV0dXJuIHN0cmVhbWluZ01lbWJlcnMtPmlzRmx1
c2hpbmcgfHwgb2JqZWN0OworICAgIH0pOworICAgIHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQg
bm90aWZ5V2hlbk5vdEVtcHR5KCkncyBjYWxsYmFjayAoaWYgYW55KSBpcyBjbGVhcmVkIGFmdGVy
IHRoaXMgcG9pbnQuCisgICAgICAgIERhdGFNdXRleDxUcmFja1F1ZXVlPjo6TG9ja2VkV3JhcHBl
ciBxdWV1ZShzdHJlYW0tPnRyYWNrLT5xdWV1ZURhdGFNdXRleCgpKTsKKyAgICAgICAgcXVldWUt
PnJlc2V0Tm90RW1wdHlIYW5kbGVyKCk7CisgICAgfQorICAgIGlmIChzdHJlYW1pbmdNZW1iZXJz
LT5pc0ZsdXNoaW5nKSB7CisgICAgICAgIGdzdF9wYWRfcGF1c2VfdGFzayhwYWQpOworICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBH
U1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgICAgcmVzdWx0ID0gR1NUX1NU
QVRFX0NIQU5HRV9BU1lOQzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hB
TkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICAgICAgd2ViS2l0TWVkaWFTcmNEb0FzeW5jRG9uZShz
b3VyY2UpOwotICAgICAgICBwcml2LT5hbGxUcmFja3NDb25maWd1cmVkID0gZmFsc2U7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgIC8vIFdlIHdhaXQg
dG8gZ2V0IGEgc2FtcGxlIGJlZm9yZSBlbWl0dGluZyB0aGUgZmlyc3Qgc2VnbWVudC4gVGhpcyB3
YXksIGlmIHdlIGdldCBhIHNlZWsgYmVmb3JlIGFueQorICAgIC8vIGVucXVldWUsIHdlJ3JlIHNl
bmRpbmcgb25seSBvbmUgc2VnbWVudC4gVGhpcyBhbHNvIGVuc3VyZXMgdGhhdCB3aGVuIHN1Y2gg
YSBzZWVrIGlzIG1hZGUsIHdoZXJlIHdlIGFsc28KKyAgICAvLyBvbWl0IHRoZSBmbHVzaCAoc2Vl
IHdlYktpdE1lZGlhU3JjRmx1c2gpIHdlIGFjdHVhbGx5IGVtaXQgdGhlIHVwZGF0ZWQsIGNvcnJl
Y3Qgc2VnbWVudC4KKyAgICBpZiAoc3RyZWFtaW5nTWVtYmVycy0+ZG9lc05lZWRTZWdtZW50RXZl
bnQpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwYWQsICJOZWVkIG5ldyBTRUdNRU5UIGV2
ZW50LCBwdXNoaW5nIGl0OiAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsICZzdHJlYW1pbmdNZW1iZXJz
LT5zZWdtZW50KTsKKyAgICAgICAgYm9vbCByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQocGFkLCBn
c3RfZXZlbnRfbmV3X3NlZ21lbnQoJnN0cmVhbWluZ01lbWJlcnMtPnNlZ21lbnQpKTsKKyAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChwYWQsICJTRUdNRU5UIGV2ZW50IHB1c2hlZCwgcmV0ID0gJXMu
IiwgYm9vbEZvclByaW50aW5nKHJldCkpOworICAgICAgICBBU1NFUlQocmV0KTsKKyAgICAgICAg
c3RyZWFtaW5nTWVtYmVycy0+ZG9lc05lZWRTZWdtZW50RXZlbnQgPSBmYWxzZTsKICAgICB9CiAK
LSAgICByZXR1cm4gcmVzdWx0OwotfQorICAgIGlmIChHU1RfSVNfU0FNUExFKG9iamVjdC5nZXQo
KSkpIHsKKyAgICAgICAgR1JlZlB0cjxHc3RTYW1wbGU+IHNhbXBsZSA9IGFkb3B0R1JlZihHU1Rf
U0FNUExFKG9iamVjdC5sZWFrUmVmKCkpKTsKIAotZ2ludDY0IHdlYktpdE1lZGlhU3JjR2V0U2l6
ZShXZWJLaXRNZWRpYVNyYyogd2ViS2l0TWVkaWFTcmMpCi17Ci0gICAgZ2ludDY0IGR1cmF0aW9u
ID0gMDsKLSAgICBmb3IgKFN0cmVhbSogc3RyZWFtIDogd2ViS2l0TWVkaWFTcmMtPnByaXYtPnN0
cmVhbXMpCi0gICAgICAgIGR1cmF0aW9uID0gc3RkOjptYXg8Z2ludDY0PihkdXJhdGlvbiwgZ3N0
X2FwcF9zcmNfZ2V0X3NpemUoR1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpKSk7Ci0gICAgcmV0
dXJuIGR1cmF0aW9uOworICAgICAgICBpZiAoIWdzdF9jYXBzX2lzX2VxdWFsKGdzdF9zYW1wbGVf
Z2V0X2NhcHMoc2FtcGxlLmdldCgpKSwgc3RyZWFtaW5nTWVtYmVycy0+cHJldmlvdXNDYXBzLmdl
dCgpKSkgeworICAgICAgICAgICAgLy8gVGhpcyBzYW1wbGUgbmVlZHMgbmV3IGNhcHMgKHR5cGlj
YWxseSBiZWNhdXNlIG9mIGEgcXVhbGl0eSBjaGFuZ2UpLgorICAgICAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChwYWQsICJQdXNoaW5nIG5ldyBDQVBTIGV2ZW50OiAlIiBHU1RfUFRSX0ZPUk1BVCwg
Z3N0X3NhbXBsZV9nZXRfY2FwcyhzYW1wbGUuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJvb2wgcmV0
ID0gZ3N0X3BhZF9wdXNoX2V2ZW50KHN0cmVhbS0+cGFkLmdldCgpLCBnc3RfZXZlbnRfbmV3X2Nh
cHMoZ3N0X3NhbXBsZV9nZXRfY2FwcyhzYW1wbGUuZ2V0KCkpKSk7CisgICAgICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKHBhZCwgIkNBUFMgZXZlbnQgcHVzaGVkLCByZXQgPSAlcy4iLCBib29sRm9y
UHJpbnRpbmcocmV0KSk7CisgICAgICAgICAgICBBU1NFUlQocmV0KTsKKyAgICAgICAgICAgIHN0
cmVhbWluZ01lbWJlcnMtPnByZXZpb3VzQ2FwcyA9IGdzdF9zYW1wbGVfZ2V0X2NhcHMoc2FtcGxl
LmdldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEdSZWZQdHI8R3N0QnVmZmVyPiBidWZmZXIg
PSBnc3Rfc2FtcGxlX2dldF9idWZmZXIoc2FtcGxlLmdldCgpKTsKKyAgICAgICAgc2FtcGxlLmNs
ZWFyKCk7CisKKyAgICAgICAgYm9vbCBwdXNoaW5nRmlyc3RCdWZmZXIgPSAhc3RyZWFtaW5nTWVt
YmVycy0+aGFzUHVzaGVkRmlyc3RCdWZmZXI7CisgICAgICAgIGlmIChwdXNoaW5nRmlyc3RCdWZm
ZXIpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGFkLCAiU2VuZGluZyBmaXJzdCBi
dWZmZXIgb24gdGhpcyBwYWQuIik7CisgICAgICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IGZpbGVO
YW1lIHsgZ19zdHJkdXBfcHJpbnRmKCJwbGF5YmFjay1waXBlbGluZS1iZWZvcmUtcGxheWJhY2st
JXMiLCBzdHJlYW0tPnRyYWNrLT50cmFja0lkKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSkgfTsK
KyAgICAgICAgICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKGZp
bmRQaXBlbGluZShHUmVmUHRyPEdzdEVsZW1lbnQ+KEdTVF9FTEVNRU5UKHN0cmVhbS0+c291cmNl
KSkpLmdldCgpKSwKKyAgICAgICAgICAgICAgICBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGZp
bGVOYW1lLmdldCgpKTsKKyAgICAgICAgICAgIHN0cmVhbWluZ01lbWJlcnMtPmhhc1B1c2hlZEZp
cnN0QnVmZmVyID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFB1c2ggdGhlIGJ1ZmZl
ciB3aXRob3V0IHRoZSBzdHJlYW1pbmdNZW1iZXJzIGxvY2sgc28gdGhhdCBmbHVzaGVzIGNhbiBo
YXBwZW4gd2hpbGUgaXQgdHJhdmVscyBkb3duc3RyZWFtLgorICAgICAgICBzdHJlYW1pbmdNZW1i
ZXJzLmxvY2tIb2xkZXIoKS51bmxvY2tFYXJseSgpOworCisgICAgICAgIEFTU0VSVChHU1RfQlVG
RkVSX1BUU19JU19WQUxJRChidWZmZXIuZ2V0KCkpKTsKKyAgICAgICAgR1NUX1RSQUNFX09CSkVD
VChwYWQsICJQdXNoaW5nIGJ1ZmZlciBkb3duc3RyZWFtOiAlIiBHU1RfUFRSX0ZPUk1BVCwgYnVm
ZmVyLmdldCgpKTsKKyAgICAgICAgR3N0Rmxvd1JldHVybiByZXQgPSBnc3RfcGFkX3B1c2gocGFk
LCBidWZmZXIubGVha1JlZigpKTsKKyAgICAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSyAmJiBy
ZXQgIT0gR1NUX0ZMT1dfRkxVU0hJTkcpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qo
cGFkLCAiUHVzaGluZyBidWZmZXIgcmV0dXJuZWQgJXMiLCBnc3RfZmxvd19nZXRfbmFtZShyZXQp
KTsKKyAgICAgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gZmlsZU5hbWUgeyBnX3N0cmR1cF9wcmlu
dGYoInBsYXliYWNrLXBpcGVsaW5lLXB1c2hpbmctYnVmZmVyLWZhaWxlZC0lcyIsIHN0cmVhbS0+
dHJhY2stPnRyYWNrSWQoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSB9OworICAgICAgICAgICAg
R1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU4oZmluZFBpcGVsaW5lKEdS
ZWZQdHI8R3N0RWxlbWVudD4oR1NUX0VMRU1FTlQoc3RyZWFtLT5zb3VyY2UpKSkuZ2V0KCkpLAor
ICAgICAgICAgICAgICAgIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgZmlsZU5hbWUuZ2V0KCkp
OworICAgICAgICAgICAgZ3N0X3BhZF9wYXVzZV90YXNrKHBhZCk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgaWYgKEdTVF9JU19FVkVOVChvYmplY3QuZ2V0KCkpKSB7CisgICAgICAgIC8vIEVPUyBl
dmVudHMgYW5kIG90aGVyIGVucXVldWVkIGV2ZW50cyBhcmUgYWxzbyBzZW50IHVubG9ja2VkIHNv
IHRoZXkgY2FuIHJlYWN0IHRvIGZsdXNoZXMgaWYgbmVjZXNzYXJ5LgorICAgICAgICBHUmVmUHRy
PEdzdEV2ZW50PiBldmVudCA9IEdSZWZQdHI8R3N0RXZlbnQ+KEdTVF9FVkVOVChvYmplY3QubGVh
a1JlZigpKSk7CisKKyAgICAgICAgc3RyZWFtaW5nTWVtYmVycy5sb2NrSG9sZGVyKCkudW5sb2Nr
RWFybHkoKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwYWQsICJQdXNoaW5nIGV2ZW50IGRv
d25zdHJlYW06ICUiIEdTVF9QVFJfRk9STUFULCBldmVudC5nZXQoKSk7CisgICAgICAgIGJvb2wg
ZXZlbnRIYW5kbGVkID0gZ3N0X3BhZF9wdXNoX2V2ZW50KHBhZCwgR1JlZlB0cjxHc3RFdmVudD4o
ZXZlbnQpLmxlYWtSZWYoKSk7CisgICAgICAgIGlmICghZXZlbnRIYW5kbGVkKQorICAgICAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChwYWQsICJQdXNoZWQgZXZlbnQgd2FzIG5vdCBoYW5kbGVkOiAl
IiBHU1RfUFRSX0ZPUk1BVCwgZXZlbnQuZ2V0KCkpOworICAgIH0gZWxzZQorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotZ2Jvb2xlYW4gd2ViS2l0TWVkaWFTcmNRdWVyeVdpdGhQ
YXJlbnQoR3N0UGFkKiBwYWQsIEdzdE9iamVjdCogcGFyZW50LCBHc3RRdWVyeSogcXVlcnkpCitz
dGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY1N0cmVhbUZsdXNoKFN0cmVhbSogc3RyZWFtLCBib29s
IGlzU2Vla2luZ0ZsdXNoKQogewotICAgIFdlYktpdE1lZGlhU3JjKiBzb3VyY2UgPSBXRUJLSVRf
TUVESUFfU1JDKEdTVF9FTEVNRU5UKHBhcmVudCkpOwotICAgIGdib29sZWFuIHJlc3VsdCA9IEZB
TFNFOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgYm9vbCBza2lwRmx1c2ggPSBm
YWxzZTsKIAotICAgIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUocXVlcnkpKSB7Ci0gICAgY2FzZSBH
U1RfUVVFUllfRFVSQVRJT046IHsKLSAgICAgICAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgICAgICAg
Z3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uKHF1ZXJ5LCAmZm9ybWF0LCBudWxscHRyKTsKLQotICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHNvdXJjZSwgImR1cmF0aW9uIHF1ZXJ5IGluIGZvcm1hdCAl
cyIsIGdzdF9mb3JtYXRfZ2V0X25hbWUoZm9ybWF0KSk7Ci0gICAgICAgIEdTVF9PQkpFQ1RfTE9D
Syhzb3VyY2UpOwotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAgICBjYXNlIEdTVF9G
T1JNQVRfVElNRTogewotICAgICAgICAgICAgaWYgKHNvdXJjZS0+cHJpdiAmJiBzb3VyY2UtPnBy
aXYtPm1lZGlhUGxheWVyUHJpdmF0ZSkgewotICAgICAgICAgICAgICAgIE1lZGlhVGltZSBkdXJh
dGlvbiA9IHNvdXJjZS0+cHJpdi0+bWVkaWFQbGF5ZXJQcml2YXRlLT5kdXJhdGlvbk1lZGlhVGlt
ZSgpOwotICAgICAgICAgICAgICAgIGlmIChkdXJhdGlvbiA+IE1lZGlhVGltZTo6emVyb1RpbWUo
KSkgewotICAgICAgICAgICAgICAgICAgICBnc3RfcXVlcnlfc2V0X2R1cmF0aW9uKHF1ZXJ5LCBm
b3JtYXQsIFdlYkNvcmU6OnRvR3N0Q2xvY2tUaW1lKGR1cmF0aW9uKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc291cmNlLCAiQW5zd2VyaW5nOiBkdXJhdGlvbj0lIiBH
U1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MoV2ViQ29yZTo6dG9Hc3RDbG9ja1RpbWUoZHVy
YXRpb24pKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRSVUU7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBHU1RfRk9STUFUX0JZVEVTOiB7Ci0gICAgICAgICAgICBpZiAoc291cmNlLT5w
cml2KSB7Ci0gICAgICAgICAgICAgICAgZ2ludDY0IGR1cmF0aW9uID0gd2ViS2l0TWVkaWFTcmNH
ZXRTaXplKHNvdXJjZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGR1cmF0aW9uKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24ocXVlcnksIGZvcm1hdCwgZHVyYXRp
b24pOwotICAgICAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNvdXJjZSwgInNpemU6
ICUiIEdfR0lOVDY0X0ZPUk1BVCwgZHVyYXRpb24pOwotICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBUUlVFOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOworICAgIHsKKyAgICAgICAgRGF0YU11dGV4PFN0cmVhbTo6U3RyZWFtaW5nTWVtYmVy
cz46OkxvY2tlZFdyYXBwZXIgc3RyZWFtaW5nTWVtYmVycyhzdHJlYW0tPnN0cmVhbWluZ01lbWJl
cnNEYXRhTXV0ZXgpOworCisgICAgICAgIGlmICghc3RyZWFtaW5nTWVtYmVycy0+aGFzUG9wcGVk
Rmlyc3RPYmplY3QpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3RyZWFtLT5zb3Vy
Y2UsICJGbHVzaCByZXF1ZXN0IGZvciBzdHJlYW0gJyVzJyBvY2N1cnJlZCBiZWZvcmUgaGFzUG9w
cGVkRmlyc3RPYmplY3QsIGp1c3QgY2xlYXJpbmcgdGhlIHF1ZXVlIGFuZCByZWFkanVzdGluZyB0
aGUgc2VnbWVudC4iLCBzdHJlYW0tPnRyYWNrLT50cmFja0lkKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgICAgICBEYXRhTXV0ZXg8VHJhY2tRdWV1ZT46OkxvY2tlZFdyYXBwZXIg
cXVldWUoc3RyZWFtLT50cmFjay0+cXVldWVEYXRhTXV0ZXgoKSk7CisgICAgICAgICAgICAvLyBX
ZSB1c2UgY2xlYXIoKSBpbnN0ZWFkIG9mIGZsdXNoKCkgYmVjYXVzZSB0aGUgV2ViS2l0TWVkaWFT
cmMgc3RyZWFtaW5nIHRocmVhZCBjb3VsZCBiZSB3YWl0aW5nCisgICAgICAgICAgICAvLyBmb3Ig
dGhlIHF1ZXVlLiBmbHVzaCgpIHdvdWxkIGNhbmNlbCB0aGUgbm90RW1wdHlDYWxsYmFjayB0aGVy
ZWZvcmUgbGVhdmluZyB0aGUgc3RyZWFtaW5nIHRocmVhZAorICAgICAgICAgICAgLy8gc3R1Y2sg
d2FpdGluZyBmb3JldmVyLgorICAgICAgICAgICAgcXVldWUtPmNsZWFyKCk7CisgICAgICAgICAg
ICBza2lwRmx1c2ggPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIXNraXBGbHVzaCkgeworICAgICAgICAvLyBT
aWduYWwgdGhlIGxvb3AoKSBmdW5jdGlvbiB0byBzdG9wIHdhaXRpbmcgZm9yIGFueSBjb25kaXRp
b24gdmFyaWFibGUsIHBhdXNlIHRoZSB0YXNrIGFuZCByZXR1cm4sCisgICAgICAgIC8vIHdoaWNo
IHdpbGwga2VlcGluZyB0aGUgc3RyZWFtaW5nIHRocmVhZCBpZGxlLgorICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHN0cmVhbS0+cGFkLmdldCgpLCAiVGFraW5nIHRoZSBTdHJlYW1pbmdNZW1iZXJz
IG11dGV4IGFuZCBzZXR0aW5nIGlzRmx1c2hpbmcgPSB0cnVlLiIpOworICAgICAgICB7CisgICAg
ICAgICAgICBEYXRhTXV0ZXg8U3RyZWFtOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBl
ciBzdHJlYW1pbmdNZW1iZXJzKHN0cmVhbS0+c3RyZWFtaW5nTWVtYmVyc0RhdGFNdXRleCk7Cisg
ICAgICAgICAgICBEYXRhTXV0ZXg8VHJhY2tRdWV1ZT46OkxvY2tlZFdyYXBwZXIgcXVldWUoc3Ry
ZWFtLT50cmFjay0+cXVldWVEYXRhTXV0ZXgoKSk7CisKKyAgICAgICAgICAgIHN0cmVhbWluZ01l
bWJlcnMtPmlzRmx1c2hpbmcgPSB0cnVlOworICAgICAgICAgICAgcXVldWUtPmZsdXNoKCk7IC8v
IENsZWFyIHRoZSBxdWV1ZSBhbmQgY2FuY2VsIGFueSB3YWl0aW5nIGNhbGxiYWNrLgorCisgICAg
ICAgICAgICBzdHJlYW1pbmdNZW1iZXJzLT5xdWV1ZUNoYW5nZWRPckZsdXNoZWRDb25kaXRpb24u
bm90aWZ5QWxsKCk7CisgICAgICAgICAgICBzdHJlYW1pbmdNZW1iZXJzLT5wYWRMaW5rZWRPckZs
dXNoZWRDb25kaXRpb24ubm90aWZ5QWxsKCk7CiAgICAgICAgIH0KIAotICAgICAgICBHU1RfT0JK
RUNUX1VOTE9DSyhzb3VyY2UpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1Rf
UVVFUllfVVJJOgotICAgICAgICBpZiAoc291cmNlKSB7Ci0gICAgICAgICAgICBHU1RfT0JKRUNU
X0xPQ0soc291cmNlKTsKLSAgICAgICAgICAgIGlmIChzb3VyY2UtPnByaXYpCi0gICAgICAgICAg
ICAgICAgZ3N0X3F1ZXJ5X3NldF91cmkocXVlcnksIHNvdXJjZS0+cHJpdi0+bG9jYXRpb24uZ2V0
KCkpOwotICAgICAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc291cmNlKTsKKyAgICAgICAgLy8g
Rmx1c2ggZG93bnN0cmVhbS4gVGhpcyB3aWxsIHN0b3AgcHJvY2Vzc2luZyBpbiBkb3duc3RyZWFt
IGVsZW1lbnRzIGFuZCBpZiB0aGUgc3RyZWFtaW5nIHRocmVhZCB3YXMgaW4gYQorICAgICAgICAv
LyBkb3duc3RyZWFtIGNoYWluKCkgZnVuY3Rpb24sIGl0IHdpbGwgcXVpY2tseSByZXR1cm4gdG8g
dGhlIGxvb3AoKSBmdW5jdGlvbiwgd2hpY2ggdGhhbmtzIHRvIHRoZQorICAgICAgICAvLyBwcmV2
aW91cyBzZWN0aW9uIHdpbGwgYWxzbyBxdWlja2x5IGVuZC4KKyAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChzdHJlYW0tPnBhZC5nZXQoKSwgIlNlbmRpbmcgRkxVU0hfU1RBUlQgZG93bnN0cmVhbS4i
KTsKKyAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50KHN0cmVhbS0+cGFkLmdldCgpLCBnc3RfZXZl
bnRfbmV3X2ZsdXNoX3N0YXJ0KCkpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHN0cmVhbS0+
cGFkLmdldCgpLCAiRkxVU0hfU1RBUlQgc2VudC4iKTsKKyAgICB9CisKKyAgICAvLyBBZGp1c3Qg
c2VnbWVudC4gVGhpcyBpcyBkaWZmZXJlbnQgZm9yIHNlZWtzIGFuZCBub24tc2Vla2luZyBmbHVz
aGVzLgorICAgIGlmIChpc1NlZWtpbmdGbHVzaCkgeworICAgICAgICAvLyBJbiB0aGUgY2FzZSBv
ZiBzZWVraW5nIGZsdXNoIHdlIGFyZSByZXNldHRpbmcgdGhlIHRpbWVsaW5lIChzZWUgdGhlIGZs
dXNoIHN0b3AgbGF0ZXIpLgorICAgICAgICAvLyBUaGUgcmVzdWx0aW5nIHNlZ21lbnQgaXMgYnJh
bmQgbmV3LCBidXQgd2l0aCBhIGRpZmZlcmVudCBzdGFydCB0aW1lLgorICAgICAgICBXZWJLaXRN
ZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzdHJlYW0tPnNvdXJjZS0+cHJpdjsKKyAgICAgICAgRGF0
YU11dGV4PFN0cmVhbTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgc3RyZWFtaW5n
TWVtYmVycyhzdHJlYW0tPnN0cmVhbWluZ01lbWJlcnNEYXRhTXV0ZXgpOworICAgICAgICBzdHJl
YW1pbmdNZW1iZXJzLT5zZWdtZW50LmJhc2UgPSAwOworICAgICAgICBzdHJlYW1pbmdNZW1iZXJz
LT5zZWdtZW50LnJhdGUgPSBwcml2LT5yYXRlOworICAgICAgICBzdHJlYW1pbmdNZW1iZXJzLT5z
ZWdtZW50LnN0YXJ0ID0gc3RyZWFtaW5nTWVtYmVycy0+c2VnbWVudC50aW1lID0gcHJpdi0+c3Rh
cnRUaW1lOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEluIHRoZSBjYXNlIG9mIG5vbi1zZWVr
aW5nIGZsdXNoZXMgd2UgZG9uJ3QgcmVzZXQgdGhlIHRpbWVsaW5lLCBzbyBpbnN0ZWFkIHdlIG5l
ZWQgdG8gaW5jcmVhc2UgdGhlIGBiYXNlYCBmaWVsZAorICAgICAgICAvLyBieSBob3dldmVyIHJ1
bm5pbmcgdGltZSB3ZSdyZSBzdGFydGluZyBhZnRlciB0aGUgZmx1c2guCisKKyAgICAgICAgR3N0
Q2xvY2tUaW1lIHBpcGVsaW5lU3RyZWFtVGltZTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfcXVlcnlf
cG9zaXRpb24oZmluZFBpcGVsaW5lKEdSZWZQdHI8R3N0RWxlbWVudD4oR1NUX0VMRU1FTlQoc3Ry
ZWFtLT5zb3VyY2UpKSkuZ2V0KCksIEdTVF9GT1JNQVRfVElNRSwKKyAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8Z2ludDY0Kj4oJnBpcGVsaW5lU3RyZWFtVGltZSkpOworICAgICAgICAvLyBH
U1RfQ0xPQ0tfVElNRV9OT05FIGlzIHJldHVybmVkIHdoZW4gdGhlIHBpcGVsaW5lIGlzIG5vdCB5
ZXQgcHJlLXJvbGxlZCAoZS5nLiBqdXN0IGFmdGVyIGEgc2VlaykuIEluIHRoaXMgY2FzZQorICAg
ICAgICAvLyB3ZSBkb24ndCBuZWVkIHRvIGFkanVzdCB0aGUgc2VnbWVudCB0aG91Z2gsIGFzIHJ1
bm5pbmcgdGltZSBoYXMgbm90IGFkdmFuY2VkLgorICAgICAgICBpZiAoR1NUX0NMT0NLX1RJTUVf
SVNfVkFMSUQocGlwZWxpbmVTdHJlYW1UaW1lKSkgeworICAgICAgICAgICAgRGF0YU11dGV4PFN0
cmVhbTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgc3RyZWFtaW5nTWVtYmVycyhz
dHJlYW0tPnN0cmVhbWluZ01lbWJlcnNEYXRhTXV0ZXgpOworICAgICAgICAgICAgLy8gV2UgbmVl
ZCB0byBpbmNyZWFzZSB0aGUgYmFzZSBieSB0aGUgcnVubmluZyB0aW1lIGFjY3VtdWxhdGVkIGR1
cmluZyB0aGUgcHJldmlvdXMgc2VnbWVudC4KKworICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIHBp
cGVsaW5lUnVubmluZ1RpbWUgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUoJnN0cmVhbWlu
Z01lbWJlcnMtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgcGlwZWxpbmVTdHJlYW1UaW1lKTsK
KyAgICAgICAgICAgIGFzc2VydChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRChwaXBlbGluZVJ1bm5p
bmdUaW1lKSk7CisgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHN0cmVhbS0+c291cmNlLCAi
UmVzZXR0aW5nIHNlZ21lbnQgdG8gY3VycmVudCBwaXBlbGluZSBydW5uaW5nIHRpbWUgKCUiIEdT
VF9USU1FX0ZPUk1BVCIpIGFuZCBzdHJlYW0gdGltZSAoJSIgR1NUX1RJTUVfRk9STUFUICIpIiwK
KyAgICAgICAgICAgICAgICBHU1RfVElNRV9BUkdTKHBpcGVsaW5lUnVubmluZ1RpbWUpLCBHU1Rf
VElNRV9BUkdTKHBpcGVsaW5lU3RyZWFtVGltZSkpOworICAgICAgICAgICAgc3RyZWFtaW5nTWVt
YmVycy0+c2VnbWVudC5iYXNlID0gcGlwZWxpbmVSdW5uaW5nVGltZTsKKworICAgICAgICAgICAg
c3RyZWFtaW5nTWVtYmVycy0+c2VnbWVudC5zdGFydCA9IHN0cmVhbWluZ01lbWJlcnMtPnNlZ21l
bnQudGltZSA9IHN0YXRpY19jYXN0PEdzdENsb2NrVGltZT4ocGlwZWxpbmVTdHJlYW1UaW1lKTsK
ICAgICAgICAgfQotICAgICAgICByZXN1bHQgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OiB7Ci0gICAgICAgIEdSZWZQdHI8R3N0UGFkPiB0YXJnZXQgPSBhZG9wdEdSZWYoZ3N0
X2dob3N0X3BhZF9nZXRfdGFyZ2V0KEdTVF9HSE9TVF9QQURfQ0FTVChwYWQpKSk7Ci0gICAgICAg
IC8vIEZvcndhcmQgdGhlIHF1ZXJ5IHRvIHRoZSBwcm94eSB0YXJnZXQgcGFkLgotICAgICAgICBp
ZiAodGFyZ2V0KQotICAgICAgICAgICAgcmVzdWx0ID0gZ3N0X3BhZF9xdWVyeSh0YXJnZXQuZ2V0
KCksIHF1ZXJ5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQogICAgIH0KIAotICAgIHJldHVybiBy
ZXN1bHQ7Ci19CisgICAgaWYgKCFza2lwRmx1c2gpIHsKKyAgICAgICAgLy8gQnkgdGFraW5nIHRo
ZSBzdHJlYW0gbG9jayB3ZSBhcmUgd2FpdGluZyBmb3IgdGhlIHN0cmVhbWluZyB0aHJlYWQgdGFz
ayB0byBzdG9wIGlmIGl0IGhhZG4ndCB5ZXQuCisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3Ry
ZWFtLT5wYWQuZ2V0KCksICJUYWtpbmcgdGhlIFNUUkVBTV9MT0NLLiIpOworICAgICAgICBHU1Rf
UEFEX1NUUkVBTV9MT0NLKHN0cmVhbS0+cGFkLmdldCgpKTsKKyAgICAgICAgeworICAgICAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChzdHJlYW0tPnBhZC5nZXQoKSwgIlRha2luZyB0aGUgU3RyZWFt
aW5nTWVtYmVycyBtdXRleCBhZ2Fpbi4iKTsKKyAgICAgICAgICAgIERhdGFNdXRleDxTdHJlYW06
OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyIHN0cmVhbWluZ01lbWJlcnMoc3RyZWFt
LT5zdHJlYW1pbmdNZW1iZXJzRGF0YU11dGV4KTsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpF
Q1Qoc3RyZWFtLT5wYWQuZ2V0KCksICJTdHJlYW1pbmdNZW1iZXJzIG11dGV4IHRha2VuLCB1c2lu
ZyBpdCB0byBzZXQgaXNGbHVzaGluZyA9IGZhbHNlLiIpOworICAgICAgICAgICAgc3RyZWFtaW5n
TWVtYmVycy0+aXNGbHVzaGluZyA9IGZhbHNlOworICAgICAgICAgICAgc3RyZWFtaW5nTWVtYmVy
cy0+ZG9lc05lZWRTZWdtZW50RXZlbnQgPSB0cnVlOworICAgICAgICB9CiAKLXZvaWQgd2ViS2l0
TWVkaWFTcmNVcGRhdGVQcmVzZW50YXRpb25TaXplKEdzdENhcHMqIGNhcHMsIFN0cmVhbSogc3Ry
ZWFtKQotewotICAgIEdTVF9PQkpFQ1RfTE9DSyhzdHJlYW0tPnBhcmVudCk7Ci0gICAgaWYgKFdl
YkNvcmU6OmRvQ2Fwc0hhdmVUeXBlKGNhcHMsIEdTVF9WSURFT19DQVBTX1RZUEVfUFJFRklYKSkg
ewotICAgICAgICBPcHRpb25hbDxXZWJDb3JlOjpGbG9hdFNpemU+IHNpemUgPSBXZWJDb3JlOjpn
ZXRWaWRlb1Jlc29sdXRpb25Gcm9tQ2FwcyhjYXBzKTsKLSAgICAgICAgaWYgKHNpemUuaGFzVmFs
dWUoKSkKLSAgICAgICAgICAgIHN0cmVhbS0+cHJlc2VudGF0aW9uU2l6ZSA9IHNpemUudmFsdWUo
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RyZWFtLT5wcmVzZW50YXRpb25TaXplID0g
V2ViQ29yZTo6RmxvYXRTaXplKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHN0cmVhbS0+cHJlc2Vu
dGF0aW9uU2l6ZSA9IFdlYkNvcmU6OkZsb2F0U2l6ZSgpOworICAgICAgICBHU1RfREVCVUdfT0JK
RUNUKHN0cmVhbS0+cGFkLmdldCgpLCAiU2VuZGluZyBGTFVTSF9TVE9QIGRvd25zdHJlYW0gKHJl
c2V0VGltZSA9ICVzKS4iLCBib29sRm9yUHJpbnRpbmcoaXNTZWVraW5nRmx1c2gpKTsKKyAgICAg
ICAgLy8gU2luY2UgRkxVU0hfU1RPUCBpcyBhIHN5bmNocm9uaXplZCBldmVudCwgd2Ugc2VuZCBp
dCB3aGlsZSB3ZSBzdGlsbCBob2xkIHRoZSBzdHJlYW0gbG9jayBvZiB0aGUgcGFkLgorICAgICAg
ICBnc3RfcGFkX3B1c2hfZXZlbnQoc3RyZWFtLT5wYWQuZ2V0KCksIGdzdF9ldmVudF9uZXdfZmx1
c2hfc3RvcChpc1NlZWtpbmdGbHVzaCkpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHN0cmVh
bS0+cGFkLmdldCgpLCAiRkxVU0hfU1RPUCBzZW50LiIpOwogCi0gICAgZ3N0X2NhcHNfcmVmKGNh
cHMpOwotICAgIHN0cmVhbS0+Y2FwcyA9IGFkb3B0R1JlZihjYXBzKTsKLSAgICBHU1RfT0JKRUNU
X1VOTE9DSyhzdHJlYW0tPnBhcmVudCk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3RyZWFt
LT5wYWQuZ2V0KCksICJTdGFydGluZyB3ZWJLaXRNZWRpYVNyY0xvb3AgdGFzayBhbmQgcmVsZWFz
aW5nIHRoZSBTVFJFQU1fTE9DSy4iKTsKKyAgICAgICAgZ3N0X3BhZF9zdGFydF90YXNrKHN0cmVh
bS0+cGFkLmdldCgpLCB3ZWJLaXRNZWRpYVNyY0xvb3AsIHN0cmVhbS0+cGFkLmdldCgpLCBudWxs
cHRyKTsKKyAgICAgICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLKHN0cmVhbS0+cGFkLmdldCgpKTsK
KyAgICB9CiB9CiAKLXZvaWQgd2ViS2l0TWVkaWFTcmNMaW5rU3RyZWFtVG9TcmNQYWQoR3N0UGFk
KiBzb3VyY2VQYWQsIFN0cmVhbSogc3RyZWFtKQordm9pZCB3ZWJLaXRNZWRpYVNyY0ZsdXNoKFdl
YktpdE1lZGlhU3JjKiBzb3VyY2UsIGNvbnN0IEF0b21TdHJpbmcmIHN0cmVhbU5hbWUpCiB7Ci0g
ICAgdW5zaWduZWQgcGFkSWQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR1BPSU5URVJfVE9fSU5U
KGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKHNvdXJjZVBhZCksICJwYWRJZCIpKSk7Ci0gICAg
R1NUX0RFQlVHX09CSkVDVChzdHJlYW0tPnBhcmVudCwgImxpbmtpbmcgc3RyZWFtIHRvIHNyYyBw
YWQgKGlkOiAldSkiLCBwYWRJZCk7Ci0KLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBwYWROYW1lKGdf
c3RyZHVwX3ByaW50Zigic3JjXyV1IiwgcGFkSWQpKTsKLSAgICBHc3RQYWQqIGdob3N0cGFkID0g
V2ViQ29yZTo6d2Via2l0R3N0R2hvc3RQYWRGcm9tU3RhdGljVGVtcGxhdGUoJnNyY1RlbXBsYXRl
LCBwYWROYW1lLmdldCgpLCBzb3VyY2VQYWQpOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgR1NUX0RFQlVHX09CSkVDVChzb3VyY2UsICJSZWNlaXZlZCBub24tc2VlayBmbHVzaCBy
ZXF1ZXN0IGZvciBzdHJlYW0gJyVzJy4iLCBzdHJlYW1OYW1lLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOworICAgIFN0cmVhbSogc3RyZWFtID0gc291cmNlLT5wcml2LT5zdHJlYW1CeU5hbWUoc3Ry
ZWFtTmFtZSk7CiAKLSAgICBhdXRvIHByb3h5cGFkID0gYWRvcHRHUmVmKEdTVF9QQUQoZ3N0X3By
b3h5X3BhZF9nZXRfaW50ZXJuYWwoR1NUX1BST1hZX1BBRChnaG9zdHBhZCkpKSk7Ci0gICAgZ3N0
X2Zsb3dfY29tYmluZXJfYWRkX3BhZChzdHJlYW0tPnBhcmVudC0+cHJpdi0+Zmxvd0NvbWJpbmVy
LmdldCgpLCBwcm94eXBhZC5nZXQoKSk7Ci0gICAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24o
cHJveHlwYWQuZ2V0KCksIHN0YXRpY19jYXN0PEdzdFBhZENoYWluRnVuY3Rpb24+KHdlYmtpdE1l
ZGlhU3JjQ2hhaW4pKTsKLSAgICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbihnaG9zdHBhZCwg
d2ViS2l0TWVkaWFTcmNRdWVyeVdpdGhQYXJlbnQpOwotCi0gICAgZ3N0X3BhZF9zZXRfYWN0aXZl
KGdob3N0cGFkLCBUUlVFKTsKLSAgICBnc3RfZWxlbWVudF9hZGRfcGFkKEdTVF9FTEVNRU5UKHN0
cmVhbS0+cGFyZW50KSwgZ2hvc3RwYWQpOworICAgIHdlYktpdE1lZGlhU3JjU3RyZWFtRmx1c2go
c3RyZWFtLCBmYWxzZSk7CiB9CiAKLXZvaWQgd2ViS2l0TWVkaWFTcmNMaW5rU291cmNlUGFkKEdz
dFBhZCogc291cmNlUGFkLCBHc3RDYXBzKiBjYXBzLCBTdHJlYW0qIHN0cmVhbSkKK3N0YXRpYyB2
b2lkIHdlYktpdE1lZGlhU3JjU2VlayhXZWJLaXRNZWRpYVNyYyogc291cmNlLCB1aW50NjRfdCBz
dGFydFRpbWUsIGRvdWJsZSByYXRlKQogewotICAgIEFTU0VSVChjYXBzICYmIHN0cmVhbS0+cGFy
ZW50KTsKLSAgICBpZiAoIWNhcHMgfHwgIXN0cmVhbS0+cGFyZW50KSB7Ci0gICAgICAgIEdTVF9F
UlJPUigiVW5hYmxlIHRvIGxpbmsgcGFyc2VyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICB3ZWJLaXRNZWRpYVNyY1VwZGF0ZVByZXNlbnRhdGlvblNpemUoY2Fwcywgc3RyZWFtKTsK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHNvdXJjZS0+cHJpdi0+c3RhcnRUaW1l
ID0gc3RhcnRUaW1lOworICAgIHNvdXJjZS0+cHJpdi0+cmF0ZSA9IHJhdGU7CisgICAgR1NUX0RF
QlVHX09CSkVDVChzb3VyY2UsICJTZWVrIHJlcXVlc3RlZCB0byB0aW1lICUiIEdTVF9USU1FX0ZP
Uk1BVCAiIHdpdGggcmF0ZSAlZi4iLCBHU1RfVElNRV9BUkdTKHN0YXJ0VGltZSksIHJhdGUpOwog
Ci0gICAgLy8gRklYTUU6IGRyb3Agd2ViS2l0TWVkaWFTcmNMaW5rU3RyZWFtVG9TcmNQYWQoKSBh
bmQgbW92ZSBpdHMgY29kZSBoZXJlLgotICAgIGlmICghZ3N0X3BhZF9pc19saW5rZWQoc291cmNl
UGFkKSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHN0cmVhbS0+cGFyZW50LCAicGFkIG5v
dCBsaW5rZWQgeWV0Iik7Ci0gICAgICAgIHdlYktpdE1lZGlhU3JjTGlua1N0cmVhbVRvU3JjUGFk
KHNvdXJjZVBhZCwgc3RyZWFtKTsKKyAgICBmb3IgKGF1dG8mIHBhaXIgOiBzb3VyY2UtPnByaXYt
PnN0cmVhbXMpIHsKKyAgICAgICAgY29uc3QgUmVmUHRyPFN0cmVhbT4mIHN0cmVhbSA9IHBhaXIu
dmFsdWU7CisgICAgICAgIHdlYktpdE1lZGlhU3JjU3RyZWFtRmx1c2goc3RyZWFtLmdldCgpLCB0
cnVlKTsKICAgICB9Ci0KLSAgICB3ZWJLaXRNZWRpYVNyY0NoZWNrQWxsVHJhY2tzQ29uZmlndXJl
ZChzdHJlYW0tPnBhcmVudCk7CiB9CiAKLXZvaWQgd2ViS2l0TWVkaWFTcmNGcmVlU3RyZWFtKFdl
YktpdE1lZGlhU3JjKiBzb3VyY2UsIFN0cmVhbSogc3RyZWFtKQorc3RhdGljIGludCBjb3VudFN0
cmVhbXNPZlR5cGUoV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSwgV2ViQ29yZTo6VHJhY2tQcml2YXRl
QmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlIHR5cGUpCiB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVChz
b3VyY2UsICJSZWxlYXNpbmcgc3RyZWFtOiAlcCIsIHN0cmVhbSk7CisgICAgLy8gQmFycmluZyBw
aXBlbGluZSBkdW1wcyBzb21lb25lIG1heSBhZGQgZHVyaW5nIGRlYnVnZ2luZywgV2ViS2l0IHdp
bGwgb25seSByZWFkIHRoZXNlIHByb3BlcnRpZXMgKG4tdmlkZW8gZXRjLikgZnJvbSB0aGUgbWFp
biB0aHJlYWQuCisgICAgcmV0dXJuIHN0ZDo6Y291bnRfaWYoc291cmNlLT5wcml2LT5zdHJlYW1z
LmJlZ2luKCksIHNvdXJjZS0+cHJpdi0+c3RyZWFtcy5lbmQoKSwgW3R5cGVdKGF1dG8gaXRlbSkg
eworICAgICAgICByZXR1cm4gaXRlbS52YWx1ZS0+dHJhY2stPnR5cGUoKSA9PSB0eXBlOworICAg
IH0pOworfQogCi0gICAgaWYgKEdTVF9JU19BUFBfU1JDKHN0cmVhbS0+YXBwc3JjKSkgewotICAg
ICAgICAvLyBEb24ndCB0cmlnZ2VyIGNhbGxiYWNrcyBmcm9tIHRoaXMgYXBwc3JjIHRvIGF2b2lk
IHVzaW5nIHRoZSBzdHJlYW0gYW55bW9yZS4KLSAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X2NhbGxi
YWNrcyhHU1RfQVBQX1NSQyhzdHJlYW0tPmFwcHNyYyksICZkaXNhYmxlZEFwcHNyY0NhbGxiYWNr
cywgbnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0o
R1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpKTsKLSAgICAgICAgZ3N0X29iamVjdF91bnJlZihz
dHJlYW0tPmFwcHNyYyk7Ci0gICAgfQorc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNHZXRQcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIHVuc2lnbmVkIHByb3BJZCwgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSA9IFdFQktJVF9N
RURJQV9TUkMob2JqZWN0KTsKIAotICAgIEdTVF9PQkpFQ1RfTE9DSyhzb3VyY2UpOwotICAgIHN3
aXRjaCAoc3RyZWFtLT50eXBlKSB7Ci0gICAgY2FzZSBXZWJDb3JlOjpBdWRpbzoKLSAgICAgICAg
c291cmNlLT5wcml2LT5udW1iZXJPZkF1ZGlvU3RyZWFtcy0tOworICAgIHN3aXRjaCAocHJvcElk
KSB7CisgICAgY2FzZSBQUk9QX05fQVVESU86CisgICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1
ZSwgY291bnRTdHJlYW1zT2ZUeXBlKHNvdXJjZSwgV2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZUdT
dHJlYW1lcjo6VHJhY2tUeXBlOjpBdWRpbykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIFdl
YkNvcmU6OlZpZGVvOgotICAgICAgICBzb3VyY2UtPnByaXYtPm51bWJlck9mVmlkZW9TdHJlYW1z
LS07CisgICAgY2FzZSBQUk9QX05fVklERU86CisgICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1
ZSwgY291bnRTdHJlYW1zT2ZUeXBlKHNvdXJjZSwgV2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZUdT
dHJlYW1lcjo6VHJhY2tUeXBlOjpWaWRlbykpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIFdl
YkNvcmU6OlRleHQ6Ci0gICAgICAgIHNvdXJjZS0+cHJpdi0+bnVtYmVyT2ZUZXh0U3RyZWFtcy0t
OworICAgIGNhc2UgUFJPUF9OX1RFWFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwg
Y291bnRTdHJlYW1zT2ZUeXBlKHNvdXJjZSwgV2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZUdTdHJl
YW1lcjo6VHJhY2tUeXBlOjpUZXh0KSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGJyZWFrOworICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQo
b2JqZWN0LCBwcm9wSWQsIHBzcGVjKTsKICAgICB9Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0soc291
cmNlKTsKK30KIAotICAgIGlmIChzdHJlYW0tPnR5cGUgIT0gV2ViQ29yZTo6SW52YWxpZCkgewot
ICAgICAgICBHU1RfREVCVUcoIkZyZWVpbmcgdHJhY2stcmVsYXRlZCBpbmZvIG9uIHN0cmVhbSAl
cCIsIHN0cmVhbSk7Ci0KLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc291cmNlLT5wcml2LT5z
dHJlYW1Mb2NrKTsKLQotICAgICAgICBpZiAoc3RyZWFtLT5jYXBzKQotICAgICAgICAgICAgc3Ry
ZWFtLT5jYXBzID0gbnVsbHB0cjsKLQotICAgICAgICBpZiAoc3RyZWFtLT5hdWRpb1RyYWNrKQot
ICAgICAgICAgICAgc3RyZWFtLT5hdWRpb1RyYWNrID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKHN0
cmVhbS0+dmlkZW9UcmFjaykKLSAgICAgICAgICAgIHN0cmVhbS0+dmlkZW9UcmFjayA9IG51bGxw
dHI7Ci0KLSAgICAgICAgaW50IHNpZ25hbCA9IC0xOwotICAgICAgICBzd2l0Y2ggKHN0cmVhbS0+
dHlwZSkgewotICAgICAgICBjYXNlIFdlYkNvcmU6OkF1ZGlvOgotICAgICAgICAgICAgc2lnbmFs
ID0gU0lHTkFMX0FVRElPX0NIQU5HRUQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpWaWRlbzoKLSAgICAgICAgICAgIHNpZ25hbCA9IFNJR05BTF9WSURFT19DSEFO
R0VEOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6VGV4dDoKLSAg
ICAgICAgICAgIHNpZ25hbCA9IFNJR05BTF9URVhUX0NIQU5HRUQ7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOworc3RhdGljIEdzdFN0YXRl
Q2hhbmdlUmV0dXJuIHdlYktpdE1lZGlhU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVu
dCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKK3sKKyAgICBXZWJLaXRNZWRpYVNyYyogc291
cmNlID0gV0VCS0lUX01FRElBX1NSQyhlbGVtZW50KTsKKyAgICBzd2l0Y2ggKHRyYW5zaXRpb24p
IHsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgorICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHNvdXJjZSwgIkRvd25ncmFkaW5nIHRvIFJFQURZIHN0YXRlLCB0ZWFy
aW5nIGRvd24gYWxsIHN0cmVhbXMuLi4iKTsKKyAgICAgICAgd2hpbGUgKCFzb3VyY2UtPnByaXYt
PnN0cmVhbXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgd2ViS2l0TWVkaWFTcmNUZWFyRG93blN0
cmVhbShzb3VyY2UsIHNvdXJjZS0+cHJpdi0+c3RyZWFtcy5iZWdpbigpLT5rZXkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgorICAg
ICAgICBpZiAoc291cmNlLT5wcml2LT5pc1N0YXJ0ZWQoKSkgeworICAgICAgICAgICAgR1NUX0ZJ
WE1FX09CSkVDVChzb3VyY2UsICJSZXN1bWluZyBzdGF0ZSBmcm9tIFJFQURZIC0+IFBBVVNFRCBh
ZnRlciBhIGRvd25ncmFkZSBpcyBub3QgaW1wbGVtZW50ZWQuIEV4cGVjdCBmYWlsdXJlLiIpOwog
ICAgICAgICB9Ci0gICAgICAgIHN0cmVhbS0+dHlwZSA9IFdlYkNvcmU6OkludmFsaWQ7Ci0KLSAg
ICAgICAgaWYgKHNpZ25hbCAhPSAtMSkKLSAgICAgICAgICAgIGdfc2lnbmFsX2VtaXQoR19PQkpF
Q1Qoc291cmNlKSwgd2ViS2l0TWVkaWFTcmNTaWduYWxzW3NpZ25hbF0sIDAsIG51bGxwdHIpOwot
Ci0gICAgICAgIHNvdXJjZS0+cHJpdi0+c3RyZWFtQ29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKICAgICB9Ci0KLSAgICBk
ZWxldGUgc3RyZWFtOworICAgIHJldHVybiBHU1RfRUxFTUVOVF9DTEFTUyh3ZWJraXRfbWVkaWFf
c3JjX3BhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZShlbGVtZW50LCB0cmFuc2l0aW9uKTsKIH0K
IAotdm9pZCB3ZWJLaXRNZWRpYVNyY0NoZWNrQWxsVHJhY2tzQ29uZmlndXJlZChXZWJLaXRNZWRp
YVNyYyogd2ViS2l0TWVkaWFTcmMpCitzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFTcmNTZW5k
RXZlbnQoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0RXZlbnQqIGV2ZW50KQogewotICAgIGJvb2wg
YWxsVHJhY2tzQ29uZmlndXJlZCA9IGZhbHNlOwotCi0gICAgR1NUX09CSkVDVF9MT0NLKHdlYktp
dE1lZGlhU3JjKTsKLSAgICBpZiAoIXdlYktpdE1lZGlhU3JjLT5wcml2LT5hbGxUcmFja3NDb25m
aWd1cmVkKSB7Ci0gICAgICAgIGFsbFRyYWNrc0NvbmZpZ3VyZWQgPSB0cnVlOwotICAgICAgICBm
b3IgKFN0cmVhbSogc3RyZWFtIDogd2ViS2l0TWVkaWFTcmMtPnByaXYtPnN0cmVhbXMpIHsKLSAg
ICAgICAgICAgIGlmIChzdHJlYW0tPnR5cGUgPT0gV2ViQ29yZTo6SW52YWxpZCkgewotICAgICAg
ICAgICAgICAgIGFsbFRyYWNrc0NvbmZpZ3VyZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KKyAgICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFKGV2ZW50KSkg
eworICAgIGNhc2UgR1NUX0VWRU5UX1NFRUs6IHsKKyAgICAgICAgZG91YmxlIHJhdGU7CisgICAg
ICAgIEdzdEZvcm1hdCBmb3JtYXQ7CisgICAgICAgIEdzdFNlZWtUeXBlIHN0YXJ0VHlwZTsKKyAg
ICAgICAgaW50NjRfdCBzdGFydDsKKyAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3NlZWsoZXZlbnQs
ICZyYXRlLCAmZm9ybWF0LCBudWxscHRyLCAmc3RhcnRUeXBlLCAmc3RhcnQsIG51bGxwdHIsIG51
bGxwdHIpOworICAgICAgICBpZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSB8fCBzdGFydFR5
cGUgIT0gR1NUX1NFRUtfVFlQRV9TRVQpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qo
ZWxlbWVudCwgIlJlamVjdGluZyB1bnN1cHBvcnRlZCBzZWVrIGV2ZW50OiAlIiBHU1RfUFRSX0ZP
Uk1BVCwgZXZlbnQpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAg
ICAgIGlmIChhbGxUcmFja3NDb25maWd1cmVkKQotICAgICAgICAgICAgd2ViS2l0TWVkaWFTcmMt
PnByaXYtPmFsbFRyYWNrc0NvbmZpZ3VyZWQgPSB0cnVlOworICAgICAgICBHU1RfREVCVUdfT0JK
RUNUKGVsZW1lbnQsICJIYW5kbGluZyBzZWVrIGV2ZW50OiAlIiBHU1RfUFRSX0ZPUk1BVCwgZXZl
bnQpOworICAgICAgICB3ZWJLaXRNZWRpYVNyY1NlZWsoV0VCS0lUX01FRElBX1NSQyhlbGVtZW50
KSwgc3RhcnQsIHJhdGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgR1NUX09C
SkVDVF9VTkxPQ0sod2ViS2l0TWVkaWFTcmMpOwotCi0gICAgaWYgKGFsbFRyYWNrc0NvbmZpZ3Vy
ZWQpIHsKLSAgICAgICAgR1NUX0RFQlVHKCJBbGwgdHJhY2tzIGF0dGFjaGVkLiBDb21wbGV0aW5n
IGFzeW5jIHN0YXRlIGNoYW5nZSBvcGVyYXRpb24uIik7Ci0gICAgICAgIGdzdF9lbGVtZW50X25v
X21vcmVfcGFkcyhHU1RfRUxFTUVOVCh3ZWJLaXRNZWRpYVNyYykpOwotICAgICAgICB3ZWJLaXRN
ZWRpYVNyY0RvQXN5bmNEb25lKHdlYktpdE1lZGlhU3JjKTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBHU1RfREVCVUdfT0JKRUNUKGVsZW1lbnQsICJSZWplY3RpbmcgdW5zdXBwb3J0ZWQgZXZlbnQ6
ICUiIEdTVF9QVFJfRk9STUFULCBldmVudCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiB9CiAKLS8vIFVyaSBoYW5kbGVyIGludGVyZmFjZS4KLUdzdFVSSVR5cGUgd2ViS2l0TWVkaWFT
cmNVcmlHZXRUeXBlKEdUeXBlKQorLy8gVVJJIGhhbmRsZXIgaW50ZXJmYWNlLiBJdCdzIG9ubHkg
cHVycG9zZSBpcyBmb3IgdGhlIGVsZW1lbnQgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IHBsYXliaW4g
b24gIm1lZGlhc291cmNlYmxvYjoiCisvLyBVUklzLiBUaGUgYWN0dWFsIFVSSSBkb2VzIG5vdCBt
YXR0ZXIuCitzdGF0aWMgR3N0VVJJVHlwZSB3ZWJLaXRNZWRpYVNyY1VyaUdldFR5cGUoR1R5cGUp
CiB7CiAgICAgcmV0dXJuIEdTVF9VUklfU1JDOwogfQogCi1jb25zdCBnY2hhciogY29uc3QqIHdl
YktpdE1lZGlhU3JjR2V0UHJvdG9jb2xzKEdUeXBlKQorc3RhdGljIGNvbnN0IGdjaGFyKiBjb25z
dCogd2ViS2l0TWVkaWFTcmNHZXRQcm90b2NvbHMoR1R5cGUpCiB7CiAgICAgc3RhdGljIGNvbnN0
IGNoYXIqIHByb3RvY29sc1tdID0geyJtZWRpYXNvdXJjZWJsb2IiLCBudWxscHRyIH07CiAgICAg
cmV0dXJuIHByb3RvY29sczsKIH0KIAotZ2NoYXIqIHdlYktpdE1lZGlhU3JjR2V0VXJpKEdzdFVS
SUhhbmRsZXIqIGhhbmRsZXIpCitzdGF0aWMgZ2NoYXIqIHdlYktpdE1lZGlhU3JjR2V0VXJpKEdz
dFVSSUhhbmRsZXIqIGhhbmRsZXIpCiB7CiAgICAgV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSA9IFdF
QktJVF9NRURJQV9TUkMoaGFuZGxlcik7CiAgICAgZ2NoYXIqIHJlc3VsdDsKIAogICAgIEdTVF9P
QkpFQ1RfTE9DSyhzb3VyY2UpOwotICAgIHJlc3VsdCA9IGdfc3RyZHVwKHNvdXJjZS0+cHJpdi0+
bG9jYXRpb24uZ2V0KCkpOworICAgIHJlc3VsdCA9IGdfc3RyZHVwKHNvdXJjZS0+cHJpdi0+dXJp
LmdldCgpKTsKICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzb3VyY2UpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLWdib29sZWFuIHdlYktpdE1lZGlhU3JjU2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhh
bmRsZXIsIGNvbnN0IGdjaGFyKiB1cmksIEdFcnJvcioqKQorc3RhdGljIGdib29sZWFuIHdlYktp
dE1lZGlhU3JjU2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmks
IEdFcnJvcioqKQogewogICAgIFdlYktpdE1lZGlhU3JjKiBzb3VyY2UgPSBXRUJLSVRfTUVESUFf
U1JDKGhhbmRsZXIpOwogCiAgICAgaWYgKEdTVF9TVEFURShzb3VyY2UpID49IEdTVF9TVEFURV9Q
QVVTRUQpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzb3VyY2UsICJVUkkgY2FuIG9ubHkg
YmUgc2V0IGluIHN0YXRlcyA8IFBBVVNFRCIpOwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBHU1RfT0JKRUNUX0xPQ0soc291cmNlKTsK
LSAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzb3VyY2UtPnByaXY7Ci0gICAgcHJp
di0+bG9jYXRpb24gPSBudWxscHRyOwotICAgIGlmICghdXJpKSB7Ci0gICAgICAgIEdTVF9PQkpF
Q1RfVU5MT0NLKHNvdXJjZSk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIFVS
TCB1cmwoVVJMKCksIHVyaSk7Ci0KLSAgICBwcml2LT5sb2NhdGlvbiA9IEdVbmlxdWVQdHI8Z2No
YXI+KGdfc3RyZHVwKHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgc291cmNlLT5w
cml2LT51cmkgPSBHVW5pcXVlUHRyPGNoYXI+KGdfc3RyZHVwKHVyaSkpOwogICAgIEdTVF9PQkpF
Q1RfVU5MT0NLKHNvdXJjZSk7CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKLXZvaWQgd2ViS2l0TWVk
aWFTcmNVcmlIYW5kbGVySW5pdChncG9pbnRlciBnSWZhY2UsIGdwb2ludGVyKQorc3RhdGljIHZv
aWQgd2ViS2l0TWVkaWFTcmNVcmlIYW5kbGVySW5pdCh2b2lkKiBnSWZhY2UsIHZvaWQqKQogewog
ICAgIEdzdFVSSUhhbmRsZXJJbnRlcmZhY2UqIGlmYWNlID0gKEdzdFVSSUhhbmRsZXJJbnRlcmZh
Y2UgKikgZ0lmYWNlOwogCkBAIC02NTYsMTk5ICs3ODQsNiBAQCB2b2lkIHdlYktpdE1lZGlhU3Jj
VXJpSGFuZGxlckluaXQoZ3BvaW50ZXIgZ0lmYWNlLCBncG9pbnRlcikKICAgICBpZmFjZS0+c2V0
X3VyaSA9IHdlYktpdE1lZGlhU3JjU2V0VXJpOwogfQogCi1zdGF0aWMgdm9pZCBzZWVrTmVlZHNE
YXRhTWFpblRocmVhZChXZWJLaXRNZWRpYVNyYyogc291cmNlKQotewotICAgIEdTVF9ERUJVRygi
QnVmZmVyaW5nIG5lZWRlZCBiZWZvcmUgc2VlayIpOwotCi0gICAgQVNTRVJUKFdURjo6aXNNYWlu
VGhyZWFkKCkpOwotCi0gICAgR1NUX09CSkVDVF9MT0NLKHNvdXJjZSk7Ci0gICAgTWVkaWFUaW1l
IHNlZWtUaW1lID0gc291cmNlLT5wcml2LT5zZWVrVGltZTsKLSAgICBXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0UqIG1lZGlhUGxheWVyUHJpdmF0ZSA9IHNvdXJjZS0+cHJp
di0+bWVkaWFQbGF5ZXJQcml2YXRlOwotCi0gICAgaWYgKCFtZWRpYVBsYXllclByaXZhdGUpIHsK
LSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc291cmNlKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGZvciAoU3RyZWFtKiBzdHJlYW0gOiBzb3VyY2UtPnByaXYtPnN0cmVhbXMpIHsK
LSAgICAgICAgaWYgKHN0cmVhbS0+dHlwZSAhPSBXZWJDb3JlOjpJbnZhbGlkKQotICAgICAgICAg
ICAgc3RyZWFtLT5zb3VyY2VCdWZmZXItPnNldFJlYWR5Rm9yTW9yZVNhbXBsZXModHJ1ZSk7Ci0g
ICAgfQotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNvdXJjZSk7Ci0gICAgbWVkaWFQbGF5ZXJQcml2
YXRlLT5ub3RpZnlTZWVrTmVlZHNEYXRhRm9yVGltZShzZWVrVGltZSk7Ci19Ci0KLXN0YXRpYyB2
b2lkIG5vdGlmeVJlYWR5Rm9yTW9yZVNhbXBsZXNNYWluVGhyZWFkKFdlYktpdE1lZGlhU3JjKiBz
b3VyY2UsIFN0cmVhbSogYXBwc3JjU3RyZWFtKQotewotICAgIEdTVF9PQkpFQ1RfTE9DSyhzb3Vy
Y2UpOwotCi0gICAgYXV0byBpdCA9IHN0ZDo6ZmluZChzb3VyY2UtPnByaXYtPnN0cmVhbXMuYmVn
aW4oKSwgc291cmNlLT5wcml2LT5zdHJlYW1zLmVuZCgpLCBhcHBzcmNTdHJlYW0pOwotICAgIGlm
IChpdCA9PSBzb3VyY2UtPnByaXYtPnN0cmVhbXMuZW5kKCkpIHsKLSAgICAgICAgR1NUX09CSkVD
VF9VTkxPQ0soc291cmNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSogbWVkaWFQbGF5ZXJQcml2YXRlID0gc291
cmNlLT5wcml2LT5tZWRpYVBsYXllclByaXZhdGU7Ci0gICAgaWYgKG1lZGlhUGxheWVyUHJpdmF0
ZSAmJiAhbWVkaWFQbGF5ZXJQcml2YXRlLT5zZWVraW5nKCkpCi0gICAgICAgIGFwcHNyY1N0cmVh
bS0+c291cmNlQnVmZmVyLT5ub3RpZnlSZWFkeUZvck1vcmVTYW1wbGVzKCk7Ci0KLSAgICBHU1Rf
T0JKRUNUX1VOTE9DSyhzb3VyY2UpOwotfQotCi12b2lkIHdlYktpdE1lZGlhU3JjUmVzdG9yZVRy
YWNrcyhXZWJLaXRNZWRpYVNyYyogb2xkU291cmNlLCBXZWJLaXRNZWRpYVNyYyogbmV3U291cmNl
KQotewotICAgIG5ld1NvdXJjZS0+cHJpdi0+c3RyZWFtcyA9IFdURk1vdmUob2xkU291cmNlLT5w
cml2LT5zdHJlYW1zKTsKLSAgICBmb3IgKGF1dG8qIHN0cmVhbSA6IG5ld1NvdXJjZS0+cHJpdi0+
c3RyZWFtcykgewotICAgICAgICBzdHJlYW0tPnBhcmVudCA9IG5ld1NvdXJjZTsKLQotICAgICAg
ICBhdXRvIG9sZFNvdXJjZVBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3Bh
ZChzdHJlYW0tPmFwcHNyYywgInNyYyIpKTsKLSAgICAgICAgdW5zaWduZWQgcGFkSWQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oR1BPSU5URVJfVE9fSU5UKGdfb2JqZWN0X2dldF9kYXRhKEdfT0JK
RUNUKG9sZFNvdXJjZVBhZC5nZXQoKSksICJwYWRJZCIpKSk7Ci0KLSAgICAgICAgZ3N0X29iamVj
dF91bnJlZihzdHJlYW0tPmFwcHNyYyk7Ci0KLSAgICAgICAgLy8gRW5zdXJlIG93bmVyc2hpcCBp
cyBub3QgdHJhbnNmZXJlZCB0byB0aGUgYmluLiBUaGUgYXBwc3JjIGVsZW1lbnQgaXMgbWFuYWdl
ZCBieSBpdHMgcGFyZW50IFN0cmVhbS4KLSAgICAgICAgc3RyZWFtLT5hcHBzcmMgPSBHU1RfRUxF
TUVOVF9DQVNUKGdzdF9vYmplY3RfcmVmX3NpbmsoZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJh
cHBzcmMiLCBudWxscHRyKSkpOwotICAgICAgICBzdHJlYW0tPmFwcHNyY05lZWREYXRhRmxhZyA9
IHRydWU7Ci0KLSAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X2NhbGxiYWNrcyhHU1RfQVBQX1NSQyhz
dHJlYW0tPmFwcHNyYyksICZlbmFibGVkQXBwc3JjQ2FsbGJhY2tzLCBzdHJlYW0tPnBhcmVudCwg
bnVsbHB0cik7Ci0gICAgICAgIGdzdF9hcHBfc3JjX3NldF9lbWl0X3NpZ25hbHMoR1NUX0FQUF9T
UkMoc3RyZWFtLT5hcHBzcmMpLCBGQUxTRSk7Ci0gICAgICAgIGdzdF9hcHBfc3JjX3NldF9zdHJl
YW1fdHlwZShHU1RfQVBQX1NSQyhzdHJlYW0tPmFwcHNyYyksIEdTVF9BUFBfU1RSRUFNX1RZUEVf
U0VFS0FCTEUpOwotCi0gICAgICAgIGdzdF9hcHBfc3JjX3NldF9tYXhfYnl0ZXMoR1NUX0FQUF9T
UkMoc3RyZWFtLT5hcHBzcmMpLCAyICogV1RGOjpNQik7Ci0gICAgICAgIGdfb2JqZWN0X3NldChH
X09CSkVDVChzdHJlYW0tPmFwcHNyYyksICJibG9jayIsIEZBTFNFLCAibWluLXBlcmNlbnQiLCAy
MCwgImZvcm1hdCIsIEdTVF9GT1JNQVRfVElNRSwgbnVsbHB0cik7Ci0KLSAgICAgICAgZ3N0X2Jp
bl9hZGQoR1NUX0JJTl9DQVNUKG5ld1NvdXJjZSksIHN0cmVhbS0+YXBwc3JjKTsKLQotICAgICAg
ICBhdXRvIHNvdXJjZVBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChz
dHJlYW0tPmFwcHNyYywgInNyYyIpKTsKLSAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpF
Q1Qoc291cmNlUGFkLmdldCgpKSwgInBhZElkIiwgR0lOVF9UT19QT0lOVEVSKHBhZElkKSk7Ci0g
ICAgfQotCi0gICAgbmV3U291cmNlLT5wcml2LT5udW1iZXJPZkF1ZGlvU3RyZWFtcyA9IG9sZFNv
dXJjZS0+cHJpdi0+bnVtYmVyT2ZBdWRpb1N0cmVhbXM7Ci0gICAgbmV3U291cmNlLT5wcml2LT5u
dW1iZXJPZlRleHRTdHJlYW1zID0gb2xkU291cmNlLT5wcml2LT5udW1iZXJPZlRleHRTdHJlYW1z
OwotICAgIG5ld1NvdXJjZS0+cHJpdi0+bnVtYmVyT2ZWaWRlb1N0cmVhbXMgPSBvbGRTb3VyY2Ut
PnByaXYtPm51bWJlck9mVmlkZW9TdHJlYW1zOwotICAgIG5ld1NvdXJjZS0+cHJpdi0+bnVtYmVy
T2ZQYWRzID0gb2xkU291cmNlLT5wcml2LT5udW1iZXJPZlBhZHM7Ci0gICAgbmV3U291cmNlLT5w
cml2LT5hbGxUcmFja3NDb25maWd1cmVkID0gb2xkU291cmNlLT5wcml2LT5hbGxUcmFja3NDb25m
aWd1cmVkOwotfQotCi12b2lkIHdlYktpdE1lZGlhU3JjU2lnbmFsVHJhY2tzKFdlYktpdE1lZGlh
U3JjKiBzb3VyY2UpCi17Ci0gICAgZm9yIChhdXRvKiBzdHJlYW0gOiBzb3VyY2UtPnByaXYtPnN0
cmVhbXMpIHsKLSAgICAgICAgYXV0byBzb3VyY2VQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRpY19wYWQoc3RyZWFtLT5hcHBzcmMsICJzcmMiKSk7Ci0gICAgICAgIHdlYktpdE1l
ZGlhU3JjTGlua1N0cmVhbVRvU3JjUGFkKHNvdXJjZVBhZC5nZXQoKSwgc3RyZWFtKTsKLQotICAg
ICAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KHN0cmVhbS0+YXBwc3JjKTsK
LQotICAgICAgICBpbnQgc2lnbmFsID0gLTE7Ci0gICAgICAgIHN3aXRjaCAoc3RyZWFtLT50eXBl
KSB7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVy
OjpWaWRlbzoKLSAgICAgICAgICAgIHNpZ25hbCA9IFNJR05BTF9WSURFT19DSEFOR0VEOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1U
eXBlR1N0cmVhbWVyOjpBdWRpbzoKLSAgICAgICAgICAgIHNpZ25hbCA9IFNJR05BTF9BVURJT19D
SEFOR0VEOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFT
b3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpUZXh0OgotICAgICAgICAgICAgc2lnbmFsID0gU0lH
TkFMX1RFWFRfQ0hBTkdFRDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHNpZ25hbCAhPSAtMSkK
LSAgICAgICAgICAgIGdfc2lnbmFsX2VtaXQoR19PQkpFQ1Qoc3RyZWFtLT5wYXJlbnQpLCB3ZWJL
aXRNZWRpYVNyY1NpZ25hbHNbc2lnbmFsXSwgMCwgbnVsbHB0cik7Ci0gICAgfQotCi0gICAgaWYg
KHNvdXJjZS0+cHJpdi0+c3RyZWFtcy5zaXplKCkpIHsKLSAgICAgICAgZ3N0X2VsZW1lbnRfbm9f
bW9yZV9wYWRzKEdTVF9FTEVNRU5UX0NBU1Qoc291cmNlKSk7Ci0gICAgICAgIHdlYktpdE1lZGlh
U3JjRG9Bc3luY0RvbmUoc291cmNlKTsKLSAgICB9Ci19Ci0KLXZvaWQgd2ViS2l0TWVkaWFTcmNT
ZXRNZWRpYVBsYXllclByaXZhdGUoV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSwgV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFKiBtZWRpYVBsYXllclByaXZhdGUpCi17Ci0gICAg
R1NUX09CSkVDVF9MT0NLKHNvdXJjZSk7Ci0KLSAgICAvLyBTZXQgdG8gbnVsbHB0ciBvbiBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIgZGVzdHJ1Y3Rpb24sIG5ldmVyIGEgZGFuZ2xpbmcgcG9p
bnRlci4KLSAgICBzb3VyY2UtPnByaXYtPm1lZGlhUGxheWVyUHJpdmF0ZSA9IG1lZGlhUGxheWVy
UHJpdmF0ZTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzb3VyY2UpOwotfQotCi12b2lkIHdlYktp
dE1lZGlhU3JjU2V0UmVhZHlGb3JTYW1wbGVzKFdlYktpdE1lZGlhU3JjKiBzb3VyY2UsIGJvb2wg
aXNSZWFkeSkKLXsKLSAgICBpZiAoc291cmNlKSB7Ci0gICAgICAgIEdTVF9PQkpFQ1RfTE9DSyhz
b3VyY2UpOwotICAgICAgICBmb3IgKFN0cmVhbSogc3RyZWFtIDogc291cmNlLT5wcml2LT5zdHJl
YW1zKQotICAgICAgICAgICAgc3RyZWFtLT5zb3VyY2VCdWZmZXItPnNldFJlYWR5Rm9yTW9yZVNh
bXBsZXMoaXNSZWFkeSk7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNvdXJjZSk7Ci0gICAg
fQotfQotCi12b2lkIHdlYktpdE1lZGlhU3JjUHJlcGFyZVNlZWsoV2ViS2l0TWVkaWFTcmMqIHNv
dXJjZSwgY29uc3QgTWVkaWFUaW1lJiB0aW1lKQotewotICAgIEdTVF9PQkpFQ1RfTE9DSyhzb3Vy
Y2UpOwotICAgIHNvdXJjZS0+cHJpdi0+c2Vla1RpbWUgPSB0aW1lOwotICAgIHNvdXJjZS0+cHJp
di0+YXBwc3JjU2Vla0RhdGFDb3VudCA9IDA7Ci0gICAgc291cmNlLT5wcml2LT5hcHBzcmNOZWVk
RGF0YUNvdW50ID0gMDsKLQotICAgIGZvciAoU3RyZWFtKiBzdHJlYW0gOiBzb3VyY2UtPnByaXYt
PnN0cmVhbXMpIHsKLSAgICAgICAgc3RyZWFtLT5hcHBzcmNOZWVkRGF0YUZsYWcgPSBmYWxzZTsK
LSAgICAgICAgLy8gRG9uJ3QgYWxsb3cgc2FtcGxlcyBhd2F5IGZyb20gdGhlIHNlZWtUaW1lIHRv
IGJlIGVucXVldWVkLgotICAgICAgICBzdHJlYW0tPmxhc3RFbnF1ZXVlZFRpbWUgPSB0aW1lOwot
ICAgIH0KLQotICAgIC8vIFRoZSBwZW5kaW5nIGFjdGlvbiB3aWxsIGJlIHBlcmZvcm1lZCBpbiBl
bmFibGVkQXBwc3JjU2Vla0RhdGEoKS4KLSAgICBzb3VyY2UtPnByaXYtPmFwcHNyY1NlZWtEYXRh
TmV4dEFjdGlvbiA9IE1lZGlhU291cmNlU2Vla1RvVGltZTsKLSAgICBHU1RfT0JKRUNUX1VOTE9D
Syhzb3VyY2UpOwotfQotCi1Hc3RQYWRQcm9iZVJldHVybiBpbml0aWFsU2Vla1NlZ21lbnRGaXhl
clByb2JlKEdzdFBhZCAqcGFkLCBHc3RQYWRQcm9iZUluZm8gKmluZm8sIGdwb2ludGVyIHVzZXJE
YXRhKQotewotICAgIEdzdEV2ZW50KiBldmVudCA9IEdTVF9QQURfUFJPQkVfSU5GT19FVkVOVChp
bmZvKTsKLSAgICBpZiAoR1NUX0VWRU5UX1RZUEUoZXZlbnQpID09IEdTVF9FVkVOVF9TRUdNRU5U
KSB7Ci0gICAgICAgIGNvbnN0IEdzdFNlZ21lbnQqIG9yaWdpbmFsU2VnbWVudCA9IG51bGxwdHI7
Ci0gICAgICAgIGNvbnN0IEdzdFNlZ21lbnQqIGZpeGVkU2VnbWVudCA9IHN0YXRpY19jYXN0PEdz
dFNlZ21lbnQqPih1c2VyRGF0YSk7Ci0gICAgICAgIGdzdF9ldmVudF9wYXJzZV9zZWdtZW50KGV2
ZW50LCAmb3JpZ2luYWxTZWdtZW50KTsKLSAgICAgICAgR1NUX0RFQlVHKCJTZWdtZW50IGF0ICVz
OiAlIiBHU1RfU0VHTUVOVF9GT1JNQVQgIiwgcmVwbGFjZWQgYnkgJSIgR1NUX1NFR01FTlRfRk9S
TUFULCBHU1RfRUxFTUVOVF9OQU1FKEdTVF9QQURfUEFSRU5UKHBhZCkpLCBvcmlnaW5hbFNlZ21l
bnQsIGZpeGVkU2VnbWVudCk7Ci0gICAgICAgIGdzdF9ldmVudF9yZXBsYWNlKHJlaW50ZXJwcmV0
X2Nhc3Q8R3N0RXZlbnQqKj4oJmluZm8tPmRhdGEpLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQoZml4
ZWRTZWdtZW50KSk7Ci0gICAgICAgIHJldHVybiBHU1RfUEFEX1BST0JFX1JFTU9WRTsKLSAgICB9
Ci0gICAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci19Ci0KLXZvaWQgd2ViS2l0TWVkaWFTcmNQ
cmVwYXJlSW5pdGlhbFNlZWsoV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSwgZG91YmxlIHJhdGUsIGNv
bnN0IE1lZGlhVGltZSYgc3RhcnRUaW1lLCBjb25zdCBNZWRpYVRpbWUmIGVuZFRpbWUpCi17Ci0g
ICAgR1NUX09CSkVDVF9MT0NLKHNvdXJjZSk7Ci0gICAgTWVkaWFUaW1lIHNlZWtUaW1lID0gKHJh
dGUgPj0gMCkgPyBzdGFydFRpbWUgOiBlbmRUaW1lOwotICAgIHNvdXJjZS0+cHJpdi0+c2Vla1Rp
bWUgPSBzZWVrVGltZTsKLSAgICBzb3VyY2UtPnByaXYtPmFwcHNyY1NlZWtEYXRhQ291bnQgPSAw
OwotICAgIHNvdXJjZS0+cHJpdi0+YXBwc3JjTmVlZERhdGFDb3VudCA9IDA7Ci0KLSAgICBmb3Ig
KFN0cmVhbSogc3RyZWFtIDogc291cmNlLT5wcml2LT5zdHJlYW1zKSB7Ci0gICAgICAgIHN0cmVh
bS0+YXBwc3JjTmVlZERhdGFGbGFnID0gZmFsc2U7Ci0gICAgICAgIC8vIERvbid0IGFsbG93IHNh
bXBsZXMgYXdheSBmcm9tIHRoZSBzZWVrVGltZSB0byBiZSBlbnF1ZXVlZC4KLSAgICAgICAgc3Ry
ZWFtLT5sYXN0RW5xdWV1ZWRUaW1lID0gc2Vla1RpbWU7Ci0gICAgfQotCi0gICAgLy8gVGhlIHBl
bmRpbmcgYWN0aW9uIHdpbGwgYmUgcGVyZm9ybWVkIGluIGVuYWJsZWRBcHBzcmNTZWVrRGF0YSgp
LgotICAgIHNvdXJjZS0+cHJpdi0+YXBwc3JjU2Vla0RhdGFOZXh0QWN0aW9uID0gTm90aGluZzsK
LQotICAgIEdVbmlxdWVQdHI8R3N0U2VnbWVudD4gc2VnbWVudChnc3Rfc2VnbWVudF9uZXcoKSk7
Ci0gICAgc2VnbWVudC0+Zm9ybWF0ID0gR1NUX0ZPUk1BVF9USU1FOwotICAgIGdzdF9zZWdtZW50
X2RvX3NlZWsoc2VnbWVudC5nZXQoKSwgcmF0ZSwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICBz
dGF0aWNfY2FzdDxHc3RTZWVrRmxhZ3M+KEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19G
TEFHX0FDQ1VSQVRFKSwKLSAgICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIFdlYkNvcmU6OnRvR3N0
VW5zaWduZWQ2NFRpbWUoc3RhcnRUaW1lKSwKLSAgICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIFdl
YkNvcmU6OnRvR3N0VW5zaWduZWQ2NFRpbWUoZW5kVGltZSksIG51bGxwdHIpOwotCi0gICAgZm9y
IChTdHJlYW0qIHN0cmVhbSA6IHNvdXJjZS0+cHJpdi0+c3RyZWFtcykgewotICAgICAgICAvLyBU
aGlzIHByb2JlIHdpbGwgZml4IHRoZSBzZWdtZW50IGF1dG9nZW5lcmF0ZWQgYnkgYXBwc3JjLgot
ICAgICAgICBHUmVmUHRyPEdzdFBhZD4gcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9z
dGF0aWNfcGFkKHN0cmVhbS0+YXBwc3JjLCAic3JjIikpOwotICAgICAgICBnc3RfcGFkX2FkZF9w
cm9iZShwYWQuZ2V0KCksIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFNLAotICAg
ICAgICAgICAgaW5pdGlhbFNlZWtTZWdtZW50Rml4ZXJQcm9iZSwgZ3N0X3NlZ21lbnRfY29weShz
ZWdtZW50LmdldCgpKSwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZ3N0X3NlZ21l
bnRfZnJlZSkpOwotICAgICAgICBzdHJlYW0tPnNvdXJjZUJ1ZmZlci0+c2V0UmVhZHlGb3JNb3Jl
U2FtcGxlcyh0cnVlKTsKLSAgICB9Ci0KLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzb3VyY2UpOwot
fQotCiBuYW1lc3BhY2UgV1RGIHsKIHRlbXBsYXRlIDw+IEdSZWZQdHI8V2ViS2l0TWVkaWFTcmM+
IGFkb3B0R1JlZihXZWJLaXRNZWRpYVNyYyogcHRyKQogewpAQCAtODY5LDcgKzgwNCw2IEBAIHRl
bXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPFdlYktpdE1lZGlhU3JjPihXZWJLaXRNZWRpYVNyYyog
cHRyKQogICAgIGlmIChwdHIpCiAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYocHRyKTsKIH0KLX07
Cit9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCi0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvV2Vi
S2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaAppbmRleCA5OTRm
YTkyN2ZiNTk5MjJlZDdhY2JiODgzN2UzNTVhY2U3YTMwN2MxLi5hNTVhNTZmOTA2ZGM4YmI3ZDZj
NmRjZjI0OGFmMWJjY2FmMDc2MjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9XZWJLaXRN
ZWRpYVNvdXJjZUdTdHJlYW1lci5oCkBAIC0zLDggKzMsOCBAQAogICogIENvcHlyaWdodCAoQykg
MjAxMyBDb2xsYWJvcmEgTHRkLgogICogIENvcHlyaWdodCAoQykgMjAxMyBPcmFuZ2UKICAqICBD
b3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRy
aWN1bGFyLmNvbT4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgSWdhbGlhLCBTLkwKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYsIDIwMTgsIDIwMTksIDIwMjAsIDIwMjEgTWV0cm9sb2dp
Y2FsIEdyb3VwIEIuVi4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYsIDIwMTgsIDIwMTks
IDIwMjAsIDIwMjEgSWdhbGlhLCBTLkwKICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTMxLDE1ICsz
MSwxMyBAQAogI2luY2x1ZGUgIk1lZGlhU291cmNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIlNvdXJj
ZUJ1ZmZlclByaXZhdGUuaCIKICNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50Lmgi
Ci0jaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGVHU3Ry
ZWFtZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0U7CiAKLWVudW0gTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyIHsg
SW52YWxpZCwgVW5rbm93biwgQXVkaW8sIFZpZGVvLCBUZXh0IH07Ci0KLX0KK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogR19CRUdJTl9ERUNMUwogCkBAIC00OSwzNSArNDcsMzAgQEAgR19CRUdJ
Tl9ERUNMUwogI2RlZmluZSBXRUJLSVRfSVNfTUVESUFfU1JDKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBXRUJLSVRfVFlQRV9NRURJQV9TUkMpKQogI2Rl
ZmluZSBXRUJLSVRfSVNfTUVESUFfU1JDX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNT
X1RZUEUgKChrbGFzcyksIFdFQktJVF9UWVBFX01FRElBX1NSQykpCiAKLXR5cGVkZWYgc3RydWN0
IF9XZWJLaXRNZWRpYVNyYyAgICAgICAgV2ViS2l0TWVkaWFTcmM7Ci10eXBlZGVmIHN0cnVjdCBf
V2ViS2l0TWVkaWFTcmNDbGFzcyAgIFdlYktpdE1lZGlhU3JjQ2xhc3M7Ci10eXBlZGVmIHN0cnVj
dCBfV2ViS2l0TWVkaWFTcmNQcml2YXRlIFdlYktpdE1lZGlhU3JjUHJpdmF0ZTsKK3N0cnVjdCBX
ZWJLaXRNZWRpYVNyY1ByaXZhdGU7CiAKLXN0cnVjdCBfV2ViS2l0TWVkaWFTcmMgewotICAgIEdz
dEJpbiBwYXJlbnQ7CitzdHJ1Y3QgV2ViS2l0TWVkaWFTcmMgeworICAgIEdzdEVsZW1lbnQgcGFy
ZW50OwogCiAgICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlICpwcml2OwogfTsKIAotc3RydWN0IF9X
ZWJLaXRNZWRpYVNyY0NsYXNzIHsKLSAgICBHc3RCaW5DbGFzcyBwYXJlbnRDbGFzczsKLQotICAg
IC8vIE5vdGlmeSBhcHAgdGhhdCBudW1iZXIgb2YgYXVkaW8vdmlkZW8vdGV4dCBzdHJlYW1zIGNo
YW5nZWQuCi0gICAgdm9pZCAoKnZpZGVvQ2hhbmdlZCkoV2ViS2l0TWVkaWFTcmMqKTsKLSAgICB2
b2lkICgqYXVkaW9DaGFuZ2VkKShXZWJLaXRNZWRpYVNyYyopOwotICAgIHZvaWQgKCp0ZXh0Q2hh
bmdlZCkoV2ViS2l0TWVkaWFTcmMqKTsKK3N0cnVjdCBXZWJLaXRNZWRpYVNyY0NsYXNzIHsKKyAg
ICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50Q2xhc3M7CiB9OwogCiBHVHlwZSB3ZWJraXRfbWVkaWFf
c3JjX2dldF90eXBlKHZvaWQpOwogCi12b2lkIHdlYktpdE1lZGlhU3JjUmVzdG9yZVRyYWNrcyhX
ZWJLaXRNZWRpYVNyYyosIFdlYktpdE1lZGlhU3JjKik7Ci12b2lkIHdlYktpdE1lZGlhU3JjU2ln
bmFsVHJhY2tzKFdlYktpdE1lZGlhU3JjKik7Ci12b2lkIHdlYktpdE1lZGlhU3JjU2V0TWVkaWFQ
bGF5ZXJQcml2YXRlKFdlYktpdE1lZGlhU3JjKiwgV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFKik7Cit2b2lkIHdlYktpdE1lZGlhU3JjRW1pdFN0cmVhbXMoV2ViS2l0TWVk
aWFTcmMqIHNvdXJjZSwgY29uc3QgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpNZWRpYVNvdXJjZVRy
YWNrR1N0cmVhbWVyPj4mIHRyYWNrcyk7CiAKLXZvaWQgd2ViS2l0TWVkaWFTcmNQcmVwYXJlU2Vl
ayhXZWJLaXRNZWRpYVNyYyosIGNvbnN0IE1lZGlhVGltZSYpOwotdm9pZCB3ZWJLaXRNZWRpYVNy
Y1ByZXBhcmVJbml0aWFsU2VlayhXZWJLaXRNZWRpYVNyYyosIGRvdWJsZSByYXRlLCBjb25zdCBN
ZWRpYVRpbWUmIHN0YXJ0VGltZSwgY29uc3QgTWVkaWFUaW1lJiBlbmRUaW1lKTsKLXZvaWQgd2Vi
S2l0TWVkaWFTcmNTZXRSZWFkeUZvclNhbXBsZXMoV2ViS2l0TWVkaWFTcmMqLCBib29sKTsKK3Zv
aWQgd2ViS2l0TWVkaWFTcmNGbHVzaChXZWJLaXRNZWRpYVNyYyosIGNvbnN0IEF0b21TdHJpbmcm
IHN0cmVhbU5hbWUpOwogCiBHX0VORF9ERUNMUwogCituYW1lc3BhY2UgV1RGIHsKK3RlbXBsYXRl
PD4gR1JlZlB0cjxXZWJLaXRNZWRpYVNyYz4gYWRvcHRHUmVmKFdlYktpdE1lZGlhU3JjKiBwdHIp
OwordGVtcGxhdGU8PiBXZWJLaXRNZWRpYVNyYyogcmVmR1B0cjxXZWJLaXRNZWRpYVNyYz4oV2Vi
S2l0TWVkaWFTcmMqIHB0cik7Cit0ZW1wbGF0ZTw+IHZvaWQgZGVyZWZHUHRyPFdlYktpdE1lZGlh
U3JjPihXZWJLaXRNZWRpYVNyYyogcHRyKTsKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYg
Ly8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXJQcml2YXRlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1l
ZGlhU291cmNlR1N0cmVhbWVyUHJpdmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA0MTNkZDNmZjZhYjE3NWMwYWJhNzY4ODMzNmMyMWE3MjEwNTlkM2I4Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXJQcml2YXRl
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgotICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxp
YSBTLkwKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFpbnQg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikg
JiYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLQotI2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlR1N0
cmVhbWVyLmgiCi0jaW5jbHVkZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5oIgotI2luY2x1ZGUgIk1h
aW5UaHJlYWROb3RpZmllci5oIgotI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFt
ZXIuaCIKLSNpbmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgotI2luY2x1ZGUg
IldlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmgiCi0KLSNpbmNsdWRlIDxnc3QvYXBwL2dzdGFw
cHNyYy5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgot
I2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U7Ci0KLX07Ci0KLXZvaWQgd2ViS2l0
TWVkaWFTcmNVcmlIYW5kbGVySW5pdChncG9pbnRlciwgZ3BvaW50ZXIpOwotCi0jZGVmaW5lIFdF
QktJVF9NRURJQV9TUkNfR0VUX1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklW
QVRFKChvYmopLCBXRUJLSVRfVFlQRV9NRURJQV9TUkMsIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSkp
Ci0KLXR5cGVkZWYgc3RydWN0IF9TdHJlYW0gU3RyZWFtOwotCi1zdHJ1Y3QgX1N0cmVhbSB7Ci0g
ICAgLy8gRmllbGRzIGZpbGxlZCB3aGVuIHRoZSBTdHJlYW0gaXMgY3JlYXRlZC4KLSAgICBXZWJL
aXRNZWRpYVNyYyogcGFyZW50OwotCi0gICAgLy8gQXBwU3JjLiBOZXZlciBtb2RpZmllZCBhZnRl
ciBmaXJzdCBhc3NpZ25tZW50LgotICAgIEdzdEVsZW1lbnQqIGFwcHNyYzsKLQotICAgIC8vIE5l
dmVyIG1vZGlmaWVkIGFmdGVyIGZpcnN0IGFzc2lnbm1lbnQuCi0gICAgV2ViQ29yZTo6U291cmNl
QnVmZmVyUHJpdmF0ZUdTdHJlYW1lciogc291cmNlQnVmZmVyOwotCi0gICAgLy8gRmllbGRzIGZp
bGxlZCB3aGVuIHRoZSB0cmFjayBpcyBhdHRhY2hlZC4KLSAgICBXZWJDb3JlOjpNZWRpYVNvdXJj
ZVN0cmVhbVR5cGVHU3RyZWFtZXIgdHlwZTsKLSAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHM7Ci0K
LSAgICAvLyBPbmx5IGF1ZGlvLCB2aWRlbyBvciBub3RoaW5nIGF0IGEgZ2l2ZW4gdGltZS4KLSAg
ICBSZWZQdHI8V2ViQ29yZTo6QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+IGF1ZGlvVHJhY2s7
Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiB2aWRlb1Ry
YWNrOwotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBwcmVzZW50YXRpb25TaXplOwotCi0gICAgLy8g
VGhpcyBoZWxwcyBXZWJLaXRNZWRpYVNyY1ByaXZhdGUuYXBwc3JjTmVlZERhdGFDb3VudCwgZW5z
dXJpbmcgdGhhdCBuZWVkRGF0YXMgYXJlCi0gICAgLy8gY291bnRlZCBvbmx5IG9uY2UgcGVyIGVh
Y2ggYXBwc3JjLgotICAgIGJvb2wgYXBwc3JjTmVlZERhdGFGbGFnOwotCi0gICAgLy8gVXNlZCB0
byBlbmZvcmNlIGNvbnRpbnVpdHkgaW4gdGhlIGFwcGVuZGVkIGRhdGEgYW5kIGF2b2lkIGJyZWFr
aW5nIHRoZSBkZWNvZGVyLgotICAgIC8vIE9ubHkgdXNlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4K
LSAgICBNZWRpYVRpbWUgbGFzdEVucXVldWVkVGltZTsKLX07Ci0KLWVudW0gewotICAgIFBST1Bf
MCwKLSAgICBQUk9QX0xPQ0FUSU9OLAotICAgIFBST1BfTl9BVURJTywKLSAgICBQUk9QX05fVklE
RU8sCi0gICAgUFJPUF9OX1RFWFQsCi0gICAgUFJPUF9MQVNUCi19OwotCi1lbnVtIHsKLSAgICBT
SUdOQUxfVklERU9fQ0hBTkdFRCwKLSAgICBTSUdOQUxfQVVESU9fQ0hBTkdFRCwKLSAgICBTSUdO
QUxfVEVYVF9DSEFOR0VELAotICAgIExBU1RfU0lHTkFMCi19OwotCi1lbnVtIE9uU2Vla0RhdGFB
Y3Rpb24gewotICAgIE5vdGhpbmcsCi0gICAgTWVkaWFTb3VyY2VTZWVrVG9UaW1lCi19OwotCi1l
bnVtIFdlYktpdE1lZGlhU3JjTWFpblRocmVhZE5vdGlmaWNhdGlvbiB7Ci0gICAgUmVhZHlGb3JN
b3JlU2FtcGxlcyA9IDEgPDwgMCwKLSAgICBTZWVrTmVlZHNEYXRhID0gMSA8PCAxCi19OwotCi1z
dHJ1Y3QgX1dlYktpdE1lZGlhU3JjUHJpdmF0ZSB7Ci0gICAgLy8gVXNlZCB0byBjb29yZGluYXRl
IHRoZSByZWxlYXNlIG9mIFN0cmVhbSB0cmFjayBpbmZvLgotICAgIExvY2sgc3RyZWFtTG9jazsK
LSAgICBDb25kaXRpb24gc3RyZWFtQ29uZGl0aW9uOwotCi0gICAgLy8gU3RyZWFtcyBhcmUgb25s
eSBhZGRlZC9yZW1vdmVkIGluIHRoZSBtYWluIHRocmVhZC4KLSAgICBWZWN0b3I8U3RyZWFtKj4g
c3RyZWFtczsKLQotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGxvY2F0aW9uOwotICAgIGludCBudW1i
ZXJPZkF1ZGlvU3RyZWFtczsKLSAgICBpbnQgbnVtYmVyT2ZWaWRlb1N0cmVhbXM7Ci0gICAgaW50
IG51bWJlck9mVGV4dFN0cmVhbXM7Ci0gICAgYm9vbCBhc3luY1N0YXJ0OwotICAgIGJvb2wgYWxs
VHJhY2tzQ29uZmlndXJlZDsKLSAgICB1bnNpZ25lZCBudW1iZXJPZlBhZHM7Ci0KLSAgICBNZWRp
YVRpbWUgc2Vla1RpbWU7Ci0KLSAgICAvLyBPbiBzZWVrLCB3ZSB3YWl0IGZvciBhbGwgdGhlIHNl
ZWtEYXRhcywgdGhlbiBmb3IgYWxsIHRoZSBuZWVkRGF0YXMsIGFuZCB0aGVuIHJ1biB0aGUgbmV4
dEFjdGlvbi4KLSAgICBPblNlZWtEYXRhQWN0aW9uIGFwcHNyY1NlZWtEYXRhTmV4dEFjdGlvbjsK
LSAgICBpbnQgYXBwc3JjU2Vla0RhdGFDb3VudDsKLSAgICBpbnQgYXBwc3JjTmVlZERhdGFDb3Vu
dDsKLQotICAgIFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSogbWVkaWFQ
bGF5ZXJQcml2YXRlOwotCi0gICAgUmVmUHRyPFdlYkNvcmU6Ok1haW5UaHJlYWROb3RpZmllcjxX
ZWJLaXRNZWRpYVNyY01haW5UaHJlYWROb3RpZmljYXRpb24+PiBub3RpZmllcjsKLSAgICBHVW5p
cXVlUHRyPEdzdEZsb3dDb21iaW5lcj4gZmxvd0NvbWJpbmVyOwotfTsKLQotZXh0ZXJuIGd1aW50
IHdlYktpdE1lZGlhU3JjU2lnbmFsc1tMQVNUX1NJR05BTF07Ci1leHRlcm4gR3N0QXBwU3JjQ2Fs
bGJhY2tzIGVuYWJsZWRBcHBzcmNDYWxsYmFja3M7Ci1leHRlcm4gR3N0QXBwU3JjQ2FsbGJhY2tz
IGRpc2FibGVkQXBwc3JjQ2FsbGJhY2tzOwotCi12b2lkIHdlYktpdE1lZGlhU3JjVXJpSGFuZGxl
ckluaXQoZ3BvaW50ZXIgZ0lmYWNlLCBncG9pbnRlciBpZmFjZURhdGEpOwotdm9pZCB3ZWJLaXRN
ZWRpYVNyY0ZpbmFsaXplKEdPYmplY3QqKTsKLXZvaWQgd2ViS2l0TWVkaWFTcmNTZXRQcm9wZXJ0
eShHT2JqZWN0KiwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiwgR1BhcmFtU3BlYyop
Owotdm9pZCB3ZWJLaXRNZWRpYVNyY0dldFByb3BlcnR5KEdPYmplY3QqLCBndWludCBwcm9wZXJ0
eUlkLCBHVmFsdWUqLCBHUGFyYW1TcGVjKik7Ci12b2lkIHdlYktpdE1lZGlhU3JjRG9Bc3luY1N0
YXJ0KFdlYktpdE1lZGlhU3JjKik7Ci12b2lkIHdlYktpdE1lZGlhU3JjRG9Bc3luY0RvbmUoV2Vi
S2l0TWVkaWFTcmMqKTsKLUdzdFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktpdE1lZGlhU3JjQ2hhbmdl
U3RhdGUoR3N0RWxlbWVudCosIEdzdFN0YXRlQ2hhbmdlKTsKLWdpbnQ2NCB3ZWJLaXRNZWRpYVNy
Y0dldFNpemUoV2ViS2l0TWVkaWFTcmMqKTsKLWdib29sZWFuIHdlYktpdE1lZGlhU3JjUXVlcnlX
aXRoUGFyZW50KEdzdFBhZCosIEdzdE9iamVjdCosIEdzdFF1ZXJ5Kik7Ci12b2lkIHdlYktpdE1l
ZGlhU3JjVXBkYXRlUHJlc2VudGF0aW9uU2l6ZShHc3RDYXBzKiwgU3RyZWFtKik7Ci12b2lkIHdl
YktpdE1lZGlhU3JjTGlua1N0cmVhbVRvU3JjUGFkKEdzdFBhZCosIFN0cmVhbSopOwotdm9pZCB3
ZWJLaXRNZWRpYVNyY0xpbmtTb3VyY2VQYWQoR3N0UGFkKiwgR3N0Q2FwcyosIFN0cmVhbSopOwot
dm9pZCB3ZWJLaXRNZWRpYVNyY0ZyZWVTdHJlYW0oV2ViS2l0TWVkaWFTcmMqLCBTdHJlYW0qKTsK
LXZvaWQgd2ViS2l0TWVkaWFTcmNDaGVja0FsbFRyYWNrc0NvbmZpZ3VyZWQoV2ViS2l0TWVkaWFT
cmMqKTsKLUdzdFVSSVR5cGUgd2ViS2l0TWVkaWFTcmNVcmlHZXRUeXBlKEdUeXBlKTsKLWNvbnN0
IGdjaGFyKiBjb25zdCogd2ViS2l0TWVkaWFTcmNHZXRQcm90b2NvbHMoR1R5cGUpOwotZ2NoYXIq
IHdlYktpdE1lZGlhU3JjR2V0VXJpKEdzdFVSSUhhbmRsZXIqKTsKLWdib29sZWFuIHdlYktpdE1l
ZGlhU3JjU2V0VXJpKEdzdFVSSUhhbmRsZXIqLCBjb25zdCBnY2hhciosIEdFcnJvcioqKTsKLQot
I2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9U
b29scy9DaGFuZ2VMb2cKaW5kZXggYjc1MGIyZmNkOGM1OTY5ZjlkYzJiMzljZDkzNTFhMmE5MjQ0
MWEzMC4uM2ZmMzY4MWZjYWRkNzZkZTA5YWQ3MGYzZjU5NDA3MTE5ZDczODdmZSAxMDA2NDQKLS0t
IGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBA
CisyMDIxLTA0LTI5ICBBbGljaWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBbTVNFXVtHU3RyZWFtZXJdIFdlYktpdE1lZGlhU3JjIHJld29yayB2MgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1MTkyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0TWVkaWFTcmMg
aXMgYSBHT2JqZWN0IGNsYXNzIGFuZCBuZWVkcyB0byBmb2xsb3cgc29tZSBHT2JqZWN0CisgICAg
ICAgIGNvbnZlbnRpb25zIHRoYXQgY29uZmxpY3Qgd2l0aCBXZWJLaXQncy4gTWFrZSB0aGUgY2hl
Y2tlciBhd2FyZSBvZgorICAgICAgICB0aGlzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9zdHlsZS9jaGVja2VyLnB5OgorCiAyMDIxLTA0LTI2ICBXZW5zb24gSHNpZWggIDx3ZW5zb25f
aHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFN1YmRpdmlkZSBpbWFnZSBvdmVybGF5IHRleHQg
aW50byBvbmUgb3IgbW9yZSBlbGVtZW50cyBwZXIgbGluZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9jaGVja2VyLnB5CmluZGV4IDU3YzA0ZWE2ZGRhNTAxNTg2MWIwMDFjOTgzNjhiNTMzN2I4
MmY0MzYuLmZkYThiMGYyMzM1MTg1MjcwNTkwMWU5MDdiYjczMDg1MGM2ZjMyNjQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKQEAgLTIzNSw2ICsyMzUsNyBAQCBfUEFU
SF9SVUxFU19TUEVDSUZJRVIgPSBbCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJD
b3JlJywgJ3BsYXRmb3JtJywgJ2dyYXBoaWNzJywgJ2dzdHJlYW1lcicsICdXZWJLaXRXZWJTb3Vy
Y2VHU3RyZWFtZXIuY3BwJyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3Jl
JywgJ3BsYXRmb3JtJywgJ2dyYXBoaWNzJywgJ2dzdHJlYW1lcicsICdXZWJLaXRBdWRpb1NpbmtH
U3RyZWFtZXIuY3BwJyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywg
J3BsYXRmb3JtJywgJ2dyYXBoaWNzJywgJ2dzdHJlYW1lcicsICdXZWJLaXRBdWRpb1NpbmtHU3Ry
ZWFtZXIuaCcpLAorICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdwbGF0
Zm9ybScsICdncmFwaGljcycsICdnc3RyZWFtZXInLCAnbXNlJywgJ1dlYktpdE1lZGlhU291cmNl
R1N0cmVhbWVyLmNwcCcpLAogICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScs
ICdwbGF0Zm9ybScsICdhdWRpbycsICdnc3RyZWFtZXInLCAnV2ViS2l0V2ViQXVkaW9Tb3VyY2VH
U3RyZWFtZXIuY3BwJyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywg
J3BsYXRmb3JtJywgJ21lZGlhc3RyZWFtJywgJ2dzdHJlYW1lcicsICdHU3RyZWFtZXJNZWRpYVN0
cmVhbVNvdXJjZS5oJyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywg
J3BsYXRmb3JtJywgJ21lZGlhc3RyZWFtJywgJ2dzdHJlYW1lcicsICdHU3RyZWFtZXJNZWRpYVN0
cmVhbVNvdXJjZS5jcHAnKSwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBmNzA2ZjYwNjg5MWY2OThiNzM0NGQ2NTQ0YTk1Yzhl
NjgzM2M4YzM5Li45ODI5NzdjZThmZWUwOGM5NGNjZjI4MjhmYzAxZjIzMDcyNmI2NDMyIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMDQtMjkgIEFsaWNpYSBCb3lhIEdhcmPDrWEgIDxhYm95
YUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtNU0VdW0dTdHJlYW1lcl0gV2ViS2l0TWVkaWFTcmMg
cmV3b3JrIHYyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjUxOTIKKworICAgICAgICBVcGRhdGUgZXhwZWN0YXRpb25zLgorCisgICAgICAgICogcGxh
dGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHBsYXRmb3JtL2dsaWIvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtYXBw
ZW5kLWJ1ZmZlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorCiAyMDIxLTA0LTIxICBTZXJnaW8gVmls
bGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtjc3MtZmxleGJveF0g
cGVyY2VudCBjaGlsZHJlbiBkb24ndCByZXNvbHZlIGFnYWluc3QgdGhlIGZsZXggYmFzaXMgb24g
YSBmdWxseSBpbmZsZXhpYmxlIGl0ZW0gd2l0aCBmaXhlZCBmbGV4LWJhc2lzCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZGIzZDNkNzdkOGI1NThiNWVh
MzE2NjljNjZiZTQ4OWE0YmJkOTI5Ni4uZTkyZThjYTg3MjdhZTAzMjM2NzhmNmIwOWQzYjgxNmI1
N2MzMDJjMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0
YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9ucwpA
QCAtNTUwLDcgKzU1MCw2IEBAIHdlYmtpdC5vcmcvYi8yMTAzODUgZmFzdC9tZWRpYXN0cmVhbS9z
dHJlYW0tc3dpdGNoLmh0bWwgWyBDcmFzaCBUaW1lb3V0IFBhc3MgXQogd2Via2l0Lm9yZy9iLzIx
MDUyOCBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLU1lZGlhRWxlbWVudC1zZXRPYmplY3Qt
bnVsbC5odG1sIFsgQ3Jhc2ggUGFzcyBdCiB3ZWJraXQub3JnL2IvMjEwNTI4IGZhc3QvbWVkaWFz
dHJlYW0vbWVkaWFzdHJlYW10cmFjay12aWRlby1mcmFtZVJhdGUtY2xvbmUtZGVjcmVhc2luZy5o
dG1sIFsgQ3Jhc2ggUGFzcyBdCiAKLXdlYmtpdC5vcmcvYi8yMDMwNzggbWVkaWEvbWVkaWEtc291
cmNlL21lZGlhLXNvdXJjZS1yZW1vdmUtdW5sb2FkLWNyYXNoLmh0bWwgWyBDcmFzaCBUaW1lb3V0
IFBhc3MgXQogd2Via2l0Lm9yZy9iLzIxODMxNyBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291
cmNlLXRyYWNraWQtY2hhbmdlLmh0bWwgWyBGYWlsdXJlIF0KIAogd2Via2l0Lm9yZy9iLzIxMDUy
OCBtZWRpYS92aWRlby1zcmMtYmxvYi1yZXBsYXkuaHRtbCBbIENyYXNoIFBhc3MgXQpAQCAtNTgw
LDcgKzU3OSw2IEBAIHdlYmtpdC5vcmcvYi8yMjQ3NjcgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtY2hhCiAKICMgU2VlIGFsc28gYnVnICMx
NzU1NzguCiB3ZWJraXQub3JnL2IvMTY3MTA4IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWFjdGl2ZXNvdXJjZWJ1ZmZlcnMuaHRtbCBbIEZh
aWx1cmUgXQotd2Via2l0Lm9yZy9iLzE2NzEwOCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1hcHBlbmQtYnVmZmVyLmh0bWwgWyBGYWlsdXJl
IF0KIHdlYmtpdC5vcmcvYi8xNjcxMDggaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9t
ZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtYXZ0cmFja3MuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0
Lm9yZy9iLzE2NzEwOCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJj
ZS9tZWRpYXNvdXJjZS1idWZmZXJlZC5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMTY3
MTA4IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21lZGlhc291
cmNlLWNoYW5nZXR5cGUuaHRtbCBbIEZhaWx1cmUgQ3Jhc2ggXQpAQCAtMjE4Miw5ICsyMTgwLDcg
QEAgd2Via2l0Lm9yZy9iLzIxMTk0MCBmYXN0L3RleHQvbXVsdGlwbGUtY29kZXVuaXQtdmVydGlj
YWwtdXByaWdodC5odG1sIFsgSW1hZ2VPbmwKIHdlYmtpdC5vcmcvYi8xNjcxMDggaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2Utc2VxdWVuY2Vt
b2RlLWFwcGVuZC1idWZmZXIuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzE2NzEwOCBp
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1z
ZWVrYWJsZS5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMTk3NzExIGltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWNvcnJlY3QtZnJh
bWVzLmh0bWwgWyBQYXNzIFRpbWVvdXQgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMjAzMDc4IGlt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21lZGlhc291cmNlLXNl
ZWstYmV5b25kLWR1cmF0aW9uLmh0bWwgWyBUaW1lb3V0IENyYXNoIEZhaWx1cmUgXQotd2Via2l0
Lm9yZy9iLzIxNDM0OSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJj
ZS9tZWRpYXNvdXJjZS1jaGFuZ2V0eXBlLXBsYXktbmVnYXRpdmUuaHRtbCBbIENyYXNoIEZhaWx1
cmUgUGFzcyBdCi13ZWJraXQub3JnL2IvMjIwMDgzIFsgRGVidWcgXSBtZWRpYS9tZWRpYS1zb3Vy
Y2UvbWVkaWEtc291cmNlLXVubmVjZXNzYXJ5LXNlZWstc2Vla2VkLmh0bWwgWyBQYXNzIENyYXNo
IF0KK3dlYmtpdC5vcmcvYi8yMDMwNzggaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9t
ZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2Utc2Vlay1iZXlvbmQtZHVyYXRpb24uaHRtbCBbIEZhaWx1
cmUgXQogCiB3ZWJraXQub3JnL2IvMjE5MjI1IGh0dHAvdGVzdHMvaW5zcGVjdG9yL2RvbS9kaXNj
b25uZWN0LWRvbS10cmVlLWFmdGVyLW1haW4tZnJhbWUtbmF2aWdhdGlvbi5odG1sIFsgRmFpbHVy
ZSBQYXNzIF0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1hcHBlbmQt
YnVmZmVyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtYXBwZW5kLWJ1
ZmZlci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDMwODhmYWUyZTg5OTBhZTEwNzgzZjhhY2Fk
OTdiMjQ3NGNkNGNiYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2ds
aWIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3Vy
Y2UtYXBwZW5kLWJ1ZmZlci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNSBAQAorCitQQVNTIFRl
c3QgU291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcigpIGV2ZW50IGRpc3BhdGNoaW5nLgorUEFTUyBU
ZXN0IFNvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoKSBjYWxsIGR1cmluZyBhIHBlbmRpbmcgYXBw
ZW5kQnVmZmVyKCkuCitQQVNTIFRlc3QgU291cmNlQnVmZmVyLmFib3J0KCkgY2FsbCBkdXJpbmcg
YSBwZW5kaW5nIGFwcGVuZEJ1ZmZlcigpLgorUEFTUyBUZXN0IFNvdXJjZUJ1ZmZlci5hcHBlbmRC
dWZmZXIoKSB0cmlnZ2VyaW5nIGFuICdlbmRlZCcgdG8gJ29wZW4nIHRyYW5zaXRpb24uCitQQVNT
IFRlc3QgemVybyBieXRlIFNvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoKSBjYWxsIHRyaWdnZXJp
bmcgYW4gJ2VuZGVkJyB0byAnb3BlbicgdHJhbnNpdGlvbi4KK1BBU1MgVGVzdCBNZWRpYVNvdXJj
ZS5yZW1vdmVTb3VyY2VCdWZmZXIoKSBjYWxsIGR1cmluZyBhIHBlbmRpbmcgYXBwZW5kQnVmZmVy
KCkuCitQQVNTIFRlc3Qgc2V0IE1lZGlhU291cmNlLmR1cmF0aW9uIGR1cmluZyBhIHBlbmRpbmcg
YXBwZW5kQnVmZmVyKCkgZm9yIG9uZSBvZiBpdHMgU291cmNlQnVmZmVycy4KK1BBU1MgVGVzdCBN
ZWRpYVNvdXJjZS5lbmRPZlN0cmVhbSgpIGR1cmluZyBhIHBlbmRpbmcgYXBwZW5kQnVmZmVyKCkg
Zm9yIG9uZSBvZiBpdHMgU291cmNlQnVmZmVycy4KK1BBU1MgVGVzdCBzZXQgU291cmNlQnVmZmVy
LnRpbWVzdGFtcE9mZnNldCBkdXJpbmcgYSBwZW5kaW5nIGFwcGVuZEJ1ZmZlcigpLgorUEFTUyBU
ZXN0IGFwcGVuZGluZyBhbiBlbXB0eSBBcnJheUJ1ZmZlclZpZXcuCitQQVNTIFRlc3QgYXBwZW5k
aW5nIGEgbmV1dGVyZWQgQXJyYXlCdWZmZXJWaWV3LgorUEFTUyBUZXN0IGFwcGVuZGluZyBhbiBl
bXB0eSBBcnJheUJ1ZmZlci4KK1BBU1MgVGVzdCBhcHBlbmRpbmcgYSBuZXV0ZXJlZCBBcnJheUJ1
ZmZlci4KK1BBU1MgVGVzdCBhcHBlbmRCdWZmZXIgd2l0aCBwYXJ0aWFsIGluaXQgc2VnbWVudHMu
CitQQVNTIFRlc3QgYXBwZW5kQnVmZmVyIHdpdGggcGFydGlhbCBtZWRpYSBzZWdtZW50cy4KK0ZB
SUwgVGVzdCBhcHBlbmRCdWZmZXIgZXZlbnRzIG9yZGVyLiBhc3NlcnRfdHJ1ZTogZXhwZWN0ZWQg
dHJ1ZSBnb3QgZmFsc2UKK1BBU1MgVGVzdCBhYm9ydCBpbiB0aGUgbWlkZGxlIG9mIGFuIGluaXRp
YWxpemF0aW9uIHNlZ21lbnQuCitQQVNTIFRlc3QgYWJvcnQgYWZ0ZXIgcmVtb3Zpbmcgc291cmNl
YnVmZmVyLgorUEFTUyBUZXN0IGFib3J0IGFmdGVyIHJlYWR5U3RhdGUgaXMgZW5kZWQgZm9sbG93
aW5nIGluaXQgc2VnbWVudCBhbmQgbWVkaWEgc2VnbWVudC4KK1BBU1MgVGVzdCBhYm9ydCBhZnRl
ciBhcHBlbmRCdWZmZXIgdXBkYXRlIGVuZHMuCitQQVNTIFRlc3QgYXBwZW5kaW5nIG51bGwuCitQ
QVNTIFRlc3QgYXBwZW5kaW5nIGFmdGVyIHJlbW92ZVNvdXJjZUJ1ZmZlcigpLgorRkFJTCBUZXN0
IHNsb3cgYXBwZW5kaW5nIGRvZXMgbm90IHRyaWdnZXIgc3RhbGxlZCBldmVudHMuIGFzc2VydF91
bnJlYWNoZWQ6IFVuZXhwZWN0ZWQgJ3N0YWxsZWQnIGV2ZW50LiBSZWFjaGVkIHVucmVhY2hhYmxl
IGNvZGUKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427779</attachid>
            <date>2021-05-05 10:45:11 -0700</date>
            <delta_ts>2021-05-05 11:34:39 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-225192-20210505194509.patch</filename>
            <type>text/plain</type>
            <size>188855</size>
            <attacher name="Alicia Boya García">aboya</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NjM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGMxMzdkZWEzNjE5N2Nj
NTU3Y2Y3NzJkMGY4ZmEyODg1MDI5ODM5Zi4uZDEzZjI3NWY1YTYxMjExZWE2ZWYzZjNjYTM4YWJm
N2Y0ZTk4YmZkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1OSBAQAorMjAyMS0wNC0yOSAgQWxp
Y2lhIEJveWEgR2FyY8OtYSAgPGFib3lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW01TRV1bR1N0
cmVhbWVyXSBXZWJLaXRNZWRpYVNyYyByZXdvcmsgdjIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTE5MgorCisgICAgICAgIFJldmlld2VkIGJ5IFhh
YmllciBSb2RyaWd1ZXotQ2FsdmFyLgorCisgICAgICAgIFRoaXMgcGF0Y2ggKHJlKWludHJvZHVj
ZXMgYSBuZXcgc291cmNlIGVsZW1lbnQgZm9yIHRoZSBNU0UgcGxheWJhY2sKKyAgICAgICAgcGlw
ZWxpbmUuIFRoaXMgaXMgYW4gaXRlcmF0aW9uIG9uIHRoZSBwcmV2aW91cyB3b3JrIG9uIHIyNDky
MDUgdGhhdAorICAgICAgICBoYWQgdG8gYmUgcmV2ZXJ0ZWQgaW4gcjI1MTM2NSBiZWNhdXNlIG9m
IGZsYWt5IHBsYXliaW4zIGJ1Z3MuCisKKyAgICAgICAgVGhpcyBuZXcgdmVyc2lvbiBhdm9pZHMg
dGhlc2UgcGl0ZmFsbHMgYnkgYXZvaWRpbmcgZmx1c2hlcyBpbgorICAgICAgICBzaXR1YXRpb25z
IHdoZXJlIHRoZXkgYXJlIGF2b2lkYWJsZSBhbmQga25vd24gdG8gZXhwb3NlIGJ1Z3MuCisKKyAg
ICAgICAgVGhpcyByZS1sYW5kIHNoYXJlcyBtYW55IG9mIHRoZSBhZHZhbnRhZ2VzIHRoYXQgbW90
aXZhdGVkIHRoZSBmaXJzdAorICAgICAgICBwYXRjaDogc2Vla3MgbWFzc2l2ZWx5IG92ZXJzaW1w
bGlmaWVkIGFuZCBncmVhdGVyIGNvbnRyb2wgYnkgbm8gbG9uZ2VyCisgICAgICAgIHJlbHlpbmcg
b24gYXBwc3JjLiBJdCBjYW4gaGFuZGxlIGZsdXNoZXMgb2YgaW5kaXZpZHVhbCBzdHJlYW1zCisg
ICAgICAgIG5hdGl2ZWx5LgorCisgICAgICAgIFdvcmsgaGFzIGFsc28gZ29uZSBpbnRvIGRlY291
cGxpbmcgdGhlIHN0YXRlIG9mIHRoZSBmcmFtZSBxdWV1ZSBmcm9tCisgICAgICAgIHRoZSBzdGF0
ZSBvZiBXZWJLaXRNZWRpYVNyYyBzbyB0aGF0IHRoZSBiYWNrZW5kIGNhbiBzdXJ2aXZlCisgICAg
ICAgIHRyYW5zaXRpb25zIGZyb20gUEFVU0VEIHRvIFJFQURZIGFuZCBiYWNrIHdoaWNoCisgICAg
ICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciBjcmVhdGVzIHdoZW4gcGxheWJhY2sgZW5k
cy4gVGhpcyBsYXR0ZXIKKyAgICAgICAgZWZmb3J0IGlzIG5vdCBjb21wbGV0ZSwgYW5kIGluc3Rl
YWQgdGhpcyB2ZXJzaW9uIGFkZHMgYSBzcGVjaWFsIGNhc2UKKyAgICAgICAgdG8gaW5oaWJpdCBk
b3dud2FyZHMgYW5kIGJhY2sgdXB3YXJkcyB0cmFuc2l0aW9ucywgYXZvaWRpbmcgYW55CisgICAg
ICAgIGlzc3Vlcy4KKworICAgICAgICBJdCBpcyBleHBlY3RlZCB0aGF0IGF0IHRoaXMgcG9pbnQg
dGhpcyBuZXcgYmFja2VuZCBpcyBhdCBsZWFzdCBhcworICAgICAgICBzdGFibGUgYXMgdGhlIHBy
ZXZpb3VzIG9uZS4gTm8gTGF5b3V0VGVzdCBoYXMgZ290IHdvcnNlbmVkCisgICAgICAgIGV4cGVj
dGF0aW9ucyBmcm9tIGFkZGluZyB0aGlzIGJhY2tlbmQgYW5kIHNvbWUgaGF2ZSBpbXByb3ZlZC4K
KworICAgICAgICAqIHBsYXRmb3JtL0dTdHJlYW1lci5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwOgorICAgICAgICAo
d2ViS2l0R0xWaWRlb1NpbmtGaW5hbGl6ZSk6CisgICAgICAgICh3ZWJLaXRHTFZpZGVvU2lua1Nl
dE1lZGlhUGxheWVyUHJpdmF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV1RGOjphZG9wdEdSZWYpOgorICAg
ICAgICAoV1RGOjpyZWZHUHRyPEdzdE1pbmlPYmplY3Q+KToKKyAgICAgICAgKFdURjo6ZGVyZWZH
UHRyPEdzdE1pbmlPYmplY3Q+KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvR1JlZlB0ckdTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkb1NlZWspOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVUcmFja3MpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTdHJlYW1Db2xsZWN0aW9u
TWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmhhbmRsZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpkaWRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmludmFsaWRhdGVDYWNoZWRQb3NpdGlvbik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VH
U3RyZWFtZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6
OnNldEluaXRpYWxDYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2VHU3Ry
ZWFtZXI6OmluaXRpYWxDYXBzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVs
aW5lOjpwYXJzZURlbXV4ZXJTcmNQYWRDYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBp
cGVsaW5lOjphcHBzaW5rQ2Fwc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlw
ZWxpbmU6OmNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rRnJvbVN0cmVhbWluZ1RocmVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6Y29ubmVjdERlbXV4ZXJTcmNQYWRU
b0FwcHNpbmspOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBw
ZW5kUGlwZWxpbmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpkZW11eGVy
U3JjUGFkQ2Fwcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
TVNFKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6
bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6
OnBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
OjpwYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJN
U0U6OnNlZWspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
TVNFOjpkb1NlZWspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyTVNFOjpzZXRSZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck1TRTo6cHJvcGFnYXRlUmVhZHlTdGF0ZVRvUGxheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6YXN5bmNTdGF0ZUNoYW5n
ZURvbmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
Ojpzb3VyY2VTZXR1cCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0U6OnVwZGF0ZVN0YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJNU0U6OnVuYmxvY2tEdXJhdGlvbkNoYW5nZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkdXJhdGlvbkNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp0cmFja0Rl
dGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RTo6c3RhcnRTb3VyY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmg6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Omhhc0FsbFRyYWNrcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OndlYktpdE1lZGlh
U3JjKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291
cmNlUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVBy
aXZhdGVHU3RyZWFtZXI6OmFkZFNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVNvdXJjZVByaXZhdGVHU3RyZWFtZXI6Om1hcmtFbmRPZlN0cmVhbSk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXI6OnVubWFya0VuZE9mU3RyZWFtKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lcjo6d2FpdEZvclNlZWtD
b21wbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVy
OjpzZWVrQ29tcGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZUdT
dHJlYW1lcjo6c3RhcnRQbGF5YmFja0lmSGFzQWxsVHJhY2tzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VUcmFj
a0dTdHJlYW1lci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VUcmFj
a0dTdHJlYW1lcjo6TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyOjp+TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcik6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcjo6aXNSZWFkeUZvck1v
cmVTYW1wbGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXI6
Om5vdGlmeVdoZW5SZWFkeUZvck1vcmVTYW1wbGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U291cmNlVHJhY2tHU3RyZWFtZXI6OmVucXVldWVPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcjo6Y2xlYXJRdWV1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyOjpyZW1vdmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1BsYXliYWNrUGlw
ZWxpbmUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
bXNlL1NvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVtb3ZlZEZyb21NZWRpYVNvdXJjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpmbHVzaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjplbnF1ZXVlU2Ft
cGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6Omlz
UmVhZHlGb3JNb3JlU2FtcGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2
YXRlR1N0cmVhbWVyOjpub3RpZnlDbGllbnRXaGVuUmVhZHlGb3JNb3JlU2FtcGxlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjphbGxTYW1wbGVzSW5U
cmFja0VucXVldWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3Ry
ZWFtZXI6OmRpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvVHJhY2tRdWV1ZS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tRdWV1ZTo6VHJhY2tRdWV1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUcmFja1F1ZXVlOjplbnF1ZXVlT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlRyYWNrUXVldWU6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUXVldWU6
OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUXVldWU6Om5vdGlmeVdoZW5Mb3dMZXZl
bCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFja1F1ZXVlOjpwb3ApOgorICAgICAgICAoV2ViQ29y
ZTo6VHJhY2tRdWV1ZTo6bm90aWZ5V2hlbk5vdEVtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OlRy
YWNrUXVldWU6OnJlc2V0Tm90RW1wdHlIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNr
UXVldWU6OmNoZWNrTG93TGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tRdWV1ZTo6ZHVy
YXRpb25FbnF1ZXVlZCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9UcmFja1F1ZXVlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tRdWV1
ZTo6aXNGdWxsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrUXVldWU6OmlzRW1wdHkg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tRdWV1ZTo6aGFzTm90RW1wdHlIYW5kbGVy
IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktp
dE1lZGlhU291cmNlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYktpdE1lZGlhU3JjUHJpdmF0
ZTo6c3RyZWFtQnlOYW1lKToKKyAgICAgICAgKFdlYktpdE1lZGlhU3JjUHJpdmF0ZTo6aXNTdGFy
dGVkKToKKyAgICAgICAgKFdURjo6YWRvcHRHUmVmKToKKyAgICAgICAgKFdURjo6cmVmR1B0cjxX
ZWJLaXRNZWRpYVNyY1BhZD4pOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHI8V2ViS2l0TWVkaWFT
cmNQYWQ+KToKKyAgICAgICAgKHdlYmtpdF9tZWRpYV9zcmNfcGFkX2NsYXNzX2luaXQpOgorICAg
ICAgICAoU3RyZWFtOjpTdHJlYW0pOgorICAgICAgICAoU3RyZWFtOjpTdHJlYW1pbmdNZW1iZXJz
OjpTdHJlYW1pbmdNZW1iZXJzKToKKyAgICAgICAgKGZpbmRQaXBlbGluZSk6CisgICAgICAgIChn
c3RTdHJlYW1UeXBlKToKKyAgICAgICAgKHN0cmVhbVR5cGVUb1N0cmluZyk6CisgICAgICAgICh3
ZWJraXRfbWVkaWFfc3JjX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X21lZGlhX3NyY19p
bml0KToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjRmluYWxpemUpOgorICAgICAgICAod2ViS2l0
TWVkaWFTcmNFbWl0U3RyZWFtcyk6CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY1RlYXJEb3duU3Ry
ZWFtKToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjQWN0aXZhdGVNb2RlKToKKyAgICAgICAgKHdl
YktpdE1lZGlhU3JjUGFkTGlua2VkKToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjTG9vcCk6Cisg
ICAgICAgICh3ZWJLaXRNZWRpYVNyY1N0cmVhbUZsdXNoKToKKyAgICAgICAgKHdlYktpdE1lZGlh
U3JjRmx1c2gpOgorICAgICAgICAod2ViS2l0TWVkaWFTcmNTZWVrKToKKyAgICAgICAgKGNvdW50
U3RyZWFtc09mVHlwZSk6CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY0dldFByb3BlcnR5KToKKyAg
ICAgICAgKHdlYktpdE1lZGlhU3JjQ2hhbmdlU3RhdGUpOgorICAgICAgICAod2ViS2l0TWVkaWFT
cmNTZW5kRXZlbnQpOgorICAgICAgICAod2ViS2l0TWVkaWFTcmNVcmlHZXRUeXBlKToKKyAgICAg
ICAgKHdlYktpdE1lZGlhU3JjR2V0UHJvdG9jb2xzKToKKyAgICAgICAgKHdlYktpdE1lZGlhU3Jj
R2V0VXJpKToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjU2V0VXJpKToKKyAgICAgICAgKHdlYktp
dE1lZGlhU3JjVXJpSGFuZGxlckluaXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyUHJp
dmF0ZS5oOiBSZW1vdmVkLgorCiAyMDIxLTA0LTIxICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3Zp
bGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtjc3MtZmxleGJveF0gcGVyY2VudCBjaGlsZHJl
biBkb24ndCByZXNvbHZlIGFnYWluc3QgdGhlIGZsZXggYmFzaXMgb24gYSBmdWxseSBpbmZsZXhp
YmxlIGl0ZW0gd2l0aCBmaXhlZCBmbGV4LWJhc2lzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3Ry
ZWFtZXIuY21ha2UKaW5kZXggYmEwYWIyYjQ3NTc4OGEyMWRiNjNlNDk0N2NlZTE3ZjgyNzBiOThm
MS4uNGE3NjQwNDkxYzUxZjMzYTQ2ZWY4N2RkYzUxYzdiNzBiNTNkOTllMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQpAQCAtMzcsOCArMzcsOSBAQCBpZiAoRU5BQkxF
X1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8pCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9tc2UvR1N0cmVhbWVyUmVnaXN0cnlTY2FubmVyTVNFLmNwcAogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNvdXJj
ZVByaXZhdGVHU3RyZWFtZXIuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9tc2UvUGxheWJhY2tQaXBlbGluZS5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL21zZS9NZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1NvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuY3Bw
CisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvVHJhY2tRdWV1ZS5jcHAK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNvdXJj
ZUdTdHJlYW1lci5jcHAKIAogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMv
R1N0cmVhbWVyVmlkZW9Db21tb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVy
LmNwcAppbmRleCBhN2NkOTczMWZlNzRiYzk3ZDBmNjcxOTNiMzcyYjgyMTEyZjlkNjY4Li5kNTBj
NzhhNmYwYTRiZWY2MTU4NTI1MjQzOWNmZTNlYzgxYzZmMzFmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZp
ZGVvU2lua0dTdHJlYW1lci5jcHAKQEAgLTEzNSw2ICsxMzUsOCBAQCB2b2lkIHdlYktpdEdMVmlk
ZW9TaW5rRmluYWxpemUoR09iamVjdCogb2JqZWN0KQogICAgIGlmIChwcml2LT5tZWRpYVBsYXll
clByaXZhdGUpCiAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShw
cml2LT5hcHBTaW5rLmdldCgpLCBwcml2LT5tZWRpYVBsYXllclByaXZhdGUpOwogCisgICAgR1NU
X0RFQlVHX09CSkVDVChvYmplY3QsICJXZWJLaXRHTFZpZGVvU2luayBmaW5hbGl6ZWQuIik7CisK
ICAgICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1MsIGZpbmFsaXplLCAob2JqZWN0KSk7
CiB9CiAKQEAgLTI0MCwxMSArMjQyLDE1IEBAIHZvaWQgd2ViS2l0R0xWaWRlb1NpbmtTZXRNZWRp
YVBsYXllclByaXZhdGUoV2ViS2l0R0xWaWRlb1NpbmsqIHNpbmssIE1lZGlhUGxheWVyCiAgICAg
cHJpdi0+bWVkaWFQbGF5ZXJQcml2YXRlID0gcGxheWVyOwogICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
cHJpdi0+YXBwU2luay5nZXQoKSwgIm5ldy1zYW1wbGUiLCBHX0NBTExCQUNLKCtbXShHc3RFbGVt
ZW50KiBzaW5rLCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikgLT4gR3N0Rmxv
d1JldHVybiB7CiAgICAgICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBzYW1wbGUgPSBhZG9wdEdSZWYo
Z3N0X2FwcF9zaW5rX3B1bGxfc2FtcGxlKEdTVF9BUFBfU0lOSyhzaW5rKSkpOworICAgICAgICBH
c3RCdWZmZXIqIGJ1ZmZlciA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihzYW1wbGUuZ2V0KCkpOwor
ICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHNpbmssICJuZXctc2FtcGxlIHdpdGggUFRTPSUiIEdT
VF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyhHU1RfQlVGRkVSX1BUUyhidWZmZXIpKSk7CiAg
ICAgICAgIHBsYXllci0+dHJpZ2dlclJlcGFpbnQoc2FtcGxlLmdldCgpKTsKICAgICAgICAgcmV0
dXJuIEdTVF9GTE9XX09LOwogICAgIH0pLCBwbGF5ZXIpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
cHJpdi0+YXBwU2luay5nZXQoKSwgIm5ldy1wcmVyb2xsIiwgR19DQUxMQkFDSygrW10oR3N0RWxl
bWVudCogc2luaywgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpIC0+IEdzdEZs
b3dSZXR1cm4gewogICAgICAgICBHUmVmUHRyPEdzdFNhbXBsZT4gc2FtcGxlID0gYWRvcHRHUmVm
KGdzdF9hcHBfc2lua19wdWxsX3ByZXJvbGwoR1NUX0FQUF9TSU5LKHNpbmspKSk7CisgICAgICAg
IEdzdEJ1ZmZlciogYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKHNhbXBsZS5nZXQoKSk7
CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc2luaywgIm5ldy1wcmVyb2xsIHdpdGggUFRTPSUi
IEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyhHU1RfQlVGRkVSX1BUUyhidWZmZXIpKSk7
CiAgICAgICAgIHBsYXllci0+dHJpZ2dlclJlcGFpbnQoc2FtcGxlLmdldCgpKTsKICAgICAgICAg
cmV0dXJuIEdTVF9GTE9XX09LOwogICAgIH0pLCBwbGF5ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3Ry
ZWFtZXIuY3BwCmluZGV4IDRmZjJhOWRhYWMwNWU0YzcxNGI4N2QzMWM1NmY5MWMwNDBjOGExZDIu
LjIzYWMxMjU3NjYyMTk3ZmE0ZWFjOTdhOTk3Y2I1ZDBmZWVlNzQzOTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1Jl
ZlB0ckdTdHJlYW1lci5jcHAKQEAgLTI5LDYgKzI5LDI1IEBACiAKIG5hbWVzcGFjZSBXVEYgewog
Cit0ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0TWluaU9iamVjdD4gYWRvcHRHUmVmKEdzdE1pbmlPYmpl
Y3QqIHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RNaW5pT2JqZWN0PihwdHIsIEdSZWZQ
dHJBZG9wdCk7Cit9CisKK3RlbXBsYXRlPD4gR3N0TWluaU9iamVjdCogcmVmR1B0cjxHc3RNaW5p
T2JqZWN0PihHc3RNaW5pT2JqZWN0KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0
X21pbmlfb2JqZWN0X3JlZihwdHIpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGU8
PiB2b2lkIGRlcmVmR1B0cjxHc3RNaW5pT2JqZWN0PihHc3RNaW5pT2JqZWN0KiBwdHIpCit7Cisg
ICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmKHB0cik7Cit9CisKIHRl
bXBsYXRlIDw+IEdSZWZQdHI8R3N0RWxlbWVudD4gYWRvcHRHUmVmKEdzdEVsZW1lbnQqIHB0cikK
IHsKICAgICBBU1NFUlQoIXB0ciB8fCAhZ19vYmplY3RfaXNfZmxvYXRpbmcocHRyKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0
ckdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0dSZWZQdHJHU3RyZWFtZXIuaAppbmRleCBhZmIxMzRkNzk1M2FjNzM2MTE4NTc1N2U1ZWEwNzA4
Y2Q0NWRjMWI1Li4wNzhkM2M1NjM5NzRmNmEyYjNhZjFlYjgzOTg2NDk4Nzk0NWZhN2Q4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0
ckdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9HUmVmUHRyR1N0cmVhbWVyLmgKQEAgLTM5LDYgKzM5LDEwIEBAIHRlbXBsYXRlPD4gR1Jl
ZlB0cjxHc3RQbHVnaW4+IGFkb3B0R1JlZihHc3RQbHVnaW4qIHB0cik7CiB0ZW1wbGF0ZTw+IEdz
dFBsdWdpbiogcmVmR1B0cjxHc3RQbHVnaW4+KEdzdFBsdWdpbiogcHRyKTsKIHRlbXBsYXRlPD4g
dm9pZCBkZXJlZkdQdHI8R3N0UGx1Z2luPihHc3RQbHVnaW4qIHB0cik7CiAKK3RlbXBsYXRlPD4g
R1JlZlB0cjxHc3RNaW5pT2JqZWN0PiBhZG9wdEdSZWYoR3N0TWluaU9iamVjdCogcHRyKTsKK3Rl
bXBsYXRlPD4gR3N0TWluaU9iamVjdCogcmVmR1B0cjxHc3RNaW5pT2JqZWN0PihHc3RNaW5pT2Jq
ZWN0KiBwdHIpOwordGVtcGxhdGU8PiB2b2lkIGRlcmVmR1B0cjxHc3RNaW5pT2JqZWN0PihHc3RN
aW5pT2JqZWN0KiBwdHIpOworCiB0ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0RWxlbWVudD4gYWRvcHRH
UmVmKEdzdEVsZW1lbnQqIHB0cik7CiB0ZW1wbGF0ZTw+IEdzdEVsZW1lbnQqIHJlZkdQdHI8R3N0
RWxlbWVudD4oR3N0RWxlbWVudCogcHRyKTsKIHRlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8R3N0
RWxlbWVudD4oR3N0RWxlbWVudCogcHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggY2NjNDlhZWRlNDE2NmQ0YzYwNTQyYjA5MzNkYzY0
NWEzODc1NTM5MC4uOWZmOTM0YTVjODY0MTFkNmMxMjlkYWZhZGJjMzc5YzU1Y2RjNjdiZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTQz
OCw3ICs0MzgsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGF1c2VkKCkg
Y29uc3QKICAgICByZXR1cm4gcGF1c2VkOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6ZG9TZWVrKGNvbnN0IE1lZGlhVGltZSYgcG9zaXRpb24sIGZsb2F0IHJhdGUsIEdz
dFNlZWtGbGFncyBzZWVrVHlwZSkKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpk
b1NlZWsoY29uc3QgTWVkaWFUaW1lJiBwb3NpdGlvbiwgZmxvYXQgcmF0ZSwgR3N0U2Vla0ZsYWdz
IHNlZWtGbGFncykKIHsKICAgICAvLyBEZWZhdWx0IHZhbHVlcyBmb3IgcmF0ZSA+PSAwLgogICAg
IE1lZGlhVGltZSBzdGFydFRpbWUgPSBwb3NpdGlvbiwgZW5kVGltZSA9IE1lZGlhVGltZTo6aW52
YWxpZFRpbWUoKTsKQEAgLTQ1Myw3ICs0NTMsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6ZG9TZWVrKGNvbnN0IE1lZGlhVGltZSYgcG9zaXRpb24sIGZsb2F0IHJhdGUsCiAg
ICAgICAgIHJhdGUgPSAxLjA7CiAKICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJb
U2Vla10gUGVyZm9ybWluZyBhY3R1YWwgc2VlayB0byAlIiBHU1RfVElNRV9GT1JNQVQgIiAoZW5k
VGltZTogJSIgR1NUX1RJTUVfRk9STUFUICIpIGF0IHJhdGUgJWYiLCBHU1RfVElNRV9BUkdTKHRv
R3N0Q2xvY2tUaW1lKHN0YXJ0VGltZSkpLCBHU1RfVElNRV9BUkdTKHRvR3N0Q2xvY2tUaW1lKGVu
ZFRpbWUpKSwgcmF0ZSk7Ci0gICAgcmV0dXJuIGdzdF9lbGVtZW50X3NlZWsobV9waXBlbGluZS5n
ZXQoKSwgcmF0ZSwgR1NUX0ZPUk1BVF9USU1FLCBzZWVrVHlwZSwKKyAgICByZXR1cm4gZ3N0X2Vs
ZW1lbnRfc2VlayhtX3BpcGVsaW5lLmdldCgpLCByYXRlLCBHU1RfRk9STUFUX1RJTUUsIHNlZWtG
bGFncywKICAgICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIHRvR3N0Q2xvY2tUaW1lKHN0YXJ0VGlt
ZSksIEdTVF9TRUVLX1RZUEVfU0VULCB0b0dzdENsb2NrVGltZShlbmRUaW1lKSk7CiB9CiAKQEAg
LTE0ODIsMTggKzE0ODIsMTYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVw
ZGF0ZVRyYWNrcyhjb25zdCBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24KICAgICB1bnNpZ25l
ZCB0ZXh0VHJhY2tJbmRleCA9IDA7CiAKICNkZWZpbmUgQ1JFQVRFX1RSQUNLKHR5cGUsIFR5cGUp
IEdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKCF1
c2VNZWRpYVNvdXJjZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICAgIFJlZlB0cjxUeXBlIyNUcmFja1ByaXZhdGVHU3RyZWFtZXI+IHRyYWNr
ID0gVHlwZSMjVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobWFrZVdlYWtQdHIoKnRoaXMp
LCB0eXBlIyNUcmFja0luZGV4LCBzdHJlYW0pOyBcCi0gICAgICAgICAgICBhdXRvIHRyYWNrSWQg
PSB0cmFjay0+aWQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICBpZiAoIXR5cGUjI1RyYWNrSW5kZXgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgICAgICAgbV93YW50ZWQjI1R5cGUjI1N0cmVhbUlkID0gdHJh
Y2tJZDsgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgbV9yZXF1ZXN0ZWQj
I1R5cGUjI1N0cmVhbUlkID0gdHJhY2tJZDsgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICAgICAgdHJhY2stPnNldEFjdGl2ZSh0cnVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0eXBlIyNUcmFja0luZGV4Kys7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBt
XyMjdHlwZSMjVHJhY2tzLmFkZCh0cmFja0lkLCB0cmFjayk7ICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICBtX3BsYXllci0+YWRkIyNUeXBlIyNUcmFjaygqdHJhY2spOyAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFJlZlB0cjxU
eXBlIyNUcmFja1ByaXZhdGVHU3RyZWFtZXI+IHRyYWNrID0gVHlwZSMjVHJhY2tQcml2YXRlR1N0
cmVhbWVyOjpjcmVhdGUobWFrZVdlYWtQdHIoKnRoaXMpLCB0eXBlIyNUcmFja0luZGV4LCBzdHJl
YW0pOyBcCisgICAgICAgIGF1dG8gdHJhY2tJZCA9IHRyYWNrLT5pZCgpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCF0eXBlIyNUcmFja0luZGV4KSB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgbV93YW50ZWQj
I1R5cGUjI1N0cmVhbUlkID0gdHJhY2tJZDsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICBtX3JlcXVlc3RlZCMjVHlwZSMjU3RyZWFtSWQgPSB0cmFja0lkOyAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgIHRyYWNrLT5zZXRBY3RpdmUodHJ1ZSk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHR5cGUjI1RyYWNrSW5k
ZXgrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
bV8jI3R5cGUjI1RyYWNrcy5hZGQodHJhY2tJZCwgdHJhY2spOyAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICBtX3BsYXllci0+YWRkIyNUeXBlIyNUcmFjaygqdHJhY2spOyAgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgfSBHX1NUTVRfRU5ECiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKQEAgLTE1NDAsNiArMTUzOCwxNSBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3RyZWFtQ29sbGVjdGlvbk1lc3NhZ2Uo
R3N0TWVzc2FnZSogbWVzcwogICAgIGlmIChtX2lzTGVnYWN5UGxheWJpbikKICAgICAgICAgcmV0
dXJuOwogCisgICAgLy8gR1N0cmVhbWVyIHdvcmthcm91bmQ6CisgICAgLy8gVW5mb3J0dW5hdGVs
eSwgd2hlbiB3ZSBoYXZlIGEgc3RyZWFtLWNvbGxlY3Rpb24gYXdhcmUgc291cmNlIChsaWtlIFdl
YktpdE1lZGlhU3JjKSBwYXJzZWJpbiBhbmQgZGVjb2RlYmluMyBlbWl0CisgICAgLy8gdGhlaXIg
b3duIHN0cmVhbS1jb2xsZWN0aW9uIG1lc3NhZ2VzLCBidXQgbGF0ZSwgYW5kIHNvbWV0aW1lcyB3
aXRoIGR1cGxpY2F0ZWQgc3RyZWFtcy4gTGV0J3Mgb25seSBsaXN0ZW4gZm9yCisgICAgLy8gc3Ry
ZWFtLWNvbGxlY3Rpb24gbWVzc2FnZXMgZnJvbSB0aGUgc291cmNlIGluIHRoZSBNU0UgY2FzZSB0
byBhdm9pZCB0aGVzZSBpc3N1ZXMuCisgICAgaWYgKGlzTWVkaWFTb3VyY2UoKSAmJiBHU1RfTUVT
U0FHRV9TUkMobWVzc2FnZSkgIT0gR1NUX09CSkVDVChtX3NvdXJjZS5nZXQoKSkpIHsKKyAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiSWdub3JpbmcgcmVkdW5kYW50IFNUUkVB
TV9DT0xMRUNUSU9OIGZyb20gJSIgR1NUX1BUUl9GT1JNQVQsIG1lc3NhZ2UtPnNyYyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKICAgICBBU1NFUlQoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdl
KSA9PSBHU1RfTUVTU0FHRV9TVFJFQU1fQ09MTEVDVElPTik7CiAgICAgR1JlZlB0cjxHc3RTdHJl
YW1Db2xsZWN0aW9uPiBjb2xsZWN0aW9uOwogICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9j
b2xsZWN0aW9uKG1lc3NhZ2UsICZjb2xsZWN0aW9uLm91dFB0cigpKTsKQEAgLTE1NTUsNyArMTU2
Miw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTdHJlYW1Db2xs
ZWN0aW9uTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzCiAgICAgaWYgKCFjb2xsZWN0aW9uKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBjYWxsT25NYWluVGhyZWFkQW5kV2FpdChbcGxheWVyID0gbWFr
ZVdlYWtQdHIoKnRoaXMpLCBjb2xsZWN0aW9uID0gV1RGTW92ZShjb2xsZWN0aW9uKV0geworICAg
IGNhbGxPbk1haW5UaHJlYWQoW3BsYXllciA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgY29sbGVjdGlv
biA9IFdURk1vdmUoY29sbGVjdGlvbildIHsKICAgICAgICAgaWYgKHBsYXllcikKICAgICAgICAg
ICAgIHBsYXllci0+dXBkYXRlVHJhY2tzKGNvbGxlY3Rpb24pOwogICAgIH0pOwpAQCAtMTgxMyw2
ICsxODIwLDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3Nh
Z2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dl
dF9uYW1lKGN1cnJlbnRTdGF0ZSksICdfJywgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobmV3
U3RhdGUpKS51dGY4KCk7CiAgICAgICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9U
UyhHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGRv
dEZpbGVOYW1lLmRhdGEoKSk7CiAKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgp
LCAiQ2hhbmdlZCBzdGF0ZSBmcm9tICVzIHRvICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25h
bWUoY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobmV3U3RhdGUpKTsK
KwogICAgICAgICBpZiAoIW1faXNMZWdhY3lQbGF5YmluICYmIGN1cnJlbnRTdGF0ZSA9PSBHU1Rf
U1RBVEVfUEFVU0VEICYmIG5ld1N0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKQogICAgICAgICAg
ICAgcGxheWJpbjNTZW5kU2VsZWN0U3RyZWFtc0lmQXBwcm9wcmlhdGUoKTsKICAgICAgICAgdXBk
YXRlU3RhdGVzKCk7CkBAIC0xOTcxLDkgKzE5ODAsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICBw
bGF5YmluM1NlbmRTZWxlY3RTdHJlYW1zSWZBcHByb3ByaWF0ZSgpOwogICAgICAgICBicmVhazsK
ICAgICB9Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9TVFJFQU1fQ09MTEVDVElPTjoKLSAgICAgICAg
aGFuZGxlU3RyZWFtQ29sbGVjdGlvbk1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgIGJyZWFrOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlVuaGFu
ZGxlZCBHU3RyZWFtZXIgbWVzc2FnZSB0eXBlOiAlcyIsIEdTVF9NRVNTQUdFX1RZUEVfTkFNRSht
ZXNzYWdlKSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjU1MSw3ICsyNTU3LDcgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRpZEVuZCgpCiAgICAgLy8gdW50aWwgd2UgZ2V0IHRo
ZSBpbml0aWFsIFNUUkVBTVNfU0VMRUNURUQgbWVzc2FnZSBvbmUgbW9yZSB0aW1lLgogICAgIG1f
d2FpdGluZ0ZvclN0cmVhbXNTZWxlY3RlZEV2ZW50ID0gdHJ1ZTsKIAotICAgIGlmICghbV9wbGF5
ZXItPmlzTG9vcGluZygpKSB7CisgICAgaWYgKCFtX3BsYXllci0+aXNMb29waW5nKCkgJiYgIWlz
TWVkaWFTb3VyY2UoKSkgewogICAgICAgICBtX2lzUGF1c2VkID0gdHJ1ZTsKICAgICAgICAgY2hh
bmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUkVBRFkpOwogICAgICAgICBtX2RpZERvd25sb2Fk
RmluaXNoID0gZmFsc2U7CkBAIC0yNjgxLDExICsyNjg3LDEwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKGNvbnN0IFVSTCYgdXJsKQogICAgIEdT
VF9JTkZPKCJDcmVhdGluZyBwaXBlbGluZSBmb3IgJXMgcGxheWVyIiwgbV9wbGF5ZXItPmlzVmlk
ZW9QbGF5ZXIoKSA/ICJ2aWRlbyIgOiAiYXVkaW8iKTsKICAgICBjb25zdCBjaGFyKiBwbGF5Ymlu
TmFtZSA9ICJwbGF5YmluIjsKIAotICAgIC8vIE1TRSBkb2Vzbid0IHN1cHBvcnQgcGxheWJpbjMu
IE1lZGlhc3RyZWFtIHJlcXVpcmVzIHBsYXliaW4zLiBSZWd1bGFyCi0gICAgLy8gcGxheWJhY2sg
Y2FuIHVzZSBwbGF5YmluMyBvbi1kZW1hbmQgd2l0aCB0aGUgV0VCS0lUX0dTVF9VU0VfUExBWUJJ
TjMKLSAgICAvLyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAvLyBNU0UgYW5kIE1lZGlhc3Ry
ZWFtIHJlcXVpcmUgcGxheWJpbjMuIFJlZ3VsYXIgcGxheWJhY2sgY2FuIHVzZSBwbGF5YmluMyBv
bi1kZW1hbmQgd2l0aCB0aGUKKyAgICAvLyBXRUJLSVRfR1NUX1VTRV9QTEFZQklOMyBlbnZpcm9u
bWVudCB2YXJpYWJsZS4KICAgICBjb25zdCBjaGFyKiB1c2VQbGF5YmluMyA9IGdfZ2V0ZW52KCJX
RUJLSVRfR1NUX1VTRV9QTEFZQklOMyIpOwotICAgIGlmICgoIWlzTWVkaWFTb3VyY2UoKSAmJiB1
c2VQbGF5YmluMyAmJiBlcXVhbCh1c2VQbGF5YmluMywgIjEiKSkgfHwgdXJsLnByb3RvY29sSXMo
Im1lZGlhc3RyZWFtIikpCisgICAgaWYgKChpc01lZGlhU291cmNlKCkgfHwgdXJsLnByb3RvY29s
SXMoIm1lZGlhc3RyZWFtIikgfHwgKHVzZVBsYXliaW4zICYmIGVxdWFsKHVzZVBsYXliaW4zLCAi
MSIpKSkpCiAgICAgICAgIHBsYXliaW5OYW1lID0gInBsYXliaW4zIjsKIAogICAgIEFTU0VSVCgh
bV9waXBlbGluZSk7CkBAIC0yNzIzLDYgKzI3MjgsMTIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4oY29uc3QgVVJMJiB1cmwpCiAgICAgZ19zaWdu
YWxfY29ubmVjdF9zd2FwcGVkKGJ1cy5nZXQoKSwgInN5bmMtbWVzc2FnZTo6bmVlZC1jb250ZXh0
IiwgR19DQUxMQkFDSygrW10oTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIsIEdz
dE1lc3NhZ2UqIG1lc3NhZ2UpIHsKICAgICAgICAgcGxheWVyLT5oYW5kbGVOZWVkQ29udGV4dE1l
c3NhZ2UobWVzc2FnZSk7CiAgICAgfSksIHRoaXMpOworICAgIC8vIEluIHRoZSBNU0UgY2FzZSBz
dHJlYW0gY29sbGVjdGlvbiBtZXNzYWdlcyBhcmUgZW1pdHRlZCBmcm9tIHRoZSBtYWluIHRocmVh
ZCByaWdodCBiZWZvcmUgdGhlIGluaXRpbGl6YXRpb24gc2VnbWVudAorICAgIC8vIGlzIHBhcnNl
ZCBhbmQgInVwZGF0ZWVuZCIgaXMgZmlyZWQuIFdlIG5lZWQgdGhlcmVmb3JlIHRvIGhhbmRsZSB0
aGVzZSBzeW5jaHJvbm91c2x5IGluIHRoZSBzYW1lIG1haW4gdGhyZWFkIHRpY2sKKyAgICAvLyB0
byBtYWtlIHRoZSB0cmFja3MgaW5mb3JtYXRpb24gYXZhaWxhYmxlIHRvIEpTIG5vIGxhdGVyIHRo
YW4gInVwZGF0ZWVuZCIuCisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKGJ1cy5nZXQoKSwg
InN5bmMtbWVzc2FnZTo6c3RyZWFtLWNvbGxlY3Rpb24iLCBHX0NBTExCQUNLKCtbXShNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllciwgR3N0TWVzc2FnZSogbWVzc2FnZSkgeworICAg
ICAgICBwbGF5ZXItPmhhbmRsZVN0cmVhbUNvbGxlY3Rpb25NZXNzYWdlKG1lc3NhZ2UpOworICAg
IH0pLCB0aGlzKTsKIAogICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCAibXV0ZSIs
IG1fcGxheWVyLT5tdXRlZCgpLCBudWxscHRyKTsKIApAQCAtMjc2OSw4ICsyNzgwLDYgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4oY29uc3QgVVJM
JiB1cmwpCiAgICAgaWYgKG1fcGxheWVyLT5pc1ZpZGVvUGxheWVyKCkpCiAgICAgICAgIGdfb2Jq
ZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCAidmlkZW8tc2luayIsIGNyZWF0ZVZpZGVvU2luaygp
LCBudWxscHRyKTsKIAotICAgIGNvbmZpZ3VyZVBsYXlTaW5rKCk7Ci0KICAgICBpZiAobV9zaG91
bGRQcmVzZXJ2ZVBpdGNoKSB7CiAgICAgICAgIEdzdEVsZW1lbnQqIHNjYWxlID0gZ3N0X2VsZW1l
bnRfZmFjdG9yeV9tYWtlKCJzY2FsZXRlbXBvIiwgbnVsbHB0cik7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAppbmRleCBkNDIxZWM3NDFhNmRlZGQ4OGFi
NzdlNGU3YjdkMWMzYTU2NDUzM2MzLi4xYThhMWNkZmM5OWZiMTMyMjczMDJkM2RmNTdkZDBmMjc0
MGQ5NjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5o
CkBAIC0xMzksNyArMTM5LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgdm9pZCBjYW5jZWxMb2Fk
KCkgZmluYWw7CiAgICAgdm9pZCBwcmVwYXJlVG9QbGF5KCkgZmluYWw7Ci0gICAgdm9pZCBwbGF5
KCkgZmluYWw7CisgICAgdm9pZCBwbGF5KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBwYXVzZSgpIG92
ZXJyaWRlOwogICAgIGJvb2wgcGF1c2VkKCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBzZWVraW5n
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9pc1NlZWtpbmc7IH0KQEAgLTI1Miw3ICsyNTIs
NiBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCk7CiAg
ICAgdmlydHVhbCB2b2lkIHNvdXJjZVNldHVwKEdzdEVsZW1lbnQqKTsKLSAgICB2aXJ0dWFsIHZv
aWQgY29uZmlndXJlUGxheVNpbmsoKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2hhbmdlUGlwZWxp
bmVTdGF0ZShHc3RTdGF0ZSk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVBsYXliYWNrUmF0ZSgp
OwogCkBAIC0zMDMsNiArMzAyLDkgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZW5zdXJlQXVkaW9T
b3VyY2VQcm92aWRlcigpOwogICAgIHZvaWQgc2V0QXVkaW9TdHJlYW1Qcm9wZXJ0aWVzKEdPYmpl
Y3QqKTsKIAorICAgIHZpcnR1YWwgYm9vbCBkb1NlZWsoY29uc3QgTWVkaWFUaW1lJiBwb3NpdGlv
biwgZmxvYXQgcmF0ZSwgR3N0U2Vla0ZsYWdzKTsKKyAgICB2b2lkIGludmFsaWRhdGVDYWNoZWRQ
b3NpdGlvbigpIHsgbV9sYXN0UXVlcnlUaW1lLnJlc2V0KCk7IH0KKwogICAgIHN0YXRpYyB2b2lk
IHNldEF1ZGlvU3RyZWFtUHJvcGVydGllc0NhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lciosIEdPYmplY3QqKTsKIAogICAgIHN0YXRpYyB2b2lkIHNvdXJjZVNldHVwQ2FsbGJhY2so
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiwgR3N0RWxlbWVudCopOwpAQCAtNDMxLDggKzQz
Myw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwdXJnZUludmFsaWRWaWRlb1RyYWNrcyhWZWN0b3I8
U3RyaW5nPiB2YWxpZFRyYWNrSWRzKTsKICAgICB2b2lkIHB1cmdlSW52YWxpZFRleHRUcmFja3Mo
VmVjdG9yPFN0cmluZz4gdmFsaWRUcmFja0lkcyk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgZG9TZWVr
KGNvbnN0IE1lZGlhVGltZSYgcG9zaXRpb24sIGZsb2F0IHJhdGUsIEdzdFNlZWtGbGFncyBzZWVr
VHlwZSk7Ci0KICAgICBTdHJpbmcgZW5naW5lRGVzY3JpcHRpb24oKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiAiR1N0cmVhbWVyIjsgfQogICAgIGJvb2wgZGlkUGFzc0NPUlNBY2Nlc3NDaGVjaygp
IGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgY2FuU2F2ZU1lZGlhRGF0YSgpIGNvbnN0IG92ZXJy
aWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9UcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmgKaW5kZXggYWY0
YmZkODJmZGJjOGFlYWI0MDRjOWUxNWFmNjQ4NTUzNTUzMGM5Ny4uMDk1NzVhZDkwZjgwYTEwZmJk
OGFmMTNmYjQ0NzEyOGUwMjFkNTY5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVHJhY2tQcml2YXRlQmFz
ZUdTdHJlYW1lci5oCkBAIC02Miw2ICs2MiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBt
X3N0cmVhbS5nZXQoKTsKICAgICB9CiAKKyAgICAvLyBVc2VkIGZvciBNU0UsIHdoZXJlIHRoZSBp
bml0aWFsIGNhcHMgb2YgdGhlIHBhZCBhcmUgcmVsZXZhbnQgZm9yIGluaXRpYWxpemluZyB0aGUg
bWF0Y2hpbmcgcGFkIGluIHRoZQorICAgIC8vIHBsYXliYWNrIHBpcGVsaW5lLgorICAgIHZvaWQg
c2V0SW5pdGlhbENhcHMoR1JlZlB0cjxHc3RDYXBzPiYmIGNhcHMpIHsgbV9pbml0aWFsQ2FwcyA9
IFdURk1vdmUoY2Fwcyk7IH0KKyAgICBjb25zdCBHUmVmUHRyPEdzdENhcHM+JiBpbml0aWFsQ2Fw
cygpIHsgcmV0dXJuIG1faW5pdGlhbENhcHM7IH0KKwogcHJvdGVjdGVkOgogICAgIFRyYWNrUHJp
dmF0ZUJhc2VHU3RyZWFtZXIoVHJhY2tQcml2YXRlQmFzZSogb3duZXIsIGdpbnQgaW5kZXgsIEdS
ZWZQdHI8R3N0UGFkPik7CiAgICAgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcihUcmFja1ByaXZh
dGVCYXNlKiBvd25lciwgZ2ludCBpbmRleCwgR1JlZlB0cjxHc3RTdHJlYW0+KTsKQEAgLTgyLDYg
Kzg3LDcgQEAgcHJvdGVjdGVkOgogICAgIEdSZWZQdHI8R3N0UGFkPiBtX2Jlc3RVcHN0cmVhbVBh
ZDsKICAgICBHUmVmUHRyPEdzdFN0cmVhbT4gbV9zdHJlYW07CiAgICAgZ3Vsb25nIG1fZXZlbnRQ
cm9iZTsKKyAgICBHUmVmUHRyPEdzdENhcHM+IG1faW5pdGlhbENhcHM7CiAKIHByaXZhdGU6CiAg
ICAgYm9vbCBnZXRMYW5ndWFnZUNvZGUoR3N0VGFnTGlzdCogdGFncywgQXRvbVN0cmluZyYgdmFs
dWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmNwcAppbmRleCA4MDk4MjMwNmRkZmVh
ZGI5Njk2NDliZDk4ODBmYmI0MGJmNWEyNzFkLi4xY2ZjMTk1NzE4ZGI1OWE1MGFkZGYwOGE1MzVj
NTc4MTc2YWJmMjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmNwcApAQCAtMjgs
OSArMjgsOSBAQAogI2luY2x1ZGUgIkdTdHJlYW1lckVNRVV0aWxpdGllcy5oIgogI2luY2x1ZGUg
IkdTdHJlYW1lck1lZGlhRGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJHU3RyZWFtZXJSZWdpc3Ry
eVNjYW5uZXJNU0UuaCIKLSNpbmNsdWRlICJNZWRpYVNhbXBsZUdTdHJlYW1lci5oIgogI2luY2x1
ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJNZWRpYURl
c2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiTWVkaWFTYW1wbGVHU3RyZWFtZXIuaCIKICNpbmNsdWRl
ICJTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiVmlkZW9UcmFja1By
aXZhdGVHU3RyZWFtZXIuaCIKICNpbmNsdWRlIDxmdW5jdGlvbmFsPgpAQCAtMzg5LDEzICszODks
MTMgQEAgdm9pZCBBcHBlbmRQaXBlbGluZTo6cGFyc2VEZW11eGVyU3JjUGFkQ2FwcyhHc3RDYXBz
KiBkZW11eGVyU3JjUGFkQ2FwcykKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAg
bV9kZW11eGVyU3JjUGFkQ2FwcyA9IGFkb3B0R1JlZihkZW11eGVyU3JjUGFkQ2Fwcyk7Ci0gICAg
bV9zdHJlYW1UeXBlID0gV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpV
bmtub3duOworICAgIG1fc3RyZWFtVHlwZSA9IE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1l
cjo6VW5rbm93bjsKIAogICAgIGNvbnN0IGNoYXIqIG9yaWdpbmFsTWVkaWFUeXBlID0gY2Fwc01l
ZGlhVHlwZShtX2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpKTsKICAgICBhdXRvJiBnc3RSZWdpc3Ry
eVNjYW5uZXIgPSBHU3RyZWFtZXJSZWdpc3RyeVNjYW5uZXJNU0U6OnNpbmdsZXRvbigpOwogICAg
IGlmICghZ3N0UmVnaXN0cnlTY2FubmVyLmlzQ29kZWNTdXBwb3J0ZWQoR1N0cmVhbWVyUmVnaXN0
cnlTY2FubmVyOjpDb25maWd1cmF0aW9uOjpEZWNvZGluZywgb3JpZ2luYWxNZWRpYVR5cGUpKSB7
CiAgICAgICAgICAgICBtX3ByZXNlbnRhdGlvblNpemUgPSBXZWJDb3JlOjpGbG9hdFNpemUoKTsK
LSAgICAgICAgICAgIG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlw
ZUdTdHJlYW1lcjo6SW52YWxpZDsKKyAgICAgICAgICAgIG1fc3RyZWFtVHlwZSA9IE1lZGlhU291
cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6SW52YWxpZDsKICAgICB9IGVsc2UgaWYgKGRvQ2Fwc0hh
dmVUeXBlKG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCksIEdTVF9WSURFT19DQVBTX1RZUEVfUFJF
RklYKSkgewogICAgICAgICBPcHRpb25hbDxGbG9hdFNpemU+IHNpemUgPSBnZXRWaWRlb1Jlc29s
dXRpb25Gcm9tQ2FwcyhtX2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpKTsKICAgICAgICAgaWYgKHNp
emUuaGFzVmFsdWUoKSkKQEAgLTQwMywxMyArNDAzLDEzIEBAIHZvaWQgQXBwZW5kUGlwZWxpbmU6
OnBhcnNlRGVtdXhlclNyY1BhZENhcHMoR3N0Q2FwcyogZGVtdXhlclNyY1BhZENhcHMpCiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIG1fcHJlc2VudGF0aW9uU2l6ZSA9IFdlYkNvcmU6OkZsb2F0
U2l6ZSgpOwogCi0gICAgICAgIG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291cmNlU3Ry
ZWFtVHlwZUdTdHJlYW1lcjo6VmlkZW87CisgICAgICAgIG1fc3RyZWFtVHlwZSA9IE1lZGlhU291
cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VmlkZW87CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9w
cmVzZW50YXRpb25TaXplID0gV2ViQ29yZTo6RmxvYXRTaXplKCk7CiAgICAgICAgIGlmIChkb0Nh
cHNIYXZlVHlwZShtX2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpLCBHU1RfQVVESU9fQ0FQU19UWVBF
X1BSRUZJWCkpCi0gICAgICAgICAgICBtX3N0cmVhbVR5cGUgPSBXZWJDb3JlOjpNZWRpYVNvdXJj
ZVN0cmVhbVR5cGVHU3RyZWFtZXI6OkF1ZGlvOworICAgICAgICAgICAgbV9zdHJlYW1UeXBlID0g
TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpBdWRpbzsKICAgICAgICAgZWxzZSBpZiAo
ZG9DYXBzSGF2ZVR5cGUobV9kZW11eGVyU3JjUGFkQ2Fwcy5nZXQoKSwgR1NUX1RFWFRfQ0FQU19U
WVBFX1BSRUZJWCkpCi0gICAgICAgICAgICBtX3N0cmVhbVR5cGUgPSBXZWJDb3JlOjpNZWRpYVNv
dXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlRleHQ7CisgICAgICAgICAgICBtX3N0cmVhbVR5cGUg
PSBNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlRleHQ7CiAgICAgfQogfQogCkBAIC00
MjYsMTggKzQyNiwyNCBAQCB2b2lkIEFwcGVuZFBpcGVsaW5lOjphcHBzaW5rQ2Fwc0NoYW5nZWQo
KQogICAgIGlmICghY2FwcykKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gSWYgdGhpcyBpcyBu
b3QgdGhlIGZpcnN0IHRpbWUgd2UncmUgcGFyc2luZyBhbiBpbml0aWFsaXphdGlvbiBzZWdtZW50
LCBmYWlsIGlmIHRoZSB0cmFjaworICAgIC8vIGhhcyBhIGRpZmZlcmVudCBjb2RlYyBvciB0eXBl
IChlLmcuIGlmIHdlIHdlcmUgcHJldmlvdXNseSBkZW11eGluZyBhbiBhdWRpbyBzdHJlYW0gYW5k
CisgICAgLy8gc29tZW9uZSBhcHBlbmRzIGEgdmlkZW8gc3RyZWFtKS4KKyAgICBpZiAobV9hcHBz
aW5rQ2FwcyAmJiBnX3N0cmNtcDAoY2Fwc01lZGlhVHlwZShjYXBzLmdldCgpKSwgY2Fwc01lZGlh
VHlwZShtX2FwcHNpbmtDYXBzLmdldCgpKSkpIHsKKyAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNU
KG1fcGlwZWxpbmUuZ2V0KCksICJVc2VyIGFwcGVuZGVkIHRyYWNrIG1ldGFkYXRhIHdpdGggdHlw
ZSAnJXMnIGZvciBhIFNvdXJjZUJ1ZmZlciBwcmV2aW91c2x5IGhhbmRsaW5nICclcycuIEVycm9y
aW5nIG91dC4iLCBjYXBzTWVkaWFUeXBlKGNhcHMuZ2V0KCkpLCBjYXBzTWVkaWFUeXBlKG1fYXBw
c2lua0NhcHMuZ2V0KCkpKTsKKyAgICAgICAgbV9zb3VyY2VCdWZmZXJQcml2YXRlLmFwcGVuZFBh
cnNpbmdGYWlsZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChkb0NhcHNI
YXZlVHlwZShjYXBzLmdldCgpLCBHU1RfVklERU9fQ0FQU19UWVBFX1BSRUZJWCkpIHsKICAgICAg
ICAgT3B0aW9uYWw8RmxvYXRTaXplPiBzaXplID0gZ2V0VmlkZW9SZXNvbHV0aW9uRnJvbUNhcHMo
Y2Fwcy5nZXQoKSk7CiAgICAgICAgIGlmIChzaXplLmhhc1ZhbHVlKCkpCiAgICAgICAgICAgICBt
X3ByZXNlbnRhdGlvblNpemUgPSBzaXplLnZhbHVlKCk7CiAgICAgfQogCi0gICAgLy8gVGhpcyBt
ZWFucyB0aGF0IHdlJ3JlIHJpZ2h0IGFmdGVyIGEgbmV3IHRyYWNrIGhhcyBhcHBlYXJlZC4gT3Ro
ZXJ3aXNlLCBpdCdzIGEgY2FwcyBjaGFuZ2UgaW5zaWRlIHRoZSBzYW1lIHRyYWNrLgotICAgIGJv
b2wgcHJldmlvdXNDYXBzV2VyZU51bGwgPSAhbV9hcHBzaW5rQ2FwczsKLQogICAgIGlmIChtX2Fw
cHNpbmtDYXBzICE9IGNhcHMpIHsKICAgICAgICAgbV9hcHBzaW5rQ2FwcyA9IFdURk1vdmUoY2Fw
cyk7Ci0gICAgICAgIG1fcGxheWVyUHJpdmF0ZS0+dHJhY2tEZXRlY3RlZCgqdGhpcywgbV90cmFj
aywgcHJldmlvdXNDYXBzV2VyZU51bGwpOworICAgICAgICBtX3BsYXllclByaXZhdGUtPnRyYWNr
RGV0ZWN0ZWQoKnRoaXMsIG1fdHJhY2spOwogICAgIH0KIH0KIApAQCAtNzA5LDkgKzcxNSw5IEBA
IHZvaWQgQXBwZW5kUGlwZWxpbmU6OmNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rRnJvbVN0
cmVhbWluZ1RocmVhZChHc3RQYWQqIGRlCiAgICAgfQogCiAgICAgLy8gTXVzdCBiZSBkb25lIGlu
IHRoZSB0aHJlYWQgd2Ugd2VyZSBjYWxsZWQgZnJvbSAodXN1YWxseSBzdHJlYW1pbmcgdGhyZWFk
KS4KLSAgICBib29sIGlzRGF0YSA9IChtX3N0cmVhbVR5cGUgPT0gV2ViQ29yZTo6TWVkaWFTb3Vy
Y2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpBdWRpbykKLSAgICAgICAgfHwgKG1fc3RyZWFtVHlwZSA9
PSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlZpZGVvKQotICAgICAg
ICB8fCAobV9zdHJlYW1UeXBlID09IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJl
YW1lcjo6VGV4dCk7CisgICAgYm9vbCBpc0RhdGEgPSAobV9zdHJlYW1UeXBlID09IE1lZGlhU291
cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6QXVkaW8pCisgICAgICAgIHx8IChtX3N0cmVhbVR5cGUg
PT0gTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpWaWRlbykKKyAgICAgICAgfHwgKG1f
c3RyZWFtVHlwZSA9PSBNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlRleHQpOwogCiAg
ICAgaWYgKGlzRGF0YSkgewogICAgICAgICBHUmVmUHRyPEdzdE9iamVjdD4gcGFyZW50ID0gYWRv
cHRHUmVmKGdzdF9lbGVtZW50X2dldF9wYXJlbnQobV9hcHBzaW5rLmdldCgpKSk7CkBAIC03NTgs
NiArNzY0LDggQEAgdm9pZCBBcHBlbmRQaXBlbGluZTo6Y29ubmVjdERlbXV4ZXJTcmNQYWRUb0Fw
cHNpbmsoR3N0UGFkKiBkZW11eGVyU3JjUGFkKQogICAgIC8vIE9ubHkgb25lIHN0cmVhbSBwZXIg
ZGVtdXhlciBpcyBzdXBwb3J0ZWQuCiAgICAgQVNTRVJUKCFnc3RfcGFkX2lzX2xpbmtlZChzaW5r
U2lua1BhZC5nZXQoKSkpOwogCisgICAgLy8gQXMgaXQgaXMgbm93LCByZXNldFBhcnNlclN0YXRl
KCkgd2lsbCBjYXVzZSB0aGUgcGFkcyB0byBiZSBkaXNjb25uZWN0ZWQsIHNvIHRoZXkgd2lsbCBs
YXRlciBiZSByZS1hZGRlZCBvbiB0aGUgbmV4dCBpbml0aWFsaXphdGlvbiBzZWdtZW50LgorCiAg
ICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X2N1cnJlbnRf
Y2FwcyhHU1RfUEFEKGRlbXV4ZXJTcmNQYWQpKSk7CiAKICNpZm5kZWYgR1NUX0RJU0FCTEVfR1NU
X0RFQlVHCkBAIC03NjksMTcgKzc3NywyNyBAQCB2b2lkIEFwcGVuZFBpcGVsaW5lOjpjb25uZWN0
RGVtdXhlclNyY1BhZFRvQXBwc2luayhHc3RQYWQqIGRlbXV4ZXJTcmNQYWQpCiAKICAgICBwYXJz
ZURlbXV4ZXJTcmNQYWRDYXBzKGdzdF9jYXBzX3JlZihjYXBzLmdldCgpKSk7CiAKKyAgICBUcmFj
a1ByaXZhdGVCYXNlR1N0cmVhbWVyKiBnc3RyZWFtZXJUcmFjazsKICAgICBzd2l0Y2ggKG1fc3Ry
ZWFtVHlwZSkgewotICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVh
bWVyOjpBdWRpbzoKLSAgICAgICAgbV90cmFjayA9IFdlYkNvcmU6OkF1ZGlvVHJhY2tQcml2YXRl
R1N0cmVhbWVyOjpjcmVhdGUobWFrZVdlYWtQdHIoKm1fcGxheWVyUHJpdmF0ZSksIGlkKCksIHNp
bmtTaW5rUGFkLmdldCgpKTsKKyAgICBjYXNlIE1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1l
cjo6QXVkaW86IHsKKyAgICAgICAgYXV0byBzcGVjaWZpY1RyYWNrID0gV2ViQ29yZTo6QXVkaW9U
cmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShtYWtlV2Vha1B0cigqbV9wbGF5ZXJQcml2YXRl
KSwgaWQoKSwgc2lua1NpbmtQYWQuZ2V0KCkpOworICAgICAgICBnc3RyZWFtZXJUcmFjayA9IHNw
ZWNpZmljVHJhY2sucHRyKCk7CisgICAgICAgIG1fdHJhY2sgPSBtYWtlUmVmUHRyKHN0YXRpY19j
YXN0PFRyYWNrUHJpdmF0ZUJhc2UqPihzcGVjaWZpY1RyYWNrLnB0cigpKSk7CiAgICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpW
aWRlbzoKLSAgICAgICAgbV90cmFjayA9IFdlYkNvcmU6OlZpZGVvVHJhY2tQcml2YXRlR1N0cmVh
bWVyOjpjcmVhdGUobWFrZVdlYWtQdHIoKm1fcGxheWVyUHJpdmF0ZSksIGlkKCksIHNpbmtTaW5r
UGFkLmdldCgpKTsKKyAgICB9CisgICAgY2FzZSBNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFt
ZXI6OlZpZGVvOiB7CisgICAgICAgIGF1dG8gc3BlY2lmaWNUcmFjayA9IFdlYkNvcmU6OlZpZGVv
VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobWFrZVdlYWtQdHIoKm1fcGxheWVyUHJpdmF0
ZSksIGlkKCksIHNpbmtTaW5rUGFkLmdldCgpKTsKKyAgICAgICAgZ3N0cmVhbWVyVHJhY2sgPSBz
cGVjaWZpY1RyYWNrLnB0cigpOworICAgICAgICBtX3RyYWNrID0gbWFrZVJlZlB0cihzdGF0aWNf
Y2FzdDxUcmFja1ByaXZhdGVCYXNlKj4oc3BlY2lmaWNUcmFjay5wdHIoKSkpOwogICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6
VGV4dDoKLSAgICAgICAgbV90cmFjayA9IFdlYkNvcmU6OkluYmFuZFRleHRUcmFja1ByaXZhdGVH
U3RyZWFtZXI6OmNyZWF0ZShpZCgpLCBzaW5rU2lua1BhZC5nZXQoKSk7CisgICAgfQorICAgIGNh
c2UgTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpUZXh0OiB7CisgICAgICAgIGF1dG8g
c3BlY2lmaWNUcmFjayA9IFdlYkNvcmU6OkluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6
OmNyZWF0ZShpZCgpLCBzaW5rU2lua1BhZC5nZXQoKSk7CisgICAgICAgIGdzdHJlYW1lclRyYWNr
ID0gc3BlY2lmaWNUcmFjay5wdHIoKTsKKyAgICAgICAgbV90cmFjayA9IG1ha2VSZWZQdHIoc3Rh
dGljX2Nhc3Q8VHJhY2tQcml2YXRlQmFzZSo+KHNwZWNpZmljVHJhY2sucHRyKCkpKTsKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFt
ZXI6OkludmFsaWQ6CisgICAgfQorICAgIGNhc2UgTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVh
bWVyOjpJbnZhbGlkOgogICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QobV9waXBlbGluZS5nZXQo
KSwgIlVuc3VwcG9ydGVkIHRyYWNrIGNvZGVjOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcy5nZXQo
KSk7CiAgICAgICAgIC8vIDMuNS43IEluaXRpYWxpemF0aW9uIFNlZ21lbnQgUmVjZWl2ZWQKICAg
ICAgICAgLy8gNS4xLiBJZiB0aGUgaW5pdGlhbGl6YXRpb24gc2VnbWVudCBjb250YWlucyB0cmFj
a3Mgd2l0aCBjb2RlY3MgdGhlIHVzZXIgYWdlbnQgZG9lcyBub3Qgc3VwcG9ydCwgdGhlbiBydW4g
dGhlCkBAIC03OTEsMTEgKzgwOSwxMiBAQCB2b2lkIEFwcGVuZFBpcGVsaW5lOjpjb25uZWN0RGVt
dXhlclNyY1BhZFRvQXBwc2luayhHc3RQYWQqIGRlbXV4ZXJTcmNQYWQpCiAgICAgICAgIHJldHVy
bjsKICAgICBkZWZhdWx0OgogICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QobV9waXBlbGluZS5n
ZXQoKSwgIlBhZCBoYXMgdW5rbm93biB0cmFjayB0eXBlLCBpZ25vcmluZzogJSIgR1NUX1BUUl9G
T1JNQVQsIGNhcHMuZ2V0KCkpOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuOwogICAg
IH0KKyAgICBnc3RyZWFtZXJUcmFjay0+c2V0SW5pdGlhbENhcHMoR1JlZlB0cihjYXBzKSk7CiAK
ICAgICBtX2FwcHNpbmtDYXBzID0gV1RGTW92ZShjYXBzKTsKLSAgICBtX3BsYXllclByaXZhdGUt
PnRyYWNrRGV0ZWN0ZWQoKnRoaXMsIG1fdHJhY2ssIHRydWUpOworICAgIG1fcGxheWVyUHJpdmF0
ZS0+dHJhY2tEZXRlY3RlZCgqdGhpcywgbV90cmFjayk7CiB9CiAKIHZvaWQgQXBwZW5kUGlwZWxp
bmU6OmRpc2Nvbm5lY3REZW11eGVyU3JjUGFkRnJvbUFwcHNpbmtGcm9tQW55VGhyZWFkKEdzdFBh
ZCogZGVtdXhlclNyY1BhZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuaAppbmRleCAxMTYx
ODZlM2NkNmEyNzNmMzNlYzI0Y2M5N2Q4YjJmZTliYmI2NTdmLi42ODczZmI3NTY2MWY0NzQxZjEz
YmMxMGIxOTY2MzgzMWUxNDVhZTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5oCkBA
IC01Nyw2ICs1Nyw5IEBAIHB1YmxpYzoKICAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJN
U0UqIHBsYXllclByaXZhdGUoKSB7IHJldHVybiBtX3BsYXllclByaXZhdGU7IH0KIAogcHJpdmF0
ZToKKyAgICAvLyBTaW1pbGFyIHRvIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlw
ZSwgYnV0IHdpdGggYSBuZXcgdmFsdWUgKEludmFsaWQpIGZvciB3aGVuIHRoZSBjb2RlYyBpcwor
ICAgIC8vIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBzeXN0ZW0sIHdoaWNoIHNob3VsZCByZXN1bHQg
aW4gUGFyc2luZ0ZhaWxlZCBlcnJvciBiZWluZyB0aHJvd24gaW4gU291cmNlQnVmZmVyLgorICAg
IGVudW0gTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyIHsgQXVkaW8sIFZpZGVvLCBUZXh0
LCBVbmtub3duLCBJbnZhbGlkIH07CiAKICAgICB2b2lkIGhhbmRsZUVycm9yU3luY01lc3NhZ2Uo
R3N0TWVzc2FnZSopOwogICAgIHZvaWQgaGFuZGxlTmVlZENvbnRleHRTeW5jTWVzc2FnZShHc3RN
ZXNzYWdlKik7CkBAIC04MSw3ICs4NCw2IEBAIHByaXZhdGU6CiAgICAgR3N0RWxlbWVudCogYXBw
c3JjKCkgeyByZXR1cm4gbV9hcHBzcmMuZ2V0KCk7IH0KICAgICBHc3RFbGVtZW50KiBhcHBzaW5r
KCkgeyByZXR1cm4gbV9hcHBzaW5rLmdldCgpOyB9CiAgICAgR3N0Q2FwcyogZGVtdXhlclNyY1Bh
ZENhcHMoKSB7IHJldHVybiBtX2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpOyB9Ci0gICAgV2ViQ29y
ZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyIHN0cmVhbVR5cGUoKSB7IHJldHVybiBt
X3N0cmVhbVR5cGU7IH0KIAogICAgIHZvaWQgZGlzY29ubmVjdERlbXV4ZXJTcmNQYWRGcm9tQXBw
c2lua0Zyb21BbnlUaHJlYWQoR3N0UGFkKik7CiAgICAgdm9pZCBjb25uZWN0RGVtdXhlclNyY1Bh
ZFRvQXBwc2lua0Zyb21TdHJlYW1pbmdUaHJlYWQoR3N0UGFkKik7CkBAIC0xNDIsNyArMTQ0LDcg
QEAgcHJpdmF0ZToKICAgICBzdHJ1Y3QgUGFkUHJvYmVJbmZvcm1hdGlvbiBtX2FwcHNpbmtQYWRF
dmVudFByb2JlSW5mb3JtYXRpb247CiAjZW5kaWYKIAotICAgIFdlYkNvcmU6Ok1lZGlhU291cmNl
U3RyZWFtVHlwZUdTdHJlYW1lciBtX3N0cmVhbVR5cGU7CisgICAgTWVkaWFTb3VyY2VTdHJlYW1U
eXBlR1N0cmVhbWVyIG1fc3RyZWFtVHlwZTsKICAgICBSZWZQdHI8V2ViQ29yZTo6VHJhY2tQcml2
YXRlQmFzZT4gbV90cmFjazsKIAogICAgIEFib3J0YWJsZVRhc2tRdWV1ZSBtX3Rhc2tRdWV1ZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
TVNFLmNwcAppbmRleCA1NDQ1OTZhZmZhMDQ0Y2MwY2VhY2Q4NTQxNWMwYjk1Yjc3ODg2OWI1Li5j
MzIyMzM4ZTJhYzRhZDhmYjhjMjBkOWZjZTkzM2M4NzUzZGE3ZTM1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck1TRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwCkBAIC0z
LDkgKzMsOSBAQAogICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSBMdGQuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tl
ci5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNA
Z25vbWUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEz
LCAyMDE2LCAyMDE3IElnYWxpYSBTLkwKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAx
MSwgMjAxMiwgMjAxMywgMjAxNiwgMjAxNywgMjAxOCwgMjAxOSwgMjAyMCwgMjAyMSBJZ2FsaWEg
Uy5MCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNl
bnRyaWN1bGFyLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiwgMjAxNyBNZXRyb2xv
Z2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2LCAyMDE3LCAyMDE4
LCAyMDE5LCAyMDIwLCAyMDIxIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTM2LDEwICszNiwxMSBAQAogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIK
ICNpbmNsdWRlICJNZWRpYURlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIK
LSNpbmNsdWRlICJQbGF5YmFja1BpcGVsaW5lLmgiCisjaW5jbHVkZSAiTWVkaWFTb3VyY2VUcmFj
a0dTdHJlYW1lci5oIgogI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuaCIK
ICNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCiAjaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGVHU3Ry
ZWFtZXIuaCIKKyNpbmNsdWRlICJXZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgogCiAjaW5j
bHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+CiAjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzcmMu
aD4KQEAgLTExMiwxMyArMTEzLDcgQEAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp+
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFKCkKIHsKICAgICBHU1RfVFJBQ0UoImRlc3Ry
b3lpbmcgdGhlIHBsYXllciAoJXApIiwgdGhpcyk7CiAKLSAgICBpZiAobV9zb3VyY2UpIHsKLSAg
ICAgICAgd2ViS2l0TWVkaWFTcmNTZXRNZWRpYVBsYXllclByaXZhdGUoV0VCS0lUX01FRElBX1NS
QyhtX3NvdXJjZS5nZXQoKSksIG51bGxwdHIpOwotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19k
aXNjb25uZWN0X2J5X2RhdGEobV9zb3VyY2UuZ2V0KCksIHRoaXMpOwotICAgIH0KLQotICAgIGlm
IChtX3BsYXliYWNrUGlwZWxpbmUpCi0gICAgICAgIG1fcGxheWJhY2tQaXBlbGluZS0+c2V0V2Vi
S2l0TWVkaWFTcmMobnVsbHB0cik7CisgICAgbV9zb3VyY2UuY2xlYXIoKTsKIH0KIAogdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmxvYWQoY29uc3QgU3RyaW5nJikKQEAgLTEz
NCwxOSArMTI5LDIzIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpsb2Fk
KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBDb250ZW50VHlwZSYsIE1lCiAgICAgR1NUX0RFQlVHKCJM
b2FkaW5nICVzIiwgbXNlQmxvYlVSSS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgbV9tZWRpYVNvdXJj
ZSA9IG1lZGlhU291cmNlOwogCi0gICAgaWYgKCFtX3BsYXliYWNrUGlwZWxpbmUpCi0gICAgICAg
IG1fcGxheWJhY2tQaXBlbGluZSA9IFBsYXliYWNrUGlwZWxpbmU6OmNyZWF0ZSgpOwotCiAgICAg
bV9tZWRpYVNvdXJjZVByaXZhdGUgPSBNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXI6Om9wZW4o
Km1fbWVkaWFTb3VyY2UuZ2V0KCksICp0aGlzKTsKIAogICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6bG9hZChtc2VCbG9iVVJJKTsKIH0KIAordm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJNU0U6OnBsYXkoKQoreworICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwg
IlBsYXkgcmVxdWVzdGVkIik7CisgICAgbV9pc1BhdXNlZCA9IGZhbHNlOworICAgIHVwZGF0ZVN0
YXRlcygpOworfQorCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6cGF1c2Uo
KQogewotICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IG5lZWQgZGlyZWN0IGFjY2VzcyB0byB0aGlz
IG1lbWJlci4gVGhpcyBvdmVycmlkZSBpcyBwcm9iYWJseSBub3QgbmVlZGVkLgorICAgIEdTVF9E
RUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlBhdXNlIHJlcXVlc3RlZCIpOwogICAgIG1faXNQYXVz
ZWQgPSB0cnVlOwotICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGF1c2UoKTsKKyAg
ICB1cGRhdGVTdGF0ZXMoKTsKIH0KIAogTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRTo6ZHVyYXRpb25NZWRpYVRpbWUoKSBjb25zdApAQCAtMTU5LDMxMyArMTU4LDEwMyBA
QCBNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkdXJhdGlvbk1lZGlh
VGltZSgpIGNvbnN0CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVr
KGNvbnN0IE1lZGlhVGltZSYgdGltZSkKIHsKLSAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUg
fHwgbV9kaWRFcnJvck9jY3VyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR1NUX0lORk9fT0JK
RUNUKHBpcGVsaW5lKCksICJbU2Vla10gc2VlayBhdHRlbXB0IHRvICVzIHNlY3MiLCB0b1N0cmlu
Zyh0aW1lKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIC8vIEF2b2lkIHVzZWxlc3Mgc2Vla2luZy4K
LSAgICBNZWRpYVRpbWUgY3VycmVudCA9IGN1cnJlbnRNZWRpYVRpbWUoKTsKLSAgICBpZiAodGlt
ZSA9PSBjdXJyZW50KSB7Ci0gICAgICAgIGlmICghbV9pc1NlZWtpbmcpCi0gICAgICAgICAgICB0
aW1lQ2hhbmdlZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1faXNMaXZl
U3RyZWFtKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pc1NlZWtpbmcgJiYgbV9pc1Nl
ZWtQZW5kaW5nKSB7Ci0gICAgICAgIG1fc2Vla1RpbWUgPSB0aW1lOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiU2Vla2luZyBmcm9t
ICVzIHRvICVzIHNlY29uZHMiLCB0b1N0cmluZyhjdXJyZW50KS51dGY4KCkuZGF0YSgpLCB0b1N0
cmluZyh0aW1lKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIE1lZGlhVGltZSBwcmV2aW91c1NlZWtU
aW1lID0gbV9zZWVrVGltZTsKLSAgICBtX3NlZWtUaW1lID0gdGltZTsKLQotICAgIGlmICghZG9T
ZWVrKG1fc2Vla1RpbWUsIG1fcGxheWJhY2tSYXRlLCBzdGF0aWNfY2FzdDxHc3RTZWVrRmxhZ3M+
KEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFKSkpIHsKLSAgICAg
ICAgbV9zZWVrVGltZSA9IHByZXZpb3VzU2Vla1RpbWU7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09C
SkVDVChwaXBlbGluZSgpLCAiU2Vla2luZyB0byAlcyBmYWlsZWQiLCB0b1N0cmluZyh0aW1lKS51
dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1faXNFbmRSZWFj
aGVkID0gZmFsc2U7Ci0gICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAibV9pc1NlZWtp
bmc9JXMsIG1fc2Vla1RpbWU9JXMiLCBib29sRm9yUHJpbnRpbmcobV9pc1NlZWtpbmcpLCB0b1N0
cmluZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJNU0U6OmNvbmZpZ3VyZVBsYXlTaW5rKCkKLXsKLSAgICBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmNvbmZpZ3VyZVBsYXlTaW5rKCk7Ci0KLSAgICBHUmVmUHRyPEdz
dEVsZW1lbnQ+IHBsYXlzaW5rID0gYWRvcHRHUmVmKGdzdF9iaW5fZ2V0X2J5X25hbWUoR1NUX0JJ
TihtX3BpcGVsaW5lLmdldCgpKSwgInBsYXlzaW5rIikpOwotICAgIGlmIChwbGF5c2luaykgewot
ICAgICAgICAvLyBUaGUgZGVmYXVsdCB2YWx1ZSAoMCkgbWVhbnMgInNlbmQgZXZlbnRzIHRvIGFs
bCB0aGUgc2lua3MiLCBpbnN0ZWFkCi0gICAgICAgIC8vIG9mICJvbmx5IHRvIHRoZSBmaXJzdCB0
aGF0IHJldHVybnMgdHJ1ZSIuIFRoaXMgaXMgbmVlZGVkIGZvciBNU0Ugc2Vlay4KLSAgICAgICAg
Z19vYmplY3Rfc2V0KEdfT0JKRUNUKHBsYXlzaW5rLmdldCgpKSwgInNlbmQtZXZlbnQtbW9kZSIs
IDAsIG51bGxwdHIpOwotICAgIH0KKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJS
ZXF1ZXN0ZWQgc2VlayB0byAlcyIsIHRpbWUudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICBkb1NlZWsodGltZSwgbV9wbGF5YmFja1JhdGUsIEdTVF9TRUVLX0ZMQUdfRkxVU0gpOwogfQog
Ci1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Y2hhbmdlUGlwZWxpbmVTdGF0
ZShHc3RTdGF0ZSBuZXdTdGF0ZSkKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
Ojpkb1NlZWsoY29uc3QgTWVkaWFUaW1lJiBwb3NpdGlvbiwgZmxvYXQgcmF0ZSwgR3N0U2Vla0Zs
YWdzIHNlZWtGbGFncykKIHsKLSAgICBpZiAoc2Vla2luZygpKSB7Ci0gICAgICAgIEdTVF9ERUJV
RygiUmVqZWN0ZWQgc3RhdGUgY2hhbmdlIHRvICVzIHdoaWxlIHNlZWtpbmciLAotICAgICAgICAg
ICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobmV3U3RhdGUpKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQorICAgIC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBv
dXRzaWRlIG9mIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSBieSBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnNldFJhdGUoKS4KIAotICAgIHJldHVybiBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmNoYW5nZVBpcGVsaW5lU3RhdGUobmV3U3RhdGUpOwotfQotCi12b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bm90aWZ5U2Vla05lZWRzRGF0YUZvclRpbWUo
Y29uc3QgTWVkaWFUaW1lJiBzZWVrVGltZSkKLXsKLSAgICAvLyBSZWVucXVldWUgc2FtcGxlcyBu
ZWVkZWQgdG8gcmVzdW1lIHBsYXliYWNrIGluIHRoZSBuZXcgcG9zaXRpb24uCi0gICAgbV9tZWRp
YVNvdXJjZS0+c2Vla1RvVGltZShzZWVrVGltZSk7CisgICAgLy8gTm90ZTogQW4gaW1wb3J0YW50
IGRpZmZlcmVuY2UgYmV0d2VlbiBzZWVrIHdpdGggV2ViS2l0TWVkaWFTcmMgYW5kIHJlZ3VsYXIg
cGxheWJhY2sgaXMgdGhhdCBzZWVraW5nIGJlZm9yZQorICAgIC8vIHByZS1yb2xsIChlLmcuIHRv
IHN0YXJ0IHBsYXliYWNrIGF0IGEgbm9uLXplcm8gcG9zaXRpb24pIGlzIHN1cHBvcnRlZCBpbiBX
ZWJLaXRNZWRpYVNyYyBidXQgbm90IGluIHJlZ3VsYXIKKyAgICAvLyBwbGF5YmFjay4gVGhpcyBp
cyByZWxldmFudCBpbiBNU0UgYmVjYXVzZSBwcmUtcm9sbCBtYXkgbmV2ZXIgb2NjdXIgaWYgdGhl
IEpTIGNvZGUgbmV2ZXIgYXBwZW5kcyBhIHJhbmdlIHN0YXJ0aW5nCisgICAgLy8gYXQgemVybywg
Y3JlYXRpbmcgYSBjaGlja2VuIGFuZCBlZ2cgcHJvYmxlbS4KIAotICAgIEdTVF9ERUJVRygiTVNF
IHNlZWsgdG8gJXMgZmluaXNoZWQiLCB0b1N0cmluZyhzZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7
CisgICAgLy8gR1N0cmVhbWVyIGRvZXNuJ3Qgc3VwcG9ydCB6ZXJvIGFzIGEgdmFsaWQgcGxheWJh
Y2sgcmF0ZS4gSW5zdGVhZCwgdGhhdCBpcyBpbXBsZW1lbnRlZCBpbiBXZWJLaXQgYnkgcGF1c2lu
ZworICAgIC8vIHRoZSBwaXBlbGluZS4KKyAgICBpZiAocmF0ZSA8PSAwKQorICAgICAgICByYXRl
ID0gMS4wOwogCi0gICAgaWYgKCFtX2dzdFNlZWtDb21wbGV0ZWQpIHsKLSAgICAgICAgbV9nc3RT
ZWVrQ29tcGxldGVkID0gdHJ1ZTsKLSAgICAgICAgbWF5YmVGaW5pc2hTZWVrKCk7Ci0gICAgfQot
fQotCi1zdGF0aWMgYm9vbCBjaGVja1Nob3VsZERlbGF5U2VlayhHc3RTdGF0ZUNoYW5nZVJldHVy
biBnZXRTdGF0ZVJlc3VsdCwgR3N0U3RhdGUgY3VycmVudFN0YXRlLCBHc3RTdGF0ZSBuZXdTdGF0
ZSkKLXsKLSAgICBpZiAoZ2V0U3RhdGVSZXN1bHQgIT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQykK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChHU1RfU1RBVEVfVFJBTlNJVElPTihjdXJy
ZW50U3RhdGUsIG5ld1N0YXRlKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1BMQVlJTkdfVE9fUEFVU0VE
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBHU1RfU1RB
VEVfUkVBRFkgJiYgbmV3U3RhdGUgPj0gR1NUX1NUQVRFX1BBVVNFRCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRTo6ZG9TZWVrKGNvbnN0IE1lZGlhVGltZSYgcG9zaXRpb24sIGZsb2F0IHJhdGUs
IEdzdFNlZWtGbGFncyBzZWVrVHlwZSkKLXsKLSAgICAvLyBGSVhNRTogTWFrZSBhIGNvcHkgaGVy
ZSBiZWNhdXNlIGluIHNvbWUgY2FzZXMgYmVsb3cgaXQgaXMgbW9kaWZpZWQuIFRoaXMKLSAgICAv
LyBzb3VuZHMgbGlrZSBhIGJhZCBpZGVhIGFuZCBzaG91bGQgYmUgaW52ZXN0aWdhdGVkIGZ1cnRo
ZXIuCi0gICAgTWVkaWFUaW1lIHNlZWtUaW1lID0gcG9zaXRpb247Ci0KLSAgICAvLyBBbHdheXMg
bW92ZSB0byBzZWVraW5nIHN0YXRlIHRvIHJlcG9ydCBjb3JyZWN0ICdjdXJyZW50VGltZScgd2hp
bGUgcGVuZGluZyBmb3IgYWN0dWFsIHNlZWsgdG8gY29tcGxldGUuCisgICAgbV9zZWVrVGltZSA9
IHBvc2l0aW9uOwogICAgIG1faXNTZWVraW5nID0gdHJ1ZTsKKyAgICBtX2lzV2FpdGluZ0ZvclBy
ZXJvbGwgPSB0cnVlOworICAgIG1faXNFbmRSZWFjaGVkID0gZmFsc2U7CiAKLSAgICAvLyBDaGVj
ayBpZiBwbGF5YmFjayBwaXBlbGluZSBpcyByZWFkeSBmb3Igc2Vlay4KLSAgICBHc3RTdGF0ZSBz
dGF0ZSwgbmV3U3RhdGU7Ci0gICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ2V0U3RhdGVSZXN1bHQg
PSBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCAmbmV3U3Rh
dGUsIDApOwotICAgIGlmIChnZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxV
UkUgfHwgZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMKSB7Ci0g
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltTZWVrXSBjYW5ub3Qgc2Vlaywg
Y3VycmVudCBzdGF0ZSBjaGFuZ2UgaXMgJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VfcmV0
dXJuX2dldF9uYW1lKGdldFN0YXRlUmVzdWx0KSk7Ci0gICAgICAgIHdlYktpdE1lZGlhU3JjU2V0
UmVhZHlGb3JTYW1wbGVzKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCB0cnVlKTsK
LSAgICAgICAgbV9pc1NlZWtpbmcgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIGJvb2wgc2hvdWxkRGVsYXlTZWVrID0gY2hlY2tTaG91bGREZWxheVNlZWsoZ2V0
U3RhdGVSZXN1bHQsIHN0YXRlLCBuZXdTdGF0ZSk7Ci0gICAgaWYgKHNob3VsZERlbGF5U2VlayB8
fCBtX2lzRW5kUmVhY2hlZCB8fCAhbV9nc3RTZWVrQ29tcGxldGVkKSB7Ci0gICAgICAgIENTdHJp
bmcgcmVhc29uID0gIlVua25vd24gcmVhc29uIjsKLSAgICAgICAgaWYgKHNob3VsZERlbGF5U2Vl
aykgewotICAgICAgICAgICAgcmVhc29uID0gbWFrZVN0cmluZygiSW4gYXN5bmMgY2hhbmdlICIs
Ci0gICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpLCAiIC0t
PiAiLAotICAgICAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG5ld1N0YXRl
KSkudXRmOCgpOwotICAgICAgICB9IGVsc2UgaWYgKHN0YXRlIDwgR1NUX1NUQVRFX1BBVVNFRCkK
LSAgICAgICAgICAgIHJlYXNvbiA9ICJTdGF0ZSBsZXNzIHRoYW4gUEFVU0VEIjsKLSAgICAgICAg
ZWxzZSBpZiAobV9pc0VuZFJlYWNoZWQpCi0gICAgICAgICAgICByZWFzb24gPSAiRW5kIHJlYWNo
ZWQiOwotICAgICAgICBlbHNlIGlmICghbV9nc3RTZWVrQ29tcGxldGVkKQotICAgICAgICAgICAg
cmVhc29uID0gIlByZXZpb3VzIHNlZWsgaXMgbm90IGZpbmlzaGVkIHlldCI7Ci0KLSAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW1NlZWtdIERlbGF5aW5nIHRoZSBzZWVrOiAl
cyIsIHJlYXNvbi5kYXRhKCkpOwotCi0gICAgICAgIG1faXNTZWVrUGVuZGluZyA9IHRydWU7Ci0K
LSAgICAgICAgaWYgKG1faXNFbmRSZWFjaGVkKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUcoIltT
ZWVrXSByZXNldCBwaXBlbGluZSIpOwotICAgICAgICAgICAgbV9zaG91bGRSZXNldFBpcGVsaW5l
ID0gdHJ1ZTsKLSAgICAgICAgICAgIG1faXNTZWVraW5nID0gZmFsc2U7Ci0gICAgICAgICAgICBp
ZiAoIWNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BBVVNFRCkpCi0gICAgICAgICAgICAg
ICAgbG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlOjpFbXB0eSk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9pc1NlZWtpbmcgPSB0cnVlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIG1faXNTZWVraW5nOwotICAgIH0KLQotICAgIC8vIFN0b3Ag
YWNjZXB0aW5nIG5ldyBzYW1wbGVzIHVudGlsIGFjdHVhbCBzZWVrIGlzIGZpbmlzaGVkLgotICAg
IHdlYktpdE1lZGlhU3JjU2V0UmVhZHlGb3JTYW1wbGVzKFdFQktJVF9NRURJQV9TUkMobV9zb3Vy
Y2UuZ2V0KCkpLCBmYWxzZSk7Ci0KLSAgICAvLyBDb3JyZWN0IHNlZWsgdGltZSBpZiBpdCBoZWxw
cyB0byBmaXggYSBzbWFsbCBnYXAuCi0gICAgaWYgKCFpc1RpbWVCdWZmZXJlZChzZWVrVGltZSkp
IHsKLSAgICAgICAgLy8gTG9vayBpZiBhIG5lYXIgZnV0dXJlIHRpbWUgKDwwLjEgc2VjLikgaXMg
YnVmZmVyZWQgYW5kIGNoYW5nZSB0aGUgc2VlayB0YXJnZXQgdGltZS4KLSAgICAgICAgaWYgKG1f
bWVkaWFTb3VyY2UpIHsKLSAgICAgICAgICAgIGNvbnN0IE1lZGlhVGltZSBtaW5pR2FwID0gTWVk
aWFUaW1lKDEsIDEwKTsKLSAgICAgICAgICAgIE1lZGlhVGltZSBuZWFyZXN0ID0gbV9tZWRpYVNv
dXJjZS0+YnVmZmVyZWQoKS0+bmVhcmVzdChzZWVrVGltZSk7Ci0gICAgICAgICAgICBpZiAobmVh
cmVzdC5pc1ZhbGlkKCkgJiYgbmVhcmVzdCA+IHNlZWtUaW1lICYmIChuZWFyZXN0IC0gc2Vla1Rp
bWUpIDw9IG1pbmlHYXAgJiYgaXNUaW1lQnVmZmVyZWQobmVhcmVzdCArIG1pbmlHYXApKSB7Ci0g
ICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW1NlZWtdIENoYW5n
ZWQgdGhlIHNlZWsgdGFyZ2V0IHRpbWUgZnJvbSAlcyB0byAlcywgYSBuZWFyIHBvaW50IGluIHRo
ZSBmdXR1cmUiLCB0b1N0cmluZyhzZWVrVGltZSkudXRmOCgpLmRhdGEoKSwgdG9TdHJpbmcobmVh
cmVzdCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgc2Vla1RpbWUgPSBuZWFyZXN0
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgaWYgTVNF
IGhhcyBzYW1wbGVzIGZvciByZXF1ZXN0ZWQgdGltZSBhbmQgZGVmZXIgYWN0dWFsIHNlZWsgaWYg
bmVlZGVkLgotICAgIGlmICghaXNUaW1lQnVmZmVyZWQoc2Vla1RpbWUpKSB7Ci0gICAgICAgIEdT
VF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltTZWVrXSBEZWxheWluZyB0aGUgc2VlazogTVNF
IGlzIG5vdCByZWFkeSIpOwotICAgICAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiBzZXRTdGF0ZVJl
c3VsdCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVf
UEFVU0VEKTsKLSAgICAgICAgaWYgKHNldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0Vf
RkFJTFVSRSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW1Nl
ZWtdIENhbm5vdCBzZWVrLCBmYWlsZWQgdG8gcGF1c2UgcGxheWJhY2sgcGlwZWxpbmUuIik7Ci0g
ICAgICAgICAgICB3ZWJLaXRNZWRpYVNyY1NldFJlYWR5Rm9yU2FtcGxlcyhXRUJLSVRfTUVESUFf
U1JDKG1fc291cmNlLmdldCgpKSwgdHJ1ZSk7Ci0gICAgICAgICAgICBtX2lzU2Vla2luZyA9IGZh
bHNlOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIG1fcmVh
ZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlOjpIYXZlTWV0YWRhdGE7Ci0gICAgICAg
IG5vdGlmeVNlZWtOZWVkc0RhdGFGb3JUaW1lKHNlZWtUaW1lKTsKLSAgICAgICAgQVNTRVJUKCFt
X21zZVNlZWtDb21wbGV0ZWQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAv
LyBDb21wbGV0ZSBwcmV2aW91cyBNU0Ugc2VlayBpZiBuZWVkZWQuCi0gICAgaWYgKCFtX21zZVNl
ZWtDb21wbGV0ZWQpIHsKLSAgICAgICAgbV9tZWRpYVNvdXJjZS0+bW9uaXRvclNvdXJjZUJ1ZmZl
cnMoKTsKLSAgICAgICAgQVNTRVJUKG1fbXNlU2Vla0NvbXBsZXRlZCk7Ci0gICAgICAgIC8vIE5v
dGU6IHNlZWtDb21wbGV0ZWQgd2lsbCByZWN1cnNpdmVseSBjYWxsIHVzLgotICAgICAgICByZXR1
cm4gbV9pc1NlZWtpbmc7Ci0gICAgfQotCi0gICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgp
LCAiV2UgY2FuIHNlZWsgbm93Iik7Ci0KLSAgICBNZWRpYVRpbWUgc3RhcnRUaW1lID0gc2Vla1Rp
bWUsIGVuZFRpbWUgPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7Ci0KLSAgICBpZiAocmF0ZSA8
IDApIHsKLSAgICAgICAgc3RhcnRUaW1lID0gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOwotICAgICAg
ICBlbmRUaW1lID0gc2Vla1RpbWU7Ci0gICAgfQorICAgIC8vIEltcG9ydGFudDogSW4gb3JkZXIg
dG8gZW5zdXJlIGNvcnJlY3QgcHJvcGFnYXRpb24gd2hldGhlciBwcmUtcm9sbCBoYXMgaGFwcGVu
ZWQgb3Igbm90LCB3ZSBzZW5kIHRoZSBzZWVrIGRpcmVjdGx5CisgICAgLy8gdG8gdGhlIHNvdXJj
ZSBlbGVtZW50LCByYXRoZXIgdGhhbiBsZXR0aW5nIHBsYXliaW4gZG8gdGhlIHJvdXRpbmcuCisg
ICAgZ3N0X2VsZW1lbnRfc2VlayhtX3NvdXJjZS5nZXQoKSwgcmF0ZSwgR1NUX0ZPUk1BVF9USU1F
LCBzZWVrRmxhZ3MsCisgICAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCB0b0dzdENsb2NrVGltZSht
X3NlZWtUaW1lKSwgR1NUX1NFRUtfVFlQRV9OT05FLCAwKTsKKyAgICBpbnZhbGlkYXRlQ2FjaGVk
UG9zaXRpb24oKTsKIAotICAgIGlmICghcmF0ZSkKLSAgICAgICAgcmF0ZSA9IDE7Ci0KLSAgICBH
U1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJBY3R1YWwgc2VlayB0byAlcywgZW5kIHRpbWU6
ICAlcywgcmF0ZTogJWYiLCB0b1N0cmluZyhzdGFydFRpbWUpLnV0ZjgoKS5kYXRhKCksIHRvU3Ry
aW5nKGVuZFRpbWUpLnV0ZjgoKS5kYXRhKCksIHJhdGUpOwotCi0gICAgbV9nc3RTZWVrQ29tcGxl
dGVkID0gZmFsc2U7Ci0gICAgaWYgKHN0YXRlIDwgR1NUX1NUQVRFX1BBVVNFRCkgewotICAgICAg
ICAvLyBTcGVjaWFsIGNhc2Ugb2YgaW5pdGlhbCBzZWVrLiBXZSBzZXQgdGhlIHJpZ2h0IHNlZ21l
bnQgaW5zdGVhZCBvZiBhIHNlZWsuCi0gICAgICAgIHdlYktpdE1lZGlhU3JjUHJlcGFyZUluaXRp
YWxTZWVrKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCByYXRlLCBzdGFydFRpbWUs
IGVuZFRpbWUpOwotICAgICAgICBub3RpZnlTZWVrTmVlZHNEYXRhRm9yVGltZShzZWVrVGltZSk7
Ci0gICAgICAgIEdTVF9ERUJVRygiSW5pdGlhbCBzZWVrIHN1Y2NlZWRlZCwgcmV0dXJuaW5nIHRy
dWUiKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBUaGlzIHdpbGwgY2FsbCBub3RpZnlTZWVr
TmVlZHNEYXRhKCkgYWZ0ZXIgc29tZSB0aW1lIHRvIHRlbGwgdGhhdCB0aGUgcGlwZWxpbmUgaXMg
cmVhZHkgZm9yIHNhbXBsZSBlbnF1ZXVpbmcuCi0gICAgICAgIHdlYktpdE1lZGlhU3JjUHJlcGFy
ZVNlZWsoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSksIHNlZWtUaW1lKTsKLQotICAg
ICAgICBpZiAoIWdzdF9lbGVtZW50X3NlZWsobV9waXBlbGluZS5nZXQoKSwgcmF0ZSwgR1NUX0ZP
Uk1BVF9USU1FLCBzZWVrVHlwZSwgR1NUX1NFRUtfVFlQRV9TRVQsIHRvR3N0Q2xvY2tUaW1lKHN0
YXJ0VGltZSksIEdTVF9TRUVLX1RZUEVfU0VULCB0b0dzdENsb2NrVGltZShlbmRUaW1lKSkpIHsK
LSAgICAgICAgICAgIHdlYktpdE1lZGlhU3JjU2V0UmVhZHlGb3JTYW1wbGVzKFdFQktJVF9NRURJ
QV9TUkMobV9zb3VyY2UuZ2V0KCkpLCB0cnVlKTsKLSAgICAgICAgICAgIG1faXNTZWVraW5nID0g
ZmFsc2U7Ci0gICAgICAgICAgICBtX2dzdFNlZWtDb21wbGV0ZWQgPSB0cnVlOwotICAgICAgICAg
ICAgR1NUX0RFQlVHKCJnc3RfZWxlbWVudF9zZWVrKCkgZmFpbGVkLCByZXR1cm5pbmcgZmFsc2Ui
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAvLyBUaGUg
c2FtcGxlcyB3aWxsIGJlIGVucXVldWVkIGluIG5vdGlmeVNlZWtOZWVkc0RhdGEoKS4KLSAgICAg
ICAgR1NUX0RFQlVHKCJnc3RfZWxlbWVudF9zZWVrKCkgc3VjY2VlZGVkLCByZXR1cm5pbmcgdHJ1
ZSIpOwotICAgIH0KKyAgICAvLyBOb3RpZnkgTWVkaWFTb3VyY2UgYW5kIGhhdmUgbmV3IGZyYW1l
cyBlbnF1ZXVlZCAod2hlbiB0aGV5J3JlIGF2YWlsYWJsZSkuCisgICAgbV9tZWRpYVNvdXJjZS0+
c2Vla1RvVGltZShtX3NlZWtUaW1lKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om1heWJlRmluaXNoU2VlaygpCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVh
ZHlTdGF0ZSBtZWRpYVNvdXJjZVJlYWR5U3RhdGUpCiB7Ci0gICAgaWYgKCFtX2lzU2Vla2luZyB8
fCAhbV9tc2VTZWVrQ29tcGxldGVkIHx8ICFtX2dzdFNlZWtDb21wbGV0ZWQpCisgICAgLy8gU29t
ZXRoaW5nIGltcG9ydGFudCB0byBiZWFyIGluIG1pbmQgaXMgdGhhdCB0aGUgcmVhZHlTdGF0ZSB3
ZSBnZXQgaGVyZSBjb21lcyBmcm9tIE1lZGlhU291cmNlLgorICAgIC8vIEZyb20gTWVkaWFTb3Vy
Y2UgcGVyc3BlY3RpdmUsIGFzIGxvbmcgYXMgdGhlIHNhbXBsZSBmb3IgY3VycmVudFRpbWUgZXhp
c3RzIGluIHRoZSBzYW1wbGUgbWFwLCB3ZSBhcmUgPj0gSGF2ZUN1cnJlbnREYXRhLgorICAgIC8v
IFRoaXMgaXMgTk9UIHRydWUgZnJvbSB0aGUgcGxheWVyIHBlcnNwZWN0aXZlIHRob3VnaCwgYmVj
YXVzZSB0aGVyZSBuZWVkcyB0byBwYXNzIHNvbWUgdGltZSBzaW5jZSB3ZSBoYXZlIHRoZSBmaXJz
dCBmcmFtZQorICAgIC8vICg+PUhhdmVDdXJyZW50RGF0YSBmb3IgTWVkaWFTb3VyY2UpIGFuZCB3
ZSBoYXZlIGRlY29kZWQgaXQgYW5kIHNlbnQgaXQgdG8gdGhlIHNpbmsvY29tcG9zaXRvciAoPj1I
YXZlQ3VycmVudERhdGEgaW4gSFRNTE1lZGlhRWxlbWVudCkuCisgICAgLy8gVGhlIHdheSB3ZSBp
bXBsZW1lbnQgdGhpcyBpcyBieSBrZWVwaW5nIHRyYWNrIG9mIHRoZSBNZWRpYVNvdXJjZSByZWFk
eVN0YXRlIGludGVybmFsbHkgaW4gbV9tZWRpYVNvdXJjZVJlYWR5U3RhdGUgYnV0IG5vdAorICAg
IC8vIHNwcmVhZGluZyBzdGF0ZXMgPj0gSGF2ZUN1cnJlbnREYXRhIHRvIHRoZSBwbGF5ZXIgdW50
aWwgcHJlcm9sbGVkLgorICAgIGlmIChtZWRpYVNvdXJjZVJlYWR5U3RhdGUgPT0gbV9tZWRpYVNv
dXJjZVJlYWR5U3RhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdzdFN0YXRlIHN0YXRlLCBu
ZXdTdGF0ZTsKLSAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiBnZXRTdGF0ZVJlc3VsdCA9IGdzdF9l
bGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmc3RhdGUsICZuZXdTdGF0ZSwgMCk7
Ci0KLSAgICBpZiAoZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQwotICAg
ICAgICAmJiAhKHN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HICYmIG5ld1N0YXRlID09IEdTVF9T
VEFURV9QQVVTRUQpKSB7Ci0gICAgICAgIEdTVF9ERUJVRygiW1NlZWtdIERlbGF5aW5nIHNlZWsg
ZmluaXNoIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgR1NUX0RFQlVHKCJNZWRpYVNv
dXJjZSBjYWxsZWQgc2V0UmVhZHlTdGF0ZSglcCk6ICVzIC0+ICVzIEN1cnJlbnQgcGxheWVyIHN0
YXRlOiAlcyBXYWl0aW5nIGZvciBwcmVyb2xsOiAlcyIsIHRoaXMsCisgICAgICAgIGR1bXBSZWFk
eVN0YXRlKG1fbWVkaWFTb3VyY2VSZWFkeVN0YXRlKSwgZHVtcFJlYWR5U3RhdGUobWVkaWFTb3Vy
Y2VSZWFkeVN0YXRlKSwgZHVtcFJlYWR5U3RhdGUobV9yZWFkeVN0YXRlKSwgYm9vbEZvclByaW50
aW5nKG1faXNXYWl0aW5nRm9yUHJlcm9sbCkpOworICAgIG1fbWVkaWFTb3VyY2VSZWFkeVN0YXRl
ID0gbWVkaWFTb3VyY2VSZWFkeVN0YXRlOwogCi0gICAgaWYgKG1faXNTZWVrUGVuZGluZykgewot
ICAgICAgICBHU1RfREVCVUcoIltTZWVrXSBDb21taXR0aW5nIHBlbmRpbmcgc2VlayB0byAlcyIs
IHRvU3RyaW5nKG1fc2Vla1RpbWUpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBtX2lzU2Vla1Bl
bmRpbmcgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFkb1NlZWsobV9zZWVrVGltZSwgbV9wbGF5YmFj
a1JhdGUsIHN0YXRpY19jYXN0PEdzdFNlZWtGbGFncz4oR1NUX1NFRUtfRkxBR19GTFVTSCB8IEdT
VF9TRUVLX0ZMQUdfQUNDVVJBVEUpKSkgewotICAgICAgICAgICAgR1NUX1dBUk5JTkcoIltTZWVr
XSBTZWVraW5nIHRvICVzIGZhaWxlZCIsIHRvU3RyaW5nKG1fc2Vla1RpbWUpLnV0ZjgoKS5kYXRh
KCkpOwotICAgICAgICAgICAgbV9jYWNoZWRQb3NpdGlvbiA9IE1lZGlhVGltZTo6aW52YWxpZFRp
bWUoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgR1NUX0RFQlVH
KCJbU2Vla10gU2Vla2VkIHRvICVzIiwgdG9TdHJpbmcobV9zZWVrVGltZSkudXRmOCgpLmRhdGEo
KSk7Ci0KLSAgICB3ZWJLaXRNZWRpYVNyY1NldFJlYWR5Rm9yU2FtcGxlcyhXRUJLSVRfTUVESUFf
U1JDKG1fc291cmNlLmdldCgpKSwgdHJ1ZSk7Ci0gICAgbV9pc1NlZWtpbmcgPSBmYWxzZTsKLSAg
ICBtX2NhY2hlZFBvc2l0aW9uID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwotICAgIC8vIFRo
ZSBwaXBlbGluZSBjYW4gc3RpbGwgaGF2ZSBhIHBlbmRpbmcgc3RhdGUuIEluIHRoaXMgY2FzZSBh
IHBvc2l0aW9uIHF1ZXJ5IHdpbGwgZmFpbC4KLSAgICAvLyBSaWdodCBub3cgd2UgY2FuIHVzZSBt
X3NlZWtUaW1lIGFzIGEgZmFsbGJhY2suCi0gICAgbV9jYW5GYWxsQmFja1RvTGFzdEZpbmlzaGVk
U2Vla1Bvc2l0aW9uID0gdHJ1ZTsKLSAgICB0aW1lQ2hhbmdlZCgpOwotfQotCi1ib29sIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2Vla2luZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1faXNTZWVraW5nOworICAgIGlmIChtZWRpYVNvdXJjZVJlYWR5U3RhdGUgPCBNZWRpYVBsYXll
cjo6UmVhZHlTdGF0ZTo6SGF2ZUN1cnJlbnREYXRhIHx8ICFtX2lzV2FpdGluZ0ZvclByZXJvbGwp
CisgICAgICAgIHByb3BhZ2F0ZVJlYWR5U3RhdGVUb1BsYXllcigpOwogfQogCi0vLyBGSVhNRTog
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyIG1hbmFnZXMgdGhlIFJlYWR5U3RhdGUgb24gaXRz
IG93bi4gV2Ugc2hvdWxkbid0IGNoYW5nZSBpdCBtYW51YWxseS4KLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFOjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRl
IHJlYWR5U3RhdGUpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6cHJvcGFn
YXRlUmVhZHlTdGF0ZVRvUGxheWVyKCkKIHsKLSAgICBpZiAocmVhZHlTdGF0ZSA9PSBtX3JlYWR5
U3RhdGUpCisgICAgQVNTRVJUKG1fbWVkaWFTb3VyY2VSZWFkeVN0YXRlIDwgTWVkaWFQbGF5ZXI6
OlJlYWR5U3RhdGU6OkhhdmVDdXJyZW50RGF0YSB8fCAhbV9pc1dhaXRpbmdGb3JQcmVyb2xsKTsK
KyAgICBpZiAobV9yZWFkeVN0YXRlID09IG1fbWVkaWFTb3VyY2VSZWFkeVN0YXRlKQogICAgICAg
ICByZXR1cm47CisgICAgR1NUX0RFQlVHKCJQcm9wYWdhdGluZyBNZWRpYVNvdXJjZSByZWFkeVN0
YXRlICVzIHRvIHBsYXllciByZWFkeSBzdGF0ZSAoY3VycmVudGx5ICVzKSIsIGR1bXBSZWFkeVN0
YXRlKG1fbWVkaWFTb3VyY2VSZWFkeVN0YXRlKSwgZHVtcFJlYWR5U3RhdGUobV9yZWFkeVN0YXRl
KSk7CiAKLSAgICBpZiAoc2Vla2luZygpKSB7Ci0gICAgICAgIEdTVF9ERUJVRygiU2tpcCByZWFk
eSBzdGF0ZSBjaGFuZ2UoJXMgLT4gJXMpIGR1ZSB0byBzZWVrXG4iLCBkdW1wUmVhZHlTdGF0ZSht
X3JlYWR5U3RhdGUpLCBkdW1wUmVhZHlTdGF0ZShyZWFkeVN0YXRlKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBHU1RfREVCVUcoIlJlYWR5IFN0YXRlIENoYW5nZWQgbWFudWFsbHkg
ZnJvbSAldSB0byAldSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3JlYWR5U3RhdGUpLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4ocmVhZHlTdGF0ZSkpOwotICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0
YXRlIG9sZFJlYWR5U3RhdGUgPSBtX3JlYWR5U3RhdGU7Ci0gICAgbV9yZWFkeVN0YXRlID0gcmVh
ZHlTdGF0ZTsKLSAgICBHU1RfREVCVUcoIm1fcmVhZHlTdGF0ZTogJXMgLT4gJXMiLCBkdW1wUmVh
ZHlTdGF0ZShvbGRSZWFkeVN0YXRlKSwgZHVtcFJlYWR5U3RhdGUobV9yZWFkeVN0YXRlKSk7Ci0K
LSAgICBpZiAob2xkUmVhZHlTdGF0ZSA8IE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlOjpIYXZlQ3Vy
cmVudERhdGEgJiYgbV9yZWFkeVN0YXRlID49IE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlOjpIYXZl
Q3VycmVudERhdGEpIHsKLSAgICAgICAgR1NUX0RFQlVHKCJbU2Vla10gUmVwb3J0aW5nIGxvYWQg
c3RhdGUgY2hhbmdlZCB0byB0cmlnZ2VyIHNlZWsgY29udGludWF0aW9uIik7Ci0gICAgICAgIGxv
YWRTdGF0ZUNoYW5nZWQoKTsKLSAgICB9CisgICAgbV9yZWFkeVN0YXRlID0gbV9tZWRpYVNvdXJj
ZVJlYWR5U3RhdGU7CisgICAgdXBkYXRlU3RhdGVzKCk7IC8vIFNldCB0aGUgcGlwZWxpbmUgdG8g
UExBWUlORyBvciBQQVVTRUQgaWYgbmVjZXNzYXJ5LgogICAgIG1fcGxheWVyLT5yZWFkeVN0YXRl
Q2hhbmdlZCgpOwogCi0gICAgR3N0U3RhdGUgcGlwZWxpbmVTdGF0ZTsKLSAgICBHc3RTdGF0ZUNo
YW5nZVJldHVybiBnZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVs
aW5lLmdldCgpLCAmcGlwZWxpbmVTdGF0ZSwgbnVsbHB0ciwgMjUwICogR1NUX05TRUNPTkQpOwot
ICAgIGJvb2wgaXNQbGF5aW5nID0gKGdldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0Vf
U1VDQ0VTUyAmJiBwaXBlbGluZVN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICAgIGlm
IChtX3JlYWR5U3RhdGUgPT0gTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGU6OkhhdmVNZXRhZGF0YSAm
JiBvbGRSZWFkeVN0YXRlID4gTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGU6OkhhdmVNZXRhZGF0YSAm
JiBpc1BsYXlpbmcpIHsKLSAgICAgICAgR1NUX1RSQUNFKCJDaGFuZ2luZyBwaXBlbGluZSB0byBQ
QVVTRUQuLi4iKTsKLSAgICAgICAgYm9vbCBvayA9IGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NU
QVRFX1BBVVNFRCk7Ci0gICAgICAgIEdTVF9UUkFDRSgiQ2hhbmdlZCBwaXBlbGluZSB0byBQQVVT
RUQ6ICVzIiwgb2sgPyAiU3VjY2VzcyIgOiAiRXJyb3IiKTsKLSAgICB9CisgICAgLy8gVGhlIHJl
YWR5U3RhdGUgY2hhbmdlIG1heSBiZSBhIHJlc3VsdCBvZiBtb25pdG9yU291cmNlQnVmZmVycygp
IGZpbmRpbmcgdGhhdCBjdXJyZW50VGltZSA9PSBkdXJhdGlvbiwgd2hpY2gKKyAgICAvLyBzaG91
bGQgY2F1c2UgdGhlIHZpZGVvIHRvIGJlIG1hcmtlZCBhcyBlbmRlZC4gTGV0J3MgaGF2ZSB0aGUg
cGxheWVyIGNoZWNrIHRoYXQuCisgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CiB9CiAKLXZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp3YWl0Rm9yU2Vla0NvbXBsZXRlZCgp
Ci17Ci0gICAgaWYgKCFtX2lzU2Vla2luZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR1NUX0RF
QlVHKCJXYWl0aW5nIGZvciBNU0Ugc2VlayBjb21wbGV0ZWQiKTsKLSAgICBtX21zZVNlZWtDb21w
bGV0ZWQgPSBmYWxzZTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6
OnNlZWtDb21wbGV0ZWQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmFz
eW5jU3RhdGVDaGFuZ2VEb25lKCkKIHsKLSAgICBpZiAobV9tc2VTZWVrQ29tcGxldGVkKQorICAg
IEFTU0VSVChHU1RfU1RBVEUobV9waXBlbGluZS5nZXQoKSkgPj0gR1NUX1NUQVRFX1BBVVNFRCk7
CisgICAgLy8gVGhlcmUgYXJlIHRocmVlIGNpcmN1bXN0YW5jZXMgaW4gd2hpY2ggYSBwcmVyb2xs
IGNhbiBvY2N1cjoKKyAgICAvLyBhKSBBdCB0aGUgYmVnaW5pbmcgb2YgcGxheWJhY2suIFRoaXMg
aXMgdGhlIHBvaW50IHdoZXJlIHdlIHByb3BhZ2F0ZSA+PUhhdmVDdXJyZW50RGF0YSB0byB0aGUg
cGxheWVyLgorICAgIC8vIGIpIEF0IHRoZSBlbmQgb2YgYSBzZWVrLiBXZSBlbWl0IHRoZSAic2Vl
a2VkIiBldmVudCBhcyB3ZWxsLgorICAgIC8vIGMpIEF0IHRoZSBlbmQgb2YgYSBmbHVzaCAoZm9y
Y2VkIHF1YWxpdHkgY2hhbmdlKS4gVGhlc2Ugc2hvdWxkIG5vdCBwcm9kdWNlIGVpdGhlciBvZiB0
aGVzZSBvdXRjb21lcy4KKyAgICAvLyBXZSBpZGVudGlmeSAoYSkgYW5kIChiKSBieSBzZXR0aW5n
IG1faXNXYWl0aW5nRm9yUHJlcm9sbCA9IHRydWUgYXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRo
ZSBwbGF5ZXIgYW5kCisgICAgLy8gYXQgdGhlIGJlZ2lubmluZyBvZiBhIHNlZWsuCisgICAgR1NU
X0RFQlVHKCJQaXBlbGluZSBwcmVyb2xsZWQuIGN1cnJlbnRNZWRpYVRpbWUgPSAlcyIsIGN1cnJl
bnRNZWRpYVRpbWUoKS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGlmICghbV9pc1dh
aXRpbmdGb3JQcmVyb2xsKSB7CisgICAgICAgIEdTVF9ERUJVRygiUHJlcm9sbCB3YXMgY29uc2Vx
dWVuY2Ugb2YgYSBmbHVzaCwgbm90aGluZyB0byBkbyBhdCB0aGlzIGxldmVsLiIpOwogICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIG1faXNXYWl0aW5nRm9yUHJlcm9sbCA9IGZhbHNlOwogCi0g
ICAgR1NUX0RFQlVHKCJNU0Ugc2VlayBjb21wbGV0ZWQiKTsKLSAgICBtX21zZVNlZWtDb21wbGV0
ZWQgPSB0cnVlOwotCi0gICAgZG9TZWVrKG1fc2Vla1RpbWUsIG1fcGxheWJhY2tSYXRlLCBzdGF0
aWNfY2FzdDxHc3RTZWVrRmxhZ3M+KEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFH
X0FDQ1VSQVRFKSk7Ci0KLSAgICBpZiAoIXNlZWtpbmcoKSAmJiBtX3JlYWR5U3RhdGUgPj0gTWVk
aWFQbGF5ZXI6OlJlYWR5U3RhdGU6OkhhdmVGdXR1cmVEYXRhKQotICAgICAgICBjaGFuZ2VQaXBl
bGluZVN0YXRlKEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICAvLyBUaGUgb3JkZXIgb2YgdGhlc2Ug
c2VjdGlvbnMgaXMgaW1wb3J0YW50LiBJbiB0aGUgY2FzZSBvZiBhIHNlZWssIHRoZSAic2Vla2Vk
IiBldmVudCBtdXN0IGJlIGVtaXR0ZWQKKyAgICAvLyBiZWZvcmUgdGhlICJwbGF5aW5nIiBldmVu
dCAod2hpY2ggaXMgZW1pdHRlZCBvbiBIQVZFX0VOT1VHSF9EQVRBKS4gVGhlcmVmb3JlLCB3ZSB0
YWtlIGNhcmUgb2YgdGhlbSBpbgorICAgIC8vIHRoYXQgb3JkZXIuCiAKLSAgICBpZiAoIXNlZWtp
bmcoKSkKKyAgICBpZiAobV9pc1NlZWtpbmcpIHsKKyAgICAgICAgbV9pc1NlZWtpbmcgPSBmYWxz
ZTsKKyAgICAgICAgR1NUX0RFQlVHKCJTZWVrIGNvbXBsZXRlIGJlY2F1c2Ugb2YgcHJlcm9sbC4g
Y3VycmVudE1lZGlhVGltZSA9ICVzIiwgY3VycmVudE1lZGlhVGltZSgpLnRvU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgIC8vIEJ5IGNhbGxpbmcgdGltZUNoYW5nZWQoKSwgbV9pc1Nl
ZWtpbmcgd2lsbCBiZSBjaGVja2VkIGFuIGEgInNlZWtlZCIgZXZlbnQgd2lsbCBiZSBlbWl0dGVk
LgogICAgICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKKyAgICB9CisKKyAgICBwcm9wYWdh
dGVSZWFkeVN0YXRlVG9QbGF5ZXIoKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGlt
ZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpidWZmZXJlZCgpIGNvbnN0
CkBAIC00NzcsMTk5ICsyNjYsMjYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJN
U0U6OnNvdXJjZVNldHVwKEdzdEVsZW1lbnQqIHNvdXJjZUVsZW1lbnQpCiB7CiAgICAgQVNTRVJU
KFdFQktJVF9JU19NRURJQV9TUkMoc291cmNlRWxlbWVudCkpOwogICAgIEdTVF9ERUJVR19PQkpF
Q1QocGlwZWxpbmUoKSwgIlNvdXJjZSAlcCBzZXR1cCAob2xkIHdhczogJXApIiwgc291cmNlRWxl
bWVudCwgbV9zb3VyY2UuZ2V0KCkpOwotCi0gICAgYm9vbCBzaG91bGRSZXN0b3JlVHJhY2tzID0g
bV9zb3VyY2U7Ci0gICAgaWYgKHNob3VsZFJlc3RvcmVUcmFja3MpCi0gICAgICAgIHdlYktpdE1l
ZGlhU3JjUmVzdG9yZVRyYWNrcyhXRUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdldCgpKSwgV0VC
S0lUX01FRElBX1NSQyhzb3VyY2VFbGVtZW50KSk7CiAgICAgbV9zb3VyY2UgPSBzb3VyY2VFbGVt
ZW50OwotICAgIG1fZW9zTWFya2VkID0gZmFsc2U7Ci0KLSAgICBtX3BsYXliYWNrUGlwZWxpbmUt
PnNldFdlYktpdE1lZGlhU3JjKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpKTsKLSAg
ICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9zb3VyY2UuZ2V0KCksICJ2aWRlby1jaGFuZ2Vk
IiwgR19DQUxMQkFDSyh2aWRlb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFs
X2Nvbm5lY3Rfc3dhcHBlZChtX3NvdXJjZS5nZXQoKSwgImF1ZGlvLWNoYW5nZWQiLCBHX0NBTExC
QUNLKGF1ZGlvQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdF9z
d2FwcGVkKG1fc291cmNlLmdldCgpLCAidGV4dC1jaGFuZ2VkIiwgR19DQUxMQkFDSyh0ZXh0Q2hh
bmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgd2ViS2l0TWVkaWFTcmNTZXRNZWRpYVBsYXllclBy
aXZhdGUoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSksIHRoaXMpOwotCi0gICAgaWYg
KHNob3VsZFJlc3RvcmVUcmFja3MpIHsKLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChbcGxheWVy
ID0gbWFrZVdlYWtQdHIoKnRoaXMpXSB7Ci0gICAgICAgICAgICBpZiAoIXBsYXllcikKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB3ZWJLaXRNZWRpYVNyY1NpZ25hbFRyYWNr
cyhXRUJLSVRfTUVESUFfU1JDKHBsYXllci0+bV9zb3VyY2UuZ2V0KCkpKTsKLSAgICAgICAgICAg
IHBsYXllci0+bV9tZWRpYVNvdXJjZS0+bW9uaXRvclNvdXJjZUJ1ZmZlcnMoKTsKLQotICAgICAg
ICAgICAgYXV0byBzZWVrVGltZSA9IE1lZGlhVGltZTo6emVyb1RpbWUoKTsKLSAgICAgICAgICAg
IHdlYktpdE1lZGlhU3JjUHJlcGFyZUluaXRpYWxTZWVrKFdFQktJVF9NRURJQV9TUkMocGxheWVy
LT5tX3NvdXJjZS5nZXQoKSksIHBsYXllci0+bV9wbGF5YmFja1JhdGUsIHNlZWtUaW1lLCBNZWRp
YVRpbWU6OmludmFsaWRUaW1lKCkpOwotICAgICAgICAgICAgcGxheWVyLT5ub3RpZnlTZWVrTmVl
ZHNEYXRhRm9yVGltZShzZWVrVGltZSk7Ci0gICAgICAgIH0pOwotICAgIH0KKworICAgIGlmICht
X2hhc0FsbFRyYWNrcykKKyAgICAgICAgd2ViS2l0TWVkaWFTcmNFbWl0U3RyZWFtcyhXRUJLSVRf
TUVESUFfU1JDKG1fc291cmNlLmdldCgpKSwgbV90cmFja3MpOwogfQogCiB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dXBkYXRlU3RhdGVzKCkKIHsKLSAgICBpZiAoVU5MSUtF
TFkoIW1fcGlwZWxpbmUgfHwgbV9kaWRFcnJvck9jY3VyKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBvbGROZXR3b3JrU3RhdGUgPSBtX25ldHdvcmtT
dGF0ZTsKLSAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBvbGRSZWFkeVN0YXRlID0gbV9yZWFk
eVN0YXRlOwotICAgIEdzdFN0YXRlIHN0YXRlLCBwZW5kaW5nOwotICAgIGJvb2wgc3RhdGVSZWFs
bHlDaGFuZ2VkID0gZmFsc2U7Ci0KLSAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiBnZXRTdGF0ZVJl
c3VsdCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmc3RhdGUsICZw
ZW5kaW5nLCAyNTAgKiBHU1RfTlNFQ09ORCk7Ci0gICAgaWYgKHN0YXRlICE9IG1fY3VycmVudFN0
YXRlKSB7Ci0gICAgICAgIG1fb2xkU3RhdGUgPSBtX2N1cnJlbnRTdGF0ZTsKLSAgICAgICAgbV9j
dXJyZW50U3RhdGUgPSBzdGF0ZTsKLSAgICAgICAgc3RhdGVSZWFsbHlDaGFuZ2VkID0gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBib29sIHNob3VsZFVwZGF0ZVBsYXliYWNrU3RhdGUgPSBmYWxzZTsKLSAg
ICBzd2l0Y2ggKGdldFN0YXRlUmVzdWx0KSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1NV
Q0NFU1M6IHsKLSAgICAgICAgR1NUX0RFQlVHKCJTdGF0ZTogJXMsIHBlbmRpbmc6ICVzIiwgZ3N0
X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFt
ZShwZW5kaW5nKSk7Ci0KLSAgICAgICAgLy8gRG8gbm90aGluZyBpZiBvbiBFT1MgYW5kIHN0YXRl
IGNoYW5nZWQgdG8gUkVBRFkgdG8gYXZvaWQgcmVjcmVhdGluZyB0aGUgcGxheWVyCi0gICAgICAg
IC8vIG9uIEhUTUxNZWRpYUVsZW1lbnQgYW5kIHByb3Blcmx5IGdlbmVyYXRlIHRoZSB2aWRlbyAn
ZW5kZWQnIGV2ZW50LgotICAgICAgICBpZiAobV9pc0VuZFJlYWNoZWQgJiYgc3RhdGUgPT0gR1NU
X1NUQVRFX1JFQURZKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgbV9zaG91bGRSZXNl
dFBpcGVsaW5lID0gKHN0YXRlIDw9IEdTVF9TVEFURV9SRUFEWSk7Ci0gICAgICAgIGlmIChtX3No
b3VsZFJlc2V0UGlwZWxpbmUpCi0gICAgICAgICAgICBtX21lZGlhVGltZUR1cmF0aW9uID0gTWVk
aWFUaW1lOjp6ZXJvVGltZSgpOwotCi0gICAgICAgIC8vIFVwZGF0ZSByZWFkeSBhbmQgbmV0d29y
ayBzdGF0ZXMuCi0gICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICAgICAgY2FzZSBHU1RfU1RB
VEVfTlVMTDoKLSAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpSZWFkeVN0
YXRlOjpIYXZlTm90aGluZzsKLSAgICAgICAgICAgIEdTVF9ERUJVRygibV9yZWFkeVN0YXRlPSVz
IiwgZHVtcFJlYWR5U3RhdGUobV9yZWFkeVN0YXRlKSk7Ci0gICAgICAgICAgICBtX25ldHdvcmtT
dGF0ZSA9IE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGU6OkVtcHR5OwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgR1NUX1NUQVRFX1JFQURZOgotICAgICAgICAgICAgbV9yZWFkeVN0
YXRlID0gTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGU6OkhhdmVNZXRhZGF0YTsKLSAgICAgICAgICAg
IEdTVF9ERUJVRygibV9yZWFkeVN0YXRlPSVzIiwgZHVtcFJlYWR5U3RhdGUobV9yZWFkeVN0YXRl
KSk7Ci0gICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpOZXR3b3JrU3Rh
dGU6OkVtcHR5OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX1NUQVRFX1BB
VVNFRDoKLSAgICAgICAgY2FzZSBHU1RfU1RBVEVfUExBWUlORzoKLSAgICAgICAgICAgIGlmIChz
ZWVraW5nKCkpIHsKLSAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6
UmVhZHlTdGF0ZTo6SGF2ZU1ldGFkYXRhOwotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91
bGQgd2UgbWFuYWdlIE5ldHdvcmtTdGF0ZSB0b28/Ci0gICAgICAgICAgICAgICAgR1NUX0RFQlVH
KCJtX3JlYWR5U3RhdGU9JXMiLCBkdW1wUmVhZHlTdGF0ZShtX3JlYWR5U3RhdGUpKTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fcmVhZHlTdGF0ZSA8IE1lZGlh
UGxheWVyOjpSZWFkeVN0YXRlOjpIYXZlRnV0dXJlRGF0YSkKLSAgICAgICAgICAgICAgICAgICAg
bV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGU6OkhhdmVGdXR1cmVEYXRhOwot
ICAgICAgICAgICAgICAgIEdTVF9ERUJVRygibV9yZWFkeVN0YXRlPSVzIiwgZHVtcFJlYWR5U3Rh
dGUobV9yZWFkeVN0YXRlKSk7Ci0gICAgICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRp
YVBsYXllcjo6TmV0d29ya1N0YXRlOjpMb2FkaW5nOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAobV9lb3NNYXJrZWQgJiYgc3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpCi0gICAg
ICAgICAgICAgICAgbV9lb3NQZW5kaW5nID0gdHJ1ZTsKLQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU3luYyBzdGF0ZXMgd2hlcmUg
bmVlZGVkLgotICAgICAgICBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkgewotICAgICAg
ICAgICAgaWYgKCFtX2FyZVZvbHVtZUFuZE11dGVJbml0aWFsaXplZCkgewotICAgICAgICAgICAg
ICAgIG5vdGlmeVBsYXllck9mVm9sdW1lQ2hhbmdlKCk7Ci0gICAgICAgICAgICAgICAgbm90aWZ5
UGxheWVyT2ZNdXRlKCk7Ci0gICAgICAgICAgICAgICAgbV9hcmVWb2x1bWVBbmRNdXRlSW5pdGlh
bGl6ZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXNlZWtpbmco
KSAmJiAhbV9pc1BhdXNlZCAmJiBtX3BsYXliYWNrUmF0ZSkgewotICAgICAgICAgICAgICAgIEdT
VF9ERUJVRygiW0J1ZmZlcmluZ10gUmVzdGFydGluZyBwbGF5YmFjay4iKTsKLSAgICAgICAgICAg
ICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykgewotICAg
ICAgICAgICAgbV9pc1BhdXNlZCA9IGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoIW1fcGxheWJh
Y2tSYXRlKSB7Ci0gICAgICAgICAgICAgICAgR1NUX0RFQlVHKCJbQnVmZmVyaW5nXSBQYXVzaW5n
IHN0cmVhbSBmb3IgYnVmZmVyaW5nLiIpOwotICAgICAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5l
U3RhdGUoR1NUX1NUQVRFX1BBVVNFRCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgbV9pc1BhdXNlZCA9IHRydWU7Ci0KLSAgICAgICAgaWYgKG1fcmVxdWVzdGVk
U3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCAmJiBzdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7
Ci0gICAgICAgICAgICBzaG91bGRVcGRhdGVQbGF5YmFja1N0YXRlID0gdHJ1ZTsKLSAgICAgICAg
ICAgIEdTVF9ERUJVRygiUmVxdWVzdGVkIHN0YXRlIGNoYW5nZSB0byAlcyB3YXMgY29tcGxldGVk
IiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIEVtaXQgcGxheSBzdGF0ZSBjaGFuZ2Ugbm90aWZpY2F0aW9uIG9ubHkgd2hlbiBnb2lu
ZyB0byBQTEFZSU5HIHNvIHRoYXQKLSAgICAgICAgLy8gdGhlIG1lZGlhIGVsZW1lbnQgZ2V0cyBh
IGNoYW5jZSB0byBlbmFibGUgaXRzIHBhZ2Ugc2xlZXAgZGlzYWJsZXIuCi0gICAgICAgIC8vIEVt
aXR0aW5nIHRoaXMgbm90aWZpY2F0aW9uIGluIG1vcmUgY2FzZXMgdHJpZ2dlcnMgdW53YW50ZWQg
Y29kZSBwYXRocwotICAgICAgICAvLyBhbmQgdGVzdCB0aW1lb3V0cy4KLSAgICAgICAgaWYgKHN0
YXRlUmVhbGx5Q2hhbmdlZCAmJiAobV9vbGRTdGF0ZSAhPSBtX2N1cnJlbnRTdGF0ZSkgJiYgKG1f
b2xkU3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCAmJiBtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RB
VEVfUExBWUlORykpIHsKLSAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAi
UGxheWJhY2sgc3RhdGUgY2hhbmdlZCBmcm9tICVzIHRvICVzLiBOb3RpZnlpbmcgdGhlIG1lZGlh
IHBsYXllciBjbGllbnQiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShtX29sZFN0YXRlKSwg
Z3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9jdXJyZW50U3RhdGUpKTsKLSAgICAgICAgICAg
IHNob3VsZFVwZGF0ZVBsYXliYWNrU3RhdGUgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9BU1lOQzoKLSAgICAgICAg
R1NUX0RFQlVHKCJBc3luYzogU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdzdF9lbGVtZW50X3N0
YXRlX2dldF9uYW1lKHN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykp
OwotICAgICAgICAvLyBDaGFuZ2UgaW4gcHJvZ3Jlc3MuCi0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOgotICAgICAgICBHU1RfV0FSTklORygiRmFpbHVy
ZTogU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0
YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykpOwotICAgICAgICAvLyBD
aGFuZ2UgZmFpbGVkLgotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdF
X05PX1BSRVJPTEw6Ci0gICAgICAgIEdTVF9ERUJVRygiTm8gcHJlcm9sbDogU3RhdGU6ICVzLCBw
ZW5kaW5nOiAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSwgZ3N0X2VsZW1l
bnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykpOwotCi0gICAgICAgIC8vIExpdmUgcGlwZWxpbmVz
IGdvIGluIFBBVVNFRCB3aXRob3V0IHByZXJvbGxpbmcuCi0gICAgICAgIG1faXNMaXZlU3RyZWFt
ID0gdHJ1ZTsKLQotICAgICAgICBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1JFQURZKSB7Ci0gICAg
ICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZTo6SGF2ZU5vdGhp
bmc7Ci0gICAgICAgICAgICBHU1RfREVCVUcoIm1fcmVhZHlTdGF0ZT0lcyIsIGR1bXBSZWFkeVN0
YXRlKG1fcmVhZHlTdGF0ZSkpOwotICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09IEdTVF9TVEFU
RV9QQVVTRUQpIHsKLSAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpSZWFk
eVN0YXRlOjpIYXZlRW5vdWdoRGF0YTsKLSAgICAgICAgICAgIEdTVF9ERUJVRygibV9yZWFkeVN0
YXRlPSVzIiwgZHVtcFJlYWR5U3RhdGUobV9yZWFkeVN0YXRlKSk7Ci0gICAgICAgICAgICBtX2lz
UGF1c2VkID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUExB
WUlORykKLSAgICAgICAgICAgIG1faXNQYXVzZWQgPSBmYWxzZTsKLQotICAgICAgICBpZiAoIW1f
aXNQYXVzZWQgJiYgbV9wbGF5YmFja1JhdGUpCi0gICAgICAgICAgICBjaGFuZ2VQaXBlbGluZVN0
YXRlKEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlh
UGxheWVyOjpOZXR3b3JrU3RhdGU6OkxvYWRpbmc7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIEdTVF9ERUJVRygiRWxzZSA6ICVkIiwgZ2V0U3RhdGVSZXN1bHQpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBtX3JlcXVlc3RlZFN0YXRlID0gR1NUX1NUQVRFX1ZP
SURfUEVORElORzsKLQotICAgIGlmIChzaG91bGRVcGRhdGVQbGF5YmFja1N0YXRlKQotICAgICAg
ICBtX3BsYXllci0+cGxheWJhY2tTdGF0ZUNoYW5nZWQoKTsKLQotICAgIGlmIChtX25ldHdvcmtT
dGF0ZSAhPSBvbGROZXR3b3JrU3RhdGUpIHsKLSAgICAgICAgR1NUX0RFQlVHKCJOZXR3b3JrIFN0
YXRlIENoYW5nZWQgZnJvbSAldSB0byAldSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihvbGROZXR3
b3JrU3RhdGUpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9uZXR3b3JrU3RhdGUpKTsKLSAgICAg
ICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKLSAgICB9Ci0gICAgaWYgKG1fcmVh
ZHlTdGF0ZSAhPSBvbGRSZWFkeVN0YXRlKSB7Ci0gICAgICAgIEdTVF9ERUJVRygiUmVhZHkgU3Rh
dGUgQ2hhbmdlZCBmcm9tICV1IHRvICV1Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9sZFJlYWR5
U3RhdGUpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9yZWFkeVN0YXRlKSk7Ci0gICAgICAgIG1f
cGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOwotICAgIH0KLQotICAgIGlmIChnZXRTdGF0ZVJl
c3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MgJiYgc3RhdGUgPj0gR1NUX1NUQVRFX1BB
VVNFRCkgewotICAgICAgICB1cGRhdGVQbGF5YmFja1JhdGUoKTsKLSAgICAgICAgbWF5YmVGaW5p
c2hTZWVrKCk7CisgICAgYm9vbCBzaG91bGRCZVBsYXlpbmcgPSAhbV9pc1BhdXNlZCAmJiByZWFk
eVN0YXRlKCkgPj0gTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGU6OkhhdmVGdXR1cmVEYXRhOworICAg
IEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgInNob3VsZEJlUGxheWluZyA9ICVkLCBtX2lz
UGlwZWxpbmVQbGF5aW5nID0gJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHNob3VsZEJlUGxheWluZyks
IHN0YXRpY19jYXN0PGludD4obV9pc1BpcGVsaW5lUGxheWluZykpOworICAgIGlmIChzaG91bGRC
ZVBsYXlpbmcgJiYgIW1faXNQaXBlbGluZVBsYXlpbmcpIHsKKyAgICAgICAgaWYgKCFjaGFuZ2VQ
aXBlbGluZVN0YXRlKEdTVF9TVEFURV9QTEFZSU5HKSkKKyAgICAgICAgICAgIEdTVF9FUlJPUl9P
QkpFQ1QocGlwZWxpbmUoKSwgIlNldHRpbmcgdGhlIHBpcGVsaW5lIHRvIFBMQVlJTkcgZmFpbGVk
Iik7CisgICAgICAgIG1faXNQaXBlbGluZVBsYXlpbmcgPSB0cnVlOworICAgIH0gZWxzZSBpZiAo
IXNob3VsZEJlUGxheWluZyAmJiBtX2lzUGlwZWxpbmVQbGF5aW5nKSB7CisgICAgICAgIGlmICgh
Y2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUEFVU0VEKSkKKyAgICAgICAgICAgIEdTVF9F
UlJPUl9PQkpFQ1QocGlwZWxpbmUoKSwgIlNldHRpbmcgdGhlIHBpcGVsaW5lIHRvIFBBVVNFRCBm
YWlsZWQiKTsKKyAgICAgICAgbV9pc1BpcGVsaW5lUGxheWluZyA9IGZhbHNlOwogICAgIH0KIH0K
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjphc3luY1N0YXRlQ2hhbmdlRG9u
ZSgpCi17Ci0gICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8IG1fZGlkRXJyb3JPY2N1cikp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lzU2Vla2luZykKLSAgICAgICAgbWF5YmVG
aW5pc2hTZWVrKCk7Ci0gICAgZWxzZQotICAgICAgICB1cGRhdGVTdGF0ZXMoKTsKLX0KIAogYm9v
bCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmlzVGltZUJ1ZmZlcmVkKGNvbnN0IE1l
ZGlhVGltZSAmdGltZSkgY29uc3QKIHsKQEAgLTY5MCw3ICszMDYsNiBAQCB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dW5ibG9ja0R1cmF0aW9uQ2hhbmdlcygpCiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBpZiAobV9zaG91bGRSZXBvcnREdXJhdGlvbldoZW5V
bmJsb2NraW5nKSB7CiAgICAgICAgIG1fcGxheWVyLT5kdXJhdGlvbkNoYW5nZWQoKTsKLSAgICAg
ICAgbV9wbGF5YmFja1BpcGVsaW5lLT5ub3RpZnlEdXJhdGlvbkNoYW5nZWQoKTsKICAgICAgICAg
bV9zaG91bGRSZXBvcnREdXJhdGlvbldoZW5VbmJsb2NraW5nID0gZmFsc2U7CiAgICAgfQogCkBA
IC03MDksMTUgKzMyNCwxNCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6
ZHVyYXRpb25DaGFuZ2VkKCkKICAgICAvLyBBdm9pZCBlbWl0aW5nIGR1cmF0aW9uY2hhbmdlZCBp
biB0aGUgY2FzZSB3aGVyZSB0aGUgcHJldmlvdXMgZHVyYXRpb24gd2FzIDAgYmVjYXVzZSB0aGF0
IGNhc2UgaXMgYWxyZWFkeSBoYW5kbGVkCiAgICAgLy8gYnkgdGhlIEhUTUxNZWRpYUVsZW1lbnQu
CiAgICAgaWYgKG1fbWVkaWFUaW1lRHVyYXRpb24gIT0gcHJldmlvdXNEdXJhdGlvbiAmJiBtX21l
ZGlhVGltZUR1cmF0aW9uLmlzVmFsaWQoKSAmJiBwcmV2aW91c0R1cmF0aW9uLmlzVmFsaWQoKSkg
ewotICAgICAgICBpZiAoIW1fYXJlRHVyYXRpb25DaGFuZ2VzQmxvY2tlZCkgeworICAgICAgICBp
ZiAoIW1fYXJlRHVyYXRpb25DaGFuZ2VzQmxvY2tlZCkKICAgICAgICAgICAgIG1fcGxheWVyLT5k
dXJhdGlvbkNoYW5nZWQoKTsKLSAgICAgICAgICAgIG1fcGxheWJhY2tQaXBlbGluZS0+bm90aWZ5
RHVyYXRpb25DaGFuZ2VkKCk7Ci0gICAgICAgIH0gZWxzZQorICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBtX3Nob3VsZFJlcG9ydER1cmF0aW9uV2hlblVuYmxvY2tpbmcgPSB0cnVlOwogICAgIH0K
IH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnRyYWNrRGV0ZWN0ZWQo
QXBwZW5kUGlwZWxpbmUmIGFwcGVuZFBpcGVsaW5lLCBSZWZQdHI8V2ViQ29yZTo6VHJhY2tQcml2
YXRlQmFzZT4gbmV3VHJhY2ssIGJvb2wgZmlyc3RUcmFja0RldGVjdGVkKQordm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnRyYWNrRGV0ZWN0ZWQoQXBwZW5kUGlwZWxpbmUmIGFw
cGVuZFBpcGVsaW5lLCBSZWZQdHI8V2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZT4gbmV3VHJhY2sp
CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQoYXBwZW5kUGlwZWxp
bmUudHJhY2soKSA9PSBuZXdUcmFjayk7CkBAIC03MzcsMTEgKzM1MSwxMiBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dHJhY2tEZXRlY3RlZChBcHBlbmRQaXBlbGluZSYg
YXBwZW5kUGlwZWxpbgogICAgICAgICAgICAgR1NUX0RFQlVHKCJTZXR0aW5nIGluaXRpYWwgdmlk
ZW8gc2l6ZTogJWd4JWciLCBtX3ZpZGVvU2l6ZS53aWR0aCgpLCBtX3ZpZGVvU2l6ZS5oZWlnaHQo
KSk7CiAgICAgICAgIH0KICAgICB9Cit9CiAKLSAgICBpZiAoZmlyc3RUcmFja0RldGVjdGVkKQot
ICAgICAgICBtX3BsYXliYWNrUGlwZWxpbmUtPmF0dGFjaFRyYWNrKG1ha2VSZWYoYXBwZW5kUGlw
ZWxpbmUuc291cmNlQnVmZmVyUHJpdmF0ZSgpKSwgbmV3VHJhY2ssIGNhcHMpOwotICAgIGVsc2UK
LSAgICAgICAgbV9wbGF5YmFja1BpcGVsaW5lLT5yZWF0dGFjaFRyYWNrKG1ha2VSZWYoYXBwZW5k
UGlwZWxpbmUuc291cmNlQnVmZmVyUHJpdmF0ZSgpKSwgbmV3VHJhY2ssIGNhcHMpOwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnN0YXJ0U291cmNlKGNvbnN0IFZlY3RvcjxS
ZWZQdHI8TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcj4+JiB0cmFja3MpCit7CisgICAgbV90cmFj
a3MgPSB0cmFja3M7CisgICAgd2ViS2l0TWVkaWFTcmNFbWl0U3RyZWFtcyhXRUJLSVRfTUVESUFf
U1JDKG1fc291cmNlLmdldCgpKSwgdHJhY2tzKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0U6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNh
c2VJbnNlbnNpdGl2ZUhhc2g+JiB0eXBlcykKQEAgLTc3MywzNCArMzg4LDYgQEAgTWVkaWFQbGF5
ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnN1cHBvcnRz
VHlwZShjb25zdCBNZWQKICAgICByZXR1cm4gZmluYWxSZXN1bHQ7CiB9CiAKLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjptYXJrRW5kT2ZTdHJlYW0oTWVkaWFTb3VyY2VQcml2
YXRlOjpFbmRPZlN0cmVhbVN0YXR1cyBzdGF0dXMpCi17Ci0gICAgaWYgKHN0YXR1cyAhPSBNZWRp
YVNvdXJjZVByaXZhdGU6OkVvc05vRXJyb3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdTVF9E
RUJVRygiTWFya2luZyBlbmQgb2Ygc3RyZWFtIik7Ci0gICAgbV9lb3NNYXJrZWQgPSB0cnVlOwot
ICAgIHVwZGF0ZVN0YXRlcygpOwotfQotCi1NZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFOjpjdXJyZW50TWVkaWFUaW1lKCkgY29uc3QKLXsKLSAgICBNZWRpYVRpbWUgcG9z
aXRpb24gPSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmN1cnJlbnRNZWRpYVRpbWUoKTsK
LQotICAgIGlmIChtX2Vvc1BlbmRpbmcgJiYgcG9zaXRpb24gPj0gZHVyYXRpb25NZWRpYVRpbWUo
KSkgewotICAgICAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gTWVkaWFQbGF5ZXI6Ok5ldHdvcmtT
dGF0ZTo6TG9hZGVkKSB7Ci0gICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVy
OjpOZXR3b3JrU3RhdGU6OkxvYWRlZDsKLSAgICAgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3Rh
dGVDaGFuZ2VkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtX2Vvc1BlbmRpbmcgPSBmYWxzZTsK
LSAgICAgICAgbV9pc0VuZFJlYWNoZWQgPSB0cnVlOwotICAgICAgICBtX2NhY2hlZFBvc2l0aW9u
ID0gbV9tZWRpYVRpbWVEdXJhdGlvbjsKLSAgICAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7
Ci0gICAgfQotICAgIHJldHVybiBwb3NpdGlvbjsKLX0KLQogTWVkaWFUaW1lIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6bWF4TWVkaWFUaW1lU2Vla2FibGUoKSBjb25zdAogewogICAg
IGlmIChVTkxJS0VMWShtX2RpZEVycm9yT2NjdXIpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJNU0UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmgKaW5kZXggYzQ0YWM2ZTQwNmMyMzE5
ZTZkNWViYzZhZmY1Mjk1Yjc2M2FkOWExZi4uNWYyMmE1MWU5NWZhMmRhNDRlMzIwOGFiYjY2ZGMz
ZmVlZDRkN2U2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck1TRS5oCkBAIC0zMCwxMiArMzAsMTQgQEAKICNpbmNsdWRlICJNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJNZWRpYVNhbXBsZS5oIgogI2luY2x1
ZGUgIk1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lci5oIgotI2luY2x1ZGUgIldlYktpdE1lZGlh
U291cmNlR1N0cmVhbWVyLmgiCisKK3N0cnVjdCBXZWJLaXRNZWRpYVNyYzsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBBcHBlbmRQaXBlbGluZTsKLWNsYXNzIFBsYXliYWNrUGlwZWxp
bmU7CitjbGFzcyBUcmFja1F1ZXVlOworY2xhc3MgTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcjsK
IAogY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFIDogcHVibGljIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC01MSwx
MyArNTMsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCB1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0Zs
YWcoKSBvdmVycmlkZSB7IH07CiAKLSAgICBNZWRpYVRpbWUgY3VycmVudE1lZGlhVGltZSgpIGNv
bnN0IG92ZXJyaWRlOwotCisgICAgdm9pZCBwbGF5KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBwYXVz
ZSgpIG92ZXJyaWRlOwotICAgIGJvb2wgc2Vla2luZygpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZv
aWQgc2Vlayhjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbmZpZ3VyZVBs
YXlTaW5rKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjaGFuZ2VQaXBlbGluZVN0YXRlKEdzdFN0YXRl
KSBvdmVycmlkZTsKKyAgICBib29sIGRvU2Vlayhjb25zdCBNZWRpYVRpbWUmLCBmbG9hdCByYXRl
LCBHc3RTZWVrRmxhZ3MpIG92ZXJyaWRlOworCisgICAgdm9pZCB1cGRhdGVQaXBlbGluZVN0YXRl
KEdzdFN0YXRlKTsKIAogICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCkgb3ZlcnJpZGU7CiAgICAg
TWVkaWFUaW1lIGR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC02OCwxOSAr
NjksMTggQEAgcHVibGljOgogICAgIHZvaWQgc291cmNlU2V0dXAoR3N0RWxlbWVudCopIG92ZXJy
aWRlOwogCiAgICAgdm9pZCBzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlKTsK
LSAgICB2b2lkIHdhaXRGb3JTZWVrQ29tcGxldGVkKCk7Ci0gICAgdm9pZCBzZWVrQ29tcGxldGVk
KCk7CiAgICAgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50KiBtZWRpYVNvdXJjZVByaXZhdGVDbGll
bnQoKSB7IHJldHVybiBtX21lZGlhU291cmNlLmdldCgpOyB9CiAKLSAgICB2b2lkIG1hcmtFbmRP
ZlN0cmVhbShNZWRpYVNvdXJjZVByaXZhdGU6OkVuZE9mU3RyZWFtU3RhdHVzKTsKLQotICAgIHZv
aWQgdHJhY2tEZXRlY3RlZChBcHBlbmRQaXBlbGluZSYsIFJlZlB0cjxXZWJDb3JlOjpUcmFja1By
aXZhdGVCYXNlPiwgYm9vbCBmaXJzdFRyYWNrRGV0ZWN0ZWQpOwotICAgIHZvaWQgbm90aWZ5U2Vl
a05lZWRzRGF0YUZvclRpbWUoY29uc3QgTWVkaWFUaW1lJik7CisgICAgdm9pZCB0cmFja0RldGVj
dGVkKEFwcGVuZFBpcGVsaW5lJiwgUmVmUHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2U+KTsK
IAogICAgIHZvaWQgYmxvY2tEdXJhdGlvbkNoYW5nZXMoKTsKICAgICB2b2lkIHVuYmxvY2tEdXJh
dGlvbkNoYW5nZXMoKTsKIAotICAgIFBsYXliYWNrUGlwZWxpbmUqIHBsYXliYWNrUGlwZWxpbmUo
KSBjb25zdCB7IHJldHVybiBtX3BsYXliYWNrUGlwZWxpbmUuZ2V0KCk7IH0KKyAgICB2b2lkIGFz
eW5jU3RhdGVDaGFuZ2VEb25lKCkgb3ZlcnJpZGU7CisKKyAgICBib29sIGhhc0FsbFRyYWNrcygp
IGNvbnN0IHsgcmV0dXJuIG1faGFzQWxsVHJhY2tzOyB9CisgICAgdm9pZCBzdGFydFNvdXJjZShj
b25zdCBWZWN0b3I8UmVmUHRyPE1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXI+PiYgdHJhY2tzKTsK
KyAgICBXZWJLaXRNZWRpYVNyYyogd2ViS2l0TWVkaWFTcmMoKSB7IHJldHVybiByZWludGVycHJl
dF9jYXN0PFdlYktpdE1lZGlhU3JjKj4obV9zb3VyY2UuZ2V0KCkpOyB9CiAKICNpZiAhUkVMRUFT
RV9MT0dfRElTQUJMRUQKICAgICBXVEZMb2dDaGFubmVsJiBsb2dDaGFubmVsKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gV2ViQ29yZTo6TG9nTWVkaWFTb3VyY2U7IH0KQEAgLTkxLDI5ICs5MSwyNiBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3Ry
aW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+Jik7CiAgICAgc3RhdGljIE1lZGlhUGxheWVy
OjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFt
ZXRlcnMmKTsKIAotICAgIC8vIEZJWE1FOiBSZWR1Y2UgY29kZSBkdXBsaWNhdGlvbi4KICAgICB2
b2lkIHVwZGF0ZVN0YXRlcygpIG92ZXJyaWRlOwogCi0gICAgYm9vbCBkb1NlZWsoY29uc3QgTWVk
aWFUaW1lJiwgZmxvYXQsIEdzdFNlZWtGbGFncykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtYXliZUZp
bmlzaFNlZWsoKTsKLQotICAgIHZvaWQgYXN5bmNTdGF0ZUNoYW5nZURvbmUoKSBvdmVycmlkZTsK
LQogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdmlkZW9QbGF5YmFja1F1YWxpdHlNZXRyaWNzLgog
ICAgIGJvb2wgaXNUaW1lQnVmZmVyZWQoY29uc3QgTWVkaWFUaW1lJikgY29uc3Q7CiAKICAgICBi
b29sIGlzTWVkaWFTb3VyY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAg
ICBib29sIG1fZW9zTWFya2VkID0gZmFsc2U7Ci0gICAgbXV0YWJsZSBib29sIG1fZW9zUGVuZGlu
ZyA9IGZhbHNlOwotICAgIGJvb2wgbV9nc3RTZWVrQ29tcGxldGVkID0gdHJ1ZTsKKyAgICB2b2lk
IHByb3BhZ2F0ZVJlYWR5U3RhdGVUb1BsYXllcigpOworCiAgICAgUmVmUHRyPE1lZGlhU291cmNl
UHJpdmF0ZUNsaWVudD4gbV9tZWRpYVNvdXJjZTsKICAgICBSZWZQdHI8TWVkaWFTb3VyY2VQcml2
YXRlR1N0cmVhbWVyPiBtX21lZGlhU291cmNlUHJpdmF0ZTsKICAgICBNZWRpYVRpbWUgbV9tZWRp
YVRpbWVEdXJhdGlvbjsKLSAgICBib29sIG1fbXNlU2Vla0NvbXBsZXRlZCA9IHRydWU7CiAgICAg
Ym9vbCBtX2FyZUR1cmF0aW9uQ2hhbmdlc0Jsb2NrZWQgPSBmYWxzZTsKICAgICBib29sIG1fc2hv
dWxkUmVwb3J0RHVyYXRpb25XaGVuVW5ibG9ja2luZyA9IGZhbHNlOwotICAgIFJlZlB0cjxQbGF5
YmFja1BpcGVsaW5lPiBtX3BsYXliYWNrUGlwZWxpbmU7CisgICAgYm9vbCBtX2lzUGlwZWxpbmVQ
bGF5aW5nID0gdHJ1ZTsKKyAgICBib29sIG1faGFzQWxsVHJhY2tzID0gZmFsc2U7CisgICAgVmVj
dG9yPFJlZlB0cjxNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyPj4gbV90cmFja3M7CisKKyAgICBi
b29sIG1faXNXYWl0aW5nRm9yUHJlcm9sbCA9IHRydWU7CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5
U3RhdGUgbV9tZWRpYVNvdXJjZVJlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZTo6
SGF2ZU5vdGhpbmc7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNl
UHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvbXNlL01lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggZjg5MGI3
MTNhMzBhYTg4MWM2YWZkMGVlNTNlMDMxZTY0ZjM0OGJjMS4uN2QwZTg5ZDQ3Y2MzOTIxODg3ZjFh
OTU1ZmNiMTJiN2UyZjNiNzAxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFT
b3VyY2VQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtNDEsOCArNDEsOCBAQAogI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCIKICNpbmNs
dWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaCIKKyNpbmNsdWRlICJNZWRpYVNv
dXJjZVRyYWNrR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNs
dWRlICJQbGF5YmFja1BpcGVsaW5lLmgiCiAjaW5jbHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUdT
dHJlYW1lci5oIgogI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKICNpbmNsdWRlICJXZWJLaXRNZWRp
YVNvdXJjZUdTdHJlYW1lci5oIgpAQCAtNzksMTAgKzc5LDE1IEBAIE1lZGlhU291cmNlUHJpdmF0
ZUdTdHJlYW1lcjo6fk1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lcigpCiBNZWRpYVNvdXJjZVBy
aXZhdGVHU3RyZWFtZXI6OkFkZFN0YXR1cyBNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXI6OmFk
ZFNvdXJjZUJ1ZmZlcihjb25zdCBDb250ZW50VHlwZSYgY29udGVudFR5cGUsIGJvb2wsIFJlZlB0
cjxTb3VyY2VCdWZmZXJQcml2YXRlPiYgc291cmNlQnVmZmVyUHJpdmF0ZSkKIHsKICAgICBERUJV
R19MT0coTE9HSURFTlRJRklFUiwgY29udGVudFR5cGUpOworCisgICAgLy8gT25jZSBldmVyeSBT
b3VyY2VCdWZmZXIgaGFzIGhhZCBhbiBpbml0aWFsaXphdGlvbiBzZWdtZW50IGFwcGVuZGVkIHBs
YXliYWNrIHN0YXJ0cyBhbmQgaXQncyB0b28gbGF0ZSB0byBhZGQgbmV3IFNvdXJjZUJ1ZmZlcnMu
CisgICAgaWYgKG1fcGxheWVyUHJpdmF0ZS5oYXNBbGxUcmFja3MoKSkKKyAgICAgICAgcmV0dXJu
IE1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lcjo6QWRkU3RhdHVzOjpSZWFjaGVkSWRMaW1pdDsK
KwogICAgIHNvdXJjZUJ1ZmZlclByaXZhdGUgPSBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVy
OjpjcmVhdGUodGhpcywgY29udGVudFR5cGUsIG1fcGxheWVyUHJpdmF0ZSk7CiAgICAgUmVmUHRy
PFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+IHNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFt
ZXIgPSBzdGF0aWNfY2FzdDxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyKj4oc291cmNlQnVm
ZmVyUHJpdmF0ZS5nZXQoKSk7CiAgICAgbV9zb3VyY2VCdWZmZXJzLmFkZChzb3VyY2VCdWZmZXJQ
cml2YXRlR1N0cmVhbWVyKTsKLSAgICByZXR1cm4gbV9wbGF5ZXJQcml2YXRlLnBsYXliYWNrUGlw
ZWxpbmUoKS0+YWRkU291cmNlQnVmZmVyKHNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIpOwor
ICAgIHJldHVybiBNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXI6OkFkZFN0YXR1czo6T2s7CiB9
CiAKIHZvaWQgTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyOjpyZW1vdmVTb3VyY2VCdWZmZXIo
U291cmNlQnVmZmVyUHJpdmF0ZSogc291cmNlQnVmZmVyUHJpdmF0ZSkKQEAgLTEwNywxNiArMTEy
LDE1IEBAIHZvaWQgTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyOjpkdXJhdGlvbkNoYW5nZWQo
Y29uc3QgTWVkaWFUaW1lJikKICAgICBtX3BsYXllclByaXZhdGUuZHVyYXRpb25DaGFuZ2VkKCk7
CiB9CiAKLXZvaWQgTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyOjptYXJrRW5kT2ZTdHJlYW0o
RW5kT2ZTdHJlYW1TdGF0dXMgc3RhdHVzKQordm9pZCBNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFt
ZXI6Om1hcmtFbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1cykKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotICAgIG1fcGxheWVyUHJpdmF0ZS5tYXJrRW5kT2ZTdHJlYW0oc3RhdHVz
KTsKICAgICBtX2lzRW5kZWQgPSB0cnVlOwogfQogCiB2b2lkIE1lZGlhU291cmNlUHJpdmF0ZUdT
dHJlYW1lcjo6dW5tYXJrRW5kT2ZTdHJlYW0oKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBtX2lzRW5kZWQgPSBmYWxzZTsKIH0KIApA
QCAtMTMwLDE0ICsxMzQsMTIgQEAgdm9pZCBNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXI6OnNl
dFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgc3RhdGUpCiAgICAgbV9wbGF5ZXJQ
cml2YXRlLnNldFJlYWR5U3RhdGUoc3RhdGUpOwogfQogCi12b2lkIE1lZGlhU291cmNlUHJpdmF0
ZUdTdHJlYW1lcjo6d2FpdEZvclNlZWtDb21wbGV0ZWQoKQotewotICAgIG1fcGxheWVyUHJpdmF0
ZS53YWl0Rm9yU2Vla0NvbXBsZXRlZCgpOwotfQotCiB2b2lkIE1lZGlhU291cmNlUHJpdmF0ZUdT
dHJlYW1lcjo6c2Vla0NvbXBsZXRlZCgpCiB7Ci0gICAgbV9wbGF5ZXJQcml2YXRlLnNlZWtDb21w
bGV0ZWQoKTsKKyAgICAvLyBUaGlzIGNhbGwganVzdCBpbmZvcm1zIHVzIHRoYXQgdGhlIHNlZWsg
aGFzIGJlZW4gY29tcGxldGVkIGFzIGZhciBhcyBNZWRpYVNvdXJjZSBpcyBjb25jZXJuZWQ6IHRo
YXQgaXMsCisgICAgLy8gdGhlIHNhbXBsZXMgZm9yIGBjdXJyZW50VGltZWAgaGF2ZSBiZWVuIGZl
ZC4gVGhpcyBkb2Vzbid0IG1lYW4gdGhlIHNlZWsgaXMgY29tcGxldGUgZm9yIHRoZSBwbGF5ZXIs
IGFzCisgICAgLy8gdGhleSBzdGlsbCBoYXZlIHRvIGJlIGRlY29kZWQgYW5kIHByZXJvbGwgaGFz
IHRvIG9jY3VyIGJlZm9yZSB3ZSBsZXQgdGhlICJzZWVrZWQiIGV2ZW50IGhhcHBlbi4KKyAgICAv
LyBTZWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjphc3luY1N0YXRlQ2hhbmdlRG9u
ZSgpLgogfQogCiBNZWRpYVRpbWUgTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyOjpkdXJhdGlv
bigpIGNvbnN0CkBAIC0xNTgsNiArMTYwLDI5IEBAIHZvaWQgTWVkaWFTb3VyY2VQcml2YXRlR1N0
cmVhbWVyOjpzb3VyY2VCdWZmZXJQcml2YXRlRGlkQ2hhbmdlQWN0aXZlU3RhdGUoU291cmNlCiAg
ICAgICAgIG1fYWN0aXZlU291cmNlQnVmZmVycy5hZGQoc291cmNlQnVmZmVyUHJpdmF0ZSk7CiB9
CiAKK3ZvaWQgTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyOjpzdGFydFBsYXliYWNrSWZIYXNB
bGxUcmFja3MoKQoreworICAgIGlmIChtX2hhc0FsbFRyYWNrcykgeworICAgICAgICAvLyBBbHJl
YWR5IHN0YXJ0ZWQsIG5vdGhpbmcgdG8gZG8uCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBmb3IgKGF1dG8mIHNvdXJjZUJ1ZmZlciA6IG1fc291cmNlQnVmZmVycykgeworICAgICAgICBp
ZiAoIXNvdXJjZUJ1ZmZlci0+aGFzUmVjZWl2ZWRJbml0aWFsaXphdGlvblNlZ21lbnQoKSkgewor
ICAgICAgICAgICAgR1NUX0RFQlVHKCJNZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXIoJXApIC0g
VGhlcmUgYXJlIHN0aWxsIFNvdXJjZUJ1ZmZlcnMgd2l0aG91dCBhbiBpbml0aWFsaXphdGlvbiBz
ZWdtZW50LCBub3Qgc3RhcnRpbmcgc291cmNlIHlldC4iLCB0aGlzKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEdTVF9ERUJVRygiTWVkaWFTb3VyY2VQcml2
YXRlR1N0cmVhbWVyKCVwKSAtIEFsbCBTb3VyY2VCdWZmZXJzIGhhdmUgYW4gaW5pdGlhbGl6YXRp
b24gc2VnbWVudCwgc3RhcnRpbmcgc291cmNlLiIsIHRoaXMpOworICAgIG1faGFzQWxsVHJhY2tz
ID0gdHJ1ZTsKKworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcj4+
IHRyYWNrczsKKyAgICBmb3IgKGF1dG8mIHNvdXJjZUJ1ZmZlciA6IG1fc291cmNlQnVmZmVycykK
KyAgICAgICAgdHJhY2tzLmFwcGVuZFJhbmdlKHNvdXJjZUJ1ZmZlci0+dHJhY2tzKCkuYmVnaW4o
KSwgc291cmNlQnVmZmVyLT50cmFja3MoKS5lbmQoKSk7CisgICAgbV9wbGF5ZXJQcml2YXRlLnN0
YXJ0U291cmNlKHRyYWNrcyk7Cit9CisKIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5n
ZXM+IE1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lcjo6YnVmZmVyZWQoKQogewogICAgIHJldHVy
biBtX21lZGlhU291cmNlLT5idWZmZXJlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFt
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVk
aWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggNmVjYjFkOTgwMTEyNjFiMGJmNWIzNWMz
NjMxMzIzOGNlMWFmNmI1Ni4uYmVlYzMxMGM1ZjBkYTFhNmQ0NmNmNzhmNGYyNTEyZTA5M2VkNTkx
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L21zZS9NZWRpYVNvdXJjZVByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1l
ci5oCkBAIC00MSw4ICs0MSw2IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRl
IDx3dGYvTG9nZ2VySGVscGVyLmg+CiAKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRNZWRpYVNyYyBX
ZWJLaXRNZWRpYVNyYzsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTb3VyY2VCdWZm
ZXJQcml2YXRlR1N0cmVhbWVyOwpAQCAtNjksMTMgKzY3LDE0IEBAIHB1YmxpYzoKICAgICBNZWRp
YVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlKSBvdmVycmlkZTsKIAotICAg
IHZvaWQgd2FpdEZvclNlZWtDb21wbGV0ZWQoKSBvdmVycmlkZTsKKyAgICB2b2lkIHdhaXRGb3JT
ZWVrQ29tcGxldGVkKCkgb3ZlcnJpZGUgeyB9CiAgICAgdm9pZCBzZWVrQ29tcGxldGVkKCkgb3Zl
cnJpZGU7CiAKICAgICBNZWRpYVRpbWUgZHVyYXRpb24oKSBjb25zdDsKICAgICBNZWRpYVRpbWUg
Y3VycmVudE1lZGlhVGltZSgpIGNvbnN0OwogCiAgICAgdm9pZCBzb3VyY2VCdWZmZXJQcml2YXRl
RGlkQ2hhbmdlQWN0aXZlU3RhdGUoU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lciosIGJvb2wp
OworICAgIHZvaWQgc3RhcnRQbGF5YmFja0lmSGFzQWxsVHJhY2tzKCk7CiAKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBidWZmZXJlZCgpOwogCkBAIC05Niw2ICs5NSw3
IEBAIHByaXZhdGU6CiAgICAgUmVmPE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudD4gbV9tZWRpYVNv
dXJjZTsKICAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UmIG1fcGxheWVyUHJpdmF0
ZTsKICAgICBib29sIG1faXNFbmRlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc0FsbFRyYWNr
cyB7IGZhbHNlIH07CiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECiAgICAgUmVmPGNvbnN0IExv
Z2dlcj4gbV9sb2dnZXI7CiAgICAgY29uc3Qgdm9pZCogbV9sb2dJZGVudGlmaWVyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRp
YVNvdXJjZVRyYWNrR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYjRjNWU2NzI2NmJlZjI2YTE3YjljYzVlYzlhYjJiYTBlMzM4ODBmMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVk
aWFTb3VyY2VUcmFja0dTdHJlYW1lci5jcHAKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCwgMjAyMSBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0
IChDKSAyMDIwLCAyMDIxIElnYWxpYSwgUy5MCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1l
ZGlhU291cmNlVHJhY2tHU3RyZWFtZXIuaCIKKworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYm
IFVTRShHU1RSRUFNRVIpCisKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X21zZV9k
ZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfbXNlX2RlYnVnCisKK3VzaW5n
IFdURjo6RGF0YU11dGV4OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK01lZGlhU291cmNlVHJh
Y2tHU3RyZWFtZXI6Ok1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXIoVHJhY2tQcml2YXRlQmFzZUdT
dHJlYW1lcjo6VHJhY2tUeXBlIHR5cGUsIEF0b21TdHJpbmcgdHJhY2tJZCwgR1JlZlB0cjxHc3RD
YXBzPiYmIGluaXRpYWxDYXBzKQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX3RyYWNrSWQo
dHJhY2tJZCkKKyAgICAsIG1faW5pdGlhbENhcHMoV1RGTW92ZShpbml0aWFsQ2FwcykpCisgICAg
LCBtX3F1ZXVlRGF0YU11dGV4KHRyYWNrSWQpCit7IH0KKworTWVkaWFTb3VyY2VUcmFja0dTdHJl
YW1lcjo6fk1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXIoKQoreworICAgIEFTU0VSVChtX2lzUmVt
b3ZlZCk7Cit9CisKK1JlZjxNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyPiBNZWRpYVNvdXJjZVRy
YWNrR1N0cmVhbWVyOjpjcmVhdGUoVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBl
IHR5cGUsIEF0b21TdHJpbmcgdHJhY2tJZCwgR1JlZlB0cjxHc3RDYXBzPiYmIGluaXRpYWxDYXBz
KQoreworICAgIHJldHVybiBtYWtlUmVmKCpuZXcgTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcih0
eXBlLCB0cmFja0lkLCBXVEZNb3ZlKGluaXRpYWxDYXBzKSkpOworfQorCitib29sIE1lZGlhU291
cmNlVHJhY2tHU3RyZWFtZXI6OmlzUmVhZHlGb3JNb3JlU2FtcGxlcygpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBXVEY6OkRhdGFNdXRleDxUcmFja1F1ZXVlPjo6TG9ja2Vk
V3JhcHBlciBxdWV1ZShtX3F1ZXVlRGF0YU11dGV4KTsKKyAgICByZXR1cm4gIXF1ZXVlLT5pc0Z1
bGwoKTsKK30KKwordm9pZCBNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyOjpub3RpZnlXaGVuUmVh
ZHlGb3JNb3JlU2FtcGxlcyhUcmFja1F1ZXVlOjpMb3dMZXZlbEhhbmRsZXImJiBoYW5kbGVyKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgV1RGOjpEYXRhTXV0ZXg8VHJhY2tR
dWV1ZT46OkxvY2tlZFdyYXBwZXIgcXVldWUobV9xdWV1ZURhdGFNdXRleCk7CisgICAgcXVldWUt
Pm5vdGlmeVdoZW5Mb3dMZXZlbChXVEZNb3ZlKGhhbmRsZXIpKTsKK30KKwordm9pZCBNZWRpYVNv
dXJjZVRyYWNrR1N0cmVhbWVyOjplbnF1ZXVlT2JqZWN0KEdSZWZQdHI8R3N0TWluaU9iamVjdD4m
JiBvYmplY3QpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBXVEY6OkRhdGFN
dXRleDxUcmFja1F1ZXVlPjo6TG9ja2VkV3JhcHBlciBxdWV1ZShtX3F1ZXVlRGF0YU11dGV4KTsK
KyAgICBxdWV1ZS0+ZW5xdWV1ZU9iamVjdChXVEZNb3ZlKG9iamVjdCkpOworfQorCit2b2lkIE1l
ZGlhU291cmNlVHJhY2tHU3RyZWFtZXI6OmNsZWFyUXVldWUoKQoreworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgV1RGOjpEYXRhTXV0ZXg8VHJhY2tRdWV1ZT46OkxvY2tlZFdyYXBw
ZXIgcXVldWUobV9xdWV1ZURhdGFNdXRleCk7CisgICAgcXVldWUtPmNsZWFyKCk7Cit9CisKK3Zv
aWQgTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcjo6cmVtb3ZlKCkKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIG1faXNSZW1vdmVkID0gdHJ1ZTsKK30KKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvTWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNmFlNDFjNGFhMWQxMTMzMTAwZDNmODg5ODRkMWQxYzk0NjYwY2I0OAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2Uv
TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lci5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAsIDIwMjEgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMCwgMjAyMSBJZ2FsaWEsIFMuTAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElB
X1NPVVJDRSkgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIlRyYWNrUHJpdmF0ZUJhc2VH
U3RyZWFtZXIuaCIKKyNpbmNsdWRlICJUcmFja1F1ZXVlLmgiCisjaW5jbHVkZSA8d3RmL0RhdGFN
dXRleC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1lZGlhU291cmNlVHJhY2tH
U3RyZWFtZXIgZmluYWw6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNZWRpYVNvdXJjZVRy
YWNrR1N0cmVhbWVyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxNZWRpYVNvdXJjZVRyYWNr
R1N0cmVhbWVyPiBjcmVhdGUoVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlLCBB
dG9tU3RyaW5nIHRyYWNrSWQsIEdSZWZQdHI8R3N0Q2Fwcz4mJiBpbml0aWFsQ2Fwcyk7CisgICAg
dmlydHVhbCB+TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcigpOworCisgICAgVHJhY2tQcml2YXRl
QmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0K
KyAgICBBdG9tU3RyaW5nIHRyYWNrSWQoKSBjb25zdCB7IHJldHVybiBtX3RyYWNrSWQ7IH0KKyAg
ICBHUmVmUHRyPEdzdENhcHM+JiBpbml0aWFsQ2FwcygpIHsgcmV0dXJuIG1faW5pdGlhbENhcHM7
IH0KKyAgICBXVEY6OkRhdGFNdXRleDxUcmFja1F1ZXVlPiYgcXVldWVEYXRhTXV0ZXgoKSB7IHJl
dHVybiBtX3F1ZXVlRGF0YU11dGV4OyB9CisKKyAgICBib29sIGlzUmVhZHlGb3JNb3JlU2FtcGxl
cygpOworCisgICAgdm9pZCBub3RpZnlXaGVuUmVhZHlGb3JNb3JlU2FtcGxlcyhUcmFja1F1ZXVl
OjpMb3dMZXZlbEhhbmRsZXImJik7CisKKyAgICB2b2lkIGVucXVldWVPYmplY3QoR1JlZlB0cjxH
c3RNaW5pT2JqZWN0PiYmKTsKKworICAgIC8vIFRoaXMgbWV0aG9kIGlzIHByb3ZpZGVkIHRvIGNs
ZWFyIHRoZSBUcmFja1F1ZXVlIGluIGNhc2VzIHdoZXJlIHRoZSBzdHJlYW0gaGFzbid0IGJlZW4g
c3RhcnRlZCAoZS5nLiBiZWNhdXNlCisgICAgLy8gYW5vdGhlciBTb3VyY2VCdWZmZXIgaGFzbid0
IHJlY2VpdmVkIHRoZSBuZWNlc3NhcnkgaW5pdGFsaXphdGlvbiBzZWdtZW50IGZvciBwbGF5YmFj
aykuCisgICAgLy8gT3RoZXJ3aXNlLCB3ZWJLaXRNZWRpYVNyY0ZsdXNoKCkgc2hvdWxkIGJlIHVz
ZWQgaW5zdGVhZCwgd2hpY2ggd2lsbCBhbHNvIGRvIGEgR1N0cmVhbWVyIHBpcGVsaW5lIGZsdXNo
IHdoZXJlCisgICAgLy8gbmVjZXNzYXJ5LgorICAgIHZvaWQgY2xlYXJRdWV1ZSgpOworCisgICAg
dm9pZCByZW1vdmUoKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBNZWRpYVNvdXJjZVRyYWNr
R1N0cmVhbWVyKFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZSwgQXRvbVN0cmlu
ZyB0cmFja0lkLCBHUmVmUHRyPEdzdENhcHM+JiYgaW5pdGlhbENhcHMpOworCisgICAgVHJhY2tQ
cml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlIG1fdHlwZTsKKyAgICBBdG9tU3RyaW5nIG1f
dHJhY2tJZDsKKyAgICBHUmVmUHRyPEdzdENhcHM+IG1faW5pdGlhbENhcHM7CisgICAgV1RGOjpE
YXRhTXV0ZXg8VHJhY2tRdWV1ZT4gbV9xdWV1ZURhdGFNdXRleDsKKworICAgIGJvb2wgbV9pc1Jl
bW92ZWQgeyBmYWxzZSB9OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvUGxheWJhY2tQaXBlbGluZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFj
a1BpcGVsaW5lLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwYmM5MTU2MDVhMTc0
YmFkODRmYjI0ZDU2OGFlYmIwZTI5YWM2MGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTAotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFZJ
REVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoTUVESUFfU09VUkNFKQotCi0vLyBQbGF5
YmFja1BpcGVsaW5lIGlzIChzb3J0IG9mKSBhIGZyaWVuZCBjbGFzcyBvZiBXZWJLaXRNZWRpYVNv
dXJjZUdTdHJlYW1lci4KLQotI2luY2x1ZGUgIldlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmgi
Ci0jaW5jbHVkZSAiV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXJQcml2YXRlLmgiCi0KLSNpbmNs
dWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgotI2luY2x1ZGUgPHd0
Zi9nbGliL0dSZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci10ZW1wbGF0ZTw+IEdSZWZQdHI8
V2ViS2l0TWVkaWFTcmM+IGFkb3B0R1JlZihXZWJLaXRNZWRpYVNyYyopOwotdGVtcGxhdGU8PiBX
ZWJLaXRNZWRpYVNyYyogcmVmR1B0cjxXZWJLaXRNZWRpYVNyYz4oV2ViS2l0TWVkaWFTcmMqKTsK
LXRlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8V2ViS2l0TWVkaWFTcmM+KFdlYktpdE1lZGlhU3Jj
Kik7Ci19OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENvbnRlbnRUeXBlOwotY2xh
c3MgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjsKLWNsYXNzIE1lZGlhU291cmNlUHJpdmF0
ZUdTdHJlYW1lcjsKLQotY2xhc3MgUGxheWJhY2tQaXBlbGluZTogcHVibGljIFJlZkNvdW50ZWQ8
UGxheWJhY2tQaXBlbGluZT4gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8UGxheWJhY2tQaXBl
bGluZT4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBsYXli
YWNrUGlwZWxpbmUoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+UGxheWJhY2tQaXBlbGluZSgp
ID0gZGVmYXVsdDsKLQotICAgIHZvaWQgc2V0V2ViS2l0TWVkaWFTcmMoV2ViS2l0TWVkaWFTcmMq
KTsKLSAgICBXZWJLaXRNZWRpYVNyYyogd2ViS2l0TWVkaWFTcmMoKTsKLQotICAgIE1lZGlhU291
cmNlUHJpdmF0ZTo6QWRkU3RhdHVzIGFkZFNvdXJjZUJ1ZmZlcihSZWZQdHI8U291cmNlQnVmZmVy
UHJpdmF0ZUdTdHJlYW1lcj4pOwotICAgIHZvaWQgcmVtb3ZlU291cmNlQnVmZmVyKFJlZlB0cjxT
b3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyPik7Ci0gICAgdm9pZCBhdHRhY2hUcmFjayhSZWZQ
dHI8U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4sIFJlZlB0cjxUcmFja1ByaXZhdGVCYXNl
PiwgR3N0Q2FwcyopOwotICAgIHZvaWQgcmVhdHRhY2hUcmFjayhSZWZQdHI8U291cmNlQnVmZmVy
UHJpdmF0ZUdTdHJlYW1lcj4sIFJlZlB0cjxUcmFja1ByaXZhdGVCYXNlPiwgR3N0Q2FwcyopOwot
ICAgIHZvaWQgbm90aWZ5RHVyYXRpb25DaGFuZ2VkKCk7Ci0KLSAgICAvLyBGcm9tIE1lZGlhU291
cmNlUHJpdmF0ZUdTdHJlYW1lci4KLSAgICB2b2lkIG1hcmtFbmRPZlN0cmVhbShNZWRpYVNvdXJj
ZVByaXZhdGU6OkVuZE9mU3RyZWFtU3RhdHVzKTsKLQotICAgIC8vIEZyb20gU291cmNlQnVmZmVy
UHJpdmF0ZUdTdHJlYW1lci4KLSAgICB2b2lkIGZsdXNoKEF0b21TdHJpbmcpOwotICAgIHZvaWQg
ZW5xdWV1ZVNhbXBsZShSZWY8TWVkaWFTYW1wbGU+JiYpOwotICAgIHZvaWQgYWxsU2FtcGxlc0lu
VHJhY2tFbnF1ZXVlZChjb25zdCBBdG9tU3RyaW5nJik7Ci0KLSAgICBHc3RFbGVtZW50KiBwaXBl
bGluZSgpOwotcHJpdmF0ZToKLSAgICBQbGF5YmFja1BpcGVsaW5lKCkgPSBkZWZhdWx0OwotICAg
IEdSZWZQdHI8V2ViS2l0TWVkaWFTcmM+IG1fd2ViS2l0TWVkaWFTcmM7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlLgotCi0jZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvU291cmNlQnVm
ZmVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvbXNlL1NvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IGIx
NWZjNDkxZTRkNDQ1ZTM4MDEyZWI1NmRmNjkzNmU2NTc2MjIyZDIuLjM0MjJlYzcyMjRjNWY2ZjFm
ZGJiODY4MTBmNWViM2FhNjE4Y2NlOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9T
b3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMzgsMTUgKzM4LDIyIEBACiAjaWYg
RU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgVVNFKEdTVFJFQU1FUikKIAogI2luY2x1ZGUgIkFwcGVu
ZFBpcGVsaW5lLmgiCisjaW5jbHVkZSAiQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKICNp
bmNsdWRlICJDb250ZW50VHlwZS5oIgogI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgorI2lu
Y2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGUuaCIKKyNpbmNsdWRlICJJbmJhbmRUZXh0VHJh
Y2tQcml2YXRlR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyTVNFLmgiCiAjaW5jbHVkZSAiTWVkaWFTYW1wbGUuaCIKICNpbmNsdWRlICJNZWRpYVNvdXJj
ZVByaXZhdGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVy
LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF5YmFja1BpcGVs
aW5lLmgiCisjaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKICNpbmNsdWRl
ICJXZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgogCitHU1RfREVCVUdfQ0FURUdPUllfRVhU
RVJOKHdlYmtpdF9tc2VfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X21z
ZV9kZWJ1ZworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlZjxTb3VyY2VCdWZmZXJQcml2YXRl
R1N0cmVhbWVyPiBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUoTWVkaWFTb3Vy
Y2VQcml2YXRlR1N0cmVhbWVyKiBtZWRpYVNvdXJjZSwgY29uc3QgQ29udGVudFR5cGUmIGNvbnRl
bnRUeXBlLCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UmIHBsYXllclByaXZhdGUpCkBA
IC0xMDUsMTAgKzExMiwxMCBAQCB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OnJl
bW92ZWRGcm9tTWVkaWFTb3VyY2UoKQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
Y2xlYXJUcmFja0J1ZmZlcnMoKTsKICAgICBtX21lZGlhU291cmNlLT5yZW1vdmVTb3VyY2VCdWZm
ZXIodGhpcyk7Ci0gICAgbV9wbGF5ZXJQcml2YXRlLnBsYXliYWNrUGlwZWxpbmUoKS0+cmVtb3Zl
U291cmNlQnVmZmVyKHRoaXMpOwotICAgIC8vIEFmdGVyIHRoaXMgb25seSBTb3VyY2VCdWZmZXIg
c2hvdWxkIGhvbGQgYSByZWZlcmVuY2UgdG8gdXMsIHdoaWNoIHdpbGwgYmUgZGVzdHJveWVkIGV2
ZW50dWFsbHkgKHdoZW4gSlMKLSAgICAvLyBHQyByZWxlYXNlcyB0aGUgbGFzdCByZWZlcmVuY2Up
LiBVbnRpbCB0aGVuIFNvdXJjZUJ1ZmZlciBpcyBpbiAicmVtb3ZlZCIgc3RhdGUgYW5kIHdvbid0
IHVzZSBTb3VyY2VCdWZmZXJQcml2YXRlLgotICAgIEFTU0VSVChyZWZDb3VudCgpID09IDEpOwor
CisgICAgZm9yIChhdXRvJiB0cmFjayA6IG1fdHJhY2tzLnZhbHVlcygpKQorICAgICAgICB0cmFj
ay0+cmVtb3ZlKCk7CisgICAgbV9oYXNCZWVuUmVtb3ZlZEZyb21NZWRpYVNvdXJjZSA9IHRydWU7
CiB9CiAKIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFt
ZXI6OnJlYWR5U3RhdGUoKSBjb25zdApAQCAtMTI2LDQxICsxMzMsNjMgQEAgdm9pZCBTb3VyY2VC
dWZmZXJQcml2YXRlR1N0cmVhbWVyOjpmbHVzaChjb25zdCBBdG9tU3RyaW5nJiB0cmFja0lkKQog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKICAgICAvLyBUaGlzIGlzIG9ubHkgZm9yIG9u
LXRoZS1mbHkgcmVlbnF1ZXVlcyBhZnRlciBhcHBlbmRzLiBXaGVuIHNlZWtpbmcsIHRoZSBzZWVr
IHdpbGwgZG8gaXRzIG93biBmbHVzaC4KLSAgICBpZiAoIW1fcGxheWVyUHJpdmF0ZS5zZWVraW5n
KCkpCi0gICAgICAgIG1fcGxheWVyUHJpdmF0ZS5wbGF5YmFja1BpcGVsaW5lKCktPmZsdXNoKHRy
YWNrSWQpOwotfQogCi12b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OmVucXVldWVT
YW1wbGUoUmVmPE1lZGlhU2FtcGxlPiYmIHNhbXBsZSwgY29uc3QgQXRvbVN0cmluZyYpCi17Ci0g
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBtX25vdGlmeVdoZW5SZWFkeUZvck1vcmVT
YW1wbGVzID0gZmFsc2U7CisgICAgaWYgKCFtX3BsYXllclByaXZhdGUuaGFzQWxsVHJhY2tzKCkp
IHsKKyAgICAgICAgLy8gU291cmNlIGVsZW1lbnQgaGFzIG5vdCBlbWl0dGVkIHRyYWNrcyB5ZXQs
IHNvIHdlIG9ubHkgbmVlZCB0byBjbGVhciB0aGUgcXVldWUuCisgICAgICAgIE1lZGlhU291cmNl
VHJhY2tHU3RyZWFtZXIqIHRyYWNrID0gbV90cmFja3MuZ2V0KHRyYWNrSWQpOworICAgICAgICB0
cmFjay0+Y2xlYXJRdWV1ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgbV9wbGF5
ZXJQcml2YXRlLnBsYXliYWNrUGlwZWxpbmUoKS0+ZW5xdWV1ZVNhbXBsZShXVEZNb3ZlKHNhbXBs
ZSkpOworICAgIC8vIFNvdXJjZSBlbGVtZW50IGhhcyBlbWl0dGVkIHRyYWNrcywgbGV0IGl0IGhh
bmRsZSB0aGUgZmx1c2gsIHdoaWNoIG1heSBjYXVzZSBhIHBpcGVsaW5lIGZsdXNoIGFzIHdlbGwu
CisgICAgd2ViS2l0TWVkaWFTcmNGbHVzaChtX3BsYXllclByaXZhdGUud2ViS2l0TWVkaWFTcmMo
KSwgdHJhY2tJZCk7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6YWxs
U2FtcGxlc0luVHJhY2tFbnF1ZXVlZChjb25zdCBBdG9tU3RyaW5nJiB0cmFja0lkKQordm9pZCBT
b3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjplbnF1ZXVlU2FtcGxlKFJlZjxNZWRpYVNhbXBs
ZT4mJiBzYW1wbGUsIGNvbnN0IEF0b21TdHJpbmcmIHRyYWNrSWQpCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKLSAgICBtX3BsYXllclByaXZhdGUucGxheWJhY2tQaXBlbGluZSgpLT5h
bGxTYW1wbGVzSW5UcmFja0VucXVldWVkKHRyYWNrSWQpOworCisgICAgR1NUX1RSQUNFKCJlbnF1
ZWluZyBzYW1wbGUgdHJhY2tJZD0lcyBQVFM9JXMgcHJlc2VudGF0aW9uU2l6ZT0lLjBmeCUuMGYg
YXQgJSIgR1NUX1RJTUVfRk9STUFUICIgZHVyYXRpb246ICUiIEdTVF9USU1FX0ZPUk1BVCwKKyAg
ICAgICAgdHJhY2tJZC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBzYW1wbGUtPnByZXNlbnRhdGlv
blRpbWUoKS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCksCisgICAgICAgIHNhbXBsZS0+cHJlc2Vu
dGF0aW9uU2l6ZSgpLndpZHRoKCksIHNhbXBsZS0+cHJlc2VudGF0aW9uU2l6ZSgpLmhlaWdodCgp
LAorICAgICAgICBHU1RfVElNRV9BUkdTKFdlYkNvcmU6OnRvR3N0Q2xvY2tUaW1lKHNhbXBsZS0+
cHJlc2VudGF0aW9uVGltZSgpKSksCisgICAgICAgIEdTVF9USU1FX0FSR1MoV2ViQ29yZTo6dG9H
c3RDbG9ja1RpbWUoc2FtcGxlLT5kdXJhdGlvbigpKSkpOworCisgICAgR1JlZlB0cjxHc3RTYW1w
bGU+IGdzdFNhbXBsZSA9IHNhbXBsZS0+cGxhdGZvcm1TYW1wbGUoKS5zYW1wbGUuZ3N0U2FtcGxl
OworICAgIEFTU0VSVChnc3RTYW1wbGUpOworICAgIEFTU0VSVChnc3Rfc2FtcGxlX2dldF9idWZm
ZXIoZ3N0U2FtcGxlLmdldCgpKSk7CisKKyAgICBNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyKiB0
cmFjayA9IG1fdHJhY2tzLmdldCh0cmFja0lkKTsKKyAgICB0cmFjay0+ZW5xdWV1ZU9iamVjdChh
ZG9wdEdSZWYoR1NUX01JTklfT0JKRUNUKGdzdFNhbXBsZS5sZWFrUmVmKCkpKSk7CiB9CiAKLWJv
b2wgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6aXNSZWFkeUZvck1vcmVTYW1wbGVzKGNv
bnN0IEF0b21TdHJpbmcmKQorYm9vbCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjppc1Jl
YWR5Rm9yTW9yZVNhbXBsZXMoY29uc3QgQXRvbVN0cmluZyYgdHJhY2tJZCkKIHsKLSAgICByZXR1
cm4gbV9pc1JlYWR5Rm9yTW9yZVNhbXBsZXM7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyKiB0cmFjayA9IG1fdHJhY2tzLmdldCh0cmFj
a0lkKTsKKyAgICBib29sIHJldCA9IHRyYWNrLT5pc1JlYWR5Rm9yTW9yZVNhbXBsZXMoKTsKKyAg
ICBHU1RfVFJBQ0UoIlNvdXJjZUJ1ZmZlclByaXZhdGUoJXApIC0gaXNSZWFkeUZvck1vcmVTYW1w
bGVzOiAlcyIsIHRoaXMsIGJvb2xGb3JQcmludGluZyhyZXQpKTsKKyAgICByZXR1cm4gcmV0Owog
fQogCi12b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OnNldFJlYWR5Rm9yTW9yZVNh
bXBsZXMoYm9vbCBpc1JlYWR5KQordm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpu
b3RpZnlDbGllbnRXaGVuUmVhZHlGb3JNb3JlU2FtcGxlcyhjb25zdCBBdG9tU3RyaW5nJiB0cmFj
a0lkKQogewotICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKLSAgICBtX2lzUmVhZHlG
b3JNb3JlU2FtcGxlcyA9IGlzUmVhZHk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyKiB0cmFjayA9IG1fdHJhY2tzLmdldCh0cmFja0lk
KTsKKyAgICB0cmFjay0+bm90aWZ5V2hlblJlYWR5Rm9yTW9yZVNhbXBsZXMoW3Byb3RlY3RvciA9
IG1ha2VSZWYoKnRoaXMpLCB0aGlzLCB0cmFja0lkXSgpIG11dGFibGUgeworICAgICAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RvciA9IFdURk1vdmUocHJvdGVjdG9yKSwgdGhp
cywgdHJhY2tJZF0oKSB7CisgICAgICAgICAgICBpZiAoIW1faGFzQmVlblJlbW92ZWRGcm9tTWVk
aWFTb3VyY2UpCisgICAgICAgICAgICAgICAgcHJvdmlkZU1lZGlhRGF0YSh0cmFja0lkKTsKKyAg
ICAgICAgfSk7CisgICAgfSk7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1l
cjo6bm90aWZ5UmVhZHlGb3JNb3JlU2FtcGxlcygpCit2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVH
U3RyZWFtZXI6OmFsbFNhbXBsZXNJblRyYWNrRW5xdWV1ZWQoY29uc3QgQXRvbVN0cmluZyYgdHJh
Y2tJZCkKIHsKLSAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7Ci0gICAgc2V0UmVhZHlG
b3JNb3JlU2FtcGxlcyh0cnVlKTsKLSAgICBpZiAobV9ub3RpZnlXaGVuUmVhZHlGb3JNb3JlU2Ft
cGxlcykKLSAgICAgICAgcHJvdmlkZU1lZGlhRGF0YShtX3RyYWNrSWQpOworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgR1NUX0RFQlVHKCJFbnF1ZXVlaW5nIEVPUyBmb3IgdHJhY2sg
JyVzJyIsIHRyYWNrSWQuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgTWVkaWFTb3VyY2VU
cmFja0dTdHJlYW1lciogdHJhY2sgPSBtX3RyYWNrcy5nZXQodHJhY2tJZCk7CisgICAgdHJhY2st
PmVucXVldWVPYmplY3QoYWRvcHRHUmVmKEdTVF9NSU5JX09CSkVDVChnc3RfZXZlbnRfbmV3X2Vv
cygpKSkpOwogfQogCiB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OnNldEFjdGl2
ZShib29sIGlzQWN0aXZlKQpAQCAtMTc0LDE1ICsyMDMsMjcgQEAgYm9vbCBTb3VyY2VCdWZmZXJQ
cml2YXRlR1N0cmVhbWVyOjppc0FjdGl2ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faXNBY3RpdmU7
CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5Q2xpZW50V2hl
blJlYWR5Rm9yTW9yZVNhbXBsZXMoY29uc3QgQXRvbVN0cmluZyYgdHJhY2tJZCkKLXsKLSAgICBB
U1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7Ci0gICAgbV9ub3RpZnlXaGVuUmVhZHlGb3JNb3Jl
U2FtcGxlcyA9IHRydWU7Ci0gICAgbV90cmFja0lkID0gdHJhY2tJZDsKLX0KLQogdm9pZCBTb3Vy
Y2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpkaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50
KFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudCYmIGluaXRp
YWxpemF0aW9uU2VnbWVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogeworICAgIG1faGFzUmVjZWl2ZWRJbml0aWFsaXphdGlvblNlZ21lbnQgPSB0cnVl
OworICAgIGZvciAoYXV0byYgdHJhY2tJbmZvIDogaW5pdGlhbGl6YXRpb25TZWdtZW50LnZpZGVv
VHJhY2tzKSB7CisgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gaW5pdGlhbENhcHMgPSBzdGF0aWNf
Y2FzdDxWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcio+KHRyYWNrSW5mby50cmFjay5nZXQoKSkt
PmluaXRpYWxDYXBzKCk7CisgICAgICAgIEFTU0VSVChpbml0aWFsQ2Fwcyk7CisgICAgICAgIG1f
dHJhY2tzLmFkZCh0cmFja0luZm8udHJhY2stPmlkKCksIE1lZGlhU291cmNlVHJhY2tHU3RyZWFt
ZXI6OmNyZWF0ZShUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OlZpZGVvLCB0
cmFja0luZm8udHJhY2stPmlkKCksIFdURk1vdmUoaW5pdGlhbENhcHMpKSk7CisgICAgfQorICAg
IGZvciAoYXV0byYgdHJhY2tJbmZvIDogaW5pdGlhbGl6YXRpb25TZWdtZW50LmF1ZGlvVHJhY2tz
KSB7CisgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gaW5pdGlhbENhcHMgPSBzdGF0aWNfY2FzdDxB
dWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcio+KHRyYWNrSW5mby50cmFjay5nZXQoKSktPmluaXRp
YWxDYXBzKCk7CisgICAgICAgIEFTU0VSVChpbml0aWFsQ2Fwcyk7CisgICAgICAgIG1fdHJhY2tz
LmFkZCh0cmFja0luZm8udHJhY2stPmlkKCksIE1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXI6OmNy
ZWF0ZShUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OkF1ZGlvLCB0cmFja0lu
Zm8udHJhY2stPmlkKCksIFdURk1vdmUoaW5pdGlhbENhcHMpKSk7CisgICAgfQorICAgIGZvciAo
YXV0byYgdHJhY2tJbmZvIDogaW5pdGlhbGl6YXRpb25TZWdtZW50LnRleHRUcmFja3MpIHsKKyAg
ICAgICAgR1JlZlB0cjxHc3RDYXBzPiBpbml0aWFsQ2FwcyA9IHN0YXRpY19jYXN0PEluYmFuZFRl
eHRUcmFja1ByaXZhdGVHU3RyZWFtZXIqPih0cmFja0luZm8udHJhY2suZ2V0KCkpLT5pbml0aWFs
Q2FwcygpOworICAgICAgICBBU1NFUlQoaW5pdGlhbENhcHMpOworICAgICAgICBtX3RyYWNrcy5h
ZGQodHJhY2tJbmZvLnRyYWNrLT5pZCgpLCBNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyOjpjcmVh
dGUoVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpUZXh0LCB0cmFja0luZm8u
dHJhY2stPmlkKCksIFdURk1vdmUoaW5pdGlhbENhcHMpKSk7CisgICAgfQorCisgICAgbV9tZWRp
YVNvdXJjZS0+c3RhcnRQbGF5YmFja0lmSGFzQWxsVHJhY2tzKCk7CisKICAgICBTb3VyY2VCdWZm
ZXJQcml2YXRlOjpkaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KFdURk1vdmUoaW5pdGlh
bGl6YXRpb25TZWdtZW50KSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1Nv
dXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9tc2UvU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4
IGNjMmFjYzA1N2NiNGE4ZDg5ZjA2ZjhiNzExNjMxYzA2ZWIwZWJkOTAuLmQ2OTkwY2M4MGE2YWM3
NDQ2ZjAwYmQyMDgzYzE1ZWU0NzY5NzQ3ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1l
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2Uv
U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC00MCwxMiArNDAsMTUgQEAKICNpbmNs
dWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaCIKICNpbmNsdWRlICJTb3VyY2VC
dWZmZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oIgor
I2luY2x1ZGUgIlRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJXZWJLaXRN
ZWRpYVNvdXJjZUdTdHJlYW1lci5oIgogI2luY2x1ZGUgPHd0Zi9Mb2dnZXJIZWxwZXIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBBcHBlbmRQaXBlbGluZTsKIGNsYXNzIE1lZGlh
U291cmNlUHJpdmF0ZUdTdHJlYW1lcjsKK2NsYXNzIE1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXI7
CiAKIGNsYXNzIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIgZmluYWwgOiBwdWJsaWMgU291
cmNlQnVmZmVyUHJpdmF0ZSB7CiBwdWJsaWM6CkBAIC02NywxMCArNzAsNiBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBpc1JlYWR5Rm9yTW9yZVNhbXBsZXMoY29uc3QgQXRvbVN0cmluZyYpIGZpbmFsOwog
ICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wpIGZpbmFsOwogICAgIGJvb2wgaXNBY3RpdmUoKSBjb25z
dCBmaW5hbDsKLSAgICB2b2lkIG5vdGlmeUNsaWVudFdoZW5SZWFkeUZvck1vcmVTYW1wbGVzKGNv
bnN0IEF0b21TdHJpbmcmKSBmaW5hbDsKLQotICAgIHZvaWQgc2V0UmVhZHlGb3JNb3JlU2FtcGxl
cyhib29sKTsKLSAgICB2b2lkIG5vdGlmeVJlYWR5Rm9yTW9yZVNhbXBsZXMoKTsKIAogICAgIHZv
aWQgZGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudChTb3VyY2VCdWZmZXJQcml2YXRlQ2xp
ZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQmJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
KTsKICAgICB2b2lkIGRpZFJlY2VpdmVTYW1wbGUoUmVmPE1lZGlhU2FtcGxlPiYmKTsKQEAgLTgx
LDYgKzgwLDkgQEAgcHVibGljOgogICAgIE1lZGlhVGltZSBjdXJyZW50TWVkaWFUaW1lKCkgY29u
c3QgZmluYWw7CiAgICAgTWVkaWFUaW1lIGR1cmF0aW9uKCkgY29uc3QgZmluYWw7CiAKKyAgICBi
b29sIGhhc1JlY2VpdmVkSW5pdGlhbGl6YXRpb25TZWdtZW50KCkgY29uc3QgeyByZXR1cm4gbV9o
YXNSZWNlaXZlZEluaXRpYWxpemF0aW9uU2VnbWVudDsgfQorICAgIEhhc2hNYXA8QXRvbVN0cmlu
ZywgUmVmUHRyPE1lZGlhU291cmNlVHJhY2tHU3RyZWFtZXI+Pjo6VmFsdWVzSXRlcmF0b3JSYW5n
ZSB0cmFja3MoKSB7IHJldHVybiBtX3RyYWNrcy52YWx1ZXMoKTsgfQorCiAgICAgQ29udGVudFR5
cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogCiAjaWYgIVJFTEVBU0VfTE9HX0RJ
U0FCTEVECkBAIC05NSwxNCArOTcsMTcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTb3VyY2VC
dWZmZXJQcml2YXRlR1N0cmVhbWVyKE1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lciosIGNvbnN0
IENvbnRlbnRUeXBlJiwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFJik7CiAKKyAgICB2
b2lkIG5vdGlmeUNsaWVudFdoZW5SZWFkeUZvck1vcmVTYW1wbGVzKGNvbnN0IEF0b21TdHJpbmcm
KSBvdmVycmlkZTsKKwogICAgIE1lZGlhU291cmNlUHJpdmF0ZUdTdHJlYW1lciogbV9tZWRpYVNv
dXJjZTsKICAgICBib29sIG1faXNBY3RpdmUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNCZWVu
UmVtb3ZlZEZyb21NZWRpYVNvdXJjZSB7IGZhbHNlIH07CiAgICAgQ29udGVudFR5cGUgbV90eXBl
OwogICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSYgbV9wbGF5ZXJQcml2YXRlOwog
ICAgIFVuaXF1ZVJlZjxBcHBlbmRQaXBlbGluZT4gbV9hcHBlbmRQaXBlbGluZTsKLSAgICBib29s
IG1faXNSZWFkeUZvck1vcmVTYW1wbGVzID0gdHJ1ZTsKLSAgICBib29sIG1fbm90aWZ5V2hlblJl
YWR5Rm9yTW9yZVNhbXBsZXMgPSBmYWxzZTsKICAgICBBdG9tU3RyaW5nIG1fdHJhY2tJZDsKKyAg
ICBIYXNoTWFwPEF0b21TdHJpbmcsIFJlZlB0cjxNZWRpYVNvdXJjZVRyYWNrR1N0cmVhbWVyPj4g
bV90cmFja3M7CisgICAgYm9vbCBtX2hhc1JlY2VpdmVkSW5pdGlhbGl6YXRpb25TZWdtZW50IHsg
ZmFsc2UgfTsKIAogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgIFJlZjxjb25zdCBMb2dn
ZXI+IG1fbG9nZ2VyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL21zZS9UcmFja1F1ZXVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvVHJhY2tRdWV1ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjZhYmNh
NDU0NTNhNjUxMjMzNDFjOTA0NjkwYmIwNzZlODQ5NzkyYQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvVHJhY2tRdWV1ZS5j
cHAKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjEgTWV0
cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMSBJZ2FsaWEs
IFMuTAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUcmFja1F1ZXVlLmgiCisKKyNpZiBFTkFC
TEUoTUVESUFfU09VUkNFKSAmJiBVU0UoR1NUUkVBTUVSKQorCitHU1RfREVCVUdfQ0FURUdPUllf
RVhURVJOKHdlYmtpdF9tc2VfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0
X21zZV9kZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1RyYWNrUXVldWU6OlRyYWNrUXVl
dWUoQXRvbVN0cmluZyB0cmFja0lkKQorICAgIDogbV90cmFja0lkKHRyYWNrSWQpCit7IH0KKwor
dm9pZCBUcmFja1F1ZXVlOjplbnF1ZXVlT2JqZWN0KEdSZWZQdHI8R3N0TWluaU9iamVjdD4mJiBv
YmplY3QpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoR1NUX0lT
X1NBTVBMRShvYmplY3QuZ2V0KCkpIHx8IEdTVF9JU19FVkVOVChvYmplY3QuZ2V0KCkpKTsKKwor
ICAgIEdTVF9UUkFDRSgiVHJhY2tRdWV1ZSBmb3IgJyVzJzogUHV0dGluZyBvYmplY3QgaW4gdGhl
IHF1ZXVlOiAlIiBHU1RfUFRSX0ZPUk1BVCAiLiBub3RFbXB0eUNhbGxiYWNrIGN1cnJlbnRseSAl
cy4iLCBtX3RyYWNrSWQuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgb2JqZWN0LmdldCgpLCBtX25v
dEVtcHR5Q2FsbGJhY2sgPyAic2V0LCB3aWxsIGJlIGNhbGxlZCIgOiAidW5zZXQiKTsKKyAgICBp
ZiAoIW1fbm90RW1wdHlDYWxsYmFjaykKKyAgICAgICAgbV9xdWV1ZS5hcHBlbmQoV1RGTW92ZShv
YmplY3QpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gSWYgYSBsb3cgbGV2ZWwgY2FsbGJhY2sg
d2FzIGV2ZXIgc2V0LCBpdCBoYWQgdG8gYmUgZGlzcGF0Y2hlZCB3aGVuIHRoZSBxdWV1ZSB3YXMg
ZW1wdHkgYXQgbGF0ZXN0LgorICAgICAgICBBU1NFUlQoIW1fbG93TGV2ZWxDYWxsYmFjayk7CisK
KyAgICAgICAgTm90RW1wdHlIYW5kbGVyIG5vdEVtcHR5Q2FsbGJhY2s7CisgICAgICAgIHN0ZDo6
c3dhcChub3RFbXB0eUNhbGxiYWNrLCBtX25vdEVtcHR5Q2FsbGJhY2spOworICAgICAgICBub3RF
bXB0eUNhbGxiYWNrKFdURk1vdmUob2JqZWN0KSk7CisgICAgfQorfQorCit2b2lkIFRyYWNrUXVl
dWU6OmNsZWFyKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIG1fcXVldWUu
Y2xlYXIoKTsKKyAgICBHU1RfREVCVUcoIlRyYWNrUXVldWUgZm9yICclcyc6IEVtcHRpZWQuIiwg
bV90cmFja0lkLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIC8vIE5vdGlmeSBtYWluIHRo
cmVhZCBvZiBsb3cgbGV2ZWwgcmVhY2hlZCBpZiBpdCBwcm9jZWVkcy4KKyAgICBjaGVja0xvd0xl
dmVsKCk7Cit9CisKK3ZvaWQgVHJhY2tRdWV1ZTo6Zmx1c2goKQoreworICAgIGNsZWFyKCk7Cisg
ICAgLy8gSWYgdGhlcmUgd2FzIGEgY2FsbGJhY2sgaW4gdGhlIHN0cmVhbWluZyB0aHJlYWQgd2Fp
dGluZyBmb3IgYSBzYW1wbGUgdG8gYmUgYWRkZWQsIGNhbmNlbCBpdC4KKyAgICBpZiAobV9ub3RF
bXB0eUNhbGxiYWNrKSB7CisgICAgICAgIG1fbm90RW1wdHlDYWxsYmFjayA9IG51bGxwdHI7Cisg
ICAgICAgIEdTVF9ERUJVRygiVHJhY2tRdWV1ZSBmb3IgJyVzJzogbm90RW1wdHlDYWxsYmFjayB1
bnNldC4iLCBtX3RyYWNrSWQuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgfQorfQorCit2
b2lkIFRyYWNrUXVldWU6Om5vdGlmeVdoZW5Mb3dMZXZlbChMb3dMZXZlbEhhbmRsZXImJiBsb3dM
ZXZlbENhbGxiYWNrKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgR1NUX1RS
QUNFKCJUcmFja1F1ZXVlIGZvciAnJXMnOiBTZXR0aW5nIGxvd0xldmVsQ2FsbGJhY2slcy4iLCBt
X3RyYWNrSWQuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgbV9sb3dMZXZlbENhbGxi
YWNrID8gIiAocHJldmlvdXMgY2FsbGJhY2sgd2lsbCBiZSBkaXNjYXJkZWQpIiA6ICIiKTsKKyAg
ICBtX2xvd0xldmVsQ2FsbGJhY2sgPSBXVEZNb3ZlKGxvd0xldmVsQ2FsbGJhY2spOworICAgIGNo
ZWNrTG93TGV2ZWwoKTsKK30KKworR1JlZlB0cjxHc3RNaW5pT2JqZWN0PiBUcmFja1F1ZXVlOjpw
b3AoKQoreworICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKKyAgICBHUmVmUHRyPEdzdE1pbmlPYmpl
Y3Q+IG9iamVjdCA9IG1fcXVldWUudGFrZUZpcnN0KCk7CisgICAgY2hlY2tMb3dMZXZlbCgpOwor
ICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3ZvaWQgVHJhY2tRdWV1ZTo6bm90aWZ5V2hlbk5vdEVt
cHR5KE5vdEVtcHR5SGFuZGxlciYmIG5vdEVtcHR5Q2FsbGJhY2spCit7CisgICAgQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX25vdEVtcHR5Q2FsbGJhY2spOworICAgIG1f
bm90RW1wdHlDYWxsYmFjayA9IFdURk1vdmUobm90RW1wdHlDYWxsYmFjayk7CisgICAgR1NUX1RS
QUNFKCJUcmFja1F1ZXVlIGZvciAnJXMnOiBub3RFbXB0eUNhbGxiYWNrIHNldC4iLCBtX3RyYWNr
SWQuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgVHJhY2tRdWV1ZTo6cmVzZXRO
b3RFbXB0eUhhbmRsZXIoKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIGlm
ICghbV9ub3RFbXB0eUNhbGxiYWNrKQorICAgICAgICByZXR1cm47CisgICAgbV9ub3RFbXB0eUNh
bGxiYWNrID0gbnVsbHB0cjsKKyAgICBHU1RfVFJBQ0UoIlRyYWNrUXVldWUgZm9yICclcyc6IG5v
dEVtcHR5Q2FsbGJhY2sgcmVzZXQuIiwgbV90cmFja0lkLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OworfQorCit2b2lkIFRyYWNrUXVldWU6OmNoZWNrTG93TGV2ZWwoKQoreworICAgIGlmICghbV9s
b3dMZXZlbENhbGxiYWNrIHx8IGR1cmF0aW9uRW5xdWV1ZWQoKSA+IHNfZHVyYXRpb25FbnF1ZXVl
ZExvd1dhdGVyTGV2ZWwpCisgICAgICAgIHJldHVybjsKKworICAgIExvd0xldmVsSGFuZGxlciBs
b3dMZXZlbENhbGxiYWNrOworICAgIHN0ZDo6c3dhcChsb3dMZXZlbENhbGxiYWNrLCBtX2xvd0xl
dmVsQ2FsbGJhY2spOworICAgIEdTVF9UUkFDRSgiVHJhY2tRdWV1ZSBmb3IgJyVzJzogbG93TGV2
ZWxDYWxsYmFjayBjYWxsZWQuIiwgbV90cmFja0lkLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIGxvd0xldmVsQ2FsbGJhY2soKTsKK30KKworR3N0Q2xvY2tUaW1lIFRyYWNrUXVldWU6OmR1
cmF0aW9uRW5xdWV1ZWQoKSBjb25zdAoreworICAgIC8vIEZpbmQgdGhlIGZpcnN0IGFuZCBsYXN0
IEdzdFNhbXBsZSBpbiB0aGUgcXVldWUgYW5kIHN1YnRyYWN0IHRoZWlyIERUUy4KKworICAgIGF1
dG8gZnJvbnRJdGVyID0gc3RkOjpmaW5kX2lmKG1fcXVldWUuYmVnaW4oKSwgbV9xdWV1ZS5lbmQo
KSwgW10oY29uc3QgR1JlZlB0cjxHc3RNaW5pT2JqZWN0PiYgb2JqZWN0KSB7CisgICAgICAgIHJl
dHVybiBHU1RfSVNfU0FNUExFKG9iamVjdC5nZXQoKSk7CisgICAgfSk7CisKKyAgICAvLyBJZiB0
aGVyZSBhcmUgbm8gc2FtcGxlcyBpbiB0aGUgcXVldWUsIHRoYXQgbWFrZXMgdG90YWwgZHVyYXRp
b24gb2YgZW5xdWV1ZWQgZnJhbWVzIG9mIHplcm8uCisgICAgaWYgKGZyb250SXRlciA9PSBtX3F1
ZXVlLmVuZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGF1dG8gYmFja0l0ZXIgPSBzdGQ6
OmZpbmRfaWYobV9xdWV1ZS5yYmVnaW4oKSwgbV9xdWV1ZS5yZW5kKCksIFtdKGNvbnN0IEdSZWZQ
dHI8R3N0TWluaU9iamVjdD4mIG9iamVjdCkgeworICAgICAgICByZXR1cm4gR1NUX0lTX1NBTVBM
RShvYmplY3QuZ2V0KCkpOworICAgIH0pOworCisgICAgY29uc3QgR3N0QnVmZmVyKiBmcm9udCA9
IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihHU1RfU0FNUExFKGZyb250SXRlci0+Z2V0KCkpKTsKKyAg
ICBjb25zdCBHc3RCdWZmZXIqIGJhY2sgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIoR1NUX1NBTVBM
RShiYWNrSXRlci0+Z2V0KCkpKTsKKyAgICByZXR1cm4gR1NUX0JVRkZFUl9EVFNfT1JfUFRTKGJh
Y2spIC0gR1NUX0JVRkZFUl9EVFNfT1JfUFRTKGZyb250KTsKK30KKworfQorI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1Ry
YWNrUXVldWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvVHJhY2tRdWV1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQzNmI2NmEwODMxZGZhMDUzZTM5YjM0NGYxOTM4
ODNlNmFlZWUzZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvbXNlL1RyYWNrUXVldWUuaApAQCAtMCwwICsxLDkwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwLCAyMDIxIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAsIDIwMjEgSWdhbGlhLCBTLkwKKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShNRURJQV9TT1VSQ0UpICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJD
b21tb24uaCIKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRyYWNrUXVldWUgeworcHVibGljOgorICAg
IFRyYWNrUXVldWUoQXRvbVN0cmluZyB0cmFja0lkKTsKKworICAgIHR5cGVkZWYgc3RkOjpmdW5j
dGlvbjx2b2lkKEdSZWZQdHI8R3N0TWluaU9iamVjdD4mJik+IE5vdEVtcHR5SGFuZGxlcjsKKyAg
ICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBMb3dMZXZlbEhhbmRsZXI7CisKKyAgICAv
LyBOb3RlOiBUaGUgVHJhY2tRdWV1ZSBtZXRob2RzIGFyZSBub3QgdGhyZWFkLXNhZmUuIFRyYWNr
UXVldWUgbXVzdCBhbHdheXMgYmUgd3JhcHBlZCBpbiBhIERhdGFNdXRleDw+LgorCisgICAgLy8g
Rm9yIHByb2R1Y2VyIHRocmVhZCAobWFpbi10aHJlYWQpOgorICAgIHZvaWQgZW5xdWV1ZU9iamVj
dChHUmVmUHRyPEdzdE1pbmlPYmplY3Q+JiYpOworICAgIGJvb2wgaXNGdWxsKCkgY29uc3QgeyBy
ZXR1cm4gZHVyYXRpb25FbnF1ZXVlZCgpID49IHNfZHVyYXRpb25FbnF1ZXVlZEhpZ2hXYXRlckxl
dmVsOyB9CisgICAgdm9pZCBub3RpZnlXaGVuTG93TGV2ZWwoTG93TGV2ZWxIYW5kbGVyJiYpOwor
ICAgIHZvaWQgY2xlYXIoKTsKKyAgICB2b2lkIGZsdXNoKCk7CisKKyAgICAvLyBGb3IgY29uc3Vt
ZXIgdGhyZWFkOgorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcXVldWUuaXNF
bXB0eSgpOyB9CisgICAgR1JlZlB0cjxHc3RNaW5pT2JqZWN0PiBwb3AoKTsKKyAgICB2b2lkIG5v
dGlmeVdoZW5Ob3RFbXB0eShOb3RFbXB0eUhhbmRsZXImJik7CisgICAgYm9vbCBoYXNOb3RFbXB0
eUhhbmRsZXIoKSBjb25zdCB7IHJldHVybiBtX25vdEVtcHR5Q2FsbGJhY2sgIT0gbnVsbHB0cjsg
fQorICAgIHZvaWQgcmVzZXROb3RFbXB0eUhhbmRsZXIoKTsKKworcHJpdmF0ZToKKyAgICAvLyBU
aGUgcG9pbnQgb2YgaGF2aW5nIGEgcXVldWUgZm9yIFdlYktpdE1lZGlhU291cmNlIGlzIHRvIGxp
bWl0IHRoZSBudW1iZXIgb2YgY29udGV4dCBzd2l0Y2hlcyBwZXIgc2Vjb25kLgorICAgIC8vIElm
IHdlIGhhZCBubyBxdWV1ZSwgdGhlIG1haW4gdGhyZWFkIHdvdWxkIGhhdmUgdG8gYmUgYXdha2Vu
IGZvciBldmVyeSBmcmFtZS4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZQorICAgIC8vIHF1ZXVl
IGhhZCB1bmxpbWl0ZWQgc2l6ZSBXZWJLaXQgd291bGQgZW5kIHVwIHJlcXVlc3RpbmcgZmx1c2hl
cyBtb3JlIG9mdGVuIHRoYW4gbmVjZXNzYXJ5IHdoZW4gZnJhbWVzCisgICAgLy8gaW4gdGhlIGZ1
dHVyZSBhcmUgcmUtYXBwZW5kZWQuIEFzIGEgc3dlZXQgc3BvdCBiZXR3ZWVuIHRoZXNlIGV4dHJl
bWVzIHdlIGNob29zZSB0byBhbGxvdyBlbnF1ZXVlaW5nIGEKKyAgICAvLyBmZXcgc2Vjb25kcyB3
b3J0aCBvZiBzYW1wbGVzLgorCisgICAgLy8gYGlzUmVhZHlGb3JNb3JlU2FtcGxlc2AgZm9sbG93
cyB0aGUgY2xhc3NpY2FsIHR3byB3YXRlciBsZXZlbHMgc3RyYXRlZ3k6IGluaXRpYWxseSBpdCdz
IHRydWUgdW50aWwgdGhlCisgICAgLy8gaGlnaCB3YXRlciBsZXZlbCBpcyByZWFjaGVkLCB0aGVu
IGl0IGJlY29tZXMgZmFsc2UgdW50aWwgdGhlIHF1ZXVlIGRyYWlucyBkb3duIHRvIHRoZSBsb3cg
d2F0ZXIgbGV2ZWwKKyAgICAvLyBhbmQgdGhlIGN5Y2xlIHJlcGVhdHMuIFRoaXMgd2F5IHdlIGF2
b2lkIHN0YWxscyBhbmQgbWluaW1pemUgY29udGV4dCBzd2l0Y2hlcy4KKworICAgIHN0YXRpYyBj
b25zdCBHc3RDbG9ja1RpbWUgc19kdXJhdGlvbkVucXVldWVkSGlnaFdhdGVyTGV2ZWwgPSA1ICog
R1NUX1NFQ09ORDsKKyAgICBzdGF0aWMgY29uc3QgR3N0Q2xvY2tUaW1lIHNfZHVyYXRpb25FbnF1
ZXVlZExvd1dhdGVyTGV2ZWwgPSAyICogR1NUX1NFQ09ORDsKKworICAgIEdzdENsb2NrVGltZSBk
dXJhdGlvbkVucXVldWVkKCkgY29uc3Q7CisgICAgdm9pZCBjaGVja0xvd0xldmVsKCk7CisKKyAg
ICBBdG9tU3RyaW5nIG1fdHJhY2tJZDsKKyAgICBEZXF1ZTxHUmVmUHRyPEdzdE1pbmlPYmplY3Q+
PiBtX3F1ZXVlOworICAgIExvd0xldmVsSGFuZGxlciBtX2xvd0xldmVsQ2FsbGJhY2s7CisgICAg
Tm90RW1wdHlIYW5kbGVyIG1fbm90RW1wdHlDYWxsYmFjazsKK307CisKK30KKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNl
L1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCmlu
ZGV4IGRiODMxMjQ0MmRmNWIwNTc1ZWMxY2MwZDk3NmNlZDNjMDNlNmRmNTkuLmZjYTI3NWZmZmVh
ZGYzMDg4MGY3YTFkY2VjMWY4YjcwZGNjODk3ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFt
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0zLDggKzMsOCBAQAogICogIENv
cHlyaWdodCAoQykgMjAxMyBDb2xsYWJvcmEgTHRkLgogICogIENvcHlyaWdodCAoQykgMjAxMyBP
cmFuZ2UKICAqICBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgU2ViYXN0aWFuIERyw7ZnZSA8c2Vi
YXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgTWV0
cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgSWdhbGlh
LCBTLkwKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYsIDIwMTgsIDIwMTksIDIwMjAsIDIw
MjEgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYs
IDIwMTgsIDIwMTksIDIwMjAsIDIwMjEgSWdhbGlhLCBTLkwKICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
QEAgLTI0LDE5MSArMjQsMjM1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2Vi
S2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCIKIAotI2luY2x1ZGUgIlBsYXliYWNrUGlwZWxpbmUu
aCIKLQogI2lmIEVOQUJMRShWSURFTykgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgVVNFKEdT
VFJFQU1FUikKIAotI2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCiAjaW5j
bHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCi0jaW5jbHVkZSAiTWVkaWFEZXNjcmlwdGlvbi5oIgot
I2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5oIgotI2luY2x1ZGUgIk1l
ZGlhU2FtcGxlLmgiCi0jaW5jbHVkZSAiTWVkaWFTb3VyY2VQcml2YXRlR1N0cmVhbWVyLmgiCi0j
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRl
R1N0cmVhbWVyLmgiCi0jaW5jbHVkZSAiVGltZVJhbmdlcy5oIgorI2luY2x1ZGUgIk1lZGlhU291
cmNlVHJhY2tHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1l
ci5oIgotI2luY2x1ZGUgIldlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyUHJpdmF0ZS5oIgogCi0j
aW5jbHVkZSA8Z3N0L3BidXRpbHMvcGJ1dGlscy5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRl
by5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KICNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+Cisj
aW5jbHVkZSA8d3RmL0RhdGFNdXRleC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZERhdGEuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRv
bVN0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKK3VzaW5nIG5h
bWVzcGFjZSBXVEY7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwogR1NUX0RFQlVHX0NBVEVH
T1JZX1NUQVRJQyh3ZWJraXRfbWVkaWFfc3JjX2RlYnVnKTsKICNkZWZpbmUgR1NUX0NBVF9ERUZB
VUxUIHdlYmtpdF9tZWRpYV9zcmNfZGVidWcKIAogI2RlZmluZSB3ZWJraXRfbWVkaWFfc3JjX3Bh
cmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKICNkZWZpbmUgV0VCS0lUX01FRElBX1NSQ19DQVRFR09S
WV9JTklUIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9tZWRpYV9zcmNfZGVidWcsICJ3
ZWJraXRtZWRpYXNyYyIsIDAsICJ3ZWJzcmMgZWxlbWVudCIpOwogCi1zdGF0aWMgR3N0U3RhdGlj
UGFkVGVtcGxhdGUgc3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgic3JjXyV1
IiwgR1NUX1BBRF9TUkMsCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjVGVtcGxhdGUg
PSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgic3JjXyVzIiwgR1NUX1BBRF9TUkMsCiAgICAgR1NU
X1BBRF9TT01FVElNRVMsIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwogCi1zdGF0aWMgdm9pZCBlbmFi
bGVkQXBwc3JjTmVlZERhdGEoR3N0QXBwU3JjKiwgZ3VpbnQsIGdwb2ludGVyKTsKLXN0YXRpYyB2
b2lkIGVuYWJsZWRBcHBzcmNFbm91Z2hEYXRhKEdzdEFwcFNyYyosIGdwb2ludGVyKTsKLXN0YXRp
YyBnYm9vbGVhbiBlbmFibGVkQXBwc3JjU2Vla0RhdGEoR3N0QXBwU3JjKiwgZ3VpbnQ2NCwgZ3Bv
aW50ZXIpOwotCi1zdGF0aWMgdm9pZCBkaXNhYmxlZEFwcHNyY05lZWREYXRhKEdzdEFwcFNyYyos
IGd1aW50LCBncG9pbnRlcikgeyB9Owotc3RhdGljIHZvaWQgZGlzYWJsZWRBcHBzcmNFbm91Z2hE
YXRhKEdzdEFwcFNyYyosIGdwb2ludGVyKSB7IH07Ci1zdGF0aWMgZ2Jvb2xlYW4gZGlzYWJsZWRB
cHBzcmNTZWVrRGF0YShHc3RBcHBTcmMqLCBndWludDY0LCBncG9pbnRlcikKLXsKLSAgICByZXR1
cm4gRkFMU0U7Ci19OwotCi1Hc3RBcHBTcmNDYWxsYmFja3MgZW5hYmxlZEFwcHNyY0NhbGxiYWNr
cyA9IHsKLSAgICBlbmFibGVkQXBwc3JjTmVlZERhdGEsCi0gICAgZW5hYmxlZEFwcHNyY0Vub3Vn
aERhdGEsCi0gICAgZW5hYmxlZEFwcHNyY1NlZWtEYXRhLAotICAgIHsgMCB9Ci19OwotCi1Hc3RB
cHBTcmNDYWxsYmFja3MgZGlzYWJsZWRBcHBzcmNDYWxsYmFja3MgPSB7Ci0gICAgZGlzYWJsZWRB
cHBzcmNOZWVkRGF0YSwKLSAgICBkaXNhYmxlZEFwcHNyY0Vub3VnaERhdGEsCi0gICAgZGlzYWJs
ZWRBcHBzcmNTZWVrRGF0YSwKLSAgICB7IDAgfQorZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBS
T1BfTl9BVURJTywKKyAgICBQUk9QX05fVklERU8sCisgICAgUFJPUF9OX1RFWFQsCisgICAgUFJP
UF9MQVNUCiB9OwogCi1zdGF0aWMgU3RyZWFtKiBnZXRTdHJlYW1CeUFwcHNyYyhXZWJLaXRNZWRp
YVNyYyosIEdzdEVsZW1lbnQqKTsKLXN0YXRpYyB2b2lkIHNlZWtOZWVkc0RhdGFNYWluVGhyZWFk
KFdlYktpdE1lZGlhU3JjKik7Ci1zdGF0aWMgdm9pZCBub3RpZnlSZWFkeUZvck1vcmVTYW1wbGVz
TWFpblRocmVhZChXZWJLaXRNZWRpYVNyYyosIFN0cmVhbSopOworc3RydWN0IFN0cmVhbTsKIAot
c3RhdGljIHZvaWQgZW5hYmxlZEFwcHNyY05lZWREYXRhKEdzdEFwcFNyYyogYXBwc3JjLCBndWlu
dCwgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAgV2ViS2l0TWVkaWFTcmMqIHdlYktpdE1lZGlh
U3JjID0gc3RhdGljX2Nhc3Q8V2ViS2l0TWVkaWFTcmMqPih1c2VyRGF0YSk7Ci0gICAgQVNTRVJU
KFdFQktJVF9JU19NRURJQV9TUkMod2ViS2l0TWVkaWFTcmMpKTsKLQotICAgIEdTVF9PQkpFQ1Rf
TE9DSyh3ZWJLaXRNZWRpYVNyYyk7Ci0gICAgT25TZWVrRGF0YUFjdGlvbiBhcHBzcmNTZWVrRGF0
YU5leHRBY3Rpb24gPSB3ZWJLaXRNZWRpYVNyYy0+cHJpdi0+YXBwc3JjU2Vla0RhdGFOZXh0QWN0
aW9uOwotICAgIFN0cmVhbSogYXBwc3JjU3RyZWFtID0gZ2V0U3RyZWFtQnlBcHBzcmMod2ViS2l0
TWVkaWFTcmMsIEdTVF9FTEVNRU5UKGFwcHNyYykpOwotICAgIGJvb2wgYWxsQXBwc3JjTmVlZERh
dGFBZnRlclNlZWsgPSBmYWxzZTsKLQotICAgIGlmICh3ZWJLaXRNZWRpYVNyYy0+cHJpdi0+YXBw
c3JjU2Vla0RhdGFDb3VudCA+IDApIHsKLSAgICAgICAgaWYgKGFwcHNyY1N0cmVhbSAmJiAhYXBw
c3JjU3RyZWFtLT5hcHBzcmNOZWVkRGF0YUZsYWcpIHsKLSAgICAgICAgICAgICsrd2ViS2l0TWVk
aWFTcmMtPnByaXYtPmFwcHNyY05lZWREYXRhQ291bnQ7Ci0gICAgICAgICAgICBhcHBzcmNTdHJl
YW0tPmFwcHNyY05lZWREYXRhRmxhZyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IG51
bUFwcHNyY3MgPSB3ZWJLaXRNZWRpYVNyYy0+cHJpdi0+c3RyZWFtcy5zaXplKCk7Ci0gICAgICAg
IGlmICh3ZWJLaXRNZWRpYVNyYy0+cHJpdi0+YXBwc3JjU2Vla0RhdGFDb3VudCA9PSBudW1BcHBz
cmNzICYmIHdlYktpdE1lZGlhU3JjLT5wcml2LT5hcHBzcmNOZWVkRGF0YUNvdW50ID09IG51bUFw
cHNyY3MpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qod2ViS2l0TWVkaWFTcmMsICJB
bGwgbmVlZERhdGFzIGNvbXBsZXRlZCIpOwotICAgICAgICAgICAgYWxsQXBwc3JjTmVlZERhdGFB
ZnRlclNlZWsgPSB0cnVlOwotICAgICAgICAgICAgd2ViS2l0TWVkaWFTcmMtPnByaXYtPmFwcHNy
Y1NlZWtEYXRhQ291bnQgPSAwOwotICAgICAgICAgICAgd2ViS2l0TWVkaWFTcmMtPnByaXYtPmFw
cHNyY05lZWREYXRhQ291bnQgPSAwOwotICAgICAgICAgICAgd2ViS2l0TWVkaWFTcmMtPnByaXYt
PmFwcHNyY1NlZWtEYXRhTmV4dEFjdGlvbiA9IE5vdGhpbmc7Ci0KLSAgICAgICAgICAgIGZvciAo
U3RyZWFtKiBzdHJlYW0gOiB3ZWJLaXRNZWRpYVNyYy0+cHJpdi0+c3RyZWFtcykKLSAgICAgICAg
ICAgICAgICBzdHJlYW0tPmFwcHNyY05lZWREYXRhRmxhZyA9IGZhbHNlOwotICAgICAgICB9Citz
dHJ1Y3QgV2ViS2l0TWVkaWFTcmNQcml2YXRlIHsKKyAgICBIYXNoTWFwPEF0b21TdHJpbmcsIFJl
ZlB0cjxTdHJlYW0+PiBzdHJlYW1zOworICAgIFN0cmVhbSogc3RyZWFtQnlOYW1lKGNvbnN0IEF0
b21TdHJpbmcmIG5hbWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgICAgICBTdHJlYW0qIHN0cmVhbSA9IHN0cmVhbXMuZ2V0KG5hbWUpOworICAgICAgICBBU1NF
UlQoc3RyZWFtKTsKKyAgICAgICAgcmV0dXJuIHN0cmVhbTsKICAgICB9Ci0gICAgR1NUX09CSkVD
VF9VTkxPQ0sod2ViS2l0TWVkaWFTcmMpOwogCi0gICAgaWYgKGFsbEFwcHNyY05lZWREYXRhQWZ0
ZXJTZWVrKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qod2ViS2l0TWVkaWFTcmMsICJBbGwg
ZXhwZWN0ZWQgYXBwc3JjU2Vla0RhdGEoKSBhbmQgYXBwc3JjTmVlZERhdGEoKSBjYWxscyBwZXJm
b3JtZWQuIFJ1bm5pbmcgbmV4dCBhY3Rpb24gKCVkKSIsIHN0YXRpY19jYXN0PGludD4oYXBwc3Jj
U2Vla0RhdGFOZXh0QWN0aW9uKSk7CisgICAgLy8gVXNlZCBmb3Igc3RyZWFtLXN0YXJ0IGV2ZW50
cywgc2hhcmVkIGJ5IGFsbCBzdHJlYW1zLgorICAgIGNvbnN0IHVuc2lnbmVkIGdyb3VwSWQgeyBn
c3RfdXRpbF9ncm91cF9pZF9uZXh0KCkgfTsKIAotICAgICAgICBzd2l0Y2ggKGFwcHNyY1NlZWtE
YXRhTmV4dEFjdGlvbikgewotICAgICAgICBjYXNlIE1lZGlhU291cmNlU2Vla1RvVGltZToKLSAg
ICAgICAgICAgIHdlYktpdE1lZGlhU3JjLT5wcml2LT5ub3RpZmllci0+bm90aWZ5KFdlYktpdE1l
ZGlhU3JjTWFpblRocmVhZE5vdGlmaWNhdGlvbjo6U2Vla05lZWRzRGF0YSwgW3dlYktpdE1lZGlh
U3JjXSB7Ci0gICAgICAgICAgICAgICAgc2Vla05lZWRzRGF0YU1haW5UaHJlYWQod2ViS2l0TWVk
aWFTcmMpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBOb3RoaW5nOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYg
KGFwcHNyY1NlZWtEYXRhTmV4dEFjdGlvbiA9PSBOb3RoaW5nKSB7Ci0gICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKHdlYktpdE1lZGlhU3JjLT5wcml2LT5zdHJlYW1Mb2NrKTsKKyAgICAvLyBTZXQg
b25jZSB3aGVuIHRoZSBzb3VyY2UgaXMgc3RhcnRlZC4gTm90IGNoYW5nZWQgYWZ0ZXIuCisgICAg
R1JlZlB0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPiBjb2xsZWN0aW9uOworICAgIGJvb2wgaXNTdGFy
dGVkKCkgeyByZXR1cm4gY29sbGVjdGlvbjsgfQogCi0gICAgICAgIEdTVF9PQkpFQ1RfTE9DSyh3
ZWJLaXRNZWRpYVNyYyk7CisgICAgLy8gQ2hhbmdlZCBvbiBzZWVrcy4KKyAgICBHc3RDbG9ja1Rp
bWUgc3RhcnRUaW1lIHsgMCB9OworICAgIGRvdWJsZSByYXRlIHsgMS4wIH07CiAKLSAgICAgICAg
Ly8gU2VhcmNoIGFnYWluIGZvciB0aGUgU3RyZWFtLCBqdXN0IGluIGNhc2UgaXQgd2FzIHJlbW92
ZWQgYmV0d2VlbiB0aGUgcHJldmlvdXMgbG9jayBhbmQgdGhpcyBvbmUuCi0gICAgICAgIGFwcHNy
Y1N0cmVhbSA9IGdldFN0cmVhbUJ5QXBwc3JjKHdlYktpdE1lZGlhU3JjLCBHU1RfRUxFTUVOVChh
cHBzcmMpKTsKKyAgICAvLyBPbmx5IHVzZWQgYnkgVVJJIEhhbmRsZXIgQVBJIGltcGxlbWVudGF0
aW9uLgorICAgIEdVbmlxdWVQdHI8Y2hhcj4gdXJpOworfTsKIAotICAgICAgICBpZiAoYXBwc3Jj
U3RyZWFtICYmIGFwcHNyY1N0cmVhbS0+dHlwZSAhPSBXZWJDb3JlOjpJbnZhbGlkKQotICAgICAg
ICAgICAgd2ViS2l0TWVkaWFTcmMtPnByaXYtPm5vdGlmaWVyLT5ub3RpZnkoV2ViS2l0TWVkaWFT
cmNNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpSZWFkeUZvck1vcmVTYW1wbGVzLCBbd2ViS2l0TWVk
aWFTcmMsIGFwcHNyY1N0cmVhbV0gewotICAgICAgICAgICAgICAgIG5vdGlmeVJlYWR5Rm9yTW9y
ZVNhbXBsZXNNYWluVGhyZWFkKHdlYktpdE1lZGlhU3JjLCBhcHBzcmNTdHJlYW0pOwotICAgICAg
ICAgICAgfSk7CitzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY1VyaUhhbmRsZXJJbml0KGdwb2lu
dGVyLCBncG9pbnRlcik7CitzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY0NvbnN0cnVjdGVkKEdP
YmplY3QqKTsKK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjRmluYWxpemUoR09iamVjdCopOwor
c3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktpdE1lZGlhU3JjQ2hhbmdlU3RhdGUoR3N0
RWxlbWVudCosIEdzdFN0YXRlQ2hhbmdlKTsKK3N0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYVNy
Y0FjdGl2YXRlTW9kZShHc3RQYWQqLCBHc3RPYmplY3QqLCBHc3RQYWRNb2RlLCBnYm9vbGVhbiBh
Y3RpdmF0ZSk7CitzdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY0xvb3Aodm9pZCopOworc3RhdGlj
IHZvaWQgd2ViS2l0TWVkaWFTcmNUZWFyRG93blN0cmVhbShXZWJLaXRNZWRpYVNyYyogc291cmNl
LCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lKTsKK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjR2V0
UHJvcGVydHkoR09iamVjdCosIHVuc2lnbmVkIHByb3BJZCwgR1ZhbHVlKiwgR1BhcmFtU3BlYyop
Oworc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNTdHJlYW1GbHVzaChTdHJlYW0qLCBib29sIGlz
U2Vla2luZ0ZsdXNoKTsKK3N0YXRpYyBnYm9vbGVhbiB3ZWJLaXRNZWRpYVNyY1NlbmRFdmVudChH
c3RFbGVtZW50KiwgR3N0RXZlbnQqKTsKIAotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyh3ZWJL
aXRNZWRpYVNyYyk7Ci0gICAgfQotfQorI2RlZmluZSB3ZWJraXRfbWVkaWFfc3JjX3BhcmVudF9j
bGFzcyBwYXJlbnRfY2xhc3MKIAotc3RhdGljIHZvaWQgZW5hYmxlZEFwcHNyY0Vub3VnaERhdGEo
R3N0QXBwU3JjICphcHBzcmMsIGdwb2ludGVyIHVzZXJEYXRhKQotewotICAgIC8vIE5vIG5lZWQg
dG8gbG9jayBvbiB3ZWJLaXRNZWRpYVNyYywgd2UncmUgb24gdGhlIG1haW4gdGhyZWFkIGFuZCBu
b2JvZHkgaXMgZ29pbmcgdG8gcmVtb3ZlIHRoZSBzdHJlYW0gaW4gdGhlIG1lYW50aW1lLgotICAg
IEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKK3N0cnVjdCBXZWJLaXRNZWRpYVNyY1BhZFBy
aXZhdGUgeworICAgIFJlZlB0cjxTdHJlYW0+IHN0cmVhbTsKK307CiAKLSAgICBXZWJLaXRNZWRp
YVNyYyogd2ViS2l0TWVkaWFTcmMgPSBzdGF0aWNfY2FzdDxXZWJLaXRNZWRpYVNyYyo+KHVzZXJE
YXRhKTsKLSAgICBBU1NFUlQoV0VCS0lUX0lTX01FRElBX1NSQyh3ZWJLaXRNZWRpYVNyYykpOwot
ICAgIFN0cmVhbSogc3RyZWFtID0gZ2V0U3RyZWFtQnlBcHBzcmMod2ViS2l0TWVkaWFTcmMsIEdT
VF9FTEVNRU5UKGFwcHNyYykpOworc3RydWN0IFdlYktpdE1lZGlhU3JjUGFkIHsKKyAgICBHc3RQ
YWQgcGFyZW50OworICAgIFdlYktpdE1lZGlhU3JjUGFkUHJpdmF0ZSogcHJpdjsKK307CiAKLSAg
ICAvLyBUaGlzIGNhbGxiYWNrIG1pZ2h0IGhhdmUgYmVlbiBzY2hlZHVsZWQgZnJvbSBhIGNoaWxk
IHRocmVhZCBiZWZvcmUgdGhlIHN0cmVhbSB3YXMgcmVtb3ZlZC4KLSAgICAvLyBUaGVuLCB0aGUg
cmVtb3ZhbCBjb2RlIG1pZ2h0IGhhdmUgcnVuLCBhbmQgbGF0ZXIgdGhpcyBjYWxsYmFjay4KLSAg
ICAvLyBUaGlzIGNoZWNrIHNvbHZlcyB0aGUgcmFjZSBjb25kaXRpb24uCi0gICAgaWYgKCFzdHJl
YW0gfHwgc3RyZWFtLT50eXBlID09IFdlYkNvcmU6OkludmFsaWQpCi0gICAgICAgIHJldHVybjsK
K3N0cnVjdCBXZWJLaXRNZWRpYVNyY1BhZENsYXNzIHsKKyAgICBHc3RQYWRDbGFzcyBwYXJlbnQ7
Cit9OworCituYW1lc3BhY2UgV1RGIHsKIAotICAgIHN0cmVhbS0+c291cmNlQnVmZmVyLT5zZXRS
ZWFkeUZvck1vcmVTYW1wbGVzKGZhbHNlKTsKK3RlbXBsYXRlPD4gR1JlZlB0cjxXZWJLaXRNZWRp
YVNyY1BhZD4gYWRvcHRHUmVmKFdlYktpdE1lZGlhU3JjUGFkKiBwdHIpCit7CisgICAgQVNTRVJU
KCFwdHIgfHwgIWdfb2JqZWN0X2lzX2Zsb2F0aW5nKHB0cikpOworICAgIHJldHVybiBHUmVmUHRy
PFdlYktpdE1lZGlhU3JjUGFkPihwdHIsIEdSZWZQdHJBZG9wdCk7CiB9CiAKLXN0YXRpYyBnYm9v
bGVhbiBlbmFibGVkQXBwc3JjU2Vla0RhdGEoR3N0QXBwU3JjKiwgZ3VpbnQ2NCwgZ3BvaW50ZXIg
dXNlckRhdGEpCit0ZW1wbGF0ZTw+IFdlYktpdE1lZGlhU3JjUGFkKiByZWZHUHRyPFdlYktpdE1l
ZGlhU3JjUGFkPihXZWJLaXRNZWRpYVNyY1BhZCogcHRyKQogewotICAgIEFTU0VSVChXVEY6Omlz
TWFpblRocmVhZCgpKTsKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZl9zaW5r
KEdTVF9PQkpFQ1QocHRyKSk7CiAKLSAgICBXZWJLaXRNZWRpYVNyYyogd2ViS2l0TWVkaWFTcmMg
PSBzdGF0aWNfY2FzdDxXZWJLaXRNZWRpYVNyYyo+KHVzZXJEYXRhKTsKKyAgICByZXR1cm4gcHRy
OworfQorCit0ZW1wbGF0ZTw+IHZvaWQgZGVyZWZHUHRyPFdlYktpdE1lZGlhU3JjUGFkPihXZWJL
aXRNZWRpYVNyY1BhZCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9vYmplY3Rf
dW5yZWYocHRyKTsKK30KIAotICAgIEFTU0VSVChXRUJLSVRfSVNfTUVESUFfU1JDKHdlYktpdE1l
ZGlhU3JjKSk7Cit9IC8vIG5hbWVzcGFjZSBXVEYKIAotICAgIEdTVF9PQkpFQ1RfTE9DSyh3ZWJL
aXRNZWRpYVNyYyk7Ci0gICAgd2ViS2l0TWVkaWFTcmMtPnByaXYtPmFwcHNyY1NlZWtEYXRhQ291
bnQrKzsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CitzdGF0aWMgR1R5
cGUgd2Via2l0X21lZGlhX3NyY19wYWRfZ2V0X3R5cGUoKTsKK1dFQktJVF9ERUZJTkVfVFlQRShX
ZWJLaXRNZWRpYVNyY1BhZCwgd2Via2l0X21lZGlhX3NyY19wYWQsIEdTVF9UWVBFX1BBRCk7Cisj
ZGVmaW5lIFdFQktJVF9UWVBFX01FRElBX1NSQ19QQUQgKHdlYmtpdF9tZWRpYV9zcmNfcGFkX2dl
dF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9NRURJQV9TUkNfUEFEKG9iaikgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9NRURJQV9TUkNfUEFELCBXZWJLaXRN
ZWRpYVNyY1BhZCkpCiAKLSAgICByZXR1cm4gVFJVRTsKK3N0YXRpYyB2b2lkIHdlYmtpdF9tZWRp
YV9zcmNfcGFkX2NsYXNzX2luaXQoV2ViS2l0TWVkaWFTcmNQYWRDbGFzcyopCit7CiB9CiAKLXN0
YXRpYyBTdHJlYW0qIGdldFN0cmVhbUJ5QXBwc3JjKFdlYktpdE1lZGlhU3JjKiBzb3VyY2UsIEdz
dEVsZW1lbnQqIGFwcHNyYykKK1dFQktJVF9ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0TWVk
aWFTcmMsIHdlYmtpdF9tZWRpYV9zcmMsIEdTVF9UWVBFX0VMRU1FTlQsCisgICAgR19JTVBMRU1F
TlRfSU5URVJGQUNFKEdTVF9UWVBFX1VSSV9IQU5ETEVSLCB3ZWJLaXRNZWRpYVNyY1VyaUhhbmRs
ZXJJbml0KTsKKyAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfbWVkaWFfc3JjX2Rl
YnVnLCAid2Via2l0bWVkaWFzcmMiLCAwLCAiV2ViS2l0IE1TRSBzb3VyY2UgZWxlbWVudCIpKTsK
Kworc3RydWN0IFN0cmVhbSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTdHJlYW0+IHsK
KyAgICBTdHJlYW0oV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSwgR1JlZlB0cjxHc3RQYWQ+JiYgcGFk
LCBSZWY8TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcj4mJiB0cmFjaywgR1JlZlB0cjxHc3RTdHJl
YW0+JiYgc3RyZWFtSW5mbykKKyAgICAgICAgOiBzb3VyY2Uoc291cmNlKQorICAgICAgICAsIHBh
ZChXVEZNb3ZlKHBhZCkpCisgICAgICAgICwgdHJhY2soV1RGTW92ZSh0cmFjaykpCisgICAgICAg
ICwgc3RyZWFtSW5mbyhXVEZNb3ZlKHN0cmVhbUluZm8pKQorICAgICAgICAsIHN0cmVhbWluZ01l
bWJlcnNEYXRhTXV0ZXgoR1JlZlB0cih0aGlzLT50cmFjay0+aW5pdGlhbENhcHMoKSksIHNvdXJj
ZS0+cHJpdi0+c3RhcnRUaW1lLCBzb3VyY2UtPnByaXYtPnJhdGUpCisgICAgeworICAgICAgICBB
U1NFUlQodGhpcy0+dHJhY2stPmluaXRpYWxDYXBzKCkpOworICAgIH0KKworICAgIFdlYktpdE1l
ZGlhU3JjKiBjb25zdCBzb3VyY2U7CisgICAgR1JlZlB0cjxHc3RQYWQ+IGNvbnN0IHBhZDsKKyAg
ICBSZWY8TWVkaWFTb3VyY2VUcmFja0dTdHJlYW1lcj4gdHJhY2s7CisgICAgR1JlZlB0cjxHc3RT
dHJlYW0+IHN0cmVhbUluZm87CisKKyAgICBzdHJ1Y3QgU3RyZWFtaW5nTWVtYmVycyB7CisgICAg
ICAgIFN0cmVhbWluZ01lbWJlcnMoR1JlZlB0cjxHc3RDYXBzPiYmIGluaXRpYWxDYXBzLCBHc3RD
bG9ja1RpbWUgc3RhcnRUaW1lLCBkb3VibGUgcmF0ZSkKKyAgICAgICAgICAgIDogcGVuZGluZ0lu
aXRpYWxDYXBzKFdURk1vdmUoaW5pdGlhbENhcHMpKQorICAgICAgICB7CisgICAgICAgICAgICBn
c3Rfc2VnbWVudF9pbml0KCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOworICAgICAgICAgICAg
c2VnbWVudC5zdGFydCA9IHNlZ21lbnQudGltZSA9IHN0YXJ0VGltZTsKKyAgICAgICAgICAgIHNl
Z21lbnQucmF0ZSA9IHJhdGU7CisgICAgICAgICAgICBBU1NFUlQocGVuZGluZ0luaXRpYWxDYXBz
KTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaGFzUHVzaGVkU3RyZWFtQ29sbGVjdGlvbkV2
ZW50IHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCB3YXNTdHJlYW1TdGFydFNlbnQgeyBmYWxzZSB9
OworICAgICAgICBib29sIGRvZXNOZWVkU2VnbWVudEV2ZW50IHsgdHJ1ZSB9OworICAgICAgICBi
b29sIGhhc1B1c2hlZEZpcnN0QnVmZmVyIHsgZmFsc2UgfTsgLy8gVXNlZCB0byBnZXQgYSBwaXBl
bGluZSBkdW1wIG9mIHRoZSBwaXBlbGluZSBiZWZvcmUgYnVmZmVycyBhcmUgZmxvd2luZy4KKyAg
ICAgICAgR3N0U2VnbWVudCBzZWdtZW50OworICAgICAgICBHUmVmUHRyPEdzdENhcHM+IHBlbmRp
bmdJbml0aWFsQ2FwczsKKyAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBwcmV2aW91c0NhcHM7IC8v
IENhcHMgZnJvbSBlbnF1ZXVlZCBzYW1wbGVzIGFyZSBjb21wYXJlZCB0byB0aGVzZSB0byBwdXNo
IENBUFMgZXZlbnRzIGFzIG5lZWRlZC4KKyAgICAgICAgQ29uZGl0aW9uIHBhZExpbmtlZE9yRmx1
c2hlZENvbmRpdGlvbjsKKyAgICAgICAgQ29uZGl0aW9uIHF1ZXVlQ2hhbmdlZE9yRmx1c2hlZENv
bmRpdGlvbjsKKyAgICAgICAgYm9vbCBpc0ZsdXNoaW5nIHsgZmFsc2UgfTsKKworICAgICAgICAv
LyBGbHVzaGVzIGJlZm9yZSBhbnkgYnVmZmVyIGhhcyBiZWVuIHBvcHBlZCBmcm9tIHRoZSBxdWV1
ZSBhbmQgc2VudCBkb3duc3RyZWFtIGNhbiBiZSBhdm9pZGVkIGp1c3QKKyAgICAgICAgLy8gYnkg
Y2xlYXJpbmcgdGhlIHF1ZXVlLgorICAgICAgICBib29sIGhhc1BvcHBlZEZpcnN0T2JqZWN0IHsg
ZmFsc2UgfTsKKyAgICB9OworICAgIERhdGFNdXRleDxTdHJlYW1pbmdNZW1iZXJzPiBzdHJlYW1p
bmdNZW1iZXJzRGF0YU11dGV4OworfTsKKworc3RhdGljIEdSZWZQdHI8R3N0RWxlbWVudD4gZmlu
ZFBpcGVsaW5lKEdSZWZQdHI8R3N0RWxlbWVudD4gZWxlbWVudCkKIHsKLSAgICBmb3IgKFN0cmVh
bSogc3RyZWFtIDogc291cmNlLT5wcml2LT5zdHJlYW1zKSB7Ci0gICAgICAgIGlmIChzdHJlYW0t
PmFwcHNyYyA9PSBhcHBzcmMpCi0gICAgICAgICAgICByZXR1cm4gc3RyZWFtOworICAgIHdoaWxl
ICh0cnVlKSB7CisgICAgICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gcGFyZW50RWxlbWVudCA9IGFk
b3B0R1JlZihHU1RfRUxFTUVOVChnc3RfZWxlbWVudF9nZXRfcGFyZW50KGVsZW1lbnQuZ2V0KCkp
KSk7CisgICAgICAgIGlmICghcGFyZW50RWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBlbGVt
ZW50OworICAgICAgICBlbGVtZW50ID0gcGFyZW50RWxlbWVudDsKICAgICB9Ci0gICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdE1lZGlhU3JjLCB3
ZWJraXRfbWVkaWFfc3JjLCBHU1RfVFlQRV9CSU4sCi0gICAgR19JTVBMRU1FTlRfSU5URVJGQUNF
KEdTVF9UWVBFX1VSSV9IQU5ETEVSLCB3ZWJLaXRNZWRpYVNyY1VyaUhhbmRsZXJJbml0KTsKLSAg
ICBXRUJLSVRfTUVESUFfU1JDX0NBVEVHT1JZX0lOSVQpOworc3RhdGljIEdzdFN0cmVhbVR5cGUg
Z3N0U3RyZWFtVHlwZShUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGUgdHlwZSkK
K3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFt
ZXI6OlRyYWNrVHlwZTo6VmlkZW86CisgICAgICAgIHJldHVybiBHU1RfU1RSRUFNX1RZUEVfVklE
RU87CisgICAgY2FzZSBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OkF1ZGlv
OgorICAgICAgICByZXR1cm4gR1NUX1NUUkVBTV9UWVBFX0FVRElPOworICAgIGNhc2UgVHJhY2tQ
cml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpUZXh0OgorICAgICAgICByZXR1cm4gR1NU
X1NUUkVBTV9UWVBFX1RFWFQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR1NUX0VSUk9SKCJSZWNl
aXZlZCB1bmV4cGVjdGVkIHN0cmVhbSB0eXBlIik7CisgICAgICAgIHJldHVybiBHU1RfU1RSRUFN
X1RZUEVfVU5LTk9XTjsKKyAgICB9Cit9CiAKLWd1aW50IHdlYktpdE1lZGlhU3JjU2lnbmFsc1tM
QVNUX1NJR05BTF0gPSB7IDAgfTsKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCitzdGF0
aWMgY29uc3QgY2hhciogc3RyZWFtVHlwZVRvU3RyaW5nKFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFt
ZXI6OlRyYWNrVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHJh
Y2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpBdWRpbzoKKyAgICAgICAgcmV0dXJu
ICJBdWRpbyI7CisgICAgY2FzZSBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6
OlZpZGVvOgorICAgICAgICByZXR1cm4gIlZpZGVvIjsKKyAgICBjYXNlIFRyYWNrUHJpdmF0ZUJh
c2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6VGV4dDoKKyAgICAgICAgcmV0dXJuICJUZXh0IjsKKyAg
ICBkZWZhdWx0OgorICAgIGNhc2UgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBl
OjpVbmtub3duOgorICAgICAgICByZXR1cm4gIlVua25vd24iOworICAgIH0KK30KKyNlbmRpZiAv
LyBHU1RfRElTQUJMRV9HU1RfREVCVUcKIAogc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX3NyY19j
bGFzc19pbml0KFdlYktpdE1lZGlhU3JjQ2xhc3MqIGtsYXNzKQogewogICAgIEdPYmplY3RDbGFz
cyogb2tsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOwogICAgIEdzdEVsZW1lbnRDbGFzcyog
ZWtsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1Moa2xhc3MpOwogCisgICAgb2tsYXNzLT5jb25zdHJ1
Y3RlZCA9IHdlYktpdE1lZGlhU3JjQ29uc3RydWN0ZWQ7CiAgICAgb2tsYXNzLT5maW5hbGl6ZSA9
IHdlYktpdE1lZGlhU3JjRmluYWxpemU7Ci0gICAgb2tsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJL
aXRNZWRpYVNyY1NldFByb3BlcnR5OwogICAgIG9rbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2ViS2l0
TWVkaWFTcmNHZXRQcm9wZXJ0eTsKIAotICAgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVt
cGxhdGUoZWtsYXNzLCBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQoJnNyY1RlbXBsYXRlKSk7
CisgICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGVfd2l0aF9ndHlw
ZShla2xhc3MsICZzcmNUZW1wbGF0ZSwgd2Via2l0X21lZGlhX3NyY19wYWRfZ2V0X3R5cGUoKSk7
CiAKLSAgICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhKGVrbGFzcywgIldl
YktpdCBNZWRpYSBzb3VyY2UgZWxlbWVudCIsICJTb3VyY2UiLCAiSGFuZGxlcyBCbG9iIHVyaXMi
LCAiU3RlcGhhbmUgSmFkYXVkIDxzamFkYXVkQHNpaS5mcj4sIFNlYmFzdGlhbiBEcsO2Z2UgPHNl
YmFzdGlhbkBjZW50cmljdWxhci5jb20+LCBFbnJpcXVlIE9jYcOxYSBHb256w6FsZXogPGVvY2Fu
aGFAaWdhbGlhLmNvbT4iKTsKKyAgICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFk
YXRhKGVrbGFzcywgIldlYktpdCBNZWRpYVNvdXJjZSBzb3VyY2UgZWxlbWVudCIsICJTb3VyY2Uv
TmV0d29yayIsICJGZWVkcyBzYW1wbGVzIGNvbWluZyBmcm9tIFdlYktpdCBNZWRpYVNvdXJjZSBv
YmplY3QiLCAiSWdhbGlhIDxhYm95YUBpZ2FsaWEuY29tPiIpOwogCi0gICAgLy8gQWxsb3dzIHNl
dHRpbmcgdGhlIHVyaSB1c2luZyB0aGUgJ2xvY2F0aW9uJyBwcm9wZXJ0eSwgd2hpY2ggaXMgdXNl
ZCBmb3IgZXhhbXBsZSBieSBnc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpKCkuCi0gICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShva2xhc3MsCi0gICAgICAgIFBST1BfTE9DQVRJT04s
Ci0gICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoImxvY2F0aW9uIiwgImxvY2F0aW9uIiwgIkxv
Y2F0aW9uIHRvIHJlYWQgZnJvbSIsIG51bGxwdHIsCi0gICAgICAgIEdQYXJhbUZsYWdzKEdfUEFS
QU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpKTsKKyAgICBla2xhc3MtPmNo
YW5nZV9zdGF0ZSA9IHdlYktpdE1lZGlhU3JjQ2hhbmdlU3RhdGU7CisgICAgZWtsYXNzLT5zZW5k
X2V2ZW50ID0gd2ViS2l0TWVkaWFTcmNTZW5kRXZlbnQ7CiAgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eShva2xhc3MsCiAgICAgICAgIFBST1BfTl9BVURJTywKICAgICAgICAgZ19w
YXJhbV9zcGVjX2ludCgibi1hdWRpbyIsICJOdW1iZXIgQXVkaW8iLCAiVG90YWwgbnVtYmVyIG9m
IGF1ZGlvIHN0cmVhbXMiLApAQCAtMjIxLDQzMiArMjY1LDUxMyBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRfbWVkaWFfc3JjX2NsYXNzX2luaXQoV2ViS2l0TWVkaWFTcmNDbGFzcyoga2xhc3MpCiAgICAg
ICAgIFBST1BfTl9URVhULAogICAgICAgICBnX3BhcmFtX3NwZWNfaW50KCJuLXRleHQiLCAiTnVt
YmVyIFRleHQiLCAiVG90YWwgbnVtYmVyIG9mIHRleHQgc3RyZWFtcyIsCiAgICAgICAgIDAsIEdf
TUFYSU5ULCAwLCBHUGFyYW1GbGFncyhHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNf
U1RSSU5HUykpKTsKLQotICAgIHdlYktpdE1lZGlhU3JjU2lnbmFsc1tTSUdOQUxfVklERU9fQ0hB
TkdFRF0gPQotICAgICAgICBnX3NpZ25hbF9uZXcoInZpZGVvLWNoYW5nZWQiLCBHX1RZUEVfRlJP
TV9DTEFTUyhva2xhc3MpLAotICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKLSAgICAgICAgR19T
VFJVQ1RfT0ZGU0VUKFdlYktpdE1lZGlhU3JjQ2xhc3MsIHZpZGVvQ2hhbmdlZCksIG51bGxwdHIs
IG51bGxwdHIsCi0gICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9O
RSwgMCwgR19UWVBFX05PTkUpOwotICAgIHdlYktpdE1lZGlhU3JjU2lnbmFsc1tTSUdOQUxfQVVE
SU9fQ0hBTkdFRF0gPQotICAgICAgICBnX3NpZ25hbF9uZXcoImF1ZGlvLWNoYW5nZWQiLCBHX1RZ
UEVfRlJPTV9DTEFTUyhva2xhc3MpLAotICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKLSAgICAg
ICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdE1lZGlhU3JjQ2xhc3MsIGF1ZGlvQ2hhbmdlZCksIG51
bGxwdHIsIG51bGxwdHIsCi0gICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZ
UEVfTk9ORSwgMCwgR19UWVBFX05PTkUpOwotICAgIHdlYktpdE1lZGlhU3JjU2lnbmFsc1tTSUdO
QUxfVEVYVF9DSEFOR0VEXSA9Ci0gICAgICAgIGdfc2lnbmFsX25ldygidGV4dC1jaGFuZ2VkIiwg
R19UWVBFX0ZST01fQ0xBU1Mob2tsYXNzKSwKLSAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCi0g
ICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRNZWRpYVNyY0NsYXNzLCB0ZXh0Q2hhbmdlZCks
IG51bGxwdHIsIG51bGxwdHIsCi0gICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBH
X1RZUEVfTk9ORSwgMCwgR19UWVBFX05PTkUpOwotCi0gICAgZWtsYXNzLT5jaGFuZ2Vfc3RhdGUg
PSB3ZWJLaXRNZWRpYVNyY0NoYW5nZVN0YXRlOwotCi0gICAgZ190eXBlX2NsYXNzX2FkZF9wcml2
YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0TWVkaWFTcmNQcml2YXRlKSk7CiB9CiAKLXN0YXRpYyBH
c3RGbG93UmV0dXJuIHdlYmtpdE1lZGlhU3JjQ2hhaW4oR3N0UGFkKiBwYWQsIEdzdE9iamVjdCog
cGFyZW50LCBHc3RCdWZmZXIqIGJ1ZmZlcikKK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjQ29u
c3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogewotICAgIEdSZWZQdHI8V2ViS2l0TWVkaWFTcmM+
IHNlbGYgPSBhZG9wdEdSZWYoV0VCS0lUX01FRElBX1NSQyhnc3Rfb2JqZWN0X2dldF9wYXJlbnQo
cGFyZW50KSkpOworICAgIEdTVF9DQUxMX1BBUkVOVChHX09CSkVDVF9DTEFTUywgY29uc3RydWN0
ZWQsIChvYmplY3QpKTsKIAotICAgIHJldHVybiBnc3RfZmxvd19jb21iaW5lcl91cGRhdGVfcGFk
X2Zsb3coc2VsZi0+cHJpdi0+Zmxvd0NvbWJpbmVyLmdldCgpLCBwYWQsIGdzdF9wcm94eV9wYWRf
Y2hhaW5fZGVmYXVsdChwYWQsIEdTVF9PQkpFQ1Qoc2VsZi5nZXQoKSksIGJ1ZmZlcikpOworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgR1NUX09CSkVDVF9GTEFHX1NFVChvYmplY3Qs
IEdTVF9FTEVNRU5UX0ZMQUdfU09VUkNFKTsKIH0KIAotc3RhdGljIHZvaWQgd2Via2l0X21lZGlh
X3NyY19pbml0KFdlYktpdE1lZGlhU3JjKiBzb3VyY2UpCitzdGF0aWMgdm9pZCB3ZWJLaXRNZWRp
YVNyY0ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKIHsKLSAgICBzb3VyY2UtPnByaXYgPSBXRUJL
SVRfTUVESUFfU1JDX0dFVF9QUklWQVRFKHNvdXJjZSk7Ci0gICAgbmV3IChzb3VyY2UtPnByaXYp
IFdlYktpdE1lZGlhU3JjUHJpdmF0ZSgpOwotICAgIHNvdXJjZS0+cHJpdi0+c2Vla1RpbWUgPSBN
ZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7Ci0gICAgc291cmNlLT5wcml2LT5hcHBzcmNTZWVrRGF0
YUNvdW50ID0gMDsKLSAgICBzb3VyY2UtPnByaXYtPmFwcHNyY05lZWREYXRhQ291bnQgPSAwOwot
ICAgIHNvdXJjZS0+cHJpdi0+YXBwc3JjU2Vla0RhdGFOZXh0QWN0aW9uID0gTm90aGluZzsKLSAg
ICBzb3VyY2UtPnByaXYtPmZsb3dDb21iaW5lciA9IEdVbmlxdWVQdHI8R3N0Rmxvd0NvbWJpbmVy
Pihnc3RfZmxvd19jb21iaW5lcl9uZXcoKSk7Ci0gICAgc291cmNlLT5wcml2LT5ub3RpZmllciA9
IFdlYkNvcmU6Ok1haW5UaHJlYWROb3RpZmllcjxXZWJLaXRNZWRpYVNyY01haW5UaHJlYWROb3Rp
ZmljYXRpb24+OjpjcmVhdGUoKTsKLQotICAgIC8vIE5vIG5lZWQgdG8gcmVzZXQgU3RyZWFtLmFw
cHNyY05lZWREYXRhRmxhZyBiZWNhdXNlIHRoZXJlIGFyZSBubyBTdHJlYW1zIGF0IHRoaXMgcG9p
bnQgeWV0LgorICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBXZWJLaXRNZWRpYVNy
Yyogc291cmNlID0gV0VCS0lUX01FRElBX1NSQyhvYmplY3QpOworICAgIHNvdXJjZS0+cHJpdi0+
fldlYktpdE1lZGlhU3JjUHJpdmF0ZSgpOworICAgIEdTVF9DQUxMX1BBUkVOVChHX09CSkVDVF9D
TEFTUywgZmluYWxpemUsIChvYmplY3QpKTsKIH0KIAotdm9pZCB3ZWJLaXRNZWRpYVNyY0ZpbmFs
aXplKEdPYmplY3QqIG9iamVjdCkKK3ZvaWQgd2ViS2l0TWVkaWFTcmNFbWl0U3RyZWFtcyhXZWJL
aXRNZWRpYVNyYyogc291cmNlLCBjb25zdCBWZWN0b3I8UmVmUHRyPE1lZGlhU291cmNlVHJhY2tH
U3RyZWFtZXI+PiYgdHJhY2tzKQogewotICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghc291cmNlLT5wcml2LT5p
c1N0YXJ0ZWQoKSk7CisgICAgR1NUX0RFQlVHX09CSkVDVChzb3VyY2UsICJFbWl0dGluZyBTVFJF
QU1fQ09MTEVDVElPTiIpOwogCi0gICAgV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSA9IFdFQktJVF9N
RURJQV9TUkMob2JqZWN0KTsKLSAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzb3Vy
Y2UtPnByaXY7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUKHNvdXJjZSwgIkZpbmFsaXppbmcgJXAi
LCBzb3VyY2UpOwotICAgIFZlY3RvcjxTdHJlYW0qPiBvbGRTdHJlYW1zOwotICAgIHNvdXJjZS0+
cHJpdi0+c3RyZWFtcy5zd2FwKG9sZFN0cmVhbXMpOworICAgIHNvdXJjZS0+cHJpdi0+Y29sbGVj
dGlvbiA9IGFkb3B0R1JlZihnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fbmV3KCJXZWJLaXRNZWRpYVNy
YyIpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYWNrIDogdHJhY2tzKSB7CisgICAgICAgIEdT
VF9ERUJVR19PQkpFQ1Qoc291cmNlLCAiQWRkaW5nIHN0cmVhbSB3aXRoIHRyYWNrSWQgJyVzJyBv
ZiB0eXBlICVzIHdpdGggY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgdHJhY2stPnRyYWNrSWQoKS5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpLCBzdHJlYW1UeXBlVG9TdHJpbmcodHJhY2stPnR5cGUoKSks
IHRyYWNrLT5pbml0aWFsQ2FwcygpLmdldCgpKTsKIAotICAgIGZvciAoU3RyZWFtKiBzdHJlYW0g
OiBvbGRTdHJlYW1zKQotICAgICAgICB3ZWJLaXRNZWRpYVNyY0ZyZWVTdHJlYW0oc291cmNlLCBz
dHJlYW0pOworICAgICAgICBHUmVmUHRyPFdlYktpdE1lZGlhU3JjUGFkPiBwYWQgPSBXRUJLSVRf
TUVESUFfU1JDX1BBRChnX29iamVjdF9uZXcod2Via2l0X21lZGlhX3NyY19wYWRfZ2V0X3R5cGUo
KSwgIm5hbWUiLCBtYWtlU3RyaW5nKCJzcmNfIiwgdHJhY2stPnRyYWNrSWQoKSkudXRmOCgpLmRh
dGEoKSwgImRpcmVjdGlvbiIsIEdTVF9QQURfU1JDLCBOVUxMKSk7CisgICAgICAgIGdzdF9wYWRf
c2V0X2FjdGl2YXRlbW9kZV9mdW5jdGlvbihHU1RfUEFEKHBhZC5nZXQoKSksIHdlYktpdE1lZGlh
U3JjQWN0aXZhdGVNb2RlKTsKIAotICAgIHByaXYtPnNlZWtUaW1lID0gTWVkaWFUaW1lOjppbnZh
bGlkVGltZSgpOworICAgICAgICBBU1NFUlQodHJhY2stPmluaXRpYWxDYXBzKCkpOworICAgICAg
ICBSZWZQdHI8U3RyZWFtPiBzdHJlYW0gPSBhZG9wdFJlZihuZXcgU3RyZWFtKHNvdXJjZSwgR1Jl
ZlB0cjxHc3RQYWQ+KEdTVF9QQUQocGFkLmdldCgpKSksIG1ha2VSZWYoKnRyYWNrKSwKKyAgICAg
ICAgICAgIGFkb3B0R1JlZihnc3Rfc3RyZWFtX25ldyh0cmFjay0+dHJhY2tJZCgpLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCksIHRyYWNrLT5pbml0aWFsQ2FwcygpLmdldCgpLCBnc3RTdHJlYW1UeXBl
KHRyYWNrLT50eXBlKCkpLCBHU1RfU1RSRUFNX0ZMQUdfU0VMRUNUKSkpKTsKKyAgICAgICAgcGFk
LT5wcml2LT5zdHJlYW0gPSBzdHJlYW07CiAKLSAgICBzb3VyY2UtPnByaXYtPm5vdGlmaWVyLT5p
bnZhbGlkYXRlKCk7CisgICAgICAgIGdzdF9zdHJlYW1fY29sbGVjdGlvbl9hZGRfc3RyZWFtKHNv
dXJjZS0+cHJpdi0+Y29sbGVjdGlvbi5nZXQoKSwgR1JlZlB0cjxHc3RTdHJlYW0+KHN0cmVhbS0+
c3RyZWFtSW5mby5nZXQoKSkubGVha1JlZigpKTsKKyAgICAgICAgc291cmNlLT5wcml2LT5zdHJl
YW1zLnNldCh0cmFjay0+dHJhY2tJZCgpLCBXVEZNb3ZlKHN0cmVhbSkpOworICAgIH0KIAotICAg
IGlmIChwcml2LT5tZWRpYVBsYXllclByaXZhdGUpCi0gICAgICAgIHdlYktpdE1lZGlhU3JjU2V0
TWVkaWFQbGF5ZXJQcml2YXRlKHNvdXJjZSwgbnVsbHB0cik7CisgICAgZ3N0X2VsZW1lbnRfcG9z
dF9tZXNzYWdlKEdTVF9FTEVNRU5UKHNvdXJjZSksIGdzdF9tZXNzYWdlX25ld19zdHJlYW1fY29s
bGVjdGlvbihHU1RfT0JKRUNUKHNvdXJjZSksIHNvdXJjZS0+cHJpdi0+Y29sbGVjdGlvbi5nZXQo
KSkpOwogCi0gICAgLy8gV2UgdXNlZCBhIHBsYWNlbWVudCBuZXcgZm9yIGNvbnN0cnVjdGlvbiwg
dGhlIGRlc3RydWN0b3Igd29uJ3QgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkuCi0gICAgcHJpdi0+
fl9XZWJLaXRNZWRpYVNyY1ByaXZhdGUoKTsKKyAgICBmb3IgKGNvbnN0IFJlZlB0cjxTdHJlYW0+
JiBzdHJlYW06IHNvdXJjZS0+cHJpdi0+c3RyZWFtcy52YWx1ZXMoKSkgeworICAgICAgICAvLyBX
b3JrYXJvdW5kOiBnc3RfZWxlbWVudF9hZGRfcGFkKCkgc2hvdWxkIGFscmVhZHkgY2FsbCBnc3Rf
cGFkX3NldF9hY3RpdmUoKSBpZiB0aGUgZWxlbWVudCBpcyBQQVVTRUQgb3IKKyAgICAgICAgLy8g
UExBWUlORy4gVW5mb3J0dW5hdGVseSwgYXMgb2YgR1N0cmVhbWVyIDEuMTguMiBpdCBkb2VzIHNv
IHdpdGggdGhlIGVsZW1lbnQgbG9jayB0YWtlbiwgY2F1c2luZyBhIGRlYWRsb2NrCisgICAgICAg
IC8vIGluIGdzdF9wYWRfc3RhcnRfdGFzaygpLCB3aG8gdHJpZXMgdG8gcG9zdCBhIGBzdHJlYW0t
c3RhdHVzYCBtZXNzYWdlIGluIHRoZSBlbGVtZW50LCB3aGljaCBhbHNvIHJlcXVpcmVzCisgICAg
ICAgIC8vIHRoZSBlbGVtZW50IGxvY2suIEFjdGl2YXRpbmcgdGhlIHBhZCBiZWZvcmVoYW5kIGF2
b2lkcyB0aGF0IGNvZGVwYXRoLgorICAgICAgICAvLyBodHRwczovL2dpdGxhYi5mcmVlZGVza3Rv
cC5vcmcvZ3N0cmVhbWVyL2dzdHJlYW1lci8tL21lcmdlX3JlcXVlc3RzLzIxMAorICAgICAgICAv
LyBGSVhNRTogUmVtb3ZlIHRoaXMgd29ya2Fyb3VuZCB3aGVuIHRoZSBidWcgZ2V0cyBmaXhlZCBh
bmQgdmVyc2lvbnMgd2l0aG91dCB0aGUgYnVnIGFyZSBubyBsb25nZXIgaW4gdXNlLgorICAgICAg
ICBHc3RTdGF0ZSBzdGF0ZTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKEdTVF9FTEVN
RU5UKHNvdXJjZSksICZzdGF0ZSwgbnVsbHB0ciwgMCk7CisgICAgICAgIGlmIChzdGF0ZSA+IEdT
VF9TVEFURV9SRUFEWSkKKyAgICAgICAgICAgIGdzdF9wYWRfc2V0X2FjdGl2ZShHU1RfUEFEKHN0
cmVhbS0+cGFkLmdldCgpKSwgdHJ1ZSk7CiAKLSAgICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpFQ1Rf
Q0xBU1MsIGZpbmFsaXplLCAob2JqZWN0KSk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc291
cmNlLCAiQWRkaW5nIHBhZCAnJXMnIGZvciBzdHJlYW0gd2l0aCBuYW1lICclcyciLCBHU1RfT0JK
RUNUX05BTUUoc3RyZWFtLT5wYWQuZ2V0KCkpLCBzdHJlYW0tPnRyYWNrLT50cmFja0lkKCkuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoR1NUX0VM
RU1FTlQoc291cmNlKSwgR1NUX1BBRChzdHJlYW0tPnBhZC5nZXQoKSkpOworICAgIH0KKyAgICBH
U1RfREVCVUdfT0JKRUNUKHNvdXJjZSwgIkFsbCBwYWRzIGFkZGVkIik7CiB9CiAKLXZvaWQgd2Vi
S2l0TWVkaWFTcmNTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgY29u
c3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCitzdGF0aWMgdm9pZCB3ZWJLaXRN
ZWRpYVNyY1RlYXJEb3duU3RyZWFtKFdlYktpdE1lZGlhU3JjKiBzb3VyY2UsIGNvbnN0IEF0b21T
dHJpbmcmIG5hbWUpCiB7Ci0gICAgV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSA9IFdFQktJVF9NRURJ
QV9TUkMob2JqZWN0KTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIFN0cmVhbSog
c3RyZWFtID0gc291cmNlLT5wcml2LT5zdHJlYW1CeU5hbWUobmFtZSk7CisgICAgR1NUX0RFQlVH
X09CSkVDVChzb3VyY2UsICJUZWFyaW5nIGRvd24gc3RyZWFtICclcyciLCBuYW1lLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgc3dpdGNoIChwcm9wSWQpIHsKLSAgICBjYXNlIFBST1Bf
TE9DQVRJT046Ci0gICAgICAgIGdzdF91cmlfaGFuZGxlcl9zZXRfdXJpKHJlaW50ZXJwcmV0X2Nh
c3Q8R3N0VVJJSGFuZGxlcio+KHNvdXJjZSksIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSksIG51
bGxwdHIpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBzcGVjKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQorICAgIC8vIEZsdXNoIHRoZSBzb3VyY2UgZWxlbWVudCAqKmFuZCoqIGRv
d25zdHJlYW0uIFdlIHdhbnQgdG8gc3RvcCB0aGUgc3RyZWFtaW5nIHRocmVhZCBhbmQgZm9yIHRo
YXQgd2UgbmVlZCBhbGwgZWxlbWVudHMgZG93bnN0cmVhbSB0byBiZSBpZGxlLgorICAgIHdlYktp
dE1lZGlhU3JjU3RyZWFtRmx1c2goc3RyZWFtLCBmYWxzZSk7CisgICAgLy8gU3RvcCB0aGUgdGhy
ZWFkIG5vdy4KKyAgICBnc3RfcGFkX3NldF9hY3RpdmUoc3RyZWFtLT5wYWQuZ2V0KCksIGZhbHNl
KTsKKworICAgIGlmIChzb3VyY2UtPnByaXYtPmlzU3RhcnRlZCgpKQorICAgICAgICBnc3RfZWxl
bWVudF9yZW1vdmVfcGFkKEdTVF9FTEVNRU5UKHNvdXJjZSksIHN0cmVhbS0+cGFkLmdldCgpKTsK
KyAgICBzb3VyY2UtPnByaXYtPnN0cmVhbXMucmVtb3ZlKG5hbWUpOwogfQogCi12b2lkIHdlYktp
dE1lZGlhU3JjR2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1
ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQorc3RhdGljIGdib29sZWFuIHdlYktpdE1lZGlh
U3JjQWN0aXZhdGVNb2RlKEdzdFBhZCogcGFkLCBHc3RPYmplY3QqIHNvdXJjZSwgR3N0UGFkTW9k
ZSBtb2RlLCBnYm9vbGVhbiBhY3RpdmUpCiB7Ci0gICAgV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSA9
IFdFQktJVF9NRURJQV9TUkMob2JqZWN0KTsKLSAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHBy
aXYgPSBzb3VyY2UtPnByaXY7CisgICAgaWYgKG1vZGUgIT0gR1NUX1BBRF9NT0RFX1BVU0gpIHsK
KyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzb3VyY2UsICJVbmV4cGVjdGVkIHBhZCBtb2RlIGlu
IFdlYktpdE1lZGlhU3JjIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICBH
U1RfT0JKRUNUX0xPQ0soc291cmNlKTsKLSAgICBzd2l0Y2ggKHByb3BJZCkgewotICAgIGNhc2Ug
UFJPUF9MT0NBVElPTjoKLSAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCBwcml2LT5s
b2NhdGlvbi5nZXQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9OX0FVRElPOgot
ICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHByaXYtPm51bWJlck9mQXVkaW9TdHJlYW1z
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05fVklERU86Ci0gICAgICAgIGdfdmFs
dWVfc2V0X2ludCh2YWx1ZSwgcHJpdi0+bnVtYmVyT2ZWaWRlb1N0cmVhbXMpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFBST1BfTl9URVhUOgotICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFs
dWUsIHByaXYtPm51bWJlck9mVGV4dFN0cmVhbXMpOwotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBw
cm9wSWQsIHBzcGVjKTsKLSAgICAgICAgYnJlYWs7CisgICAgaWYgKGFjdGl2ZSkKKyAgICAgICAg
Z3N0X3BhZF9zdGFydF90YXNrKHBhZCwgd2ViS2l0TWVkaWFTcmNMb29wLCBwYWQsIG51bGxwdHIp
OworICAgIGVsc2UgeworICAgICAgICAvLyBVbmJsb2NrIHRoZSBzdHJlYW1pbmcgdGhyZWFkLgor
ICAgICAgICBSZWZQdHI8U3RyZWFtPiYgc3RyZWFtID0gV0VCS0lUX01FRElBX1NSQ19QQUQocGFk
KS0+cHJpdi0+c3RyZWFtOworICAgICAgICB7CisgICAgICAgICAgICBEYXRhTXV0ZXg8U3RyZWFt
OjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBzdHJlYW1pbmdNZW1iZXJzKHN0cmVh
bS0+c3RyZWFtaW5nTWVtYmVyc0RhdGFNdXRleCk7CisgICAgICAgICAgICBzdHJlYW1pbmdNZW1i
ZXJzLT5pc0ZsdXNoaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIHN0cmVhbWluZ01lbWJlcnMtPnBh
ZExpbmtlZE9yRmx1c2hlZENvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICAgICAgICAgIHN0cmVh
bWluZ01lbWJlcnMtPnF1ZXVlQ2hhbmdlZE9yRmx1c2hlZENvbmRpdGlvbi5ub3RpZnlPbmUoKTsK
KyAgICAgICAgfQorICAgICAgICAvLyBGb2xsb3dpbmcgZ3N0YmFzZXNyYyBpbXBsZW1lbnRhdGlv
biwgdGhpcyBjb2RlIGlzIG5vdCBmbHVzaGluZyBkb3duc3RyZWFtLgorICAgICAgICAvLyBJZiB0
aGVyZSBpcyBhbnkgcG9zc2liaWxpdHkgb2YgdGhlIHN0cmVhbWluZyB0aHJlYWQgYmVpbmcgYmxv
Y2tlZCBkb3duc3RyZWFtIHRoZSBjYWxsZXIgTVVTVCBmbHVzaCBiZWZvcmUuCisgICAgICAgIC8v
IE90aGVyd2lzZSBhIGRlYWRsb2NrIHdvdWxkIG9jY3VyIGFzIHRoZSBuZXh0IGZ1bmN0aW9uIHRy
aWVzIHRvIGpvaW4gdGhlIHRocmVhZC4KKyAgICAgICAgZ3N0X3BhZF9zdG9wX3Rhc2socGFkKTsK
KyAgICAgICAgeworICAgICAgICAgICAgRGF0YU11dGV4PFN0cmVhbTo6U3RyZWFtaW5nTWVtYmVy
cz46OkxvY2tlZFdyYXBwZXIgc3RyZWFtaW5nTWVtYmVycyhzdHJlYW0tPnN0cmVhbWluZ01lbWJl
cnNEYXRhTXV0ZXgpOworICAgICAgICAgICAgc3RyZWFtaW5nTWVtYmVycy0+aXNGbHVzaGluZyA9
IGZhbHNlOworICAgICAgICB9CiAgICAgfQotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNvdXJjZSk7
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgd2ViS2l0TWVkaWFTcmNEb0FzeW5jU3RhcnQo
V2ViS2l0TWVkaWFTcmMqIHNvdXJjZSkKK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjUGFkTGlu
a2VkKEdzdFBhZCogcGFkLCBHc3RQYWQqLCB2b2lkKikKIHsKLSAgICBzb3VyY2UtPnByaXYtPmFz
eW5jU3RhcnQgPSB0cnVlOwotICAgIEdTVF9CSU5fQ0xBU1MocGFyZW50X2NsYXNzKS0+aGFuZGxl
X21lc3NhZ2UoR1NUX0JJTihzb3VyY2UpLAotICAgICAgICBnc3RfbWVzc2FnZV9uZXdfYXN5bmNf
c3RhcnQoR1NUX09CSkVDVChzb3VyY2UpKSk7CisgICAgUmVmUHRyPFN0cmVhbT4mIHN0cmVhbSA9
IFdFQktJVF9NRURJQV9TUkNfUEFEKHBhZCktPnByaXYtPnN0cmVhbTsKKyAgICBEYXRhTXV0ZXg8
U3RyZWFtOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBzdHJlYW1pbmdNZW1iZXJz
KHN0cmVhbS0+c3RyZWFtaW5nTWVtYmVyc0RhdGFNdXRleCk7CisgICAgc3RyZWFtaW5nTWVtYmVy
cy0+cGFkTGlua2VkT3JGbHVzaGVkQ29uZGl0aW9uLm5vdGlmeU9uZSgpOwogfQogCi12b2lkIHdl
YktpdE1lZGlhU3JjRG9Bc3luY0RvbmUoV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSkKKy8vIENhbGxl
ZCB3aXRoIFNUUkVBTV9MT0NLLgorc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNMb29wKHZvaWQq
IHVzZXJEYXRhKQogewotICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IHNvdXJjZS0+
cHJpdjsKLSAgICBpZiAocHJpdi0+YXN5bmNTdGFydCkgewotICAgICAgICBHU1RfQklOX0NMQVNT
KHBhcmVudF9jbGFzcyktPmhhbmRsZV9tZXNzYWdlKEdTVF9CSU4oc291cmNlKSwKLSAgICAgICAg
ICAgIGdzdF9tZXNzYWdlX25ld19hc3luY19kb25lKEdTVF9PQkpFQ1Qoc291cmNlKSwgR1NUX0NM
T0NLX1RJTUVfTk9ORSkpOwotICAgICAgICBwcml2LT5hc3luY1N0YXJ0ID0gZmFsc2U7CisgICAg
R3N0UGFkKiBwYWQgPSBHU1RfUEFEKHVzZXJEYXRhKTsKKyAgICBSZWZQdHI8U3RyZWFtPiYgc3Ry
ZWFtID0gV0VCS0lUX01FRElBX1NSQ19QQUQocGFkKS0+cHJpdi0+c3RyZWFtOworCisgICAgRGF0
YU11dGV4PFN0cmVhbTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgc3RyZWFtaW5n
TWVtYmVycyhzdHJlYW0tPnN0cmVhbWluZ01lbWJlcnNEYXRhTXV0ZXgpOworICAgIGlmIChzdHJl
YW1pbmdNZW1iZXJzLT5pc0ZsdXNoaW5nKSB7CisgICAgICAgIGdzdF9wYWRfcGF1c2VfdGFzayhw
YWQpOworICAgICAgICByZXR1cm47CiAgICAgfQotfQogCi1Hc3RTdGF0ZUNoYW5nZVJldHVybiB3
ZWJLaXRNZWRpYVNyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0YXRlQ2hh
bmdlIHRyYW5zaXRpb24pCi17Ci0gICAgV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSA9IFdFQktJVF9N
RURJQV9TUkMoZWxlbWVudCk7Ci0gICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlKiBwcml2ID0gc291
cmNlLT5wcml2OworICAgIC8vIFNpbmNlIHRoZSBwYWQgY2FuIGFuZCB3aWxsIGJlIGFkZGVkIHdo
ZW4gdGhlIGVsZW1lbnQgaXMgaW4gUExBWUlORyBzdGF0ZSwgdGhpcyB0YXNrIGNhbiBzdGFydCBy
dW5uaW5nCisgICAgLy8gYmVmb3JlIHRoZSBwYWQgaXMgbGlua2VkLiBXYWl0IGZvciB0aGUgcGFk
IHRvIGJlIGxpbmtlZCB0byBhdm9pZCBidWZmZXJzIGJlaW5nIGxvc3QgdG8gbm90LWxpbmtlZCBl
cnJvcnMuCisgICAgR1NUX09CSkVDVF9MT0NLKHBhZCk7CisgICAgaWYgKCFHU1RfUEFEX0lTX0xJ
TktFRChwYWQpKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGFkLCAiV2FpdGluZyBmb3Ig
dGhlIHBhZCB0byBiZSBsaW5rZWQuLi4iKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChwYWQs
ICJsaW5rZWQiLCBHX0NBTExCQUNLKHdlYktpdE1lZGlhU3JjUGFkTGlua2VkKSwgbnVsbHB0cik7
CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHBhZCk7CiAKLSAgICBHU1RfREVCVUdfT0JKRUNU
KGVsZW1lbnQsICIlcyIsIGdzdF9zdGF0ZV9jaGFuZ2VfZ2V0X25hbWUodHJhbnNpdGlvbikpOwot
ICAgIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFE
WV9UT19QQVVTRUQ6Ci0gICAgICAgIHByaXYtPmFsbFRyYWNrc0NvbmZpZ3VyZWQgPSBmYWxzZTsK
LSAgICAgICAgd2ViS2l0TWVkaWFTcmNEb0FzeW5jU3RhcnQoc291cmNlKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHN0cmVhbWluZ01lbWJl
cnMtPnBhZExpbmtlZE9yRmx1c2hlZENvbmRpdGlvbi53YWl0KHN0cmVhbWluZ01lbWJlcnMubXV0
ZXgoKSk7CisKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHBh
ZCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4od2ViS2l0TWVkaWFTcmNQYWRMaW5rZWQpLCBudWxs
cHRyKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwYWQsICJGaW5pc2hlZCB3YWl0aW5nIGZv
ciB0aGUgcGFkIHRvIGJlIGxpbmtlZC4iKTsKKyAgICAgICAgaWYgKHN0cmVhbWluZ01lbWJlcnMt
PmlzRmx1c2hpbmcpIHsKKyAgICAgICAgICAgIGdzdF9wYWRfcGF1c2VfdGFzayhwYWQpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIEdTVF9PQkpF
Q1RfVU5MT0NLKHBhZCk7CisgICAgQVNTRVJUKGdzdF9wYWRfaXNfbGlua2VkKHBhZCkpOworCisg
ICAgLy8gQnkga2VlcGluZyB0aGUgbG9jayB3ZSBhcmUgZ3VhcmFudGVlZCB0aGF0IGEgZmx1c2gg
d2lsbCBub3QgaGFwcGVuIHdoaWxlIHdlIHNlbmQgZXNzZW50aWFsIGV2ZW50cy4KKyAgICAvLyBU
aGVzZSBldmVudHMgc2hvdWxkIG5ldmVyIGJsb2NrIGRvd25zdHJlYW0sIHNvIHRoZSBsb2NrIHNo
b3VsZCBiZSByZWxlYXNlZCBpbiBsaXR0bGUgdGltZSBpbiBldmVyeQorICAgIC8vIGNhc2UuCisK
KyAgICBpZiAoIXN0cmVhbWluZ01lbWJlcnMtPmhhc1B1c2hlZFN0cmVhbUNvbGxlY3Rpb25FdmVu
dCkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBhZCwgIlB1c2hpbmcgU1RSRUFNX0NPTExF
Q1RJT04gZXZlbnQuIik7CisgICAgICAgIGJvb2wgd2FzU3RyZWFtQ29sbGVjdGlvblNlbnQgPSBn
c3RfcGFkX3B1c2hfZXZlbnQoc3RyZWFtLT5wYWQuZ2V0KCksIGdzdF9ldmVudF9uZXdfc3RyZWFt
X2NvbGxlY3Rpb24oc3RyZWFtLT5zb3VyY2UtPnByaXYtPmNvbGxlY3Rpb24uZ2V0KCkpKTsKKyAg
ICAgICAgc3RyZWFtaW5nTWVtYmVycy0+aGFzUHVzaGVkU3RyZWFtQ29sbGVjdGlvbkV2ZW50ID0g
dHJ1ZTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwYWQsICJTVFJFQU1fQ09MTEVDVElPTiBl
dmVudCBoYXMgYmVlbiBwdXNoZWQsICVzIHdhcyByZXR1cm5lZC4iLCBib29sRm9yUHJpbnRpbmco
d2FzU3RyZWFtQ29sbGVjdGlvblNlbnQpKTsKKyAgICAgICAgLy8gSW5pdGlhbCBldmVudHMgbGlr
ZSB0aGlzIG11c3QgZ28gdGhyb3VnaCwgZmx1c2hlcyAoaW5jbHVkaW5nIHRlYXJpbmcgZG93biB0
aGUgZWxlbWVudCkgaXMgbm90IGFsbG93ZWQgdW50aWwKKyAgICAgICAgLy8gYGhhc1B1c2hlZEZp
cnN0QnVmZmVyYCBoYXMgYmVlbiBzZXQgdG8gdHJ1ZS4KKyAgICAgICAgQVNTRVJUKHdhc1N0cmVh
bUNvbGxlY3Rpb25TZW50KTsKKyAgICB9CisKKyAgICBpZiAoIXN0cmVhbWluZ01lbWJlcnMtPndh
c1N0cmVhbVN0YXJ0U2VudCkgeworICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IHN0cmVhbUlkIHsg
Z19zdHJkdXBfcHJpbnRmKCJtc2UvJXMiLCBzdHJlYW0tPnRyYWNrLT50cmFja0lkKCkuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSkgfTsKKyAgICAgICAgR1JlZlB0cjxHc3RFdmVudD4gZXZlbnQgPSBh
ZG9wdEdSZWYoZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQoc3RyZWFtSWQuZ2V0KCkpKTsKKyAg
ICAgICAgZ3N0X2V2ZW50X3NldF9ncm91cF9pZChldmVudC5nZXQoKSwgc3RyZWFtLT5zb3VyY2Ut
PnByaXYtPmdyb3VwSWQpOworICAgICAgICBnc3RfZXZlbnRfc2V0X3N0cmVhbShldmVudC5nZXQo
KSwgc3RyZWFtLT5zdHJlYW1JbmZvLmdldCgpKTsKKworICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHBhZCwgIlB1c2hpbmcgU1RSRUFNX1NUQVJUIGV2ZW50LiIpOworICAgICAgICBib29sIHdhc1N0
cmVhbVN0YXJ0U2VudCA9IGdzdF9wYWRfcHVzaF9ldmVudChwYWQsIGV2ZW50LmxlYWtSZWYoKSk7
CisgICAgICAgIHN0cmVhbWluZ01lbWJlcnMtPndhc1N0cmVhbVN0YXJ0U2VudCA9IHdhc1N0cmVh
bVN0YXJ0U2VudDsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwYWQsICJTVFJFQU1fU1RBUlQg
ZXZlbnQgcHVzaGVkLCAlcyB3YXMgcmV0dXJuZWQuIiwgYm9vbEZvclByaW50aW5nKHdhc1N0cmVh
bVN0YXJ0U2VudCkpOworICAgICAgICBBU1NFUlQod2FzU3RyZWFtU3RhcnRTZW50KTsKKyAgICB9
CisKKyAgICBpZiAoc3RyZWFtaW5nTWVtYmVycy0+cGVuZGluZ0luaXRpYWxDYXBzKSB7CisgICAg
ICAgIEdSZWZQdHI8R3N0RXZlbnQ+IGV2ZW50ID0gYWRvcHRHUmVmKGdzdF9ldmVudF9uZXdfY2Fw
cyhzdHJlYW1pbmdNZW1iZXJzLT5wZW5kaW5nSW5pdGlhbENhcHMuZ2V0KCkpKTsKKworICAgICAg
ICBHU1RfREVCVUdfT0JKRUNUKHBhZCwgIlB1c2hpbmcgaW5pdGlhbCBDQVBTIGV2ZW50OiAlIiBH
U1RfUFRSX0ZPUk1BVCwgc3RyZWFtaW5nTWVtYmVycy0+cGVuZGluZ0luaXRpYWxDYXBzLmdldCgp
KTsKKyAgICAgICAgYm9vbCB3YXNDYXBzRXZlbnRTZW50ID0gZ3N0X3BhZF9wdXNoX2V2ZW50KHBh
ZCwgZXZlbnQubGVha1JlZigpKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwYWQsICJQdXNo
ZWQgaW5pdGlhbCBDQVBTIGV2ZW50LCAlcyB3YXMgcmV0dXJuZWQuIiwgYm9vbEZvclByaW50aW5n
KHdhc0NhcHNFdmVudFNlbnQpKTsKKworICAgICAgICBzdHJlYW1pbmdNZW1iZXJzLT5wcmV2aW91
c0NhcHMgPSBXVEZNb3ZlKHN0cmVhbWluZ01lbWJlcnMtPnBlbmRpbmdJbml0aWFsQ2Fwcyk7Cisg
ICAgICAgIEFTU0VSVCghc3RyZWFtaW5nTWVtYmVycy0+cGVuZGluZ0luaXRpYWxDYXBzKTsKKyAg
ICB9CisKKyAgICBHUmVmUHRyPEdzdE1pbmlPYmplY3Q+IG9iamVjdDsKKyAgICB7CisgICAgICAg
IERhdGFNdXRleDxUcmFja1F1ZXVlPjo6TG9ja2VkV3JhcHBlciBxdWV1ZShzdHJlYW0tPnRyYWNr
LT5xdWV1ZURhdGFNdXRleCgpKTsKKyAgICAgICAgaWYgKCFxdWV1ZS0+aXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICBvYmplY3QgPSBxdWV1ZS0+cG9wKCk7CisgICAgICAgICAgICBzdHJlYW1pbmdN
ZW1iZXJzLT5oYXNQb3BwZWRGaXJzdE9iamVjdCA9IHRydWU7CisgICAgICAgICAgICBHU1RfVFJB
Q0VfT0JKRUNUKHBhZCwgIlF1ZXVlIG5vdCBlbXB0eSwgcG9wcGVkICUiIEdTVF9QVFJfRk9STUFU
LCBvYmplY3QuZ2V0KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcXVldWUtPm5v
dGlmeVdoZW5Ob3RFbXB0eShbJm9iamVjdCwgc3RyZWFtXShHUmVmUHRyPEdzdE1pbmlPYmplY3Q+
JiYgcmVjZWl2ZWRPYmplY3QpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgICAgICAgICAgICAgIERhdGFNdXRleDxTdHJlYW06OlN0cmVhbWluZ01lbWJlcnM+
OjpMb2NrZWRXcmFwcGVyIHN0cmVhbWluZ01lbWJlcnMoc3RyZWFtLT5zdHJlYW1pbmdNZW1iZXJz
RGF0YU11dGV4KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXN0cmVhbWluZ01lbWJlcnMtPmlz
Rmx1c2hpbmcpOworCisgICAgICAgICAgICAgICAgb2JqZWN0ID0gV1RGTW92ZShyZWNlaXZlZE9i
amVjdCk7CisgICAgICAgICAgICAgICAgc3RyZWFtaW5nTWVtYmVycy0+aGFzUG9wcGVkRmlyc3RP
YmplY3QgPSB0cnVlOworICAgICAgICAgICAgICAgIHN0cmVhbWluZ01lbWJlcnMtPnF1ZXVlQ2hh
bmdlZE9yRmx1c2hlZENvbmRpdGlvbi5ub3RpZnlBbGwoKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgR1NUX1RSQUNFX09CSkVDVChwYWQsICJXYWl0aW5nIGZvciBvYmplY3RzIHRvIGJl
IHB1c2hlZCB0byB0aGUgdHJhY2sgcXVldWUuIik7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBH
c3RTdGF0ZUNoYW5nZVJldHVybiByZXN1bHQgPSBHU1RfRUxFTUVOVF9DTEFTUyhwYXJlbnRfY2xh
c3MpLT5jaGFuZ2Vfc3RhdGUoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0gICAgaWYgKEdfVU5MSUtF
TFkocmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkpIHsKLSAgICAgICAgR1NUX1dB
Uk5JTkdfT0JKRUNUKHNvdXJjZSwgIlN0YXRlIGNoYW5nZSBmYWlsZWQiKTsKLSAgICAgICAgd2Vi
S2l0TWVkaWFTcmNEb0FzeW5jRG9uZShzb3VyY2UpOwotICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIC8vIFdhaXQgdG8gcmVjZWl2ZSBhbiBvYmplY3QgZnJvbSB0aGUgcXVldWUgKGlmIHdlIGRp
ZG4ndCBnZXQgb25lIGFscmVhZHkpIG9yIGZsdXNoLgorICAgIHN0cmVhbWluZ01lbWJlcnMtPnF1
ZXVlQ2hhbmdlZE9yRmx1c2hlZENvbmRpdGlvbi53YWl0KHN0cmVhbWluZ01lbWJlcnMubXV0ZXgo
KSwgWyZdKCkgeworICAgICAgICByZXR1cm4gc3RyZWFtaW5nTWVtYmVycy0+aXNGbHVzaGluZyB8
fCBvYmplY3Q7CisgICAgfSk7CisgICAgeworICAgICAgICAvLyBFbnN1cmUgdGhhdCBub3RpZnlX
aGVuTm90RW1wdHkoKSdzIGNhbGxiYWNrIChpZiBhbnkpIGlzIGNsZWFyZWQgYWZ0ZXIgdGhpcyBw
b2ludC4KKyAgICAgICAgRGF0YU11dGV4PFRyYWNrUXVldWU+OjpMb2NrZWRXcmFwcGVyIHF1ZXVl
KHN0cmVhbS0+dHJhY2stPnF1ZXVlRGF0YU11dGV4KCkpOworICAgICAgICBxdWV1ZS0+cmVzZXRO
b3RFbXB0eUhhbmRsZXIoKTsKKyAgICB9CisgICAgaWYgKHN0cmVhbWluZ01lbWJlcnMtPmlzRmx1
c2hpbmcpIHsKKyAgICAgICAgZ3N0X3BhZF9wYXVzZV90YXNrKHBhZCk7CisgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFU
RV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgICByZXN1bHQgPSBHU1RfU1RBVEVfQ0hB
TkdFX0FTWU5DOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFV
U0VEX1RPX1JFQURZOgotICAgICAgICB3ZWJLaXRNZWRpYVNyY0RvQXN5bmNEb25lKHNvdXJjZSk7
Ci0gICAgICAgIHByaXYtPmFsbFRyYWNrc0NvbmZpZ3VyZWQgPSBmYWxzZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7CisgICAgLy8gV2Ugd2FpdCB0byBnZXQg
YSBzYW1wbGUgYmVmb3JlIGVtaXR0aW5nIHRoZSBmaXJzdCBzZWdtZW50LiBUaGlzIHdheSwgaWYg
d2UgZ2V0IGEgc2VlayBiZWZvcmUgYW55CisgICAgLy8gZW5xdWV1ZSwgd2UncmUgc2VuZGluZyBv
bmx5IG9uZSBzZWdtZW50LiBUaGlzIGFsc28gZW5zdXJlcyB0aGF0IHdoZW4gc3VjaCBhIHNlZWsg
aXMgbWFkZSwgd2hlcmUgd2UgYWxzbworICAgIC8vIG9taXQgdGhlIGZsdXNoIChzZWUgd2ViS2l0
TWVkaWFTcmNGbHVzaCkgd2UgYWN0dWFsbHkgZW1pdCB0aGUgdXBkYXRlZCwgY29ycmVjdCBzZWdt
ZW50LgorICAgIGlmIChzdHJlYW1pbmdNZW1iZXJzLT5kb2VzTmVlZFNlZ21lbnRFdmVudCkgewor
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBhZCwgIk5lZWQgbmV3IFNFR01FTlQgZXZlbnQsIHB1
c2hpbmcgaXQ6ICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwgJnN0cmVhbWluZ01lbWJlcnMtPnNlZ21l
bnQpOworICAgICAgICBib29sIHJlc3VsdCA9IGdzdF9wYWRfcHVzaF9ldmVudChwYWQsIGdzdF9l
dmVudF9uZXdfc2VnbWVudCgmc3RyZWFtaW5nTWVtYmVycy0+c2VnbWVudCkpOworICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHBhZCwgIlNFR01FTlQgZXZlbnQgcHVzaGVkLCByZXN1bHQgPSAlcy4i
LCBib29sRm9yUHJpbnRpbmcocmVzdWx0KSk7CisgICAgICAgIEFTU0VSVChyZXN1bHQpOworICAg
ICAgICBzdHJlYW1pbmdNZW1iZXJzLT5kb2VzTmVlZFNlZ21lbnRFdmVudCA9IGZhbHNlOwogICAg
IH0KIAotICAgIHJldHVybiByZXN1bHQ7Ci19CisgICAgaWYgKEdTVF9JU19TQU1QTEUob2JqZWN0
LmdldCgpKSkgeworICAgICAgICBHUmVmUHRyPEdzdFNhbXBsZT4gc2FtcGxlID0gYWRvcHRHUmVm
KEdTVF9TQU1QTEUob2JqZWN0LmxlYWtSZWYoKSkpOwogCi1naW50NjQgd2ViS2l0TWVkaWFTcmNH
ZXRTaXplKFdlYktpdE1lZGlhU3JjKiB3ZWJLaXRNZWRpYVNyYykKLXsKLSAgICBnaW50NjQgZHVy
YXRpb24gPSAwOwotICAgIGZvciAoU3RyZWFtKiBzdHJlYW0gOiB3ZWJLaXRNZWRpYVNyYy0+cHJp
di0+c3RyZWFtcykKLSAgICAgICAgZHVyYXRpb24gPSBzdGQ6Om1heDxnaW50NjQ+KGR1cmF0aW9u
LCBnc3RfYXBwX3NyY19nZXRfc2l6ZShHU1RfQVBQX1NSQyhzdHJlYW0tPmFwcHNyYykpKTsKLSAg
ICByZXR1cm4gZHVyYXRpb247Ci19CisgICAgICAgIGlmICghZ3N0X2NhcHNfaXNfZXF1YWwoZ3N0
X3NhbXBsZV9nZXRfY2FwcyhzYW1wbGUuZ2V0KCkpLCBzdHJlYW1pbmdNZW1iZXJzLT5wcmV2aW91
c0NhcHMuZ2V0KCkpKSB7CisgICAgICAgICAgICAvLyBUaGlzIHNhbXBsZSBuZWVkcyBuZXcgY2Fw
cyAodHlwaWNhbGx5IGJlY2F1c2Ugb2YgYSBxdWFsaXR5IGNoYW5nZSkuCisgICAgICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHBhZCwgIlB1c2hpbmcgbmV3IENBUFMgZXZlbnQ6ICUiIEdTVF9QVFJf
Rk9STUFULCBnc3Rfc2FtcGxlX2dldF9jYXBzKHNhbXBsZS5nZXQoKSkpOworICAgICAgICAgICAg
Ym9vbCByZXN1bHQgPSBnc3RfcGFkX3B1c2hfZXZlbnQoc3RyZWFtLT5wYWQuZ2V0KCksIGdzdF9l
dmVudF9uZXdfY2Fwcyhnc3Rfc2FtcGxlX2dldF9jYXBzKHNhbXBsZS5nZXQoKSkpKTsKKyAgICAg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGFkLCAiQ0FQUyBldmVudCBwdXNoZWQsIHJlc3VsdCA9
ICVzLiIsIGJvb2xGb3JQcmludGluZyhyZXN1bHQpKTsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1
bHQpOworICAgICAgICAgICAgc3RyZWFtaW5nTWVtYmVycy0+cHJldmlvdXNDYXBzID0gZ3N0X3Nh
bXBsZV9nZXRfY2FwcyhzYW1wbGUuZ2V0KCkpOworICAgICAgICB9CiAKLWdib29sZWFuIHdlYktp
dE1lZGlhU3JjUXVlcnlXaXRoUGFyZW50KEdzdFBhZCogcGFkLCBHc3RPYmplY3QqIHBhcmVudCwg
R3N0UXVlcnkqIHF1ZXJ5KQotewotICAgIFdlYktpdE1lZGlhU3JjKiBzb3VyY2UgPSBXRUJLSVRf
TUVESUFfU1JDKEdTVF9FTEVNRU5UKHBhcmVudCkpOwotICAgIGdib29sZWFuIHJlc3VsdCA9IEZB
TFNFOworICAgICAgICBHUmVmUHRyPEdzdEJ1ZmZlcj4gYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRf
YnVmZmVyKHNhbXBsZS5nZXQoKSk7CisgICAgICAgIHNhbXBsZS5jbGVhcigpOwogCi0gICAgc3dp
dGNoIChHU1RfUVVFUllfVFlQRShxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9EVVJBVElP
TjogewotICAgICAgICBHc3RGb3JtYXQgZm9ybWF0OwotICAgICAgICBnc3RfcXVlcnlfcGFyc2Vf
ZHVyYXRpb24ocXVlcnksICZmb3JtYXQsIG51bGxwdHIpOwotCi0gICAgICAgIEdTVF9ERUJVR19P
QkpFQ1Qoc291cmNlLCAiZHVyYXRpb24gcXVlcnkgaW4gZm9ybWF0ICVzIiwgZ3N0X2Zvcm1hdF9n
ZXRfbmFtZShmb3JtYXQpKTsKLSAgICAgICAgR1NUX09CSkVDVF9MT0NLKHNvdXJjZSk7Ci0gICAg
ICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9USU1FOiB7Ci0g
ICAgICAgICAgICBpZiAoc291cmNlLT5wcml2ICYmIHNvdXJjZS0+cHJpdi0+bWVkaWFQbGF5ZXJQ
cml2YXRlKSB7Ci0gICAgICAgICAgICAgICAgTWVkaWFUaW1lIGR1cmF0aW9uID0gc291cmNlLT5w
cml2LT5tZWRpYVBsYXllclByaXZhdGUtPmR1cmF0aW9uTWVkaWFUaW1lKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGR1cmF0aW9uID4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24ocXVlcnksIGZvcm1hdCwgV2ViQ29yZTo6
dG9Hc3RDbG9ja1RpbWUoZHVyYXRpb24pKTsKLSAgICAgICAgICAgICAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChzb3VyY2UsICJBbnN3ZXJpbmc6IGR1cmF0aW9uPSUiIEdTVF9USU1FX0ZPUk1BVCwg
R1NUX1RJTUVfQVJHUyhXZWJDb3JlOjp0b0dzdENsb2NrVGltZShkdXJhdGlvbikpKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gVFJVRTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdTVF9G
T1JNQVRfQllURVM6IHsKLSAgICAgICAgICAgIGlmIChzb3VyY2UtPnByaXYpIHsKLSAgICAgICAg
ICAgICAgICBnaW50NjQgZHVyYXRpb24gPSB3ZWJLaXRNZWRpYVNyY0dldFNpemUoc291cmNlKTsK
LSAgICAgICAgICAgICAgICBpZiAoZHVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgZ3N0
X3F1ZXJ5X3NldF9kdXJhdGlvbihxdWVyeSwgZm9ybWF0LCBkdXJhdGlvbik7Ci0gICAgICAgICAg
ICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc291cmNlLCAic2l6ZTogJSIgR19HSU5UNjRfRk9S
TUFULCBkdXJhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRSVUU7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGJvb2wgcHVzaGluZ0ZpcnN0QnVmZmVyID0gIXN0cmVhbWluZ01lbWJlcnMtPmhhc1B1c2hlZEZp
cnN0QnVmZmVyOworICAgICAgICBpZiAocHVzaGluZ0ZpcnN0QnVmZmVyKSB7CisgICAgICAgICAg
ICBHU1RfREVCVUdfT0JKRUNUKHBhZCwgIlNlbmRpbmcgZmlyc3QgYnVmZmVyIG9uIHRoaXMgcGFk
LiIpOworICAgICAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBmaWxlTmFtZSB7IGdfc3RyZHVwX3By
aW50ZigicGxheWJhY2stcGlwZWxpbmUtYmVmb3JlLXBsYXliYWNrLSVzIiwgc3RyZWFtLT50cmFj
ay0+dHJhY2tJZCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpIH07CisgICAgICAgICAgICBHU1Rf
REVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFMoR1NUX0JJTihmaW5kUGlwZWxpbmUoR1JlZlB0
cjxHc3RFbGVtZW50PihHU1RfRUxFTUVOVChzdHJlYW0tPnNvdXJjZSkpKS5nZXQoKSksCisgICAg
ICAgICAgICAgICAgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMLCBmaWxlTmFtZS5nZXQoKSk7Cisg
ICAgICAgICAgICBzdHJlYW1pbmdNZW1iZXJzLT5oYXNQdXNoZWRGaXJzdEJ1ZmZlciA9IHRydWU7
CiAgICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIC8vIFB1c2ggdGhlIGJ1ZmZlciB3aXRob3V0IHRoZSBzdHJlYW1pbmdNZW1iZXJzIGxvY2sg
c28gdGhhdCBmbHVzaGVzIGNhbiBoYXBwZW4gd2hpbGUgaXQgdHJhdmVscyBkb3duc3RyZWFtLgor
ICAgICAgICBzdHJlYW1pbmdNZW1iZXJzLmxvY2tIb2xkZXIoKS51bmxvY2tFYXJseSgpOworCisg
ICAgICAgIEFTU0VSVChHU1RfQlVGRkVSX1BUU19JU19WQUxJRChidWZmZXIuZ2V0KCkpKTsKKyAg
ICAgICAgR1NUX1RSQUNFX09CSkVDVChwYWQsICJQdXNoaW5nIGJ1ZmZlciBkb3duc3RyZWFtOiAl
IiBHU1RfUFRSX0ZPUk1BVCwgYnVmZmVyLmdldCgpKTsKKyAgICAgICAgR3N0Rmxvd1JldHVybiBy
ZXN1bHQgPSBnc3RfcGFkX3B1c2gocGFkLCBidWZmZXIubGVha1JlZigpKTsKKyAgICAgICAgaWYg
KHJlc3VsdCAhPSBHU1RfRkxPV19PSyAmJiByZXN1bHQgIT0gR1NUX0ZMT1dfRkxVU0hJTkcpIHsK
KyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QocGFkLCAiUHVzaGluZyBidWZmZXIgcmV0dXJu
ZWQgJXMiLCBnc3RfZmxvd19nZXRfbmFtZShyZXN1bHQpKTsKKyAgICAgICAgICAgIEdVbmlxdWVQ
dHI8Y2hhcj4gZmlsZU5hbWUgeyBnX3N0cmR1cF9wcmludGYoInBsYXliYWNrLXBpcGVsaW5lLXB1
c2hpbmctYnVmZmVyLWZhaWxlZC0lcyIsIHN0cmVhbS0+dHJhY2stPnRyYWNrSWQoKS5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKSB9OworICAgICAgICAgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklM
RV9XSVRIX1RTKEdTVF9CSU4oZmluZFBpcGVsaW5lKEdSZWZQdHI8R3N0RWxlbWVudD4oR1NUX0VM
RU1FTlQoc3RyZWFtLT5zb3VyY2UpKSkuZ2V0KCkpLAorICAgICAgICAgICAgICAgIEdTVF9ERUJV
R19HUkFQSF9TSE9XX0FMTCwgZmlsZU5hbWUuZ2V0KCkpOworICAgICAgICAgICAgZ3N0X3BhZF9w
YXVzZV90YXNrKHBhZCk7CiAgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKEdTVF9JU19FVkVOVChv
YmplY3QuZ2V0KCkpKSB7CisgICAgICAgIC8vIEVPUyBldmVudHMgYW5kIG90aGVyIGVucXVldWVk
IGV2ZW50cyBhcmUgYWxzbyBzZW50IHVubG9ja2VkIHNvIHRoZXkgY2FuIHJlYWN0IHRvIGZsdXNo
ZXMgaWYgbmVjZXNzYXJ5LgorICAgICAgICBHUmVmUHRyPEdzdEV2ZW50PiBldmVudCA9IEdSZWZQ
dHI8R3N0RXZlbnQ+KEdTVF9FVkVOVChvYmplY3QubGVha1JlZigpKSk7CisKKyAgICAgICAgc3Ry
ZWFtaW5nTWVtYmVycy5sb2NrSG9sZGVyKCkudW5sb2NrRWFybHkoKTsKKyAgICAgICAgR1NUX0RF
QlVHX09CSkVDVChwYWQsICJQdXNoaW5nIGV2ZW50IGRvd25zdHJlYW06ICUiIEdTVF9QVFJfRk9S
TUFULCBldmVudC5nZXQoKSk7CisgICAgICAgIGJvb2wgZXZlbnRIYW5kbGVkID0gZ3N0X3BhZF9w
dXNoX2V2ZW50KHBhZCwgR1JlZlB0cjxHc3RFdmVudD4oZXZlbnQpLmxlYWtSZWYoKSk7CisgICAg
ICAgIGlmICghZXZlbnRIYW5kbGVkKQorICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwYWQs
ICJQdXNoZWQgZXZlbnQgd2FzIG5vdCBoYW5kbGVkOiAlIiBHU1RfUFRSX0ZPUk1BVCwgZXZlbnQu
Z2V0KCkpOworICAgIH0gZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KIAot
ICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzb3VyY2UpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgY2FzZSBHU1RfUVVFUllfVVJJOgotICAgICAgICBpZiAoc291cmNlKSB7Ci0gICAgICAg
ICAgICBHU1RfT0JKRUNUX0xPQ0soc291cmNlKTsKLSAgICAgICAgICAgIGlmIChzb3VyY2UtPnBy
aXYpCi0gICAgICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF91cmkocXVlcnksIHNvdXJjZS0+cHJp
di0+bG9jYXRpb24uZ2V0KCkpOwotICAgICAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc291cmNl
KTsKK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjU3RyZWFtRmx1c2goU3RyZWFtKiBzdHJlYW0s
IGJvb2wgaXNTZWVraW5nRmx1c2gpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBib29sIHNraXBGbHVzaCA9IGZhbHNlOworCisgICAgeworICAgICAgICBEYXRhTXV0ZXg8U3Ry
ZWFtOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBzdHJlYW1pbmdNZW1iZXJzKHN0
cmVhbS0+c3RyZWFtaW5nTWVtYmVyc0RhdGFNdXRleCk7CisKKyAgICAgICAgaWYgKCFzdHJlYW1p
bmdNZW1iZXJzLT5oYXNQb3BwZWRGaXJzdE9iamVjdCkgeworICAgICAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChzdHJlYW0tPnNvdXJjZSwgIkZsdXNoIHJlcXVlc3QgZm9yIHN0cmVhbSAnJXMnIG9j
Y3VycmVkIGJlZm9yZSBoYXNQb3BwZWRGaXJzdE9iamVjdCwganVzdCBjbGVhcmluZyB0aGUgcXVl
dWUgYW5kIHJlYWRqdXN0aW5nIHRoZSBzZWdtZW50LiIsIHN0cmVhbS0+dHJhY2stPnRyYWNrSWQo
KS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIERhdGFNdXRleDxUcmFja1F1
ZXVlPjo6TG9ja2VkV3JhcHBlciBxdWV1ZShzdHJlYW0tPnRyYWNrLT5xdWV1ZURhdGFNdXRleCgp
KTsKKyAgICAgICAgICAgIC8vIFdlIHVzZSBjbGVhcigpIGluc3RlYWQgb2YgZmx1c2goKSBiZWNh
dXNlIHRoZSBXZWJLaXRNZWRpYVNyYyBzdHJlYW1pbmcgdGhyZWFkIGNvdWxkIGJlIHdhaXRpbmcK
KyAgICAgICAgICAgIC8vIGZvciB0aGUgcXVldWUuIGZsdXNoKCkgd291bGQgY2FuY2VsIHRoZSBu
b3RFbXB0eUNhbGxiYWNrIHRoZXJlZm9yZSBsZWF2aW5nIHRoZSBzdHJlYW1pbmcgdGhyZWFkCisg
ICAgICAgICAgICAvLyBzdHVjayB3YWl0aW5nIGZvcmV2ZXIuCisgICAgICAgICAgICBxdWV1ZS0+
Y2xlYXIoKTsKKyAgICAgICAgICAgIHNraXBGbHVzaCA9IHRydWU7CiAgICAgICAgIH0KLSAgICAg
ICAgcmVzdWx0ID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDogewotICAgICAg
ICBHUmVmUHRyPEdzdFBhZD4gdGFyZ2V0ID0gYWRvcHRHUmVmKGdzdF9naG9zdF9wYWRfZ2V0X3Rh
cmdldChHU1RfR0hPU1RfUEFEX0NBU1QocGFkKSkpOwotICAgICAgICAvLyBGb3J3YXJkIHRoZSBx
dWVyeSB0byB0aGUgcHJveHkgdGFyZ2V0IHBhZC4KLSAgICAgICAgaWYgKHRhcmdldCkKLSAgICAg
ICAgICAgIHJlc3VsdCA9IGdzdF9wYWRfcXVlcnkodGFyZ2V0LmdldCgpLCBxdWVyeSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0OwotfQorICAgIGlm
ICghc2tpcEZsdXNoKSB7CisgICAgICAgIC8vIFNpZ25hbCB0aGUgbG9vcCgpIGZ1bmN0aW9uIHRv
IHN0b3Agd2FpdGluZyBmb3IgYW55IGNvbmRpdGlvbiB2YXJpYWJsZSwgcGF1c2UgdGhlIHRhc2sg
YW5kIHJldHVybiwKKyAgICAgICAgLy8gd2hpY2ggd2lsbCBrZWVwaW5nIHRoZSBzdHJlYW1pbmcg
dGhyZWFkIGlkbGUuCisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3RyZWFtLT5wYWQuZ2V0KCks
ICJUYWtpbmcgdGhlIFN0cmVhbWluZ01lbWJlcnMgbXV0ZXggYW5kIHNldHRpbmcgaXNGbHVzaGlu
ZyA9IHRydWUuIik7CisgICAgICAgIHsKKyAgICAgICAgICAgIERhdGFNdXRleDxTdHJlYW06OlN0
cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyIHN0cmVhbWluZ01lbWJlcnMoc3RyZWFtLT5z
dHJlYW1pbmdNZW1iZXJzRGF0YU11dGV4KTsKKyAgICAgICAgICAgIERhdGFNdXRleDxUcmFja1F1
ZXVlPjo6TG9ja2VkV3JhcHBlciBxdWV1ZShzdHJlYW0tPnRyYWNrLT5xdWV1ZURhdGFNdXRleCgp
KTsKIAotdm9pZCB3ZWJLaXRNZWRpYVNyY1VwZGF0ZVByZXNlbnRhdGlvblNpemUoR3N0Q2Fwcyog
Y2FwcywgU3RyZWFtKiBzdHJlYW0pCi17Ci0gICAgR1NUX09CSkVDVF9MT0NLKHN0cmVhbS0+cGFy
ZW50KTsKLSAgICBpZiAoV2ViQ29yZTo6ZG9DYXBzSGF2ZVR5cGUoY2FwcywgR1NUX1ZJREVPX0NB
UFNfVFlQRV9QUkVGSVgpKSB7Ci0gICAgICAgIE9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0U2l6ZT4g
c2l6ZSA9IFdlYkNvcmU6OmdldFZpZGVvUmVzb2x1dGlvbkZyb21DYXBzKGNhcHMpOwotICAgICAg
ICBpZiAoc2l6ZS5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgc3RyZWFtLT5wcmVzZW50YXRpb25T
aXplID0gc2l6ZS52YWx1ZSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHJlYW0tPnBy
ZXNlbnRhdGlvblNpemUgPSBXZWJDb3JlOjpGbG9hdFNpemUoKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgc3RyZWFtLT5wcmVzZW50YXRpb25TaXplID0gV2ViQ29yZTo6RmxvYXRTaXplKCk7CisgICAg
ICAgICAgICBzdHJlYW1pbmdNZW1iZXJzLT5pc0ZsdXNoaW5nID0gdHJ1ZTsKKyAgICAgICAgICAg
IHF1ZXVlLT5mbHVzaCgpOyAvLyBDbGVhciB0aGUgcXVldWUgYW5kIGNhbmNlbCBhbnkgd2FpdGlu
ZyBjYWxsYmFjay4KIAotICAgIGdzdF9jYXBzX3JlZihjYXBzKTsKLSAgICBzdHJlYW0tPmNhcHMg
PSBhZG9wdEdSZWYoY2Fwcyk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0soc3RyZWFtLT5wYXJlbnQp
OwotfQorICAgICAgICAgICAgc3RyZWFtaW5nTWVtYmVycy0+cXVldWVDaGFuZ2VkT3JGbHVzaGVk
Q29uZGl0aW9uLm5vdGlmeUFsbCgpOworICAgICAgICAgICAgc3RyZWFtaW5nTWVtYmVycy0+cGFk
TGlua2VkT3JGbHVzaGVkQ29uZGl0aW9uLm5vdGlmeUFsbCgpOworICAgICAgICB9CiAKLXZvaWQg
d2ViS2l0TWVkaWFTcmNMaW5rU3RyZWFtVG9TcmNQYWQoR3N0UGFkKiBzb3VyY2VQYWQsIFN0cmVh
bSogc3RyZWFtKQotewotICAgIHVuc2lnbmVkIHBhZElkID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KEdQT0lOVEVSX1RPX0lOVChnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChzb3VyY2VQYWQpLCAi
cGFkSWQiKSkpOwotICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3RyZWFtLT5wYXJlbnQsICJsaW5raW5n
IHN0cmVhbSB0byBzcmMgcGFkIChpZDogJXUpIiwgcGFkSWQpOworICAgICAgICAvLyBGbHVzaCBk
b3duc3RyZWFtLiBUaGlzIHdpbGwgc3RvcCBwcm9jZXNzaW5nIGluIGRvd25zdHJlYW0gZWxlbWVu
dHMgYW5kIGlmIHRoZSBzdHJlYW1pbmcgdGhyZWFkIHdhcyBpbiBhCisgICAgICAgIC8vIGRvd25z
dHJlYW0gY2hhaW4oKSBmdW5jdGlvbiwgaXQgd2lsbCBxdWlja2x5IHJldHVybiB0byB0aGUgbG9v
cCgpIGZ1bmN0aW9uLCB3aGljaCB0aGFua3MgdG8gdGhlCisgICAgICAgIC8vIHByZXZpb3VzIHNl
Y3Rpb24gd2lsbCBhbHNvIHF1aWNrbHkgZW5kLgorICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHN0
cmVhbS0+cGFkLmdldCgpLCAiU2VuZGluZyBGTFVTSF9TVEFSVCBkb3duc3RyZWFtLiIpOworICAg
ICAgICBnc3RfcGFkX3B1c2hfZXZlbnQoc3RyZWFtLT5wYWQuZ2V0KCksIGdzdF9ldmVudF9uZXdf
Zmx1c2hfc3RhcnQoKSk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3RyZWFtLT5wYWQuZ2V0
KCksICJGTFVTSF9TVEFSVCBzZW50LiIpOworICAgIH0KKworICAgIC8vIEFkanVzdCBzZWdtZW50
LiBUaGlzIGlzIGRpZmZlcmVudCBmb3Igc2Vla3MgYW5kIG5vbi1zZWVraW5nIGZsdXNoZXMuCisg
ICAgaWYgKGlzU2Vla2luZ0ZsdXNoKSB7CisgICAgICAgIC8vIEluIHRoZSBjYXNlIG9mIHNlZWtp
bmcgZmx1c2ggd2UgYXJlIHJlc2V0dGluZyB0aGUgdGltZWxpbmUgKHNlZSB0aGUgZmx1c2ggc3Rv
cCBsYXRlcikuCisgICAgICAgIC8vIFRoZSByZXN1bHRpbmcgc2VnbWVudCBpcyBicmFuZCBuZXcs
IGJ1dCB3aXRoIGEgZGlmZmVyZW50IHN0YXJ0IHRpbWUuCisgICAgICAgIFdlYktpdE1lZGlhU3Jj
UHJpdmF0ZSogcHJpdiA9IHN0cmVhbS0+c291cmNlLT5wcml2OworICAgICAgICBEYXRhTXV0ZXg8
U3RyZWFtOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBzdHJlYW1pbmdNZW1iZXJz
KHN0cmVhbS0+c3RyZWFtaW5nTWVtYmVyc0RhdGFNdXRleCk7CisgICAgICAgIHN0cmVhbWluZ01l
bWJlcnMtPnNlZ21lbnQuYmFzZSA9IDA7CisgICAgICAgIHN0cmVhbWluZ01lbWJlcnMtPnNlZ21l
bnQucmF0ZSA9IHByaXYtPnJhdGU7CisgICAgICAgIHN0cmVhbWluZ01lbWJlcnMtPnNlZ21lbnQu
c3RhcnQgPSBzdHJlYW1pbmdNZW1iZXJzLT5zZWdtZW50LnRpbWUgPSBwcml2LT5zdGFydFRpbWU7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSW4gdGhlIGNhc2Ugb2Ygbm9uLXNlZWtpbmcgZmx1
c2hlcyB3ZSBkb24ndCByZXNldCB0aGUgdGltZWxpbmUsIHNvIGluc3RlYWQgd2UgbmVlZCB0byBp
bmNyZWFzZSB0aGUgYGJhc2VgIGZpZWxkCisgICAgICAgIC8vIGJ5IGhvd2V2ZXIgcnVubmluZyB0
aW1lIHdlJ3JlIHN0YXJ0aW5nIGFmdGVyIHRoZSBmbHVzaC4KKworICAgICAgICBHc3RDbG9ja1Rp
bWUgcGlwZWxpbmVTdHJlYW1UaW1lOworICAgICAgICBnc3RfZWxlbWVudF9xdWVyeV9wb3NpdGlv
bihmaW5kUGlwZWxpbmUoR1JlZlB0cjxHc3RFbGVtZW50PihHU1RfRUxFTUVOVChzdHJlYW0tPnNv
dXJjZSkpKS5nZXQoKSwgR1NUX0ZPUk1BVF9USU1FLAorICAgICAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDxnaW50NjQqPigmcGlwZWxpbmVTdHJlYW1UaW1lKSk7CisgICAgICAgIC8vIEdTVF9DTE9D
S19USU1FX05PTkUgaXMgcmV0dXJuZWQgd2hlbiB0aGUgcGlwZWxpbmUgaXMgbm90IHlldCBwcmUt
cm9sbGVkIChlLmcuIGp1c3QgYWZ0ZXIgYSBzZWVrKS4gSW4gdGhpcyBjYXNlCisgICAgICAgIC8v
IHdlIGRvbid0IG5lZWQgdG8gYWRqdXN0IHRoZSBzZWdtZW50IHRob3VnaCwgYXMgcnVubmluZyB0
aW1lIGhhcyBub3QgYWR2YW5jZWQuCisgICAgICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJ
RChwaXBlbGluZVN0cmVhbVRpbWUpKSB7CisgICAgICAgICAgICBEYXRhTXV0ZXg8U3RyZWFtOjpT
dHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBzdHJlYW1pbmdNZW1iZXJzKHN0cmVhbS0+
c3RyZWFtaW5nTWVtYmVyc0RhdGFNdXRleCk7CisgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGlu
Y3JlYXNlIHRoZSBiYXNlIGJ5IHRoZSBydW5uaW5nIHRpbWUgYWNjdW11bGF0ZWQgZHVyaW5nIHRo
ZSBwcmV2aW91cyBzZWdtZW50LgorCisgICAgICAgICAgICBHc3RDbG9ja1RpbWUgcGlwZWxpbmVS
dW5uaW5nVGltZSA9IGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSgmc3RyZWFtaW5nTWVtYmVy
cy0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCBwaXBlbGluZVN0cmVhbVRpbWUpOworICAgICAg
ICAgICAgYXNzZXJ0KEdTVF9DTE9DS19USU1FX0lTX1ZBTElEKHBpcGVsaW5lUnVubmluZ1RpbWUp
KTsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3RyZWFtLT5zb3VyY2UsICJSZXNldHRp
bmcgc2VnbWVudCB0byBjdXJyZW50IHBpcGVsaW5lIHJ1bm5pbmcgdGltZSAoJSIgR1NUX1RJTUVf
Rk9STUFUIikgYW5kIHN0cmVhbSB0aW1lICglIiBHU1RfVElNRV9GT1JNQVQgIikiLAorICAgICAg
ICAgICAgICAgIEdTVF9USU1FX0FSR1MocGlwZWxpbmVSdW5uaW5nVGltZSksIEdTVF9USU1FX0FS
R1MocGlwZWxpbmVTdHJlYW1UaW1lKSk7CisgICAgICAgICAgICBzdHJlYW1pbmdNZW1iZXJzLT5z
ZWdtZW50LmJhc2UgPSBwaXBlbGluZVJ1bm5pbmdUaW1lOworCisgICAgICAgICAgICBzdHJlYW1p
bmdNZW1iZXJzLT5zZWdtZW50LnN0YXJ0ID0gc3RyZWFtaW5nTWVtYmVycy0+c2VnbWVudC50aW1l
ID0gc3RhdGljX2Nhc3Q8R3N0Q2xvY2tUaW1lPihwaXBlbGluZVN0cmVhbVRpbWUpOworICAgICAg
ICB9CisgICAgfQogCi0gICAgR1VuaXF1ZVB0cjxnY2hhcj4gcGFkTmFtZShnX3N0cmR1cF9wcmlu
dGYoInNyY18ldSIsIHBhZElkKSk7Ci0gICAgR3N0UGFkKiBnaG9zdHBhZCA9IFdlYkNvcmU6Ondl
YmtpdEdzdEdob3N0UGFkRnJvbVN0YXRpY1RlbXBsYXRlKCZzcmNUZW1wbGF0ZSwgcGFkTmFtZS5n
ZXQoKSwgc291cmNlUGFkKTsKKyAgICBpZiAoIXNraXBGbHVzaCkgeworICAgICAgICAvLyBCeSB0
YWtpbmcgdGhlIHN0cmVhbSBsb2NrIHdlIGFyZSB3YWl0aW5nIGZvciB0aGUgc3RyZWFtaW5nIHRo
cmVhZCB0YXNrIHRvIHN0b3AgaWYgaXQgaGFkbid0IHlldC4KKyAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChzdHJlYW0tPnBhZC5nZXQoKSwgIlRha2luZyB0aGUgU1RSRUFNX0xPQ0suIik7CisgICAg
ICAgIEdTVF9QQURfU1RSRUFNX0xPQ0soc3RyZWFtLT5wYWQuZ2V0KCkpOworICAgICAgICB7Cisg
ICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHN0cmVhbS0+cGFkLmdldCgpLCAiVGFraW5nIHRo
ZSBTdHJlYW1pbmdNZW1iZXJzIG11dGV4IGFnYWluLiIpOworICAgICAgICAgICAgRGF0YU11dGV4
PFN0cmVhbTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgc3RyZWFtaW5nTWVtYmVy
cyhzdHJlYW0tPnN0cmVhbWluZ01lbWJlcnNEYXRhTXV0ZXgpOworICAgICAgICAgICAgR1NUX0RF
QlVHX09CSkVDVChzdHJlYW0tPnBhZC5nZXQoKSwgIlN0cmVhbWluZ01lbWJlcnMgbXV0ZXggdGFr
ZW4sIHVzaW5nIGl0IHRvIHNldCBpc0ZsdXNoaW5nID0gZmFsc2UuIik7CisgICAgICAgICAgICBz
dHJlYW1pbmdNZW1iZXJzLT5pc0ZsdXNoaW5nID0gZmFsc2U7CisgICAgICAgICAgICBzdHJlYW1p
bmdNZW1iZXJzLT5kb2VzTmVlZFNlZ21lbnRFdmVudCA9IHRydWU7CisgICAgICAgIH0KIAotICAg
IGF1dG8gcHJveHlwYWQgPSBhZG9wdEdSZWYoR1NUX1BBRChnc3RfcHJveHlfcGFkX2dldF9pbnRl
cm5hbChHU1RfUFJPWFlfUEFEKGdob3N0cGFkKSkpKTsKLSAgICBnc3RfZmxvd19jb21iaW5lcl9h
ZGRfcGFkKHN0cmVhbS0+cGFyZW50LT5wcml2LT5mbG93Q29tYmluZXIuZ2V0KCksIHByb3h5cGFk
LmdldCgpKTsKLSAgICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbihwcm94eXBhZC5nZXQoKSwg
c3RhdGljX2Nhc3Q8R3N0UGFkQ2hhaW5GdW5jdGlvbj4od2Via2l0TWVkaWFTcmNDaGFpbikpOwot
ICAgIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uKGdob3N0cGFkLCB3ZWJLaXRNZWRpYVNyY1F1
ZXJ5V2l0aFBhcmVudCk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3RyZWFtLT5wYWQuZ2V0
KCksICJTZW5kaW5nIEZMVVNIX1NUT1AgZG93bnN0cmVhbSAocmVzZXRUaW1lID0gJXMpLiIsIGJv
b2xGb3JQcmludGluZyhpc1NlZWtpbmdGbHVzaCkpOworICAgICAgICAvLyBTaW5jZSBGTFVTSF9T
VE9QIGlzIGEgc3luY2hyb25pemVkIGV2ZW50LCB3ZSBzZW5kIGl0IHdoaWxlIHdlIHN0aWxsIGhv
bGQgdGhlIHN0cmVhbSBsb2NrIG9mIHRoZSBwYWQuCisgICAgICAgIGdzdF9wYWRfcHVzaF9ldmVu
dChzdHJlYW0tPnBhZC5nZXQoKSwgZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wKGlzU2Vla2luZ0Zs
dXNoKSk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3RyZWFtLT5wYWQuZ2V0KCksICJGTFVT
SF9TVE9QIHNlbnQuIik7CiAKLSAgICBnc3RfcGFkX3NldF9hY3RpdmUoZ2hvc3RwYWQsIFRSVUUp
OwotICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoR1NUX0VMRU1FTlQoc3RyZWFtLT5wYXJlbnQpLCBn
aG9zdHBhZCk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3RyZWFtLT5wYWQuZ2V0KCksICJT
dGFydGluZyB3ZWJLaXRNZWRpYVNyY0xvb3AgdGFzayBhbmQgcmVsZWFzaW5nIHRoZSBTVFJFQU1f
TE9DSy4iKTsKKyAgICAgICAgZ3N0X3BhZF9zdGFydF90YXNrKHN0cmVhbS0+cGFkLmdldCgpLCB3
ZWJLaXRNZWRpYVNyY0xvb3AsIHN0cmVhbS0+cGFkLmdldCgpLCBudWxscHRyKTsKKyAgICAgICAg
R1NUX1BBRF9TVFJFQU1fVU5MT0NLKHN0cmVhbS0+cGFkLmdldCgpKTsKKyAgICB9CiB9CiAKLXZv
aWQgd2ViS2l0TWVkaWFTcmNMaW5rU291cmNlUGFkKEdzdFBhZCogc291cmNlUGFkLCBHc3RDYXBz
KiBjYXBzLCBTdHJlYW0qIHN0cmVhbSkKK3ZvaWQgd2ViS2l0TWVkaWFTcmNGbHVzaChXZWJLaXRN
ZWRpYVNyYyogc291cmNlLCBjb25zdCBBdG9tU3RyaW5nJiBzdHJlYW1OYW1lKQogewotICAgIEFT
U0VSVChjYXBzICYmIHN0cmVhbS0+cGFyZW50KTsKLSAgICBpZiAoIWNhcHMgfHwgIXN0cmVhbS0+
cGFyZW50KSB7Ci0gICAgICAgIEdTVF9FUlJPUigiVW5hYmxlIHRvIGxpbmsgcGFyc2VyIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBH
U1RfREVCVUdfT0JKRUNUKHNvdXJjZSwgIlJlY2VpdmVkIG5vbi1zZWVrIGZsdXNoIHJlcXVlc3Qg
Zm9yIHN0cmVhbSAnJXMnLiIsIHN0cmVhbU5hbWUuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgU3RyZWFtKiBzdHJlYW0gPSBzb3VyY2UtPnByaXYtPnN0cmVhbUJ5TmFtZShzdHJlYW1OYW1l
KTsKIAotICAgIHdlYktpdE1lZGlhU3JjVXBkYXRlUHJlc2VudGF0aW9uU2l6ZShjYXBzLCBzdHJl
YW0pOworICAgIHdlYktpdE1lZGlhU3JjU3RyZWFtRmx1c2goc3RyZWFtLCBmYWxzZSk7Cit9CiAK
LSAgICAvLyBGSVhNRTogZHJvcCB3ZWJLaXRNZWRpYVNyY0xpbmtTdHJlYW1Ub1NyY1BhZCgpIGFu
ZCBtb3ZlIGl0cyBjb2RlIGhlcmUuCi0gICAgaWYgKCFnc3RfcGFkX2lzX2xpbmtlZChzb3VyY2VQ
YWQpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3RyZWFtLT5wYXJlbnQsICJwYWQgbm90
IGxpbmtlZCB5ZXQiKTsKLSAgICAgICAgd2ViS2l0TWVkaWFTcmNMaW5rU3RyZWFtVG9TcmNQYWQo
c291cmNlUGFkLCBzdHJlYW0pOwotICAgIH0KK3N0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3JjU2Vl
ayhXZWJLaXRNZWRpYVNyYyogc291cmNlLCB1aW50NjRfdCBzdGFydFRpbWUsIGRvdWJsZSByYXRl
KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgc291cmNlLT5wcml2LT5zdGFy
dFRpbWUgPSBzdGFydFRpbWU7CisgICAgc291cmNlLT5wcml2LT5yYXRlID0gcmF0ZTsKKyAgICBH
U1RfREVCVUdfT0JKRUNUKHNvdXJjZSwgIlNlZWsgcmVxdWVzdGVkIHRvIHRpbWUgJSIgR1NUX1RJ
TUVfRk9STUFUICIgd2l0aCByYXRlICVmLiIsIEdTVF9USU1FX0FSR1Moc3RhcnRUaW1lKSwgcmF0
ZSk7CiAKLSAgICB3ZWJLaXRNZWRpYVNyY0NoZWNrQWxsVHJhY2tzQ29uZmlndXJlZChzdHJlYW0t
PnBhcmVudCk7CisgICAgZm9yIChjb25zdCBSZWZQdHI8U3RyZWFtPiYgc3RyZWFtIDogc291cmNl
LT5wcml2LT5zdHJlYW1zLnZhbHVlcygpKQorICAgICAgICB3ZWJLaXRNZWRpYVNyY1N0cmVhbUZs
dXNoKHN0cmVhbS5nZXQoKSwgdHJ1ZSk7CiB9CiAKLXZvaWQgd2ViS2l0TWVkaWFTcmNGcmVlU3Ry
ZWFtKFdlYktpdE1lZGlhU3JjKiBzb3VyY2UsIFN0cmVhbSogc3RyZWFtKQorc3RhdGljIGludCBj
b3VudFN0cmVhbXNPZlR5cGUoV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSwgV2ViQ29yZTo6VHJhY2tQ
cml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlIHR5cGUpCiB7Ci0gICAgR1NUX0RFQlVHX09C
SkVDVChzb3VyY2UsICJSZWxlYXNpbmcgc3RyZWFtOiAlcCIsIHN0cmVhbSk7CisgICAgLy8gQmFy
cmluZyBwaXBlbGluZSBkdW1wcyBzb21lb25lIG1heSBhZGQgZHVyaW5nIGRlYnVnZ2luZywgV2Vi
S2l0IHdpbGwgb25seSByZWFkIHRoZXNlIHByb3BlcnRpZXMgKG4tdmlkZW8gZXRjLikgZnJvbSB0
aGUgbWFpbiB0aHJlYWQuCisgICAgcmV0dXJuIHN0ZDo6Y291bnRfaWYoc291cmNlLT5wcml2LT5z
dHJlYW1zLmJlZ2luKCksIHNvdXJjZS0+cHJpdi0+c3RyZWFtcy5lbmQoKSwgW3R5cGVdKGF1dG8g
aXRlbSkgeworICAgICAgICByZXR1cm4gaXRlbS52YWx1ZS0+dHJhY2stPnR5cGUoKSA9PSB0eXBl
OworICAgIH0pOworfQogCi0gICAgaWYgKEdTVF9JU19BUFBfU1JDKHN0cmVhbS0+YXBwc3JjKSkg
ewotICAgICAgICAvLyBEb24ndCB0cmlnZ2VyIGNhbGxiYWNrcyBmcm9tIHRoaXMgYXBwc3JjIHRv
IGF2b2lkIHVzaW5nIHRoZSBzdHJlYW0gYW55bW9yZS4KLSAgICAgICAgZ3N0X2FwcF9zcmNfc2V0
X2NhbGxiYWNrcyhHU1RfQVBQX1NSQyhzdHJlYW0tPmFwcHNyYyksICZkaXNhYmxlZEFwcHNyY0Nh
bGxiYWNrcywgbnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9z
dHJlYW0oR1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpKTsKLSAgICAgICAgZ3N0X29iamVjdF91
bnJlZihzdHJlYW0tPmFwcHNyYyk7Ci0gICAgfQorc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNH
ZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIHVuc2lnbmVkIHByb3BJZCwgR1ZhbHVlKiB2YWx1
ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSA9IFdF
QktJVF9NRURJQV9TUkMob2JqZWN0KTsKIAotICAgIEdTVF9PQkpFQ1RfTE9DSyhzb3VyY2UpOwot
ICAgIHN3aXRjaCAoc3RyZWFtLT50eXBlKSB7Ci0gICAgY2FzZSBXZWJDb3JlOjpBdWRpbzoKLSAg
ICAgICAgc291cmNlLT5wcml2LT5udW1iZXJPZkF1ZGlvU3RyZWFtcy0tOworICAgIHN3aXRjaCAo
cHJvcElkKSB7CisgICAgY2FzZSBQUk9QX05fQVVESU86CisgICAgICAgIGdfdmFsdWVfc2V0X2lu
dCh2YWx1ZSwgY291bnRTdHJlYW1zT2ZUeXBlKHNvdXJjZSwgV2ViQ29yZTo6VHJhY2tQcml2YXRl
QmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpBdWRpbykpOwogICAgICAgICBicmVhazsKLSAgICBj
YXNlIFdlYkNvcmU6OlZpZGVvOgotICAgICAgICBzb3VyY2UtPnByaXYtPm51bWJlck9mVmlkZW9T
dHJlYW1zLS07CisgICAgY2FzZSBQUk9QX05fVklERU86CisgICAgICAgIGdfdmFsdWVfc2V0X2lu
dCh2YWx1ZSwgY291bnRTdHJlYW1zT2ZUeXBlKHNvdXJjZSwgV2ViQ29yZTo6VHJhY2tQcml2YXRl
QmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpWaWRlbykpOwogICAgICAgICBicmVhazsKLSAgICBj
YXNlIFdlYkNvcmU6OlRleHQ6Ci0gICAgICAgIHNvdXJjZS0+cHJpdi0+bnVtYmVyT2ZUZXh0U3Ry
ZWFtcy0tOworICAgIGNhc2UgUFJPUF9OX1RFWFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2ludCh2
YWx1ZSwgY291bnRTdHJlYW1zT2ZUeXBlKHNvdXJjZSwgV2ViQ29yZTo6VHJhY2tQcml2YXRlQmFz
ZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpUZXh0KSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6Ci0gICAgICAgIGJyZWFrOworICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVS
VFlfSUQob2JqZWN0LCBwcm9wSWQsIHBzcGVjKTsKICAgICB9Ci0gICAgR1NUX09CSkVDVF9VTkxP
Q0soc291cmNlKTsKK30KIAotICAgIGlmIChzdHJlYW0tPnR5cGUgIT0gV2ViQ29yZTo6SW52YWxp
ZCkgewotICAgICAgICBHU1RfREVCVUcoIkZyZWVpbmcgdHJhY2stcmVsYXRlZCBpbmZvIG9uIHN0
cmVhbSAlcCIsIHN0cmVhbSk7Ci0KLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc291cmNlLT5w
cml2LT5zdHJlYW1Mb2NrKTsKLQotICAgICAgICBpZiAoc3RyZWFtLT5jYXBzKQotICAgICAgICAg
ICAgc3RyZWFtLT5jYXBzID0gbnVsbHB0cjsKLQotICAgICAgICBpZiAoc3RyZWFtLT5hdWRpb1Ry
YWNrKQotICAgICAgICAgICAgc3RyZWFtLT5hdWRpb1RyYWNrID0gbnVsbHB0cjsKLSAgICAgICAg
aWYgKHN0cmVhbS0+dmlkZW9UcmFjaykKLSAgICAgICAgICAgIHN0cmVhbS0+dmlkZW9UcmFjayA9
IG51bGxwdHI7Ci0KLSAgICAgICAgaW50IHNpZ25hbCA9IC0xOwotICAgICAgICBzd2l0Y2ggKHN0
cmVhbS0+dHlwZSkgewotICAgICAgICBjYXNlIFdlYkNvcmU6OkF1ZGlvOgotICAgICAgICAgICAg
c2lnbmFsID0gU0lHTkFMX0FVRElPX0NIQU5HRUQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBXZWJDb3JlOjpWaWRlbzoKLSAgICAgICAgICAgIHNpZ25hbCA9IFNJR05BTF9WSURF
T19DSEFOR0VEOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6VGV4
dDoKLSAgICAgICAgICAgIHNpZ25hbCA9IFNJR05BTF9URVhUX0NIQU5HRUQ7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOworc3RhdGljIEdz
dFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktpdE1lZGlhU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCog
ZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKK3sKKyAgICBXZWJLaXRNZWRpYVNy
Yyogc291cmNlID0gV0VCS0lUX01FRElBX1NSQyhlbGVtZW50KTsKKyAgICBzd2l0Y2ggKHRyYW5z
aXRpb24pIHsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgorICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHNvdXJjZSwgIkRvd25ncmFkaW5nIHRvIFJFQURZIHN0YXRl
LCB0ZWFyaW5nIGRvd24gYWxsIHN0cmVhbXMuLi4iKTsKKyAgICAgICAgd2hpbGUgKCFzb3VyY2Ut
PnByaXYtPnN0cmVhbXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgd2ViS2l0TWVkaWFTcmNUZWFy
RG93blN0cmVhbShzb3VyY2UsIHNvdXJjZS0+cHJpdi0+c3RyZWFtcy5iZWdpbigpLT5rZXkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VE
OgorICAgICAgICBpZiAoc291cmNlLT5wcml2LT5pc1N0YXJ0ZWQoKSkgeworICAgICAgICAgICAg
R1NUX0ZJWE1FX09CSkVDVChzb3VyY2UsICJSZXN1bWluZyBzdGF0ZSBmcm9tIFJFQURZIC0+IFBB
VVNFRCBhZnRlciBhIGRvd25ncmFkZSBpcyBub3QgaW1wbGVtZW50ZWQuIEV4cGVjdCBmYWlsdXJl
LiIpOwogICAgICAgICB9Ci0gICAgICAgIHN0cmVhbS0+dHlwZSA9IFdlYkNvcmU6OkludmFsaWQ7
Ci0KLSAgICAgICAgaWYgKHNpZ25hbCAhPSAtMSkKLSAgICAgICAgICAgIGdfc2lnbmFsX2VtaXQo
R19PQkpFQ1Qoc291cmNlKSwgd2ViS2l0TWVkaWFTcmNTaWduYWxzW3NpZ25hbF0sIDAsIG51bGxw
dHIpOwotCi0gICAgICAgIHNvdXJjZS0+cHJpdi0+c3RyZWFtQ29uZGl0aW9uLm5vdGlmeU9uZSgp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKICAgICB9Ci0K
LSAgICBkZWxldGUgc3RyZWFtOworICAgIHJldHVybiBHU1RfRUxFTUVOVF9DTEFTUyh3ZWJraXRf
bWVkaWFfc3JjX3BhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZShlbGVtZW50LCB0cmFuc2l0aW9u
KTsKIH0KIAotdm9pZCB3ZWJLaXRNZWRpYVNyY0NoZWNrQWxsVHJhY2tzQ29uZmlndXJlZChXZWJL
aXRNZWRpYVNyYyogd2ViS2l0TWVkaWFTcmMpCitzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFT
cmNTZW5kRXZlbnQoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0RXZlbnQqIGV2ZW50KQogewotICAg
IGJvb2wgYWxsVHJhY2tzQ29uZmlndXJlZCA9IGZhbHNlOwotCi0gICAgR1NUX09CSkVDVF9MT0NL
KHdlYktpdE1lZGlhU3JjKTsKLSAgICBpZiAoIXdlYktpdE1lZGlhU3JjLT5wcml2LT5hbGxUcmFj
a3NDb25maWd1cmVkKSB7Ci0gICAgICAgIGFsbFRyYWNrc0NvbmZpZ3VyZWQgPSB0cnVlOwotICAg
ICAgICBmb3IgKFN0cmVhbSogc3RyZWFtIDogd2ViS2l0TWVkaWFTcmMtPnByaXYtPnN0cmVhbXMp
IHsKLSAgICAgICAgICAgIGlmIChzdHJlYW0tPnR5cGUgPT0gV2ViQ29yZTo6SW52YWxpZCkgewot
ICAgICAgICAgICAgICAgIGFsbFRyYWNrc0NvbmZpZ3VyZWQgPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFKGV2
ZW50KSkgeworICAgIGNhc2UgR1NUX0VWRU5UX1NFRUs6IHsKKyAgICAgICAgZG91YmxlIHJhdGU7
CisgICAgICAgIEdzdEZvcm1hdCBmb3JtYXQ7CisgICAgICAgIEdzdFNlZWtUeXBlIHN0YXJ0VHlw
ZTsKKyAgICAgICAgaW50NjRfdCBzdGFydDsKKyAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3NlZWso
ZXZlbnQsICZyYXRlLCAmZm9ybWF0LCBudWxscHRyLCAmc3RhcnRUeXBlLCAmc3RhcnQsIG51bGxw
dHIsIG51bGxwdHIpOworICAgICAgICBpZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSB8fCBz
dGFydFR5cGUgIT0gR1NUX1NFRUtfVFlQRV9TRVQpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9P
QkpFQ1QoZWxlbWVudCwgIlJlamVjdGluZyB1bnN1cHBvcnRlZCBzZWVrIGV2ZW50OiAlIiBHU1Rf
UFRSX0ZPUk1BVCwgZXZlbnQpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
Ci0gICAgICAgIGlmIChhbGxUcmFja3NDb25maWd1cmVkKQotICAgICAgICAgICAgd2ViS2l0TWVk
aWFTcmMtPnByaXYtPmFsbFRyYWNrc0NvbmZpZ3VyZWQgPSB0cnVlOworICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKGVsZW1lbnQsICJIYW5kbGluZyBzZWVrIGV2ZW50OiAlIiBHU1RfUFRSX0ZPUk1B
VCwgZXZlbnQpOworICAgICAgICB3ZWJLaXRNZWRpYVNyY1NlZWsoV0VCS0lUX01FRElBX1NSQyhl
bGVtZW50KSwgc3RhcnQsIHJhdGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAg
R1NUX09CSkVDVF9VTkxPQ0sod2ViS2l0TWVkaWFTcmMpOwotCi0gICAgaWYgKGFsbFRyYWNrc0Nv
bmZpZ3VyZWQpIHsKLSAgICAgICAgR1NUX0RFQlVHKCJBbGwgdHJhY2tzIGF0dGFjaGVkLiBDb21w
bGV0aW5nIGFzeW5jIHN0YXRlIGNoYW5nZSBvcGVyYXRpb24uIik7Ci0gICAgICAgIGdzdF9lbGVt
ZW50X25vX21vcmVfcGFkcyhHU1RfRUxFTUVOVCh3ZWJLaXRNZWRpYVNyYykpOwotICAgICAgICB3
ZWJLaXRNZWRpYVNyY0RvQXN5bmNEb25lKHdlYktpdE1lZGlhU3JjKTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKGVsZW1lbnQsICJSZWplY3RpbmcgdW5zdXBwb3J0ZWQg
ZXZlbnQ6ICUiIEdTVF9QVFJfRk9STUFULCBldmVudCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiB9CiAKLS8vIFVyaSBoYW5kbGVyIGludGVyZmFjZS4KLUdzdFVSSVR5cGUgd2ViS2l0
TWVkaWFTcmNVcmlHZXRUeXBlKEdUeXBlKQorLy8gVVJJIGhhbmRsZXIgaW50ZXJmYWNlLiBJdCdz
IG9ubHkgcHVycG9zZSBpcyBmb3IgdGhlIGVsZW1lbnQgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IHBs
YXliaW4gb24gIm1lZGlhc291cmNlYmxvYjoiCisvLyBVUklzLiBUaGUgYWN0dWFsIFVSSSBkb2Vz
IG5vdCBtYXR0ZXIuCitzdGF0aWMgR3N0VVJJVHlwZSB3ZWJLaXRNZWRpYVNyY1VyaUdldFR5cGUo
R1R5cGUpCiB7CiAgICAgcmV0dXJuIEdTVF9VUklfU1JDOwogfQogCi1jb25zdCBnY2hhciogY29u
c3QqIHdlYktpdE1lZGlhU3JjR2V0UHJvdG9jb2xzKEdUeXBlKQorc3RhdGljIGNvbnN0IGdjaGFy
KiBjb25zdCogd2ViS2l0TWVkaWFTcmNHZXRQcm90b2NvbHMoR1R5cGUpCiB7CiAgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIHByb3RvY29sc1tdID0geyJtZWRpYXNvdXJjZWJsb2IiLCBudWxscHRyIH07
CiAgICAgcmV0dXJuIHByb3RvY29sczsKIH0KIAotZ2NoYXIqIHdlYktpdE1lZGlhU3JjR2V0VXJp
KEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIpCitzdGF0aWMgZ2NoYXIqIHdlYktpdE1lZGlhU3JjR2V0
VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIpCiB7CiAgICAgV2ViS2l0TWVkaWFTcmMqIHNvdXJj
ZSA9IFdFQktJVF9NRURJQV9TUkMoaGFuZGxlcik7CiAgICAgZ2NoYXIqIHJlc3VsdDsKIAogICAg
IEdTVF9PQkpFQ1RfTE9DSyhzb3VyY2UpOwotICAgIHJlc3VsdCA9IGdfc3RyZHVwKHNvdXJjZS0+
cHJpdi0+bG9jYXRpb24uZ2V0KCkpOworICAgIHJlc3VsdCA9IGdfc3RyZHVwKHNvdXJjZS0+cHJp
di0+dXJpLmdldCgpKTsKICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzb3VyY2UpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLWdib29sZWFuIHdlYktpdE1lZGlhU3JjU2V0VXJpKEdzdFVSSUhhbmRs
ZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmksIEdFcnJvcioqKQorc3RhdGljIGdib29sZWFu
IHdlYktpdE1lZGlhU3JjU2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFy
KiB1cmksIEdFcnJvcioqKQogewogICAgIFdlYktpdE1lZGlhU3JjKiBzb3VyY2UgPSBXRUJLSVRf
TUVESUFfU1JDKGhhbmRsZXIpOwogCiAgICAgaWYgKEdTVF9TVEFURShzb3VyY2UpID49IEdTVF9T
VEFURV9QQVVTRUQpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzb3VyY2UsICJVUkkgY2Fu
IG9ubHkgYmUgc2V0IGluIHN0YXRlcyA8IFBBVVNFRCIpOwotICAgICAgICByZXR1cm4gRkFMU0U7
CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBHU1RfT0JKRUNUX0xPQ0soc291
cmNlKTsKLSAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzb3VyY2UtPnByaXY7Ci0g
ICAgcHJpdi0+bG9jYXRpb24gPSBudWxscHRyOwotICAgIGlmICghdXJpKSB7Ci0gICAgICAgIEdT
VF9PQkpFQ1RfVU5MT0NLKHNvdXJjZSk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQot
ICAgIFVSTCB1cmwoVVJMKCksIHVyaSk7Ci0KLSAgICBwcml2LT5sb2NhdGlvbiA9IEdVbmlxdWVQ
dHI8Z2NoYXI+KGdfc3RyZHVwKHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgc291
cmNlLT5wcml2LT51cmkgPSBHVW5pcXVlUHRyPGNoYXI+KGdfc3RyZHVwKHVyaSkpOwogICAgIEdT
VF9PQkpFQ1RfVU5MT0NLKHNvdXJjZSk7CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKLXZvaWQgd2Vi
S2l0TWVkaWFTcmNVcmlIYW5kbGVySW5pdChncG9pbnRlciBnSWZhY2UsIGdwb2ludGVyKQorc3Rh
dGljIHZvaWQgd2ViS2l0TWVkaWFTcmNVcmlIYW5kbGVySW5pdCh2b2lkKiBnSWZhY2UsIHZvaWQq
KQogewogICAgIEdzdFVSSUhhbmRsZXJJbnRlcmZhY2UqIGlmYWNlID0gKEdzdFVSSUhhbmRsZXJJ
bnRlcmZhY2UgKikgZ0lmYWNlOwogCkBAIC02NTYsMTk5ICs3ODEsNiBAQCB2b2lkIHdlYktpdE1l
ZGlhU3JjVXJpSGFuZGxlckluaXQoZ3BvaW50ZXIgZ0lmYWNlLCBncG9pbnRlcikKICAgICBpZmFj
ZS0+c2V0X3VyaSA9IHdlYktpdE1lZGlhU3JjU2V0VXJpOwogfQogCi1zdGF0aWMgdm9pZCBzZWVr
TmVlZHNEYXRhTWFpblRocmVhZChXZWJLaXRNZWRpYVNyYyogc291cmNlKQotewotICAgIEdTVF9E
RUJVRygiQnVmZmVyaW5nIG5lZWRlZCBiZWZvcmUgc2VlayIpOwotCi0gICAgQVNTRVJUKFdURjo6
aXNNYWluVGhyZWFkKCkpOwotCi0gICAgR1NUX09CSkVDVF9MT0NLKHNvdXJjZSk7Ci0gICAgTWVk
aWFUaW1lIHNlZWtUaW1lID0gc291cmNlLT5wcml2LT5zZWVrVGltZTsKLSAgICBXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UqIG1lZGlhUGxheWVyUHJpdmF0ZSA9IHNvdXJj
ZS0+cHJpdi0+bWVkaWFQbGF5ZXJQcml2YXRlOwotCi0gICAgaWYgKCFtZWRpYVBsYXllclByaXZh
dGUpIHsKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc291cmNlKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGZvciAoU3RyZWFtKiBzdHJlYW0gOiBzb3VyY2UtPnByaXYtPnN0cmVh
bXMpIHsKLSAgICAgICAgaWYgKHN0cmVhbS0+dHlwZSAhPSBXZWJDb3JlOjpJbnZhbGlkKQotICAg
ICAgICAgICAgc3RyZWFtLT5zb3VyY2VCdWZmZXItPnNldFJlYWR5Rm9yTW9yZVNhbXBsZXModHJ1
ZSk7Ci0gICAgfQotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNvdXJjZSk7Ci0gICAgbWVkaWFQbGF5
ZXJQcml2YXRlLT5ub3RpZnlTZWVrTmVlZHNEYXRhRm9yVGltZShzZWVrVGltZSk7Ci19Ci0KLXN0
YXRpYyB2b2lkIG5vdGlmeVJlYWR5Rm9yTW9yZVNhbXBsZXNNYWluVGhyZWFkKFdlYktpdE1lZGlh
U3JjKiBzb3VyY2UsIFN0cmVhbSogYXBwc3JjU3RyZWFtKQotewotICAgIEdTVF9PQkpFQ1RfTE9D
Syhzb3VyY2UpOwotCi0gICAgYXV0byBpdCA9IHN0ZDo6ZmluZChzb3VyY2UtPnByaXYtPnN0cmVh
bXMuYmVnaW4oKSwgc291cmNlLT5wcml2LT5zdHJlYW1zLmVuZCgpLCBhcHBzcmNTdHJlYW0pOwot
ICAgIGlmIChpdCA9PSBzb3VyY2UtPnByaXYtPnN0cmVhbXMuZW5kKCkpIHsKLSAgICAgICAgR1NU
X09CSkVDVF9VTkxPQ0soc291cmNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSogbWVkaWFQbGF5ZXJQcml2YXRl
ID0gc291cmNlLT5wcml2LT5tZWRpYVBsYXllclByaXZhdGU7Ci0gICAgaWYgKG1lZGlhUGxheWVy
UHJpdmF0ZSAmJiAhbWVkaWFQbGF5ZXJQcml2YXRlLT5zZWVraW5nKCkpCi0gICAgICAgIGFwcHNy
Y1N0cmVhbS0+c291cmNlQnVmZmVyLT5ub3RpZnlSZWFkeUZvck1vcmVTYW1wbGVzKCk7Ci0KLSAg
ICBHU1RfT0JKRUNUX1VOTE9DSyhzb3VyY2UpOwotfQotCi12b2lkIHdlYktpdE1lZGlhU3JjUmVz
dG9yZVRyYWNrcyhXZWJLaXRNZWRpYVNyYyogb2xkU291cmNlLCBXZWJLaXRNZWRpYVNyYyogbmV3
U291cmNlKQotewotICAgIG5ld1NvdXJjZS0+cHJpdi0+c3RyZWFtcyA9IFdURk1vdmUob2xkU291
cmNlLT5wcml2LT5zdHJlYW1zKTsKLSAgICBmb3IgKGF1dG8qIHN0cmVhbSA6IG5ld1NvdXJjZS0+
cHJpdi0+c3RyZWFtcykgewotICAgICAgICBzdHJlYW0tPnBhcmVudCA9IG5ld1NvdXJjZTsKLQot
ICAgICAgICBhdXRvIG9sZFNvdXJjZVBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3Rh
dGljX3BhZChzdHJlYW0tPmFwcHNyYywgInNyYyIpKTsKLSAgICAgICAgdW5zaWduZWQgcGFkSWQg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR1BPSU5URVJfVE9fSU5UKGdfb2JqZWN0X2dldF9kYXRh
KEdfT0JKRUNUKG9sZFNvdXJjZVBhZC5nZXQoKSksICJwYWRJZCIpKSk7Ci0KLSAgICAgICAgZ3N0
X29iamVjdF91bnJlZihzdHJlYW0tPmFwcHNyYyk7Ci0KLSAgICAgICAgLy8gRW5zdXJlIG93bmVy
c2hpcCBpcyBub3QgdHJhbnNmZXJlZCB0byB0aGUgYmluLiBUaGUgYXBwc3JjIGVsZW1lbnQgaXMg
bWFuYWdlZCBieSBpdHMgcGFyZW50IFN0cmVhbS4KLSAgICAgICAgc3RyZWFtLT5hcHBzcmMgPSBH
U1RfRUxFTUVOVF9DQVNUKGdzdF9vYmplY3RfcmVmX3NpbmsoZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKCJhcHBzcmMiLCBudWxscHRyKSkpOwotICAgICAgICBzdHJlYW0tPmFwcHNyY05lZWREYXRh
RmxhZyA9IHRydWU7Ci0KLSAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X2NhbGxiYWNrcyhHU1RfQVBQ
X1NSQyhzdHJlYW0tPmFwcHNyYyksICZlbmFibGVkQXBwc3JjQ2FsbGJhY2tzLCBzdHJlYW0tPnBh
cmVudCwgbnVsbHB0cik7Ci0gICAgICAgIGdzdF9hcHBfc3JjX3NldF9lbWl0X3NpZ25hbHMoR1NU
X0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpLCBGQUxTRSk7Ci0gICAgICAgIGdzdF9hcHBfc3JjX3Nl
dF9zdHJlYW1fdHlwZShHU1RfQVBQX1NSQyhzdHJlYW0tPmFwcHNyYyksIEdTVF9BUFBfU1RSRUFN
X1RZUEVfU0VFS0FCTEUpOwotCi0gICAgICAgIGdzdF9hcHBfc3JjX3NldF9tYXhfYnl0ZXMoR1NU
X0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpLCAyICogV1RGOjpNQik7Ci0gICAgICAgIGdfb2JqZWN0
X3NldChHX09CSkVDVChzdHJlYW0tPmFwcHNyYyksICJibG9jayIsIEZBTFNFLCAibWluLXBlcmNl
bnQiLCAyMCwgImZvcm1hdCIsIEdTVF9GT1JNQVRfVElNRSwgbnVsbHB0cik7Ci0KLSAgICAgICAg
Z3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKG5ld1NvdXJjZSksIHN0cmVhbS0+YXBwc3JjKTsKLQot
ICAgICAgICBhdXRvIHNvdXJjZVBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGlj
X3BhZChzdHJlYW0tPmFwcHNyYywgInNyYyIpKTsKLSAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEo
R19PQkpFQ1Qoc291cmNlUGFkLmdldCgpKSwgInBhZElkIiwgR0lOVF9UT19QT0lOVEVSKHBhZElk
KSk7Ci0gICAgfQotCi0gICAgbmV3U291cmNlLT5wcml2LT5udW1iZXJPZkF1ZGlvU3RyZWFtcyA9
IG9sZFNvdXJjZS0+cHJpdi0+bnVtYmVyT2ZBdWRpb1N0cmVhbXM7Ci0gICAgbmV3U291cmNlLT5w
cml2LT5udW1iZXJPZlRleHRTdHJlYW1zID0gb2xkU291cmNlLT5wcml2LT5udW1iZXJPZlRleHRT
dHJlYW1zOwotICAgIG5ld1NvdXJjZS0+cHJpdi0+bnVtYmVyT2ZWaWRlb1N0cmVhbXMgPSBvbGRT
b3VyY2UtPnByaXYtPm51bWJlck9mVmlkZW9TdHJlYW1zOwotICAgIG5ld1NvdXJjZS0+cHJpdi0+
bnVtYmVyT2ZQYWRzID0gb2xkU291cmNlLT5wcml2LT5udW1iZXJPZlBhZHM7Ci0gICAgbmV3U291
cmNlLT5wcml2LT5hbGxUcmFja3NDb25maWd1cmVkID0gb2xkU291cmNlLT5wcml2LT5hbGxUcmFj
a3NDb25maWd1cmVkOwotfQotCi12b2lkIHdlYktpdE1lZGlhU3JjU2lnbmFsVHJhY2tzKFdlYktp
dE1lZGlhU3JjKiBzb3VyY2UpCi17Ci0gICAgZm9yIChhdXRvKiBzdHJlYW0gOiBzb3VyY2UtPnBy
aXYtPnN0cmVhbXMpIHsKLSAgICAgICAgYXV0byBzb3VyY2VQYWQgPSBhZG9wdEdSZWYoZ3N0X2Vs
ZW1lbnRfZ2V0X3N0YXRpY19wYWQoc3RyZWFtLT5hcHBzcmMsICJzcmMiKSk7Ci0gICAgICAgIHdl
YktpdE1lZGlhU3JjTGlua1N0cmVhbVRvU3JjUGFkKHNvdXJjZVBhZC5nZXQoKSwgc3RyZWFtKTsK
LQotICAgICAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KHN0cmVhbS0+YXBw
c3JjKTsKLQotICAgICAgICBpbnQgc2lnbmFsID0gLTE7Ci0gICAgICAgIHN3aXRjaCAoc3RyZWFt
LT50eXBlKSB7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0
cmVhbWVyOjpWaWRlbzoKLSAgICAgICAgICAgIHNpZ25hbCA9IFNJR05BTF9WSURFT19DSEFOR0VE
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFTb3VyY2VT
dHJlYW1UeXBlR1N0cmVhbWVyOjpBdWRpbzoKLSAgICAgICAgICAgIHNpZ25hbCA9IFNJR05BTF9B
VURJT19DSEFOR0VEOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6
TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpUZXh0OgotICAgICAgICAgICAgc2lnbmFs
ID0gU0lHTkFMX1RFWFRfQ0hBTkdFRDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHNpZ25hbCAh
PSAtMSkKLSAgICAgICAgICAgIGdfc2lnbmFsX2VtaXQoR19PQkpFQ1Qoc3RyZWFtLT5wYXJlbnQp
LCB3ZWJLaXRNZWRpYVNyY1NpZ25hbHNbc2lnbmFsXSwgMCwgbnVsbHB0cik7Ci0gICAgfQotCi0g
ICAgaWYgKHNvdXJjZS0+cHJpdi0+c3RyZWFtcy5zaXplKCkpIHsKLSAgICAgICAgZ3N0X2VsZW1l
bnRfbm9fbW9yZV9wYWRzKEdTVF9FTEVNRU5UX0NBU1Qoc291cmNlKSk7Ci0gICAgICAgIHdlYktp
dE1lZGlhU3JjRG9Bc3luY0RvbmUoc291cmNlKTsKLSAgICB9Ci19Ci0KLXZvaWQgd2ViS2l0TWVk
aWFTcmNTZXRNZWRpYVBsYXllclByaXZhdGUoV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSwgV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFKiBtZWRpYVBsYXllclByaXZhdGUpCi17
Ci0gICAgR1NUX09CSkVDVF9MT0NLKHNvdXJjZSk7Ci0KLSAgICAvLyBTZXQgdG8gbnVsbHB0ciBv
biBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgZGVzdHJ1Y3Rpb24sIG5ldmVyIGEgZGFuZ2xp
bmcgcG9pbnRlci4KLSAgICBzb3VyY2UtPnByaXYtPm1lZGlhUGxheWVyUHJpdmF0ZSA9IG1lZGlh
UGxheWVyUHJpdmF0ZTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzb3VyY2UpOwotfQotCi12b2lk
IHdlYktpdE1lZGlhU3JjU2V0UmVhZHlGb3JTYW1wbGVzKFdlYktpdE1lZGlhU3JjKiBzb3VyY2Us
IGJvb2wgaXNSZWFkeSkKLXsKLSAgICBpZiAoc291cmNlKSB7Ci0gICAgICAgIEdTVF9PQkpFQ1Rf
TE9DSyhzb3VyY2UpOwotICAgICAgICBmb3IgKFN0cmVhbSogc3RyZWFtIDogc291cmNlLT5wcml2
LT5zdHJlYW1zKQotICAgICAgICAgICAgc3RyZWFtLT5zb3VyY2VCdWZmZXItPnNldFJlYWR5Rm9y
TW9yZVNhbXBsZXMoaXNSZWFkeSk7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNvdXJjZSk7
Ci0gICAgfQotfQotCi12b2lkIHdlYktpdE1lZGlhU3JjUHJlcGFyZVNlZWsoV2ViS2l0TWVkaWFT
cmMqIHNvdXJjZSwgY29uc3QgTWVkaWFUaW1lJiB0aW1lKQotewotICAgIEdTVF9PQkpFQ1RfTE9D
Syhzb3VyY2UpOwotICAgIHNvdXJjZS0+cHJpdi0+c2Vla1RpbWUgPSB0aW1lOwotICAgIHNvdXJj
ZS0+cHJpdi0+YXBwc3JjU2Vla0RhdGFDb3VudCA9IDA7Ci0gICAgc291cmNlLT5wcml2LT5hcHBz
cmNOZWVkRGF0YUNvdW50ID0gMDsKLQotICAgIGZvciAoU3RyZWFtKiBzdHJlYW0gOiBzb3VyY2Ut
PnByaXYtPnN0cmVhbXMpIHsKLSAgICAgICAgc3RyZWFtLT5hcHBzcmNOZWVkRGF0YUZsYWcgPSBm
YWxzZTsKLSAgICAgICAgLy8gRG9uJ3QgYWxsb3cgc2FtcGxlcyBhd2F5IGZyb20gdGhlIHNlZWtU
aW1lIHRvIGJlIGVucXVldWVkLgotICAgICAgICBzdHJlYW0tPmxhc3RFbnF1ZXVlZFRpbWUgPSB0
aW1lOwotICAgIH0KLQotICAgIC8vIFRoZSBwZW5kaW5nIGFjdGlvbiB3aWxsIGJlIHBlcmZvcm1l
ZCBpbiBlbmFibGVkQXBwc3JjU2Vla0RhdGEoKS4KLSAgICBzb3VyY2UtPnByaXYtPmFwcHNyY1Nl
ZWtEYXRhTmV4dEFjdGlvbiA9IE1lZGlhU291cmNlU2Vla1RvVGltZTsKLSAgICBHU1RfT0JKRUNU
X1VOTE9DSyhzb3VyY2UpOwotfQotCi1Hc3RQYWRQcm9iZVJldHVybiBpbml0aWFsU2Vla1NlZ21l
bnRGaXhlclByb2JlKEdzdFBhZCAqcGFkLCBHc3RQYWRQcm9iZUluZm8gKmluZm8sIGdwb2ludGVy
IHVzZXJEYXRhKQotewotICAgIEdzdEV2ZW50KiBldmVudCA9IEdTVF9QQURfUFJPQkVfSU5GT19F
VkVOVChpbmZvKTsKLSAgICBpZiAoR1NUX0VWRU5UX1RZUEUoZXZlbnQpID09IEdTVF9FVkVOVF9T
RUdNRU5UKSB7Ci0gICAgICAgIGNvbnN0IEdzdFNlZ21lbnQqIG9yaWdpbmFsU2VnbWVudCA9IG51
bGxwdHI7Ci0gICAgICAgIGNvbnN0IEdzdFNlZ21lbnQqIGZpeGVkU2VnbWVudCA9IHN0YXRpY19j
YXN0PEdzdFNlZ21lbnQqPih1c2VyRGF0YSk7Ci0gICAgICAgIGdzdF9ldmVudF9wYXJzZV9zZWdt
ZW50KGV2ZW50LCAmb3JpZ2luYWxTZWdtZW50KTsKLSAgICAgICAgR1NUX0RFQlVHKCJTZWdtZW50
IGF0ICVzOiAlIiBHU1RfU0VHTUVOVF9GT1JNQVQgIiwgcmVwbGFjZWQgYnkgJSIgR1NUX1NFR01F
TlRfRk9STUFULCBHU1RfRUxFTUVOVF9OQU1FKEdTVF9QQURfUEFSRU5UKHBhZCkpLCBvcmlnaW5h
bFNlZ21lbnQsIGZpeGVkU2VnbWVudCk7Ci0gICAgICAgIGdzdF9ldmVudF9yZXBsYWNlKHJlaW50
ZXJwcmV0X2Nhc3Q8R3N0RXZlbnQqKj4oJmluZm8tPmRhdGEpLCBnc3RfZXZlbnRfbmV3X3NlZ21l
bnQoZml4ZWRTZWdtZW50KSk7Ci0gICAgICAgIHJldHVybiBHU1RfUEFEX1BST0JFX1JFTU9WRTsK
LSAgICB9Ci0gICAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci19Ci0KLXZvaWQgd2ViS2l0TWVk
aWFTcmNQcmVwYXJlSW5pdGlhbFNlZWsoV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSwgZG91YmxlIHJh
dGUsIGNvbnN0IE1lZGlhVGltZSYgc3RhcnRUaW1lLCBjb25zdCBNZWRpYVRpbWUmIGVuZFRpbWUp
Ci17Ci0gICAgR1NUX09CSkVDVF9MT0NLKHNvdXJjZSk7Ci0gICAgTWVkaWFUaW1lIHNlZWtUaW1l
ID0gKHJhdGUgPj0gMCkgPyBzdGFydFRpbWUgOiBlbmRUaW1lOwotICAgIHNvdXJjZS0+cHJpdi0+
c2Vla1RpbWUgPSBzZWVrVGltZTsKLSAgICBzb3VyY2UtPnByaXYtPmFwcHNyY1NlZWtEYXRhQ291
bnQgPSAwOwotICAgIHNvdXJjZS0+cHJpdi0+YXBwc3JjTmVlZERhdGFDb3VudCA9IDA7Ci0KLSAg
ICBmb3IgKFN0cmVhbSogc3RyZWFtIDogc291cmNlLT5wcml2LT5zdHJlYW1zKSB7Ci0gICAgICAg
IHN0cmVhbS0+YXBwc3JjTmVlZERhdGFGbGFnID0gZmFsc2U7Ci0gICAgICAgIC8vIERvbid0IGFs
bG93IHNhbXBsZXMgYXdheSBmcm9tIHRoZSBzZWVrVGltZSB0byBiZSBlbnF1ZXVlZC4KLSAgICAg
ICAgc3RyZWFtLT5sYXN0RW5xdWV1ZWRUaW1lID0gc2Vla1RpbWU7Ci0gICAgfQotCi0gICAgLy8g
VGhlIHBlbmRpbmcgYWN0aW9uIHdpbGwgYmUgcGVyZm9ybWVkIGluIGVuYWJsZWRBcHBzcmNTZWVr
RGF0YSgpLgotICAgIHNvdXJjZS0+cHJpdi0+YXBwc3JjU2Vla0RhdGFOZXh0QWN0aW9uID0gTm90
aGluZzsKLQotICAgIEdVbmlxdWVQdHI8R3N0U2VnbWVudD4gc2VnbWVudChnc3Rfc2VnbWVudF9u
ZXcoKSk7Ci0gICAgc2VnbWVudC0+Zm9ybWF0ID0gR1NUX0ZPUk1BVF9USU1FOwotICAgIGdzdF9z
ZWdtZW50X2RvX3NlZWsoc2VnbWVudC5nZXQoKSwgcmF0ZSwgR1NUX0ZPUk1BVF9USU1FLAotICAg
ICAgICBzdGF0aWNfY2FzdDxHc3RTZWVrRmxhZ3M+KEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1Rf
U0VFS19GTEFHX0FDQ1VSQVRFKSwKLSAgICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIFdlYkNvcmU6
OnRvR3N0VW5zaWduZWQ2NFRpbWUoc3RhcnRUaW1lKSwKLSAgICAgICAgR1NUX1NFRUtfVFlQRV9T
RVQsIFdlYkNvcmU6OnRvR3N0VW5zaWduZWQ2NFRpbWUoZW5kVGltZSksIG51bGxwdHIpOwotCi0g
ICAgZm9yIChTdHJlYW0qIHN0cmVhbSA6IHNvdXJjZS0+cHJpdi0+c3RyZWFtcykgewotICAgICAg
ICAvLyBUaGlzIHByb2JlIHdpbGwgZml4IHRoZSBzZWdtZW50IGF1dG9nZW5lcmF0ZWQgYnkgYXBw
c3JjLgotICAgICAgICBHUmVmUHRyPEdzdFBhZD4gcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50
X2dldF9zdGF0aWNfcGFkKHN0cmVhbS0+YXBwc3JjLCAic3JjIikpOwotICAgICAgICBnc3RfcGFk
X2FkZF9wcm9iZShwYWQuZ2V0KCksIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFN
LAotICAgICAgICAgICAgaW5pdGlhbFNlZWtTZWdtZW50Rml4ZXJQcm9iZSwgZ3N0X3NlZ21lbnRf
Y29weShzZWdtZW50LmdldCgpKSwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZ3N0
X3NlZ21lbnRfZnJlZSkpOwotICAgICAgICBzdHJlYW0tPnNvdXJjZUJ1ZmZlci0+c2V0UmVhZHlG
b3JNb3JlU2FtcGxlcyh0cnVlKTsKLSAgICB9Ci0KLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzb3Vy
Y2UpOwotfQotCiBuYW1lc3BhY2UgV1RGIHsKIHRlbXBsYXRlIDw+IEdSZWZQdHI8V2ViS2l0TWVk
aWFTcmM+IGFkb3B0R1JlZihXZWJLaXRNZWRpYVNyYyogcHRyKQogewpAQCAtODY5LDcgKzgwMSw2
IEBAIHRlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPFdlYktpdE1lZGlhU3JjPihXZWJLaXRNZWRp
YVNyYyogcHRyKQogICAgIGlmIChwdHIpCiAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYocHRyKTsK
IH0KLX07Cit9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCi0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaAppbmRl
eCA5OTRmYTkyN2ZiNTk5MjJlZDdhY2JiODgzN2UzNTVhY2U3YTMwN2MxLi5hNTVhNTZmOTA2ZGM4
YmI3ZDZjNmRjZjI0OGFmMWJjY2FmMDc2MjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9X
ZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5oCkBAIC0zLDggKzMsOCBAQAogICogIENvcHlyaWdo
dCAoQykgMjAxMyBDb2xsYWJvcmEgTHRkLgogICogIENvcHlyaWdodCAoQykgMjAxMyBPcmFuZ2UK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFu
QGNlbnRyaWN1bGFyLmNvbT4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgTWV0cm9sb2dp
Y2FsIEdyb3VwIEIuVi4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgSWdhbGlhLCBTLkwK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYsIDIwMTgsIDIwMTksIDIwMjAsIDIwMjEgTWV0
cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYsIDIwMTgs
IDIwMTksIDIwMjAsIDIwMjEgSWdhbGlhLCBTLkwKICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTMx
LDE1ICszMSwxMyBAQAogI2luY2x1ZGUgIk1lZGlhU291cmNlUHJpdmF0ZS5oIgogI2luY2x1ZGUg
IlNvdXJjZUJ1ZmZlclByaXZhdGUuaCIKICNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlQ2xp
ZW50LmgiCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZh
dGVHU3RyZWFtZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0U7CiAKLWVudW0gTWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVh
bWVyIHsgSW52YWxpZCwgVW5rbm93biwgQXVkaW8sIFZpZGVvLCBUZXh0IH07Ci0KLX0KK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogR19CRUdJTl9ERUNMUwogCkBAIC00OSwzNSArNDcsMzAgQEAg
R19CRUdJTl9ERUNMUwogI2RlZmluZSBXRUJLSVRfSVNfTUVESUFfU1JDKG9iaikgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBXRUJLSVRfVFlQRV9NRURJQV9TUkMp
KQogI2RlZmluZSBXRUJLSVRfSVNfTUVESUFfU1JDX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNL
X0NMQVNTX1RZUEUgKChrbGFzcyksIFdFQktJVF9UWVBFX01FRElBX1NSQykpCiAKLXR5cGVkZWYg
c3RydWN0IF9XZWJLaXRNZWRpYVNyYyAgICAgICAgV2ViS2l0TWVkaWFTcmM7Ci10eXBlZGVmIHN0
cnVjdCBfV2ViS2l0TWVkaWFTcmNDbGFzcyAgIFdlYktpdE1lZGlhU3JjQ2xhc3M7Ci10eXBlZGVm
IHN0cnVjdCBfV2ViS2l0TWVkaWFTcmNQcml2YXRlIFdlYktpdE1lZGlhU3JjUHJpdmF0ZTsKK3N0
cnVjdCBXZWJLaXRNZWRpYVNyY1ByaXZhdGU7CiAKLXN0cnVjdCBfV2ViS2l0TWVkaWFTcmMgewot
ICAgIEdzdEJpbiBwYXJlbnQ7CitzdHJ1Y3QgV2ViS2l0TWVkaWFTcmMgeworICAgIEdzdEVsZW1l
bnQgcGFyZW50OwogCiAgICAgV2ViS2l0TWVkaWFTcmNQcml2YXRlICpwcml2OwogfTsKIAotc3Ry
dWN0IF9XZWJLaXRNZWRpYVNyY0NsYXNzIHsKLSAgICBHc3RCaW5DbGFzcyBwYXJlbnRDbGFzczsK
LQotICAgIC8vIE5vdGlmeSBhcHAgdGhhdCBudW1iZXIgb2YgYXVkaW8vdmlkZW8vdGV4dCBzdHJl
YW1zIGNoYW5nZWQuCi0gICAgdm9pZCAoKnZpZGVvQ2hhbmdlZCkoV2ViS2l0TWVkaWFTcmMqKTsK
LSAgICB2b2lkICgqYXVkaW9DaGFuZ2VkKShXZWJLaXRNZWRpYVNyYyopOwotICAgIHZvaWQgKCp0
ZXh0Q2hhbmdlZCkoV2ViS2l0TWVkaWFTcmMqKTsKK3N0cnVjdCBXZWJLaXRNZWRpYVNyY0NsYXNz
IHsKKyAgICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50Q2xhc3M7CiB9OwogCiBHVHlwZSB3ZWJraXRf
bWVkaWFfc3JjX2dldF90eXBlKHZvaWQpOwogCi12b2lkIHdlYktpdE1lZGlhU3JjUmVzdG9yZVRy
YWNrcyhXZWJLaXRNZWRpYVNyYyosIFdlYktpdE1lZGlhU3JjKik7Ci12b2lkIHdlYktpdE1lZGlh
U3JjU2lnbmFsVHJhY2tzKFdlYktpdE1lZGlhU3JjKik7Ci12b2lkIHdlYktpdE1lZGlhU3JjU2V0
TWVkaWFQbGF5ZXJQcml2YXRlKFdlYktpdE1lZGlhU3JjKiwgV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFKik7Cit2b2lkIHdlYktpdE1lZGlhU3JjRW1pdFN0cmVhbXMoV2Vi
S2l0TWVkaWFTcmMqIHNvdXJjZSwgY29uc3QgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpNZWRpYVNv
dXJjZVRyYWNrR1N0cmVhbWVyPj4mIHRyYWNrcyk7CiAKLXZvaWQgd2ViS2l0TWVkaWFTcmNQcmVw
YXJlU2VlayhXZWJLaXRNZWRpYVNyYyosIGNvbnN0IE1lZGlhVGltZSYpOwotdm9pZCB3ZWJLaXRN
ZWRpYVNyY1ByZXBhcmVJbml0aWFsU2VlayhXZWJLaXRNZWRpYVNyYyosIGRvdWJsZSByYXRlLCBj
b25zdCBNZWRpYVRpbWUmIHN0YXJ0VGltZSwgY29uc3QgTWVkaWFUaW1lJiBlbmRUaW1lKTsKLXZv
aWQgd2ViS2l0TWVkaWFTcmNTZXRSZWFkeUZvclNhbXBsZXMoV2ViS2l0TWVkaWFTcmMqLCBib29s
KTsKK3ZvaWQgd2ViS2l0TWVkaWFTcmNGbHVzaChXZWJLaXRNZWRpYVNyYyosIGNvbnN0IEF0b21T
dHJpbmcmIHN0cmVhbU5hbWUpOwogCiBHX0VORF9ERUNMUwogCituYW1lc3BhY2UgV1RGIHsKK3Rl
bXBsYXRlPD4gR1JlZlB0cjxXZWJLaXRNZWRpYVNyYz4gYWRvcHRHUmVmKFdlYktpdE1lZGlhU3Jj
KiBwdHIpOwordGVtcGxhdGU8PiBXZWJLaXRNZWRpYVNyYyogcmVmR1B0cjxXZWJLaXRNZWRpYVNy
Yz4oV2ViS2l0TWVkaWFTcmMqIHB0cik7Cit0ZW1wbGF0ZTw+IHZvaWQgZGVyZWZHUHRyPFdlYktp
dE1lZGlhU3JjPihXZWJLaXRNZWRpYVNyYyogcHRyKTsKK30gLy8gbmFtZXNwYWNlIFdURgorCiAj
ZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXJQcml2
YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dl
YktpdE1lZGlhU291cmNlR1N0cmVhbWVyUHJpdmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0MTNkZDNmZjZhYjE3NWMwYWJhNzY4ODMzNmMyMWE3MjEwNTlkM2I4Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXJQ
cml2YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgotICogQ29weXJpZ2h0IChDKSAyMDE2
IElnYWxpYSBTLkwKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJF
QU1FUikgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkKLQotI2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2
YXRlR1N0cmVhbWVyLmgiCi0jaW5jbHVkZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5oIgotI2luY2x1
ZGUgIk1haW5UaHJlYWROb3RpZmllci5oIgotI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGVH
U3RyZWFtZXIuaCIKLSNpbmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgotI2lu
Y2x1ZGUgIldlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmgiCi0KLSNpbmNsdWRlIDxnc3QvYXBw
L2dzdGFwcHNyYy5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U7Ci0KLX07Ci0KLXZvaWQg
d2ViS2l0TWVkaWFTcmNVcmlIYW5kbGVySW5pdChncG9pbnRlciwgZ3BvaW50ZXIpOwotCi0jZGVm
aW5lIFdFQktJVF9NRURJQV9TUkNfR0VUX1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dF
VF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9NRURJQV9TUkMsIFdlYktpdE1lZGlhU3JjUHJp
dmF0ZSkpCi0KLXR5cGVkZWYgc3RydWN0IF9TdHJlYW0gU3RyZWFtOwotCi1zdHJ1Y3QgX1N0cmVh
bSB7Ci0gICAgLy8gRmllbGRzIGZpbGxlZCB3aGVuIHRoZSBTdHJlYW0gaXMgY3JlYXRlZC4KLSAg
ICBXZWJLaXRNZWRpYVNyYyogcGFyZW50OwotCi0gICAgLy8gQXBwU3JjLiBOZXZlciBtb2RpZmll
ZCBhZnRlciBmaXJzdCBhc3NpZ25tZW50LgotICAgIEdzdEVsZW1lbnQqIGFwcHNyYzsKLQotICAg
IC8vIE5ldmVyIG1vZGlmaWVkIGFmdGVyIGZpcnN0IGFzc2lnbm1lbnQuCi0gICAgV2ViQ29yZTo6
U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lciogc291cmNlQnVmZmVyOwotCi0gICAgLy8gRmll
bGRzIGZpbGxlZCB3aGVuIHRoZSB0cmFjayBpcyBhdHRhY2hlZC4KLSAgICBXZWJDb3JlOjpNZWRp
YVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXIgdHlwZTsKLSAgICBHUmVmUHRyPEdzdENhcHM+IGNh
cHM7Ci0KLSAgICAvLyBPbmx5IGF1ZGlvLCB2aWRlbyBvciBub3RoaW5nIGF0IGEgZ2l2ZW4gdGlt
ZS4KLSAgICBSZWZQdHI8V2ViQ29yZTo6QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+IGF1ZGlv
VHJhY2s7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiB2
aWRlb1RyYWNrOwotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBwcmVzZW50YXRpb25TaXplOwotCi0g
ICAgLy8gVGhpcyBoZWxwcyBXZWJLaXRNZWRpYVNyY1ByaXZhdGUuYXBwc3JjTmVlZERhdGFDb3Vu
dCwgZW5zdXJpbmcgdGhhdCBuZWVkRGF0YXMgYXJlCi0gICAgLy8gY291bnRlZCBvbmx5IG9uY2Ug
cGVyIGVhY2ggYXBwc3JjLgotICAgIGJvb2wgYXBwc3JjTmVlZERhdGFGbGFnOwotCi0gICAgLy8g
VXNlZCB0byBlbmZvcmNlIGNvbnRpbnVpdHkgaW4gdGhlIGFwcGVuZGVkIGRhdGEgYW5kIGF2b2lk
IGJyZWFraW5nIHRoZSBkZWNvZGVyLgotICAgIC8vIE9ubHkgdXNlZCBmcm9tIHRoZSBtYWluIHRo
cmVhZC4KLSAgICBNZWRpYVRpbWUgbGFzdEVucXVldWVkVGltZTsKLX07Ci0KLWVudW0gewotICAg
IFBST1BfMCwKLSAgICBQUk9QX0xPQ0FUSU9OLAotICAgIFBST1BfTl9BVURJTywKLSAgICBQUk9Q
X05fVklERU8sCi0gICAgUFJPUF9OX1RFWFQsCi0gICAgUFJPUF9MQVNUCi19OwotCi1lbnVtIHsK
LSAgICBTSUdOQUxfVklERU9fQ0hBTkdFRCwKLSAgICBTSUdOQUxfQVVESU9fQ0hBTkdFRCwKLSAg
ICBTSUdOQUxfVEVYVF9DSEFOR0VELAotICAgIExBU1RfU0lHTkFMCi19OwotCi1lbnVtIE9uU2Vl
a0RhdGFBY3Rpb24gewotICAgIE5vdGhpbmcsCi0gICAgTWVkaWFTb3VyY2VTZWVrVG9UaW1lCi19
OwotCi1lbnVtIFdlYktpdE1lZGlhU3JjTWFpblRocmVhZE5vdGlmaWNhdGlvbiB7Ci0gICAgUmVh
ZHlGb3JNb3JlU2FtcGxlcyA9IDEgPDwgMCwKLSAgICBTZWVrTmVlZHNEYXRhID0gMSA8PCAxCi19
OwotCi1zdHJ1Y3QgX1dlYktpdE1lZGlhU3JjUHJpdmF0ZSB7Ci0gICAgLy8gVXNlZCB0byBjb29y
ZGluYXRlIHRoZSByZWxlYXNlIG9mIFN0cmVhbSB0cmFjayBpbmZvLgotICAgIExvY2sgc3RyZWFt
TG9jazsKLSAgICBDb25kaXRpb24gc3RyZWFtQ29uZGl0aW9uOwotCi0gICAgLy8gU3RyZWFtcyBh
cmUgb25seSBhZGRlZC9yZW1vdmVkIGluIHRoZSBtYWluIHRocmVhZC4KLSAgICBWZWN0b3I8U3Ry
ZWFtKj4gc3RyZWFtczsKLQotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGxvY2F0aW9uOwotICAgIGlu
dCBudW1iZXJPZkF1ZGlvU3RyZWFtczsKLSAgICBpbnQgbnVtYmVyT2ZWaWRlb1N0cmVhbXM7Ci0g
ICAgaW50IG51bWJlck9mVGV4dFN0cmVhbXM7Ci0gICAgYm9vbCBhc3luY1N0YXJ0OwotICAgIGJv
b2wgYWxsVHJhY2tzQ29uZmlndXJlZDsKLSAgICB1bnNpZ25lZCBudW1iZXJPZlBhZHM7Ci0KLSAg
ICBNZWRpYVRpbWUgc2Vla1RpbWU7Ci0KLSAgICAvLyBPbiBzZWVrLCB3ZSB3YWl0IGZvciBhbGwg
dGhlIHNlZWtEYXRhcywgdGhlbiBmb3IgYWxsIHRoZSBuZWVkRGF0YXMsIGFuZCB0aGVuIHJ1biB0
aGUgbmV4dEFjdGlvbi4KLSAgICBPblNlZWtEYXRhQWN0aW9uIGFwcHNyY1NlZWtEYXRhTmV4dEFj
dGlvbjsKLSAgICBpbnQgYXBwc3JjU2Vla0RhdGFDb3VudDsKLSAgICBpbnQgYXBwc3JjTmVlZERh
dGFDb3VudDsKLQotICAgIFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSog
bWVkaWFQbGF5ZXJQcml2YXRlOwotCi0gICAgUmVmUHRyPFdlYkNvcmU6Ok1haW5UaHJlYWROb3Rp
ZmllcjxXZWJLaXRNZWRpYVNyY01haW5UaHJlYWROb3RpZmljYXRpb24+PiBub3RpZmllcjsKLSAg
ICBHVW5pcXVlUHRyPEdzdEZsb3dDb21iaW5lcj4gZmxvd0NvbWJpbmVyOwotfTsKLQotZXh0ZXJu
IGd1aW50IHdlYktpdE1lZGlhU3JjU2lnbmFsc1tMQVNUX1NJR05BTF07Ci1leHRlcm4gR3N0QXBw
U3JjQ2FsbGJhY2tzIGVuYWJsZWRBcHBzcmNDYWxsYmFja3M7Ci1leHRlcm4gR3N0QXBwU3JjQ2Fs
bGJhY2tzIGRpc2FibGVkQXBwc3JjQ2FsbGJhY2tzOwotCi12b2lkIHdlYktpdE1lZGlhU3JjVXJp
SGFuZGxlckluaXQoZ3BvaW50ZXIgZ0lmYWNlLCBncG9pbnRlciBpZmFjZURhdGEpOwotdm9pZCB3
ZWJLaXRNZWRpYVNyY0ZpbmFsaXplKEdPYmplY3QqKTsKLXZvaWQgd2ViS2l0TWVkaWFTcmNTZXRQ
cm9wZXJ0eShHT2JqZWN0KiwgZ3VpbnQgcHJvcGVydHlJZCwgY29uc3QgR1ZhbHVlKiwgR1BhcmFt
U3BlYyopOwotdm9pZCB3ZWJLaXRNZWRpYVNyY0dldFByb3BlcnR5KEdPYmplY3QqLCBndWludCBw
cm9wZXJ0eUlkLCBHVmFsdWUqLCBHUGFyYW1TcGVjKik7Ci12b2lkIHdlYktpdE1lZGlhU3JjRG9B
c3luY1N0YXJ0KFdlYktpdE1lZGlhU3JjKik7Ci12b2lkIHdlYktpdE1lZGlhU3JjRG9Bc3luY0Rv
bmUoV2ViS2l0TWVkaWFTcmMqKTsKLUdzdFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktpdE1lZGlhU3Jj
Q2hhbmdlU3RhdGUoR3N0RWxlbWVudCosIEdzdFN0YXRlQ2hhbmdlKTsKLWdpbnQ2NCB3ZWJLaXRN
ZWRpYVNyY0dldFNpemUoV2ViS2l0TWVkaWFTcmMqKTsKLWdib29sZWFuIHdlYktpdE1lZGlhU3Jj
UXVlcnlXaXRoUGFyZW50KEdzdFBhZCosIEdzdE9iamVjdCosIEdzdFF1ZXJ5Kik7Ci12b2lkIHdl
YktpdE1lZGlhU3JjVXBkYXRlUHJlc2VudGF0aW9uU2l6ZShHc3RDYXBzKiwgU3RyZWFtKik7Ci12
b2lkIHdlYktpdE1lZGlhU3JjTGlua1N0cmVhbVRvU3JjUGFkKEdzdFBhZCosIFN0cmVhbSopOwot
dm9pZCB3ZWJLaXRNZWRpYVNyY0xpbmtTb3VyY2VQYWQoR3N0UGFkKiwgR3N0Q2FwcyosIFN0cmVh
bSopOwotdm9pZCB3ZWJLaXRNZWRpYVNyY0ZyZWVTdHJlYW0oV2ViS2l0TWVkaWFTcmMqLCBTdHJl
YW0qKTsKLXZvaWQgd2ViS2l0TWVkaWFTcmNDaGVja0FsbFRyYWNrc0NvbmZpZ3VyZWQoV2ViS2l0
TWVkaWFTcmMqKTsKLUdzdFVSSVR5cGUgd2ViS2l0TWVkaWFTcmNVcmlHZXRUeXBlKEdUeXBlKTsK
LWNvbnN0IGdjaGFyKiBjb25zdCogd2ViS2l0TWVkaWFTcmNHZXRQcm90b2NvbHMoR1R5cGUpOwot
Z2NoYXIqIHdlYktpdE1lZGlhU3JjR2V0VXJpKEdzdFVSSUhhbmRsZXIqKTsKLWdib29sZWFuIHdl
YktpdE1lZGlhU3JjU2V0VXJpKEdzdFVSSUhhbmRsZXIqLCBjb25zdCBnY2hhciosIEdFcnJvcioq
KTsKLQotI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYjc1MGIyZmNkOGM1OTY5ZjlkYzJiMzljZDkzNTFh
MmE5MjQ0MWEzMC4uMjllY2NiZmI3NmNhMDE3Y2Q1MTMwM2RkMzljMzY4YWFhYjZjYjlmNSAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE2IEBACisyMDIxLTA0LTI5ICBBbGljaWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNv
bT4KKworICAgICAgICBbTVNFXVtHU3RyZWFtZXJdIFdlYktpdE1lZGlhU3JjIHJld29yayB2Mgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1MTkyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgWGFiaWVyIFJvZHJpZ3Vlei1DYWx2YXIuCisKKyAgICAgICAg
V2ViS2l0TWVkaWFTcmMgaXMgYSBHT2JqZWN0IGNsYXNzIGFuZCBuZWVkcyB0byBmb2xsb3cgc29t
ZSBHT2JqZWN0CisgICAgICAgIGNvbnZlbnRpb25zIHRoYXQgY29uZmxpY3Qgd2l0aCBXZWJLaXQn
cy4gTWFrZSB0aGUgY2hlY2tlciBhd2FyZSBvZgorICAgICAgICB0aGlzLgorCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5OgorCiAyMDIxLTA0LTI2ICBXZW5zb24g
SHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFN1YmRpdmlkZSBpbWFn
ZSBvdmVybGF5IHRleHQgaW50byBvbmUgb3IgbW9yZSBlbGVtZW50cyBwZXIgbGluZQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CmluZGV4IDU3YzA0ZWE2ZGRhNTAxNTg2MWIw
MDFjOTgzNjhiNTMzN2I4MmY0MzYuLmZkYThiMGYyMzM1MTg1MjcwNTkwMWU5MDdiYjczMDg1MGM2
ZjMyNjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKQEAgLTIzNSw2
ICsyMzUsNyBAQCBfUEFUSF9SVUxFU19TUEVDSUZJRVIgPSBbCiAgICAgICBvcy5wYXRoLmpvaW4o
J1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ2dyYXBoaWNzJywgJ2dzdHJlYW1lcics
ICdXZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwJyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1Nv
dXJjZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ2dyYXBoaWNzJywgJ2dzdHJlYW1lcicsICdX
ZWJLaXRBdWRpb1NpbmtHU3RyZWFtZXIuY3BwJyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJj
ZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ2dyYXBoaWNzJywgJ2dzdHJlYW1lcicsICdXZWJL
aXRBdWRpb1NpbmtHU3RyZWFtZXIuaCcpLAorICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAn
V2ViQ29yZScsICdwbGF0Zm9ybScsICdncmFwaGljcycsICdnc3RyZWFtZXInLCAnbXNlJywgJ1dl
YktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmNwcCcpLAogICAgICAgb3MucGF0aC5qb2luKCdTb3Vy
Y2UnLCAnV2ViQ29yZScsICdwbGF0Zm9ybScsICdhdWRpbycsICdnc3RyZWFtZXInLCAnV2ViS2l0
V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwJyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJj
ZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ21lZGlhc3RyZWFtJywgJ2dzdHJlYW1lcicsICdH
U3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5oJyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJj
ZScsICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ21lZGlhc3RyZWFtJywgJ2dzdHJlYW1lcicsICdH
U3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAnKSwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBmNzA2ZjYwNjg5MWY2OThi
NzM0NGQ2NTQ0YTk1YzhlNjgzM2M4YzM5Li45ZjgyZDY4YWM1YjM0YmZlOTI0ODBlMGQ3MDJjNDk2
MmFhNjhkNjM2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMDQtMjkgIEFsaWNpYSBCb3lh
IEdhcmPDrWEgIDxhYm95YUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtNU0VdW0dTdHJlYW1lcl0g
V2ViS2l0TWVkaWFTcmMgcmV3b3JrIHYyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjUxOTIKKworICAgICAgICBSZXZpZXdlZCBieSBYYWJpZXIgUm9k
cmlndWV6LUNhbHZhci4KKworICAgICAgICBVcGRhdGUgZXhwZWN0YXRpb25zLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHBsYXRmb3JtL2ds
aWIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3Vy
Y2UtYXBwZW5kLWJ1ZmZlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorCiAyMDIxLTA0LTIxICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtjc3MtZmxl
eGJveF0gcGVyY2VudCBjaGlsZHJlbiBkb24ndCByZXNvbHZlIGFnYWluc3QgdGhlIGZsZXggYmFz
aXMgb24gYSBmdWxseSBpbmZsZXhpYmxlIGl0ZW0gd2l0aCBmaXhlZCBmbGV4LWJhc2lzCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZGIzZDNkNzdkOGI1
NThiNWVhMzE2NjljNjZiZTQ4OWE0YmJkOTI5Ni4uMGQ4ZWUyN2YyMWM2NDhiOTIwYjcwZDEzZjA0
NmEyYWMwNWU3MGE3YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9UZXN0
RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0
aW9ucwpAQCAtNTUwLDcgKzU1MCw2IEBAIHdlYmtpdC5vcmcvYi8yMTAzODUgZmFzdC9tZWRpYXN0
cmVhbS9zdHJlYW0tc3dpdGNoLmh0bWwgWyBDcmFzaCBUaW1lb3V0IFBhc3MgXQogd2Via2l0Lm9y
Zy9iLzIxMDUyOCBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLU1lZGlhRWxlbWVudC1zZXRP
YmplY3QtbnVsbC5odG1sIFsgQ3Jhc2ggUGFzcyBdCiB3ZWJraXQub3JnL2IvMjEwNTI4IGZhc3Qv
bWVkaWFzdHJlYW0vbWVkaWFzdHJlYW10cmFjay12aWRlby1mcmFtZVJhdGUtY2xvbmUtZGVjcmVh
c2luZy5odG1sIFsgQ3Jhc2ggUGFzcyBdCiAKLXdlYmtpdC5vcmcvYi8yMDMwNzggbWVkaWEvbWVk
aWEtc291cmNlL21lZGlhLXNvdXJjZS1yZW1vdmUtdW5sb2FkLWNyYXNoLmh0bWwgWyBDcmFzaCBU
aW1lb3V0IFBhc3MgXQogd2Via2l0Lm9yZy9iLzIxODMxNyBtZWRpYS9tZWRpYS1zb3VyY2UvbWVk
aWEtc291cmNlLXRyYWNraWQtY2hhbmdlLmh0bWwgWyBGYWlsdXJlIF0KIAogd2Via2l0Lm9yZy9i
LzIxMDUyOCBtZWRpYS92aWRlby1zcmMtYmxvYi1yZXBsYXkuaHRtbCBbIENyYXNoIFBhc3MgXQpA
QCAtNTgwLDcgKzU3OSw2IEBAIHdlYmtpdC5vcmcvYi8yMjQ3NjcgaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtY2hhCiAKICMgU2VlIGFsc28g
YnVnICMxNzU1NzguCiB3ZWJraXQub3JnL2IvMTY3MTA4IGltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWFjdGl2ZXNvdXJjZWJ1ZmZlcnMuaHRt
bCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzE2NzEwOCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1hcHBlbmQtYnVmZmVyLmh0bWwgWyBG
YWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xNjcxMDggaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtYXZ0cmFja3MuaHRtbCBbIEZhaWx1cmUgXQog
d2Via2l0Lm9yZy9iLzE2NzEwOCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlh
LXNvdXJjZS9tZWRpYXNvdXJjZS1idWZmZXJlZC5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3Jn
L2IvMTY3MTA4IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21l
ZGlhc291cmNlLWNoYW5nZXR5cGUuaHRtbCBbIEZhaWx1cmUgQ3Jhc2ggXQpAQCAtMjE4Miw5ICsy
MTgwLDggQEAgd2Via2l0Lm9yZy9iLzIxMTk0MCBmYXN0L3RleHQvbXVsdGlwbGUtY29kZXVuaXQt
dmVydGljYWwtdXByaWdodC5odG1sIFsgSW1hZ2VPbmwKIHdlYmtpdC5vcmcvYi8xNjcxMDggaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2Utc2Vx
dWVuY2Vtb2RlLWFwcGVuZC1idWZmZXIuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzE2
NzEwOCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNv
dXJjZS1zZWVrYWJsZS5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMTk3NzExIGltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWNvcnJl
Y3QtZnJhbWVzLmh0bWwgWyBQYXNzIFRpbWVvdXQgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMjAz
MDc4IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21lZGlhc291
cmNlLXNlZWstYmV5b25kLWR1cmF0aW9uLmh0bWwgWyBUaW1lb3V0IENyYXNoIEZhaWx1cmUgXQog
d2Via2l0Lm9yZy9iLzIxNDM0OSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlh
LXNvdXJjZS9tZWRpYXNvdXJjZS1jaGFuZ2V0eXBlLXBsYXktbmVnYXRpdmUuaHRtbCBbIENyYXNo
IEZhaWx1cmUgUGFzcyBdCi13ZWJraXQub3JnL2IvMjIwMDgzIFsgRGVidWcgXSBtZWRpYS9tZWRp
YS1zb3VyY2UvbWVkaWEtc291cmNlLXVubmVjZXNzYXJ5LXNlZWstc2Vla2VkLmh0bWwgWyBQYXNz
IENyYXNoIF0KK3dlYmtpdC5vcmcvYi8yMDMwNzggaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2Utc2Vlay1iZXlvbmQtZHVyYXRpb24uaHRtbCBb
IEZhaWx1cmUgXQogCiB3ZWJraXQub3JnL2IvMjE5MjI1IGh0dHAvdGVzdHMvaW5zcGVjdG9yL2Rv
bS9kaXNjb25uZWN0LWRvbS10cmVlLWFmdGVyLW1haW4tZnJhbWUtbmF2aWdhdGlvbi5odG1sIFsg
RmFpbHVyZSBQYXNzIF0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1h
cHBlbmQtYnVmZmVyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtYXBw
ZW5kLWJ1ZmZlci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDMwODhmYWUyZTg5OTBhZTEwNzgz
ZjhhY2FkOTdiMjQ3NGNkNGNiYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL2dsaWIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVk
aWFzb3VyY2UtYXBwZW5kLWJ1ZmZlci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNSBAQAorCitQ
QVNTIFRlc3QgU291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcigpIGV2ZW50IGRpc3BhdGNoaW5nLgor
UEFTUyBUZXN0IFNvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoKSBjYWxsIGR1cmluZyBhIHBlbmRp
bmcgYXBwZW5kQnVmZmVyKCkuCitQQVNTIFRlc3QgU291cmNlQnVmZmVyLmFib3J0KCkgY2FsbCBk
dXJpbmcgYSBwZW5kaW5nIGFwcGVuZEJ1ZmZlcigpLgorUEFTUyBUZXN0IFNvdXJjZUJ1ZmZlci5h
cHBlbmRCdWZmZXIoKSB0cmlnZ2VyaW5nIGFuICdlbmRlZCcgdG8gJ29wZW4nIHRyYW5zaXRpb24u
CitQQVNTIFRlc3QgemVybyBieXRlIFNvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoKSBjYWxsIHRy
aWdnZXJpbmcgYW4gJ2VuZGVkJyB0byAnb3BlbicgdHJhbnNpdGlvbi4KK1BBU1MgVGVzdCBNZWRp
YVNvdXJjZS5yZW1vdmVTb3VyY2VCdWZmZXIoKSBjYWxsIGR1cmluZyBhIHBlbmRpbmcgYXBwZW5k
QnVmZmVyKCkuCitQQVNTIFRlc3Qgc2V0IE1lZGlhU291cmNlLmR1cmF0aW9uIGR1cmluZyBhIHBl
bmRpbmcgYXBwZW5kQnVmZmVyKCkgZm9yIG9uZSBvZiBpdHMgU291cmNlQnVmZmVycy4KK1BBU1Mg
VGVzdCBNZWRpYVNvdXJjZS5lbmRPZlN0cmVhbSgpIGR1cmluZyBhIHBlbmRpbmcgYXBwZW5kQnVm
ZmVyKCkgZm9yIG9uZSBvZiBpdHMgU291cmNlQnVmZmVycy4KK1BBU1MgVGVzdCBzZXQgU291cmNl
QnVmZmVyLnRpbWVzdGFtcE9mZnNldCBkdXJpbmcgYSBwZW5kaW5nIGFwcGVuZEJ1ZmZlcigpLgor
UEFTUyBUZXN0IGFwcGVuZGluZyBhbiBlbXB0eSBBcnJheUJ1ZmZlclZpZXcuCitQQVNTIFRlc3Qg
YXBwZW5kaW5nIGEgbmV1dGVyZWQgQXJyYXlCdWZmZXJWaWV3LgorUEFTUyBUZXN0IGFwcGVuZGlu
ZyBhbiBlbXB0eSBBcnJheUJ1ZmZlci4KK1BBU1MgVGVzdCBhcHBlbmRpbmcgYSBuZXV0ZXJlZCBB
cnJheUJ1ZmZlci4KK1BBU1MgVGVzdCBhcHBlbmRCdWZmZXIgd2l0aCBwYXJ0aWFsIGluaXQgc2Vn
bWVudHMuCitQQVNTIFRlc3QgYXBwZW5kQnVmZmVyIHdpdGggcGFydGlhbCBtZWRpYSBzZWdtZW50
cy4KK0ZBSUwgVGVzdCBhcHBlbmRCdWZmZXIgZXZlbnRzIG9yZGVyLiBhc3NlcnRfdHJ1ZTogZXhw
ZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UKK1BBU1MgVGVzdCBhYm9ydCBpbiB0aGUgbWlkZGxlIG9mIGFu
IGluaXRpYWxpemF0aW9uIHNlZ21lbnQuCitQQVNTIFRlc3QgYWJvcnQgYWZ0ZXIgcmVtb3Zpbmcg
c291cmNlYnVmZmVyLgorUEFTUyBUZXN0IGFib3J0IGFmdGVyIHJlYWR5U3RhdGUgaXMgZW5kZWQg
Zm9sbG93aW5nIGluaXQgc2VnbWVudCBhbmQgbWVkaWEgc2VnbWVudC4KK1BBU1MgVGVzdCBhYm9y
dCBhZnRlciBhcHBlbmRCdWZmZXIgdXBkYXRlIGVuZHMuCitQQVNTIFRlc3QgYXBwZW5kaW5nIG51
bGwuCitQQVNTIFRlc3QgYXBwZW5kaW5nIGFmdGVyIHJlbW92ZVNvdXJjZUJ1ZmZlcigpLgorRkFJ
TCBUZXN0IHNsb3cgYXBwZW5kaW5nIGRvZXMgbm90IHRyaWdnZXIgc3RhbGxlZCBldmVudHMuIGFz
c2VydF91bnJlYWNoZWQ6IFVuZXhwZWN0ZWQgJ3N0YWxsZWQnIGV2ZW50LiBSZWFjaGVkIHVucmVh
Y2hhYmxlIGNvZGUKKwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>